pnpmc
Version:
PNPM Catalogs Tooling
78 lines (76 loc) • 3.25 kB
JavaScript
import { fail, log } from "./utils-nUJKoOjh.js";
import { WORKSPACE_MANIFEST_FILENAME } from "@pnpm/constants";
import { findWorkspaceDir } from "@pnpm/find-workspace-dir";
import { readWorkspaceManifest } from "@pnpm/workspace.read-manifest";
import { findWorkspacePackages } from "@pnpm/workspace.find-packages";
import path from "node:path";
import writeYamlFile from "write-yaml-file";
//#region src/commands/register/runner.ts
const run = async (ctx) => {
const { dependency, alias, catalog } = ctx.values;
await register(ctx.env.cwd, dependency, alias, catalog);
};
async function register(target, dependency, alias, catalog) {
const workspaceDir = await findWorkspaceDir(target);
if (workspaceDir == null) return;
const catalogText = await registerCatalog(workspaceDir, dependency, alias, catalog);
log(catalogText);
log();
const dependencyText = await orverrideDependency(workspaceDir, dependency, catalog);
if (!dependencyText) return;
log(dependencyText);
}
async function registerCatalog(workspaceDir, dependency, alias, catalog) {
const manifest = await readWorkspaceManifest(workspaceDir);
if (manifest == null) fail("No workspace manifest found");
function override(catalog$1, catalogName, alias$1, dependency$1) {
if (catalog$1[dependency$1] !== alias$1) {
catalog$1[dependency$1] = alias$1;
return `📙 Registered '${dependency$1}' as '${alias$1}' in Catalog '${catalogName}'`;
} else return "";
}
const writableManifest = structuredClone(manifest);
let ret = "";
if (catalog === "default") {
const _catalog = writableManifest.catalog = writableManifest.catalog || {};
ret = override(_catalog, catalog, alias, dependency);
} else {
const catalogs = writableManifest.catalogs = writableManifest.catalogs || {};
const _catalog = catalogs[catalog] = catalogs[catalog] || {};
ret = override(_catalog, catalog, alias, dependency);
}
if (!ret.length) return `📙 No update, '${catalog}' is already registered in Catalog`;
try {
await writeYamlFile(path.join(workspaceDir, WORKSPACE_MANIFEST_FILENAME), writableManifest);
} catch (error) {
fail(error);
}
return ret;
}
async function orverrideDependency(workspaceDir, dependency, catalog) {
let ret = ``;
const projects = await findWorkspacePackages(workspaceDir);
for (const project of projects) {
const dependencies = project.manifest.dependencies = project.manifest.dependencies || {};
const devDependencies = project.manifest.devDependencies = project.manifest.devDependencies || {};
for (const deps of [dependencies, devDependencies]) {
const alias = deps[dependency];
const catalogAlias = `catalog:${catalog === "default" ? "" : catalog}`;
if (alias && !alias.startsWith(catalogAlias)) {
deps[dependency] = catalogAlias;
try {
await project.writeProjectManifest(project.manifest);
const pkgPath = project.rootDir.split(workspaceDir)[1] || "/";
const displayName = `${pkgPath}${project.manifest.name ? ` (${project.manifest.name})` : ""} `;
ret += `📦 Overridden '${dependency}' alias on ${displayName}: ${alias} -> ${deps[dependency]} \n`;
} catch (error) {
fail(error);
}
}
}
}
return ret;
}
var runner_default = run;
//#endregion
export { runner_default as default };