Skip to content

Commit

Permalink
feat: sorting scripts only by pre/post criteria (#206)
Browse files Browse the repository at this point in the history
* feat: add option for custom sorting fields

The fields option will override the values in the builtin fields array,
allowing users to signify that a given key should not be sorted, or sorted
in a particular way.

* test: add tests for typings

* feat: don't sort scripts if npm-run-all is a devDependency

* fix: don't reorder scripts if we detect npm-run-all commands

* fix: disable sorting scripts

* fix: do not sort scripts except pre/post
  • Loading branch information
jonathanmorley authored Feb 18, 2021
1 parent 20830e1 commit 9b76ec1
Show file tree
Hide file tree
Showing 8 changed files with 1,191 additions and 67 deletions.
55 changes: 33 additions & 22 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,38 +1,49 @@
/* eslint-disable @typescript-eslint/no-explicit-any */

declare namespace sortPackageJsonExports {
declare namespace sortPackageJson {
interface SortPackageJsonFn {
/**
* Sort packageJson object.
*
* @param packageJson - A packageJson
* @param options
* @returns Sorted packageJson object
*/
<T extends Record<any, any>>(packageJson: T, options?: Options): T,
* Sort packageJson object.
*
* @param packageJson - A packageJson
* @param options - An options object
* @returns Sorted packageJson object
*/
<T extends Record<any, any>>(packageJson: T, options?: Options): T

/**
* Sort packageJson string.
*
* @param packageJson - A packageJson string.
* @param options
* @returns Sorted packageJson string.
*/
(packageJson: string, options?: Options): string,
* Sort packageJson string.
*
* @param packageJson - A packageJson string.
* @param options - An options object
* @returns Sorted packageJson string.
*/
(packageJson: string, options?: Options): string
}

type ComparatorFunction = (left: string, right: string) => number;
type ComparatorFunction = (left: string, right: string) => number

function sortObjectBy<T extends Record<any, any>>(
comparator?: string[],
deep?: boolean,
): (x: T) => T

interface Field {
readonly key: string
over?<T extends Record<any, any>>(x: T): T
}

interface Options {
readonly sortOrder?: readonly string[] | ComparatorFunction;
readonly sortOrder?: readonly string[] | ComparatorFunction
}
}

interface sortPackageJsonExports extends sortPackageJsonExports.SortPackageJsonFn {
readonly default: sortPackageJsonExports.SortPackageJsonFn;
readonly sortPackageJson: sortPackageJsonExports.SortPackageJsonFn;
interface sortPackageJsonExports extends sortPackageJson.SortPackageJsonFn {
readonly default: sortPackageJson.SortPackageJsonFn
readonly sortPackageJson: sortPackageJson.SortPackageJsonFn
readonly sortOrder: string[]
}

declare const sortPackageJsonExports: sortPackageJsonExports;
declare const sortPackageJsonExports: sortPackageJsonExports

export = sortPackageJsonExports;
export = sortPackageJsonExports
18 changes: 8 additions & 10 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,16 +135,14 @@ const sortScripts = onObject((scripts) => {
const names = Object.keys(scripts)
const prefixable = new Set()

const keys = names
.map((name) => {
const omitted = name.replace(/^(?:pre|post)/, '')
if (defaultNpmScripts.has(omitted) || names.includes(omitted)) {
prefixable.add(omitted)
return omitted
}
return name
})
.sort()
const keys = names.map((name) => {
const omitted = name.replace(/^(?:pre|post)/, '')
if (defaultNpmScripts.has(omitted) || names.includes(omitted)) {
prefixable.add(omitted)
return omitted
}
return name
})

const order = keys.reduce(
(order, key) =>
Expand Down
Loading

0 comments on commit 9b76ec1

Please sign in to comment.