From c6ec2c810e01f44224c382be8303ea4296d659ec Mon Sep 17 00:00:00 2001 From: Daniel Veronez Date: Wed, 20 May 2026 13:38:42 -0400 Subject: [PATCH] chore: require Node 22+ and bump @types/node to 24 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - engines.node >=20 → >=22 (upstream pnpm 11.x dropped Node 20; uses node:sqlite available in Node 22.13+ only) - @types/node ^20 → ^24 (LTS line; do not chase 25 current) - CI workflows: node-version matrix simplified to ["22"] Pre-1.0 breaking change. Bundled into the commander 14 PR so the whole breaking surface ships as one release. Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/ci.yml | 2 +- CHANGELOG.md | 1 + package.json | 4 +-- pnpm-lock.yaml | 60 ++++++++++++++++++++-------------------- 4 files changed, 34 insertions(+), 33 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 279594c..260e39d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: ["20", "lts/*"] + node-version: ["22"] steps: - uses: actions/checkout@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index a8791f3..f7c4549 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- **BREAKING**: minimum Node version raised from 20 to 22 (`engines.node >=22.0.0`). Driven by upstream pnpm 11.x dropping Node 20 support (uses `node:sqlite`, available in Node 22.13+ only). `@types/node` bumped to `^24` (LTS line). - Upgraded CLI framework `commander` 12→14. No user-facing behaviour change expected; `--help`, `--version`, and subcommand signatures (`analyze `, `compare `) are unchanged. If `--help` output formatting shifts (whitespace), it is upstream cosmetic. - **BREAKING**: short version flag changed from `-v` to `-V` for consistency with sibling CLIs (`fhir-resource-diff`, `fhir-test-data`) and the commander default convention. `--version` (long form) is unchanged. Pre-1.0 release; scripts using `-v` should switch to `-V` or `--version`. - Dev: bumped typescript 5.9→6 and vitest 2→3 (`@vitest/coverage-v8` 2→3); added `ignoreDeprecations: "6.0"` and `types: ["node"]` to `tsconfig.json` for tsup DTS compatibility. vitest 4 deferred pending vitepress 2 stable (vite 5 → 6 peer constraint). No user-facing behaviour change. diff --git a/package.json b/package.json index edace3d..2cd1fa8 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "picocolors": "^1.1.1" }, "devDependencies": { - "@types/node": "^20.19.41", + "@types/node": "^24.12.4", "@typescript-eslint/eslint-plugin": "^8.59.4", "@typescript-eslint/parser": "^8.59.4", "@vitest/coverage-v8": "^3.2.4", @@ -91,7 +91,7 @@ "vitest": "^3.2.4" }, "engines": { - "node": ">=20.0.0", + "node": ">=22.0.0", "pnpm": ">=9.0.0" }, "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 91d05a5..dab9f2c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,8 +16,8 @@ importers: version: 1.1.1 devDependencies: '@types/node': - specifier: ^20.19.41 - version: 20.19.41 + specifier: ^24.12.4 + version: 24.12.4 '@typescript-eslint/eslint-plugin': specifier: ^8.59.4 version: 8.59.4(@typescript-eslint/parser@8.59.4(eslint@10.4.0)(typescript@6.0.3))(eslint@10.4.0)(typescript@6.0.3) @@ -26,7 +26,7 @@ importers: version: 8.59.4(eslint@10.4.0)(typescript@6.0.3) '@vitest/coverage-v8': specifier: ^3.2.4 - version: 3.2.4(vitest@3.2.4(@types/node@20.19.41)) + version: 3.2.4(vitest@3.2.4(@types/node@24.12.4)) eslint: specifier: ^10.4.0 version: 10.4.0 @@ -53,10 +53,10 @@ importers: version: 8.59.4(eslint@10.4.0)(typescript@6.0.3) vitepress: specifier: ^1.6.4 - version: 1.6.4(@algolia/client-search@5.52.1)(@types/node@20.19.41)(postcss@8.5.15)(search-insights@2.17.3)(typescript@6.0.3) + version: 1.6.4(@algolia/client-search@5.52.1)(@types/node@24.12.4)(postcss@8.5.15)(search-insights@2.17.3)(typescript@6.0.3) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@20.19.41) + version: 3.2.4(@types/node@24.12.4) packages: @@ -910,8 +910,8 @@ packages: '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - '@types/node@20.19.41': - resolution: {integrity: sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==} + '@types/node@24.12.4': + resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} @@ -1954,8 +1954,8 @@ packages: ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} unist-util-is@6.0.1: resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} @@ -2704,9 +2704,9 @@ snapshots: '@types/mdurl@2.0.0': {} - '@types/node@20.19.41': + '@types/node@24.12.4': dependencies: - undici-types: 6.21.0 + undici-types: 7.16.0 '@types/unist@3.0.3': {} @@ -2805,12 +2805,12 @@ snapshots: '@ungap/structured-clone@1.3.1': {} - '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@20.19.41))(vue@3.5.34(typescript@6.0.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@24.12.4))(vue@3.5.34(typescript@6.0.3))': dependencies: - vite: 5.4.21(@types/node@20.19.41) + vite: 5.4.21(@types/node@24.12.4) vue: 3.5.34(typescript@6.0.3) - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@20.19.41))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@24.12.4))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -2825,7 +2825,7 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/node@20.19.41) + vitest: 3.2.4(@types/node@24.12.4) transitivePeerDependencies: - supports-color @@ -2837,13 +2837,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@5.4.21(@types/node@20.19.41))': + '@vitest/mocker@3.2.4(vite@5.4.21(@types/node@24.12.4))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 5.4.21(@types/node@20.19.41) + vite: 5.4.21(@types/node@24.12.4) '@vitest/pretty-format@3.2.4': dependencies: @@ -3863,7 +3863,7 @@ snapshots: ufo@1.6.4: {} - undici-types@6.21.0: {} + undici-types@7.16.0: {} unist-util-is@6.0.1: dependencies: @@ -3902,13 +3902,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@3.2.4(@types/node@20.19.41): + vite-node@3.2.4(@types/node@24.12.4): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 5.4.21(@types/node@20.19.41) + vite: 5.4.21(@types/node@24.12.4) transitivePeerDependencies: - '@types/node' - less @@ -3920,16 +3920,16 @@ snapshots: - supports-color - terser - vite@5.4.21(@types/node@20.19.41): + vite@5.4.21(@types/node@24.12.4): dependencies: esbuild: 0.21.5 postcss: 8.5.15 rollup: 4.60.4 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 24.12.4 fsevents: 2.3.3 - vitepress@1.6.4(@algolia/client-search@5.52.1)(@types/node@20.19.41)(postcss@8.5.15)(search-insights@2.17.3)(typescript@6.0.3): + vitepress@1.6.4(@algolia/client-search@5.52.1)(@types/node@24.12.4)(postcss@8.5.15)(search-insights@2.17.3)(typescript@6.0.3): dependencies: '@docsearch/css': 3.8.2 '@docsearch/js': 3.8.2(@algolia/client-search@5.52.1)(search-insights@2.17.3) @@ -3938,7 +3938,7 @@ snapshots: '@shikijs/transformers': 2.5.0 '@shikijs/types': 2.5.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@20.19.41))(vue@3.5.34(typescript@6.0.3)) + '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@24.12.4))(vue@3.5.34(typescript@6.0.3)) '@vue/devtools-api': 7.7.9 '@vue/shared': 3.5.34 '@vueuse/core': 12.8.2(typescript@6.0.3) @@ -3947,7 +3947,7 @@ snapshots: mark.js: 8.11.1 minisearch: 7.2.0 shiki: 2.5.0 - vite: 5.4.21(@types/node@20.19.41) + vite: 5.4.21(@types/node@24.12.4) vue: 3.5.34(typescript@6.0.3) optionalDependencies: postcss: 8.5.15 @@ -3978,11 +3978,11 @@ snapshots: - typescript - universal-cookie - vitest@3.2.4(@types/node@20.19.41): + vitest@3.2.4(@types/node@24.12.4): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@5.4.21(@types/node@20.19.41)) + '@vitest/mocker': 3.2.4(vite@5.4.21(@types/node@24.12.4)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -4000,11 +4000,11 @@ snapshots: tinyglobby: 0.2.16 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 5.4.21(@types/node@20.19.41) - vite-node: 3.2.4(@types/node@20.19.41) + vite: 5.4.21(@types/node@24.12.4) + vite-node: 3.2.4(@types/node@24.12.4) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.19.41 + '@types/node': 24.12.4 transitivePeerDependencies: - less - lightningcss