Repository: google/zx (2025-08-16T17:11:55Z)

Issue:
Missing file internal.cjs in zx@lite
I'm unable to import zx@lite 8.8.0. It is complaining that `./internals.cjs` does not exist. There is indeed no such file in node_modules/zx nor in the tarball at https://registry.npmjs.org/zx/-/zx-8.8.0-lite.tgz.

````bash
node:internal/modules/cjs/loader:1410
  const err = new Error(message);
              ^

Error: Cannot find module './internals.cjs'
Require stack:
- [redacted]\node_modules\zx\build\vendor-core.cjs
- [redacted]\node_modules\zx\build\core.cjs
    at Module._resolveFilename (node:internal/modules/cjs/loader:1410:15)
    at defaultResolveImpl (node:internal/modules/cjs/loader:1051:19)
    at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1056:22)
    at Module._load (node:internal/modules/cjs/loader:1219:37)
    at TracingChannel.traceSync (node:diagnostics_channel:322:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:238:24)
    at Module.require (node:internal/modules/cjs/loader:1493:12)
    at require (node:internal/modules/helpers:152:16)
    at Object.<anonymous> ([redacted]\node_modules\zx\build\vendor-core.cjs:1402:24)
    at Module._compile (node:internal/modules/cjs/loader:1738:14) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '[redacted]\\node_modules\\zx\\build\\vendor-core.cjs',
    '[redacted]\\node_modules\\zx\\build\\core.cjs'
  ]
````




Discussion:
Hey @ridiculous-thought,

We've pushed a fix to the dev channel. Could you check it?

[8.8.1-lite-dev.4844b49-lite](https://www.npmjs.com/package/zx/v/8.8.1-lite-dev.4844b49-lite)
Fixed in [v8.8.1](https://github.com/google/zx/releases/tag/8.8.1)
Thanks!



Patch:
diff --git a/.gitignore b/.gitignore
index f61d910802..9d195bd81c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,10 +9,3 @@ temp
 test/fixtures/ts-project/build/
 jsr.json
 .npmrc
-
-build/*.js
-!build/cli.js
-!build/core.js
-!build/index.js
-!build/globals.js
-!build/deno.js
diff --git a/.size-limit.json b/.size-limit.json
index a30e27b940..cd37b20fa3 100644
--- a/.size-limit.json
+++ b/.size-limit.json
@@ -29,21 +29,21 @@
       "build/globals.js",
       "build/deno.js"
     ],
-    "limit": "814.95 kB",
+    "limit": "814.851 kB",
     "brotli": false,
     "gzip": false
   },
   {
     "name": "libdefs",
     "path": "build/*.d.ts",
-    "limit": "40.51 kB",
+    "limit": "40.35 kB",
     "brotli": false,
     "gzip": false
   },
   {
     "name": "vendor",
     "path": "build/vendor-*.{cjs,d.ts}",
-    "limit": "766.47 kB",
+    "limit": "766.40 kB",
     "brotli": false,
     "gzip": false
   },
@@ -62,7 +62,7 @@
       "README.md",
       "LICENSE"
     ],
-    "limit": "872.35 kB",
+    "limit": "872.05 kB",
     "brotli": false,
     "gzip": false
   }
diff --git a/build/index.cjs b/build/index.cjs
index 131c8837de..f5c8fbf240 100644
--- a/build/index.cjs
+++ b/build/index.cjs
@@ -55,7 +55,7 @@ var import_vendor = require("./vendor.cjs");
 var versions = {
   zx: "8.8.0",
   chalk: "5.5.0",
-  depseek: "0.4.1",
+  depseek: "0.4.3",
   dotenv: "0.2.3",
   fetch: "1.6.7",
   fs: "11.3.1",
@@ -192,9 +192,9 @@ function retry(count, d, cb) {
     if (typeof d === "function") return retry(count, 0, d);
     if (!cb) throw new import_core.Fail("Callback is required for retry");
     const total = count;
-    const gen = typeof d === "object" ? d : function* (d2) {
+    const gen = typeof d === "object" ? d : (function* (d2) {
       while (true) yield d2;
-    }((0, import_util.parseDuration)(d));
+    })((0, import_util.parseDuration)(d));
     let attempt = 0;
     let lastErr;
     while (count-- > 0) {
diff --git a/build/internals.d.ts b/build/internals.d.ts
deleted file mode 100644
index acc6523cf8..0000000000
--- a/build/internals.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export declare const bus: {
-    override: (key: string, value: any) => Map<string, any>;
-    store: Map<string, any>;
-    wrap: <T extends object>(name: string, api: T) => T;
-};
diff --git a/build/vendor-core.cjs b/build/vendor-core.cjs
index 08c4e15e60..e8b5dac9f6 100644
--- a/build/vendor-core.cjs
+++ b/build/vendor-core.cjs
@@ -128,7 +128,7 @@ var require_options = __commonJS({
 var require_cjs = __commonJS({
   "node_modules/isexe/dist/cjs/index.js"(exports2) {
     "use strict";
-    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
+    var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
       if (k2 === void 0) k2 = k;
       var desc = Object.getOwnPropertyDescriptor(m, k);
       if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
@@ -137,13 +137,13 @@ var require_cjs = __commonJS({
         } };
       }
       Object.defineProperty(o, k2, desc);
-    } : function(o, m, k, k2) {
+    }) : (function(o, m, k, k2) {
       if (k2 === void 0) k2 = k;
       o[k2] = m[k];
-    });
-    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
+    }));
+    var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
       Object.defineProperty(o, "default", { enumerable: true, value: v });
-    } : function(o, v) {
+    }) : function(o, v) {
       o["default"] = v;
     });
     var __importStar = exports2 && exports2.__importStar || function(mod) {
diff --git a/build/vendor-extra.cjs b/build/vendor-extra.cjs
index fe16926bdd..f0d89b6873 100644
--- a/build/vendor-extra.cjs
+++ b/build/vendor-extra.cjs
@@ -6069,7 +6069,7 @@ var require_polyfills = __commonJS({
         };
       }
       if (platform === "win32") {
-        fs6.rename = typeof fs6.rename !== "function" ? fs6.rename : function(fs$rename) {
+        fs6.rename = typeof fs6.rename !== "function" ? fs6.rename : (function(fs$rename) {
           function rename(from, to, cb) {
             var start = Date.now();
             var backoff = 0;
@@ -6092,9 +6092,9 @@ var require_polyfills = __commonJS({
           }
           if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename);
           return rename;
-        }(fs6.rename);
+        })(fs6.rename);
       }
-      fs6.read = typeof fs6.read !== "function" ? fs6.read : function(fs$read) {
+      fs6.read = typeof fs6.read !== "function" ? fs6.read : (function(fs$read) {
         function read(fd, buffer, offset, length, position, callback_) {
           var callback;
           if (callback_ && typeof callback_ === "function") {
@@ -6111,8 +6111,8 @@ var require_polyfills = __commonJS({
         }
         if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read);
         return read;
-      }(fs6.read);
-      fs6.readSync = typeof fs6.readSync !== "function" ? fs6.readSync : /* @__PURE__ */ function(fs$readSync) {
+      })(fs6.read);
+      fs6.readSync = typeof fs6.readSync !== "function" ? fs6.readSync : /* @__PURE__ */ (function(fs$readSync) {
         return function(fd, buffer, offset, length, position) {
           var eagCounter = 0;
           while (true) {
@@ -6127,7 +6127,7 @@ var require_polyfills = __commonJS({
             }
           }
         };
-      }(fs6.readSync);
+      })(fs6.readSync);
       function patchLchmod(fs7) {
         fs7.lchmod = function(path3, mode, callback) {
           fs7.open(
@@ -6450,7 +6450,7 @@ var require_graceful_fs = __commonJS({
     if (!fs6[gracefulQueue]) {
       queue = global[gracefulQueue] || [];
       publishQueue(fs6, queue);
-      fs6.close = function(fs$close) {
+      fs6.close = (function(fs$close) {
         function close(fd, cb) {
           return fs$close.call(fs6, fd, function(err) {
             if (!err) {
@@ -6464,8 +6464,8 @@ var require_graceful_fs = __commonJS({
           value: fs$close
         });
         return close;
-      }(fs6.close);
-      fs6.closeSync = function(fs$closeSync) {
+      })(fs6.close);
+      fs6.closeSync = (function(fs$closeSync) {
         function closeSync(fd) {
           fs$closeSync.apply(fs6, arguments);
           resetQueue();
@@ -6474,7 +6474,7 @@ var require_graceful_fs = __commonJS({
           value: fs$closeSync
         });
         return closeSync;
-      }(fs6.closeSync);
+      })(fs6.closeSync);
       if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || "")) {
         process.on("exit", function() {
           debug(fs6[gracefulQueue]);
@@ -8417,7 +8417,7 @@ function Us(i) {
   return w2.type = p2, w2.typeFull = h2, w2.charset = f2, w2;
 }
 function Ns() {
-  return bi || (bi = 1, function(i, o3) {
+  return bi || (bi = 1, (function(i, o3) {
     (function(a, f2) {
       f2(o3);
     })(xs, function(a) {
@@ -8798,11 +8798,11 @@ function Ns() {
       }
       n2(Ut, "GetMethod");
       function Ji(e) {
-        const t3 = { [Symbol.iterator]: () => e.iterator }, r2 = function() {
+        const t3 = { [Symbol.iterator]: () => e.iterator }, r2 = (function() {
           return __asyncGenerator(this, null, function* () {
             return yield* __yieldStar(t3);
           });
-        }(), s = r2.next;
+        })(), s = r2.next;
         return { iterator: r2, nextMethod: s, done: false };
       }
       n2(Ji, "CreateAsyncFromSyncIterator");
@@ -10793,7 +10793,7 @@ function Ns() {
       }
       n2(li, "streamBrandCheckException"), a.ByteLengthQueuingStrategy = Xe, a.CountQueuingStrategy = et, a.ReadableByteStreamController = te, a.ReadableStream = L, a.ReadableStreamBYOBReader = ce, a.ReadableStreamBYOBRequest = Re, a.ReadableStreamDefaultController = ne, a.ReadableStreamDefaultReader = fe, a.TransformStream = tt, a.TransformStreamDefaultController = pe, a.WritableStream = de, a.WritableStreamDefaultController = ke, a.WritableStreamDefaultWriter = re;
     });
-  }(kt, kt.exports)), kt.exports;
+  })(kt, kt.exports)), kt.exports;
 }
 function Hs() {
   if (mi) return pi;
@@ -19474,8 +19474,9 @@ var T = !o2 && globalThis.AbortController || Mn;
 
 // node_modules/depseek/target/esm/index.mjs
 var importRequireRe = /((\.{3}|\s|[!%&(*+,/:;<=>?[^{|}~-]|^)(require\s?\(\s?|import\s?\(?\s?)|\sfrom)\s?$/;
-var isDep = (proposal, re) => !!proposal && re.test(proposal);
-var isSpace = (value) => value === " " || value === "\n" || value === "	";
+var isDep = (v2, re) => !!v2 && re.test(v2);
+var isSpace = (v2) => v2 === " " || v2 === "\n" || v2 === "	";
+var isQ = (v2) => `"'\``.includes(v2);
 var normalizeOpts = (opts) => __spreadValues({
   bufferSize: 1e3,
   comments: false,
@@ -19507,33 +19508,25 @@ var extract = (readable, _opts) => {
       const char = chunk[j];
       if (c2 === q) {
         if (isSpace(char)) {
-          if (!isSpace(prev))
-            token += char;
-        } else if (char === '"' || char === "'" || char === "`")
-          q = char;
-        else if (prev === "/" && (char === "/" || char === "*"))
-          c2 = char;
-        else
-          token += char;
+          if (!isSpace(prev)) token += char;
+        } else if (prev === "/" && (char === "/" || char === "*")) c2 = char;
+        else if (isQ(char)) q = char;
+        else token += char;
       } else if (c2 === null) {
-        if (q === char && prev !== "\\") {
-          if (strLiteral && isDep(token.slice(-offset), re))
-            pushRef("dep", strLiteral, i - strLiteral.length);
+        if (isSpace(char) || isQ(char)) {
+          if (strLiteral && isDep(token.slice(-offset), re)) pushRef("dep", strLiteral, i - strLiteral.length);
           strLiteral = "";
           token = "";
           q = null;
-        } else
-          strLiteral += char;
+        } else strLiteral += char;
       } else if (q === null) {
         if (c2 === "/" && char === "\n" || c2 === "*" && prev === "*" && char === "/") {
           commentValue = c2 === "*" ? commentBlock.slice(0, -1) : commentBlock;
-          if (commentValue && comments)
-            pushRef("comment", commentValue, i - commentValue.length);
+          if (commentValue && comments) pushRef("comment", commentValue, i - commentValue.length);
           commentBlock = "";
           token = token.slice(0, -1);
           c2 = null;
-        } else if (comments)
-          commentBlock += char;
+        } else if (comments) commentBlock += char;
       }
       prev = char;
       i++;
diff --git a/package-lock.json b/package-lock.json
index 7334c7895a..d689f2670f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -25,12 +25,12 @@
         "chalk": "5.5.0",
         "create-require": "1.1.1",
         "cronometro": "5.3.0",
-        "depseek": "0.4.1",
+        "depseek": "0.4.3",
         "dts-bundle-generator": "9.5.1",
         "envapi": "0.2.3",
-        "esbuild": "0.25.8",
+        "esbuild": "0.25.9",
         "esbuild-node-externals": "1.18.0",
-        "esbuild-plugin-entry-chunks": "0.1.15",
+        "esbuild-plugin-entry-chunks": "0.1.17",
         "esbuild-plugin-extract-helpers": "0.0.6",
         "esbuild-plugin-hybrid-export": "0.3.1",
         "esbuild-plugin-resolve": "2.0.0",
@@ -40,7 +40,7 @@
         "get-port": "7.1.0",
         "globby": "14.1.0",
         "jsr": "0.13.5",
-        "lefthook": "1.12.2",
+        "lefthook": "1.12.3",
         "madge": "8.0.0",
         "minimist": "1.2.8",
         "node-fetch-native": "1.6.7",
@@ -48,7 +48,7 @@
         "size-limit": "11.2.0",
         "ts-node": "10.9.2",
         "tsd": "0.33.0",
-        "tsx": "4.20.3",
+        "tsx": "4.20.4",
         "typescript": "5.9.2",
         "vitepress": "1.6.4",
         "which": "5.0.0",
@@ -821,9 +821,9 @@
       }
     },
     "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz",
-      "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz",
+      "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==",
       "cpu": [
         "ppc64"
       ],
@@ -838,9 +838,9 @@
       }
     },
     "node_modules/@esbuild/android-arm": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz",
-      "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz",
+      "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==",
       "cpu": [
         "arm"
       ],
@@ -855,9 +855,9 @@
       }
     },
     "node_modules/@esbuild/android-arm64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz",
-      "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz",
+      "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==",
       "cpu": [
         "arm64"
       ],
@@ -872,9 +872,9 @@
       }
     },
     "node_modules/@esbuild/android-x64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz",
-      "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz",
+      "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==",
       "cpu": [
         "x64"
       ],
@@ -889,9 +889,9 @@
       }
     },
     "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz",
-      "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz",
+      "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==",
       "cpu": [
         "arm64"
       ],
@@ -906,9 +906,9 @@
       }
     },
     "node_modules/@esbuild/darwin-x64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz",
-      "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz",
+      "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==",
       "cpu": [
         "x64"
       ],
@@ -923,9 +923,9 @@
       }
     },
     "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz",
-      "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz",
+      "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==",
       "cpu": [
         "arm64"
       ],
@@ -940,9 +940,9 @@
       }
     },
     "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz",
-      "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz",
+      "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==",
       "cpu": [
         "x64"
       ],
@@ -957,9 +957,9 @@
       }
     },
     "node_modules/@esbuild/linux-arm": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz",
-      "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz",
+      "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==",
       "cpu": [
         "arm"
       ],
@@ -974,9 +974,9 @@
       }
     },
     "node_modules/@esbuild/linux-arm64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz",
