UNPKG

@lerna/publish

Version:

Publish packages in the current project

93 lines (92 loc) 4.65 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var symlink_dependencies_exports = {}; __export(symlink_dependencies_exports, { symlinkDependencies: () => symlinkDependencies }); module.exports = __toCommonJS(symlink_dependencies_exports); var import_fs_extra = __toESM(require("fs-extra")); var import_p_map = __toESM(require("p-map")); var import_p_map_series = __toESM(require("p-map-series")); var import_path = __toESM(require("path")); var import_create_symlink = require("./create-symlink"); var import_resolve_symlink = require("./resolve-symlink"); var import_symlink_binary = require("./symlink-binary"); function symlinkDependencies(packages, packageGraph, tracker) { tracker.info("", "Symlinking packages and binaries"); tracker.addWork(packages.length); const nodes = packageGraph?.size === packages.length ? packageGraph.values() : new Set(packages.map(({ name }) => packageGraph?.get(name))); return (0, import_p_map_series.default)(nodes, (currentNode) => { const currentName = currentNode?.name; const currentNodeModules = currentNode?.pkg.nodeModulesLocation; return (0, import_p_map.default)(currentNode?.localDependencies ?? /* @__PURE__ */ new Map(), ([dependencyName, resolved]) => { if (resolved.type === "directory") { return; } const dependencyNode = packageGraph?.get(dependencyName); const targetDirectory = import_path.default.join(currentNodeModules ?? "", dependencyName); let chain = Promise.resolve(); chain = chain.then(() => import_fs_extra.default.pathExists(targetDirectory)); chain = chain.then((dirExists) => { if (dirExists) { const isDepSymlink = (0, import_resolve_symlink.resolveSymlink)(targetDirectory); if (isDepSymlink !== false && isDepSymlink !== dependencyNode?.location) { tracker.warn( "EREPLACE_OTHER", `Symlink already exists for ${dependencyName} dependency of ${currentName}, but links to different location. Replacing with updated symlink...` ); } else if (isDepSymlink === false) { tracker.warn( "EREPLACE_EXIST", `${dependencyName} is already installed for ${currentName}. Replacing with symlink...` ); return import_fs_extra.default.remove(targetDirectory); } return Promise.resolve(); } else { return import_fs_extra.default.ensureDir(import_path.default.dirname(targetDirectory)); } }); const dependencyLocation = dependencyNode?.pkg.contents ? import_path.default.resolve(dependencyNode.location, dependencyNode.pkg.contents) : dependencyNode?.location; if (dependencyLocation) { chain = chain.then(() => (0, import_create_symlink.createSymlink)(dependencyLocation, targetDirectory, "junction")); } if (dependencyNode && currentNode) { chain = chain.then(() => (0, import_symlink_binary.symlinkBinary)(dependencyNode?.pkg, currentNode?.pkg)); } return chain; }).then(() => { tracker.silly("actions", "finished", currentName); tracker.completeWork(1); }); }).finally(() => tracker.finish()); } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { symlinkDependencies });