mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-29 19:20:04 -04:00
Fixes #11818 ## Summary `devEngines.runtime` / `engines.runtime` entries with `onFail: error` or `warn` silently did nothing — only `onFail: download` had any effect. This PR wires up validation for all three supported runtimes (node, deno, bun). - Add `getSystemDenoVersion` / `getSystemBunVersion` and a generic `getSystemRuntimeVersion(name)` dispatcher in the runtime-version helper package. - Walk each runtime entry in the manifest during pnpm startup, compare to the live system runtime, and throw `ERR_PNPM_BAD_RUNTIME_VERSION` (or warn) on a mismatch. Invalid ranges (e.g. `"invalid range"`) are reported instead of crashing `semver.minVersion`. Missing runtimes ("no Node.js on the system") get the same error path. - The shell-out for deno/bun only runs when the manifest configures them AND `onFail` is `error`/`warn`. `download`/`ignore` short-circuit, and projects with no runtime pin pay nothing. Memoized per runtime. - `pnpm --version`, `pnpm --help`, and `pnpm <cmd> --global` are exempt from the check. - Rename `@pnpm/engine.runtime.system-node-version` → `@pnpm/engine.runtime.system-version` to match its broader scope; hoist `RuntimeName` / `RUNTIME_NAMES` / `isRuntimeAlias` to `@pnpm/types` so callers don't need to depend on `pkg-manifest.utils` just for the alias check. ## Tests - `pnpm --filter pnpm run compile` - `pnpm --filter pnpm exec jest packageManagerCheck.test` — 42 passing. New coverage: node/deno/bun version mismatch, invalid range, missing range, multi-entry runtime arrays, `engines.runtime` path (not just `devEngines.runtime`), and the `pnpm --version` exemption. - `pnpm --filter @pnpm/engine.runtime.system-version test` — 10 passing, 100% statement coverage; unit tests for each helper and the dispatcher. - Manual end-to-end smoke tests against the rebuilt bundle for deno and bun version mismatch. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes * **New Features** * Added runtime version validation for Node.js, Deno, and Bun. The system now enforces `devEngines.runtime` and `engines.runtime` declarations with configurable failure behavior (`error`, `warn`, or `ignore`). * Enhanced error messages for runtime version mismatches with helpful suggestions for overrides. * **Improvements** * Improved system runtime detection and version checking across multiple runtime environments. --------- Co-authored-by: Puneet Dixit <236133619+puneetdixit200@users.noreply.github.com> Co-authored-by: Zoltan Kochan <z@kochan.io>
101 lines
3.3 KiB
JSON
101 lines
3.3 KiB
JSON
{
|
|
"name": "@pnpm/exec.commands",
|
|
"version": "1100.1.12",
|
|
"description": "Commands for running scripts",
|
|
"keywords": [
|
|
"pnpm",
|
|
"pnpm11",
|
|
"scripts"
|
|
],
|
|
"license": "MIT",
|
|
"funding": "https://opencollective.com/pnpm",
|
|
"repository": "https://github.com/pnpm/pnpm/tree/main/exec/commands",
|
|
"homepage": "https://github.com/pnpm/pnpm/tree/main/exec/commands#readme",
|
|
"bugs": {
|
|
"url": "https://github.com/pnpm/pnpm/issues"
|
|
},
|
|
"type": "module",
|
|
"main": "lib/index.js",
|
|
"types": "lib/index.d.ts",
|
|
"exports": {
|
|
".": "./lib/index.js"
|
|
},
|
|
"files": [
|
|
"lib",
|
|
"!*.map"
|
|
],
|
|
"scripts": {
|
|
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
"test": "pn compile && pn --filter=pnpm compile && pn .test",
|
|
"prepublishOnly": "tsgo --build",
|
|
"start": "tsgo --watch",
|
|
"compile": "tsgo --build && pn lint --fix",
|
|
".test": "cross-env NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules --disable-warning=ExperimentalWarning --disable-warning=DEP0169\" jest"
|
|
},
|
|
"dependencies": {
|
|
"@pnpm/bins.resolver": "workspace:*",
|
|
"@pnpm/building.commands": "workspace:*",
|
|
"@pnpm/catalogs.resolver": "workspace:*",
|
|
"@pnpm/cli.command": "workspace:*",
|
|
"@pnpm/cli.common-cli-options-help": "workspace:*",
|
|
"@pnpm/cli.utils": "workspace:*",
|
|
"@pnpm/config.reader": "workspace:*",
|
|
"@pnpm/config.version-policy": "workspace:*",
|
|
"@pnpm/core-loggers": "workspace:*",
|
|
"@pnpm/crypto.hash": "workspace:*",
|
|
"@pnpm/deps.status": "workspace:*",
|
|
"@pnpm/engine.runtime.commands": "workspace:*",
|
|
"@pnpm/error": "workspace:*",
|
|
"@pnpm/exec.lifecycle": "workspace:*",
|
|
"@pnpm/exec.pnpm-cli-runner": "workspace:*",
|
|
"@pnpm/installing.client": "workspace:*",
|
|
"@pnpm/installing.commands": "workspace:*",
|
|
"@pnpm/log.group": "catalog:",
|
|
"@pnpm/pkg-manifest.reader": "workspace:*",
|
|
"@pnpm/resolving.parse-wanted-dependency": "workspace:*",
|
|
"@pnpm/shell.path": "workspace:*",
|
|
"@pnpm/store.path": "workspace:*",
|
|
"@pnpm/types": "workspace:*",
|
|
"@pnpm/util.lex-comparator": "catalog:",
|
|
"@pnpm/workspace.injected-deps-syncer": "workspace:*",
|
|
"@pnpm/workspace.project-manifest-reader": "workspace:*",
|
|
"@pnpm/workspace.projects-sorter": "workspace:*",
|
|
"@zkochan/rimraf": "catalog:",
|
|
"didyoumean2": "catalog:",
|
|
"enquirer": "catalog:",
|
|
"execa": "catalog:",
|
|
"p-limit": "catalog:",
|
|
"ramda": "catalog:",
|
|
"realpath-missing": "catalog:",
|
|
"render-help": "catalog:",
|
|
"symlink-dir": "catalog:",
|
|
"which": "catalog:",
|
|
"write-json-file": "catalog:"
|
|
},
|
|
"peerDependencies": {
|
|
"@pnpm/logger": "catalog:"
|
|
},
|
|
"devDependencies": {
|
|
"@jest/globals": "catalog:",
|
|
"@pnpm/engine.runtime.system-version": "workspace:*",
|
|
"@pnpm/exec.commands": "workspace:*",
|
|
"@pnpm/logger": "workspace:*",
|
|
"@pnpm/prepare": "workspace:*",
|
|
"@pnpm/registry-mock": "catalog:",
|
|
"@pnpm/test-ipc-server": "workspace:*",
|
|
"@pnpm/testing.command-defaults": "workspace:*",
|
|
"@pnpm/workspace.projects-filter": "workspace:*",
|
|
"@types/is-windows": "catalog:",
|
|
"@types/ramda": "catalog:",
|
|
"@types/which": "catalog:",
|
|
"is-windows": "catalog:",
|
|
"write-yaml-file": "catalog:"
|
|
},
|
|
"engines": {
|
|
"node": ">=22.13"
|
|
},
|
|
"jest": {
|
|
"preset": "@pnpm/jest-config/with-registry"
|
|
}
|
|
}
|