'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} 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}\``) } }