Socket
Socket
Sign inDemoInstall

sort-package-json

Package Overview
Dependencies
Maintainers
1
Versions
97
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sort-package-json - npm Package Compare versions

Comparing version 1.36.0 to 1.37.0

cli.js

40

index.d.ts

@@ -1,5 +0,35 @@

export declare const sortOrder: string[];
export declare function sortPackageJson<T>(packageJson: T, options?: {
sortOrder: string[];
}): T;
export default sortPackageJson;
type ComparatorFunction = (left: string, right: string) => number
declare namespace sortPackageJson {
interface Options {
readonly sortOrder?: readonly string[] | ComparatorFunction
}
}
declare const sortPackageJson: {
/**
Sort packageJson.
@param packageJson - A packageJson object or string.
@returns Sorted packageJson object or string.
*/
(packageJson, options?: sortPackageJson.Options): typeof packageJson
/**
Sort packageJson.
@param packageJson - A packageJson object or string.
@returns Sorted packageJson object or string.
*/
sortPackageJson(
packageJson,
options?: sortPackageJson.Options,
): typeof packageJson
/**
Default sort order.
*/
readonly sortOrder: readonly string[]
}
export default sortPackageJson

131

index.js

@@ -1,8 +0,9 @@

#!/usr/bin/env node
const sortObjectKeys = require('sort-object-keys')
const detectIndent = require('detect-indent')
const detectNewline = require('detect-newline').graceful
const globby = require('globby')
const gitHooks = require('git-hooks-list')
const hasOwnProperty = (object, property) =>
Object.prototype.hasOwnProperty.call(object, property)
const pipe = fns => x => fns.reduce((result, fn) => fn(result), x)
const onArray = fn => x => (Array.isArray(x) ? fn(x) : x)

@@ -26,4 +27,6 @@ const uniq = onArray(xs => xs.filter((x, i) => i === xs.indexOf(x)))

])
const sortProperty = (property, over) => object =>
Object.assign(object, { [property]: over(object[property]) })
const overProperty = (property, over) => object =>
hasOwnProperty(object, property)
? Object.assign(object, { [property]: over(object[property]) })
: object
const sortGitHooks = sortObjectBy(gitHooks)

@@ -44,3 +47,24 @@ const sortESLintConfig = sortObjectBy([

])
const sortVSCodeBadgeObject = sortObjectBy(['description', 'url', 'href'])
const sortPrettierConfigKeys = onObject(config =>
sortObjectKeys(config, [
...Object.keys(config)
.filter(key => key !== 'overrides')
.sort(),
'overrides',
]),
)
const sortPrettierConfigOptions = pipe([
sortObject,
overProperty('options', sortObject),
])
const sortPrettierConfigOverrides = onArray(overrides =>
overrides.map(sortPrettierConfigOptions),
)
const sortPrettierConfig = pipe([
sortPrettierConfigKeys,
onObject(overProperty('overrides', sortPrettierConfigOverrides)),
])
// See https://docs.npmjs.com/misc/scripts

@@ -87,2 +111,9 @@ const defaultNpmScripts = new Set([

// fields marked `vscode` are for `Visual Studio Code extension manifest` only
// https://code.visualstudio.com/api/references/extension-manifest
// Supported fields:
// publisher, displayName, categories, galleryBanner, preview, contributes,
// activationEvents, badges, markdown, qna, extensionPack,
// extensionDependencies, icon
// field.key{string}: field name

@@ -92,5 +123,7 @@ // field.over{function}: sort field subKey

{ key: 'name' },
/* vscode */ { key: 'displayName' },
{ key: 'version' },
{ key: 'private' },
{ key: 'description' },
/* vscode */ { key: 'categories', over: uniq },
{ key: 'keywords', over: uniq },

@@ -102,2 +135,3 @@ { key: 'homepage' },

{ key: 'license', over: sortURLObject },
/* vscode */ { key: 'qna' },
{ key: 'author', over: sortPeopleObject },

@@ -108,2 +142,3 @@ {

},
/* vscode */ { key: 'publisher' },
{ key: 'files', over: uniq },

@@ -144,3 +179,5 @@ { key: 'sideEffects' },

{ key: 'betterScripts', over: sortScripts },
{ key: 'husky', over: sortProperty('hooks', sortGitHooks) },
/* vscode */ { key: 'contributes', over: sortObject },
/* vscode */ { key: 'activationEvents', over: uniq },
{ key: 'husky', over: overProperty('hooks', sortGitHooks) },
{ key: 'pre-commit' },

@@ -155,3 +192,3 @@ { key: 'commitlint', over: sortObject },

{ key: 'xo', over: sortObject },
{ key: 'prettier', over: sortObject },
{ key: 'prettier', over: sortPrettierConfig },
{ key: 'eslintConfig', over: sortESLintConfig },

@@ -171,2 +208,4 @@ { key: 'eslintIgnore' },

{ key: 'bundleDependencies', over: sortArray },
/* vscode */ { key: 'extensionPack', over: sortArray },
/* vscode */ { key: 'extensionDependencies', over: sortArray },
{ key: 'flat' },

@@ -179,5 +218,21 @@ { key: 'engines', over: sortObject },

{ key: 'publishConfig', over: sortObject },
/* vscode */ { key: 'icon' },
/* vscode */ {
key: 'badges',
over: onArray(badge => badge.map(sortVSCodeBadgeObject)),
},
/* vscode */ { key: 'galleryBanner', over: sortObject },
/* vscode */ { key: 'preview' },
/* vscode */ { key: 'markdown' },
]
const defaultSortOrder = fields.map(({ key }) => key)
const overFields = pipe(
fields.reduce((fns, { key, over }) => {
if (over) {
fns.push(overProperty(key, over))
}
return fns
}, []),
)

@@ -227,9 +282,3 @@ function editStringJSON(json, over) {

const newJson = sortObjectKeys(json, sortOrder)
for (const { key, over } of fields) {
if (over && newJson[key]) newJson[key] = over(newJson[key])
}
return newJson
return overFields(sortObjectKeys(json, sortOrder))
}),