-      "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz",
+      "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==",
       "cpu": [
         "arm64"
       ],
@@ -991,9 +991,9 @@
       }
     },
     "node_modules/@esbuild/linux-ia32": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz",
-      "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz",
+      "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==",
       "cpu": [
         "ia32"
       ],
@@ -1008,9 +1008,9 @@
       }
     },
     "node_modules/@esbuild/linux-loong64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz",
-      "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz",
+      "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==",
       "cpu": [
         "loong64"
       ],
@@ -1025,9 +1025,9 @@
       }
     },
     "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz",
-      "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz",
+      "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==",
       "cpu": [
         "mips64el"
       ],
@@ -1042,9 +1042,9 @@
       }
     },
     "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz",
-      "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz",
+      "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==",
       "cpu": [
         "ppc64"
       ],
@@ -1059,9 +1059,9 @@
       }
     },
     "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz",
-      "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz",
+      "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==",
       "cpu": [
         "riscv64"
       ],
@@ -1076,9 +1076,9 @@
       }
     },
     "node_modules/@esbuild/linux-s390x": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz",
-      "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz",
+      "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==",
       "cpu": [
         "s390x"
       ],
@@ -1093,9 +1093,9 @@
       }
     },
     "node_modules/@esbuild/linux-x64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz",
-      "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz",
+      "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==",
       "cpu": [
         "x64"
       ],
@@ -1110,9 +1110,9 @@
       }
     },
     "node_modules/@esbuild/netbsd-arm64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz",
-      "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz",
+      "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==",
       "cpu": [
         "arm64"
       ],
@@ -1127,9 +1127,9 @@
       }
     },
     "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz",
-      "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz",
+      "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==",
       "cpu": [
         "x64"
       ],
@@ -1144,9 +1144,9 @@
       }
     },
     "node_modules/@esbuild/openbsd-arm64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz",
-      "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz",
+      "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==",
       "cpu": [
         "arm64"
       ],
@@ -1161,9 +1161,9 @@
       }
     },
     "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz",
-      "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz",
+      "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==",
       "cpu": [
         "x64"
       ],
@@ -1178,9 +1178,9 @@
       }
     },
     "node_modules/@esbuild/openharmony-arm64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz",
-      "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz",
+      "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==",
       "cpu": [
         "arm64"
       ],
@@ -1195,9 +1195,9 @@
       }
     },
     "node_modules/@esbuild/sunos-x64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz",
-      "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz",
+      "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==",
       "cpu": [
         "x64"
       ],
