UNPKG

@lerna/publish

Version:

Publish packages in the current project

83 lines (82 loc) 2.66 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var query_graph_exports = {}; __export(query_graph_exports, { QueryGraph: () => QueryGraph, toposort: () => toposort }); module.exports = __toCommonJS(query_graph_exports); var import_package_graph = require("./package-graph"); class QueryGraph { graph; cycles; /** * Sort a list of Packages topologically. * @returns A list of Package instances in topological order */ static toposort(packages, options) { const graph = new QueryGraph(packages, options); const result = []; let batch = graph.getAvailablePackages(); while (batch.length) { for (const node of batch) { result.push(node.pkg); graph.markAsDone(node); } batch = graph.getAvailablePackages(); } return result; } constructor(packages, { graphType = "allDependencies", rejectCycles } = {}) { this.graph = new import_package_graph.PackageGraph(packages, graphType); this.cycles = this.graph.collapseCycles(rejectCycles); } _getNextLeaf() { return Array.from(this.graph.values()).filter((node) => node.localDependencies.size === 0); } _getNextCycle() { const cycle = Array.from(this.cycles).find((cycleNode) => cycleNode.localDependencies.size === 0); if (!cycle) { return []; } this.cycles.delete(cycle); return cycle.flatten(); } getAvailablePackages() { const availablePackages = this._getNextLeaf(); if (availablePackages.length > 0) { return availablePackages; } return this._getNextCycle(); } markAsTaken(name) { this.graph.delete(name); } markAsDone(candidateNode) { this.graph.remove(candidateNode); for (const cycle of this.cycles) { cycle.unlink(candidateNode); } } } const toposort = QueryGraph.toposort; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { QueryGraph, toposort });