From 61db6d9aae1f414303bab62b85584812ce36b06f Mon Sep 17 00:00:00 2001 From: Benny Powers Date: Mon, 25 May 2026 11:21:06 +0300 Subject: [PATCH] feat!: drop support for Node.js 18 and 20 BREAKING CHANGE: The minimum supported Node.js version is now 22.0.0. Node.js 18 reached end-of-life in April 2025 and Node.js 20 in April 2026. - Bump engines to >=22.0.0 across all packages - CI matrix now tests on Node 22 and 24 - Pin CI to Node 24 instead of latest due to Playwright/yauzl bug with Node 26 (microsoft/playwright#40724) - Disable native type stripping in CI for ts-node compatibility - Bump GitHub Actions to latest versions (checkout v6, setup-node v6, upload-artifact v7) Assisted-By: Claude Opus 4.6 (1M context) --- .changeset/drop-eol-node.md | 42 +++++++++++++++++++ .github/workflows/canary.yml | 4 +- .github/workflows/lint.yml | 8 ++-- .github/workflows/release.yml | 4 +- .github/workflows/verify-browser.yml | 8 ++-- .github/workflows/verify-node.yml | 22 ++++++---- .../workflows/verify-storybook-builder.yml | 6 +-- packages/browser-logs/package.json | 2 +- packages/config-loader/package.json | 2 +- packages/dev-server-core/package.json | 2 +- packages/dev-server-esbuild/package.json | 2 +- packages/dev-server-hmr/package.json | 2 +- packages/dev-server-import-maps/package.json | 2 +- packages/dev-server-legacy/package.json | 2 +- packages/dev-server-polyfill/package.json | 2 +- packages/dev-server-rollup/package.json | 2 +- packages/dev-server/package.json | 2 +- packages/parse5-utils/package.json | 2 +- packages/polyfills-loader/package.json | 2 +- packages/rollup-plugin-copy/package.json | 2 +- packages/rollup-plugin-html/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- packages/storybook-builder/package.json | 2 +- .../package.json | 2 +- packages/storybook-utils/package.json | 2 +- .../test-runner-browserstack/package.json | 2 +- packages/test-runner-chrome/package.json | 2 +- packages/test-runner-cli/package.json | 2 +- packages/test-runner-commands/package.json | 2 +- packages/test-runner-core/package.json | 2 +- packages/test-runner-coverage-v8/package.json | 2 +- .../test-runner-junit-reporter/package.json | 2 +- packages/test-runner-mocha/package.json | 2 +- .../test-runner-module-mocking/package.json | 2 +- packages/test-runner-playwright/package.json | 2 +- packages/test-runner-puppeteer/package.json | 2 +- packages/test-runner-saucelabs/package.json | 2 +- packages/test-runner-selenium/package.json | 2 +- .../package.json | 2 +- packages/test-runner-webdriver/package.json | 2 +- packages/test-runner/package.json | 2 +- 42 files changed, 105 insertions(+), 59 deletions(-) create mode 100644 .changeset/drop-eol-node.md diff --git a/.changeset/drop-eol-node.md b/.changeset/drop-eol-node.md new file mode 100644 index 0000000000..66ef1530df --- /dev/null +++ b/.changeset/drop-eol-node.md @@ -0,0 +1,42 @@ +--- +'@web/browser-logs': major +'@web/config-loader': major +'@web/dev-server-core': major +'@web/dev-server-esbuild': major +'@web/dev-server-hmr': major +'@web/dev-server-import-maps': major +'@web/dev-server-legacy': major +'@web/dev-server': major +'@web/dev-server-polyfill': major +'@web/dev-server-rollup': major +'@web/mocks': major +'@web/parse5-utils': major +'@web/polyfills-loader': major +'@web/rollup-plugin-copy': major +'@web/rollup-plugin-html': major +'@web/rollup-plugin-import-meta-assets': major +'@web/rollup-plugin-polyfills-loader': major +'rollup-plugin-workbox': major +'@web/storybook-addon-mocks': major +'@web/storybook-builder': major +'@web/storybook-framework-web-components': major +'@web/storybook-utils': major +'@web/test-runner-browserstack': major +'@web/test-runner-chrome': major +'@web/test-runner-cli': major +'@web/test-runner-commands': major +'@web/test-runner-core': major +'@web/test-runner-coverage-v8': major +'@web/test-runner-junit-reporter': major +'@web/test-runner-mocha': major +'@web/test-runner-module-mocking': major +'@web/test-runner': major +'@web/test-runner-playwright': major +'@web/test-runner-puppeteer': major +'@web/test-runner-saucelabs': major +'@web/test-runner-selenium': major +'@web/test-runner-visual-regression': major +'@web/test-runner-webdriver': major +--- + +Drop support for Node.js 18 and 20, which have reached end-of-life. The minimum supported Node.js version is now 22.0.0. diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index bb56a5c04a..9323df3ad3 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -18,13 +18,13 @@ jobs: id-token: write steps: - name: Checkout Repo - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits fetch-depth: 0 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 env: FORCE_COLOR: 0 with: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 03ec43ac5f..c93274aed6 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -12,14 +12,14 @@ jobs: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - - name: Setup Node 20 - uses: actions/setup-node@v4 + - name: Setup Node 22 + uses: actions/setup-node@v6 env: FORCE_COLOR: 0 with: - node-version: 20 + node-version: 22 cache: npm - name: Install Dependencies diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 28e1c04923..38c9fc4795 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,13 +18,13 @@ jobs: pull-requests: write steps: - name: Checkout Repo - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits fetch-depth: 0 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 env: FORCE_COLOR: 0 with: diff --git a/.github/workflows/verify-browser.yml b/.github/workflows/verify-browser.yml index 73cf0e35a6..3fe9ceb7e8 100644 --- a/.github/workflows/verify-browser.yml +++ b/.github/workflows/verify-browser.yml @@ -12,19 +12,19 @@ jobs: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # TODO: remove when GitHub fixes this https://github.com/actions/runner-images/issues/10015 # (this workaround is practically the same what Playwright did in https://github.com/microsoft/playwright/pull/34238/files) - name: Workaround for Chrome sandbox issue in Ubuntu 24.04 run: sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 - - name: Setup Node 20 - uses: actions/setup-node@v4 + - name: Setup Node 22 + uses: actions/setup-node@v6 env: FORCE_COLOR: 0 with: - node-version: 20 + node-version: 22 cache: npm - name: Install Dependencies diff --git a/.github/workflows/verify-node.yml b/.github/workflows/verify-node.yml index 3275ccd8cd..8be272e5de 100644 --- a/.github/workflows/verify-node.yml +++ b/.github/workflows/verify-node.yml @@ -14,13 +14,13 @@ jobs: fail-fast: false matrix: node-version: - - '18' - - '20' - '22' + # TODO: add 'latest' once Playwright fixes yauzl for Node 26 + # https://github.com/microsoft/playwright/issues/40724 - '24' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # TODO: remove when GitHub fixes this https://github.com/actions/runner-images/issues/10015 # (this workaround is practically the same what Playwright did in https://github.com/microsoft/playwright/pull/34238/files) @@ -28,7 +28,7 @@ jobs: run: sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 - name: Setup Node ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 env: FORCE_COLOR: 0 with: @@ -57,7 +57,8 @@ jobs: - name: Test run: npm run test:node env: - NODE_OPTIONS: ${{ (matrix.node-version != '18' && matrix.node-version != '20') && '--no-experimental-strip-types' || '' }} + # Node 22.18+ native type stripping preempts ts-node. Remove when mocha is replaced with node:test. + NODE_OPTIONS: '--no-experimental-strip-types' verify-windows: timeout-minutes: 30 @@ -69,14 +70,14 @@ jobs: git config --global core.autocrlf false git config --global core.eol lf - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - - name: Setup Node '20' - uses: actions/setup-node@v4 + - name: Setup Node '22' + uses: actions/setup-node@v6 env: FORCE_COLOR: 0 with: - node-version: '20' + node-version: '22' cache: 'npm' # Set up GitHub Actions caching for Wireit. @@ -97,3 +98,6 @@ jobs: - name: Test run: npm run test:node + env: + # Node 22.18+ native type stripping preempts ts-node. Remove when mocha is replaced with node:test. + NODE_OPTIONS: '--no-experimental-strip-types' diff --git a/.github/workflows/verify-storybook-builder.yml b/.github/workflows/verify-storybook-builder.yml index fef72d71e0..00d03620a3 100644 --- a/.github/workflows/verify-storybook-builder.yml +++ b/.github/workflows/verify-storybook-builder.yml @@ -14,10 +14,10 @@ jobs: env: PUPPETEER_SKIP_DOWNLOAD: true # prevent failures due to puppeteer downloading issues, since it's not used here anyway steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup Node 22 - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 env: FORCE_COLOR: 0 with: @@ -39,7 +39,7 @@ jobs: - name: Run tests run: npm run test:storybook-builder - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v7 if: always() with: name: playwright-report-${{ matrix.runs-on }} diff --git a/packages/browser-logs/package.json b/packages/browser-logs/package.json index df72968a13..70752ca0a0 100644 --- a/packages/browser-logs/package.json +++ b/packages/browser-logs/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 5e87c01312..67125e67b2 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -16,7 +16,7 @@ "main": "src/index.js", "type": "commonjs", "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/dev-server-core/package.json b/packages/dev-server-core/package.json index 4676904049..633e1c8378 100644 --- a/packages/dev-server-core/package.json +++ b/packages/dev-server-core/package.json @@ -31,7 +31,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/dev-server-esbuild/package.json b/packages/dev-server-esbuild/package.json index cfc0a07751..c8df9f8474 100644 --- a/packages/dev-server-esbuild/package.json +++ b/packages/dev-server-esbuild/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/dev-server-hmr/package.json b/packages/dev-server-hmr/package.json index dc918c965b..a2445e6bc5 100644 --- a/packages/dev-server-hmr/package.json +++ b/packages/dev-server-hmr/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/dev-server-import-maps/package.json b/packages/dev-server-import-maps/package.json index 34b1a710d0..f76f368abd 100644 --- a/packages/dev-server-import-maps/package.json +++ b/packages/dev-server-import-maps/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/dev-server-legacy/package.json b/packages/dev-server-legacy/package.json index 2edb604c8e..40f78b2c9b 100644 --- a/packages/dev-server-legacy/package.json +++ b/packages/dev-server-legacy/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/dev-server-polyfill/package.json b/packages/dev-server-polyfill/package.json index 25f2d7ae3f..16209cf8db 100644 --- a/packages/dev-server-polyfill/package.json +++ b/packages/dev-server-polyfill/package.json @@ -21,7 +21,7 @@ } }, "engines": { - "node": ">=16.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc" diff --git a/packages/dev-server-rollup/package.json b/packages/dev-server-rollup/package.json index d8381ef2e9..21b4eb795a 100644 --- a/packages/dev-server-rollup/package.json +++ b/packages/dev-server-rollup/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "test:node": "mocha \"test/node/**/*.test.ts\" --require ts-node/register --exit --reporter dot", diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json index bd550c28c2..1659a94710 100644 --- a/packages/dev-server/package.json +++ b/packages/dev-server/package.json @@ -26,7 +26,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "start": "npm run start:syntax", diff --git a/packages/parse5-utils/package.json b/packages/parse5-utils/package.json index cfaf9a20a2..7456606506 100644 --- a/packages/parse5-utils/package.json +++ b/packages/parse5-utils/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/polyfills-loader/package.json b/packages/polyfills-loader/package.json index 040b21f072..7e5ce021ce 100644 --- a/packages/polyfills-loader/package.json +++ b/packages/polyfills-loader/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/rollup-plugin-copy/package.json b/packages/rollup-plugin-copy/package.json index 268b25a6c7..ee1b7935a9 100644 --- a/packages/rollup-plugin-copy/package.json +++ b/packages/rollup-plugin-copy/package.json @@ -26,7 +26,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "test:node": "mocha test/**/*.test.js --reporter dot", diff --git a/packages/rollup-plugin-html/package.json b/packages/rollup-plugin-html/package.json index 823043c0df..a3a5807e51 100644 --- a/packages/rollup-plugin-html/package.json +++ b/packages/rollup-plugin-html/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "demo:mpa": "rm -rf demo/dist && rollup -c demo/mpa/rollup.config.js --watch & npm run serve-demo", diff --git a/packages/rollup-plugin-import-meta-assets/package.json b/packages/rollup-plugin-import-meta-assets/package.json index f820626f74..8605c842bb 100644 --- a/packages/rollup-plugin-import-meta-assets/package.json +++ b/packages/rollup-plugin-import-meta-assets/package.json @@ -21,7 +21,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "test": "npm run test:node", diff --git a/packages/rollup-plugin-polyfills-loader/package.json b/packages/rollup-plugin-polyfills-loader/package.json index f652f87ca1..003a175d18 100644 --- a/packages/rollup-plugin-polyfills-loader/package.json +++ b/packages/rollup-plugin-polyfills-loader/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "test:node": "mocha test/**/*.test.ts --require ts-node/register --reporter dot", diff --git a/packages/storybook-builder/package.json b/packages/storybook-builder/package.json index f2ebb974c9..38769acde4 100644 --- a/packages/storybook-builder/package.json +++ b/packages/storybook-builder/package.json @@ -23,7 +23,7 @@ "./package.json": "./package.json" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc" diff --git a/packages/storybook-framework-web-components/package.json b/packages/storybook-framework-web-components/package.json index 9217c92ed6..028cf8957d 100644 --- a/packages/storybook-framework-web-components/package.json +++ b/packages/storybook-framework-web-components/package.json @@ -24,7 +24,7 @@ "./package.json": "./package.json" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/storybook-utils/package.json b/packages/storybook-utils/package.json index 34863ccda6..7eb79d7386 100644 --- a/packages/storybook-utils/package.json +++ b/packages/storybook-utils/package.json @@ -21,7 +21,7 @@ } }, "engines": { - "node": ">=16.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc" diff --git a/packages/test-runner-browserstack/package.json b/packages/test-runner-browserstack/package.json index 65bb6c0ac9..ff742f0ec1 100644 --- a/packages/test-runner-browserstack/package.json +++ b/packages/test-runner-browserstack/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-chrome/package.json b/packages/test-runner-chrome/package.json index 3b6e25502c..4dc77f206b 100644 --- a/packages/test-runner-chrome/package.json +++ b/packages/test-runner-chrome/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-cli/package.json b/packages/test-runner-cli/package.json index bf0c6df21c..be15eaf330 100644 --- a/packages/test-runner-cli/package.json +++ b/packages/test-runner-cli/package.json @@ -21,7 +21,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-commands/package.json b/packages/test-runner-commands/package.json index 2df75239d9..a0ea656d47 100644 --- a/packages/test-runner-commands/package.json +++ b/packages/test-runner-commands/package.json @@ -26,7 +26,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-core/package.json b/packages/test-runner-core/package.json index f9eeb3049a..f4f36f156d 100644 --- a/packages/test-runner-core/package.json +++ b/packages/test-runner-core/package.json @@ -29,7 +29,7 @@ "./browser/session.js": "./browser/session.js" }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-coverage-v8/package.json b/packages/test-runner-coverage-v8/package.json index f91b0a9964..dece959ae2 100644 --- a/packages/test-runner-coverage-v8/package.json +++ b/packages/test-runner-coverage-v8/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc" diff --git a/packages/test-runner-junit-reporter/package.json b/packages/test-runner-junit-reporter/package.json index 812b401b1f..266337955e 100644 --- a/packages/test-runner-junit-reporter/package.json +++ b/packages/test-runner-junit-reporter/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-mocha/package.json b/packages/test-runner-mocha/package.json index 791daaa0e6..85ed614e43 100644 --- a/packages/test-runner-mocha/package.json +++ b/packages/test-runner-mocha/package.json @@ -15,7 +15,7 @@ "homepage": "https://github.com/modernweb-dev/web/tree/master/packages/test-runner-mocha", "main": "dist/standalone.js", "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-module-mocking/package.json b/packages/test-runner-module-mocking/package.json index 87caeee16d..f44bbcc275 100644 --- a/packages/test-runner-module-mocking/package.json +++ b/packages/test-runner-module-mocking/package.json @@ -20,7 +20,7 @@ "./plugin.js": "./dist/moduleMockingPlugin.js" }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-playwright/package.json b/packages/test-runner-playwright/package.json index 52e5bdd6e0..d7429b9287 100644 --- a/packages/test-runner-playwright/package.json +++ b/packages/test-runner-playwright/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-puppeteer/package.json b/packages/test-runner-puppeteer/package.json index 53960626ec..088d0262b2 100644 --- a/packages/test-runner-puppeteer/package.json +++ b/packages/test-runner-puppeteer/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-saucelabs/package.json b/packages/test-runner-saucelabs/package.json index 20fd5836ed..c92b74b784 100644 --- a/packages/test-runner-saucelabs/package.json +++ b/packages/test-runner-saucelabs/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-selenium/package.json b/packages/test-runner-selenium/package.json index 9546c3ea42..8c4f346c31 100644 --- a/packages/test-runner-selenium/package.json +++ b/packages/test-runner-selenium/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-visual-regression/package.json b/packages/test-runner-visual-regression/package.json index 3e6f97f10b..3db4aae8db 100644 --- a/packages/test-runner-visual-regression/package.json +++ b/packages/test-runner-visual-regression/package.json @@ -26,7 +26,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner-webdriver/package.json b/packages/test-runner-webdriver/package.json index 7a9af67d12..e305139bc7 100644 --- a/packages/test-runner-webdriver/package.json +++ b/packages/test-runner-webdriver/package.json @@ -22,7 +22,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc", diff --git a/packages/test-runner/package.json b/packages/test-runner/package.json index 7879f924e0..b6288fd31d 100644 --- a/packages/test-runner/package.json +++ b/packages/test-runner/package.json @@ -31,7 +31,7 @@ } }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "scripts": { "build": "tsc",