@@ -242,57 +291,1 @@ )

module.exports.sortOrder = defaultSortOrder
if (require.main === module) {
const fs = require('fs')
const isCheckFlag = argument => argument === '--check' || argument === '-c'
const cliArguments = process.argv.slice(2)
const isCheck = cliArguments.some(isCheckFlag)
const patterns = cliArguments.filter(argument => !isCheckFlag(argument))
if (!patterns.length) {
patterns[0] = 'package.json'
}
const files = globby.sync(patterns)
if (files.length === 0) {
console.log('No matching files.')
process.exit(1)
}
let notSortedFiles = 0
files.forEach(file => {
const packageJson = fs.readFileSync(file, 'utf8')
const sorted = sortPackageJson(packageJson)
if (sorted !== packageJson) {
if (isCheck) {
notSortedFiles++
console.log(file)
} else {
fs.writeFileSync(file, sorted, 'utf8')
console.log(`${file} is sorted!`)
}
}
})
if (isCheck) {
console.log()
if (notSortedFiles) {
console.log(
notSortedFiles === 1
? `${notSortedFiles} of ${files.length} matched file is not sorted.`
: `${notSortedFiles} of ${files.length} matched files are not sorted.`,
)
} else {
console.log(
files.length === 1
? `${files.length} matched file is sorted.`
: `${files.length} matched files are sorted.`,
)
}
process.exit(notSortedFiles)
}
}
{
"name": "sort-package-json",
"version": "1.36.0",
"version": "1.37.0",
"description": "Sort an Object or package.json based on the well-known package.json keys",

@@ -22,11 +22,12 @@ "keywords": [

"index.js",
"index.d.ts"
"index.d.ts",
"cli.js"
],
"main": "index.js",
"types": "index.d.ts",
"bin": "index.js",
"bin": "cli.js",
"scripts": {
"lint": "eslint .",
"semantic-release": "semantic-release",
"sort-package-json": "node index.js package.json --check",
"sort-package-json": "node cli.js package.json --check",
"test": "node test.js"

@@ -71,5 +72,5 @@ },

"prettier": "^1.19.1",
"semantic-release": "^15.9.17",
"semantic-release": "15.14.0",
"validate-commit-msg": "^2.14.0"
}
}

@@ -83,6 +83,6 @@ # Sort Package.json

```js
sortPackageJson(jsonIsh, options?)
sortPackageJson(packageJson, options?)
```
Pass a JSON string, return a new sorted JSON string.
Pass a JSON string, return a new sorted JSON string.\
Pass a JSON object, return a new sorted JSON object.

@@ -130,20 +130,37 @@

custom sortOrder
Type: `string[] | Function`\
Default: `sortPackageJson.sortOrder`
Custom ordering array or comparator function.
If an array, sort keys in ordering of `options.sortOrder`.
**Notice**: fields not in this array, will still sort by `defaultSortOrder`
```js
console.log(sortPackageJson(packageJsonObject, {
sortOrder: ['version', 'name', 'dependencies'],
}))
/* => object:
{
version: '1.0.0',
name: 'my-awesome-project',
dependencies: {
'sort-object-keys': '1.0.0',
'sort-package-json': '1.0.0'
const sorted = sortPackageJson(packageJsonObject, {
sortOrder: ['version']
})
console.log(Object.keys(sorted))
// -> [ 'version', 'name', 'dependencies' ]
// ^^^^^^^^^^^^^^^^^^^^^^
// `name` and `dependencies` are sorted by defaultSortOrder
```
If a function, sort fields by [Array#sort(options.sortOrder)](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Description)
```js
const sorted = sortPackageJson(packageJsonObject, {
sortOrder(left, right) {
return left.localeCompare(right)
}
}
})
console.log(Object.keys(sorted))
// -> [ 'dependencies', 'name', 'version' ]
```
## Related tools

@@ -150,0 +167,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc