UNPKG

paco

Version:

Node package development/distribution utility kit

94 lines (76 loc) 2.42 kB
#!/usr/bin/env node 'use strict'; var path = require('path'); var comeondo = require('comeondo'); var Q = require('q'); var pathHelpers = require('./paths'); /** * Returns a path to the nearest package.json config containing a * npm script with a given name. */ function getNearestPackageJsonWithTask(task) { var packageJsonPaths = pathHelpers.getTraversedFilesNamed('package.json', { stopAt: process.env.PACO_ROOT_PATH }); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = packageJsonPaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var filepath = _step.value; var info = require(filepath); if (info.scripts && info.scripts[task]) { return filepath; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return null; } /** * Checks if an npm script, optionally searching parent modules. */ function hasTask(task) { var opts = arguments.length <= 1 || arguments[1] === undefined ? { traverse: true } : arguments[1]; var packageJsonPath = opts.traverse ? getNearestPackageJsonWithTask(task) : process.env.PACO_PACKAGE_JSON_PATH; if (packageJsonPath) { var packageJson = require(packageJsonPath); return !!(packageJson.scripts && packageJson.scripts[task]); } return false; } /** * Runs an npm script, optionally in parent modules with a $PACO_CWD * node environment variable. */ function runTask(task) { var opts = arguments.length <= 1 || arguments[1] === undefined ? { traverse: true } : arguments[1]; opts.cwd = opts.cwd || process.cwd(); var taskPackageJsonPath = opts.traverse ? getNearestPackageJsonWithTask(task) : process.env.PACO_PACKAGE_JSON_PATH; if (taskPackageJsonPath) { return comeondo.exec('npm run ' + task, { cwd: path.dirname(taskPackageJsonPath), env: Object.assign({}, process.env, { PACO_CWD: opts.cwd }) }); } return Q(null); } module.exports = { getNearestPackageJsonWithTask: getNearestPackageJsonWithTask, hasTask: hasTask, runTask: runTask };