/
checkPkgScripts.js
46 lines (41 loc) · 1.31 KB
/
checkPkgScripts.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
'use strict'
const chalk = require('chalk')
const dedent = require('dedent')
const has = require('lodash/has')
const warn = msg => {
console.warn(chalk.yellowBright.bold(msg))
}
/**
* Checks if the given command or binary name is present in the package.json scripts. This would be
* called if and when resolving a binary fails in `findBin`.
*
* @param {Object} pkg package.json
* @param {string} cmd
* @param {string} binName
* @param {Array<string>} args
* @throws {Error} If a script is found in the pkg for the given `cmd` or `binName`.
*/
module.exports = function checkPkgScripts(pkg, cmd, binName, args) {
if (pkg && pkg.scripts) {
const { scripts } = pkg
let scriptName
let script
if (has(scripts, cmd)) {
scriptName = cmd
script = scripts[cmd]
} else if (has(scripts, binName)) {
scriptName = binName
script = scripts[binName]
} else {
return
}
const argsStr = args && args.length ? args.join(' ') : ''
warn(dedent`
\`lint-staged\` no longer supports running scripts defined in package.json.
The same behavior can be achieved by changing the command to any of the following:
- \`npm run ${scriptName} -- ${argsStr}\`
- \`${script} ${argsStr}\`
`)
throw new Error(`Could not resolve binary for \`${cmd}\``)
}
}