-
-
Notifications
You must be signed in to change notification settings - Fork 93
/
package-scripts.js
119 lines (115 loc) · 3.27 KB
/
package-scripts.js
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
const transpile = 'babel --copy-files --out-dir dist --ignore *.test.js,fixtures src'
const cleanDist = 'rimraf dist'
module.exports = {
scripts: {
commit: {
description: 'This uses commitizen to help us generate beautifully formatted commit messages',
script: 'git-cz',
},
test: {
default: 'jest --config=test/jest.src.config.json --coverage',
watch: 'jest --config=test/jest.src.config.json --watch',
cli: {
default: 'jest --config=test/jest.cli.config.json',
watch: 'jest --config=test/jest.cli.config.json --watch',
},
},
build: {
default: {
description: 'deletes the `dist` directory and transpiles all relevant `src` to the `dist`',
script: [cleanDist, transpile].join('&&'),
},
watch: {
script: [cleanDist, `${transpile} --watch`].join('&&'),
},
andValidate: {
description: 'Runs the normal build first, then validates the CLI',
script: 'nps build && nps test.cli',
},
},
lint: {
description: 'lint the code with eslint',
script: 'eslint .',
},
reportCoverage: {
description: 'Report coverage stats to codecov. This should be run after the `cover` script and only on travis',
script: 'codecov',
},
release: {
description: 'We automate releases with semantic-release. This should only be run on travis',
script: 'semantic-release pre && npm publish && semantic-release post',
},
validate: {
description: 'This runs several scripts to make sure things look good before committing or on clean install',
script: concurrent({
'build-and-validate': {
script: 'nps build.andValidate',
color: 'bgBlue.bold',
},
test: {
script: 'nps test',
color: 'bgMagenta.bold',
},
'lint-staged': {
script: 'nps lintStaged',
color: 'bgGreen.bold',
},
}),
},
lintStaged: 'lint-staged',
format: {
description: 'auto-formats the code',
script: 'prettier-eslint --write "src/**/*.js" --ignore "**/fixtures/**"',
},
addContributor: {
description: 'When new people contribute to the project, run this',
script: 'all-contributors add',
},
generateContributors: {
description: 'Update the badge and contributors table',
script: 'all-contributors generate',
},
},
options: {
silent: false,
},
}
function concurrent(scripts) {
const {
colors,
scripts: quotedScripts,
names,
} = Object.keys(scripts).reduce(reduceScripts, {
colors: [],
scripts: [],
names: [],
})
const flags = [
'--kil-others',
`--prefix-colors "${colors.join(',')}"`,
'--prefix "[{name}]"',
`--names "${names.join(',')}"`,
quotedScripts.join(' '),
]
return `concurrently ${flags.join(' ')}`
function reduceScripts(accumulator, scriptName) {
const {script, color} = scripts[scriptName]
accumulator.names.push(scriptName)
accumulator.colors.push(color)
accumulator.scripts.push(`"${script}"`)
return accumulator
}
}
// this is not transpiled
/*
eslint
max-len: 0,
comma-dangle: [
2,
{
arrays: 'always-multiline',
objects: 'always-multiline',
functions: 'never'
}
]
*/