@storm-software/workspace-tools
Version:
Tools for managing a Storm workspace, including various Nx generators and executors for common development tasks.
149 lines (146 loc) • 3.96 kB
JavaScript
// src/utils/lock-file.ts
import {
output,
readJsonFile,
workspaceRoot
} from "@nx/devkit";
import { existsSync } from "node:fs";
import { join } from "node:path";
import {
getNpmLockfileDependencies,
getNpmLockfileNodes
} from "nx/src/plugins/js/lock-file/npm-parser";
import {
getPnpmLockfileDependencies,
getPnpmLockfileNodes
} from "nx/src/plugins/js/lock-file/pnpm-parser";
import {
getYarnLockfileDependencies,
getYarnLockfileNodes
} from "nx/src/plugins/js/lock-file/yarn-parser";
var YARN_LOCK_FILE = "yarn.lock";
var NPM_LOCK_FILE = "package-lock.json";
var PNPM_LOCK_FILE = "pnpm-lock.yaml";
var LOCK_FILES = [YARN_LOCK_FILE, NPM_LOCK_FILE, PNPM_LOCK_FILE];
var YARN_LOCK_PATH = join(workspaceRoot, YARN_LOCK_FILE);
var NPM_LOCK_PATH = join(workspaceRoot, NPM_LOCK_FILE);
var PNPM_LOCK_PATH = join(workspaceRoot, PNPM_LOCK_FILE);
function getLockFileNodes(packageManager, contents, lockFileHash, context) {
try {
if (packageManager === "yarn") {
const packageJson = readJsonFile(
join(context.workspaceRoot, "package.json")
);
return getYarnLockfileNodes(contents, lockFileHash, packageJson);
}
if (packageManager === "pnpm") {
return getPnpmLockfileNodes(contents, lockFileHash);
}
if (packageManager === "npm") {
return getNpmLockfileNodes(contents, lockFileHash);
}
} catch (e) {
if (!isPostInstallProcess()) {
output.error({
title: `Failed to parse ${packageManager} lockfile`,
bodyLines: errorBodyLines(e)
});
}
throw e;
}
throw new Error(`Unknown package manager: ${packageManager}`);
}
function getLockFileDependencies(packageManager, contents, lockFileHash, context, keyMap) {
try {
if (packageManager === "yarn") {
return getYarnLockfileDependencies(
contents,
lockFileHash,
context,
keyMap
);
}
if (packageManager === "pnpm") {
return getPnpmLockfileDependencies(
contents,
lockFileHash,
context,
keyMap
);
}
if (packageManager === "npm") {
return getNpmLockfileDependencies(
contents,
lockFileHash,
context,
keyMap
);
}
} catch (e) {
if (!isPostInstallProcess()) {
output.error({
title: `Failed to parse ${packageManager} lockfile`,
bodyLines: errorBodyLines(e)
});
}
throw e;
}
throw new Error(`Unknown package manager: ${packageManager}`);
}
function lockFileExists(packageManager) {
if (packageManager === "yarn") {
return existsSync(YARN_LOCK_PATH);
}
if (packageManager === "pnpm") {
return existsSync(PNPM_LOCK_PATH);
}
if (packageManager === "npm") {
return existsSync(NPM_LOCK_PATH);
}
throw new Error(
`Unknown package manager ${packageManager} or lock file missing`
);
}
function getLockFileName(packageManager) {
if (packageManager === "yarn") {
return YARN_LOCK_FILE;
}
if (packageManager === "pnpm") {
return PNPM_LOCK_FILE;
}
if (packageManager === "npm") {
return NPM_LOCK_FILE;
}
throw new Error(`Unknown package manager: ${packageManager}`);
}
function errorBodyLines(originalError, additionalInfo = []) {
const result = [
"Please open an issue at `https://github.com/storm-software/storm-ops/issues/new?template=1-bug.yml` and provide a reproduction.",
...additionalInfo
];
if (originalError.message) {
result.push(`
Original error: ${originalError.message}
`);
}
if (originalError.stack) {
result.push(originalError.stack);
}
return result;
}
function isPostInstallProcess() {
return process.env.npm_command === "install" && process.env.npm_lifecycle_event === "postinstall";
}
export {
YARN_LOCK_FILE,
NPM_LOCK_FILE,
PNPM_LOCK_FILE,
LOCK_FILES,
YARN_LOCK_PATH,
NPM_LOCK_PATH,
PNPM_LOCK_PATH,
getLockFileNodes,
getLockFileDependencies,
lockFileExists,
getLockFileName
};