UNPKG

@storm-software/workspace-tools

Version:

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

164 lines (155 loc) • 6.22 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _chunk53DNHF7Bjs = require('./chunk-53DNHF7B.js'); // src/utils/pnpm-deps-update.ts var _devkit = require('@nx/devkit'); var _fs = require('fs'); var _promises = require('fs/promises'); var _prettier = require('prettier'); var _readyamlfile = require('read-yaml-file'); var _readyamlfile2 = _interopRequireDefault(_readyamlfile); var pnpmCatalog; async function pnpmCatalogUpdate(packageJson, workspaceRoot = process.cwd()) { if (!pnpmCatalog) { const pnpmWorkspacePath = _chunk53DNHF7Bjs.joinPaths.call(void 0, workspaceRoot, "pnpm-workspace.yaml"); if (!_fs.existsSync.call(void 0, pnpmWorkspacePath)) { console.warn( `No \`pnpm-workspace.yaml\` file found in workspace root (searching in: ${pnpmWorkspacePath}). Skipping pnpm catalog read for now.` ); return packageJson; } const pnpmWorkspaceYaml = await _readyamlfile2.default.call(void 0, pnpmWorkspacePath); if (_optionalChain([pnpmWorkspaceYaml, 'optionalAccess', _ => _.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.` ); } 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 packageJson; } async function pnpmWorkspaceUpdate(packageJson, workspaceRoot = process.cwd()) { let projectGraph; try { projectGraph = _devkit.readCachedProjectGraph.call(void 0, ); } catch (e) { await _devkit.createProjectGraphAsync.call(void 0, ); projectGraph = _devkit.readCachedProjectGraph.call(void 0, ); } const workspacePackages = {}; if (projectGraph) { await Promise.all( Object.keys(projectGraph.nodes).map(async (node) => { const projectNode = projectGraph.nodes[node]; if (_optionalChain([projectNode, 'optionalAccess', _2 => _2.data, 'access', _3 => _3.root])) { const projectPackageJsonPath = _chunk53DNHF7Bjs.joinPaths.call(void 0, workspaceRoot, projectNode.data.root, "package.json" ); if (_fs.existsSync.call(void 0, projectPackageJsonPath)) { const projectPackageJsonContent = await _promises.readFile.call(void 0, projectPackageJsonPath, "utf8" ); const projectPackageJson = JSON.parse(projectPackageJsonContent); if (projectPackageJson.private !== true) { workspacePackages[projectPackageJson.name] = projectPackageJson.version; } } } }) ); } for (const dependencyType of [ "dependencies", "devDependencies", "peerDependencies" ]) { const dependencies = packageJson[dependencyType]; if (!dependencies) { continue; } for (const dependencyName of Object.keys(dependencies)) { if (dependencies[dependencyName].startsWith("workspace:")) { if (workspacePackages[dependencyName]) { dependencies[dependencyName] = `^${workspacePackages[dependencyName]}`; } else { throw new Error( `Workspace dependency ${dependencyName} not found in workspace packages.` ); } } } } return packageJson; } async function pnpmUpdate(packageRoot, workspaceRoot = process.cwd()) { const packageJsonPath = _chunk53DNHF7Bjs.joinPaths.call(void 0, packageRoot, "package.json"); const packageJsonFile = await _promises.readFile.call(void 0, packageJsonPath, "utf8"); if (!packageJsonFile) { throw new Error( "No package.json file found in package root: " + packageRoot ); } return _promises.writeFile.call(void 0, packageJsonPath, await _prettier.format.call(void 0, JSON.stringify( await pnpmWorkspaceUpdate( await pnpmCatalogUpdate(JSON.parse(packageJsonFile), workspaceRoot), workspaceRoot ) ), { 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"] } ) ); } exports.pnpmUpdate = pnpmUpdate;