JezK
Edit File: package-linker.js
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; exports.linkBin = linkBin; function _regenerator() { var data = _interopRequireDefault(require("@babel/runtime/regenerator")); _regenerator = function _regenerator() { return data; }; return data; } function _toConsumableArray2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); _toConsumableArray2 = function _toConsumableArray2() { return data; }; return data; } function _slicedToArray2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); _slicedToArray2 = function _slicedToArray2() { 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 _asyncToGenerator2() { var data = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); _asyncToGenerator2 = function _asyncToGenerator2() { return data; }; return data; } function _packageHoister() { var data = _interopRequireDefault(require("./package-hoister.js")); _packageHoister = function _packageHoister() { return data; }; return data; } function constants() { var data = _interopRequireWildcard(require("./constants.js")); constants = function constants() { return data; }; return data; } function promise() { var data = _interopRequireWildcard(require("./util/promise.js")); promise = function promise() { return data; }; return data; } function _normalizePattern2() { var data = require("./util/normalize-pattern.js"); _normalizePattern2 = function _normalizePattern2() { return data; }; return data; } function _misc() { var data = require("./util/misc.js"); _misc = function _misc() { return data; }; return data; } function fs() { var data = _interopRequireWildcard(require("./util/fs.js")); fs = function fs() { return data; }; return data; } function _mutex() { var data = _interopRequireDefault(require("./util/mutex.js")); _mutex = function _mutex() { return data; }; return data; } function _semver() { var data = require("./util/semver.js"); _semver = function _semver() { return data; }; return data; } function _workspaceLayout() { var data = _interopRequireDefault(require("./workspace-layout.js")); _workspaceLayout = function _workspaceLayout() { 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 || _typeof(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 path = require('path'); var semver = require('semver'); // Concurrency for creating bin links disabled because of the issue #1961 var linkBinConcurrency = 1; function linkBin(_x, _x2) { return _linkBin.apply(this, arguments); } function _linkBin() { _linkBin = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee11(src, dest) { var unlockMutex; return _regenerator()["default"].wrap(function _callee11$(_context14) { while (1) switch (_context14.prev = _context14.next) { case 0: if (!(process.platform === 'win32')) { _context14.next = 7; break; } _context14.next = 3; return (0, _mutex()["default"])(src); case 3: unlockMutex = _context14.sent; try { ; } finally { unlockMutex(); } _context14.next = 13; break; case 7: _context14.next = 9; return fs().mkdirp(path.dirname(dest)); case 9: _context14.next = 11; return fs().symlink(src, dest); case 11: _context14.next = 13; return fs().chmod(dest, '755'); case 13: case "end": return _context14.stop(); } }, _callee11); })); return _linkBin.apply(this, arguments); } var PackageLinker = /*#__PURE__*/function () { function PackageLinker(config, resolver) { (0, _classCallCheck2()["default"])(this, PackageLinker); (0, _defineProperty2()["default"])(this, "artifacts", void 0); (0, _defineProperty2()["default"])(this, "reporter", void 0); (0, _defineProperty2()["default"])(this, "resolver", void 0); (0, _defineProperty2()["default"])(this, "config", void 0); (0, _defineProperty2()["default"])(this, "topLevelBinLinking", void 0); (0, _defineProperty2()["default"])(this, "unplugged", void 0); (0, _defineProperty2()["default"])(this, "_treeHash", void 0); this.resolver = resolver; this.reporter = config.reporter; this.config = config; this.artifacts = {}; this.topLevelBinLinking = true; this.unplugged = []; } (0, _createClass2()["default"])(PackageLinker, [{ key: "setArtifacts", value: function setArtifacts(artifacts) { this.artifacts = artifacts; } }, { key: "setTopLevelBinLinking", value: function setTopLevelBinLinking(topLevelBinLinking) { this.topLevelBinLinking = topLevelBinLinking; } }, { key: "linkSelfDependencies", value: function () { var _linkSelfDependencies = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee(pkg, pkgLoc, targetBinLoc) { var override, _iterator, _step, _step$value, scriptName, scriptCmd, dest, src, _args = arguments; return _regenerator()["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: override = _args.length > 3 && _args[3] !== undefined ? _args[3] : false; targetBinLoc = path.join(targetBinLoc, '.bin'); _context.next = 4; return fs().mkdirp(targetBinLoc); case 4: _context.next = 6; return fs().realpath(targetBinLoc); case 6: targetBinLoc = _context.sent; _context.next = 9; return fs().realpath(pkgLoc); case 9: pkgLoc = _context.sent; _iterator = _createForOfIteratorHelper((0, _misc().entries)(pkg.bin)); _context.prev = 11; _iterator.s(); case 13: if ((_step = _iterator.n()).done) { _context.next = 26; break; } _step$value = (0, _slicedToArray2()["default"])(_step.value, 2), scriptName = _step$value[0], scriptCmd = _step$value[1]; dest = path.join(targetBinLoc, scriptName); src = path.join(pkgLoc, scriptCmd); _context.next = 19; return fs().exists(src); case 19: if (_context.sent) { _context.next = 22; break; } if (override) { _context.next = 22; break; } return _context.abrupt("continue", 24); case 22: _context.next = 24; return linkBin(src, dest); case 24: _context.next = 13; break; case 26: _context.next = 31; break; case 28: _context.prev = 28; _context.t0 = _context["catch"](11); _iterator.e(_context.t0); case 31: _context.prev = 31; _iterator.f(); return _context.finish(31); case 34: case "end": return _context.stop(); } }, _callee, null, [[11, 28, 31, 34]]); })); function linkSelfDependencies(_x3, _x4, _x5) { return _linkSelfDependencies.apply(this, arguments); } return linkSelfDependencies; }() }, { key: "linkBinDependencies", value: function () { var _linkBinDependencies = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee2(pkg, dir) { var _this = this; var deps, ref, remote, _iterator2, _step2, pattern, _dep, _loc, _iterator3, _step3, _loop, _i, _deps, _deps$_i, dep, loc; return _regenerator()["default"].wrap(function _callee2$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: deps = []; ref = pkg._reference; invariant(ref, 'Package reference is missing'); remote = pkg._remote; invariant(remote, 'Package remote is missing'); // link up `bin scripts` in `dependencies` _iterator2 = _createForOfIteratorHelper(ref.dependencies); _context3.prev = 6; _iterator2.s(); case 8: if ((_step2 = _iterator2.n()).done) { _context3.next = 18; break; } pattern = _step2.value; _dep = this.resolver.getStrictResolvedPattern(pattern); if (!( // Missing locations means not installed inside node_modules _dep._reference && _dep._reference.locations.length && _dep.bin && Object.keys(_dep.bin).length)) { _context3.next = 16; break; } _context3.next = 14; return this.findNearestInstalledVersionOfPackage(_dep, dir); case 14: _loc = _context3.sent; deps.push({ dep: _dep, loc: _loc }); case 16: _context3.next = 8; break; case 18: _context3.next = 23; break; case 20: _context3.prev = 20; _context3.t0 = _context3["catch"](6); _iterator2.e(_context3.t0); case 23: _context3.prev = 23; _iterator2.f(); return _context3.finish(23); case 26: if (!pkg.bundleDependencies) { _context3.next = 43; break; } _iterator3 = _createForOfIteratorHelper(pkg.bundleDependencies); _context3.prev = 28; _loop = /*#__PURE__*/_regenerator()["default"].mark(function _loop() { var depName, locs, dep; return _regenerator()["default"].wrap(function _loop$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: depName = _step3.value; locs = ref.locations.map(function (loc) { return path.join(loc, _this.config.getFolder(pkg), depName); }); _context2.prev = 2; _context2.next = 5; return _this.config.readManifest(locs[0], remote.registry); case 5: dep = _context2.sent; //all of them should be the same if (dep.bin && Object.keys(dep.bin).length) { deps.push.apply(deps, (0, _toConsumableArray2()["default"])(locs.map(function (loc) { return { dep: dep, loc: loc }; }))); } _context2.next = 13; break; case 9: _context2.prev = 9; _context2.t0 = _context2["catch"](2); if (!(_context2.t0.code !== 'ENOENT')) { _context2.next = 13; break; } throw _context2.t0; case 13: case "end": return _context2.stop(); } }, _loop, null, [[2, 9]]); }); _iterator3.s(); case 31: if ((_step3 = _iterator3.n()).done) { _context3.next = 35; break; } return _context3.delegateYield(_loop(), "t1", 33); case 33: _context3.next = 31; break; case 35: _context3.next = 40; break; case 37: _context3.prev = 37; _context3.t2 = _context3["catch"](28); _iterator3.e(_context3.t2); case 40: _context3.prev = 40; _iterator3.f(); return _context3.finish(40); case 43: if (deps.length) { _context3.next = 45; break; } return _context3.abrupt("return"); case 45: _i = 0, _deps = deps; case 46: if (!(_i < _deps.length)) { _context3.next = 55; break; } _deps$_i = _deps[_i], dep = _deps$_i.dep, loc = _deps$_i.loc; if (!(dep._reference && dep._reference.locations.length)) { _context3.next = 52; break; } invariant(!dep._reference.isPlugnplay, "Plug'n'play packages should not be referenced here"); _context3.next = 52; return this.linkSelfDependencies(dep, loc, dir); case 52: _i++; _context3.next = 46; break; case 55: case "end": return _context3.stop(); } }, _callee2, this, [[6, 20, 23, 26], [28, 37, 40, 43]]); })); function linkBinDependencies(_x6, _x7) { return _linkBinDependencies.apply(this, arguments); } return linkBinDependencies; }() //find the installation location of ref that would be used in binLoc based on node module resolution }, { key: "findNearestInstalledVersionOfPackage", value: function () { var _findNearestInstalledVersionOfPackage = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee3(pkg, binLoc) { var ref, moduleFolder, realBinLoc, allLocations, realLocations, locationBinLocPairs, distancePairs, filteredDistancePairs, minItem; return _regenerator()["default"].wrap(function _callee3$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: ref = pkg._reference; invariant(ref, 'expected pkg reference for ' + pkg.name); moduleFolder = this.config.getFolder(pkg); _context4.next = 5; return fs().mkdirp(binLoc); case 5: _context4.next = 7; return fs().realpath(binLoc); case 7: realBinLoc = _context4.sent; allLocations = (0, _toConsumableArray2()["default"])(ref.locations); _context4.next = 11; return Promise.all(ref.locations.map(function (loc) { return fs().realpath(loc); })); case 11: realLocations = _context4.sent; realLocations.forEach(function (loc) { return allLocations.indexOf(loc) !== -1 || allLocations.push(loc); }); locationBinLocPairs = allLocations.map(function (loc) { return [loc, binLoc]; }); if (binLoc !== realBinLoc) { locationBinLocPairs.push.apply(locationBinLocPairs, (0, _toConsumableArray2()["default"])(allLocations.map(function (loc) { return [loc, realBinLoc]; }))); } distancePairs = locationBinLocPairs.map(function (_ref) { var _ref2 = (0, _slicedToArray2()["default"])(_ref, 2), loc = _ref2[0], curBinLoc = _ref2[1]; var distance = 0; var curLoc = curBinLoc; var notFound = false; while (path.join(curLoc, ref.name) !== loc && path.join(curLoc, moduleFolder, ref.name) !== loc) { var next = path.dirname(curLoc); if (curLoc === next) { notFound = true; break; } distance++; curLoc = next; } return notFound ? null : [loc, distance]; }); //remove items where path was not found filteredDistancePairs = distancePairs.filter(function (d) { return d; }); filteredDistancePairs; invariant(filteredDistancePairs.length > 0, "could not find a copy of ".concat(pkg.name, " to link in ").concat(binLoc)); //get smallest distance from package location minItem = filteredDistancePairs.reduce(function (min, cur) { return cur[1] < min[1] ? cur : min; }); invariant(minItem[1] >= 0, 'could not find a target for bin dir of ' + minItem.toString()); return _context4.abrupt("return", minItem[0]); case 22: case "end": return _context4.stop(); } }, _callee3, this); })); function findNearestInstalledVersionOfPackage(_x8, _x9) { return _findNearestInstalledVersionOfPackage.apply(this, arguments); } return findNearestInstalledVersionOfPackage; }() }, { key: "getFlatHoistedTree", value: function getFlatHoistedTree(patterns, workspaceLayout) { var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, ignoreOptional = _ref3.ignoreOptional; var hoister = new (_packageHoister()["default"])(this.config, this.resolver, { ignoreOptional: ignoreOptional, workspaceLayout: workspaceLayout }); hoister.seed(patterns); if (this.config.focus) { hoister.markShallowWorkspaceEntries(); } return hoister.init(); } }, { key: "copyModules", value: function () { var _copyModules = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee7(patterns, workspaceLayout) { var _this2 = this; var _ref4, linkDuplicates, ignoreOptional, flatTree, artifactFiles, copyQueue, hardlinkQueue, hardlinksEnabled, copiedSrcs, symlinkPaths, _iterator4, _step4, _loop2, _ret, possibleExtraneous, scopedPaths, findExtraneousFiles, _i2, _Object$keys, workspaceName, linkTargets, linkedModules, _iterator8, _step8, entry, entryPath, stat, entryTarget, scopeName, _iterator16, _step16, entry2, entryPath2, stat2, packageName, _entryTarget, _iterator9, _step9, loc, _packageName, _scopeName, tick, _iterator10, _step10, _loc2, _iterator11, _step11, scopedPath, files, topLevelDependencies, tickBin, _iterator12, _step12, _step12$value, pkg, _args9 = arguments; return _regenerator()["default"].wrap(function _callee7$(_context9) { while (1) switch (_context9.prev = _context9.next) { case 0: _ref4 = _args9.length > 2 && _args9[2] !== undefined ? _args9[2] : {}, linkDuplicates = _ref4.linkDuplicates, ignoreOptional = _ref4.ignoreOptional; flatTree = this.getFlatHoistedTree(patterns, workspaceLayout, { ignoreOptional: ignoreOptional }); // sorted tree makes file creation and copying not to interfere with each other flatTree = flatTree.sort(function (dep1, dep2) { return dep1[0].localeCompare(dep2[0]); }); // list of artifacts in modules to remove from extraneous removal artifactFiles = []; copyQueue = new Map(); hardlinkQueue = new Map(); _context9.t0 = linkDuplicates; if (!_context9.t0) { _context9.next = 11; break; } _context9.next = 10; return fs().hardlinksWork(this.config.cwd); case 10: _context9.t0 = _context9.sent; case 11: hardlinksEnabled = _context9.t0; copiedSrcs = new Map(); symlinkPaths = new Map(); _iterator4 = _createForOfIteratorHelper(flatTree); _context9.prev = 15; _loop2 = /*#__PURE__*/_regenerator()["default"].mark(function _loop2() { var _step4$value, folder, _step4$value$, pkg, loc, isShallow, remote, ref, dest, src, type, metadata, _iterator13, _step13, file, _iterator14, _step14, _step14$value, symlink, realpath, integrityArtifacts, _iterator15, _step15, _file, copiedDest; return _regenerator()["default"].wrap(function _loop2$(_context8) { while (1) switch (_context8.prev = _context8.next) { case 0: _step4$value = (0, _slicedToArray2()["default"])(_step4.value, 2), folder = _step4$value[0], _step4$value$ = _step4$value[1], pkg = _step4$value$.pkg, loc = _step4$value$.loc, isShallow = _step4$value$.isShallow; remote = pkg._remote || { type: '' }; ref = pkg._reference; dest = folder; invariant(ref, 'expected package reference'); src = loc; type = ''; if (!(remote.type === 'link')) { _context8.next = 12; break; } // replace package source from incorrect cache location (workspaces and link: are not cached) // with a symlink source src = remote.reference; type = 'symlink'; _context8.next = 23; break; case 12: if (!(workspaceLayout && remote.type === 'workspace' && !isShallow)) { _context8.next = 18; break; } src = remote.reference; type = 'symlink'; // to get real path for non hoisted dependencies symlinkPaths.set(dest, src); _context8.next = 23; break; case 18: _context8.next = 20; return _this2.config.readPackageMetadata(src); case 20: metadata = _context8.sent; _iterator13 = _createForOfIteratorHelper(metadata.artifacts); try { for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) { file = _step13.value; artifactFiles.push(path.join(dest, file)); } } catch (err) { _iterator13.e(err); } finally { _iterator13.f(); } case 23: _iterator14 = _createForOfIteratorHelper(symlinkPaths.entries()); try { for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) { _step14$value = (0, _slicedToArray2()["default"])(_step14.value, 2), symlink = _step14$value[0], realpath = _step14$value[1]; if (dest.indexOf(symlink + path.sep) === 0) { // after hoisting we end up with this structure // root/node_modules/workspace-package(symlink)/node_modules/package-a // fs.copy operations can't copy files through a symlink, so all the paths under workspace-package // need to be replaced with a real path, except for the symlink root/node_modules/workspace-package dest = dest.replace(symlink, realpath); } } } catch (err) { _iterator14.e(err); } finally { _iterator14.f(); } if (!_this2.config.plugnplayEnabled) { _context8.next = 40; break; } ref.isPlugnplay = true; _context8.next = 29; return _this2._isUnplugged(pkg, ref); case 29: if (!_context8.sent) { _context8.next = 38; break; } dest = _this2.config.generatePackageUnpluggedPath(ref); // We don't skip the copy if the unplugged package isn't materialized yet _context8.next = 33; return fs().exists(dest); case 33: if (!_context8.sent) { _context8.next = 36; break; } ref.addLocation(dest); return _context8.abrupt("return", "continue"); case 36: _context8.next = 40; break; case 38: ref.addLocation(src); return _context8.abrupt("return", "continue"); case 40: ref.addLocation(dest); integrityArtifacts = _this2.artifacts["".concat(pkg.name, "@").concat(pkg.version)]; if (integrityArtifacts) { _iterator15 = _createForOfIteratorHelper(integrityArtifacts); try { for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) { _file = _step15.value; artifactFiles.push(path.join(dest, _file)); } } catch (err) { _iterator15.e(err); } finally { _iterator15.f(); } } copiedDest = copiedSrcs.get(src); if (!copiedDest) { // no point to hardlink to a symlink if (hardlinksEnabled && type !== 'symlink') { copiedSrcs.set(src, dest); } copyQueue.set(dest, { src: src, dest: dest, type: type, onFresh: function onFresh() { if (ref) { ref.setFresh(true); } } }); } else { hardlinkQueue.set(dest, { src: copiedDest, dest: dest, onFresh: function onFresh() { if (ref) { ref.setFresh(true); } } }); } case 45: case "end": return _context8.stop(); } }, _loop2); }); _iterator4.s(); case 18: if ((_step4 = _iterator4.n()).done) { _context9.next = 25; break; } return _context9.delegateYield(_loop2(), "t1", 20); case 20: _ret = _context9.t1; if (!(_ret === "continue")) { _context9.next = 23; break; } return _context9.abrupt("continue", 23); case 23: _context9.next = 18; break; case 25: _context9.next = 30; break; case 27: _context9.prev = 27; _context9.t2 = _context9["catch"](15); _iterator4.e(_context9.t2); case 30: _context9.prev = 30; _iterator4.f(); return _context9.finish(30); case 33: possibleExtraneous = new Set(); scopedPaths = new Set(); findExtraneousFiles = /*#__PURE__*/function () { var _ref5 = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee4(basePath) { var _iterator5, _step5, folder, loc, files, _iterator6, _step6, file, filepath, _iterator7, _step7, subfile; return _regenerator()["default"].wrap(function _callee4$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: _iterator5 = _createForOfIteratorHelper(_this2.config.registryFolders); _context5.prev = 1; _iterator5.s(); case 3: if ((_step5 = _iterator5.n()).done) { _context5.next = 48; break; } folder = _step5.value; loc = path.resolve(basePath, folder); _context5.next = 8; return fs().exists(loc); case 8: if (!_context5.sent) { _context5.next = 46; break; } _context5.next = 11; return fs().readdir(loc); case 11: files = _context5.sent; _iterator6 = _createForOfIteratorHelper(files); _context5.prev = 13; _iterator6.s(); case 15: if ((_step6 = _iterator6.n()).done) { _context5.next = 38; break; } file = _step6.value; filepath = path.join(loc, file); // it's a scope, not a package if (!(file[0] === '@')) { _context5.next = 28; break; } scopedPaths.add(filepath); _context5.t0 = _createForOfIteratorHelper; _context5.next = 23; return fs().readdir(filepath); case 23: _context5.t1 = _context5.sent; _iterator7 = (0, _context5.t0)(_context5.t1); try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { subfile = _step7.value; possibleExtraneous.add(path.join(filepath, subfile)); } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } _context5.next = 36; break; case 28: if (!(file[0] === '.' && file !== '.bin')) { _context5.next = 35; break; } _context5.next = 31; return fs().lstat(filepath); case 31: if (_context5.sent.isDirectory()) { _context5.next = 33; break; } possibleExtraneous.add(filepath); case 33: _context5.next = 36; break; case 35: possibleExtraneous.add(filepath); case 36: _context5.next = 15; break; case 38: _context5.next = 43; break; case 40: _context5.prev = 40; _context5.t2 = _context5["catch"](13); _iterator6.e(_context5.t2); case 43: _context5.prev = 43; _iterator6.f(); return _context5.finish(43); case 46: _context5.next = 3; break; case 48: _context5.next = 53; break; case 50: _context5.prev = 50; _context5.t3 = _context5["catch"](1); _iterator5.e(_context5.t3); case 53: _context5.prev = 53; _iterator5.f(); return _context5.finish(53); case 56: case "end": return _context5.stop(); } }, _callee4, null, [[1, 50, 53, 56], [13, 40, 43, 46]]); })); return function findExtraneousFiles(_x12) { return _ref5.apply(this, arguments); }; }(); _context9.next = 38; return findExtraneousFiles(this.config.lockfileFolder); case 38: if (!workspaceLayout) { _context9.next = 47; break; } _i2 = 0, _Object$keys = Object.keys(workspaceLayout.workspaces); case 40: if (!(_i2 < _Object$keys.length)) { _context9.next = 47; break; } workspaceName = _Object$keys[_i2]; _context9.next = 44; return findExtraneousFiles(workspaceLayout.workspaces[workspaceName].loc); case 44: _i2++; _context9.next = 40; break; case 47: // If an Extraneous is an entry created via "yarn link", we prevent it from being overwritten. // Unfortunately, the only way we can know if they have been created this way is to check if they // are symlinks - problem is that it then conflicts with the newly introduced "link:" protocol, // which also creates symlinks :( a somewhat weak fix is to check if the symlink target is registered // inside the linkFolder, in which case we assume it has been created via "yarn link". Otherwise, we // assume it's a link:-managed dependency, and overwrite it as usual. linkTargets = new Map(); _context9.prev = 48; _context9.next = 51; return fs().readdir(this.config.linkFolder); case 51: linkedModules = _context9.sent; _context9.next = 61; break; case 54: _context9.prev = 54; _context9.t3 = _context9["catch"](48); if (!(_context9.t3.code === 'ENOENT')) { _context9.next = 60; break; } linkedModules = []; _context9.next = 61; break; case 60: throw _context9.t3; case 61: // TODO: Consolidate this logic with `this.config.linkedModules` logic _iterator8 = _createForOfIteratorHelper(linkedModules); _context9.prev = 62; _iterator8.s(); case 64: if ((_step8 = _iterator8.n()).done) { _context9.next = 126; break; } entry = _step8.value; entryPath = path.join(this.config.linkFolder, entry); _context9.next = 69; return fs().lstat(entryPath); case 69: stat = _context9.sent; if (!stat.isSymbolicLink()) { _context9.next = 85; break; } _context9.prev = 71; _context9.next = 74; return fs().realpath(entryPath); case 74: entryTarget = _context9.sent; linkTargets.set(entry, entryTarget); _context9.next = 83; break; case 78: _context9.prev = 78; _context9.t4 = _context9["catch"](71); this.reporter.warn(this.reporter.lang('linkTargetMissing', entry)); _context9.next = 83; return fs().unlink(entryPath); case 83: _context9.next = 124; break; case 85: if (!(stat.isDirectory() && entry[0] === '@')) { _context9.next = 124; break; } // if the entry is directory beginning with '@', then we're dealing with a package scope, which // means we must iterate inside to retrieve the package names it contains scopeName = entry; _context9.t5 = _createForOfIteratorHelper; _context9.next = 90; return fs().readdir(entryPath); case 90: _context9.t6 = _context9.sent; _iterator16 = (0, _context9.t5)(_context9.t6); _context9.prev = 92; _iterator16.s(); case 94: if ((_step16 = _iterator16.n()).done) { _context9.next = 116; break; } entry2 = _step16.value; entryPath2 = path.join(entryPath, entry2); _context9.next = 99; return fs().lstat(entryPath2); case 99: stat2 = _context9.sent; if (!stat2.isSymbolicLink()) { _context9.next = 114; break; } packageName = "".concat(scopeName, "/").concat(entry2); _context9.prev = 102; _context9.next = 105; return fs().realpath(entryPath2); case 105: _entryTarget = _context9.sent; linkTargets.set(packageName, _entryTarget); _context9.next = 114; break; case 109: _context9.prev = 109; _context9.t7 = _context9["catch"](102); this.reporter.warn(this.reporter.lang('linkTargetMissing', packageName)); _context9.next = 114; return fs().unlink(entryPath2); case 114: _context9.next = 94; break; case 116: _context9.next = 121; break; case 118: _context9.prev = 118; _context9.t8 = _context9["catch"](92); _iterator16.e(_context9.t8); case 121: _context9.prev = 121; _iterator16.f(); return _context9.finish(121); case 124: _context9.next = 64; break; case 126: _context9.next = 131; break; case 128: _context9.prev = 128; _context9.t9 = _context9["catch"](62); _iterator8.e(_context9.t9); case 131: _context9.prev = 131; _iterator8.f(); return _context9.finish(131); case 134: _iterator9 = _createForOfIteratorHelper(possibleExtraneous); _context9.prev = 135; _iterator9.s(); case 137: if ((_step9 = _iterator9.n()).done) { _context9.next = 159; break; } loc = _step9.value; _packageName = path.basename(loc); _scopeName = path.basename(path.dirname(loc)); if (_scopeName[0] === "@") { _packageName = "".concat(_scopeName, "/").concat(_packageName); } _context9.next = 144; return fs().lstat(loc); case 144: _context9.t11 = _context9.sent.isSymbolicLink(); if (!_context9.t11) { _context9.next = 147; break; } _context9.t11 = linkTargets.has(_packageName); case 147: _context9.t10 = _context9.t11; if (!_context9.t10) { _context9.next = 154; break; } _context9.t12 = linkTargets.get(_packageName); _context9.next = 152; return fs().realpath(loc); case 152: _context9.t13 = _context9.sent; _context9.t10 = _context9.t12 === _context9.t13; case 154: if (!_context9.t10) { _context9.next = 157; break; } possibleExtraneous["delete"](loc); copyQueue["delete"](loc); case 157: _context9.next = 137; break; case 159: _context9.next = 164; break; case 161: _context9.prev = 161; _context9.t14 = _context9["catch"](135); _iterator9.e(_context9.t14); case 164: _context9.prev = 164; _iterator9.f(); return _context9.finish(164); case 167: _context9.next = 169; return fs().copyBulk(Array.from(copyQueue.values()), this.reporter, { possibleExtraneous: possibleExtraneous, artifactFiles: artifactFiles, ignoreBasenames: [constants().METADATA_FILENAME, constants().TARBALL_FILENAME, '.bin'], onStart: function onStart(num) { tick = _this2.reporter.progress(num); }, onProgress: function onProgress(src) { if (tick) { tick(); } } }); case 169: _context9.next = 171; return fs().hardlinkBulk(Array.from(hardlinkQueue.values()), this.reporter, { possibleExtraneous: possibleExtraneous, artifactFiles: artifactFiles, onStart: function onStart(num) { tick = _this2.reporter.progress(num); }, onProgress: function onProgress(src) { if (tick) { tick(); } } }); case 171: // remove all extraneous files that weren't in the tree _iterator10 = _createForOfIteratorHelper(possibleExtraneous); _context9.prev = 172; _iterator10.s(); case 174: if ((_step10 = _iterator10.n()).done) { _context9.next = 181; break; } _loc2 = _step10.value; this.reporter.verbose(this.reporter.lang('verboseFileRemoveExtraneous', _loc2)); _context9.next = 179; return fs().unlink(_loc2); case 179: _context9.next = 174; break; case 181: _context9.next = 186; break; case 183: _context9.prev = 183; _context9.t15 = _context9["catch"](172); _iterator10.e(_context9.t15); case 186: _context9.prev = 186; _iterator10.f(); return _context9.finish(186); case 189: // remove any empty scoped directories _iterator11 = _createForOfIteratorHelper(scopedPaths); _context9.prev = 190; _iterator11.s(); case 192: if ((_step11 = _iterator11.n()).done) { _context9.next = 202; break; } scopedPath = _step11.value; _context9.next = 196; return fs().readdir(scopedPath); case 196: files = _context9.sent; if (!(files.length === 0)) { _context9.next = 200; break; } _context9.next = 200; return fs().unlink(scopedPath); case 200: _context9.next = 192; break; case 202: _context9.next = 207; break; case 204: _context9.prev = 204; _context9.t16 = _context9["catch"](190); _iterator11.e(_context9.t16); case 207: _context9.prev = 207; _iterator11.f(); return _context9.finish(207); case 210: if (!(this.config.getOption('bin-links') && this.config.binLinks !== false)) { _context9.next = 217; break; } topLevelDependencies = this.determineTopLevelBinLinkOrder(flatTree); tickBin = this.reporter.progress(flatTree.length + topLevelDependencies.length); // create links in transient dependencies _context9.next = 215; return promise().queue(flatTree, /*#__PURE__*/function () { var _ref7 = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee5(_ref6) { var _ref8, dest, _ref8$, pkg, isNohoist, parts, binLoc, parentBinLoc; return _regenerator()["default"].wrap(function _callee5$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: _ref8 = (0, _slicedToArray2()["default"])(_ref6, 2), dest = _ref8[0], _ref8$ = _ref8[1], pkg = _ref8$.pkg, isNohoist = _ref8$.isNohoist, parts = _ref8$.parts; if (!(pkg._reference && pkg._reference.locations.length && !pkg._reference.isPlugnplay)) { _context6.next = 10; break; } binLoc = path.join(dest, _this2.config.getFolder(pkg)); _context6.next = 5; return _this2.linkBinDependencies(pkg, binLoc); case 5: if (!isNohoist) { _context6.next = 9; break; } // if nohoist, we need to override the binLink to point to the local destination parentBinLoc = _this2.getParentBinLoc(parts, flatTree); _context6.next = 9; return _this2.linkSelfDependencies(pkg, dest, parentBinLoc, true); case 9: tickBin(); case 10: tickBin(); case 11: case "end": return _context6.stop(); } }, _callee5); })); return function (_x13) { return _ref7.apply(this, arguments); }; }(), linkBinConcurrency); case 215: _context9.next = 217; return promise().queue(topLevelDependencies, /*#__PURE__*/function () { var _ref10 = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee6(_ref9) { var _ref11, dest, pkg, binLoc; return _regenerator()["default"].wrap(function _callee6$(_context7) { while (1) switch (_context7.prev = _context7.next) { case 0: _ref11 = (0, _slicedToArray2()["default"])(_ref9, 2), dest = _ref11[0], pkg = _ref11[1].pkg; if (!(pkg._reference && pkg._reference.locations.length && !pkg._reference.isPlugnplay && pkg.bin && Object.keys(pkg.bin).length)) { _context7.next = 5; break; } if (_this2.config.modulesFolder) { binLoc = path.join(_this2.config.modulesFolder); } else { binLoc = path.join(_this2.config.lockfileFolder, _this2.config.getFolder(pkg)); } _context7.next = 5; return _this2.linkSelfDependencies(pkg, dest, binLoc); case 5: tickBin(); case 6: case "end": return _context7.stop(); } }, _callee6); })); return function (_x14) { return _ref10.apply(this, arguments); }; }(), linkBinConcurrency); case 217: _iterator12 = _createForOfIteratorHelper(flatTree); _context9.prev = 218; _iterator12.s(); case 220: if ((_step12 = _iterator12.n()).done) { _context9.next = 226; break; } _step12$value = (0, _slicedToArray2()["default"])(_step12.value, 2), pkg = _step12$value[1].pkg; _context9.next = 224; return this._warnForMissingBundledDependencies(pkg); case 224: _context9.next = 220; break; case 226: _context9.next = 231; break; case 228: _context9.prev = 228; _context9.t17 = _context9["catch"](218); _iterator12.e(_context9.t17); case 231: _context9.prev = 231; _iterator12.f(); return _context9.finish(231); case 234: case "end": return _context9.stop(); } }, _callee7, this, [[15, 27, 30, 33], [48, 54], [62, 128, 131, 134], [71, 78], [92, 118, 121, 124], [102, 109], [135, 161, 164, 167], [172, 183, 186, 189], [190, 204, 207, 210], [218, 228, 231, 234]]); })); function copyModules(_x10, _x11) { return _copyModules.apply(this, arguments); } return copyModules; }() }, { key: "_buildTreeHash", value: function _buildTreeHash(flatTree) { var hash = new Map(); var _iterator17 = _createForOfIteratorHelper(flatTree), _step17; try { for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) { var _step17$value = (0, _slicedToArray2()["default"])(_step17.value, 2), dest = _step17$value[0], hoistManifest = _step17$value[1]; var key = hoistManifest.parts.join('#'); hash.set(key, [dest, hoistManifest]); } } catch (err) { _iterator17.e(err); } finally { _iterator17.f(); } this._treeHash = hash; return hash; } }, { key: "getParentBinLoc", value: function getParentBinLoc(parts, flatTree) { var hash = this._treeHash || this._buildTreeHash(flatTree); var parent = parts.slice(0, -1).join('#'); var tuple = hash.get(parent); if (!tuple) { throw new Error("failed to get parent '".concat(parent, "' binLoc")); } var _tuple = (0, _slicedToArray2()["default"])(tuple, 2), dest = _tuple[0], hoistManifest = _tuple[1]; var parentBinLoc = path.join(dest, this.config.getFolder(hoistManifest.pkg)); return parentBinLoc; } }, { key: "determineTopLevelBinLinkOrder", value: function determineTopLevelBinLinkOrder(flatTree) { var linksToCreate = new Map(); var _iterator18 = _createForOfIteratorHelper(flatTree), _step18; try { for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) { var _step18$value = (0, _slicedToArray2()["default"])(_step18.value, 2), dest = _step18$value[0], hoistManifest = _step18$value[1]; var pkg = hoistManifest.pkg, isDirectRequire = hoistManifest.isDirectRequire, isNohoist = hoistManifest.isNohoist, isShallow = hoistManifest.isShallow; var name = pkg.name; // nohoist and shallow packages should not be linked at topLevel bin if (!isNohoist && !isShallow && (isDirectRequire || this.topLevelBinLinking && !linksToCreate.has(name))) { linksToCreate.set(name, [dest, hoistManifest]); } } // Sort the array so that direct dependencies will be linked last. // Bin links are overwritten if they already exist, so this will cause direct deps to take precedence. // If someone finds this to be incorrect later, you could also consider sorting descending by // `linkToCreate.level` which is the dependency tree depth. Direct deps will have level 0 and transitive // deps will have level > 0. } catch (err) { _iterator18.e(err); } finally { _iterator18.f(); } var transientBins = []; var topLevelBins = []; for (var _i3 = 0, _Array$from = Array.from(linksToCreate.values()); _i3 < _Array$from.length; _i3++) { var linkToCreate = _Array$from[_i3]; if (linkToCreate[1].isDirectRequire) { topLevelBins.push(linkToCreate); } else { transientBins.push(linkToCreate); } } return [].concat(transientBins, topLevelBins); } }, { key: "resolvePeerModules", value: function resolvePeerModules() { var _this3 = this; var _iterator19 = _createForOfIteratorHelper(this.resolver.getManifests()), _step19; try { var _loop3 = function _loop3() { var pkg = _step19.value; var peerDeps = pkg.peerDependencies; var peerDepsMeta = pkg.peerDependenciesMeta; if (!peerDeps) { return "continue"; } var ref = pkg._reference; invariant(ref, 'Package reference is missing'); // TODO: We are taking the "shortest" ref tree but there may be multiple ref trees with the same length var refTree = ref.requests.map(function (req) { return req.parentNames; }).sort(function (arr1, arr2) { return arr1.length - arr2.length; })[0]; var getLevelDistance = function getLevelDistance(pkgRef) { var minDistance = Infinity; var _iterator20 = _createForOfIteratorHelper(pkgRef.requests), _step20; try { for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) { var req = _step20.value; var distance = refTree.length - req.parentNames.length; if (distance >= 0 && distance < minDistance && req.parentNames.every(function (name, idx) { return name === refTree[idx]; })) { minDistance = distance; } } } catch (err) { _iterator20.e(err); } finally { _iterator20.f(); } return minDistance; }; for (var peerDepName in peerDeps) { var range = peerDeps[peerDepName]; var meta = peerDepsMeta && peerDepsMeta[peerDepName]; var isOptional = !!(meta && meta.optional); var peerPkgs = _this3.resolver.getAllInfoForPackageName(peerDepName); var peerError = 'unmetPeer'; var resolvedLevelDistance = Infinity; var resolvedPeerPkg = void 0; var _iterator21 = _createForOfIteratorHelper(peerPkgs), _step21; try { for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) { var peerPkg = _step21.value; var peerPkgRef = peerPkg._reference; if (!(peerPkgRef && peerPkgRef.patterns)) { continue; } var levelDistance = getLevelDistance(peerPkgRef); if (isFinite(levelDistance) && levelDistance < resolvedLevelDistance) { if (_this3._satisfiesPeerDependency(range, peerPkgRef.version)) { resolvedLevelDistance = levelDistance; resolvedPeerPkg = peerPkgRef; } else { peerError = 'incorrectPeer'; } } } } catch (err) { _iterator21.e(err); } finally { _iterator21.f(); } if (resolvedPeerPkg) { ref.addDependencies(resolvedPeerPkg.patterns); _this3.reporter.verbose(_this3.reporter.lang('selectedPeer', "".concat(pkg.name, "@").concat(pkg.version), "".concat(peerDepName, "@").concat(resolvedPeerPkg.version), resolvedPeerPkg.level)); } else if (!isOptional) { _this3.reporter.warn(_this3.reporter.lang(peerError, "".concat(refTree.join(' > '), " > ").concat(pkg.name, "@").concat(pkg.version), "".concat(peerDepName, "@").concat(range))); } } }; for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) { var _ret2 = _loop3(); if (_ret2 === "continue") continue; } } catch (err) { _iterator19.e(err); } finally { _iterator19.f(); } } }, { key: "_satisfiesPeerDependency", value: function _satisfiesPeerDependency(range, version) { return range === '*' || (0, _semver().satisfiesWithPrereleases)(version, range, this.config.looseSemver); } }, { key: "_warnForMissingBundledDependencies", value: function () { var _warnForMissingBundledDependencies2 = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee8(pkg) { var _this4 = this; var ref, _iterator22, _step22, _loop4; return _regenerator()["default"].wrap(function _callee8$(_context11) { while (1) switch (_context11.prev = _context11.next) { case 0: ref = pkg._reference; invariant(ref, 'missing package ref ' + pkg.name); if (!pkg.bundleDependencies) { _context11.next = 19; break; } _iterator22 = _createForOfIteratorHelper(pkg.bundleDependencies); _context11.prev = 4; _loop4 = /*#__PURE__*/_regenerator()["default"].mark(function _loop4() { var depName, locs, locsExist, pkgHuman; return _regenerator()["default"].wrap(function _loop4$(_context10) { while (1) switch (_context10.prev = _context10.next) { case 0: depName = _step22.value; locs = ref.locations.map(function (loc) { return path.join(loc, _this4.config.getFolder(pkg), depName); }); _context10.next = 4; return Promise.all(locs.map(function (loc) { return fs().exists(loc); })); case 4: locsExist = _context10.sent; if (locsExist.some(function (e) { return !e; })) { //if any of the locs do not exist pkgHuman = "".concat(pkg.name, "@").concat(pkg.version); _this4.reporter.warn(_this4.reporter.lang('missingBundledDependency', pkgHuman, depName)); } case 6: case "end": return _context10.stop(); } }, _loop4); }); _iterator22.s(); case 7: if ((_step22 = _iterator22.n()).done) { _context11.next = 11; break; } return _context11.delegateYield(_loop4(), "t0", 9); case 9: _context11.next = 7; break; case 11: _context11.next = 16; break; case 13: _context11.prev = 13; _context11.t1 = _context11["catch"](4); _iterator22.e(_context11.t1); case 16: _context11.prev = 16; _iterator22.f(); return _context11.finish(16); case 19: case "end": return _context11.stop(); } }, _callee8, null, [[4, 13, 16, 19]]); })); function _warnForMissingBundledDependencies(_x15) { return _warnForMissingBundledDependencies2.apply(this, arguments); } return _warnForMissingBundledDependencies; }() }, { key: "_isUnplugged", value: function () { var _isUnplugged2 = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee9(pkg, ref) { return _regenerator()["default"].wrap(function _callee9$(_context12) { while (1) switch (_context12.prev = _context12.next) { case 0: _context12.next = 2; return fs().exists(this.config.generatePackageUnpluggedPath(ref)); case 2: if (!_context12.sent) { _context12.next = 4; break; } return _context12.abrupt("return", true); case 4: if (!(!this.config.ignoreScripts && pkg.scripts && (pkg.scripts.preinstall || pkg.scripts.install || pkg.scripts.postinstall))) { _context12.next = 6; break; } return _context12.abrupt("return", true); case 6: return _context12.abrupt("return", this.unplugged.some(function (patternToUnplug) { var _normalizePattern = (0, _normalizePattern2().normalizePattern)(patternToUnplug), name = _normalizePattern.name, range = _normalizePattern.range, hasVersion = _normalizePattern.hasVersion; var satisfiesSemver = hasVersion ? semver.satisfies(ref.version, range) : true; return name === ref.name && satisfiesSemver; })); case 7: case "end": return _context12.stop(); } }, _callee9, this); })); function _isUnplugged(_x16, _x17) { return _isUnplugged2.apply(this, arguments); } return _isUnplugged; }() }, { key: "init", value: function () { var _init = (0, _asyncToGenerator2()["default"])( /*#__PURE__*/_regenerator()["default"].mark(function _callee10(patterns, workspaceLayout) { var _ref12, linkDuplicates, ignoreOptional, _args13 = arguments; return _regenerator()["default"].wrap(function _callee10$(_context13) { while (1) switch (_context13.prev = _context13.next) { case 0: _ref12 = _args13.length > 2 && _args13[2] !== undefined ? _args13[2] : {}, linkDuplicates = _ref12.linkDuplicates, ignoreOptional = _ref12.ignoreOptional; this.resolvePeerModules(); _context13.next = 4; return this.copyModules(patterns, workspaceLayout, { linkDuplicates: linkDuplicates, ignoreOptional: ignoreOptional }); case 4: if (this.config.plugnplayEnabled) { _context13.next = 7; break; } _context13.next = 7; return fs().unlink("".concat(this.config.lockfileFolder, "/").concat(constants().PNP_FILENAME)); case 7: case "end": return _context13.stop(); } }, _callee10, this); })); function init(_x18, _x19) { return _init.apply(this, arguments); } return init; }() }]); return PackageLinker; }(); exports["default"] = PackageLinker; //# sourceMappingURL=package-linker.js.map