UNPKG

prettier-plugin-pkg

Version:

An opinionated package.json formatter plugin for Prettier

254 lines 4.72 kB
import { alphabetSort, sortObject } from '../utils.js'; export const dependencyNames = [ 'bundledDependencies', 'peerDependencies', 'peerDependenciesMeta', 'dependencies', 'dependenciesMeta', 'optionalDependencies', 'devDependencies', 'overrides', 'resolutions', ]; const NPM_SORTS = [ '$schema', 'name', 'version', 'description', 'keywords', 'homepage', 'bugs', 'license', 'author', 'contributors', 'funding', 'files', 'exports', 'main', 'browser', 'bin', 'man', 'directories', 'repository', 'scripts', 'config', 'dependencies', 'devDependencies', 'peerDependencies', 'peerDependenciesMeta', 'bundleDependencies', 'optionalDependencies', 'overrides', 'engines', 'os', 'cpu', 'libc', 'devEngines', 'private', 'publishConfig', 'workspaces', ]; const NPM_PLUS_SORTS = [ '$schema', 'name', 'displayName', 'version', 'private', 'description', 'categories', 'keywords', 'homepage', 'bugs', 'repository', 'funding', 'license', 'qna', 'author', 'maintainers', 'contributors', 'publisher', 'sideEffects', 'type', 'imports', 'exports', 'main', 'svelte', 'umd:main', 'jsdelivr', 'unpkg', 'module', 'source', 'jsnext:main', 'browser', 'react-native', 'types', 'typesVersions', 'typings', 'style', 'example', 'examplestyle', 'assets', 'bin', 'man', 'directories', 'files', 'workspaces', 'binary', 'scripts', 'betterScripts', 'contributes', 'activationEvents', 'husky', 'simple-git-hooks', 'pre-commit', 'commitlint', 'lint-staged', 'nano-staged', 'config', 'nodemonConfig', 'browserify', 'babel', 'browserslist', 'xo', 'prettier', 'eslintConfig', 'eslintIgnore', 'npmpackagejsonlint', 'release', 'remarkConfig', 'stylelint', 'ava', 'jest', 'mocha', 'nyc', 'tap', 'oclif', 'resolutions', 'dependencies', 'devDependencies', 'dependenciesMeta', 'peerDependencies', 'peerDependenciesMeta', 'optionalDependencies', 'bundledDependencies', 'bundleDependencies', 'extensionPack', 'extensionDependencies', 'flat', 'packageManager', 'engines', 'engineStrict', 'volta', 'languageName', 'os', 'cpu', 'preferGlobal', 'publishConfig', 'icon', 'badges', 'galleryBanner', 'preview', 'markdown', 'pnpm', ]; const primary = [ '$schema', 'name', 'version', 'type', 'flat', 'displayName', 'description', 'categories', 'repository', 'homepage', 'bugs', 'author', 'publisher', 'maintainers', 'contributors', 'donate', 'funding', 'sponsor', 'license', 'preview', 'private', 'workspaces', 'languageName', 'packageManager', 'engines', 'cpu', 'os', 'libc', 'devEngines', 'man', 'bin', 'main', 'types', 'typings', 'typesVersions', 'module', 'imports', 'exports', 'esnext', 'es2020', 'esm2020', 'fesm2020', 'es2015', 'esm2015', 'fesm2015', 'es5', 'esm5', 'fesm5', 'browser', 'umd', 'jsdelivr', 'unpkg', 'directories', 'files', 'keywords', 'scripts', 'config', ...dependencyNames, 'publishConfig', 'sideEffects', 'icon', 'badges', 'galleryBanner', 'activationEvents', 'contributes', 'markdown', 'qna', 'extensionPack', 'extensionDependencies', 'extensionKind', ]; const DEFAULT_SORT_ORDERS = { npm: NPM_SORTS, 'npm-plus': NPM_PLUS_SORTS, }; const uniqueArray = (arr) => { return [...new Set(arr)]; }; export const sort = (props, options) => { let { packageSortOrder, packageSortOrderPreset } = options; const defaultSortOrder = (packageSortOrderPreset && DEFAULT_SORT_ORDERS[packageSortOrderPreset]) || []; packageSortOrder = uniqueArray([ ...(packageSortOrder ?? []), ...defaultSortOrder, ...primary, ]); const others = []; const known = props.filter(prop => { if (packageSortOrder.includes(prop.key.value)) { return true; } others.push(prop); return false; }); known.sort((a, b) => alphabetSort(packageSortOrder.indexOf(a.key.value), packageSortOrder.indexOf(b.key.value))); others.sort(sortObject); return [...known, ...others]; }; //# sourceMappingURL=sort.js.map