JezK
Edit File: install.js
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof3 = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.Install = void 0; exports.hasWrapper = hasWrapper; exports.install = install; exports.run = run; exports.setFlags = setFlags; exports.wrapLifecycle = wrapLifecycle; function _regenerator() { var data = _interopRequireDefault(require("@babel/runtime/regenerator")); _regenerator = function _regenerator() { return data; }; return data; } function _typeof2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); _typeof2 = function _typeof2() { return data; }; return data; } function _toConsumableArray2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); _toConsumableArray2 = function _toConsumableArray2() { return data; }; return data; } function _asyncToGenerator2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); _asyncToGenerator2 = function _asyncToGenerator2() { return data; }; return data; } function _classCallCheck2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); _classCallCheck2 = function _classCallCheck2() { return data; }; return data; } function _createClass2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); _createClass2 = function _createClass2() { return data; }; return data; } function _defineProperty2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); _defineProperty2 = function _defineProperty2() { return data; }; return data; } function _objectPath() { var data = _interopRequireDefault(require("object-path")); _objectPath = function _objectPath() { return data; }; return data; } function _hooks() { var data = require("../../util/hooks.js"); _hooks = function _hooks() { return data; }; return data; } function _index() { var data = _interopRequireDefault(require("../../util/normalize-manifest/index.js")); _index = function _index() { return data; }; return data; } function _errors() { var data = require("../../errors.js"); _errors = function _errors() { return data; }; return data; } function _integrityChecker() { var data = _interopRequireDefault(require("../../integrity-checker.js")); _integrityChecker = function _integrityChecker() { return data; }; return data; } function _lockfile() { var data = _interopRequireWildcard(require("../../lockfile")); _lockfile = function _lockfile() { return data; }; return data; } function fetcher() { var data = _interopRequireWildcard(require("../../package-fetcher.js")); fetcher = function fetcher() { return data; }; return data; } function _packageInstallScripts() { var data = _interopRequireDefault(require("../../package-install-scripts.js")); _packageInstallScripts = function _packageInstallScripts() { return data; }; return data; } function compatibility() { var data = _interopRequireWildcard(require("../../package-compatibility.js")); compatibility = function compatibility() { return data; }; return data; } function _packageResolver() { var data = _interopRequireDefault(require("../../package-resolver.js")); _packageResolver = function _packageResolver() { return data; }; return data; } function _packageLinker() { var data = _interopRequireDefault(require("../../package-linker.js")); _packageLinker = function _packageLinker() { return data; }; return data; } function _index2() { var data = require("../../registries/index.js"); _index2 = function _index2() { return data; }; return data; } function _index3() { var data = require("../../resolvers/index.js"); _index3 = function _index3() { return data; }; return data; } function _autoclean() { var data = require("./autoclean.js"); _autoclean = function _autoclean() { return data; }; return data; } function constants() { var data = _interopRequireWildcard(require("../../constants.js")); constants = function constants() { return data; }; return data; } function _normalizePattern() { var data = require("../../util/normalize-pattern.js"); _normalizePattern = function _normalizePattern() { return data; }; return data; } function fs() { var data = _interopRequireWildcard(require("../../util/fs.js")); fs = function fs() { return data; }; return data; } function _map() { var data = _interopRequireDefault(require("../../util/map.js")); _map = function _map() { return data; }; return data; } function _yarnVersion() { var data = require("../../util/yarn-version.js"); _yarnVersion = function _yarnVersion() { return data; }; return data; } function _generatePnpMap() { var data = require("../../util/generate-pnp-map.js"); _generatePnpMap = function _generatePnpMap() { return data; }; return data; } function _workspaceLayout() { var data = _interopRequireDefault(require("../../workspace-layout.js")); _workspaceLayout = function _workspaceLayout() { return data; }; return data; } function _resolutionMap() { var data = _interopRequireDefault(require("../../resolution-map.js")); _resolutionMap = function _resolutionMap() { return data; }; return data; } function _guessName() { var data = _interopRequireDefault(require("../../util/guess-name")); _guessName = function _guessName() { return data; }; return data; } function _audit() { var data = _interopRequireDefault(require("./audit")); _audit = function _audit() { return data; }; return data; } function _uuid() { var data = require("uuid"); _uuid = function _uuid() { return data; }; return data; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2()["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } var deepEqual = require('deep-equal'); var emoji = require('node-emoji'); var invariant = require('invariant'); var path = require('path'); var semver = require('semver'); var ssri = require('ssri'); var ONE_DAY = 1000 * 60 * 60 * 24; /** * Try and detect the installation method for Yarn and provide a command to update it with. */ function getUpdateCommand(installationMethod) { if (installationMethod === 'tar') { return "curl --compressed -o- -L ".concat(constants().YARN_INSTALLER_SH, " | bash"); } if (installationMethod === 'homebrew') { return 'brew upgrade yarn'; } if (installationMethod === 'deb') { return 'sudo apt-get update && sudo apt-get install yarn'; } if (installationMethod === 'rpm') { return 'sudo yum install yarn'; } if (installationMethod === 'npm') { return 'npm install --global yarn'; } if (installationMethod === 'chocolatey') { return 'choco upgrade yarn'; } if (installationMethod === 'apk') { return 'apk update && apk add -u yarn'; } if (installationMethod === 'portage') { return 'sudo emerge --sync && sudo emerge -au sys-apps/yarn'; } return null; } function getUpdateInstaller(installationMethod) { // Windows if (installationMethod === 'msi') { return constants().YARN_INSTALLER_MSI; } return null; } function normalizeFlags(config, rawFlags) { var flags = { // install har: !!rawFlags.har, ignorePlatform: !!rawFlags.ignorePlatform, ignoreEngines: !!rawFlags.ignoreEngines, ignoreScripts: !!rawFlags.ignoreScripts, ignoreOptional: !!rawFlags.ignoreOptional, force: !!rawFlags.force, flat: !!rawFlags.flat, lockfile: rawFlags.lockfile !== false, pureLockfile: !!rawFlags.pureLockfile, updateChecksums: !!rawFlags.updateChecksums, skipIntegrityCheck: !!rawFlags.skipIntegrityCheck, frozenLockfile: !!rawFlags.frozenLockfile, linkDuplicates: !!rawFlags.linkDuplicates, checkFiles: !!rawFlags.checkFiles, audit: !!rawFlags.audit, // add peer: !!rawFlags.peer, dev: !!rawFlags.dev, optional: !!rawFlags.optional, exact: !!rawFlags.exact, tilde: !!rawFlags.tilde, ignoreWorkspaceRootCheck: !!rawFlags.ignoreWorkspaceRootCheck, // outdated, update-interactive includeWorkspaceDeps: !!rawFlags.includeWorkspaceDeps, // add, remove, update workspaceRootIsCwd: rawFlags.workspaceRootIsCwd !== false }; if (config.getOption('ignore-scripts')) { flags.ignoreScripts = true; } if (config.getOption('ignore-platform')) { flags.ignorePlatform = true; } if (config.getOption('ignore-engines')) { flags.ignoreEngines = true; } if (config.getOption('ignore-optional')) { flags.ignoreOptional = true; } if (config.getOption('force')) { flags.force = true; } return flags; } var Install = /*#__PURE__*/function () { function Install(flags, config, reporter, lockfile) { (0, _classCallCheck2()["default"])(this, Install); (0, _defineProperty2()["default"])(this, "flags", void 0); (0, _defineProperty2()["default"])(this, "rootManifestRegistries", void 0); (0, _defineProperty2()["default"])(this, "registries", void 0); (0, _defineProperty2()["default"])(this, "lockfile", void 0); (0, _defineProperty2()["default"])(this, "resolutions", void 0); (0, _defineProperty2()["default"])(this, "config", void 0); (0, _defineProperty2()["default"])(this, "reporter", void 0); (0, _defineProperty2()["default"])(this, "resolver", void 0); (0, _defineProperty2()["default"])(this, "scripts", void 0); (0, _defineProperty2()["default"])(this, "linker", void 0); (0, _defineProperty2()["default"])(this, "rootPatternsToOrigin", void 0); (0, _defineProperty2()["default"])(this, "integrityChecker", void 0); (0, _defineProperty2()["default"])(this, "resolutionMap", void 0); (0, _defineProperty2()["default"])(this, "maybeOutputUpdate", void 0); this.rootManifestRegistries = []; this.rootPatternsToOrigin = (0, _map()["default"])(); this.lockfile = lockfile; this.reporter = reporter; this.config = config; this.flags = normalizeFlags(config, flags); this.resolutions = (0, _map()["default"])(); // Legacy resolutions field used for flat install mode this.resolutionMap = new (_resolutionMap()["default"])(config); // Selective resolutions for nested dependencies this.resolver = new (_packageResolver()["default"])(config, lockfile, this.resolutionMap); this.integrityChecker = new (_integrityChecker()["default"])(config); this.linker = new (_packageLinker()["default"])(config, this.resolver); this.scripts = new (_packageInstallScripts()["default"])(config, this.resolver, this.flags.force); } (0, _createClass2()["default"])(Install, [{ key: "fetchRequestFromCwd", value: /** * Create a list of dependency requests from the current directories manifests. */ function () { var _fetchRequestFromCwd = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee() { var _this = this; var excludePatterns, ignoreUnusedPatterns, patterns, deps, resolutionDeps, manifest, ignorePatterns, usedPatterns, workspaceLayout, cwd, cwdIsRoot, excludeNames, _iterator, _step, _pattern3, parts, stripExcluded, _loop, _i2, _Object$keys, _ret, _args2 = arguments; return _regenerator()["default"].wrap(function _callee$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: excludePatterns = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : []; ignoreUnusedPatterns = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : false; patterns = []; deps = []; resolutionDeps = []; manifest = {}; ignorePatterns = []; usedPatterns = []; // some commands should always run in the context of the entire workspace cwd = this.flags.includeWorkspaceDeps || this.flags.workspaceRootIsCwd ? this.config.lockfileFolder : this.config.cwd; // non-workspaces are always root, otherwise check for workspace root cwdIsRoot = !this.config.workspaceRootFolder || this.config.lockfileFolder === cwd; // exclude package names that are in install args excludeNames = []; _iterator = _createForOfIteratorHelper(excludePatterns); try { for (_iterator.s(); !(_step = _iterator.n()).done;) { _pattern3 = _step.value; if ((0, _index3().getExoticResolver)(_pattern3)) { excludeNames.push((0, _guessName()["default"])(_pattern3)); } else { // extract the name parts = (0, _normalizePattern().normalizePattern)(_pattern3); excludeNames.push(parts.name); } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } stripExcluded = function stripExcluded(manifest) { for (var _i = 0, _excludeNames = excludeNames; _i < _excludeNames.length; _i++) { var exclude = _excludeNames[_i]; if (manifest.dependencies && manifest.dependencies[exclude]) { delete manifest.dependencies[exclude]; } if (manifest.devDependencies && manifest.devDependencies[exclude]) { delete manifest.devDependencies[exclude]; } if (manifest.optionalDependencies && manifest.optionalDependencies[exclude]) { delete manifest.optionalDependencies[exclude]; } } }; _loop = /*#__PURE__*/_regenerator()["default"].mark(function _loop() { var registry, filename, loc, projectManifestJson, _i3, _Object$keys2, _packageName, optional, _iterator2, _step2, _pattern, pushDeps, workspaceLoc, workspacesRoot, workspaceManifestJson, workspaces, workspaceDependencies, _i4, _Object$keys3, workspaceName, workspaceManifest, virtualDependencyManifest, virtualDep, implicitWorkspaceDependencies, _iterator3, _step3, type, _i5, _Object$keys4, dependencyName; return _regenerator()["default"].wrap(function _loop$(_context) { while (1) switch (_context.prev = _context.next) { case 0: registry = _Object$keys[_i2]; filename = _index2().registries[registry].filename; loc = path.join(cwd, filename); _context.next = 5; return fs().exists(loc); case 5: if (_context.sent) { _context.next = 7; break; } return _context.abrupt("return", "continue"); case 7: _this.rootManifestRegistries.push(registry); _context.next = 10; return _this.config.readJson(loc); case 10: projectManifestJson = _context.sent; _context.next = 13; return (0, _index()["default"])(projectManifestJson, cwd, _this.config, cwdIsRoot); case 13: Object.assign(_this.resolutions, projectManifestJson.resolutions); Object.assign(manifest, projectManifestJson); _this.resolutionMap.init(_this.resolutions); for (_i3 = 0, _Object$keys2 = Object.keys(_this.resolutionMap.resolutionsByPackage); _i3 < _Object$keys2.length; _i3++) { _packageName = _Object$keys2[_i3]; optional = _objectPath()["default"].has(manifest.optionalDependencies, _packageName) && _this.flags.ignoreOptional; _iterator2 = _createForOfIteratorHelper(_this.resolutionMap.resolutionsByPackage[_packageName]); try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { _pattern = _step2.value.pattern; resolutionDeps = [].concat((0, _toConsumableArray2()["default"])(resolutionDeps), [{ registry: registry, pattern: _pattern, optional: optional, hint: 'resolution' }]); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } pushDeps = function pushDeps(depType, manifest, _ref, isUsed) { var hint = _ref.hint, optional = _ref.optional; if (ignoreUnusedPatterns && !isUsed) { return; } // We only take unused dependencies into consideration to get deterministic hoisting. // Since flat mode doesn't care about hoisting and everything is top level and specified then we can safely // leave these out. if (_this.flags.flat && !isUsed) { return; } var depMap = manifest[depType]; for (var name in depMap) { if (excludeNames.indexOf(name) >= 0) { continue; } var _pattern2 = name; if (!_this.lockfile.getLocked(_pattern2)) { // when we use --save we save the dependency to the lockfile with just the name rather than the // version combo _pattern2 += '@' + depMap[name]; } // normalization made sure packages are mentioned only once if (isUsed) { usedPatterns.push(_pattern2); } else { ignorePatterns.push(_pattern2); } _this.rootPatternsToOrigin[_pattern2] = depType; patterns.push(_pattern2); deps.push({ pattern: _pattern2, registry: registry, hint: hint, optional: optional, workspaceName: manifest.name, workspaceLoc: manifest._loc }); } }; if (cwdIsRoot) { pushDeps('dependencies', projectManifestJson, { hint: null, optional: false }, true); pushDeps('devDependencies', projectManifestJson, { hint: 'dev', optional: false }, !_this.config.production); pushDeps('optionalDependencies', projectManifestJson, { hint: 'optional', optional: true }, true); } if (!_this.config.workspaceRootFolder) { _context.next = 46; break; } workspaceLoc = cwdIsRoot ? loc : path.join(_this.config.lockfileFolder, filename); workspacesRoot = path.dirname(workspaceLoc); workspaceManifestJson = projectManifestJson; if (cwdIsRoot) { _context.next = 29; break; } _context.next = 26; return _this.config.readJson(workspaceLoc); case 26: workspaceManifestJson = _context.sent; _context.next = 29; return (0, _index()["default"])(workspaceManifestJson, workspacesRoot, _this.config, true); case 29: _context.next = 31; return _this.config.resolveWorkspaces(workspacesRoot, workspaceManifestJson); case 31: workspaces = _context.sent; workspaceLayout = new (_workspaceLayout()["default"])(workspaces, _this.config); // add virtual manifest that depends on all workspaces, this way package hoisters and resolvers will work fine workspaceDependencies = _objectSpread({}, workspaceManifestJson.dependencies); for (_i4 = 0, _Object$keys3 = Object.keys(workspaces); _i4 < _Object$keys3.length; _i4++) { workspaceName = _Object$keys3[_i4]; workspaceManifest = workspaces[workspaceName].manifest; workspaceDependencies[workspaceName] = workspaceManifest.version; // include dependencies from all workspaces if (_this.flags.includeWorkspaceDeps) { pushDeps('dependencies', workspaceManifest, { hint: null, optional: false }, true); pushDeps('devDependencies', workspaceManifest, { hint: 'dev', optional: false }, !_this.config.production); pushDeps('optionalDependencies', workspaceManifest, { hint: 'optional', optional: true }, true); } } virtualDependencyManifest = { _uid: '', name: "workspace-aggregator-".concat((0, _uuid().v4)()), version: '1.0.0', _registry: 'npm', _loc: workspacesRoot, dependencies: workspaceDependencies, devDependencies: _objectSpread({}, workspaceManifestJson.devDependencies), optionalDependencies: _objectSpread({}, workspaceManifestJson.optionalDependencies), "private": workspaceManifestJson["private"], workspaces: workspaceManifestJson.workspaces }; workspaceLayout.virtualManifestName = virtualDependencyManifest.name; virtualDep = {}; virtualDep[virtualDependencyManifest.name] = virtualDependencyManifest.version; workspaces[virtualDependencyManifest.name] = { loc: workspacesRoot, manifest: virtualDependencyManifest }; // ensure dependencies that should be excluded are stripped from the correct manifest stripExcluded(cwdIsRoot ? virtualDependencyManifest : workspaces[projectManifestJson.name].manifest); pushDeps('workspaces', { workspaces: virtualDep }, { hint: 'workspaces', optional: false }, true); implicitWorkspaceDependencies = _objectSpread({}, workspaceDependencies); _iterator3 = _createForOfIteratorHelper(constants().OWNED_DEPENDENCY_TYPES); try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { type = _step3.value; for (_i5 = 0, _Object$keys4 = Object.keys(projectManifestJson[type] || {}); _i5 < _Object$keys4.length; _i5++) { dependencyName = _Object$keys4[_i5]; delete implicitWorkspaceDependencies[dependencyName]; } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } pushDeps('dependencies', { dependencies: implicitWorkspaceDependencies }, { hint: 'workspaces', optional: false }, true); case 46: return _context.abrupt("return", "break"); case 47: case "end": return _context.stop(); } }, _loop); }); _i2 = 0, _Object$keys = Object.keys(_index2().registries); case 16: if (!(_i2 < _Object$keys.length)) { _context2.next = 26; break; } return _context2.delegateYield(_loop(), "t0", 18); case 18: _ret = _context2.t0; if (!(_ret === "continue")) { _context2.next = 21; break; } return _context2.abrupt("continue", 23); case 21: if (!(_ret === "break")) { _context2.next = 23; break; } return _context2.abrupt("break", 26); case 23: _i2++; _context2.next = 16; break; case 26: // inherit root flat flag if (manifest.flat) { this.flags.flat = true; } return _context2.abrupt("return", { requests: [].concat((0, _toConsumableArray2()["default"])(resolutionDeps), deps), patterns: patterns, manifest: manifest, usedPatterns: usedPatterns, ignorePatterns: ignorePatterns, workspaceLayout: workspaceLayout }); case 28: case "end": return _context2.stop(); } }, _callee, this); })); function fetchRequestFromCwd() { return _fetchRequestFromCwd.apply(this, arguments); } return fetchRequestFromCwd; }() /** * TODO description */ }, { key: "prepareRequests", value: function prepareRequests(requests) { return requests; } }, { key: "preparePatterns", value: function preparePatterns(patterns) { return patterns; } }, { key: "preparePatternsForLinking", value: function preparePatternsForLinking(patterns, cwdManifest, cwdIsRoot) { return patterns; } }, { key: "prepareManifests", value: function () { var _prepareManifests = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee2() { var manifests; return _regenerator()["default"].wrap(function _callee2$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return this.config.getRootManifests(); case 2: manifests = _context3.sent; return _context3.abrupt("return", manifests); case 4: case "end": return _context3.stop(); } }, _callee2, this); })); function prepareManifests() { return _prepareManifests.apply(this, arguments); } return prepareManifests; }() }, { key: "bailout", value: function () { var _bailout = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee3(patterns, workspaceLayout) { var lockfileCache, lockfileClean, match, haveLockfile, lockfileIntegrityPresent, integrityBailout; return _regenerator()["default"].wrap(function _callee3$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: if (!this.flags.audit) { _context4.next = 2; break; } return _context4.abrupt("return", false); case 2: if (!this.config.plugnplayEnabled) { _context4.next = 4; break; } return _context4.abrupt("return", false); case 4: if (!(this.flags.skipIntegrityCheck || this.flags.force)) { _context4.next = 6; break; } return _context4.abrupt("return", false); case 6: lockfileCache = this.lockfile.cache; if (lockfileCache) { _context4.next = 9; break; } return _context4.abrupt("return", false); case 9: lockfileClean = this.lockfile.parseResultType === 'success'; _context4.next = 12; return this.integrityChecker.check(patterns, lockfileCache, this.flags, workspaceLayout); case 12: match = _context4.sent; if (!(this.flags.frozenLockfile && (!lockfileClean || match.missingPatterns.length > 0))) { _context4.next = 15; break; } throw new (_errors().MessageError)(this.reporter.lang('frozenLockfileError')); case 15: _context4.next = 17; return fs().exists(path.join(this.config.lockfileFolder, constants().LOCKFILE_FILENAME)); case 17: haveLockfile = _context4.sent; lockfileIntegrityPresent = !this.lockfile.hasEntriesExistWithoutIntegrity(); integrityBailout = lockfileIntegrityPresent || !this.config.autoAddIntegrity; if (!(match.integrityMatches && haveLockfile && lockfileClean && integrityBailout)) { _context4.next = 23; break; } this.reporter.success(this.reporter.lang('upToDate')); return _context4.abrupt("return", true); case 23: if (!(match.integrityFileMissing && haveLockfile)) { _context4.next = 26; break; } // Integrity file missing, force script installations this.scripts.setForce(true); return _context4.abrupt("return", false); case 26: if (!match.hardRefreshRequired) { _context4.next = 29; break; } // e.g. node version doesn't match, force script installations this.scripts.setForce(true); return _context4.abrupt("return", false); case 29: if (!(!patterns.length && !match.integrityFileMissing)) { _context4.next = 36; break; } this.reporter.success(this.reporter.lang('nothingToInstall')); _context4.next = 33; return this.createEmptyManifestFolders(); case 33: _context4.next = 35; return this.saveLockfileAndIntegrity(patterns, workspaceLayout); case 35: return _context4.abrupt("return", true); case 36: return _context4.abrupt("return", false); case 37: case "end": return _context4.stop(); } }, _callee3, this); })); function bailout(_x, _x2) { return _bailout.apply(this, arguments); } return bailout; }() /** * Produce empty folders for all used root manifests. */ }, { key: "createEmptyManifestFolders", value: function () { var _createEmptyManifestFolders = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee4() { var _iterator4, _step4, registryName, folder; return _regenerator()["default"].wrap(function _callee4$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: if (!this.config.modulesFolder) { _context5.next = 2; break; } return _context5.abrupt("return"); case 2: _iterator4 = _createForOfIteratorHelper(this.rootManifestRegistries); _context5.prev = 3; _iterator4.s(); case 5: if ((_step4 = _iterator4.n()).done) { _context5.next = 12; break; } registryName = _step4.value; folder = this.config.registries[registryName].folder; _context5.next = 10; return fs().mkdirp(path.join(this.config.lockfileFolder, folder)); case 10: _context5.next = 5; break; case 12: _context5.next = 17; break; case 14: _context5.prev = 14; _context5.t0 = _context5["catch"](3); _iterator4.e(_context5.t0); case 17: _context5.prev = 17; _iterator4.f(); return _context5.finish(17); case 20: case "end": return _context5.stop(); } }, _callee4, this, [[3, 14, 17, 20]]); })); function createEmptyManifestFolders() { return _createEmptyManifestFolders.apply(this, arguments); } return createEmptyManifestFolders; }() /** * TODO description */ }, { key: "markIgnored", value: function markIgnored(patterns) { var _iterator5 = _createForOfIteratorHelper(patterns), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var _pattern4 = _step5.value; var manifest = this.resolver.getStrictResolvedPattern(_pattern4); var ref = manifest._reference; invariant(ref, 'expected package reference'); // just mark the package as ignored. if the package is used by a required package, the hoister // will take care of that. ref.ignore = true; } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } } /** * helper method that gets only recent manifests * used by global.ls command */ }, { key: "getFlattenedDeps", value: function () { var _getFlattenedDeps = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee5() { var _yield$this$fetchRequ, depRequests, rawPatterns, manifests; return _regenerator()["default"].wrap(function _callee5$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: _context6.next = 2; return this.fetchRequestFromCwd(); case 2: _yield$this$fetchRequ = _context6.sent; depRequests = _yield$this$fetchRequ.requests; rawPatterns = _yield$this$fetchRequ.patterns; _context6.next = 7; return this.resolver.init(depRequests, {}); case 7: _context6.next = 9; return fetcher().fetch(this.resolver.getManifests(), this.config); case 9: manifests = _context6.sent; this.resolver.updateManifests(manifests); return _context6.abrupt("return", this.flatten(rawPatterns)); case 12: case "end": return _context6.stop(); } }, _callee5, this); })); function getFlattenedDeps() { return _getFlattenedDeps.apply(this, arguments); } return getFlattenedDeps; }() /** * TODO description */ }, { key: "init", value: function () { var _init = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee15() { var _this2 = this; var flattenedTopLevelPatterns, steps, _yield$this$fetchRequ2, depRequests, rawPatterns, ignorePatterns, workspaceLayout, manifest, topLevelPatterns, artifacts, audit, auditFoundProblems, currentStep, _i6, _steps, step, stepResult; return _regenerator()["default"].wrap(function _callee15$(_context16) { while (1) switch (_context16.prev = _context16.next) { case 0: this.checkUpdate(); // warn if we have a shrinkwrap _context16.next = 3; return fs().exists(path.join(this.config.lockfileFolder, constants().NPM_SHRINKWRAP_FILENAME)); case 3: if (!_context16.sent) { _context16.next = 5; break; } this.reporter.warn(this.reporter.lang('shrinkwrapWarning')); case 5: _context16.next = 7; return fs().exists(path.join(this.config.lockfileFolder, constants().NPM_LOCK_FILENAME)); case 7: if (!_context16.sent) { _context16.next = 9; break; } this.reporter.warn(this.reporter.lang('npmLockfileWarning')); case 9: if (this.config.plugnplayEnabled) { this.reporter.info(this.reporter.lang('plugnplaySuggestV2L1')); this.reporter.info(this.reporter.lang('plugnplaySuggestV2L2')); } flattenedTopLevelPatterns = []; steps = []; _context16.next = 14; return this.fetchRequestFromCwd(); case 14: _yield$this$fetchRequ2 = _context16.sent; depRequests = _yield$this$fetchRequ2.requests; rawPatterns = _yield$this$fetchRequ2.patterns; ignorePatterns = _yield$this$fetchRequ2.ignorePatterns; workspaceLayout = _yield$this$fetchRequ2.workspaceLayout; manifest = _yield$this$fetchRequ2.manifest; topLevelPatterns = []; _context16.next = 23; return this.integrityChecker.getArtifacts(); case 23: artifacts = _context16.sent; if (artifacts) { this.linker.setArtifacts(artifacts); this.scripts.setArtifacts(artifacts); } if (compatibility().shouldCheck(manifest, this.flags)) { steps.push( /*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee6(curr, total) { return _regenerator()["default"].wrap(function _callee6$(_context7) { while (1) switch (_context7.prev = _context7.next) { case 0: _this2.reporter.step(curr, total, _this2.reporter.lang('checkingManifest'), emoji.get('mag')); _context7.next = 3; return _this2.checkCompatibility(); case 3: case "end": return _context7.stop(); } }, _callee6); })); return function (_x3, _x4) { return _ref2.apply(this, arguments); }; }()); } audit = new (_audit()["default"])(this.config, this.reporter, { groups: constants().OWNED_DEPENDENCY_TYPES }); auditFoundProblems = false; steps.push(function (curr, total) { return (0, _hooks().callThroughHook)('resolveStep', /*#__PURE__*/(0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee7() { return _regenerator()["default"].wrap(function _callee7$(_context8) { while (1) switch (_context8.prev = _context8.next) { case 0: _this2.reporter.step(curr, total, _this2.reporter.lang('resolvingPackages'), emoji.get('mag')); _context8.next = 3; return _this2.resolver.init(_this2.prepareRequests(depRequests), { isFlat: _this2.flags.flat, isFrozen: _this2.flags.frozenLockfile, workspaceLayout: workspaceLayout }); case 3: topLevelPatterns = _this2.preparePatterns(rawPatterns); _context8.next = 6; return _this2.flatten(topLevelPatterns); case 6: flattenedTopLevelPatterns = _context8.sent; _context8.t0 = !_this2.flags.audit; if (!_context8.t0) { _context8.next = 12; break; } _context8.next = 11; return _this2.bailout(topLevelPatterns, workspaceLayout); case 11: _context8.t0 = _context8.sent; case 12: _context8.t1 = _context8.t0; return _context8.abrupt("return", { bailout: _context8.t1 }); case 14: case "end": return _context8.stop(); } }, _callee7); }))); }); if (this.flags.audit) { steps.push(function (curr, total) { return (0, _hooks().callThroughHook)('auditStep', /*#__PURE__*/(0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee8() { var preparedManifests, mergedManifest, auditVulnerabilityCounts; return _regenerator()["default"].wrap(function _callee8$(_context9) { while (1) switch (_context9.prev = _context9.next) { case 0: _this2.reporter.step(curr, total, _this2.reporter.lang('auditRunning'), emoji.get('mag')); if (!_this2.flags.offline) { _context9.next = 4; break; } _this2.reporter.warn(_this2.reporter.lang('auditOffline')); return _context9.abrupt("return", { bailout: false }); case 4: _context9.next = 6; return _this2.prepareManifests(); case 6: preparedManifests = _context9.sent; // $FlowFixMe - Flow considers `m` in the map operation to be "mixed", so does not recognize `m.object` mergedManifest = Object.assign.apply(Object, [{}].concat((0, _toConsumableArray2()["default"])(Object.values(preparedManifests).map(function (m) { return m.object; })))); _context9.next = 10; return audit.performAudit(mergedManifest, _this2.lockfile, _this2.resolver, _this2.linker, topLevelPatterns); case 10: auditVulnerabilityCounts = _context9.sent; auditFoundProblems = auditVulnerabilityCounts.info || auditVulnerabilityCounts.low || auditVulnerabilityCounts.moderate || auditVulnerabilityCounts.high || auditVulnerabilityCounts.critical; _context9.next = 14; return _this2.bailout(topLevelPatterns, workspaceLayout); case 14: _context9.t0 = _context9.sent; return _context9.abrupt("return", { bailout: _context9.t0 }); case 16: case "end": return _context9.stop(); } }, _callee8); }))); }); } steps.push(function (curr, total) { return (0, _hooks().callThroughHook)('fetchStep', /*#__PURE__*/(0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee9() { var manifests; return _regenerator()["default"].wrap(function _callee9$(_context10) { while (1) switch (_context10.prev = _context10.next) { case 0: _this2.markIgnored(ignorePatterns); _this2.reporter.step(curr, total, _this2.reporter.lang('fetchingPackages'), emoji.get('truck')); _context10.next = 4; return fetcher().fetch(_this2.resolver.getManifests(), _this2.config); case 4: manifests = _context10.sent; _this2.resolver.updateManifests(manifests); _context10.next = 8; return compatibility().check(_this2.resolver.getManifests(), _this2.config, _this2.flags.ignoreEngines); case 8: case "end": return _context10.stop(); } }, _callee9); }))); }); steps.push(function (curr, total) { return (0, _hooks().callThroughHook)('linkStep', /*#__PURE__*/(0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee10() { return _regenerator()["default"].wrap(function _callee10$(_context11) { while (1) switch (_context11.prev = _context11.next) { case 0: _context11.next = 2; return _this2.integrityChecker.removeIntegrityFile(); case 2: _this2.reporter.step(curr, total, _this2.reporter.lang('linkingDependencies'), emoji.get('link')); flattenedTopLevelPatterns = _this2.preparePatternsForLinking(flattenedTopLevelPatterns, manifest, _this2.config.lockfileFolder === _this2.config.cwd); _context11.next = 6; return _this2.linker.init(flattenedTopLevelPatterns, workspaceLayout, { linkDuplicates: _this2.flags.linkDuplicates, ignoreOptional: _this2.flags.ignoreOptional }); case 6: case "end": return _context11.stop(); } }, _callee10); }))); }); if (this.config.plugnplayEnabled) { steps.push(function (curr, total) { return (0, _hooks().callThroughHook)('pnpStep', /*#__PURE__*/(0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee11() { var pnpPath, code, file; return _regenerator()["default"].wrap(function _callee11$(_context12) { while (1) switch (_context12.prev = _context12.next) { case 0: pnpPath = "".concat(_this2.config.lockfileFolder, "/").concat(constants().PNP_FILENAME); _context12.next = 3; return (0, _generatePnpMap().generatePnpMap)(_this2.config, flattenedTopLevelPatterns, { resolver: _this2.resolver, reporter: _this2.reporter, targetPath: pnpPath, workspaceLayout: workspaceLayout }); case 3: code = _context12.sent; _context12.prev = 4; _context12.next = 7; return fs().readFile(pnpPath); case 7: file = _context12.sent; if (!(file === code)) { _context12.next = 10; break; } return _context12.abrupt("return"); case 10: _context12.next = 14; break; case 12: _context12.prev = 12; _context12.t0 = _context12["catch"](4); case 14: _context12.next = 16; return fs().writeFile(pnpPath, code); case 16: _context12.next = 18; return fs().chmod(pnpPath, 493); case 18: case "end": return _context12.stop(); } }, _callee11, null, [[4, 12]]); }))); }); } steps.push(function (curr, total) { return (0, _hooks().callThroughHook)('buildStep', /*#__PURE__*/(0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee12() { return _regenerator()["default"].wrap(function _callee12$(_context13) { while (1) switch (_context13.prev = _context13.next) { case 0: _this2.reporter.step(curr, total, _this2.flags.force ? _this2.reporter.lang('rebuildingPackages') : _this2.reporter.lang('buildingFreshPackages'), emoji.get('hammer')); if (!_this2.config.ignoreScripts) { _context13.next = 5; break; } _this2.reporter.warn(_this2.reporter.lang('ignoredScripts')); _context13.next = 7; break; case 5: _context13.next = 7; return _this2.scripts.init(flattenedTopLevelPatterns); case 7: case "end": return _context13.stop(); } }, _callee12); }))); }); if (this.flags.har) { steps.push( /*#__PURE__*/function () { var _ref9 = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee13(curr, total) { var formattedDate, filename; return _regenerator()["default"].wrap(function _callee13$(_context14) { while (1) switch (_context14.prev = _context14.next) { case 0: formattedDate = new Date().toISOString().replace(/:/g, '-'); filename = "yarn-install_".concat(formattedDate, ".har"); _this2.reporter.step(curr, total, _this2.reporter.lang('savingHar', filename), emoji.get('black_circle_for_record')); _context14.next = 5; return _this2.config.requestManager.saveHar(filename); case 5: case "end": return _context14.stop(); } }, _callee13); })); return function (_x5, _x6) { return _ref9.apply(this, arguments); }; }()); } _context16.next = 37; return this.shouldClean(); case 37: if (!_context16.sent) { _context16.next = 39; break; } steps.push( /*#__PURE__*/function () { var _ref10 = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee14(curr, total) { return _regenerator()["default"].wrap(function _callee14$(_context15) { while (1) switch (_context15.prev = _context15.next) { case 0: _this2.reporter.step(curr, total, _this2.reporter.lang('cleaningModules'), emoji.get('recycle')); _context15.next = 3; return (0, _autoclean().clean)(_this2.config, _this2.reporter); case 3: case "end": return _context15.stop(); } }, _callee14); })); return function (_x7, _x8) { return _ref10.apply(this, arguments); }; }()); case 39: currentStep = 0; _i6 = 0, _steps = steps; case 41: if (!(_i6 < _steps.length)) { _context16.next = 53; break; } step = _steps[_i6]; _context16.next = 45; return step(++currentStep, steps.length); case 45: stepResult = _context16.sent; if (!(stepResult && stepResult.bailout)) { _context16.next = 50; break; } if (this.flags.audit) { audit.summary(); } if (auditFoundProblems) { this.reporter.warn(this.reporter.lang('auditRunAuditForDetails')); } return _context16.abrupt("return", flattenedTopLevelPatterns); case 50: _i6++; _context16.next = 41; break; case 53: // fin! if (this.flags.audit) { audit.summary(); } if (auditFoundProblems) { this.reporter.warn(this.reporter.lang('auditRunAuditForDetails')); } _context16.next = 57; return this.saveLockfileAndIntegrity(topLevelPatterns, workspaceLayout); case 57: _context16.next = 59; return this.persistChanges(); case 59: this.config.requestManager.clearCache(); return _context16.abrupt("return", flattenedTopLevelPatterns); case 61: case "end": return _context16.stop(); } }, _callee15, this); })); function init() { return _init.apply(this, arguments); } return init; }() }, { key: "checkCompatibility", value: function () { var _checkCompatibility = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee16() { var _yield$this$fetchRequ3, manifest; return _regenerator()["default"].wrap(function _callee16$(_context17) { while (1) switch (_context17.prev = _context17.next) { case 0: _context17.next = 2; return this.fetchRequestFromCwd(); case 2: _yield$this$fetchRequ3 = _context17.sent; manifest = _yield$this$fetchRequ3.manifest; _context17.next = 6; return compatibility().checkOne(manifest, this.config, this.flags.ignoreEngines); case 6: case "end": return _context17.stop(); } }, _callee16, this); })); function checkCompatibility() { return _checkCompatibility.apply(this, arguments); } return checkCompatibility; }() }, { key: "persistChanges", value: function () { var _persistChanges = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee17() { var manifests; return _regenerator()["default"].wrap(function _callee17$(_context18) { while (1) switch (_context18.prev = _context18.next) { case 0: _context18.next = 2; return this.config.getRootManifests(); case 2: manifests = _context18.sent; _context18.next = 5; return this.applyChanges(manifests); case 5: if (!_context18.sent) { _context18.next = 8; break; } _context18.next = 8; return this.config.saveRootManifests(manifests); case 8: case "end": return _context18.stop(); } }, _callee17, this); })); function persistChanges() { return _persistChanges.apply(this, arguments); } return persistChanges; }() }, { key: "applyChanges", value: function applyChanges(manifests) { var hasChanged = false; if (this.config.plugnplayPersist) { var object = manifests.npm.object; if ((0, _typeof2()["default"])(object.installConfig) !== 'object') { object.installConfig = {}; } if (this.config.plugnplayEnabled && object.installConfig.pnp !== true) { object.installConfig.pnp = true; hasChanged = true; } else if (!this.config.plugnplayEnabled && typeof object.installConfig.pnp !== 'undefined') { delete object.installConfig.pnp; hasChanged = true; } if (Object.keys(object.installConfig).length === 0) { delete object.installConfig; } } return Promise.resolve(hasChanged); } /** * Check if we should run the cleaning step. */ }, { key: "shouldClean", value: function shouldClean() { return fs().exists(path.join(this.config.lockfileFolder, constants().CLEAN_FILENAME)); } /** * TODO */ }, { key: "flatten", value: function () { var _flatten = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee18(patterns) { var _this3 = this; var flattenedPatterns, _iterator6, _step6, _name, infos, options, versions, _version, resolutionVersion, manifests, name, version, _patterns, manifest, _iterator7, _step7, _pattern5, ref, object; return _regenerator()["default"].wrap(function _callee18$(_context19) { while (1) switch (_context19.prev = _context19.next) { case 0: if (this.flags.flat) { _context19.next = 2; break; } return _context19.abrupt("return", patterns); case 2: flattenedPatterns = []; _iterator6 = _createForOfIteratorHelper(this.resolver.getAllDependencyNamesByLevelOrder(patterns)); _context19.prev = 4; _iterator6.s(); case 6: if ((_step6 = _iterator6.n()).done) { _context19.next = 29; break; } _name = _step6.value; infos = this.resolver.getAllInfoForPackageName(_name).filter(function (manifest) { var ref = manifest._reference; invariant(ref, 'expected package reference'); return !ref.ignore; }); if (!(infos.length === 0)) { _context19.next = 11; break; } return _context19.abrupt("continue", 27); case 11: if (!(infos.length === 1)) { _context19.next = 14; break; } // single version of this package // take out a single pattern as multiple patterns may have resolved to this package flattenedPatterns.push(this.resolver.patternsByPackage[_name][0]); return _context19.abrupt("continue", 27); case 14: options = infos.map(function (info) { var ref = info._reference; invariant(ref, 'expected reference'); return { // TODO `and is required by {PARENT}`, name: _this3.reporter.lang('manualVersionResolutionOption', ref.patterns.join(', '), info.version), value: info.version }; }); versions = infos.map(function (info) { return info.version; }); _version = void 0; resolutionVersion = this.resolutions[_name]; if (!(resolutionVersion && versions.indexOf(resolutionVersion) >= 0)) { _context19.next = 22; break; } // use json `resolution` version _version = resolutionVersion; _context19.next = 26; break; case 22: _context19.next = 24; return this.reporter.select(this.reporter.lang('manualVersionResolution', _name), this.reporter.lang('answer'), options); case 24: _version = _context19.sent; this.resolutions[_name] = _version; case 26: flattenedPatterns.push(this.resolver.collapseAllVersionsOfPackage(_name, _version)); case 27: _context19.next = 6; break; case 29: _context19.next = 34; break; case 31: _context19.prev = 31; _context19.t0 = _context19["catch"](4); _iterator6.e(_context19.t0); case 34: _context19.prev = 34; _iterator6.f(); return _context19.finish(34); case 37: if (!Object.keys(this.resolutions).length) { _context19.next = 77; break; } _context19.next = 40; return this.config.getRootManifests(); case 40: manifests = _context19.sent; _context19.t1 = _regenerator()["default"].keys(this.resolutions); case 42: if ((_context19.t2 = _context19.t1()).done) { _context19.next = 75; break; } name = _context19.t2.value; version = this.resolutions[name]; _patterns = this.resolver.patternsByPackage[name]; if (_patterns) { _context19.next = 48; break; } return _context19.abrupt("continue", 42); case 48: manifest = void 0; _iterator7 = _createForOfIteratorHelper(_patterns); _context19.prev = 50; _iterator7.s(); case 52: if ((_step7 = _iterator7.n()).done) { _context19.next = 59; break; } _pattern5 = _step7.value; manifest = this.resolver.getResolvedPattern(_pattern5); if (!manifest) { _context19.next = 57; break; } return _context19.abrupt("break", 59); case 57: _context19.next = 52; break; case 59: _context19.next = 64; break; case 61: _context19.prev = 61; _context19.t3 = _context19["catch"](50); _iterator7.e(_context19.t3); case 64: _context19.prev = 64; _iterator7.f(); return _context19.finish(64); case 67: invariant(manifest, 'expected manifest'); ref = manifest._reference; invariant(ref, 'expected reference'); object = manifests[ref.registry].object; object.resolutions = object.resolutions || {}; object.resolutions[name] = version; _context19.next = 42; break; case 75: _context19.next = 77; return this.config.saveRootManifests(manifests); case 77: return _context19.abrupt("return", flattenedPatterns); case 78: case "end": return _context19.stop(); } }, _callee18, this, [[4, 31, 34, 37], [50, 61, 64, 67]]); })); function flatten(_x9) { return _flatten.apply(this, arguments); } return flatten; }() /** * Remove offline tarballs that are no longer required */ }, { key: "pruneOfflineMirror", value: function () { var _pruneOfflineMirror = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee19(lockfile) { var mirror, requiredTarballs, dependency, resolved, basename, mirrorFiles, _iterator8, _step8, file, isTarball, hasPrebuiltPackage; return _regenerator()["default"].wrap(function _callee19$(_context20) { while (1) switch (_context20.prev = _context20.next) { case 0: mirror = this.config.getOfflineMirrorPath(); if (mirror) { _context20.next = 3; break; } return _context20.abrupt("return"); case 3: requiredTarballs = new Set(); for (dependency in lockfile) { resolved = lockfile[dependency].resolved; if (resolved) { basename = path.basename(resolved.split('#')[0]); if (dependency[0] === '@' && basename[0] !== '@') { requiredTarballs.add("".concat(dependency.split('/')[0], "-").concat(basename)); } requiredTarballs.add(basename); } } _context20.next = 7; return fs().walk(mirror); case 7: mirrorFiles = _context20.sent; _iterator8 = _createForOfIteratorHelper(mirrorFiles); _context20.prev = 9; _iterator8.s(); case 11: if ((_step8 = _iterator8.n()).done) { _context20.next = 20; break; } file = _step8.value; isTarball = path.extname(file.basename) === '.tgz'; // if using experimental-pack-script-packages-in-mirror flag, don't unlink prebuilt packages hasPrebuiltPackage = file.relative.startsWith('prebuilt/'); if (!(isTarball && !hasPrebuiltPackage && !requiredTarballs.has(file.basename))) { _context20.next = 18; break; } _context20.next = 18; return fs().unlink(file.absolute); case 18: _context20.next = 11; break; case 20: _context20.next = 25; break; case 22: _context20.prev = 22; _context20.t0 = _context20["catch"](9); _iterator8.e(_context20.t0); case 25: _context20.prev = 25; _iterator8.f(); return _context20.finish(25); case 28: case "end": return _context20.stop(); } }, _callee19, this, [[9, 22, 25, 28]]); })); function pruneOfflineMirror(_x10) { return _pruneOfflineMirror.apply(this, arguments); } return pruneOfflineMirror; }() /** * Save updated integrity and lockfiles. */ }, { key: "saveLockfileAndIntegrity", value: function () { var _saveLockfileAndIntegrity = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee20(patterns, workspaceLayout) { var _this4 = this; var resolvedPatterns, lockfileBasedOnResolver, lockFileHasAllPatterns, lockfilePatternsMatch, resolverPatternsAreSameAsInLockfile, integrityPatternsAreSameAsInLockfile, loc, lockSource; return _regenerator()["default"].wrap(function _callee20$(_context21) { while (1) switch (_context21.prev = _context21.next) { case 0: resolvedPatterns = {}; Object.keys(this.resolver.patterns).forEach(function (pattern) { if (!workspaceLayout || !workspaceLayout.getManifestByPattern(pattern)) { resolvedPatterns[pattern] = _this4.resolver.patterns[pattern]; } }); // TODO this code is duplicated in a few places, need a common way to filter out workspace patterns from lockfile patterns = patterns.filter(function (p) { return !workspaceLayout || !workspaceLayout.getManifestByPattern(p); }); lockfileBasedOnResolver = this.lockfile.getLockfile(resolvedPatterns); if (!this.config.pruneOfflineMirror) { _context21.next = 7; break; } _context21.next = 7; return this.pruneOfflineMirror(lockfileBasedOnResolver); case 7: if (this.config.plugnplayEnabled) { _context21.next = 10; break; } _context21.next = 10; return this.integrityChecker.save(patterns, lockfileBasedOnResolver, this.flags, workspaceLayout, this.scripts.getArtifacts()); case 10: if (!(this.flags.lockfile === false || this.flags.pureLockfile || this.flags.frozenLockfile)) { _context21.next = 12; break; } return _context21.abrupt("return"); case 12: lockFileHasAllPatterns = patterns.every(function (p) { return _this4.lockfile.getLocked(p); }); lockfilePatternsMatch = Object.keys(this.lockfile.cache || {}).every(function (p) { return lockfileBasedOnResolver[p]; }); resolverPatternsAreSameAsInLockfile = Object.keys(lockfileBasedOnResolver).every(function (pattern) { var manifest = _this4.lockfile.getLocked(pattern); return manifest && manifest.resolved === lockfileBasedOnResolver[pattern].resolved && deepEqual(manifest.prebuiltVariants, lockfileBasedOnResolver[pattern].prebuiltVariants); }); integrityPatternsAreSameAsInLockfile = Object.keys(lockfileBasedOnResolver).every(function (pattern) { var existingIntegrityInfo = lockfileBasedOnResolver[pattern].integrity; if (!existingIntegrityInfo) { // if this entry does not have an integrity, no need to re-write the lockfile because of it return true; } var manifest = _this4.lockfile.getLocked(pattern); if (manifest && manifest.integrity) { var manifestIntegrity = ssri.stringify(manifest.integrity); return manifestIntegrity === existingIntegrityInfo; } return false; }); // remove command is followed by install with force, lockfile will be rewritten in any case then if (!(!this.flags.force && this.lockfile.parseResultType === 'success' && lockFileHasAllPatterns && lockfilePatternsMatch && resolverPatternsAreSameAsInLockfile && integrityPatternsAreSameAsInLockfile && patterns.length)) { _context21.next = 18; break; } return _context21.abrupt("return"); case 18: // build lockfile location loc = path.join(this.config.lockfileFolder, constants().LOCKFILE_FILENAME); // write lockfile lockSource = (0, _lockfile().stringify)(lockfileBasedOnResolver, false, this.config.enableLockfileVersions); _context21.next = 22; return fs().writeFilePreservingEol(loc, lockSource); case 22: this._logSuccessSaveLockfile(); case 23: case "end": return _context21.stop(); } }, _callee20, this); })); function saveLockfileAndIntegrity(_x11, _x12) { return _saveLockfileAndIntegrity.apply(this, arguments); } return saveLockfileAndIntegrity; }() }, { key: "_logSuccessSaveLockfile", value: function _logSuccessSaveLockfile() { this.reporter.success(this.reporter.lang('savedLockfile')); } /** * Load the dependency graph of the current install. Only does package resolving and wont write to the cwd. */ }, { key: "hydrate", value: function () { var _hydrate = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee21(ignoreUnusedPatterns) { var request, depRequests, rawPatterns, ignorePatterns, workspaceLayout, manifests, _iterator9, _step9, manifest, ref, type, loc, newPkg; return _regenerator()["default"].wrap(function _callee21$(_context22) { while (1) switch (_context22.prev = _context22.next) { case 0: _context22.next = 2; return this.fetchRequestFromCwd([], ignoreUnusedPatterns); case 2: request = _context22.sent; depRequests = request.requests, rawPatterns = request.patterns, ignorePatterns = request.ignorePatterns, workspaceLayout = request.workspaceLayout; _context22.next = 6; return this.resolver.init(depRequests, { isFlat: this.flags.flat, isFrozen: this.flags.frozenLockfile, workspaceLayout: workspaceLayout }); case 6: _context22.next = 8; return this.flatten(rawPatterns); case 8: this.markIgnored(ignorePatterns); // fetch packages, should hit cache most of the time _context22.next = 11; return fetcher().fetch(this.resolver.getManifests(), this.config); case 11: manifests = _context22.sent; this.resolver.updateManifests(manifests); _context22.next = 15; return compatibility().check(this.resolver.getManifests(), this.config, this.flags.ignoreEngines); case 15: // expand minimal manifests _iterator9 = _createForOfIteratorHelper(this.resolver.getManifests()); _context22.prev = 16; _iterator9.s(); case 18: if ((_step9 = _iterator9.n()).done) { _context22.next = 42; break; } manifest = _step9.value; ref = manifest._reference; invariant(ref, 'expected reference'); type = ref.remote.type; // link specifier won't ever hit cache loc = ''; if (!(type === 'link')) { _context22.next = 28; break; } return _context22.abrupt("continue", 40); case 28: if (!(type === 'workspace')) { _context22.next = 34; break; } if (ref.remote.reference) { _context22.next = 31; break; } return _context22.abrupt("continue", 40); case 31: loc = ref.remote.reference; _context22.next = 35; break; case 34: loc = this.config.generateModuleCachePath(ref); case 35: _context22.next = 37; return this.config.readManifest(loc); case 37: newPkg = _context22.sent; _context22.next = 40; return this.resolver.updateManifest(ref, newPkg); case 40: _context22.next = 18; break; case 42: _context22.next = 47; break; case 44: _context22.prev = 44; _context22.t0 = _context22["catch"](16); _iterator9.e(_context22.t0); case 47: _context22.prev = 47; _iterator9.f(); return _context22.finish(47); case 50: return _context22.abrupt("return", request); case 51: case "end": return _context22.stop(); } }, _callee21, this, [[16, 44, 47, 50]]); })); function hydrate(_x13) { return _hydrate.apply(this, arguments); } return hydrate; }() /** * Check for updates every day and output a nag message if there's a newer version. */ }, { key: "checkUpdate", value: function checkUpdate() { if (this.config.nonInteractive) { // don't show upgrade dialog on CI or non-TTY terminals return; } // don't check if disabled if (this.config.getOption('disable-self-update-check')) { return; } // only check for updates once a day var lastUpdateCheck = Number(this.config.getOption('lastUpdateCheck')) || 0; if (lastUpdateCheck && Date.now() - lastUpdateCheck < ONE_DAY) { return; } // don't bug for updates on tagged releases if (_yarnVersion().version.indexOf('-') >= 0) { return; } this._checkUpdate()["catch"](function () { // swallow errors }); } }, { key: "_checkUpdate", value: function () { var _checkUpdate2 = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee22() { var _this5 = this; var latestVersion, installationMethod; return _regenerator()["default"].wrap(function _callee22$(_context23) { while (1) switch (_context23.prev = _context23.next) { case 0: _context23.next = 2; return this.config.requestManager.request({ url: constants().SELF_UPDATE_VERSION_URL }); case 2: latestVersion = _context23.sent; invariant(typeof latestVersion === 'string', 'expected string'); latestVersion = latestVersion.trim(); if (semver.valid(latestVersion)) { _context23.next = 7; break; } return _context23.abrupt("return"); case 7: // ensure we only check for updates periodically this.config.registries.yarn.saveHomeConfig({ lastUpdateCheck: Date.now() }); if (!semver.gt(latestVersion, _yarnVersion().version)) { _context23.next = 13; break; } _context23.next = 11; return (0, _yarnVersion().getInstallationMethod)(); case 11: installationMethod = _context23.sent; this.maybeOutputUpdate = function () { _this5.reporter.warn(_this5.reporter.lang('yarnOutdated', latestVersion, _yarnVersion().version)); var command = getUpdateCommand(installationMethod); if (command) { _this5.reporter.info(_this5.reporter.lang('yarnOutdatedCommand')); _this5.reporter.command(command); } else { var installer = getUpdateInstaller(installationMethod); if (installer) { _this5.reporter.info(_this5.reporter.lang('yarnOutdatedInstaller', installer)); } } }; case 13: case "end": return _context23.stop(); } }, _callee22, this); })); function _checkUpdate() { return _checkUpdate2.apply(this, arguments); } return _checkUpdate; }() /** * Method to override with a possible upgrade message. */ }, { key: "maybeOutputUpdate", value: function maybeOutputUpdate() {} }]); return Install; }(); exports.Install = Install; function hasWrapper(commander, args) { return true; } function setFlags(commander) { commander.description('Yarn install is used to install all dependencies for a project.'); commander.usage('install [flags]'); commander.option('-A, --audit', 'Run vulnerability audit on installed packages'); commander.option('-g, --global', 'DEPRECATED'); commander.option('-S, --save', 'DEPRECATED - save package to your `dependencies`'); commander.option('-D, --save-dev', 'DEPRECATED - save package to your `devDependencies`'); commander.option('-P, --save-peer', 'DEPRECATED - save package to your `peerDependencies`'); commander.option('-O, --save-optional', 'DEPRECATED - save package to your `optionalDependencies`'); commander.option('-E, --save-exact', 'DEPRECATED'); commander.option('-T, --save-tilde', 'DEPRECATED'); } function install(_x14, _x15, _x16, _x17) { return _install.apply(this, arguments); } function _install() { _install = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee24(config, reporter, flags, lockfile) { return _regenerator()["default"].wrap(function _callee24$(_context25) { while (1) switch (_context25.prev = _context25.next) { case 0: _context25.next = 2; return wrapLifecycle(config, flags, /*#__PURE__*/(0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee23() { var install; return _regenerator()["default"].wrap(function _callee23$(_context24) { while (1) switch (_context24.prev = _context24.next) { case 0: install = new Install(flags, config, reporter, lockfile); _context24.next = 3; return install.init(); case 3: case "end": return _context24.stop(); } }, _callee23); }))); case 2: case "end": return _context25.stop(); } }, _callee24); })); return _install.apply(this, arguments); } function run(_x18, _x19, _x20, _x21, _x22) { return _run.apply(this, arguments); } function _run() { _run = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee25(config, reporter, commander, flags, args) { var lockfile, error, exampleArgs, command; return _regenerator()["default"].wrap(function _callee25$(_context26) { while (1) switch (_context26.prev = _context26.next) { case 0: error = 'installCommandRenamed'; if (!(flags.lockfile === false)) { _context26.next = 5; break; } lockfile = new (_lockfile()["default"])(); _context26.next = 8; break; case 5: _context26.next = 7; return _lockfile()["default"].fromDirectory(config.lockfileFolder, reporter); case 7: lockfile = _context26.sent; case 8: if (!(args.length > 0)) { _context26.next = 18; break; } exampleArgs = args.slice(); if (flags.saveDev) { exampleArgs.push('--dev'); } if (flags.savePeer) { exampleArgs.push('--peer'); } if (flags.saveOptional) { exampleArgs.push('--optional'); } if (flags.saveExact) { exampleArgs.push('--exact'); } if (flags.saveTilde) { exampleArgs.push('--tilde'); } command = 'add'; if (flags.global) { error = 'globalFlagRemoved'; command = 'global add'; } throw new (_errors().MessageError)(reporter.lang(error, "yarn ".concat(command, " ").concat(exampleArgs.join(' ')))); case 18: _context26.next = 20; return install(config, reporter, flags, lockfile); case 20: case "end": return _context26.stop(); } }, _callee25); })); return _run.apply(this, arguments); } function wrapLifecycle(_x23, _x24, _x25) { return _wrapLifecycle.apply(this, arguments); } function _wrapLifecycle() { _wrapLifecycle = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee26(config, flags, factory) { return _regenerator()["default"].wrap(function _callee26$(_context27) { while (1) switch (_context27.prev = _context27.next) { case 0: _context27.next = 2; return config.executeLifecycleScript('preinstall'); case 2: _context27.next = 4; return factory(); case 4: _context27.next = 6; return config.executeLifecycleScript('install'); case 6: _context27.next = 8; return config.executeLifecycleScript('postinstall'); case 8: if (config.production) { _context27.next = 14; break; } if (config.disablePrepublish) { _context27.next = 12; break; } _context27.next = 12; return config.executeLifecycleScript('prepublish'); case 12: _context27.next = 14; return config.executeLifecycleScript('prepare'); case 14: case "end": return _context27.stop(); } }, _callee26); })); return _wrapLifecycle.apply(this, arguments); } //# sourceMappingURL=install.js.map