@dependabot/yarn-lib
Version:
📦🐈 Fast, reliable, and secure dependency management.
415 lines (323 loc) • 13.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.run = exports.getBinEntries = undefined;
var _asyncToGenerator2;
function _load_asyncToGenerator() {
return _asyncToGenerator2 = _interopRequireDefault(require('babel-runtime/helpers/asyncToGenerator'));
}
let getBinEntries = exports.getBinEntries = (() => {
var _ref3 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (config) {
const binFolders = new Set();
const binEntries = new Map();
// Setup the node_modules/.bin folders for analysis
for (var _iterator2 = config.registryFolders, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
var _ref4;
if (_isArray2) {
if (_i2 >= _iterator2.length) break;
_ref4 = _iterator2[_i2++];
} else {
_i2 = _iterator2.next();
if (_i2.done) break;
_ref4 = _i2.value;
}
const registryFolder = _ref4;
binFolders.add(path.resolve(config.cwd, registryFolder, '.bin'));
binFolders.add(path.resolve(config.lockfileFolder, registryFolder, '.bin'));
}
// Same thing, but for the pnp dependencies, located inside the cache
if (yield (_fs || _load_fs()).exists(`${config.lockfileFolder}/${(_constants || _load_constants()).PNP_FILENAME}`)) {
const pnpApi = (0, (_dynamicRequire || _load_dynamicRequire()).dynamicRequire)(`${config.lockfileFolder}/${(_constants || _load_constants()).PNP_FILENAME}`);
const packageLocator = pnpApi.findPackageLocator(`${config.cwd}/`);
const packageInformation = pnpApi.getPackageInformation(packageLocator);
for (var _iterator3 = packageInformation.packageDependencies.entries(), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
var _ref6;
if (_isArray3) {
if (_i3 >= _iterator3.length) break;
_ref6 = _iterator3[_i3++];
} else {
_i3 = _iterator3.next();
if (_i3.done) break;
_ref6 = _i3.value;
}
const _ref5 = _ref6;
const name = _ref5[0];
const reference = _ref5[1];
const dependencyInformation = pnpApi.getPackageInformation({ name, reference });
if (dependencyInformation.packageLocation) {
binFolders.add(`${dependencyInformation.packageLocation}/.bin`);
}
}
}
// Build up a list of possible scripts by exploring the folders marked for analysis
for (var _iterator4 = binFolders, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
var _ref7;
if (_isArray4) {
if (_i4 >= _iterator4.length) break;
_ref7 = _iterator4[_i4++];
} else {
_i4 = _iterator4.next();
if (_i4.done) break;
_ref7 = _i4.value;
}
const binFolder = _ref7;
if (yield (_fs || _load_fs()).exists(binFolder)) {
for (var _iterator5 = yield (_fs || _load_fs()).readdir(binFolder), _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
var _ref8;
if (_isArray5) {
if (_i5 >= _iterator5.length) break;
_ref8 = _iterator5[_i5++];
} else {
_i5 = _iterator5.next();
if (_i5.done) break;
_ref8 = _i5.value;
}
const name = _ref8;
binEntries.set(name, path.join(binFolder, name));
}
}
}
return binEntries;
});
return function getBinEntries(_x) {
return _ref3.apply(this, arguments);
};
})();
let run = exports.run = (() => {
var _ref9 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (config, reporter, flags, args) {
let realRunCommand = (() => {
var _ref13 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (action, args) {
// build up list of commands
const cmds = [];
if (pkgScripts && action in pkgScripts) {
const preAction = `pre${action}`;
if (preAction in pkgScripts) {
cmds.push([preAction, pkgScripts[preAction]]);
}
const script = scripts.get(action);
invariant(script, 'Script must exist');
cmds.push([action, script]);
const postAction = `post${action}`;
if (postAction in pkgScripts) {
cmds.push([postAction, pkgScripts[postAction]]);
}
} else if (scripts.has(action)) {
const script = scripts.get(action);
invariant(script, 'Script must exist');
cmds.push([action, script]);
}
if (cmds.length) {
const ignoreEngines = !!(flags.ignoreEngines || config.getOption('ignore-engines'));
try {
yield (0, (_packageCompatibility || _load_packageCompatibility()).checkOne)(pkg, config, ignoreEngines);
} catch (err) {
throw err instanceof (_errors || _load_errors()).MessageError ? new (_errors || _load_errors()).MessageError(reporter.lang('cannotRunWithIncompatibleEnv')) : err;
}
// Disable wrapper in executed commands
process.env.YARN_WRAP_OUTPUT = 'false';
for (var _iterator8 = cmds, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {
var _ref15;
if (_isArray8) {
if (_i8 >= _iterator8.length) break;
_ref15 = _iterator8[_i8++];
} else {
_i8 = _iterator8.next();
if (_i8.done) break;
_ref15 = _i8.value;
}
const _ref14 = _ref15;
const stage = _ref14[0];
const cmd = _ref14[1];
// only tack on trailing arguments for default script, ignore for pre and post - #1595
const cmdWithArgs = stage === action ? sh`${unquoted(cmd)} ${args}` : cmd;
const customShell = config.getOption('script-shell');
yield (0, (_executeLifecycleScript || _load_executeLifecycleScript()).execCommand)({
stage,
config,
cmd: cmdWithArgs,
cwd: flags.into || config.cwd,
isInteractive: true,
customShell: customShell ? String(customShell) : undefined
});
}
} else if (action === 'env') {
reporter.log(JSON.stringify((yield (0, (_executeLifecycleScript || _load_executeLifecycleScript()).makeEnv)('env', config.cwd, config)), null, 2), { force: true });
} else {
let suggestion;
for (var _iterator9 = scripts.keys(), _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {
var _ref16;
if (_isArray9) {
if (_i9 >= _iterator9.length) break;
_ref16 = _iterator9[_i9++];
} else {
_i9 = _iterator9.next();
if (_i9.done) break;
_ref16 = _i9.value;
}
const commandName = _ref16;
const steps = leven(commandName, action);
if (steps < 2) {
suggestion = commandName;
}
}
let msg = `Command ${JSON.stringify(action)} not found.`;
if (suggestion) {
msg += ` Did you mean ${JSON.stringify(suggestion)}?`;
}
throw new (_errors || _load_errors()).MessageError(msg);
}
});
return function realRunCommand(_x6, _x7) {
return _ref13.apply(this, arguments);
};
})();
// list possible scripts if none specified
const pkg = yield config.readManifest(config.cwd);
const binCommands = new Set();
const pkgCommands = new Set();
const scripts = new Map();
for (var _iterator6 = yield getBinEntries(config), _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
var _ref11;
if (_isArray6) {
if (_i6 >= _iterator6.length) break;
_ref11 = _iterator6[_i6++];
} else {
_i6 = _iterator6.next();
if (_i6.done) break;
_ref11 = _i6.value;
}
const _ref10 = _ref11;
const name = _ref10[0];
const loc = _ref10[1];
scripts.set(name, quoteForShell(loc));
binCommands.add(name);
}
const pkgScripts = pkg.scripts;
if (pkgScripts) {
for (var _iterator7 = Object.keys(pkgScripts).sort(), _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {
var _ref12;
if (_isArray7) {
if (_i7 >= _iterator7.length) break;
_ref12 = _iterator7[_i7++];
} else {
_i7 = _iterator7.next();
if (_i7.done) break;
_ref12 = _i7.value;
}
const name = _ref12;
scripts.set(name, pkgScripts[name] || '');
pkgCommands.add(name);
}
}
function runCommand([action, ...args]) {
return (0, (_hooks || _load_hooks()).callThroughHook)('runScript', () => realRunCommand(action, args), { action, args });
}
if (args.length === 0) {
if (binCommands.size > 0) {
reporter.info(`${reporter.lang('binCommands') + Array.from(binCommands).join(', ')}`);
} else {
reporter.error(reporter.lang('noBinAvailable'));
}
const printedCommands = new Map();
for (var _iterator10 = pkgCommands, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) {
var _ref17;
if (_isArray10) {
if (_i10 >= _iterator10.length) break;
_ref17 = _iterator10[_i10++];
} else {
_i10 = _iterator10.next();
if (_i10.done) break;
_ref17 = _i10.value;
}
const pkgCommand = _ref17;
const action = scripts.get(pkgCommand);
invariant(action, 'Action must exists');
printedCommands.set(pkgCommand, action);
}
if (pkgCommands.size > 0) {
reporter.info(`${reporter.lang('possibleCommands')}`);
reporter.list('possibleCommands', Array.from(pkgCommands), toObject(printedCommands));
if (!flags.nonInteractive) {
yield reporter.question(reporter.lang('commandQuestion')).then(function (answer) {
return runCommand(answer.trim().split(' '));
}, function () {
return reporter.error(reporter.lang('commandNotSpecified'));
});
}
} else {
reporter.error(reporter.lang('noScriptsAvailable'));
}
return Promise.resolve();
} else {
return runCommand(args);
}
});
return function run(_x2, _x3, _x4, _x5) {
return _ref9.apply(this, arguments);
};
})();
exports.setFlags = setFlags;
exports.hasWrapper = hasWrapper;
var _executeLifecycleScript;
function _load_executeLifecycleScript() {
return _executeLifecycleScript = require('../../util/execute-lifecycle-script.js');
}
var _dynamicRequire;
function _load_dynamicRequire() {
return _dynamicRequire = require('../../util/dynamic-require.js');
}
var _hooks;
function _load_hooks() {
return _hooks = require('../../util/hooks.js');
}
var _errors;
function _load_errors() {
return _errors = require('../../errors.js');
}
var _packageCompatibility;
function _load_packageCompatibility() {
return _packageCompatibility = require('../../package-compatibility.js');
}
var _fs;
function _load_fs() {
return _fs = _interopRequireWildcard(require('../../util/fs.js'));
}
var _constants;
function _load_constants() {
return _constants = _interopRequireWildcard(require('../../constants.js'));
}
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const invariant = require('invariant');
const leven = require('leven');
const path = require('path');
var _require = require('puka');
const quoteForShell = _require.quoteForShell,
sh = _require.sh,
unquoted = _require.unquoted;
function toObject(input) {
const output = Object.create(null);
for (var _iterator = input.entries(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref2;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref2 = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref2 = _i.value;
}
const _ref = _ref2;
const key = _ref[0];
const val = _ref[1];
output[key] = val;
}
return output;
}
function setFlags(commander) {
commander.description('Runs a defined package script.');
}
function hasWrapper(commander, args) {
return true;
}