JezK
Edit File: package-resolver.js
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof3 = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; 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 _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 _index() { var data = require("./resolvers/index.js"); _index = function _index() { return data; }; return data; } function _packageRequest() { var data = _interopRequireDefault(require("./package-request.js")); _packageRequest = function _packageRequest() { return data; }; return data; } function _normalizePattern2() { var data = require("./util/normalize-pattern.js"); _normalizePattern2 = function _normalizePattern2() { return data; }; return data; } function _requestManager() { var data = _interopRequireDefault(require("./util/request-manager.js")); _requestManager = function _requestManager() { return data; }; return data; } function _blockingQueue() { var data = _interopRequireDefault(require("./util/blocking-queue.js")); _blockingQueue = function _blockingQueue() { return data; }; return data; } function _lockfile() { var data = _interopRequireDefault(require("./lockfile")); _lockfile = function _lockfile() { return data; }; return data; } function _map() { var data = _interopRequireDefault(require("./util/map.js")); _map = function _map() { return data; }; return data; } function _workspaceLayout() { var data = _interopRequireDefault(require("./workspace-layout.js")); _workspaceLayout = function _workspaceLayout() { return data; }; return data; } function _resolutionMap() { var data = _interopRequireWildcard(require("./resolution-map.js")); _resolutionMap = function _resolutionMap() { 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 _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 invariant = require('invariant'); var semver = require('semver'); var PackageResolver = /*#__PURE__*/function () { function PackageResolver(config, lockfile) { var resolutionMap = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new (_resolutionMap()["default"])(config); (0, _classCallCheck2()["default"])(this, PackageResolver); (0, _defineProperty2()["default"])(this, "flat", void 0); (0, _defineProperty2()["default"])(this, "frozen", void 0); (0, _defineProperty2()["default"])(this, "workspaceLayout", void 0); (0, _defineProperty2()["default"])(this, "resolutionMap", void 0); (0, _defineProperty2()["default"])(this, "usedRegistries", void 0); (0, _defineProperty2()["default"])(this, "activity", void 0); (0, _defineProperty2()["default"])(this, "fetchingPatterns", void 0); (0, _defineProperty2()["default"])(this, "fetchingQueue", void 0); (0, _defineProperty2()["default"])(this, "requestManager", void 0); (0, _defineProperty2()["default"])(this, "patternsByPackage", void 0); (0, _defineProperty2()["default"])(this, "lockfile", void 0); (0, _defineProperty2()["default"])(this, "patterns", void 0); (0, _defineProperty2()["default"])(this, "reporter", void 0); (0, _defineProperty2()["default"])(this, "config", void 0); (0, _defineProperty2()["default"])(this, "delayedResolveQueue", void 0); this.patternsByPackage = (0, _map()["default"])(); this.fetchingPatterns = new Set(); this.fetchingQueue = new (_blockingQueue()["default"])('resolver fetching'); this.patterns = (0, _map()["default"])(); this.resolutionMap = resolutionMap; this.usedRegistries = new Set(); this.flat = false; this.reporter = config.reporter; this.lockfile = lockfile; this.config = config; this.delayedResolveQueue = []; } // whether the dependency graph will be flattened (0, _createClass2()["default"])(PackageResolver, [{ key: "isNewPattern", value: /** * TODO description */ function isNewPattern(pattern) { return !!this.patterns[pattern].fresh; } }, { key: "updateManifest", value: function updateManifest(ref, newPkg) { // inherit fields var oldPkg = this.patterns[ref.patterns[0]]; newPkg._reference = ref; newPkg._remote = ref.remote; newPkg.name = oldPkg.name; newPkg.fresh = oldPkg.fresh; newPkg.prebuiltVariants = oldPkg.prebuiltVariants; // update patterns var _iterator = _createForOfIteratorHelper(ref.patterns), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var pattern = _step.value; this.patterns[pattern] = newPkg; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return Promise.resolve(); } }, { key: "updateManifests", value: function updateManifests(newPkgs) { var _iterator2 = _createForOfIteratorHelper(newPkgs), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var newPkg = _step2.value; if (newPkg._reference) { var _iterator3 = _createForOfIteratorHelper(newPkg._reference.patterns), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var pattern = _step3.value; var oldPkg = this.patterns[pattern]; newPkg.prebuiltVariants = oldPkg.prebuiltVariants; this.patterns[pattern] = newPkg; } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } return Promise.resolve(); } /** * Given a list of patterns, dedupe them to a list of unique patterns. */ }, { key: "dedupePatterns", value: function dedupePatterns(patterns) { var deduped = []; var seen = new Set(); var _iterator4 = _createForOfIteratorHelper(patterns), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var pattern = _step4.value; var info = this.getResolvedPattern(pattern); if (seen.has(info)) { continue; } seen.add(info); deduped.push(pattern); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } return deduped; } /** * Get a list of all manifests by topological order. */ }, { key: "getTopologicalManifests", value: function getTopologicalManifests(seedPatterns) { var _this = this; var pkgs = new Set(); var skip = new Set(); var add = function add(seedPatterns) { var _iterator5 = _createForOfIteratorHelper(seedPatterns), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var pattern = _step5.value; var pkg = _this.getStrictResolvedPattern(pattern); if (skip.has(pkg)) { continue; } var ref = pkg._reference; invariant(ref, 'expected reference'); skip.add(pkg); add(ref.dependencies); pkgs.add(pkg); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } }; add(seedPatterns); return pkgs; } /** * Get a list of all manifests by level sort order. */ }, { key: "getLevelOrderManifests", value: function getLevelOrderManifests(seedPatterns) { var _this2 = this; var pkgs = new Set(); var skip = new Set(); var add = function add(seedPatterns) { var refs = []; var _iterator6 = _createForOfIteratorHelper(seedPatterns), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var pattern = _step6.value; var pkg = _this2.getStrictResolvedPattern(pattern); if (skip.has(pkg)) { continue; } var _ref = pkg._reference; invariant(_ref, 'expected reference'); refs.push(_ref); skip.add(pkg); pkgs.add(pkg); } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } for (var _i = 0, _refs = refs; _i < _refs.length; _i++) { var ref = _refs[_i]; add(ref.dependencies); } }; add(seedPatterns); return pkgs; } /** * Get a list of all package names in the dependency graph. */ }, { key: "getAllDependencyNamesByLevelOrder", value: function getAllDependencyNamesByLevelOrder(seedPatterns) { var names = new Set(); var _iterator7 = _createForOfIteratorHelper(this.getLevelOrderManifests(seedPatterns)), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var _name = _step7.value.name; names.add(_name); } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } return names; } /** * Retrieve all the package info stored for this package name. */ }, { key: "getAllInfoForPackageName", value: function getAllInfoForPackageName(name) { var patterns = this.patternsByPackage[name] || []; return this.getAllInfoForPatterns(patterns); } /** * Retrieve all the package info stored for a list of patterns. */ }, { key: "getAllInfoForPatterns", value: function getAllInfoForPatterns(patterns) { var infos = []; var seen = new Set(); var _iterator8 = _createForOfIteratorHelper(patterns), _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var pattern = _step8.value; var info = this.patterns[pattern]; if (seen.has(info)) { continue; } seen.add(info); infos.push(info); } } catch (err) { _iterator8.e(err); } finally { _iterator8.f(); } return infos; } /** * Get a flat list of all package info. */ }, { key: "getManifests", value: function getManifests() { var infos = []; var seen = new Set(); for (var pattern in this.patterns) { var info = this.patterns[pattern]; if (seen.has(info)) { continue; } infos.push(info); seen.add(info); } return infos; } /** * replace pattern in resolver, e.g. `name` is replaced with `name@^1.0.1` */ }, { key: "replacePattern", value: function replacePattern(pattern, newPattern) { var pkg = this.getResolvedPattern(pattern); invariant(pkg, "missing package ".concat(pattern)); var ref = pkg._reference; invariant(ref, 'expected package reference'); ref.patterns = [newPattern]; this.addPattern(newPattern, pkg); this.removePattern(pattern); } /** * Make all versions of this package resolve to it. */ }, { key: "collapseAllVersionsOfPackage", value: function collapseAllVersionsOfPackage(name, version) { var patterns = this.dedupePatterns(this.patternsByPackage[name]); return this.collapsePackageVersions(name, version, patterns); } /** * Make all given patterns resolve to version. */ }, { key: "collapsePackageVersions", value: function collapsePackageVersions(name, version, patterns) { var human = "".concat(name, "@").concat(version); // get manifest that matches the version we're collapsing too var collapseToReference; var collapseToManifest; var collapseToPattern; var _iterator9 = _createForOfIteratorHelper(patterns), _step9; try { for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) { var pattern = _step9.value; var _manifest = this.patterns[pattern]; if (_manifest.version === version) { collapseToReference = _manifest._reference; collapseToManifest = _manifest; collapseToPattern = pattern; break; } } } catch (err) { _iterator9.e(err); } finally { _iterator9.f(); } invariant(collapseToReference && collapseToManifest && collapseToPattern, "Couldn't find package manifest for ".concat(human)); var _iterator10 = _createForOfIteratorHelper(patterns), _step10; try { for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) { var _pattern = _step10.value; // don't touch the pattern we're collapsing to if (_pattern === collapseToPattern) { continue; } // remove this pattern var ref = this.getStrictResolvedPattern(_pattern)._reference; invariant(ref, 'expected package reference'); var refPatterns = ref.patterns.slice(); ref.prune(); // add pattern to the manifest we're collapsing to var _iterator11 = _createForOfIteratorHelper(refPatterns), _step11; try { for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) { var _pattern2 = _step11.value; collapseToReference.addPattern(_pattern2, collapseToManifest); } } catch (err) { _iterator11.e(err); } finally { _iterator11.f(); } } } catch (err) { _iterator10.e(err); } finally { _iterator10.f(); } return collapseToPattern; } /** * TODO description */ }, { key: "addPattern", value: function addPattern(pattern, info) { this.patterns[pattern] = info; var byName = this.patternsByPackage[info.name] = this.patternsByPackage[info.name] || []; if (byName.indexOf(pattern) === -1) { byName.push(pattern); } } /** * TODO description */ }, { key: "removePattern", value: function removePattern(pattern) { var pkg = this.patterns[pattern]; if (!pkg) { return; } var byName = this.patternsByPackage[pkg.name]; if (!byName) { return; } byName.splice(byName.indexOf(pattern), 1); delete this.patterns[pattern]; } /** * TODO description */ }, { key: "getResolvedPattern", value: function getResolvedPattern(pattern) { return this.patterns[pattern]; } /** * TODO description */ }, { key: "getStrictResolvedPattern", value: function getStrictResolvedPattern(pattern) { var manifest = this.getResolvedPattern(pattern); invariant(manifest, 'expected manifest'); return manifest; } /** * TODO description */ }, { key: "getExactVersionMatch", value: function getExactVersionMatch(name, version, manifest) { var patterns = this.patternsByPackage[name]; if (!patterns) { return null; } var _iterator12 = _createForOfIteratorHelper(patterns), _step12; try { for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) { var pattern = _step12.value; var info = this.getStrictResolvedPattern(pattern); if (info.version === version) { return info; } } } catch (err) { _iterator12.e(err); } finally { _iterator12.f(); } if (manifest && (0, _index().getExoticResolver)(version)) { return this.exoticRangeMatch(patterns.map(this.getStrictResolvedPattern.bind(this)), manifest); } return null; } /** * Get the manifest of the highest known version that satisfies a package range */ }, { key: "getHighestRangeVersionMatch", value: function getHighestRangeVersionMatch(name, range, manifest) { var _this3 = this; var patterns = this.patternsByPackage[name]; if (!patterns) { return null; } var versionNumbers = []; var resolvedPatterns = patterns.map(function (pattern) { var info = _this3.getStrictResolvedPattern(pattern); versionNumbers.push(info.version); return info; }); var maxValidRange = semver.maxSatisfying(versionNumbers, range); if (!maxValidRange) { return manifest && (0, _index().getExoticResolver)(range) ? this.exoticRangeMatch(resolvedPatterns, manifest) : null; } var indexOfmaxValidRange = versionNumbers.indexOf(maxValidRange); var maxValidRangeManifest = resolvedPatterns[indexOfmaxValidRange]; return maxValidRangeManifest; } /** * Get the manifest of the package that matches an exotic range */ }, { key: "exoticRangeMatch", value: function exoticRangeMatch(resolvedPkgs, manifest) { var remote = manifest._remote; if (!(remote && remote.reference && remote.type === 'copy')) { return null; } var matchedPkg = resolvedPkgs.find(function (_ref2) { var pkgRemote = _ref2._remote; return pkgRemote && pkgRemote.reference === remote.reference && pkgRemote.type === 'copy'; }); if (matchedPkg) { manifest._remote = matchedPkg._remote; } return matchedPkg; } /** * Determine if LockfileEntry is incorrect, remove it from lockfile cache and consider the pattern as new */ }, { key: "isLockfileEntryOutdated", value: function isLockfileEntryOutdated(version, range, hasVersion) { return !!(semver.validRange(range) && semver.valid(version) && !(0, _index().getExoticResolver)(range) && hasVersion && !semver.satisfies(version, range)); } /** * TODO description */ }, { key: "find", value: function () { var _find = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee(initialReq) { var req, request, fetchKey, initialFetch, fresh, lockfileEntry, _normalizePattern, range, hasVersion; return _regenerator()["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: req = this.resolveToResolution(initialReq); // we've already resolved it with a resolution if (req) { _context.next = 3; break; } return _context.abrupt("return"); case 3: request = new (_packageRequest()["default"])(req, this); fetchKey = "".concat(req.registry, ":").concat(req.pattern, ":").concat(String(req.optional)); initialFetch = !this.fetchingPatterns.has(fetchKey); fresh = false; if (this.activity) { this.activity.tick(req.pattern); } if (initialFetch) { this.fetchingPatterns.add(fetchKey); lockfileEntry = this.lockfile.getLocked(req.pattern); if (lockfileEntry) { _normalizePattern = (0, _normalizePattern2().normalizePattern)(req.pattern), range = _normalizePattern.range, hasVersion = _normalizePattern.hasVersion; if (this.isLockfileEntryOutdated(lockfileEntry.version, range, hasVersion)) { this.reporter.warn(this.reporter.lang('incorrectLockfileEntry', req.pattern)); this.removePattern(req.pattern); this.lockfile.removePattern(req.pattern); fresh = true; } } else { fresh = true; } request.init(); } _context.next = 11; return request.find({ fresh: fresh, frozen: this.frozen }); case 11: case "end": return _context.stop(); } }, _callee, this); })); function find(_x) { return _find.apply(this, arguments); } return find; }() /** * TODO description */ }, { key: "init", value: function () { var _init = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee2(deps) { var _ref3, isFlat, isFrozen, workspaceLayout, activity, _iterator13, _step13, req, _iterator14, _step14, _req, _iterator15, _step15, dep, _name2, _args2 = arguments; return _regenerator()["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _ref3 = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : { isFlat: false, isFrozen: false, workspaceLayout: undefined }, isFlat = _ref3.isFlat, isFrozen = _ref3.isFrozen, workspaceLayout = _ref3.workspaceLayout; this.flat = Boolean(isFlat); this.frozen = Boolean(isFrozen); this.workspaceLayout = workspaceLayout; activity = this.activity = this.reporter.activity(); _iterator13 = _createForOfIteratorHelper(deps); _context2.prev = 6; _iterator13.s(); case 8: if ((_step13 = _iterator13.n()).done) { _context2.next = 14; break; } req = _step13.value; _context2.next = 12; return this.find(req); case 12: _context2.next = 8; break; case 14: _context2.next = 19; break; case 16: _context2.prev = 16; _context2.t0 = _context2["catch"](6); _iterator13.e(_context2.t0); case 19: _context2.prev = 19; _iterator13.f(); return _context2.finish(19); case 22: // all required package versions have been discovered, so now packages that // resolved to existing versions can be resolved to their best available version this.resolvePackagesWithExistingVersions(); _iterator14 = _createForOfIteratorHelper(this.resolutionMap.delayQueue); try { for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) { _req = _step14.value; this.resolveToResolution(_req); } } catch (err) { _iterator14.e(err); } finally { _iterator14.f(); } if (isFlat) { _iterator15 = _createForOfIteratorHelper(deps); try { for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) { dep = _step15.value; _name2 = (0, _normalizePattern2().normalizePattern)(dep.pattern).name; this.optimizeResolutions(_name2); } } catch (err) { _iterator15.e(err); } finally { _iterator15.f(); } } activity.end(); this.activity = null; case 28: case "end": return _context2.stop(); } }, _callee2, this, [[6, 16, 19, 22]]); })); function init(_x2) { return _init.apply(this, arguments); } return init; }() // for a given package, see if a single manifest can satisfy all ranges }, { key: "optimizeResolutions", value: function optimizeResolutions(name) { var _this4 = this; var patterns = this.dedupePatterns(this.patternsByPackage[name] || []); // don't optimize things that already have a lockfile entry: // https://github.com/yarnpkg/yarn/issues/79 var collapsablePatterns = patterns.filter(function (pattern) { var remote = _this4.patterns[pattern]._remote; return !_this4.lockfile.getLocked(pattern) && (!remote || remote.type !== 'workspace'); }); if (collapsablePatterns.length < 2) { return; } // reverse sort, so we'll find the maximum satisfying version first var availableVersions = this.getAllInfoForPatterns(collapsablePatterns).map(function (manifest) { return manifest.version; }); availableVersions.sort(semver.rcompare); var ranges = collapsablePatterns.map(function (pattern) { return (0, _normalizePattern2().normalizePattern)(pattern).range; }); // find the most recent version that satisfies all patterns (if one exists), and // collapse to that version. var _iterator16 = _createForOfIteratorHelper(availableVersions), _step16; try { var _loop = function _loop() { var version = _step16.value; if (ranges.every(function (range) { return semver.satisfies(version, range); })) { _this4.collapsePackageVersions(name, version, collapsablePatterns); return { v: void 0 }; } }; for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) { var _ret = _loop(); if ((0, _typeof2()["default"])(_ret) === "object") return _ret.v; } } catch (err) { _iterator16.e(err); } finally { _iterator16.f(); } } /** * Called by the package requester for packages that this resolver already had * a matching version for. Delay the resolve, because better matches can still be * discovered. */ }, { key: "reportPackageWithExistingVersion", value: function reportPackageWithExistingVersion(req, info) { this.delayedResolveQueue.push({ req: req, info: info }); } /** * Executes the resolve to existing versions for packages after the find process, * when all versions that are going to be used have been discovered. */ }, { key: "resolvePackagesWithExistingVersions", value: function resolvePackagesWithExistingVersions() { var _iterator17 = _createForOfIteratorHelper(this.delayedResolveQueue), _step17; try { for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) { var _step17$value = _step17.value, req = _step17$value.req, info = _step17$value.info; req.resolveToExistingVersion(info); } } catch (err) { _iterator17.e(err); } finally { _iterator17.f(); } } }, { key: "resolveToResolution", value: function resolveToResolution(req) { var parentNames = req.parentNames, pattern = req.pattern; if (!parentNames || this.flat) { return req; } var resolution = this.resolutionMap.find(pattern, parentNames); if (resolution) { var resolutionManifest = this.getResolvedPattern(resolution); if (resolutionManifest) { invariant(resolutionManifest._reference, 'resolutions should have a resolved reference'); resolutionManifest._reference.patterns.push(pattern); this.addPattern(pattern, resolutionManifest); var lockManifest = this.lockfile.getLocked(pattern); if ((0, _resolutionMap().shouldUpdateLockfile)(lockManifest, resolutionManifest._reference)) { this.lockfile.removePattern(pattern); } } else { this.resolutionMap.addToDelayQueue(req); } return null; } return req; } }]); return PackageResolver; }(); exports["default"] = PackageResolver; //# sourceMappingURL=package-resolver.js.map