Skip to content

Commit 9b76ec1

Browse files
feat: sorting scripts only by pre/post criteria (#206)
* 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
1 parent 20830e1 commit 9b76ec1

File tree

8 files changed

+1191
-67
lines changed

8 files changed

+1191
-67
lines changed

index.d.ts

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,49 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
22

3-
declare namespace sortPackageJsonExports {
3+
declare namespace sortPackageJson {
44
interface SortPackageJsonFn {
55
/**
6-
* Sort packageJson object.
7-
*
8-
* @param packageJson - A packageJson
9-
* @param options
10-
* @returns Sorted packageJson object
11-
*/
12-
<T extends Record<any, any>>(packageJson: T, options?: Options): T,
6+
* Sort packageJson object.
7+
*
8+
* @param packageJson - A packageJson
9+
* @param options - An options object
10+
* @returns Sorted packageJson object
11+
*/
12+
<T extends Record<any, any>>(packageJson: T, options?: Options): T
1313

1414
/**
15-
* Sort packageJson string.
16-
*
17-
* @param packageJson - A packageJson string.
18-
* @param options
19-
* @returns Sorted packageJson string.
20-
*/
21-
(packageJson: string, options?: Options): string,
15+
* Sort packageJson string.
16+
*
17+
* @param packageJson - A packageJson string.
18+
* @param options - An options object
19+
* @returns Sorted packageJson string.
20+
*/
21+
(packageJson: string, options?: Options): string
2222
}
2323

24-
type ComparatorFunction = (left: string, right: string) => number;
24+
type ComparatorFunction = (left: string, right: string) => number
25+
26+
function sortObjectBy<T extends Record<any, any>>(
27+
comparator?: string[],
28+
deep?: boolean,
29+
): (x: T) => T
30+
31+
interface Field {
32+
readonly key: string
33+
over?<T extends Record<any, any>>(x: T): T
34+
}
2535

2636
interface Options {
27-
readonly sortOrder?: readonly string[] | ComparatorFunction;
37+
readonly sortOrder?: readonly string[] | ComparatorFunction
2838
}
2939
}
3040

31-
interface sortPackageJsonExports extends sortPackageJsonExports.SortPackageJsonFn {
32-
readonly default: sortPackageJsonExports.SortPackageJsonFn;
33-
readonly sortPackageJson: sortPackageJsonExports.SortPackageJsonFn;
41+
interface sortPackageJsonExports extends sortPackageJson.SortPackageJsonFn {
42+
readonly default: sortPackageJson.SortPackageJsonFn
43+
readonly sortPackageJson: sortPackageJson.SortPackageJsonFn
44+
readonly sortOrder: string[]
3445
}
3546

36-
declare const sortPackageJsonExports: sortPackageJsonExports;
47+
declare const sortPackageJsonExports: sortPackageJsonExports
3748

38-
export = sortPackageJsonExports;
49+
export = sortPackageJsonExports

index.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -135,16 +135,14 @@ const sortScripts = onObject((scripts) => {
135135
const names = Object.keys(scripts)
136136
const prefixable = new Set()
137137

138-
const keys = names
139-
.map((name) => {
140-
const omitted = name.replace(/^(?:pre|post)/, '')
141-
if (defaultNpmScripts.has(omitted) || names.includes(omitted)) {
142-
prefixable.add(omitted)
143-
return omitted
144-
}
145-
return name
146-
})
147-
.sort()
138+
const keys = names.map((name) => {
139+
const omitted = name.replace(/^(?:pre|post)/, '')
140+
if (defaultNpmScripts.has(omitted) || names.includes(omitted)) {
141+
prefixable.add(omitted)
142+
return omitted
143+
}
144+
return name
145+
})
148146

149147
const order = keys.reduce(
150148
(order, key) =>

0 commit comments

Comments
 (0)