UNPKG

@dependabot/yarn-lib

Version:

📦🐈 Fast, reliable, and secure dependency management.

281 lines (227 loc) 9.63 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.run = exports.setVersion = undefined; var _asyncToGenerator2; function _load_asyncToGenerator() { return _asyncToGenerator2 = _interopRequireDefault(require('babel-runtime/helpers/asyncToGenerator')); } let setVersion = exports.setVersion = (() => { var _ref = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (config, reporter, flags, args, required) { const pkg = yield config.readRootManifest(); const pkgLoc = pkg._loc; const scripts = (0, (_map || _load_map()).default)(); let newVersion = flags.newVersion; let identifier = undefined; if (flags.preid) { identifier = flags.preid; } invariant(pkgLoc, 'expected package location'); if (args.length && !newVersion) { throw new (_errors || _load_errors()).MessageError(reporter.lang('invalidVersionArgument', NEW_VERSION_FLAG)); } function runLifecycle(lifecycle) { if (scripts[lifecycle]) { return (0, (_executeLifecycleScript || _load_executeLifecycleScript()).execCommand)({ stage: lifecycle, config, cmd: scripts[lifecycle], cwd: config.cwd, isInteractive: true }); } return Promise.resolve(); } function isCommitHooksDisabled() { return flags.commitHooks === false || config.getOption('version-commit-hooks') === false; } if (pkg.scripts) { // inherit `scripts` from manifest Object.assign(scripts, pkg.scripts); } // get old version let oldVersion = pkg.version; if (oldVersion) { reporter.info(`${reporter.lang('currentVersion')}: ${oldVersion}`); } else { oldVersion = '0.0.0'; } // get new version if (newVersion && !isValidNewVersion(oldVersion, newVersion, config.looseSemver, identifier)) { throw new (_errors || _load_errors()).MessageError(reporter.lang('invalidVersion')); } // get new version by bumping old version, if requested if (!newVersion) { if (flags.major) { newVersion = semver.inc(oldVersion, 'major'); } else if (flags.minor) { newVersion = semver.inc(oldVersion, 'minor'); } else if (flags.patch) { newVersion = semver.inc(oldVersion, 'patch'); } else if (flags.premajor) { newVersion = semver.inc(oldVersion, 'premajor', identifier); } else if (flags.preminor) { newVersion = semver.inc(oldVersion, 'preminor', identifier); } else if (flags.prepatch) { newVersion = semver.inc(oldVersion, 'prepatch', identifier); } else if (flags.prerelease) { newVersion = semver.inc(oldVersion, 'prerelease', identifier); } } // wasn't passed a version arg so ask interactively while (!newVersion) { // make sure we're not running in non-interactive mode before asking for new version if (flags.nonInteractive || config.nonInteractive) { // if no version is specified, use current version in package.json newVersion = oldVersion; break; } // Make sure we dont exit with an error message when pressing Ctrl-C or enter to abort try { newVersion = yield reporter.question(reporter.lang('newVersion')); if (!newVersion) { newVersion = oldVersion; } } catch (err) { newVersion = oldVersion; } if (!required && !newVersion) { reporter.info(`${reporter.lang('noVersionOnPublish')}: ${oldVersion}`); return function () { return Promise.resolve(); }; } if (isValidNewVersion(oldVersion, newVersion, config.looseSemver, identifier)) { break; } else { newVersion = null; reporter.error(reporter.lang('invalidSemver')); } } if (newVersion) { newVersion = semver.inc(oldVersion, newVersion, config.looseSemver, identifier) || newVersion; } invariant(newVersion, 'expected new version'); if (newVersion === pkg.version) { return function () { return Promise.resolve(); }; } yield runLifecycle('preversion'); // update version reporter.info(`${reporter.lang('newVersion')}: ${newVersion}`); pkg.version = newVersion; // update versions in manifests const manifests = yield config.getRootManifests(); for (var _iterator = (_index || _load_index()).registryNames, _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 registryName = _ref2; const manifest = manifests[registryName]; if (manifest.exists) { manifest.object.version = newVersion; } } yield config.saveRootManifests(manifests); yield runLifecycle('version'); return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* () { invariant(newVersion, 'expected version'); // check if a new git tag should be created if (flags.gitTagVersion && config.getOption('version-git-tag')) { // add git commit and tag let isGit = false; const parts = config.cwd.split(path.sep); while (parts.length) { isGit = yield (_fs || _load_fs()).exists(path.join(parts.join(path.sep), '.git')); if (isGit) { break; } else { parts.pop(); } } if (isGit) { const message = (flags.message || String(config.getOption('version-git-message'))).replace(/%s/g, newVersion); const sign = Boolean(config.getOption('version-sign-git-tag')); const flag = sign ? '-sm' : '-am'; const prefix = String(config.getOption('version-tag-prefix')); const args = ['commit', '-m', message, ...(isCommitHooksDisabled() ? ['-n'] : [])]; const gitRoot = (yield (0, (_gitSpawn || _load_gitSpawn()).spawn)(['rev-parse', '--show-toplevel'], { cwd: config.cwd })).trim(); // add manifest yield (0, (_gitSpawn || _load_gitSpawn()).spawn)(['add', path.relative(gitRoot, pkgLoc)], { cwd: gitRoot }); // create git commit yield (0, (_gitSpawn || _load_gitSpawn()).spawn)(args, { cwd: gitRoot }); // create git tag yield (0, (_gitSpawn || _load_gitSpawn()).spawn)(['tag', `${prefix}${newVersion}`, flag, message], { cwd: gitRoot }); } } yield runLifecycle('postversion'); }); }); return function setVersion(_x, _x2, _x3, _x4, _x5) { return _ref.apply(this, arguments); }; })(); let run = exports.run = (() => { var _ref4 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (config, reporter, flags, args) { const commit = yield setVersion(config, reporter, flags, args, true); yield commit(); }); return function run(_x6, _x7, _x8, _x9) { return _ref4.apply(this, arguments); }; })(); exports.setFlags = setFlags; exports.hasWrapper = hasWrapper; var _index; function _load_index() { return _index = require('../../registries/index.js'); } var _executeLifecycleScript; function _load_executeLifecycleScript() { return _executeLifecycleScript = require('../../util/execute-lifecycle-script.js'); } var _errors; function _load_errors() { return _errors = require('../../errors.js'); } var _gitSpawn; function _load_gitSpawn() { return _gitSpawn = require('../../util/git/git-spawn.js'); } var _fs; function _load_fs() { return _fs = _interopRequireWildcard(require('../../util/fs.js')); } var _map; function _load_map() { return _map = _interopRequireDefault(require('../../util/map.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 semver = require('semver'); const path = require('path'); const NEW_VERSION_FLAG = '--new-version [version]'; function isValidNewVersion(oldVersion, newVersion, looseSemver, identifier) { return !!(semver.valid(newVersion, looseSemver) || semver.inc(oldVersion, newVersion, looseSemver, identifier)); } function setFlags(commander) { commander.description('Update the version of your package via the command line.'); commander.option(NEW_VERSION_FLAG, 'new version'); commander.option('--major', 'auto-increment major version number'); commander.option('--minor', 'auto-increment minor version number'); commander.option('--patch', 'auto-increment patch version number'); commander.option('--premajor', 'auto-increment premajor version number'); commander.option('--preminor', 'auto-increment preminor version number'); commander.option('--prepatch', 'auto-increment prepatch version number'); commander.option('--prerelease', 'auto-increment prerelease version number'); commander.option('--preid [preid]', 'add a custom identifier to the prerelease'); commander.option('--message [message]', 'message'); commander.option('--no-git-tag-version', 'no git tag version'); commander.option('--no-commit-hooks', 'bypass git hooks when committing new version'); } function hasWrapper(commander, args) { return true; }