Skip to content

Commit eb49298

Browse files
authored
feat: sort pre/post scripts with colon together (#330)
* feat: sort pre/post scripts with colon together * test: add test case
1 parent 0bf1155 commit eb49298

File tree

2 files changed

+61
-3
lines changed

2 files changed

+61
-3
lines changed

index.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,24 @@ const sortScripts = onObject((scripts, packageJson) => {
248248
keys.sort()
249249
}
250250

251-
const order = keys.flatMap((key) =>
252-
prefixable.has(key) ? [`pre${key}`, key, `post${key}`] : [key],
253-
)
251+
const scriptsKeyMap = new Map()
252+
253+
keys
254+
.flatMap((key) =>
255+
prefixable.has(key) ? [`pre${key}`, key, `post${key}`] : [key],
256+
)
257+
.forEach((key) => {
258+
const [prefix] = key.split(':')
259+
const keySet = scriptsKeyMap.has(prefix)
260+
? scriptsKeyMap.get(prefix)
261+
: new Set()
262+
scriptsKeyMap.set(prefix, keySet.add(key))
263+
})
264+
265+
const order = [...scriptsKeyMap.values()].flat().reduce((keys, keySet) => {
266+
keys.push(...keySet)
267+
return keys
268+
}, [])
254269

255270
return sortObjectKeys(scripts, order)
256271
})

tests/scripts.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,46 @@ for (const field of ['scripts', 'betterScripts']) {
8585
},
8686
})
8787
}
88+
89+
for (const field of ['scripts', 'betterScripts']) {
90+
test(`${field} sort pre/post scripts with colon together`, macro.sortObject, {
91+
value: {
92+
[field]: {
93+
prebuild: 'run-s prebuild:*',
94+
build: 'run-s build:*',
95+
postbuild: 'run-s prebuild:*',
96+
'build:bar': 'node bar.js',
97+
'build:baz': 'node baz.js',
98+
'build:foo': 'node foo.js',
99+
'd-unrelated': '..',
100+
'e-unrelated': '..',
101+
'f-unrelated': '..',
102+
'postbuild:1': 'node prebuild.js 1',
103+
'postbuild:2': 'node prebuild.js 2',
104+
'postbuild:3': 'node prebuild.js 3',
105+
'prebuild:1': 'node prebuild.js 1',
106+
'prebuild:2': 'node prebuild.js 2',
107+
'prebuild:3': 'node prebuild.js 3',
108+
},
109+
},
110+
expect: {
111+
[field]: {
112+
prebuild: 'run-s prebuild:*',
113+
'prebuild:1': 'node prebuild.js 1',
114+
'prebuild:2': 'node prebuild.js 2',
115+
'prebuild:3': 'node prebuild.js 3',
116+
build: 'run-s build:*',
117+
'build:bar': 'node bar.js',
118+
'build:baz': 'node baz.js',
119+
'build:foo': 'node foo.js',
120+
postbuild: 'run-s prebuild:*',
121+
'postbuild:1': 'node prebuild.js 1',
122+
'postbuild:2': 'node prebuild.js 2',
123+
'postbuild:3': 'node prebuild.js 3',
124+
'd-unrelated': '..',
125+
'e-unrelated': '..',
126+
'f-unrelated': '..',
127+
},
128+
},
129+
})
130+
}

0 commit comments

Comments
 (0)