prettier-package-json
Advanced tools
Comparing version 2.6.0 to 2.8.0
@@ -28,2 +28,3 @@ "use strict"; | ||
*/ | ||
'exports', | ||
'main', | ||
@@ -30,0 +31,0 @@ 'module', |
@@ -21,2 +21,3 @@ "use strict"; | ||
var defaultOptions_1 = require("./defaultOptions"); | ||
var sort_dependencies_1 = __importDefault(require("./sort-dependencies")); | ||
var sort_contributors_1 = __importDefault(require("./sort-contributors")); | ||
@@ -27,4 +28,4 @@ var sort_files_1 = __importDefault(require("./sort-files")); | ||
var options = getConfig(opts); | ||
var json = __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, packageJson), sort_contributors_1["default"]('author', packageJson, opts)), sort_contributors_1["default"]('maintainers', packageJson, __assign(__assign({}, opts), { enforceMultiple: true }))), sort_contributors_1["default"]('contributors', packageJson, __assign(__assign({}, opts), { enforceMultiple: true }))), sort('man', packageJson)), sort('bin', packageJson)), sort_files_1["default"](packageJson)), sort('directories', packageJson)), sort_scripts_1["default"](packageJson.scripts)), sort('config', packageJson)), sort('optionalDependencies', packageJson)), sort('dependencies', packageJson)), sort('bundleDependencies', packageJson)), sort('bundledDependencies', packageJson)), sort('peerDependencies', packageJson)), sort('devDependencies', packageJson)), sort('keywords', packageJson)), sort('engines', packageJson)), sort('os', packageJson)), sort('cpu', packageJson)), sort('publishConfig', packageJson)); | ||
return stringify(sort_object_keys_1["default"](json, options.keyOrder), options); | ||
var json = __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, packageJson), (0, sort_contributors_1["default"])('author', packageJson, opts)), (0, sort_contributors_1["default"])('maintainers', packageJson, __assign(__assign({}, opts), { enforceMultiple: true }))), (0, sort_contributors_1["default"])('contributors', packageJson, __assign(__assign({}, opts), { enforceMultiple: true }))), sort('man', packageJson)), sort('bin', packageJson)), (0, sort_files_1["default"])(packageJson)), sort('directories', packageJson)), (0, sort_scripts_1["default"])(packageJson.scripts)), sort('config', packageJson)), (0, sort_dependencies_1["default"])('optionalDependencies', packageJson)), (0, sort_dependencies_1["default"])('dependencies', packageJson)), (0, sort_dependencies_1["default"])('bundleDependencies', packageJson)), (0, sort_dependencies_1["default"])('bundledDependencies', packageJson)), (0, sort_dependencies_1["default"])('peerDependencies', packageJson)), (0, sort_dependencies_1["default"])('devDependencies', packageJson)), sort('keywords', packageJson)), sort('engines', packageJson)), sort('os', packageJson)), sort('cpu', packageJson)), sort('publishConfig', packageJson)); | ||
return stringify((0, sort_object_keys_1["default"])(json, options.keyOrder), options); | ||
} | ||
@@ -45,3 +46,3 @@ exports.format = format; | ||
function getConfig(options) { | ||
var explorer = cosmiconfig_1.cosmiconfigSync('prettier-package-json'); | ||
var explorer = (0, cosmiconfig_1.cosmiconfigSync)('prettier-package-json'); | ||
var result = explorer.search(); | ||
@@ -62,5 +63,5 @@ return __assign(__assign(__assign({}, defaultOptions_1.defaultOptions), result === null || result === void 0 ? void 0 : result.config), options); | ||
var keys = Object.keys(input); | ||
return keys.length === 0 ? {} : (_b = {}, _b[key] = sort_object_keys_1["default"](input, keys.sort()), _b); | ||
return keys.length === 0 ? {} : (_b = {}, _b[key] = (0, sort_object_keys_1["default"])(input, keys.sort()), _b); | ||
} | ||
return {}; | ||
} |
"use strict"; | ||
var __spreadArray = (this && this.__spreadArray) || function (to, from) { | ||
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) | ||
to[j] = from[i]; | ||
return to; | ||
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { | ||
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { | ||
if (ar || !(i in from)) { | ||
if (!ar) ar = Array.prototype.slice.call(from, 0, i); | ||
ar[i] = from[i]; | ||
} | ||
} | ||
return to.concat(ar || Array.prototype.slice.call(from)); | ||
}; | ||
@@ -34,4 +38,4 @@ var __importDefault = (this && this.__importDefault) || function (mod) { | ||
var contributors = hydrate(packageJson[key]) | ||
.map(function (user) { return sort_object_keys_1["default"](user, ['name', 'email', 'url']); }) | ||
.sort(sort_order_1["default"](sortByName, sortByEmail)); | ||
.map(function (user) { return (0, sort_object_keys_1["default"])(user, ['name', 'email', 'url']); }) | ||
.sort((0, sort_order_1["default"])(sortByName, sortByEmail)); | ||
switch (contributors.length) { | ||
@@ -54,3 +58,3 @@ case 0: | ||
else if (Array.isArray(input)) { | ||
return input.reduce(function (state, item) { return __spreadArray(__spreadArray([], state), hydrate(item)); }, []); | ||
return input.reduce(function (state, item) { return __spreadArray(__spreadArray([], state, true), hydrate(item), true); }, []); | ||
} | ||
@@ -61,3 +65,3 @@ else if (typeof input === 'object') { | ||
else if (typeof input === 'string') { | ||
return [parse_author_1["default"](input)]; | ||
return [(0, parse_author_1["default"])(input)]; | ||
} | ||
@@ -70,5 +74,5 @@ else { | ||
var name = user.name; | ||
var email = user.email ? "<" + user.email + ">" : undefined; | ||
var url = user.url ? "(" + user.url + ")" : undefined; | ||
var email = user.email ? "<".concat(user.email, ">") : undefined; | ||
var url = user.url ? "(".concat(user.url, ")") : undefined; | ||
return [name, email, url].filter(Boolean).join(' '); | ||
} |
@@ -9,33 +9,65 @@ "use strict"; | ||
var PRE_OR_POST_PREFIX = /^(pre|post)/; | ||
// Sort alphabetically by script name excluding pre/post prefixes | ||
function scriptName() { | ||
var args = []; | ||
for (var _i = 0; _i < arguments.length; _i++) { | ||
args[_i] = arguments[_i]; | ||
var NPM_RUN_ALL_SEPARATOR = /([:/])/; | ||
var NPM_BUILTIN_SCRIPTS = ['install', 'prepare', 'pack', 'publish', 'restart', 'start', 'stop', 'test', 'version', 'uninstall']; | ||
; | ||
function parseScriptName(scripts, original) { | ||
// prepublishOnly is a script whose base event is publish. | ||
// cf. https://docs.npmjs.com/cli/v9/using-npm/scripts#npm-publish | ||
if (original === 'prepublishOnly') { | ||
return { prefix: 'pre', base: 'publish', original: original }; | ||
} | ||
var _a = args.map(function (arg) { return arg.replace(PRE_OR_POST_PREFIX, ''); }), a = _a[0], b = _a[1]; | ||
if (a !== b) { | ||
return a < b ? -1 : 1; | ||
var prefixMatch = PRE_OR_POST_PREFIX.exec(original); | ||
var prefix = prefixMatch ? prefixMatch[0] : undefined; | ||
var base = prefix ? original.slice(prefix.length) : original; | ||
if ((scripts === null || scripts === void 0 ? void 0 : scripts.hasOwnProperty(base)) || NPM_BUILTIN_SCRIPTS.includes(base)) { | ||
return { prefix: prefix, base: base, original: original }; | ||
} | ||
else { | ||
return { prefix: undefined, base: original, original: original }; | ||
} | ||
// Sort alphabetically by script name excluding pre/post prefixes | ||
function scriptName(scripts) { | ||
return function (a, b) { | ||
var aParsed = parseScriptName(scripts, a); | ||
var bParsed = parseScriptName(scripts, b); | ||
// For example, for an input name `prettier:lint`, the segments would be `['prettier', ':', 'lint']`. | ||
// The segments contains separators. There are two types of separators, to determine their order. | ||
var aSegments = aParsed.base.split(NPM_RUN_ALL_SEPARATOR); | ||
var bSegments = bParsed.base.split(NPM_RUN_ALL_SEPARATOR); | ||
var aLength = aSegments.length; | ||
var bLength = bSegments.length; | ||
// Compare each segment, and when the strings are different, return 1 or -1 in alphabetical order. | ||
for (var i = 0; i < Math.min(aLength, bLength); i++) { | ||
if (aSegments[i] !== bSegments[i]) { | ||
return aSegments[i] < bSegments[i] ? -1 : 1; | ||
} | ||
} | ||
// Compare segments length, return 1 or -1 in ascending order of length. | ||
if (aLength !== bLength) { | ||
return aLength < bLength ? -1 : 1; | ||
} | ||
return 0; | ||
} | ||
}; | ||
} | ||
// Sort by pre, script, post | ||
function prePostHooks(a, b) { | ||
if (a.startsWith('pre') || b.startsWith('post')) { | ||
return -1; | ||
} | ||
else if (a.startsWith('post') || b.startsWith('pre')) { | ||
return 1; | ||
} | ||
else { | ||
function prePostHooks(scripts) { | ||
return function (a, b) { | ||
var aParsed = parseScriptName(scripts, a); | ||
var bParsed = parseScriptName(scripts, b); | ||
if (aParsed.prefix === 'pre' || bParsed.prefix === 'post') { | ||
return -1; | ||
} | ||
else if (aParsed.prefix === 'post' || bParsed.prefix === 'pre') { | ||
return 1; | ||
} | ||
else if (aParsed.base !== bParsed.base) { | ||
return aParsed.base < bParsed.base ? -1 : 1; | ||
} | ||
return 0; | ||
} | ||
}; | ||
} | ||
var order = sort_order_1["default"](scriptName, prePostHooks); | ||
function sortScripts(scripts) { | ||
var keys = Object.keys(scripts || {}); | ||
return keys.length === 0 ? {} : { scripts: sort_object_keys_1["default"](scripts, keys.sort(order)) }; | ||
var order = (0, sort_order_1["default"])(scriptName(scripts), prePostHooks(scripts)); | ||
return keys.length === 0 ? {} : { scripts: (0, sort_object_keys_1["default"])(scripts, keys.sort(order)) }; | ||
} | ||
exports["default"] = sortScripts; |
{ | ||
"name": "prettier-package-json", | ||
"version": "2.6.0", | ||
"version": "2.8.0", | ||
"description": "Prettier formatter for package.json files", | ||
@@ -28,2 +28,3 @@ "license": "MIT", | ||
"dependencies": { | ||
"@types/parse-author": "^2.0.0", | ||
"commander": "^4.0.1", | ||
@@ -42,6 +43,5 @@ "cosmiconfig": "^7.0.0", | ||
"@types/minimatch": "^3.0.4", | ||
"@types/parse-author": "^2.0.0", | ||
"@types/sort-object-keys": "^1.1.0", | ||
"cross-spawn": "^7.0.3", | ||
"husky": "^6.0.0", | ||
"husky": "^7.0.4", | ||
"jest": "^26.6.3", | ||
@@ -48,0 +48,0 @@ "ts-jest": "^26.5.6", |
@@ -11,3 +11,3 @@ # Prettier `package.json` | ||
Keys in `package.json` will be sorted in an [opinionated order](src/defaultOptions.js) but may be configured to your own preferences. | ||
Keys in `package.json` will be sorted in an [opinionated order](src/defaultOptions.ts) but may be configured to your own preferences. | ||
@@ -252,3 +252,3 @@ Input: | ||
| **Expand Users** - Expand author and contributors into objects. | `false` | `--expand-users` | `expandUsers: <bool>` | | ||
| **Key Order** - Specify the order of keys. | See [default options](https://github.com/cameronhunter/prettier-package-json/blob/master/src/defaultOptions.js) | `--key-order <comma,separated,list...>` | `keyOrder: <array\|function>` | | ||
| **Key Order** - Specify the order of keys. | See [default options](src/defaultOptions.ts) | `--key-order <comma,separated,list...>` | `keyOrder: <array\|function>` | | ||
@@ -255,0 +255,0 @@ A configuration file will be searched for using [`cosmiconfig`](https://www.npmjs.com/package/cosmiconfig) rules: |
28988
11
17
428
9
+ Added@types/parse-author@^2.0.0
+ Added@types/parse-author@2.0.3(transitive)