@@ -1212,9 +1212,9 @@
       }
     },
     "node_modules/@esbuild/win32-arm64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz",
-      "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz",
+      "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==",
       "cpu": [
         "arm64"
       ],
@@ -1229,9 +1229,9 @@
       }
     },
     "node_modules/@esbuild/win32-ia32": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz",
-      "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz",
+      "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==",
       "cpu": [
         "ia32"
       ],
@@ -1246,9 +1246,9 @@
       }
     },
     "node_modules/@esbuild/win32-x64": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz",
-      "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz",
+      "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==",
       "cpu": [
         "x64"
       ],
@@ -3354,9 +3354,9 @@
       }
     },
     "node_modules/depseek": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/depseek/-/depseek-0.4.1.tgz",
-      "integrity": "sha512-YYfPPajzH9s2qnEva411VJzCMWtArBTfluI9USiKQ+T6xBWFh3C7yPxhaa1KVgJa17v9aRKc+LcRhgxS5/9mOA==",
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/depseek/-/depseek-0.4.3.tgz",
+      "integrity": "sha512-0Ex/Uoz9Y9oipbqvgSc7FoV2q4GTDGORkg8TGgM9Pd3RyvRzrDYScKplWiqHU7WqckbKN5kukqD0opEayu2bXg==",
       "dev": true,
       "license": "MIT"
     },
@@ -3778,9 +3778,9 @@
       }
     },
     "node_modules/esbuild": {
-      "version": "0.25.8",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz",
-      "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==",
+      "version": "0.25.9",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz",
+      "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -3791,32 +3791,32 @@
         "node": ">=18"
       },
       "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.25.8",
-        "@esbuild/android-arm": "0.25.8",
-        "@esbuild/android-arm64": "0.25.8",
-        "@esbuild/android-x64": "0.25.8",
-        "@esbuild/darwin-arm64": "0.25.8",
-        "@esbuild/darwin-x64": "0.25.8",
-        "@esbuild/freebsd-arm64": "0.25.8",
-        "@esbuild/freebsd-x64": "0.25.8",
-        "@esbuild/linux-arm": "0.25.8",
-        "@esbuild/linux-arm64": "0.25.8",
-        "@esbuild/linux-ia32": "0.25.8",
-        "@esbuild/linux-loong64": "0.25.8",
-        "@esbuild/linux-mips64el": "0.25.8",
-        "@esbuild/linux-ppc64": "0.25.8",
-        "@esbuild/linux-riscv64": "0.25.8",
-        "@esbuild/linux-s390x": "0.25.8",
-        "@esbuild/linux-x64": "0.25.8",
-        "@esbuild/netbsd-arm64": "0.25.8",
-        "@esbuild/netbsd-x64": "0.25.8",
-        "@esbuild/openbsd-arm64": "0.25.8",
-        "@esbuild/openbsd-x64": "0.25.8",
-        "@esbuild/openharmony-arm64": "0.25.8",
-        "@esbuild/sunos-x64": "0.25.8",
-        "@esbuild/win32-arm64": "0.25.8",
-        "@esbuild/win32-ia32": "0.25.8",
-        "@esbuild/win32-x64": "0.25.8"
+        "@esbuild/aix-ppc64": "0.25.9",
+        "@esbuild/android-arm": "0.25.9",
+        "@esbuild/android-arm64": "0.25.9",
+        "@esbuild/android-x64": "0.25.9",
+        "@esbuild/darwin-arm64": "0.25.9",
+        "@esbuild/darwin-x64": "0.25.9",
+        "@esbuild/freebsd-arm64": "0.25.9",
+        "@esbuild/freebsd-x64": "0.25.9",
+        "@esbuild/linux-arm": "0.25.9",
+        "@esbuild/linux-arm64": "0.25.9",
+        "@esbuild/linux-ia32": "0.25.9",
+        "@esbuild/linux-loong64": "0.25.9",
+        "@esbuild/linux-mips64el": "0.25.9",
+        "@esbuild/linux-ppc64": "0.25.9",
+        "@esbuild/linux-riscv64": "0.25.9",
+        "@esbuild/linux-s390x": "0.25.9",
+        "@esbuild/linux-x64": "0.25.9",
+        "@esbuild/netbsd-arm64": "0.25.9",
+        "@esbuild/netbsd-x64": "0.25.9",
+        "@esbuild/openbsd-arm64": "0.25.9",
+        "@esbuild/openbsd-x64": "0.25.9",
+        "@esbuild/openharmony-arm64": "0.25.9",
+        "@esbuild/sunos-x64": "0.25.9",
+        "@esbuild/win32-arm64": "0.25.9",
+        "@esbuild/win32-ia32": "0.25.9",
+        "@esbuild/win32-x64": "0.25.9"
       }
     },
     "node_modules/esbuild-node-externals": {
@@ -3836,13 +3836,13 @@
       }
     },
     "node_modules/esbuild-plugin-entry-chunks": {
-      "version": "0.1.15",
-      "resolved": "https://registry.npmjs.org/esbuild-plugin-entry-chunks/-/esbuild-plugin-entry-chunks-0.1.15.tgz",
-      "integrity": "sha512-ghhbmzYU+yc+8IfSFXu+S1OW1sZUlYkwqhM2rUGpC5Ugw/upNu0J0njx+hSm6xqCowvH5kRyv3ZYe3GMk3ebeQ==",
+      "version": "0.1.17",
+      "resolved": "https://registry.npmjs.org/esbuild-plugin-entry-chunks/-/esbuild-plugin-entry-chunks-0.1.17.tgz",
+      "integrity": "sha512-cJYPptkXdOr/MOx4Op1pAXPS1leSaOEJLDDqrf/Pl/TJEePqMTSwA8BKhhtIsCZ85W8ZcGbmIvIaPII+STY0bg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "depseek": "0.4.1",
+        "depseek": "0.4.3",
         "esbuild-plugin-utils": "0.1.0"
       },
       "peerDependencies": {
@@ -5056,9 +5056,9 @@
       }
     },
     "node_modules/lefthook": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-1.12.2.tgz",
-      "integrity": "sha512-2CeTu5NcmoT9YnqsHTq/TF36MlqlzHzhivGx3DrXHwcff4TdvrkIwUTA56huM3Nlo5ODAF/0hlPzaKLmNHCBnQ==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-1.12.3.tgz",
+      "integrity": "sha512-huMg+mGp6wHPjkaLdchuOvxVRMzvz6OVdhivatiH2Qn47O5Zm46jwzbVPYIanX6N/8ZTjGLBxv8tZ0KYmKt/Jg==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -5066,22 +5066,22 @@
         "lefthook": "bin/index.js"
       },
       "optionalDependencies": {
-        "lefthook-darwin-arm64": "1.12.2",
-        "lefthook-darwin-x64": "1.12.2",
-        "lefthook-freebsd-arm64": "1.12.2",
-        "lefthook-freebsd-x64": "1.12.2",
-        "lefthook-linux-arm64": "1.12.2",
-        "lefthook-linux-x64": "1.12.2",
-        "lefthook-openbsd-arm64": "1.12.2",
-        "lefthook-openbsd-x64": "1.12.2",
-        "lefthook-windows-arm64": "1.12.2",
-        "lefthook-windows-x64": "1.12.2"
+        "lefthook-darwin-arm64": "1.12.3",
+        "lefthook-darwin-x64": "1.12.3",
+        "lefthook-freebsd-arm64": "1.12.3",
+        "lefthook-freebsd-x64": "1.12.3",
+        "lefthook-linux-arm64": "1.12.3",
+        "lefthook-linux-x64": "1.12.3",
+        "lefthook-openbsd-arm64": "1.12.3",
+        "lefthook-openbsd-x64": "1.12.3",
+        "lefthook-windows-arm64": "1.12.3",
+        "lefthook-windows-x64": "1.12.3"
       }
     },
     "node_modules/lefthook-darwin-arm64": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.12.2.tgz",
-      "integrity": "sha512-fTxeI9tEskrHjc3QyEO+AG7impBXY2Ed8V5aiRc3fw9POfYtVh9b5jRx90fjk2+ld5hf+Z1DsyyLq/vOHDFskQ==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.12.3.tgz",
+      "integrity": "sha512-j1lwaosWRy3vhz8oQgCS1M6EUFN95aIYeNuqkczsBoAA6BDNAmVP1ctYEIYUK4bYaIgENbqbA9prYMAhyzh6Og==",
       "cpu": [
         "arm64"
       ],
@@ -5093,9 +5093,9 @@
       ]
     },
     "node_modules/lefthook-darwin-x64": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-1.12.2.tgz",
-      "integrity": "sha512-T1dCDKAAfdHgYZ8qtrS02SJSHoR52RFcrGArFNll9Mu4ZSV19Sp8BO+kTwDUOcLYdcPGNaqOp9PkRBQGZWQC7g==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-1.12.3.tgz",
+      "integrity": "sha512-x6aWFfLQX4m5zQ4X9zh5+hHOE5XTvNjz2zB9DI+xbIBLs2RRg0xJNT3OfgSrBU1QtEBneJ5dRQP5nl47td9GDQ==",
       "cpu": [
         "x64"
       ],
@@ -5107,9 +5107,9 @@
       ]
     },
     "node_modules/lefthook-freebsd-arm64": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.12.2.tgz",
