Skip to content

Commit 46b5a3c

Browse files
fiskerkeithamus
authored andcommitted
feat: sort prettier field (#121)
* feat: sort `prettier` field * refactor: `sortProperty` -> `overProperty` * refactor: use array instead of arguments on `pipe` * refactor: more pipes
1 parent 0c97105 commit 46b5a3c

File tree

2 files changed

+59
-2
lines changed

2 files changed

+59
-2
lines changed

index.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,26 @@ const sortESLintConfig = sortObjectBy([
4646
'reportUnusedDisableDirectives',
4747
])
4848

49+
const sortPrettierConfigKeys = onObject(config =>
50+
sortObjectKeys(config, [
51+
...Object.keys(config)
52+
.filter(key => key !== 'overrides')
53+
.sort(),
54+
'overrides',
55+
]),
56+
)
57+
const sortPrettierConfigOptions = pipe([
58+
sortObject,
59+
overProperty('options', sortObject),
60+
])
61+
const sortPrettierConfigOverrides = onArray(overrides =>
62+
overrides.map(sortPrettierConfigOptions),
63+
)
64+
const sortPrettierConfig = pipe([
65+
sortPrettierConfigKeys,
66+
onObject(overProperty('overrides', sortPrettierConfigOverrides)),
67+
])
68+
4969
// See https://docs.npmjs.com/misc/scripts
5070
const defaultNpmScripts = new Set([
5171
'install',
@@ -150,7 +170,7 @@ const fields = [
150170
{ key: 'babel', over: sortObject },
151171
{ key: 'browserslist' },
152172
{ key: 'xo', over: sortObject },
153-
{ key: 'prettier', over: sortObject },
173+
{ key: 'prettier', over: sortPrettierConfig },
154174
{ key: 'eslintConfig', over: sortESLintConfig },
155175
{ key: 'eslintIgnore' },
156176
{ key: 'stylelint' },

test.js

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ for (const field of [
191191
'browserify',
192192
'babel',
193193
'xo',
194-
'prettier',
195194
'ava',
196195
'jest',
197196
'mocha',
@@ -295,6 +294,44 @@ testField('eslintConfig', [
295294
},
296295
])
297296

297+
// prettier
298+
const sortedPrettierConfig = sortPackageJson({
299+
prettier: {
300+
trailingComma: 'none',
301+
z: 'z',
302+
a: 'a',
303+
overrides: [
304+
{
305+
options: {
306+
trailingComma: 'all',
307+
semi: false,
308+
z: 'z',
309+
a: 'a',
310+
},
311+
z: 'z',
312+
a: 'a',
313+
files: '*.js',
314+
},
315+
],
316+
semi: false,
317+
},
318+
}).prettier
319+
assert.deepStrictEqual(
320+
Object.keys(sortedPrettierConfig),
321+
['a', 'semi', 'trailingComma', 'z', 'overrides'],
322+
'prettier field should sorted',
323+
)
324+
assert.deepStrictEqual(
325+
Object.keys(sortedPrettierConfig.overrides[0]),
326+
['a', 'files', 'options', 'z'],
327+
'prettier.overrides should sorted',
328+
)
329+
assert.deepStrictEqual(
330+
Object.keys(sortedPrettierConfig.overrides[0].options),
331+
['a', 'semi', 'trailingComma', 'z'],
332+
'prettier.overrides[].options should sorted',
333+
)
334+
298335
testField('binary', [
299336
{
300337
value: {

0 commit comments

Comments
 (0)