From d40d5c9a90e469279ebf8424df3ed73f01feea44 Mon Sep 17 00:00:00 2001 From: Arno V Date: Tue, 21 Jul 2026 13:35:29 -0400 Subject: [PATCH] feat!: declare real engines.node across all packages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every package carried a non-standard top-level "node" field (">=16", ">=18" or ">=20"). npm and pnpm read engines.node, not that field, so none of these floors were ever enforced — a consumer on Node 18 could install @node-cli/logger with engine-strict enabled and get no warning, despite ora@9 requiring Node 20 at runtime. All 14 packages now declare a real engines.node of ">=22", replacing the inert field in place. The floor is uniform rather than per-package: Node 20 reached EOL on 2026-04-30, CI only ever tests 24.x, and @node-cli/run already required 22 via execa 10 — so a single rule is both honest and immune to drift as dependencies raise their own floors. The root manifest declares the same floor so contributor installs are gated too. Verified by packing @node-cli/logger and installing it with engine-strict=true: the old "node" field at ">=99" installs silently, while engines.node at ">=99" correctly fails with EBADENGINE, and the real ">=22" installs cleanly on Node 24. Full build, lint and test suites pass. BREAKING CHANGE: all @node-cli/* packages now require Node.js 22 or later. --- package.json | 5 ++++- packages/bundlecheck/package.json | 4 +++- packages/bundlesize/package.json | 4 +++- packages/comments/package.json | 4 +++- packages/envtools/package.json | 4 +++- packages/logger/package.json | 4 +++- packages/npmrc/package.json | 4 +++- packages/parser/package.json | 4 +++- packages/perf/package.json | 4 +++- packages/search/package.json | 4 +++- packages/secret/package.json | 4 +++- packages/static-server/package.json | 4 +++- packages/timer/package.json | 4 +++- packages/utilities/package.json | 4 +++- 14 files changed, 43 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index e4ee6f54..85fc06d2 100644 --- a/package.json +++ b/package.json @@ -22,5 +22,8 @@ "@versini/dev-dependencies-server": "9.0.11", "@versini/dev-dependencies-types": "4.1.15" }, - "packageManager": "pnpm@11.15.1" + "packageManager": "pnpm@11.15.1", + "engines": { + "node": ">=22" + } } diff --git a/packages/bundlecheck/package.json b/packages/bundlecheck/package.json index dc665a52..1f7136ae 100644 --- a/packages/bundlecheck/package.json +++ b/packages/bundlecheck/package.json @@ -23,7 +23,9 @@ "dist", "README.md" ], - "node": ">=20", + "engines": { + "node": ">=22" + }, "scripts": { "build": "npm-run-all --serial clean build:types build:js", "build:js": "swc --strip-leading-paths --source-maps --out-dir dist src", diff --git a/packages/bundlesize/package.json b/packages/bundlesize/package.json index 6f88f64d..3402acee 100644 --- a/packages/bundlesize/package.json +++ b/packages/bundlesize/package.json @@ -22,7 +22,9 @@ "dist", "README.md" ], - "node": ">=18", + "engines": { + "node": ">=22" + }, "scripts": { "build": "npm-run-all --serial clean build:types build:js build:barrel", "build:barrel": "barrelsby --delete --directory dist --pattern \"**/*.d.ts\" --name \"index.d\"", diff --git a/packages/comments/package.json b/packages/comments/package.json index 46a31740..710d4603 100644 --- a/packages/comments/package.json +++ b/packages/comments/package.json @@ -17,7 +17,9 @@ "dist", "README.md" ], - "node": ">=18", + "engines": { + "node": ">=22" + }, "scripts": { "build": "npm-run-all --serial clean build:types build:js build:barrel", "build:barrel": "barrelsby --delete --directory dist --pattern \"**/*.d.ts\" --name \"index.d\"", diff --git a/packages/envtools/package.json b/packages/envtools/package.json index d0ebf30c..599c1300 100644 --- a/packages/envtools/package.json +++ b/packages/envtools/package.json @@ -14,7 +14,9 @@ "README.md", "shell" ], - "node": ">=18", + "engines": { + "node": ">=22" + }, "scripts": { "build": "mkdir -p dist; echo \"export EVTLS_VERSION='$npm_package_version' \" > dist/version.sh", "lint:fix": "biome check src --write --no-errors-on-unmatched" diff --git a/packages/logger/package.json b/packages/logger/package.json index bf31ccc0..16f640be 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -15,7 +15,9 @@ "dist", "README.md" ], - "node": ">=16", + "engines": { + "node": ">=22" + }, "dependencies": { "boxen": "8.0.1", "kleur": "4.1.5", diff --git a/packages/npmrc/package.json b/packages/npmrc/package.json index 8ddd9674..cfddc696 100644 --- a/packages/npmrc/package.json +++ b/packages/npmrc/package.json @@ -17,7 +17,9 @@ "dist", "README.md" ], - "node": ">=18", + "engines": { + "node": ">=22" + }, "scripts": { "build": "npm-run-all --serial clean build:types build:js build:barrel", "build:barrel": "barrelsby --delete --directory dist --pattern \"**/*.d.ts\" --name \"index.d\"", diff --git a/packages/parser/package.json b/packages/parser/package.json index d1b84fc9..2fc9a61e 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -16,7 +16,9 @@ "dist", "README.md" ], - "node": ">=16", + "engines": { + "node": ">=22" + }, "dependencies": { "@node-cli/logger": "workspace:*", "@node-cli/utilities": "workspace:*", diff --git a/packages/perf/package.json b/packages/perf/package.json index a5cebb86..2e2a3ef2 100644 --- a/packages/perf/package.json +++ b/packages/perf/package.json @@ -16,7 +16,9 @@ "dist", "README.md" ], - "node": ">=16", + "engines": { + "node": ">=22" + }, "dependencies": { "@node-cli/logger": "workspace:*", "@node-cli/utilities": "workspace:*" diff --git a/packages/search/package.json b/packages/search/package.json index 0a52ab93..c79854b7 100644 --- a/packages/search/package.json +++ b/packages/search/package.json @@ -17,7 +17,9 @@ "dist", "README.md" ], - "node": ">=16", + "engines": { + "node": ">=22" + }, "scripts": { "build": "npm-run-all --serial clean build:types build:js build:barrel", "build:barrel": "barrelsby --delete --directory dist --pattern \"**/*.d.ts\" --name \"index.d\"", diff --git a/packages/secret/package.json b/packages/secret/package.json index 146c8a73..5f12d7de 100644 --- a/packages/secret/package.json +++ b/packages/secret/package.json @@ -17,7 +17,9 @@ "dist", "README.md" ], - "node": ">=18", + "engines": { + "node": ">=22" + }, "scripts": { "build": "npm-run-all --serial clean build:types build:js build:barrel", "build:barrel": "barrelsby --delete --directory dist --pattern \"**/*.d.ts\" --name \"index.d\"", diff --git a/packages/static-server/package.json b/packages/static-server/package.json index 338b62d0..43ba674a 100644 --- a/packages/static-server/package.json +++ b/packages/static-server/package.json @@ -17,7 +17,9 @@ "dist", "README.md" ], - "node": ">=18", + "engines": { + "node": ">=22" + }, "scripts": { "build": "npm-run-all clean build:types build:js build:barrel", "build:barrel": "barrelsby --delete --directory dist --pattern \"**/*.d.ts\" --name \"index.d\"", diff --git a/packages/timer/package.json b/packages/timer/package.json index f8a5159a..248224c6 100644 --- a/packages/timer/package.json +++ b/packages/timer/package.json @@ -17,7 +17,9 @@ "dist", "README.md" ], - "node": ">=16", + "engines": { + "node": ">=22" + }, "scripts": { "build": "npm-run-all --serial clean build:types build:js build:barrel", "build:barrel": "barrelsby --delete --directory dist --pattern \"**/*.d.ts\" --name \"index.d\"", diff --git a/packages/utilities/package.json b/packages/utilities/package.json index 4ceb70ae..073e656b 100644 --- a/packages/utilities/package.json +++ b/packages/utilities/package.json @@ -16,7 +16,9 @@ "dist", "README.md" ], - "node": ">=16", + "engines": { + "node": ">=22" + }, "dependencies": { "lodash-es": "4.18.1" },