From e17f55e641bd021878b9f6ae24440f68f5a51928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20K=C3=B6ssler?= Date: Fri, 16 Jan 2026 11:23:33 +0100 Subject: [PATCH 1/2] Protect node:vm against code injection --- library/agent/protect.ts | 2 + library/sinks/NodeVm.test.ts | 92 ++++++++++++++++++++++++++++++++++++ library/sinks/NodeVm.ts | 78 ++++++++++++++++++++++++++++++ 3 files changed, 172 insertions(+) create mode 100644 library/sinks/NodeVm.test.ts create mode 100644 library/sinks/NodeVm.ts diff --git a/library/agent/protect.ts b/library/agent/protect.ts index 692f6a16d..9d0b7304b 100644 --- a/library/agent/protect.ts +++ b/library/agent/protect.ts @@ -61,6 +61,7 @@ import { FunctionSink } from "../sinks/FunctionSink"; import type { FetchListsAPI } from "./api/FetchListsAPI"; import { FetchListsAPINodeHTTP } from "./api/FetchListsAPINodeHTTP"; import shouldEnableFirewall from "../helpers/shouldEnableFirewall"; +import { NodeVm } from "../sinks/NodeVm"; function getLogger(): Logger { if (isDebugging()) { @@ -175,6 +176,7 @@ export function getWrappers() { new AwsSDKVersion2(), new AiSDK(), new GoogleGenAi(), + new NodeVm(), ]; } diff --git a/library/sinks/NodeVm.test.ts b/library/sinks/NodeVm.test.ts new file mode 100644 index 000000000..e55541c96 --- /dev/null +++ b/library/sinks/NodeVm.test.ts @@ -0,0 +1,92 @@ +import * as t from "tap"; +import { Context, runWithContext } from "../agent/Context"; +import { createTestAgent } from "../helpers/createTestAgent"; +import { NodeVm } from "./NodeVm"; + +const unsafeContext = { + remoteAddress: "::1", + method: "POST", + url: "http://localhost:4000", + query: {}, + headers: {}, + body: { + code: "'); require('child_process').execSync('id'); //", + }, + cookies: {}, + routeParams: {}, + source: "express", + route: "/posts/:id", +} satisfies Context; + +const safeContext = { + ...unsafeContext, + body: { code: "Hello, world!" }, +} satisfies Context; + +t.test("it works", async (t) => { + const agent = createTestAgent(); + + agent.start([new NodeVm()]); + + const vm = require("vm"); + + { + // @ts-expect-error Not typed + globalThis.__test = "test"; + const script = new vm.Script("globalThis.__test = 'modified';"); + script.runInThisContext(); + // @ts-expect-error Not typed + t.equal(globalThis.__test, "modified"); + // @ts-expect-error Not typed + delete globalThis.__test; + } + + { + const contextObject = { globalVar: 1 }; + vm.createContext(contextObject); + vm.runInContext("globalVar *= 2;", contextObject); + t.same(contextObject.globalVar, 2); + } + + runWithContext(safeContext, () => { + t.doesNotThrow(() => { + new vm.Script(`console.log('${safeContext.body.code}');`); + }); + t.doesNotThrow(() => { + vm.runInThisContext(`console.log('${safeContext.body.code}');`); + }); + + const contextObject = { globalVar: 1 }; + vm.createContext(contextObject); + vm.runInContext("globalVar *= 2;", contextObject); + t.same(contextObject.globalVar, 2); + + // Call with wrong arguments + t.throws(() => { + vm.createScript({}); + }, /Unexpected identifier/); + }); + + runWithContext(unsafeContext, () => { + t.throws(() => { + new vm.Script(`console.log('${unsafeContext.body.code}');`); + }, /Zen has blocked a JavaScript injection: new Script/); + + const functionsToTest = [ + "createScript", + "runInThisContext", + "runInNewContext", + "runInContext", + "compileFunction", + ]; + + for (const funcName of functionsToTest) { + t.throws( + () => { + vm[funcName](`console.log('${unsafeContext.body.code}');`); + }, + new RegExp(`Zen has blocked a JavaScript injection: ${funcName}`) + ); + } + }); +}); diff --git a/library/sinks/NodeVm.ts b/library/sinks/NodeVm.ts new file mode 100644 index 000000000..0090ff3d6 --- /dev/null +++ b/library/sinks/NodeVm.ts @@ -0,0 +1,78 @@ +import { getContext } from "../agent/Context"; +import { Hooks } from "../agent/hooks/Hooks"; +import { inspectArgs, wrapExport } from "../agent/hooks/wrapExport"; +import { Wrapper } from "../agent/Wrapper"; +import { checkContextForJsInjection } from "../vulnerabilities/js-injection/checkContextForJsInjection"; +import { getInstance } from "../agent/AgentSingleton"; + +export class NodeVm implements Wrapper { + private inspectCode(args: unknown[], operation: string) { + const context = getContext(); + if (!context) { + return undefined; + } + + if (args.length === 0 || typeof args[0] !== "string") { + return undefined; + } + + const code = args[0]; + + return checkContextForJsInjection({ + js: code, + operation, + context, + }); + } + + private onConstruct(target: any, args: unknown[]) { + const agent = getInstance(); + const context = getContext(); + + if (!agent || !context) { + return new target(...args); + } + + inspectArgs( + args, + () => this.inspectCode(args, "new Script(...)"), + context, + agent, + { + name: "vm", + type: "builtin", + }, + "new Script(...)", + "eval_op" + ); + + return new target(...args); + } + + wrap(hooks: Hooks): void { + hooks.addBuiltinModule("vm").onRequire((exports, pkgInfo) => { + // We can't use our helper wrapNewInstance because it can not inspect constructor args + exports.Script = new Proxy(exports.Script, { + construct: (target, args) => this.onConstruct(target, args), + }); + + const functionsToWrap = [ + "createScript", + "runInThisContext", + "runInNewContext", + "runInContext", + "compileFunction", + ]; + + for (const functionName of functionsToWrap) { + if (typeof exports[functionName] === "function") { + wrapExport(exports, functionName, pkgInfo, { + kind: "eval_op", + inspectArgs: (args) => + this.inspectCode(args, `${functionName}(...)`), + }); + } + } + }); + } +} From 84f11eb73d3d82762d6fc469c35463a28626bf67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20K=C3=B6ssler?= Date: Fri, 16 Jan 2026 11:43:43 +0100 Subject: [PATCH 2/2] Fix and upgrade ESM tests --- package-lock.json | 492 +++++++++++++++++++++---------- package.json | 8 +- scripts/helpers/test-helpers.mjs | 24 ++ scripts/tests-esm.mjs | 3 +- 4 files changed, 368 insertions(+), 159 deletions(-) diff --git a/package-lock.json b/package-lock.json index e384430be..d85cad604 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,17 +9,17 @@ "devDependencies": { "astring": "^1.9.0", "follow-redirects": "^1.15.11", - "oxc-parser": "^0.96.0", - "oxc-transform": "^0.96.0", - "oxc-walker": "^0.5.2", - "prettier": "^3.2.4", + "oxc-parser": "^0.108.0", + "oxc-transform": "^0.108.0", + "oxc-walker": "^0.7.0", + "prettier": "^3.8.0", "tar": "^7.5.1" } }, "node_modules/@emnapi/core": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.0.tgz", - "integrity": "sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", "dev": true, "license": "MIT", "optional": true, @@ -29,9 +29,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.0.tgz", - "integrity": "sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", "dev": true, "license": "MIT", "optional": true, @@ -114,22 +114,43 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", - "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.5.0", - "@emnapi/runtime": "^1.5.0", + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@oxc-parser/binding-android-arm-eabi": { + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.108.0.tgz", + "integrity": "sha512-TemaHZYErFqspRHfsGb1dvWICigOciP4xKlcBVvO8znkHzdJGWbtPwqQc5f1cfrdFynctXIzRQh3qizzQJMqpg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@oxc-parser/binding-android-arm64": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.96.0.tgz", - "integrity": "sha512-CofbPOiW1PG+hi8bgElJPK0ioHfw8nt4Vw9d+Q9JuMhygS6LbQyu1W6tIFZ1OPFofeFRdWus3vD29FBx+tvFOA==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.108.0.tgz", + "integrity": "sha512-dnsD8uS2FaqpTv+AKCN3iVSRiWvR0PsrSqJCy4Z4+E4YLTpD0Ui9IYFSeu1rZVxwJUnCXs4j56dvZ4LO2NUv7A==", "cpu": [ "arm64" ], @@ -144,9 +165,9 @@ } }, "node_modules/@oxc-parser/binding-darwin-arm64": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.96.0.tgz", - "integrity": "sha512-+HZ2L1a/1BsUXYik8XqQwT2Tl5Z3jRQ/RRQiPV9UsB2skKyd91NLDlQlMpdhjLGs9Qe7Y42unFjRg2iHjIiwnw==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.108.0.tgz", + "integrity": "sha512-EPKhTey/qzezNIRot95CUMLGmK6sn9bDWgdfWSYCUXv9AwJJNjc6klRf3bslQTN35fyFXz/EM6Z9gD45YXcj0g==", "cpu": [ "arm64" ], @@ -161,9 +182,9 @@ } }, "node_modules/@oxc-parser/binding-darwin-x64": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.96.0.tgz", - "integrity": "sha512-GC8wH1W0XaCLyTeGsmyaMdnItiYQkqfTcn9Ygc55AWI+m11lCjQeoKDIsDCm/QwrKLCN07u3WWWsuPs5ubfXpA==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.108.0.tgz", + "integrity": "sha512-vhBov136GRb03/v0FmcgC2voAfNv89vOeUs5I64yvWqc3EFI9/Ja2jp1+982RGp6+wfVUKSDTymUOkAS8STGDA==", "cpu": [ "x64" ], @@ -178,9 +199,9 @@ } }, "node_modules/@oxc-parser/binding-freebsd-x64": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.96.0.tgz", - "integrity": "sha512-8SeXi2FmlN15uPY5oM03cua5RXBDYmY34Uewongv6RUiAaU/kWxLvzuijpyNC+yQ1r4fC2LbWJhAsKpX5qkA6g==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.108.0.tgz", + "integrity": "sha512-TbFhRqPzck2IGmJBrD/+SWGIv3NaimcAZySmi9dqG7aiMyhbt/XOMVith6cmuoSWcZDrEJiBr7RNQ/aW7YhsDQ==", "cpu": [ "x64" ], @@ -195,9 +216,9 @@ } }, "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.96.0.tgz", - "integrity": "sha512-UEs+Zf6T2/FwQlLgv7gfZsKmY19sl3hK57r2BQVc2eCmCmF/deeqDcWyFjzkNLgdDDucY60PoNhNGClDm605uQ==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.108.0.tgz", + "integrity": "sha512-X8BRbNGAM8t4oLmgp9mANZhN/rLcBledr33BT9BpCJwcIjZbPxPlQHmj/JuM4Ww6wYNeWWpeZCCKp4uDQHE06A==", "cpu": [ "arm" ], @@ -212,9 +233,9 @@ } }, "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.96.0.tgz", - "integrity": "sha512-1kuWvjR2+ORJMoyxt9LSbLcDhXZnL25XOuv9VmH6NmSPvLgewzuubSlm++W03x+U7SzWFilBsdwIHtD/0mjERw==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.108.0.tgz", + "integrity": "sha512-FtQwtAg/N/LqqSwSNsWu1TEywOETQwHXuHDYzIpa3DwvRPWYTlqLta6OPaXfAxqj5Iiy95GiZPf+dOb77mn5gQ==", "cpu": [ "arm" ], @@ -229,9 +250,9 @@ } }, "node_modules/@oxc-parser/binding-linux-arm64-gnu": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.96.0.tgz", - "integrity": "sha512-PHH4ETR1t0fymxuhpQNj3Z9t/78/zZa2Lj3Z3I0ZOd+/Ex+gtdhGoB5xYyy7lcYGAPMfZ+Gmr+dTCr1GYNZ3BA==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.108.0.tgz", + "integrity": "sha512-+oP0UaHHIKx/VtREFuB/m0EyZKKHt+8/LUL9hSdqakNByD9CFg2i1Fu98x+pAOPYn0C8WiTzJLoaClhLBJYKdA==", "cpu": [ "arm64" ], @@ -246,9 +267,9 @@ } }, "node_modules/@oxc-parser/binding-linux-arm64-musl": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.96.0.tgz", - "integrity": "sha512-fjDPbZjkqaDSTBe0FM8nZ9zBw4B/NF/I0gH7CfvNDwIj9smISaNFypYeomkvubORpnbX9ORhvhYwg3TxQ60OGA==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.108.0.tgz", + "integrity": "sha512-s45g0+UDL7fR9z+WewuA0YEwZWJrpL+Nma4Xay20TGMnYnUsl7H5E0te+1ovLIeBMVK6CKUFg1A0AUqxaSagmg==", "cpu": [ "arm64" ], @@ -262,10 +283,44 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@oxc-parser/binding-linux-ppc64-gnu": { + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.108.0.tgz", + "integrity": "sha512-h4ExnKtDzlZy577LxVL0N7XOyyn+UUqmSCzz/HPk3RwPEEL1YXZFPEcW1tYqXZnSZmBfmGxw9svSeTJlH37czw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.96.0.tgz", - "integrity": "sha512-59KAHd/6/LmjkdSAuJn0piKmwSavMasWNUKuYLX/UnqI5KkGIp14+LBwwaBG6KzOtIq1NrRCnmlL4XSEaNkzTg==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.108.0.tgz", + "integrity": "sha512-gi7fGSz6tiR8BIkN6JaQ0vjH6QGfAXB402lyKS6y5RcEBDnfrBAymYyjZJ3bQPV5rbev7YD/KzY0hJrNDQqUmQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-musl": { + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.108.0.tgz", + "integrity": "sha512-c44OgBdt3FE9P+OyboIYObg/2eejsor90wQM6A8fEZzi2CCJJzPeXEQDsdVIJBpSla5b2HkDeB5FJpEHyhMZyw==", "cpu": [ "riscv64" ], @@ -280,9 +335,9 @@ } }, "node_modules/@oxc-parser/binding-linux-s390x-gnu": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.96.0.tgz", - "integrity": "sha512-VtupojtgahY8XmLwpVpM3C1WQEgMD1JxpB8lzUtdSLwosWaaz1EAl+VXWNuxTTZusNuLBtmR+F0qql22ISi/9g==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.108.0.tgz", + "integrity": "sha512-MMPAQSxaHwsDNMOc3b+RIcqSnQWWOVYCFl2nuOvz2OxA1MHA2xvkB2w8B6QxnM5r4ikA6d/yydpvOynNugnJoA==", "cpu": [ "s390x" ], @@ -297,9 +352,9 @@ } }, "node_modules/@oxc-parser/binding-linux-x64-gnu": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.96.0.tgz", - "integrity": "sha512-8XSY9aUYY+5I4I1mhSEWmYqdUrJi3J5cCAInvEVHyTnDAPkhb+tnLGVZD696TpW+lFOLrTFF2V5GMWJVafqIUA==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.108.0.tgz", + "integrity": "sha512-uao/CmiUkSrfIF4WIT0c/mh+PqwIzux43/Q8NZvJrn4KLZaKR8veGPsJjUBN5igJerh+I5XJ4tjtYbFJV1So+A==", "cpu": [ "x64" ], @@ -314,9 +369,9 @@ } }, "node_modules/@oxc-parser/binding-linux-x64-musl": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.96.0.tgz", - "integrity": "sha512-IIVNtqhA0uxKkD8Y6aZinKO/sOD5O62VlduE54FnUU2rzZEszrZQLL8nMGVZhTdPaKW5M1aeLmjcdnOs6er1Jg==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.108.0.tgz", + "integrity": "sha512-5TTi3ohehU+VLTbq3g8XYpyrjsmQHaaicOvVgOh+3QGWm3x0JLsYZ+Pa23oHj++dBbYnhYKB+O1KwOoNIibtVg==", "cpu": [ "x64" ], @@ -330,10 +385,27 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@oxc-parser/binding-openharmony-arm64": { + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.108.0.tgz", + "integrity": "sha512-YTNJnBoyVSNdGG9xmvfi8mzLDbHqlOKHrYzGvORFPFImBj3VYfQXEYJ2v2rp5eQ8B+wffPg+8+IE2GQLLQ2B2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@oxc-parser/binding-wasm32-wasi": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.96.0.tgz", - "integrity": "sha512-TJ/sNPbVD4u6kUwm7sDKa5iRDEB8vd7ZIMjYqFrrAo9US1RGYOSvt6Ie9sDRekUL9fZhNsykvSrpmIj6dg/C2w==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.108.0.tgz", + "integrity": "sha512-zzalhAJT9PA6HdXtzfcDOvP9nXN/vBLswPtPBR7bFTsjowIcclHSBi8aj34pbhDABcmJeFPdwe+o2o4Midv25Q==", "cpu": [ "wasm32" ], @@ -341,16 +413,16 @@ "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.0.7" + "@napi-rs/wasm-runtime": "^1.1.1" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@oxc-parser/binding-win32-arm64-msvc": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.96.0.tgz", - "integrity": "sha512-zCOhRB7MYVIHLj+2QYoTuLyaipiD8JG/ggUjfsMUaupRPpvwQNhsxINLIcTcb0AS+OsT7/OREhydjO74STqQzQ==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.108.0.tgz", + "integrity": "sha512-VZwk6B8MYzPrhrQLlfkMb3lXhLvOxf/mR5BG299EgqlHIu7/NS/KNCoX7cXtDdlghNmChfu/G6vEdjYOyyERgg==", "cpu": [ "arm64" ], @@ -364,10 +436,27 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@oxc-parser/binding-win32-ia32-msvc": { + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.108.0.tgz", + "integrity": "sha512-pjZlfs7k41Ui/tL9ibOn1wA3b6/ow7ugQBSPU8etQnUv5qTB+TxZLQvxtV0lJI4wVRSUuwM709ngrjctFtix0g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@oxc-parser/binding-win32-x64-msvc": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.96.0.tgz", - "integrity": "sha512-J6zfx9TE0oS+TrqBUjMVMOi/d/j3HMj69Pip263pETOEPm788N0HXKPsc2X2jUfSTHzD9vmdjq0QFymbf2LhWg==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.108.0.tgz", + "integrity": "sha512-3yUPthhhF6BelQKfuOiyFO5/MRYmuSc2fK6if/ft84D1sp8lX7hvuDl+/90owmls1N4rGGS/Jp9R5YlJXzQ8nQ==", "cpu": [ "x64" ], @@ -382,19 +471,36 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.96.0.tgz", - "integrity": "sha512-r/xkmoXA0xEpU6UGtn18CNVjXH6erU3KCpCDbpLmbVxBFor1U9MqN5Z2uMmCHJuXjJzlnDR+hWY+yPoLo8oHDw==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.108.0.tgz", + "integrity": "sha512-7lf13b2IA/kZO6xgnIZA88sq3vwrxWk+2vxf6cc+omwYCRTiA5e63Beqf3fz/v8jEviChWWmFYBwzfSeyrsj7Q==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" } }, + "node_modules/@oxc-transform/binding-android-arm-eabi": { + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm-eabi/-/binding-android-arm-eabi-0.108.0.tgz", + "integrity": "sha512-lvIu578kM6558Ynz0+QyJCpAEwyqjU2RdB0ppyzCbN8wJRGTlDirr+THtETiq/hbRk/M5yhfAO2kro+70AvgAA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@oxc-transform/binding-android-arm64": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm64/-/binding-android-arm64-0.96.0.tgz", - "integrity": "sha512-wOm+ZsqFvyZ7B9RefUMsj0zcXw77Z2pXA51nbSQyPXqr+g0/pDGxriZWP8Sdpz/e4AEaKPA9DvrwyOZxu7GRDQ==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm64/-/binding-android-arm64-0.108.0.tgz", + "integrity": "sha512-2mIcrNI1PMUuNvp7nJ7TGEcllJiC7qq7G1J/eCS4CRUGHLuaMuiqds79gSJBR9gG4UzzP7thWjws9goMq5UICQ==", "cpu": [ "arm64" ], @@ -409,9 +515,9 @@ } }, "node_modules/@oxc-transform/binding-darwin-arm64": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-arm64/-/binding-darwin-arm64-0.96.0.tgz", - "integrity": "sha512-td1sbcvzsyuoNRiNdIRodPXRtFFwxzPpC/6/yIUtRRhKn30XQcizxupIvQQVpJWWchxkphbBDh6UN+u+2CJ8Zw==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-arm64/-/binding-darwin-arm64-0.108.0.tgz", + "integrity": "sha512-09P6IRBoOYj9HZ8ZR1i60Gk274xeSW2HO8VmMGJbV+Z1HURiO1hn/z6iCDmWhVgz9I3F2vqXFfVk8IeWY+KN3g==", "cpu": [ "arm64" ], @@ -426,9 +532,9 @@ } }, "node_modules/@oxc-transform/binding-darwin-x64": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-x64/-/binding-darwin-x64-0.96.0.tgz", - "integrity": "sha512-xgqxnqhPYH2NYkgbqtnCJfhbXvxIf/pnhF/ig5UBK8PYpCEWIP/cfLpQRQ9DcQnRfuxi7RMIF6LdmB1AiS6Fkg==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-x64/-/binding-darwin-x64-0.108.0.tgz", + "integrity": "sha512-bVf2wNwpMP2PX3hRbm8C9gRhdKLiqUIpLhsVhtyHgNwd5G4FgPtNgdFJogIFJ/07E0uYC2F+ag+CoSD76lEI0Q==", "cpu": [ "x64" ], @@ -443,9 +549,9 @@ } }, "node_modules/@oxc-transform/binding-freebsd-x64": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-freebsd-x64/-/binding-freebsd-x64-0.96.0.tgz", - "integrity": "sha512-1i67OXdl/rvSkcTXqDlh6qGRXYseEmf0rl/R+/i88scZ/o3A+FzlX56sThuaPzSSv9eVgesnoYUjIBJELFc1oA==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-freebsd-x64/-/binding-freebsd-x64-0.108.0.tgz", + "integrity": "sha512-BoP/itmIqHuZ4yOk6kSh1WAk7Muh/IykUVfBtH4D8ZZzcpiDNRndSKc+IISLDQ3AqtaAsl4A8DYa3S+SqEUJzQ==", "cpu": [ "x64" ], @@ -460,9 +566,9 @@ } }, "node_modules/@oxc-transform/binding-linux-arm-gnueabihf": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.96.0.tgz", - "integrity": "sha512-9MJBs0SWODsqyzO3eAnacXgJ/sZu1xqinjEwBzkcZ3tQI8nKhMADOzu2NzbVWDWujeoC8DESXaO08tujvUru+Q==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.108.0.tgz", + "integrity": "sha512-KtPotqF+MsXBo81xwmuPCkK+N/jX8ZsjCKOH3s7p1XfQanwCGLRFHel06o5JjH1klIlrdA1R+8YoorKwKDAfmQ==", "cpu": [ "arm" ], @@ -477,9 +583,9 @@ } }, "node_modules/@oxc-transform/binding-linux-arm-musleabihf": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.96.0.tgz", - "integrity": "sha512-BQom57I2ScccixljNYh2Wy+5oVZtF1LXiiUPxSLtDHbsanpEvV/+kzCagQpTjk1BVzSQzOxfEUWjvL7mY53pRQ==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.108.0.tgz", + "integrity": "sha512-Yf/lUkWqgRF8Ab1nqL1iAnrGP+IJO6H0k9c7Vnpg/fUfG5e8MOB+NPtWdbMMBUXTLPRWSh6Gmrr6rLnn2o7KWw==", "cpu": [ "arm" ], @@ -494,9 +600,9 @@ } }, "node_modules/@oxc-transform/binding-linux-arm64-gnu": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.96.0.tgz", - "integrity": "sha512-kaqvUzNu8LL4aBSXqcqGVLFG13GmJEplRI2+yqzkgAItxoP/LfFMdEIErlTWLGyBwd0OLiNMHrOvkcCQRWadVg==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.108.0.tgz", + "integrity": "sha512-84hqyO4xdvy6WfYkiFdQLVQK9gchrZvL6OuWYGXjqHwDcUU2Ll9YodHC4sEkQagKX5FKJjjRZ1YYmEKgq6bpkg==", "cpu": [ "arm64" ], @@ -511,9 +617,9 @@ } }, "node_modules/@oxc-transform/binding-linux-arm64-musl": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.96.0.tgz", - "integrity": "sha512-EiG/L3wEkPgTm4p906ufptyblBgtiQWTubGg/JEw82f8uLRroayr5zhbUqx40EgH037a3SfJthIyLZi7XPRFJw==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.108.0.tgz", + "integrity": "sha512-0utnCDANwZoJDAtwRyj5z0MLhzXPEr5p7pXf+Q/ef96ggwii2SVbSQdGge/+s/i4IWH3t3DbPGeIzXF7ab2gDw==", "cpu": [ "arm64" ], @@ -527,10 +633,44 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@oxc-transform/binding-linux-ppc64-gnu": { + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.108.0.tgz", + "integrity": "sha512-9s8muvWbTtxlvcwMZr643WXeAU5iRxKFxAeeHMwci952muR8AXaQvxTWeRyKUaKyjmtX/gCQSCTKL7ER0dx9Qw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@oxc-transform/binding-linux-riscv64-gnu": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.96.0.tgz", - "integrity": "sha512-r01CY6OxKGtVeYnvH4mGmtkQMlLkXdPWWNXwo5o7fE2s/fgZPMpqh8bAuXEhuMXipZRJrjxTk1+ZQ4KCHpMn3Q==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.108.0.tgz", + "integrity": "sha512-84EAYsC7oawGVTz6Gq7UzxOw9auZSAgqcT0itAI1k5m3k01ZJ5NNQyby16wmL6K1uetEz7t8vN0BWHhFPZAVBw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-riscv64-musl": { + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.108.0.tgz", + "integrity": "sha512-YsVyPd3/bHybHki5z06vToTB4MeiUgDOOQH+BNst462Mzim4gwyAG45k2XBJCR3vsDep04da7OtRQQoXe1mSqg==", "cpu": [ "riscv64" ], @@ -545,9 +685,9 @@ } }, "node_modules/@oxc-transform/binding-linux-s390x-gnu": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.96.0.tgz", - "integrity": "sha512-4djg2vYLGbVeS8YiA2K4RPPpZE4fxTGCX5g/bOMbCYyirDbmBAIop4eOAj8vOA9i1CcWbDtmp+PVJ1dSw7f3IQ==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.108.0.tgz", + "integrity": "sha512-aW9bQpvKBShYRtoG561uO+6788eciMl6IN7yWiLqGEHxV8azIbx7EK0GgvWdKH52CJq2LrM/gcfoXRfOgCjRUA==", "cpu": [ "s390x" ], @@ -562,9 +702,9 @@ } }, "node_modules/@oxc-transform/binding-linux-x64-gnu": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.96.0.tgz", - "integrity": "sha512-f6pcWVz57Y8jXa2OS7cz3aRNuks34Q3j61+3nQ4xTE8H1KbalcEvHNmM92OEddaJ8QLs9YcE0kUC6eDTbY34+A==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.108.0.tgz", + "integrity": "sha512-APOYvs7APzLHfIop9RQYqP9YkY9g7kQOnOE4KHhodlqOmUYDHpZYeA2QAs7is8KuTo0JETP3fTipG5HiSFJdWg==", "cpu": [ "x64" ], @@ -579,9 +719,9 @@ } }, "node_modules/@oxc-transform/binding-linux-x64-musl": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-musl/-/binding-linux-x64-musl-0.96.0.tgz", - "integrity": "sha512-NSiRtFvR7Pbhv3mWyPMkTK38czIjcnK0+K5STo3CuzZRVbX1TM17zGdHzKBUHZu7v6IQ6/XsQ3ELa1BlEHPGWQ==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-musl/-/binding-linux-x64-musl-0.108.0.tgz", + "integrity": "sha512-vPtmOmBvXCCB1ms68Ne8WoTv97mpDTDY2vgeT4E4NL5OFk9ZT6YVS6cXaJqCBHZNqljL5uIKuAF8gy6ywV1mUA==", "cpu": [ "x64" ], @@ -595,10 +735,27 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@oxc-transform/binding-openharmony-arm64": { + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-openharmony-arm64/-/binding-openharmony-arm64-0.108.0.tgz", + "integrity": "sha512-iWD38lrG1hQVMPjTAuxci+h8rr6xh17EfEQNiumnbiFjMmhWeMFTtyPyXwTpS6aPxf6Tcx/SUXHwRzKs+dKHDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@oxc-transform/binding-wasm32-wasi": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-wasm32-wasi/-/binding-wasm32-wasi-0.96.0.tgz", - "integrity": "sha512-A91ARLiuZHGN4hBds9s7bW3czUuLuHLsV+cz44iF9j8e1zX9m2hNGXf/acQRbg/zcFUXmjz5nmk8EkZyob876w==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-wasm32-wasi/-/binding-wasm32-wasi-0.108.0.tgz", + "integrity": "sha512-lr+pGcVrKCoZWZi5bH+3LE5OZq1FJ7vbWgXhbK0MGT0LAOXzqtMFcpbsZR/CPYQCXl4xl1FcAtXan0lNFAt4bQ==", "cpu": [ "wasm32" ], @@ -606,16 +763,16 @@ "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.0.7" + "@napi-rs/wasm-runtime": "^1.1.1" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@oxc-transform/binding-win32-arm64-msvc": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.96.0.tgz", - "integrity": "sha512-IedJf40djKgDObomhYjdRAlmSYUEdfqX3A3M9KfUltl9AghTBBLkTzUMA7O09oo71vYf5TEhbFM7+Vn5vqw7AQ==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.108.0.tgz", + "integrity": "sha512-R7X4Qbmq6TRWeEaxWpFx7n7n6t9rWcz9Q1hNOewxCBYNKXlH2Or5COPmKZGCuYByvN4TiDua5rudDgE6rf8RIA==", "cpu": [ "arm64" ], @@ -629,10 +786,27 @@ "node": "^20.19.0 || >=22.12.0" } }, + "node_modules/@oxc-transform/binding-win32-ia32-msvc": { + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.108.0.tgz", + "integrity": "sha512-msSIfa3g/AX2zudSmjAskxG074MQd+YDzBNaeDs/+6192pfR/N+Adn/zCt4HOcNiqTbWmbikAM7B7pPFb5yr0A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@oxc-transform/binding-win32-x64-msvc": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.96.0.tgz", - "integrity": "sha512-0fI0P0W7bSO/GCP/N5dkmtB9vBqCA4ggo1WmXTnxNJVmFFOtcA1vYm1I9jl8fxo+sucW2WnlpnI4fjKdo3JKxA==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.108.0.tgz", + "integrity": "sha512-k+7tuCMULfB7zr57jb68sVzxbyleZBasyr1h1Ieiu1U95XHYe64pbSrwHmlaSmiNHqV91ikM3809+ps68jZZhw==", "cpu": [ "x64" ], @@ -798,13 +972,13 @@ } }, "node_modules/oxc-parser": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.96.0.tgz", - "integrity": "sha512-ucs6niJ5mZlYP3oTl4AK2eD2m7WLoSaljswnSFVYWrXzme5PtM97S7Ve1Tjx+/TKjanmEZuSt1f1qYi6SZvntw==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.108.0.tgz", + "integrity": "sha512-eM0GUxQgVZXZxB364HRlakUH8rBxh5E6dN+RiiCLtOk84WgLFbhydULyd2DUJYxguvcbjWUmmKgVDyvVCeplDA==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "^0.96.0" + "@oxc-project/types": "^0.108.0" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -813,27 +987,32 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxc-parser/binding-android-arm64": "0.96.0", - "@oxc-parser/binding-darwin-arm64": "0.96.0", - "@oxc-parser/binding-darwin-x64": "0.96.0", - "@oxc-parser/binding-freebsd-x64": "0.96.0", - "@oxc-parser/binding-linux-arm-gnueabihf": "0.96.0", - "@oxc-parser/binding-linux-arm-musleabihf": "0.96.0", - "@oxc-parser/binding-linux-arm64-gnu": "0.96.0", - "@oxc-parser/binding-linux-arm64-musl": "0.96.0", - "@oxc-parser/binding-linux-riscv64-gnu": "0.96.0", - "@oxc-parser/binding-linux-s390x-gnu": "0.96.0", - "@oxc-parser/binding-linux-x64-gnu": "0.96.0", - "@oxc-parser/binding-linux-x64-musl": "0.96.0", - "@oxc-parser/binding-wasm32-wasi": "0.96.0", - "@oxc-parser/binding-win32-arm64-msvc": "0.96.0", - "@oxc-parser/binding-win32-x64-msvc": "0.96.0" + "@oxc-parser/binding-android-arm-eabi": "0.108.0", + "@oxc-parser/binding-android-arm64": "0.108.0", + "@oxc-parser/binding-darwin-arm64": "0.108.0", + "@oxc-parser/binding-darwin-x64": "0.108.0", + "@oxc-parser/binding-freebsd-x64": "0.108.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.108.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.108.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.108.0", + "@oxc-parser/binding-linux-arm64-musl": "0.108.0", + "@oxc-parser/binding-linux-ppc64-gnu": "0.108.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.108.0", + "@oxc-parser/binding-linux-riscv64-musl": "0.108.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.108.0", + "@oxc-parser/binding-linux-x64-gnu": "0.108.0", + "@oxc-parser/binding-linux-x64-musl": "0.108.0", + "@oxc-parser/binding-openharmony-arm64": "0.108.0", + "@oxc-parser/binding-wasm32-wasi": "0.108.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.108.0", + "@oxc-parser/binding-win32-ia32-msvc": "0.108.0", + "@oxc-parser/binding-win32-x64-msvc": "0.108.0" } }, "node_modules/oxc-transform": { - "version": "0.96.0", - "resolved": "https://registry.npmjs.org/oxc-transform/-/oxc-transform-0.96.0.tgz", - "integrity": "sha512-dQPNIF+gHpSkmC0+Vg9IktNyhcn28Y8R3eTLyzn52UNymkasLicl3sFAtz7oEVuFmCpgGjaUTKkwk+jW2cHpDQ==", + "version": "0.108.0", + "resolved": "https://registry.npmjs.org/oxc-transform/-/oxc-transform-0.108.0.tgz", + "integrity": "sha512-9fPqjhT8leeIa+s8kh+lwR3AZWPZRYDsND/kgKU5zDDkgrrkWuJLmLDP2LQsevSErIpX3cZQ+8QrXZXUqYRVww==", "dev": true, "license": "MIT", "engines": { @@ -843,34 +1022,39 @@ "url": "https://github.com/sponsors/Boshen" }, "optionalDependencies": { - "@oxc-transform/binding-android-arm64": "0.96.0", - "@oxc-transform/binding-darwin-arm64": "0.96.0", - "@oxc-transform/binding-darwin-x64": "0.96.0", - "@oxc-transform/binding-freebsd-x64": "0.96.0", - "@oxc-transform/binding-linux-arm-gnueabihf": "0.96.0", - "@oxc-transform/binding-linux-arm-musleabihf": "0.96.0", - "@oxc-transform/binding-linux-arm64-gnu": "0.96.0", - "@oxc-transform/binding-linux-arm64-musl": "0.96.0", - "@oxc-transform/binding-linux-riscv64-gnu": "0.96.0", - "@oxc-transform/binding-linux-s390x-gnu": "0.96.0", - "@oxc-transform/binding-linux-x64-gnu": "0.96.0", - "@oxc-transform/binding-linux-x64-musl": "0.96.0", - "@oxc-transform/binding-wasm32-wasi": "0.96.0", - "@oxc-transform/binding-win32-arm64-msvc": "0.96.0", - "@oxc-transform/binding-win32-x64-msvc": "0.96.0" + "@oxc-transform/binding-android-arm-eabi": "0.108.0", + "@oxc-transform/binding-android-arm64": "0.108.0", + "@oxc-transform/binding-darwin-arm64": "0.108.0", + "@oxc-transform/binding-darwin-x64": "0.108.0", + "@oxc-transform/binding-freebsd-x64": "0.108.0", + "@oxc-transform/binding-linux-arm-gnueabihf": "0.108.0", + "@oxc-transform/binding-linux-arm-musleabihf": "0.108.0", + "@oxc-transform/binding-linux-arm64-gnu": "0.108.0", + "@oxc-transform/binding-linux-arm64-musl": "0.108.0", + "@oxc-transform/binding-linux-ppc64-gnu": "0.108.0", + "@oxc-transform/binding-linux-riscv64-gnu": "0.108.0", + "@oxc-transform/binding-linux-riscv64-musl": "0.108.0", + "@oxc-transform/binding-linux-s390x-gnu": "0.108.0", + "@oxc-transform/binding-linux-x64-gnu": "0.108.0", + "@oxc-transform/binding-linux-x64-musl": "0.108.0", + "@oxc-transform/binding-openharmony-arm64": "0.108.0", + "@oxc-transform/binding-wasm32-wasi": "0.108.0", + "@oxc-transform/binding-win32-arm64-msvc": "0.108.0", + "@oxc-transform/binding-win32-ia32-msvc": "0.108.0", + "@oxc-transform/binding-win32-x64-msvc": "0.108.0" } }, "node_modules/oxc-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/oxc-walker/-/oxc-walker-0.5.2.tgz", - "integrity": "sha512-XYoZqWwApSKUmSDEFeOKdy3Cdh95cOcSU8f7yskFWE4Rl3cfL5uwyY+EV7Brk9mdNLy+t5SseJajd6g7KncvlA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/oxc-walker/-/oxc-walker-0.7.0.tgz", + "integrity": "sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A==", "dev": true, "license": "MIT", "dependencies": { "magic-regexp": "^0.10.0" }, "peerDependencies": { - "oxc-parser": ">=0.72.0" + "oxc-parser": ">=0.98.0" } }, "node_modules/pathe": { @@ -906,9 +1090,9 @@ } }, "node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz", + "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index 6f257b524..e619e8345 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,10 @@ "devDependencies": { "astring": "^1.9.0", "follow-redirects": "^1.15.11", - "oxc-parser": "^0.96.0", - "oxc-transform": "^0.96.0", - "oxc-walker": "^0.5.2", - "prettier": "^3.2.4", + "oxc-parser": "^0.108.0", + "oxc-transform": "^0.108.0", + "oxc-walker": "^0.7.0", + "prettier": "^3.8.0", "tar": "^7.5.1" }, "scripts": { diff --git a/scripts/helpers/test-helpers.mjs b/scripts/helpers/test-helpers.mjs index 0d542573a..47934fa68 100644 --- a/scripts/helpers/test-helpers.mjs +++ b/scripts/helpers/test-helpers.mjs @@ -20,6 +20,12 @@ export function throws(...args) { ); return err; } + + if (args[1] instanceof RegExp) { + assert.match(err.message ?? err.toString(), args[1]); + return err; + } + throw new TypeError( `Second argument of throws must be a string, got ${typeof args[1]}` ); @@ -115,3 +121,21 @@ export function rejects(...args) { }); }); } + +export function doesNotThrow(...args) { + if (args.length === 0) { + throw new TypeError("doesNotThrow requires at least one argument"); + } + + if (typeof args[0] !== "function") { + throw new TypeError("First argument to doesNotThrow must be a function"); + } + + try { + args[0](); + } catch (err) { + assert.fail( + `Unexpected exception thrown: ${err.message ?? err.toString()}` + ); + } +} diff --git a/scripts/tests-esm.mjs b/scripts/tests-esm.mjs index f8ff6636b..3cd1386c3 100644 --- a/scripts/tests-esm.mjs +++ b/scripts/tests-esm.mjs @@ -88,7 +88,7 @@ for await (const entry of testFiles) { const newFilename = filename.replace(/ts$/, "js"); // --------------- Transform TS to JS and parse to AST ---------------- - let { code, errors } = transform(filename, sourceText, { + let { code, errors } = await transform(filename, sourceText, { target: "es2022", typescript: { rewriteImportExtensions: "rewrite", @@ -241,6 +241,7 @@ for await (const entry of testFiles) { case "pass": case "rejects": case "same": + case "doesNotThrow": node.callee = { type: "MemberExpression", object: { type: "Identifier", name: "_testHelpers" },