-      "integrity": "sha512-2n9z7Q4BKeMBoB9cuEdv0UBQH82Z4GgBQpCrfjCtyzpDnYQwrH8Tkrlnlko4qPh9MM6nLLGIYMKsA5nltzo8Cg==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.12.3.tgz",
+      "integrity": "sha512-41OmulLqVZ0EOHmmHouJrpL59SwDD7FLoso4RsQVIBPaf8fHacdLo07Ye28VWQ5XolZQvnWcr1YXKo4JhqQMyw==",
       "cpu": [
         "arm64"
       ],
@@ -5121,9 +5121,9 @@
       ]
     },
     "node_modules/lefthook-freebsd-x64": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.12.2.tgz",
-      "integrity": "sha512-1hNY/irY+/3kjRzKoJYxG+m3BYI8QxopJUK1PQnknGo1Wy5u302SdX+tR7pnpz6JM5chrNw4ozSbKKOvdZ5VEw==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.12.3.tgz",
+      "integrity": "sha512-741/JRCJIS++hgYEH2uefN4FsH872V7gy2zDhcfQofiZnWP7+qhl4Wmwi8IpjIu4X7hLOC4cT18LOVU5L8KV9Q==",
       "cpu": [
         "x64"
       ],
@@ -5135,9 +5135,9 @@
       ]
     },
     "node_modules/lefthook-linux-arm64": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-1.12.2.tgz",
-      "integrity": "sha512-1W4swYIVRkxq/LFTuuK4oVpd6NtTKY4E3VY2Uq2JDkIOJV46+8qGBF+C/QA9K3O9chLffgN7c+i+NhIuGiZ/Vw==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-1.12.3.tgz",
+      "integrity": "sha512-BXIy1aDFZmFgmebJliNrEqZfX1lSOD4b/USvANv1UirFrNgTq5SRssd1CKfflT2PwKX6LsJTD4WabLLWZOxp9A==",
       "cpu": [
         "arm64"
       ],
@@ -5149,9 +5149,9 @@
       ]
     },
     "node_modules/lefthook-linux-x64": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.12.2.tgz",
-      "integrity": "sha512-J6VGuMfhq5iCsg1Pv7xULbuXC63gP5LaikT0PhkyBNMi3HQneZFDJ8k/sp0Ue9HkQv6QfWIo3/FgB9gz38MCFw==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.12.3.tgz",
+      "integrity": "sha512-FRdwdj5jsQAP2eVrtkVUqMqYNCbQ2Ix84izy29/BvLlu/hVypAGbDfUkgFnsmAd6ZsCBeYCEtPuqyg3E3SO0Rg==",
       "cpu": [
         "x64"
       ],
@@ -5163,9 +5163,9 @@
       ]
     },
     "node_modules/lefthook-openbsd-arm64": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-1.12.2.tgz",
-      "integrity": "sha512-wncDRW3ml24DaOyH22KINumjvCohswbQqbxyH2GORRCykSnE859cTjOrRIchTKBIARF7PSeGPUtS7EK0+oDbaw==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-1.12.3.tgz",
+      "integrity": "sha512-tch5wXY4GOjKAYohH7OFoxNdVHuUSYt2Pulo2VTkMYEG8IrvJnRO5MkvgHtKDHzU5mfABQYv5+ccJykDx5hQWA==",
       "cpu": [
         "arm64"
       ],
@@ -5177,9 +5177,9 @@
       ]
     },
     "node_modules/lefthook-openbsd-x64": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-1.12.2.tgz",
-      "integrity": "sha512-2jDOkCHNnc/oK/vR62hAf3vZb1EQ6Md2GjIlgZ/V7A3ztOsM8QZ5IxwYN3D1UOIR5ZnwMBy7PtmTJC/HJrig5w==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-1.12.3.tgz",
+      "integrity": "sha512-IHbHg/rUFXrAN7LnjcQEtutCHBaD49CZge96Hpk0GZ2eEG5GTCNRnUyEf+Kf3+RTqHFgwtADdpeDa/ZaGZTM4g==",
       "cpu": [
         "x64"
       ],
@@ -5191,9 +5191,9 @@
       ]
     },
     "node_modules/lefthook-windows-arm64": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-1.12.2.tgz",
-      "integrity": "sha512-ZMH/q6UNSidhHEG/1QoqIl1n4yPTBWuVmKx5bONtKHicoz4QCQ+QEiNjKsG5OO4C62nfyHGThmweCzZVUQECJw==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-1.12.3.tgz",
+      "integrity": "sha512-wghcE5TSpb+mbtemUV6uAo9hEK09kxRzhf2nPdeDX+fw42cL2TGZsbaCnDyzaY144C+L2/wEWrLIHJMnZYkuqA==",
       "cpu": [
         "arm64"
       ],
@@ -5205,9 +5205,9 @@
       ]
     },
     "node_modules/lefthook-windows-x64": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-1.12.2.tgz",
-      "integrity": "sha512-TqT2jIPcTQ9uwaw+v+DTmvnUHM/p7bbsSrPoPX+fRXSGLzFjyiY+12C9dObSwfCQq6rT70xqQJ9AmftJQsa5/Q==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-1.12.3.tgz",
+      "integrity": "sha512-7Co/L8e2x2hGC1L33jDJ4ZlTkO3PJm25GOGpLfN1kqwhGB/uzMLeTI/PBczjlIN8isUv26ouNd9rVR7Bibrwyg==",
       "cpu": [
         "x64"
       ],
@@ -7687,9 +7687,9 @@
       }
     },
     "node_modules/tsx": {
-      "version": "4.20.3",
-      "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz",
-      "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==",
+      "version": "4.20.4",
+      "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.4.tgz",
+      "integrity": "sha512-yyxBKfORQ7LuRt/BQKBXrpcq59ZvSW0XxwfjAt3w2/8PmdxaFzijtMhTawprSHhpzeM5BgU2hXHG3lklIERZXg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/package.json b/package.json
index 76cabb365c..a0b06af256 100644
--- a/package.json
+++ b/package.json
@@ -53,7 +53,7 @@
   },
   "man": "./man/zx.1",
   "files": [
-    "3rd-party-licenses",
+    "build/3rd-party-licenses",
     "build/cli.js",
     "build/core.js",
     "build/deno.js",
@@ -75,9 +75,10 @@
     "build:vendor": "node scripts/build-js.mjs --format=cjs --entry=src/vendor-*.ts --bundle=all --external='./internals.ts'",
     "build:versions": "node scripts/build-versions.mjs",
     "build:tests": "node scripts/build-tests.mjs",
-    "build:dts": "tsc --project tsconfig.json && rm build/repl.d.ts build/globals-jsr.d.ts && node scripts/build-dts.mjs",
+    "build:dts": "tsc --project tsconfig.json && node scripts/build-dts.mjs",
     "build:dcr": "docker build -f ./dcr/Dockerfile . -t zx",
     "build:jsr": "node scripts/build-jsr.mjs",
+    "postbuild": "node scripts/build-clean.mjs",
     "docs:dev": "vitepress dev docs",
     "docs:build": "vitepress build docs",
     "docs:preview": "vitepress preview docs",
@@ -118,12 +119,12 @@
     "chalk": "5.5.0",
     "create-require": "1.1.1",
     "cronometro": "5.3.0",
-    "depseek": "0.4.1",
+    "depseek": "0.4.3",
     "dts-bundle-generator": "9.5.1",
     "envapi": "0.2.3",
-    "esbuild": "0.25.8",
+    "esbuild": "0.25.9",
     "esbuild-node-externals": "1.18.0",
-    "esbuild-plugin-entry-chunks": "0.1.15",
+    "esbuild-plugin-entry-chunks": "0.1.17",
     "esbuild-plugin-extract-helpers": "0.0.6",
     "esbuild-plugin-hybrid-export": "0.3.1",
     "esbuild-plugin-resolve": "2.0.0",
@@ -133,7 +134,7 @@
     "get-port": "7.1.0",
     "globby": "14.1.0",
     "jsr": "0.13.5",
-    "lefthook": "1.12.2",
+    "lefthook": "1.12.3",
     "madge": "8.0.0",
     "minimist": "1.2.8",
     "node-fetch-native": "1.6.7",
@@ -141,7 +142,7 @@
     "size-limit": "11.2.0",
     "ts-node": "10.9.2",
     "tsd": "0.33.0",
-    "tsx": "4.20.3",
+    "tsx": "4.20.4",
     "typescript": "5.9.2",
     "vitepress": "1.6.4",
     "which": "5.0.0",
diff --git a/scripts/build-clean.mjs b/scripts/build-clean.mjs
new file mode 100644
index 0000000000..dd8ce19bb9
--- /dev/null
+++ b/scripts/build-clean.mjs
@@ -0,0 +1,35 @@
+#!/usr/bin/env node
+
+// Copyright 2025 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import fs from 'node:fs'
+import glob from 'fast-glob'
+
+const redundants = await glob(
+  [
+    'build/{repl,globals-jsr,internals}.d.ts',
+    'build/{deps,internals,util,vendor*}.js',
+  ],
+  {
+    onlyFiles: true,
+    absolute: true,
+  }
+)
+
+for (const file of redundants) {
+  fs.unlinkSync(file)
+}
+
+console.log('postbuild removed', redundants)
diff --git a/scripts/prepublish-lite.mjs b/scripts/prepublish-lite.mjs
index 3702988199..ba84bc80c2 100644
--- a/scripts/prepublish-lite.mjs
+++ b/scripts/prepublish-lite.mjs
@@ -12,16 +12,34 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-// Prepares lite (core) version of zx to publish
+// Prepares a lite (core) version of zx to publish
 
 import fs from 'node:fs'
 import path from 'node:path'
+import { depseekSync } from 'depseek'
 
 const __dirname = path.dirname(new URL(import.meta.url).pathname)
 const root = path.resolve(__dirname, '..')
 const pkgJsonFile = path.join(root, 'package.json')
 const _pkgJson = JSON.parse(fs.readFileSync(pkgJsonFile, 'utf-8'))
 
+const files = new Set()
+const entries = new Set(['./core.js', './3rd-party-licenses'])
+
+for (const entry of entries) {
+  if (!fs.existsSync(path.join(root, 'build', entry))) continue
+
+  files.add(entry)
+  const contents = fs.readFileSync(path.join(root, 'build', entry), 'utf-8')
+  const deps = depseekSync(contents)
+  for (const { value: file } of deps) {
+    if (file.startsWith('.')) {
+      entries.add(file)
+      entries.add(file.replace(/\.c?js$/, '.d.ts'))
+    }
+  }
+}
+
 const pkgJson = {
   ..._pkgJson,
   version: _pkgJson.version + '-lite',
@@ -42,22 +60,7 @@ const pkgJson = {
     },
   },
   man: undefined,
-  files: [
-    'build/3rd-party-licenses',
-    'build/core.cjs',
-    'build/core.js',
-    'build/core.d.ts',
-    'build/deno.js',
-    'build/error.d.ts',
-    'build/esblib.cjs',
-    'build/log.d.ts',
-    'build/util.cjs',
-    'build/util.js',
-    'build/util.d.ts',
-    'build/vendor-core.cjs',
-    'build/vendor-core.js',
-    'build/vendor-core.d.ts',
-  ],
+  files: [...files].map((f) => path.join('build', f)).sort(),
 }
 
 fs.writeFileSync(pkgJsonFile, JSON.stringify(pkgJson, null, 2))
