UNPKG

@storm-software/workspace-tools

Version:

Tools for managing a Storm workspace, including various Nx generators and executors for common development tasks.

88 lines (85 loc) 3.1 kB
import { joinPaths } from "./chunk-ATIBREWM.mjs"; import { __name } from "./chunk-2BPV2XV2.mjs"; // src/utils/pnpm-deps-update.ts import { existsSync } from "node:fs"; import { readFile, writeFile } from "node:fs/promises"; import { format } from "prettier"; import readYamlFile from "read-yaml-file"; var pnpmCatalog; async function pnpmCatalogUpdate(packageRoot, workspaceRoot = process.cwd()) { if (!pnpmCatalog) { const pnpmWorkspacePath = joinPaths(workspaceRoot, "pnpm-workspace.yaml"); if (!existsSync(pnpmWorkspacePath)) { console.warn(`No \`pnpm-workspace.yaml\` file found in workspace root (searching in: ${pnpmWorkspacePath}). Skipping pnpm catalog read for now.`); return; } const pnpmWorkspaceYaml = await readYamlFile(pnpmWorkspacePath); console.info(`pnpmWorkspaceYaml: ${JSON.stringify(pnpmWorkspaceYaml ?? {})}`); if (pnpmWorkspaceYaml?.catalog) { pnpmCatalog = pnpmWorkspaceYaml.catalog; } else { console.warn(`Found a \`pnpm-workspace.yaml\` file in the workspace root directory, but no pnpm catalog existed: File name: ${pnpmWorkspacePath} File contents: ${pnpmWorkspaceYaml ? JSON.stringify(pnpmWorkspaceYaml) : "EMPTY FILE"}`); } } if (!pnpmCatalog) { console.warn(`No pnpm catalog found. Attempting to read from workspace root's \`pnpm-workspace.yaml\` file.`); } const packageJsonPath = joinPaths(packageRoot, "package.json"); const packageJsonFile = await readFile(packageJsonPath, "utf8"); if (!packageJsonFile) { throw new Error("No package.json file found in package root: " + packageRoot); } const packageJson = JSON.parse(packageJsonFile); for (const dependencyType of [ "dependencies", "devDependencies", "peerDependencies" ]) { const dependencies = packageJson[dependencyType]; if (!dependencies) { continue; } for (const dependencyName of Object.keys(dependencies)) { if (dependencies[dependencyName] === "catalog:") { if (!pnpmCatalog) { throw new Error(`Dependency ${dependencyName} is marked as \`catalog:\`, but no catalog exists in the workspace root's \`pnpm-workspace.yaml\` file.`); } const catalogVersion = pnpmCatalog[dependencyName]; if (!catalogVersion) { throw new Error("Missing pnpm catalog version for " + dependencyName); } dependencies[dependencyName] = catalogVersion; } else if (dependencies[dependencyName].startsWith("catalog:")) { throw new Error("multiple named catalogs not supported"); } } } return writeFile(packageJsonPath, await format(JSON.stringify(packageJson), { parser: "json", proseWrap: "always", trailingComma: "none", tabWidth: 2, semi: true, singleQuote: false, quoteProps: "as-needed", insertPragma: false, bracketSameLine: true, printWidth: 80, bracketSpacing: true, arrowParens: "avoid", endOfLine: "lf", plugins: [ "prettier-plugin-pkg" ] })); } __name(pnpmCatalogUpdate, "pnpmCatalogUpdate"); export { pnpmCatalogUpdate };