sort-package-json
Advanced tools
Comparing version 1.18.0 to 1.19.0
80
index.js
#!/usr/bin/env node | ||
var sortObjectKeys = require('sort-object-keys'); | ||
var detectIndent = require('detect-indent'); | ||
const sortObjectKeys = require('sort-object-keys'); | ||
const detectIndent = require('detect-indent'); | ||
var sortOrder = [ | ||
const sortOrder = [ | ||
'name', | ||
@@ -62,6 +62,6 @@ 'version', | ||
'preferGlobal', | ||
'publishConfig', | ||
'publishConfig' | ||
]; | ||
// See https://docs.npmjs.com/misc/scripts | ||
var defaultNpmScripts = [ | ||
const defaultNpmScripts = [ | ||
'install', | ||
@@ -77,9 +77,10 @@ 'pack', | ||
'uninstall', | ||
'version', | ||
'version' | ||
]; | ||
function sortPackageJson(packageJson) { | ||
var wasString = false; | ||
var endCharacters = ''; | ||
var indentLevel = 2; | ||
function sortPackageJson(packageJson, options = {}) { | ||
const determinedSortOrder = options.sortOrder || sortOrder; | ||
let wasString = false; | ||
let endCharacters = ''; | ||
let indentLevel = 2; | ||
if (typeof packageJson === 'string') { | ||
@@ -94,8 +95,11 @@ wasString = true; | ||
var prefixedScriptRegex = /^(pre|post)(.)/; | ||
var prefixableScripts = defaultNpmScripts.slice(); | ||
const prefixedScriptRegex = /^(pre|post)(.)/; | ||
const prefixableScripts = defaultNpmScripts.slice(); | ||
if (typeof packageJson.scripts === 'object') { | ||
Object.keys(packageJson.scripts).forEach(function (script) { | ||
var prefixOmitted = script.replace(prefixedScriptRegex, '$2'); | ||
if (packageJson.scripts[prefixOmitted] && prefixableScripts.indexOf(prefixOmitted) < 0) { | ||
Object.keys(packageJson.scripts).forEach(script => { | ||
const prefixOmitted = script.replace(prefixedScriptRegex, '$2'); | ||
if ( | ||
packageJson.scripts[prefixOmitted] && | ||
!prefixableScripts.includes(prefixOmitted) | ||
) { | ||
prefixableScripts.push(prefixOmitted); | ||
@@ -119,4 +123,4 @@ } | ||
function toSortKey(script) { | ||
var prefixOmitted = script.replace(prefixedScriptRegex, '$2'); | ||
if (prefixableScripts.indexOf(prefixOmitted) >= 0) { | ||
const prefixOmitted = script.replace(prefixedScriptRegex, '$2'); | ||
if (prefixableScripts.includes(prefixOmitted)) { | ||
return prefixOmitted; | ||
@@ -134,8 +138,8 @@ } | ||
if (a === b) return 0; | ||
var aScript = toSortKey(a); | ||
var bScript = toSortKey(b); | ||
const aScript = toSortKey(a); | ||
const bScript = toSortKey(b); | ||
if (aScript === bScript) { | ||
// pre* is always smaller; post* is always bigger | ||
// Covers: pre* vs. *; pre* vs. post*; * vs. post* | ||
if (a === 'pre' + aScript || b === 'post' + bScript) return -1; | ||
if (a === `pre${aScript}` || b === `post${bScript}`) return -1; | ||
// The rest is bigger: * vs. *pre; *post vs. *pre; *post vs. * | ||
@@ -147,15 +151,13 @@ return 1; | ||
function array_unique(array) { | ||
return array.filter(function (el, index, arr) { | ||
return index == arr.indexOf(el); | ||
}); | ||
return array.filter((el, index, arr) => index == arr.indexOf(el)); | ||
} | ||
sortSubKey('keywords', null, true); | ||
sortSubKey('homepage'); | ||
sortSubKey('bugs', [ 'url', 'email' ]); | ||
sortSubKey('license', [ 'type', 'url' ]); | ||
sortSubKey('author', [ 'name', 'email', 'url' ]); | ||
sortSubKey('bugs', ['url', 'email']); | ||
sortSubKey('license', ['type', 'url']); | ||
sortSubKey('author', ['name', 'email', 'url']); | ||
sortSubKey('bin'); | ||
sortSubKey('man'); | ||
sortSubKey('directories', [ 'lib', 'bin', 'man', 'doc', 'example' ]); | ||
sortSubKey('repository', [ 'type', 'url' ]); | ||
sortSubKey('directories', ['lib', 'bin', 'man', 'doc', 'example']); | ||
sortSubKey('repository', ['type', 'url']); | ||
sortSubKey('scripts', compareScriptKeys); | ||
@@ -187,4 +189,6 @@ sortSubKey('betterScripts', compareScriptKeys); | ||
sortSubKey('publishConfig'); | ||
packageJson = sortObjectKeys(packageJson, sortOrder); | ||
return wasString ? JSON.stringify(packageJson, null, indentLevel) + endCharacters : packageJson; | ||
packageJson = sortObjectKeys(packageJson, determinedSortOrder); | ||
return wasString | ||
? JSON.stringify(packageJson, null, indentLevel) + endCharacters | ||
: packageJson; | ||
} | ||
@@ -196,14 +200,16 @@ module.exports = sortPackageJson; | ||
if (require.main === module) { | ||
var fs = require('fs'); | ||
const fs = require('fs'); | ||
var filesToProcess = process.argv[2] ? process.argv.slice(2) : [process.cwd() + '/package.json']; | ||
const filesToProcess = process.argv[2] | ||
? process.argv.slice(2) | ||
: [`${process.cwd()}/package.json`]; | ||
filesToProcess.forEach(function (filePath) { | ||
var packageJson = fs.readFileSync(filePath, 'utf8'); | ||
var sorted = sortPackageJson(packageJson); | ||
filesToProcess.forEach(filePath => { | ||
const packageJson = fs.readFileSync(filePath, 'utf8'); | ||
const sorted = sortPackageJson(packageJson); | ||
if (sorted !== packageJson) { | ||
fs.writeFileSync(filePath, sorted, 'utf8'); | ||
console.log(filePath + ' is sorted!'); | ||
fs.writeFileSync(filePath, sorted, 'utf8'); | ||
console.log(`${filePath} is sorted!`); | ||
} | ||
}); | ||
} |
{ | ||
"name": "sort-package-json", | ||
"version": "1.18.0", | ||
"version": "1.19.0", | ||
"description": "Sort an Object or package.json based on the well-known package.json keys", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
9426
200