UNPKG

pnpmc

Version:
78 lines (76 loc) 3.25 kB
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 };