@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
JavaScript
;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;