mono-pub
Version:
Simple tool for publishing your npm packages that live in a monorepo
53 lines (51 loc) • 1.65 kB
JavaScript
// src/utils/deps.ts
import get from "lodash/get";
import set from "lodash/set";
// src/utils/versions.ts
import isEqual from "lodash/isEqual";
function versionToString(version) {
return `${version.major}.${version.minor}.${version.patch}`;
}
// src/utils/deps.ts
function getExecutionOrder(packages, options) {
const batches = [];
const pkgMap = Object.fromEntries(packages.map((pkg) => [pkg.name, pkg]));
const ignoreDependencies = (options == null ? void 0 : options.ignoreDependencies) || {};
const dependencies = /* @__PURE__ */ new Map();
for (const pkg of packages) {
const packageIgnoreList = ignoreDependencies[pkg.name] || [];
dependencies.set(
pkg.name,
pkg.dependsOn.map((dep) => dep.name).filter((name) => !packageIgnoreList.includes(name))
);
}
while (dependencies.size > 0) {
const batch = [];
for (const [pkgName, pkgDeps] of dependencies) {
if (pkgDeps.length === 0) {
batch.push({ name: pkgName, location: pkgMap[pkgName].location });
dependencies.delete(pkgName);
}
}
if (batch.length === 0) {
throw new Error("The release cannot be done because of cyclic dependencies");
}
batches.push(batch);
const includedPackages = batch.map((pkg) => pkg.name);
for (const [pkgName, pkgDeps] of dependencies) {
dependencies.set(
pkgName,
pkgDeps.filter((depName) => !includedPackages.includes(depName))
);
}
}
if (options == null ? void 0 : options.batching) {
return batches;
}
return batches.flat();
}
export {
getExecutionOrder,
versionToString
};
//# sourceMappingURL=index.mjs.map