UNPKG

@dependabot/yarn-lib

Version:

📦🐈 Fast, reliable, and secure dependency management.

283 lines (210 loc) 9.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.examples = exports.setFlags = exports.run = undefined; var _extends2; function _load_extends() { return _extends2 = _interopRequireDefault(require('babel-runtime/helpers/extends')); } var _asyncToGenerator2; function _load_asyncToGenerator() { return _asyncToGenerator2 = _interopRequireDefault(require('babel-runtime/helpers/asyncToGenerator')); } let fetchReleases = (() => { var _ref = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (config, { includePrereleases = false } = {}) { const token = process.env.GITHUB_TOKEN; const tokenUrlParameter = token ? `?access_token=${token}` : ''; const request = yield config.requestManager.request({ url: `https://api.github.com/repos/yarnpkg/yarn/releases${tokenUrlParameter}`, json: true }); const releases = request.filter(function (release) { if (release.draft) { return false; } if (release.prerelease && !includePrereleases) { return false; } // $FlowFixMe release.version = semver.coerce(release.tag_name); if (!release.version) { return false; } if (!getBundleAsset(release)) { return false; } return true; }); releases.sort(function (a, b) { // $FlowFixMe return -semver.compare(a.version, b.version); }); return releases; }); return function fetchReleases(_x) { return _ref.apply(this, arguments); }; })(); exports.hasWrapper = hasWrapper; var _yarnVersion; function _load_yarnVersion() { return _yarnVersion = require('../../util/yarn-version.js'); } var _child; function _load_child() { return _child = _interopRequireWildcard(require('../../util/child.js')); } var _buildSubCommands2; function _load_buildSubCommands() { return _buildSubCommands2 = _interopRequireDefault(require('./_build-sub-commands.js')); } var _rc; function _load_rc() { return _rc = require('../../rc.js'); } var _fs; function _load_fs() { return _fs = _interopRequireWildcard(require('../../util/fs.js')); } var _lockfile; function _load_lockfile() { return _lockfile = require('../../lockfile'); } var _semver; function _load_semver() { return _semver = require('../../util/semver.js'); } var _constants; function _load_constants() { return _constants = require('../../constants'); } 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 }; } /* eslint-disable max-len */ const V2_NAMES = ['berry', 'stable', 'canary', 'v2', '2']; const isLocalFile = version => version.match(/^\.{0,2}[\\/]/) || path.isAbsolute(version); const isV2Version = version => (0, (_semver || _load_semver()).satisfiesWithPrereleases)(version, '>=2.0.0'); const chalk = require('chalk'); const invariant = require('invariant'); const path = require('path'); const semver = require('semver'); function getBundleAsset(release) { return release.assets.find(asset => { return asset.name.match(/^yarn-[0-9]+\.[0-9]+\.[0-9]+\.js$/); }); } function fetchBundle(config, url) { return config.requestManager.request({ url, buffer: true }); } function hasWrapper(flags, args) { return false; } var _buildSubCommands = (0, (_buildSubCommands2 || _load_buildSubCommands()).default)('policies', { setVersion(config, reporter, flags, args) { return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* () { const initialRange = args[0] || 'latest'; let range = initialRange; let allowRc = flags.rc; if (range === 'rc') { reporter.log(`${chalk.yellow(`Warning:`)} Your current Yarn binary is currently Yarn ${(_yarnVersion || _load_yarnVersion()).version}; to avoid potential breaking changes, 'set version rc' won't receive upgrades past the 1.22.x branch.\n To upgrade to the latest versions, run ${chalk.cyan(`yarn set version`)} ${chalk.yellow.underline(`canary`)} instead. Sorry for the inconvenience.\n`); range = '*'; allowRc = true; } if (range === 'latest') { reporter.log(`${chalk.yellow(`Warning:`)} Your current Yarn binary is currently Yarn ${(_yarnVersion || _load_yarnVersion()).version}; to avoid potential breaking changes, 'set version latest' won't receive upgrades past the 1.22.x branch.\n To upgrade to the latest versions, run ${chalk.cyan(`yarn set version`)} ${chalk.yellow.underline(`stable`)} instead. Sorry for the inconvenience.\n`); range = '*'; } if (range === 'classic') { range = '*'; } let bundleUrl; let bundleVersion; const isV2 = false; if (range === 'nightly' || range === 'nightlies') { reporter.log(`${chalk.yellow(`Warning:`)} Nightlies only exist for Yarn 1.x; starting from 2.x onwards, you should use 'canary' instead`); bundleUrl = 'https://nightly.yarnpkg.com/latest.js'; bundleVersion = 'nightly'; } else if (V2_NAMES.includes(range) || isLocalFile(range) || isV2Version(range)) { const normalizedRange = isV2Version(range) ? range : range === `canary` ? `canary` : `stable`; if (process.env.COREPACK_ROOT) { yield (_child || _load_child()).spawn((_constants || _load_constants()).NODE_BIN_PATH, [path.join(process.env.COREPACK_ROOT, 'dist/corepack.js'), `yarn@${normalizedRange}`, `set`, `version`, normalizedRange], { stdio: 'inherit', cwd: config.cwd }); return; } else { const bundle = yield fetchBundle(config, 'https://github.com/yarnpkg/berry/raw/master/packages/yarnpkg-cli/bin/yarn.js'); const yarnPath = path.resolve(config.lockfileFolder, `.yarn/releases/yarn-stable-temp.cjs`); yield (_fs || _load_fs()).mkdirp(path.dirname(yarnPath)); yield (_fs || _load_fs()).writeFile(yarnPath, bundle); yield (_fs || _load_fs()).chmod(yarnPath, 0o755); try { yield (_child || _load_child()).spawn((_constants || _load_constants()).NODE_BIN_PATH, [yarnPath, 'set', 'version', range], { stdio: 'inherit', cwd: config.lockfileFolder, env: (0, (_extends2 || _load_extends()).default)({}, process.env, { YARN_IGNORE_PATH: `1` }) }); } catch (err) { // eslint-disable-next-line no-process-exit process.exit(1); } return; } } else { reporter.log(`Resolving ${chalk.yellow(initialRange)} to a url...`); let releases = []; try { releases = yield fetchReleases(config, { includePrereleases: allowRc }); } catch (e) { reporter.error(e.message); return; } const release = releases.find(function (release) { // $FlowFixMe return semver.satisfies(release.version, range); }); if (!release) { throw new Error(`Release not found: ${range}`); } const asset = getBundleAsset(release); invariant(asset, 'The bundle asset should exist'); bundleUrl = asset.browser_download_url; bundleVersion = release.version.version; } reporter.log(`Downloading ${chalk.green(bundleUrl)}...`); const bundle = yield fetchBundle(config, bundleUrl); const yarnPath = path.resolve(config.lockfileFolder, `.yarn/releases/yarn-${bundleVersion}.cjs`); reporter.log(`Saving it into ${chalk.magenta(yarnPath)}...`); yield (_fs || _load_fs()).mkdirp(path.dirname(yarnPath)); yield (_fs || _load_fs()).writeFile(yarnPath, bundle); yield (_fs || _load_fs()).chmod(yarnPath, 0o755); const targetPath = path.relative(config.lockfileFolder, yarnPath).replace(/\\/g, '/'); if (isV2) { const rcPath = `${config.lockfileFolder}/.yarnrc.yml`; reporter.log(`Updating ${chalk.magenta(rcPath)}...`); yield (_fs || _load_fs()).writeFilePreservingEol(rcPath, `yarnPath: ${JSON.stringify(targetPath)}\n`); } else { const rcPath = `${config.lockfileFolder}/.yarnrc`; reporter.log(`Updating ${chalk.magenta(rcPath)}...`); const rc = (0, (_rc || _load_rc()).getRcConfigForFolder)(config.lockfileFolder); rc['yarn-path'] = targetPath; yield (_fs || _load_fs()).writeFilePreservingEol(rcPath, `${(0, (_lockfile || _load_lockfile()).stringify)(rc)}\n`); } reporter.log(`Done!`); })(); } }); const run = _buildSubCommands.run, setFlags = _buildSubCommands.setFlags, examples = _buildSubCommands.examples; exports.run = run; exports.setFlags = setFlags; exports.examples = examples;