All files sort-package-json.ts

100% Statements 15/15
60% Branches 3/5
100% Functions 2/2
100% Lines 14/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 481x 1x   1x                                 1x 1x 1x 1x   1x   1x 14x   12x     1x       1x           1x        
import { outputJson, readJson } from 'fs-extra'
import { omit, replace } from 'rambdax'
 
const ORDER = [
  'name',
  'scripts',
  'typings',
  'main',
  'version',
  'dependencies',
  'devDependencies',
  'jest',
  'files',
  'repository',
  'license',
  'git',
  'author',
  'depFn',
]
 
export async function sortPackageJson(location: string, options = {testing: false}){
  const { testing } = options
  const unsorted = await readJson(location)
  const ignored = omit(ORDER, unsorted)
 
  const sorted: Record<string,string> = {}
 
  ORDER.forEach(property => {
    if (unsorted[ property ] === undefined) return
 
    sorted[ property ] = unsorted[ property ]
  })
 
  const toSave = {
    ...sorted,
    ...ignored,
  }
  const output = testing ?
    replace(
      '.json', '-sorted.json', location
    ) :
    location
 
  await outputJson(
    output, toSave, { spaces : 2 }
  )
}