diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0e1453d3..e4eb2f87 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,7 +49,7 @@ jobs: needs: list-examples strategy: matrix: - node-version: ["22", "24"] + node-version: ["22", "24", "26"] example: ${{ fromJson(needs.list-examples.outputs.examples) }} fail-fast: false steps: diff --git a/.nvmrc b/.nvmrc index 60ade1ae..60bb1e60 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -24.19.0 +26.8.1 diff --git a/package.json b/package.json index 6127133b..0969bace 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-typescript": "^11.1.5", "@types/jest": "^29.5.0", - "@types/node": "^24.10.1", + "@types/node": "^26.3.0", "@typescript-eslint/eslint-plugin": "^8.57.0", "@typescript-eslint/parser": "^8.57.0", "esbuild": "^0.17.16", diff --git a/packages/core/package.json b/packages/core/package.json index 007ce8dc..5a4df1d2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -17,7 +17,7 @@ "gypfile": true, "scripts": { "build": "rollup -c", - "build-native-addon": "prebuildify --name node --strip --no-napi --target 22.0.0 --target 24.0.0", + "build-native-addon": "prebuildify --name node --strip --no-napi --target 22.0.0 --target 24.0.0 --target 26.0.0", "build-tracer-client": "openapi --client axios --input ./tracer.spec.json --name MongoTracer --output ./src/generated/openapi", "test": "jest --passWithNoTests --silent", "test/integ": "jest --passWithNoTests --silent -c jest.config.integ.js", diff --git a/packages/core/src/nodeVersion.ts b/packages/core/src/nodeVersion.ts index 6e78dc0c..56ab592c 100644 --- a/packages/core/src/nodeVersion.ts +++ b/packages/core/src/nodeVersion.ts @@ -4,7 +4,7 @@ * exact ABI version, so on any other major the addon only loads when it has * been compiled from source locally. */ -export const SUPPORTED_NODE_MAJORS = [22, 24]; +export const SUPPORTED_NODE_MAJORS = [22, 24, 26]; export function getUnsupportedNodeVersionWarning( version: string, diff --git a/packages/core/src/optimization.ts b/packages/core/src/optimization.ts index f39d36fc..31c6613e 100644 --- a/packages/core/src/optimization.ts +++ b/packages/core/src/optimization.ts @@ -1,6 +1,15 @@ +// V8 requires a function to be explicitly marked for manual optimization before +// %OptimizeFunctionOnNextCall is requested on it. Older versions ignored a missing +// marker; since V8 14.6 the mismatch is a fatal CHECK failure that aborts the +// process whenever natives syntax is allowed without --no-opt. +// +// Both natives calls must stay inline: a helper taking `fn` only through an eval +// string looks like it ignores its parameter, and bundlers drop the argument. + export const optimizeFunction = async (fn: CallableFunction) => { // Source: https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#optimization-killers // a total of 7 calls seems to be the sweet spot + eval("%PrepareFunctionForOptimization(fn)"); await fn(); await fn(); await fn(); @@ -14,6 +23,7 @@ export const optimizeFunction = async (fn: CallableFunction) => { export const optimizeFunctionSync = (fn: CallableFunction) => { // Source: https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#optimization-killers // a total of 7 calls seems to be the sweet spot + eval("%PrepareFunctionForOptimization(fn)"); fn(); fn(); fn(); diff --git a/packages/core/tests/nodeVersion.integ.test.ts b/packages/core/tests/nodeVersion.integ.test.ts index ced9c352..56be79c1 100644 --- a/packages/core/tests/nodeVersion.integ.test.ts +++ b/packages/core/tests/nodeVersion.integ.test.ts @@ -7,15 +7,18 @@ const { getUnsupportedNodeVersionWarning, warnCi } = require("..") as { }; describe("getUnsupportedNodeVersionWarning", () => { - it.each(["22.22.2", "24.19.0"])("should not warn on Node %s", (version) => { - expect(getUnsupportedNodeVersionWarning(version)).toBeNull(); - }); + it.each(["22.22.2", "24.19.0", "26.8.1"])( + "should not warn on Node %s", + (version) => { + expect(getUnsupportedNodeVersionWarning(version)).toBeNull(); + }, + ); - it.each(["20.5.1", "23.11.0", "26.0.0"])( + it.each(["20.5.1", "23.11.0", "27.0.0"])( "should warn on Node %s", (version) => { expect(getUnsupportedNodeVersionWarning(version)).toBe( - `[CodSpeed] Node.js v${version} is not supported: CodSpeed is tested on Node.js 22, 24. Support for other versions is experimental and measurements may be unstable.`, + `[CodSpeed] Node.js v${version} is not supported: CodSpeed is tested on Node.js 22, 24, 26. Support for other versions is experimental and measurements may be unstable.`, ); }, ); diff --git a/packages/core/tests/optimization.integ.test.ts b/packages/core/tests/optimization.integ.test.ts new file mode 100644 index 00000000..166b0286 --- /dev/null +++ b/packages/core/tests/optimization.integ.test.ts @@ -0,0 +1,32 @@ +import { execFileSync } from "child_process"; +import path from "path"; + +// The optimization helpers reach V8 natives syntax, so their behaviour only shows +// up in a process started with --allow-natives-syntax. A function optimized +// without being marked for manual optimization first aborts the process on +// V8 >= 14.6, which no in-process assertion can observe. +const runWithNatives = (snippet: string): string => + execFileSync(process.execPath, ["--allow-natives-syntax", "-e", snippet], { + encoding: "utf8", + }); + +const corePath = JSON.stringify(path.join(__dirname, "..")); + +describe("optimization helpers", () => { + it("should optimize a sync function", () => { + const stdout = runWithNatives( + `require(${corePath}).optimizeFunctionSync(() => 1); + console.log("done");`, + ); + expect(stdout).toContain("done"); + }); + + it("should optimize an async function", () => { + const stdout = runWithNatives( + `require(${corePath}) + .optimizeFunction(async () => 1) + .then(() => console.log("done"));`, + ); + expect(stdout).toContain("done"); + }); +}); diff --git a/packages/vitest-plugin/src/__tests__/index.test.ts b/packages/vitest-plugin/src/__tests__/index.test.ts index 63ce93cc..3aae6e2b 100644 --- a/packages/vitest-plugin/src/__tests__/index.test.ts +++ b/packages/vitest-plugin/src/__tests__/index.test.ts @@ -1,5 +1,5 @@ -import { fromPartial } from "@total-typescript/shoehorn"; import { getV8Flags } from "@codspeed/core"; +import { fromPartial } from "@total-typescript/shoehorn"; import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; import codspeedPlugin from "../index"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8cb84ecc..2b1817a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,8 +33,8 @@ importers: specifier: ^29.5.0 version: 29.5.0 '@types/node': - specifier: ^24.10.1 - version: 24.13.3 + specifier: ^26.3.0 + version: 26.4.0 '@typescript-eslint/eslint-plugin': specifier: ^8.57.0 version: 8.60.0(@typescript-eslint/parser@8.60.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) @@ -61,10 +61,10 @@ importers: version: 7.0.4 jest: specifier: ^29.5.0 - version: 29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + version: 29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) jest-config: specifier: ^29.5.0 - version: 29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + version: 29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) lerna: specifier: ^8.2.4 version: 8.2.4(encoding@0.1.13) @@ -85,7 +85,7 @@ importers: version: 6.1.0(esbuild@0.17.16)(rollup@4.48.1) ts-jest: specifier: ^29.1.0 - version: 29.1.0(@babel/core@7.21.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.21.4))(esbuild@0.17.16)(jest@29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.1.0(@babel/core@7.21.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.21.4))(esbuild@0.17.16)(jest@29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)))(typescript@5.8.3) tslib: specifier: ^2.5.0 version: 2.5.0 @@ -193,7 +193,7 @@ importers: version: 5.1.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + version: 4.0.18(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) examples/with-typescript-simple-cjs: devDependencies: @@ -253,7 +253,7 @@ importers: version: 5.8.3 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + version: 3.2.4(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) packages/benchmark.js-plugin: dependencies: @@ -278,7 +278,7 @@ importers: version: 2.1.4 jest-mock-extended: specifier: ^3.0.4 - version: 3.0.4(jest@29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)))(typescript@5.8.3) + version: 3.0.4(jest@29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)))(typescript@5.8.3) packages/core: dependencies: @@ -331,7 +331,7 @@ importers: version: 1.60.0 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + version: 3.2.4(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) packages/tinybench-plugin: dependencies: @@ -347,7 +347,7 @@ importers: version: 4.23.12 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + version: 3.2.4(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) packages/vitest-plugin: dependencies: @@ -366,10 +366,10 @@ importers: version: 2.9.0 vite: specifier: ^7.0.0 - version: 7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + version: 7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + version: 4.0.18(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) packages: @@ -2419,8 +2419,8 @@ packages: '@types/minimist@1.2.2': resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} - '@types/node@24.13.3': - resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==} + '@types/node@26.4.0': + resolution: {integrity: sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ==} '@types/normalize-package-data@2.4.1': resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -6364,8 +6364,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.18.2: - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} @@ -7776,15 +7776,15 @@ snapshots: '@commitlint/execute-rule': 17.4.0 '@commitlint/resolve-extends': 17.4.4 '@commitlint/types': 17.4.4 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 cosmiconfig: 8.1.3 - cosmiconfig-typescript-loader: 4.3.0(@types/node@24.13.3)(cosmiconfig@8.1.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3))(typescript@5.8.3) + cosmiconfig-typescript-loader: 4.3.0(@types/node@26.4.0)(cosmiconfig@8.1.3)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3))(typescript@5.8.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1(@types/node@24.13.3)(typescript@5.8.3) + ts-node: 10.9.1(@types/node@26.4.0)(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - '@swc/core' @@ -8144,7 +8144,7 @@ snapshots: '@jest/console@29.5.0': dependencies: '@jest/types': 29.5.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -8153,27 +8153,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.5.0(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3))': + '@jest/core@29.5.0(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3))': dependencies: '@jest/console': 29.5.0 '@jest/reporters': 29.5.0 '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + jest-config: 29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -8193,21 +8193,21 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3))': + '@jest/core@29.7.0(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8232,14 +8232,14 @@ snapshots: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 jest-mock: 29.5.0 '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 jest-mock: 29.7.0 '@jest/expect-utils@29.5.0': @@ -8268,7 +8268,7 @@ snapshots: dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 24.13.3 + '@types/node': 26.4.0 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -8277,7 +8277,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8308,7 +8308,7 @@ snapshots: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -8337,7 +8337,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.29 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -8451,7 +8451,7 @@ snapshots: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 24.13.3 + '@types/node': 26.4.0 '@types/yargs': 17.0.24 chalk: 4.1.2 @@ -8460,7 +8460,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.13.3 + '@types/node': 26.4.0 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -9150,11 +9150,11 @@ snapshots: '@types/graceful-fs@4.1.6': dependencies: - '@types/node': 24.13.3 + '@types/node': 26.4.0 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 24.13.3 + '@types/node': 26.4.0 '@types/istanbul-lib-coverage@2.0.4': {} @@ -9191,9 +9191,9 @@ snapshots: '@types/minimist@1.2.2': {} - '@types/node@24.13.3': + '@types/node@26.4.0': dependencies: - undici-types: 7.18.2 + undici-types: 8.3.0 '@types/normalize-package-data@2.4.1': {} @@ -9399,21 +9399,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(vite@7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0))': + '@vitest/mocker@3.2.4(vite@7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + vite: 7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) - '@vitest/mocker@4.0.18(vite@7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0))': + '@vitest/mocker@4.0.18(vite@7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + vite: 7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -10157,11 +10157,11 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@4.3.0(@types/node@24.13.3)(cosmiconfig@8.1.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3))(typescript@5.8.3): + cosmiconfig-typescript-loader@4.3.0(@types/node@26.4.0)(cosmiconfig@8.1.3)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3))(typescript@5.8.3): dependencies: - '@types/node': 24.13.3 + '@types/node': 26.4.0 cosmiconfig: 8.1.3 - ts-node: 10.9.1(@types/node@24.13.3)(typescript@5.8.3) + ts-node: 10.9.1(@types/node@26.4.0)(typescript@5.8.3) typescript: 5.8.3 cosmiconfig@8.1.3: @@ -10180,13 +10180,13 @@ snapshots: optionalDependencies: typescript: 5.8.3 - create-jest@29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)): + create-jest@29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -11535,7 +11535,7 @@ snapshots: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -11560,7 +11560,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 co: 4.6.0 dedent: 1.6.0 @@ -11580,16 +11580,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)): + jest-cli@29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)): dependencies: - '@jest/core': 29.5.0(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + '@jest/core': 29.5.0(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + jest-config: 29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -11599,16 +11599,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)): + jest-cli@29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + '@jest/core': 29.7.0(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + create-jest: 29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -11618,7 +11618,7 @@ snapshots: - supports-color - ts-node - jest-config@29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)): + jest-config@29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)): dependencies: '@babel/core': 7.21.4 '@jest/test-sequencer': 29.5.0 @@ -11643,12 +11643,12 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 24.13.3 - ts-node: 10.9.1(@types/node@24.13.3)(typescript@5.8.3) + '@types/node': 26.4.0 + ts-node: 10.9.1(@types/node@26.4.0)(typescript@5.8.3) transitivePeerDependencies: - supports-color - jest-config@29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)): + jest-config@29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)): dependencies: '@babel/core': 7.28.0 '@jest/test-sequencer': 29.7.0 @@ -11673,8 +11673,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 24.13.3 - ts-node: 10.9.1(@types/node@24.13.3)(typescript@5.8.3) + '@types/node': 26.4.0 + ts-node: 10.9.1(@types/node@26.4.0)(typescript@5.8.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -11722,7 +11722,7 @@ snapshots: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -11731,7 +11731,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -11743,7 +11743,7 @@ snapshots: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 24.13.3 + '@types/node': 26.4.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11759,7 +11759,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 24.13.3 + '@types/node': 26.4.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11819,22 +11819,22 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.4(jest@29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)))(typescript@5.8.3): + jest-mock-extended@3.0.4(jest@29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)))(typescript@5.8.3): dependencies: - jest: 29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + jest: 29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) ts-essentials: 7.0.3(typescript@5.8.3) typescript: 5.8.3 jest-mock@29.5.0: dependencies: '@jest/types': 29.5.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 jest-util: 29.5.0 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): @@ -11894,7 +11894,7 @@ snapshots: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -11920,7 +11920,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -11948,7 +11948,7 @@ snapshots: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -11975,7 +11975,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -12049,7 +12049,7 @@ snapshots: jest-util@29.5.0: dependencies: '@jest/types': 29.5.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -12058,7 +12058,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12086,7 +12086,7 @@ snapshots: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 24.13.3 + '@types/node': 26.4.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12097,7 +12097,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12106,35 +12106,35 @@ snapshots: jest-worker@29.5.0: dependencies: - '@types/node': 24.13.3 + '@types/node': 26.4.0 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 24.13.3 + '@types/node': 26.4.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)): + jest@29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)): dependencies: - '@jest/core': 29.5.0(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + '@jest/core': 29.5.0(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + jest-cli: 29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) transitivePeerDependencies: - '@types/node' - supports-color - ts-node - jest@29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)): + jest@29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + '@jest/core': 29.7.0(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + jest-cli: 29.7.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -13860,11 +13860,11 @@ snapshots: dependencies: typescript: 5.8.3 - ts-jest@29.1.0(@babel/core@7.21.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.21.4))(esbuild@0.17.16)(jest@29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)))(typescript@5.8.3): + ts-jest@29.1.0(@babel/core@7.21.4)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.21.4))(esbuild@0.17.16)(jest@29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)))(typescript@5.8.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.5.0(@types/node@24.13.3)(ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3)) + jest: 29.5.0(@types/node@26.4.0)(ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3)) jest-util: 29.5.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -13878,14 +13878,14 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.21.4) esbuild: 0.17.16 - ts-node@10.9.1(@types/node@24.13.3)(typescript@5.8.3): + ts-node@10.9.1(@types/node@26.4.0)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 24.13.3 + '@types/node': 26.4.0 acorn: 8.10.0 acorn-walk: 8.3.2 arg: 4.1.3 @@ -14001,7 +14001,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.18.2: {} + undici-types@8.3.0: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -14096,13 +14096,13 @@ snapshots: validate-npm-package-name@5.0.1: {} - vite-node@3.2.4(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0): + vite-node@3.2.4(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + vite: 7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - jiti @@ -14117,7 +14117,7 @@ snapshots: - tsx - yaml - vite@7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0): + vite@7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0): dependencies: esbuild: 0.25.9 fdir: 6.5.0(picomatch@4.0.3) @@ -14126,16 +14126,16 @@ snapshots: rollup: 4.48.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.13.3 + '@types/node': 26.4.0 fsevents: 2.3.3 tsx: 4.23.12 yaml: 2.9.0 - vitest@3.2.4(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0): + vitest@3.2.4(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0)) + '@vitest/mocker': 3.2.4(vite@7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -14153,11 +14153,11 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) - vite-node: 3.2.4(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + vite: 7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) + vite-node: 3.2.4(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.13.3 + '@types/node': 26.4.0 transitivePeerDependencies: - jiti - less @@ -14172,10 +14172,10 @@ snapshots: - tsx - yaml - vitest@4.0.18(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0): + vitest@4.0.18(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0)) + '@vitest/mocker': 4.0.18(vite@7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -14192,10 +14192,10 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.1.3(@types/node@24.13.3)(tsx@4.23.12)(yaml@2.9.0) + vite: 7.1.3(@types/node@26.4.0)(tsx@4.23.12)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.13.3 + '@types/node': 26.4.0 transitivePeerDependencies: - jiti - less