UNPKG

@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
// 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 };