Skip to content

Commit

Permalink
feat: support private keys (#102)
Browse files Browse the repository at this point in the history
* feat: support private keys

* refactor: use `partition`
  • Loading branch information
fisker authored and keithamus committed Dec 30, 2019
1 parent 60e981f commit 71b28d3
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
23 changes: 20 additions & 3 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ const fields = [
{ key: 'publishConfig', over: sortObject },
]

const sortOrder = fields.map(({ key }) => key)
const defaultSortOrder = fields.map(({ key }) => key)

function editStringJSON(json, over) {
if (typeof json === 'string') {
Expand All @@ -170,11 +170,28 @@ function editStringJSON(json, over) {
return over(json)
}

const isPrivateKey = key => key[0] === '_'
const partition = (array, predicate) =>
array.reduce(
(result, value) => {
result[predicate(value) ? 0 : 1].push(value)
return result
},
[[], []],
)
function sortPackageJson(jsonIsh, options = {}) {
return editStringJSON(
jsonIsh,
onObject(json => {
const newJson = sortObjectKeys(json, options.sortOrder || sortOrder)
let sortOrder = options.sortOrder ? options.sortOrder : defaultSortOrder

if (Array.isArray(sortOrder)) {
const keys = Object.keys(json)
const [privateKeys, publicKeys] = partition(keys, isPrivateKey)
sortOrder = [...sortOrder, ...publicKeys.sort(), ...privateKeys.sort()]
}

const newJson = sortObjectKeys(json, sortOrder)

for (const { key, over } of fields) {
if (over && newJson[key]) newJson[key] = over(newJson[key])
Expand All @@ -187,7 +204,7 @@ function sortPackageJson(jsonIsh, options = {}) {

module.exports = sortPackageJson
module.exports.sortPackageJson = sortPackageJson
module.exports.sortOrder = sortOrder
module.exports.sortOrder = defaultSortOrder

if (require.main === module) {
const fs = require('fs')
Expand Down
16 changes: 16 additions & 0 deletions test.js
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,22 @@ fs.readFile('./package.json', 'utf8', (error, contents) => {
)
})

// fields with '_' prefix should alway at bottom
assert.deepStrictEqual(
Object.keys(
sortPackageJson({
_foo: '_foo',
foo: 'foo',
version: '1.0.0',
name: 'sort-package-json',
bar: 'bar',
_id: 'sort-package-json@1.0.0',
_bar: '_bar',
}),
),
['name', 'version', 'bar', 'foo', '_bar', '_foo', '_id'],
)

// fields tests

// fields sort as object
Expand Down

0 comments on commit 71b28d3

Please sign in to comment.