diff --git a/src/versions.ts b/src/versions.ts
index 2f9898b3cf..0b13fd852e 100644
--- a/src/versions.ts
+++ b/src/versions.ts
@@ -15,7 +15,7 @@
 export const versions: Record<string, string> = {
   zx: '8.8.0',
   chalk: '5.5.0',
-  depseek: '0.4.1',
+  depseek: '0.4.3',
   dotenv: '0.2.3',
   fetch: '1.6.7',
   fs: '11.3.1',


Test patch:
diff --git a/scripts/build-tests.mjs b/scripts/build-tests.mjs
index 56a0456407..cd2b6bd4f3 100644
--- a/scripts/build-tests.mjs
+++ b/scripts/build-tests.mjs
@@ -16,7 +16,6 @@
 
 import fs from 'node:fs'
 import path from 'node:path'
-import * as vendor from '../build/vendor.js'
 import * as core from '../build/core.js'
 import * as cli from '../build/cli.js'
 import * as index from '../build/index.js'
@@ -26,7 +25,6 @@ const modules = [
   ['core', core],
   ['cli', cli],
   ['index', index],
-  ['vendor', vendor, ['chalk', 'depseek', 'dotenv', 'fs', 'glob', 'minimist', 'ps', 'which', 'YAML',]],
 ]
 const root = path.resolve(new URL(import.meta.url).pathname, '../..')
 const filePath = path.resolve(root, `test/export.test.js`)
@@ -42,7 +40,7 @@ import { test, describe } from 'node:test'`
 let body = '\n'
 
 for (const [name, ref, apis = Object.keys(ref).sort()] of modules) {
-  head += `\nimport * as ${name} from '../build/${name}.js'`
+  head += `\nimport * as ${name} from '../build/${name}.cjs'`
   body += `\n//prettier-ignore\ndescribe('${name}', () => {\n`
   body += `  test('exports', () => {\n`
   for (const r of apis) {
diff --git a/test/core.test.js b/test/core.test.js
index 669c69af9b..fee1e5fb49 100644
--- a/test/core.test.js
+++ b/test/core.test.js
@@ -46,7 +46,7 @@ import {
   nothrow,
   fetch,
 } from '../build/index.js'
-import { noop } from '../build/util.js'
+import { noop } from '../build/util.cjs'
 import { EventEmitter } from 'node:events'
 
 describe('core', () => {
@@ -982,7 +982,7 @@ describe('core', () => {
         p1.pipe(p3)
         p2.pipe(p3)
 
-        setTimeout(() => p1.unpipe(p3), 180)
+        setTimeout(() => p1.unpipe(p3), 150)
 
         const { stdout } = await p3
         assert.equal(stdout, 'foo\n1\nbar\n2\n3\n')
diff --git a/test/deps.test.js b/test/deps.test.js
index 492c672216..3d59ac6039 100644
--- a/test/deps.test.js
+++ b/test/deps.test.js
@@ -15,7 +15,7 @@
 import assert from 'node:assert'
 import { test, describe } from 'node:test'
 import { $, tmpfile, tmpdir, fs, path } from '../build/index.js'
-import { installDeps, parseDeps } from '../build/deps.js'
+import { installDeps, parseDeps } from '../build/deps.cjs'
 
 const __dirname = new URL('.', import.meta.url).pathname
 const root = path.resolve(__dirname, '..')
diff --git a/test/export.test.js b/test/export.test.js
index f2b4ad519b..436e9d4588 100644
--- a/test/export.test.js
+++ b/test/export.test.js
@@ -14,10 +14,9 @@
 
 import assert from 'node:assert'
 import { test, describe } from 'node:test'
-import * as core from '../build/core.js'
-import * as cli from '../build/cli.js'
-import * as index from '../build/index.js'
-import * as vendor from '../build/vendor.js'
+import * as core from '../build/core.cjs'
+import * as cli from '../build/cli.cjs'
+import * as index from '../build/index.cjs'
 
 //prettier-ignore
 describe('core', () => {
@@ -493,222 +492,3 @@ describe('index', () => {
     assert.equal(typeof index.within, 'function', 'index.within')
   })
 })
-
-//prettier-ignore
-describe('vendor', () => {
-  test('exports', () => {
-    assert.equal(typeof vendor.chalk, 'function', 'vendor.chalk')
-    assert.equal(typeof vendor.chalk.level, 'number', 'vendor.chalk.level')
-    assert.equal(typeof vendor.depseek, 'function', 'vendor.depseek')
-    assert.equal(typeof vendor.dotenv, 'object', 'vendor.dotenv')
-    assert.equal(typeof vendor.dotenv.config, 'function', 'vendor.dotenv.config')
-    assert.equal(typeof vendor.dotenv.load, 'function', 'vendor.dotenv.load')
-    assert.equal(typeof vendor.dotenv.loadSafe, 'function', 'vendor.dotenv.loadSafe')
-    assert.equal(typeof vendor.dotenv.parse, 'function', 'vendor.dotenv.parse')
-    assert.equal(typeof vendor.dotenv.stringify, 'function', 'vendor.dotenv.stringify')
-    assert.equal(typeof vendor.fs, 'object', 'vendor.fs')
-    assert.equal(typeof vendor.fs.Dir, 'function', 'vendor.fs.Dir')
-    assert.equal(typeof vendor.fs.Dirent, 'function', 'vendor.fs.Dirent')
-    assert.equal(typeof vendor.fs.F_OK, 'number', 'vendor.fs.F_OK')
-    assert.equal(typeof vendor.fs.FileReadStream, 'function', 'vendor.fs.FileReadStream')
-    assert.equal(typeof vendor.fs.FileWriteStream, 'function', 'vendor.fs.FileWriteStream')
-    assert.equal(typeof vendor.fs.R_OK, 'number', 'vendor.fs.R_OK')
-    assert.equal(typeof vendor.fs.ReadStream, 'function', 'vendor.fs.ReadStream')
-    assert.equal(typeof vendor.fs.Stats, 'function', 'vendor.fs.Stats')
-    assert.equal(typeof vendor.fs.W_OK, 'number', 'vendor.fs.W_OK')
-    assert.equal(typeof vendor.fs.WriteStream, 'function', 'vendor.fs.WriteStream')
-    assert.equal(typeof vendor.fs.X_OK, 'number', 'vendor.fs.X_OK')
-    assert.equal(typeof vendor.fs._toUnixTimestamp, 'function', 'vendor.fs._toUnixTimestamp')
-    assert.equal(typeof vendor.fs.access, 'function', 'vendor.fs.access')
-    assert.equal(typeof vendor.fs.accessSync, 'function', 'vendor.fs.accessSync')
-    assert.equal(typeof vendor.fs.appendFile, 'function', 'vendor.fs.appendFile')
-    assert.equal(typeof vendor.fs.appendFileSync, 'function', 'vendor.fs.appendFileSync')
-    assert.equal(typeof vendor.fs.chmod, 'function', 'vendor.fs.chmod')
-    assert.equal(typeof vendor.fs.chmodSync, 'function', 'vendor.fs.chmodSync')
-    assert.equal(typeof vendor.fs.chown, 'function', 'vendor.fs.chown')
-    assert.equal(typeof vendor.fs.chownSync, 'function', 'vendor.fs.chownSync')
-    assert.equal(typeof vendor.fs.close, 'function', 'vendor.fs.close')
-    assert.equal(typeof vendor.fs.closeSync, 'function', 'vendor.fs.closeSync')
-    assert.equal(typeof vendor.fs.constants, 'object', 'vendor.fs.constants')
-    assert.equal(typeof vendor.fs.copy, 'function', 'vendor.fs.copy')
-    assert.equal(typeof vendor.fs.copyFile, 'function', 'vendor.fs.copyFile')
-    assert.equal(typeof vendor.fs.copyFileSync, 'function', 'vendor.fs.copyFileSync')
-    assert.equal(typeof vendor.fs.copySync, 'function', 'vendor.fs.copySync')
-    assert.equal(typeof vendor.fs.cp, 'function', 'vendor.fs.cp')
-    assert.equal(typeof vendor.fs.cpSync, 'function', 'vendor.fs.cpSync')
-    assert.equal(typeof vendor.fs.createFile, 'function', 'vendor.fs.createFile')
-    assert.equal(typeof vendor.fs.createFileSync, 'function', 'vendor.fs.createFileSync')
-    assert.equal(typeof vendor.fs.createLink, 'function', 'vendor.fs.createLink')
-    assert.equal(typeof vendor.fs.createLinkSync, 'function', 'vendor.fs.createLinkSync')
-    assert.equal(typeof vendor.fs.createReadStream, 'function', 'vendor.fs.createReadStream')
-    assert.equal(typeof vendor.fs.createSymlink, 'function', 'vendor.fs.createSymlink')
-    assert.equal(typeof vendor.fs.createSymlinkSync, 'function', 'vendor.fs.createSymlinkSync')
-    assert.equal(typeof vendor.fs.createWriteStream, 'function', 'vendor.fs.createWriteStream')
-    assert.equal(typeof vendor.fs.default, 'object', 'vendor.fs.default')
-    assert.equal(typeof vendor.fs.emptyDir, 'function', 'vendor.fs.emptyDir')
-    assert.equal(typeof vendor.fs.emptyDirSync, 'function', 'vendor.fs.emptyDirSync')
-    assert.equal(typeof vendor.fs.emptydir, 'function', 'vendor.fs.emptydir')
-    assert.equal(typeof vendor.fs.emptydirSync, 'function', 'vendor.fs.emptydirSync')
-    assert.equal(typeof vendor.fs.ensureDir, 'function', 'vendor.fs.ensureDir')
-    assert.equal(typeof vendor.fs.ensureDirSync, 'function', 'vendor.fs.ensureDirSync')
-    assert.equal(typeof vendor.fs.ensureFile, 'function', 'vendor.fs.ensureFile')
-    assert.equal(typeof vendor.fs.ensureFileSync, 'function', 'vendor.fs.ensureFileSync')
-    assert.equal(typeof vendor.fs.ensureLink, 'function', 'vendor.fs.ensureLink')
-    assert.equal(typeof vendor.fs.ensureLinkSync, 'function', 'vendor.fs.ensureLinkSync')
-    assert.equal(typeof vendor.fs.ensureSymlink, 'function', 'vendor.fs.ensureSymlink')
-    assert.equal(typeof vendor.fs.ensureSymlinkSync, 'function', 'vendor.fs.ensureSymlinkSync')
-    assert.equal(typeof vendor.fs.exists, 'function', 'vendor.fs.exists')
-    assert.equal(typeof vendor.fs.existsSync, 'function', 'vendor.fs.existsSync')
-    assert.equal(typeof vendor.fs.fchmod, 'function', 'vendor.fs.fchmod')
-    assert.equal(typeof vendor.fs.fchmodSync, 'function', 'vendor.fs.fchmodSync')
-    assert.equal(typeof vendor.fs.fchown, 'function', 'vendor.fs.fchown')
-    assert.equal(typeof vendor.fs.fchownSync, 'function', 'vendor.fs.fchownSync')
-    assert.equal(typeof vendor.fs.fdatasync, 'function', 'vendor.fs.fdatasync')
-    assert.equal(typeof vendor.fs.fdatasyncSync, 'function', 'vendor.fs.fdatasyncSync')
-    assert.equal(typeof vendor.fs.fstat, 'function', 'vendor.fs.fstat')
-    assert.equal(typeof vendor.fs.fstatSync, 'function', 'vendor.fs.fstatSync')
-    assert.equal(typeof vendor.fs.fsync, 'function', 'vendor.fs.fsync')
-    assert.equal(typeof vendor.fs.fsyncSync, 'function', 'vendor.fs.fsyncSync')
-    assert.equal(typeof vendor.fs.ftruncate, 'function', 'vendor.fs.ftruncate')
-    assert.equal(typeof vendor.fs.ftruncateSync, 'function', 'vendor.fs.ftruncateSync')
-    assert.equal(typeof vendor.fs.futimes, 'function', 'vendor.fs.futimes')
-    assert.equal(typeof vendor.fs.futimesSync, 'function', 'vendor.fs.futimesSync')
-    assert.equal(typeof vendor.fs.glob, 'function', 'vendor.fs.glob')
-    assert.equal(typeof vendor.fs.globSync, 'function', 'vendor.fs.globSync')
-    assert.equal(typeof vendor.fs.gracefulify, 'function', 'vendor.fs.gracefulify')
-    assert.equal(typeof vendor.fs.lchmod, 'function', 'vendor.fs.lchmod')
-    assert.equal(typeof vendor.fs.lchmodSync, 'function', 'vendor.fs.lchmodSync')
-    assert.equal(typeof vendor.fs.lchown, 'function', 'vendor.fs.lchown')
-    assert.equal(typeof vendor.fs.lchownSync, 'function', 'vendor.fs.lchownSync')
-    assert.equal(typeof vendor.fs.link, 'function', 'vendor.fs.link')
-    assert.equal(typeof vendor.fs.linkSync, 'function', 'vendor.fs.linkSync')
-    assert.equal(typeof vendor.fs.lstat, 'function', 'vendor.fs.lstat')
-    assert.equal(typeof vendor.fs.lstatSync, 'function', 'vendor.fs.lstatSync')
-    assert.equal(typeof vendor.fs.lutimes, 'function', 'vendor.fs.lutimes')
-    assert.equal(typeof vendor.fs.lutimesSync, 'function', 'vendor.fs.lutimesSync')
-    assert.equal(typeof vendor.fs.mkdir, 'function', 'vendor.fs.mkdir')
-    assert.equal(typeof vendor.fs.mkdirSync, 'function', 'vendor.fs.mkdirSync')
-    assert.equal(typeof vendor.fs.mkdirp, 'function', 'vendor.fs.mkdirp')
-    assert.equal(typeof vendor.fs.mkdirpSync, 'function', 'vendor.fs.mkdirpSync')
-    assert.equal(typeof vendor.fs.mkdirs, 'function', 'vendor.fs.mkdirs')
-    assert.equal(typeof vendor.fs.mkdirsSync, 'function', 'vendor.fs.mkdirsSync')
-    assert.equal(typeof vendor.fs.mkdtemp, 'function', 'vendor.fs.mkdtemp')
-    assert.equal(typeof vendor.fs.mkdtempSync, 'function', 'vendor.fs.mkdtempSync')
-    assert.equal(typeof vendor.fs.move, 'function', 'vendor.fs.move')
-    assert.equal(typeof vendor.fs.moveSync, 'function', 'vendor.fs.moveSync')
-    assert.equal(typeof vendor.fs.open, 'function', 'vendor.fs.open')
-    assert.equal(typeof vendor.fs.openAsBlob, 'function', 'vendor.fs.openAsBlob')
-    assert.equal(typeof vendor.fs.openSync, 'function', 'vendor.fs.openSync')
-    assert.equal(typeof vendor.fs.opendir, 'function', 'vendor.fs.opendir')
-    assert.equal(typeof vendor.fs.opendirSync, 'function', 'vendor.fs.opendirSync')
-    assert.equal(typeof vendor.fs.outputFile, 'function', 'vendor.fs.outputFile')
-    assert.equal(typeof vendor.fs.outputFileSync, 'function', 'vendor.fs.outputFileSync')
-    assert.equal(typeof vendor.fs.outputJSON, 'function', 'vendor.fs.outputJSON')
-    assert.equal(typeof vendor.fs.outputJSONSync, 'function', 'vendor.fs.outputJSONSync')
-    assert.equal(typeof vendor.fs.outputJson, 'function', 'vendor.fs.outputJson')
-    assert.equal(typeof vendor.fs.outputJsonSync, 'function', 'vendor.fs.outputJsonSync')
-    assert.equal(typeof vendor.fs.pathExists, 'function', 'vendor.fs.pathExists')
-    assert.equal(typeof vendor.fs.pathExistsSync, 'function', 'vendor.fs.pathExistsSync')
-    assert.equal(typeof vendor.fs.promises, 'object', 'vendor.fs.promises')
-    assert.equal(typeof vendor.fs.read, 'function', 'vendor.fs.read')
-    assert.equal(typeof vendor.fs.readFile, 'function', 'vendor.fs.readFile')
-    assert.equal(typeof vendor.fs.readFileSync, 'function', 'vendor.fs.readFileSync')
-    assert.equal(typeof vendor.fs.readJSON, 'function', 'vendor.fs.readJSON')
-    assert.equal(typeof vendor.fs.readJSONSync, 'function', 'vendor.fs.readJSONSync')
-    assert.equal(typeof vendor.fs.readJson, 'function', 'vendor.fs.readJson')
-    assert.equal(typeof vendor.fs.readJsonSync, 'function', 'vendor.fs.readJsonSync')
-    assert.equal(typeof vendor.fs.readSync, 'function', 'vendor.fs.readSync')
-    assert.equal(typeof vendor.fs.readdir, 'function', 'vendor.fs.readdir')
-    assert.equal(typeof vendor.fs.readdirSync, 'function', 'vendor.fs.readdirSync')
-    assert.equal(typeof vendor.fs.readlink, 'function', 'vendor.fs.readlink')
-    assert.equal(typeof vendor.fs.readlinkSync, 'function', 'vendor.fs.readlinkSync')
-    assert.equal(typeof vendor.fs.readv, 'function', 'vendor.fs.readv')
-    assert.equal(typeof vendor.fs.readvSync, 'function', 'vendor.fs.readvSync')
-    assert.equal(typeof vendor.fs.realpath, 'function', 'vendor.fs.realpath')
-    assert.equal(typeof vendor.fs.realpathSync, 'function', 'vendor.fs.realpathSync')
-    assert.equal(typeof vendor.fs.remove, 'function', 'vendor.fs.remove')
-    assert.equal(typeof vendor.fs.removeSync, 'function', 'vendor.fs.removeSync')
-    assert.equal(typeof vendor.fs.rename, 'function', 'vendor.fs.rename')
-    assert.equal(typeof vendor.fs.renameSync, 'function', 'vendor.fs.renameSync')
-    assert.equal(typeof vendor.fs.rm, 'function', 'vendor.fs.rm')
-    assert.equal(typeof vendor.fs.rmSync, 'function', 'vendor.fs.rmSync')
-    assert.equal(typeof vendor.fs.rmdir, 'function', 'vendor.fs.rmdir')
-    assert.equal(typeof vendor.fs.rmdirSync, 'function', 'vendor.fs.rmdirSync')
-    assert.equal(typeof vendor.fs.stat, 'function', 'vendor.fs.stat')
-    assert.equal(typeof vendor.fs.statSync, 'function', 'vendor.fs.statSync')
-    assert.equal(typeof vendor.fs.statfs, 'function', 'vendor.fs.statfs')
-    assert.equal(typeof vendor.fs.statfsSync, 'function', 'vendor.fs.statfsSync')
-    assert.equal(typeof vendor.fs.symlink, 'function', 'vendor.fs.symlink')
-    assert.equal(typeof vendor.fs.symlinkSync, 'function', 'vendor.fs.symlinkSync')
-    assert.equal(typeof vendor.fs.truncate, 'function', 'vendor.fs.truncate')
-    assert.equal(typeof vendor.fs.truncateSync, 'function', 'vendor.fs.truncateSync')
-    assert.equal(typeof vendor.fs.unlink, 'function', 'vendor.fs.unlink')
-    assert.equal(typeof vendor.fs.unlinkSync, 'function', 'vendor.fs.unlinkSync')
-    assert.equal(typeof vendor.fs.unwatchFile, 'function', 'vendor.fs.unwatchFile')
-    assert.equal(typeof vendor.fs.utimes, 'function', 'vendor.fs.utimes')
-    assert.equal(typeof vendor.fs.utimesSync, 'function', 'vendor.fs.utimesSync')
-    assert.equal(typeof vendor.fs.watch, 'function', 'vendor.fs.watch')
-    assert.equal(typeof vendor.fs.watchFile, 'function', 'vendor.fs.watchFile')
-    assert.equal(typeof vendor.fs.write, 'function', 'vendor.fs.write')
-    assert.equal(typeof vendor.fs.writeFile, 'function', 'vendor.fs.writeFile')
-    assert.equal(typeof vendor.fs.writeFileSync, 'function', 'vendor.fs.writeFileSync')
-    assert.equal(typeof vendor.fs.writeJSON, 'function', 'vendor.fs.writeJSON')
-    assert.equal(typeof vendor.fs.writeJSONSync, 'function', 'vendor.fs.writeJSONSync')
-    assert.equal(typeof vendor.fs.writeJson, 'function', 'vendor.fs.writeJson')
-    assert.equal(typeof vendor.fs.writeJsonSync, 'function', 'vendor.fs.writeJsonSync')
-    assert.equal(typeof vendor.fs.writeSync, 'function', 'vendor.fs.writeSync')
-    assert.equal(typeof vendor.fs.writev, 'function', 'vendor.fs.writev')
-    assert.equal(typeof vendor.fs.writevSync, 'function', 'vendor.fs.writevSync')
-    assert.equal(typeof vendor.glob, 'function', 'vendor.glob')
-    assert.equal(typeof vendor.glob.convertPathToPattern, 'function', 'vendor.glob.convertPathToPattern')
-    assert.equal(typeof vendor.glob.generateGlobTasks, 'function', 'vendor.glob.generateGlobTasks')
-    assert.equal(typeof vendor.glob.generateGlobTasksSync, 'function', 'vendor.glob.generateGlobTasksSync')
-    assert.equal(typeof vendor.glob.globby, 'function', 'vendor.glob.globby')
-    assert.equal(typeof vendor.glob.globbyStream, 'function', 'vendor.glob.globbyStream')
-    assert.equal(typeof vendor.glob.globbySync, 'function', 'vendor.glob.globbySync')
-    assert.equal(typeof vendor.glob.isDynamicPattern, 'function', 'vendor.glob.isDynamicPattern')
-    assert.equal(typeof vendor.glob.isGitIgnored, 'function', 'vendor.glob.isGitIgnored')
-    assert.equal(typeof vendor.glob.isGitIgnoredSync, 'function', 'vendor.glob.isGitIgnoredSync')
-    assert.equal(typeof vendor.glob.sync, 'function', 'vendor.glob.sync')
-    assert.equal(typeof vendor.minimist, 'function', 'vendor.minimist')
-    assert.equal(typeof vendor.ps, 'object', 'vendor.ps')
-    assert.equal(typeof vendor.ps.kill, 'function', 'vendor.ps.kill')
-    assert.equal(typeof vendor.ps.lookup, 'function', 'vendor.ps.lookup')
-    assert.equal(typeof vendor.ps.lookupSync, 'function', 'vendor.ps.lookupSync')
-    assert.equal(typeof vendor.ps.tree, 'function', 'vendor.ps.tree')
-    assert.equal(typeof vendor.ps.treeSync, 'function', 'vendor.ps.treeSync')
-    assert.equal(typeof vendor.which, 'function', 'vendor.which')
-    assert.equal(typeof vendor.which.sync, 'function', 'vendor.which.sync')
-    assert.equal(typeof vendor.YAML, 'object', 'vendor.YAML')
-    assert.equal(typeof vendor.YAML.Alias, 'function', 'vendor.YAML.Alias')
-    assert.equal(typeof vendor.YAML.CST, 'object', 'vendor.YAML.CST')
-    assert.equal(typeof vendor.YAML.Composer, 'function', 'vendor.YAML.Composer')
-    assert.equal(typeof vendor.YAML.Document, 'function', 'vendor.YAML.Document')
-    assert.equal(typeof vendor.YAML.Lexer, 'function', 'vendor.YAML.Lexer')
-    assert.equal(typeof vendor.YAML.LineCounter, 'function', 'vendor.YAML.LineCounter')
-    assert.equal(typeof vendor.YAML.Pair, 'function', 'vendor.YAML.Pair')
-    assert.equal(typeof vendor.YAML.Parser, 'function', 'vendor.YAML.Parser')
-    assert.equal(typeof vendor.YAML.Scalar, 'function', 'vendor.YAML.Scalar')
-    assert.equal(typeof vendor.YAML.Schema, 'function', 'vendor.YAML.Schema')
-    assert.equal(typeof vendor.YAML.YAMLError, 'function', 'vendor.YAML.YAMLError')
-    assert.equal(typeof vendor.YAML.YAMLMap, 'function', 'vendor.YAML.YAMLMap')
-    assert.equal(typeof vendor.YAML.YAMLParseError, 'function', 'vendor.YAML.YAMLParseError')
-    assert.equal(typeof vendor.YAML.YAMLSeq, 'function', 'vendor.YAML.YAMLSeq')
-    assert.equal(typeof vendor.YAML.YAMLWarning, 'function', 'vendor.YAML.YAMLWarning')
-    assert.equal(typeof vendor.YAML.default, 'object', 'vendor.YAML.default')
-    assert.equal(typeof vendor.YAML.isAlias, 'function', 'vendor.YAML.isAlias')
-    assert.equal(typeof vendor.YAML.isCollection, 'function', 'vendor.YAML.isCollection')
-    assert.equal(typeof vendor.YAML.isDocument, 'function', 'vendor.YAML.isDocument')
-    assert.equal(typeof vendor.YAML.isMap, 'function', 'vendor.YAML.isMap')
-    assert.equal(typeof vendor.YAML.isNode, 'function', 'vendor.YAML.isNode')
-    assert.equal(typeof vendor.YAML.isPair, 'function', 'vendor.YAML.isPair')
-    assert.equal(typeof vendor.YAML.isScalar, 'function', 'vendor.YAML.isScalar')
-    assert.equal(typeof vendor.YAML.isSeq, 'function', 'vendor.YAML.isSeq')
-    assert.equal(typeof vendor.YAML.parse, 'function', 'vendor.YAML.parse')
-    assert.equal(typeof vendor.YAML.parseAllDocuments, 'function', 'vendor.YAML.parseAllDocuments')
-    assert.equal(typeof vendor.YAML.parseDocument, 'function', 'vendor.YAML.parseDocument')
-    assert.equal(typeof vendor.YAML.stringify, 'function', 'vendor.YAML.stringify')
-    assert.equal(typeof vendor.YAML.visit, 'function', 'vendor.YAML.visit')
-    assert.equal(typeof vendor.YAML.visitAsync, 'function', 'vendor.YAML.visitAsync')
-  })
-})
diff --git a/test/package.test.js b/test/package.test.js
index 91844d24b0..e556b53c0d 100644
--- a/test/package.test.js
+++ b/test/package.test.js
@@ -13,91 +13,177 @@
 // limitations under the License.
 
 import assert from 'node:assert'
-import { test, describe, after, before } from 'node:test'
-import { $, within, path, glob } from '../build/index.js'
+import { test, describe } from 'node:test'
+import { $, within, path, glob, tempdir, fs } from '../build/index.js'
 
 const __dirname = new URL('.', import.meta.url).pathname
 const root = path.resolve(__dirname, '..')
 
 describe('package', () => {
-  before(async () => {
-    const pack = await $`npm pack`
-    await $`tar xf ${pack}`
-    await $`rm ${pack}`.nothrow()
-  })
-  after(async () => {
-    await $`rm -rf package`
-  })
-
-  test('content looks fine', async () => {
-    const files = await glob('**/*', {
-      cwd: path.resolve(root, 'package'),
-      absolute: false,
-      onlyFiles: true,
+  describe('work mode', () => {
+    test('ts', async () => {
+      const out = await within(async () => {
+        $.cwd = path.resolve(root, 'test/fixtures/ts-project')
+        await $`npm i --no-package-lock`
+        try {
+          await $`npx tsc`
+        } catch (err) {
+          throw new Error(err.stdout)
+        }
+        return $`node build/script.js`
+      })
+      assert.match(out.stderr, /ts-script/)
     })
-    assert.deepEqual(
-      files.sort(),
-      [
-        'LICENSE',
-        'README.md',
-        'package.json',
-        'man/zx.1',
-        'build/cli.cjs',
-        'build/cli.d.ts',
-        'build/cli.js',
-        'build/core.cjs',
-        'build/core.d.ts',
-        'build/core.js',
-        'build/deno.js',
-        'build/deps.cjs',
-        'build/deps.d.ts',
-        'build/error.d.ts',
-        'build/esblib.cjs',
-        'build/globals.cjs',
-        'build/globals.d.ts',
-        'build/globals.js',
-        'build/goods.d.ts',
-        'build/index.cjs',
-        'build/index.d.ts',
-        'build/index.js',
-        'build/internals.cjs',
-        'build/internals.d.ts',
-        'build/log.d.ts',
-        'build/md.d.ts',
-        'build/util.cjs',
-        'build/util.d.ts',
-        'build/versions.d.ts',
-        'build/vendor-core.cjs',
-        'build/vendor-core.d.ts',
-        'build/vendor-extra.cjs',
-        'build/vendor-extra.d.ts',
-        'build/vendor.cjs',
-        'build/vendor.d.ts',
-        'build/3rd-party-licenses',
-      ].sort()
-    )
-  })
 
-  test('ts project', async () => {
-    const out = await within(async () => {
-      $.cwd = path.resolve(__dirname, 'fixtures/ts-project')
-      await $`npm i --no-package-lock`
-      try {
-        await $`npx tsc`
-      } catch (err) {
-        throw new Error(err.stdout)
-      }
-      return $`node build/script.js`
+    test('js', async () => {
+      const out = await within(async () => {
+        $.cwd = path.resolve(root, 'test/fixtures/js-project')
+        await $`npm i --no-package-lock`
+        return $`node node_modules/zx/build/cli.js --verbose script.js`
+      })
+      assert.match(out.stderr, /js-script/)
     })
-    assert.match(out.stderr, /ts-script/)
   })
 
-  test('js project with zx', async () => {
-    const out = await within(async () => {
-      $.cwd = path.resolve(__dirname, 'fixtures/js-project')
-      await $`npm i --no-package-lock`
-      return $`node node_modules/zx/build/cli.js --verbose script.js`
-    })
-    assert.match(out.stderr, /js-script/)
+  describe('contents', () => {
+    test('zx full', async () =>
+      within(async () => {
+        const tmp = tempdir()
+        $.cwd = tmp
+        $.quiet = true
+
+        // link
+        await $`ln -s ${path.resolve(root, 'node_modules')} ${path.resolve(tmp, 'node_modules')}`
+        for (const entry of [
+          'scripts',
+          'build',
+          'man',
+          'package.json',
+          'README.md',
+          'LICENSE',
+        ]) {
+          await fs.copy(path.resolve(root, entry), path.join(tmp, entry))
+        }
+
+        // pack / unpack
+        await $`node scripts/prepublish-clean.mjs`
+        const pack = await $`npm pack`
+        await $`tar xf ${pack}`
+        await $`rm ${pack}`.nothrow()
+
+        // run
+        const { stderr } =
+          await $`node -e 'import {$} from "./package/build/core.js"; $.verbose = true; await $\`echo hello\`'`
+        assert.match(stderr, /hello/)
+
+        // contents
+        const files = await glob('**/*', {
+          cwd: path.resolve(tmp, 'package'),
+          absolute: false,
+          onlyFiles: true,
+        })
+        assert.deepEqual(
+          files.sort(),
+          [
+            'LICENSE',
+            'README.md',
+            'package.json',
+            'man/zx.1',
+            'build/cli.cjs',
+            'build/cli.d.ts',
+            'build/cli.js',
+            'build/core.cjs',
+            'build/core.d.ts',
+            'build/core.js',
+            'build/deno.js',
+            'build/deps.cjs',
+            'build/deps.d.ts',
+            'build/error.d.ts',
+            'build/esblib.cjs',
+            'build/globals.cjs',
+            'build/globals.d.ts',
+            'build/globals.js',
+            'build/goods.d.ts',
+            'build/index.cjs',
+            'build/index.d.ts',
+            'build/index.js',
+            'build/internals.cjs',
+            'build/log.d.ts',
+            'build/md.d.ts',
+            'build/util.cjs',
+            'build/util.d.ts',
+            'build/versions.d.ts',
+            'build/vendor-core.cjs',
+            'build/vendor-core.d.ts',
+            'build/vendor-extra.cjs',
+            'build/vendor-extra.d.ts',
+            'build/vendor.cjs',
+            'build/vendor.d.ts',
+            'build/3rd-party-licenses',
+          ].sort()
+        )
+      }))
+
+    test('zx@lite', async () =>
+      within(async () => {
+        const tmp = tempdir()
+        $.cwd = tmp
+        $.quiet = true
+
+        // link
+        await $`ln -s ${path.resolve(root, 'node_modules')} ${path.resolve(tmp, 'node_modules')}`
+        for (const entry of [
+          'build',
+          'package.json',
+          'README.md',
+          'LICENSE',
+          'scripts',
+        ]) {
+          await fs.copy(path.resolve(root, entry), path.join(tmp, entry))
+        }
+
+        // prepare package.json for lite
+        await $`node scripts/prepublish-lite.mjs`
+        await $`node scripts/prepublish-clean.mjs`
+
+        // pack / unpack
+        const pack = await $`npm pack`
+        await $`tar xf ${pack}`
+        await $`rm ${pack}`.nothrow()
+
+        // run
+        const { stderr } =
+          await $`node -e 'import {$} from "./package/build/core.js"; $.verbose = true; await $\`echo hello\`'`
+        assert.match(stderr, /hello/)
+
+        // contents
+        const files = await glob('**/*', {
+          cwd: path.resolve(tmp, 'package'),
+          absolute: false,
+          onlyFiles: true,
+        })
+        assert.deepEqual(
+          files.sort(),
+          [
+            'LICENSE',
+            'README.md',
+            'build/3rd-party-licenses',
+            'build/cli.js',
+            'build/core.cjs',
+            'build/core.d.ts',
+            'build/core.js',
+            'build/deno.js',
+            'build/error.d.ts',
+            'build/esblib.cjs',
+            'build/internals.cjs',
+            'build/log.d.ts',
+            'build/util.cjs',
+            'build/util.d.ts',
+            'build/vendor-core.cjs',
+            'build/vendor-core.d.ts',
+            'package.json',
+          ].sort()
+        )
+      }))
   })
 })
diff --git a/test/util.test.js b/test/util.test.js
index 226d53351a..654813b106 100644
--- a/test/util.test.js
+++ b/test/util.test.js
@@ -29,7 +29,7 @@ import {
   preferLocalBin,
   toCamelCase,
   getLast,
-} from '../build/util.js'
+} from '../build/util.cjs'
 
 describe('util', () => {
   test('randomId()', () => {
diff --git a/test/vendor.test.js b/test/vendor.test.js
index 0bcf47e1e0..c7b0ef96a9 100644
--- a/test/vendor.test.js
+++ b/test/vendor.test.js
@@ -20,7 +20,7 @@ import {
   which,
   glob,
   nodeFetch as fetch,
-} from '../build/vendor.js'
+} from '../build/vendor.cjs'
 
 describe('vendor API', () => {
   test('YAML.parse', () => {