Hey all!
As the title says, fix(jsr): extract version from url by antongolub · Pull Request #1193 · google/zx (released in Release 8.5.3 — Trap Master · google/zx) seems to break compatibility with Node < v22.1.0.
zx/src/index.ts at 4cd098058bb6a7f6afaf5950e8bca329de515244 · google/zx at line 25 uses URL.parse. But URL.parse was only added in Node v22.1.0 ([URL | Node.js v24.4.1 Documentation](https://nodejs.org/api/url.html#urlparseinput-base)).
This broke for me in an environment running Node 18. With:
TypeError: URL.parse is not a function,
To reproduce:
In package.json:
{
"name": "zx-node",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"zx": "^8.7.2"
}
}
In test.js:
import 'zx/globals'
$`echo "foo"`
Pull zx out of an environment where ../package.json exists (see the line with the bug)
npx esbuild test.js --bundle --format=iife --platform=node > test-built.js
Switch to node 18:
💥
node test-built.js
/Volumes/code/zx-node/test-built.js:22424
})) == null ? void 0 : _a.version) || URL.parse(import_meta_url).pathname.split("/")[3];
^
TypeError: URL.parse is not a function
at node_modules/zx/build/index.cjs (/Volumes/code/zx-node/test-built.js:22424:49)
at __require2 (/Volumes/code/zx-node/test-built.js:15:52)
at node_modules/zx/build/globals.cjs (/Volumes/code/zx-node/test-built.js:22442:24)
at __require2 (/Volumes/code/zx-node/test-built.js:15:52)
at /Volumes/code/zx-node/test-built.js:22466:28
at Object.<anonymous> (/Volumes/code/zx-node/test-built.js:22471:3)
at Module._compile (node:internal/modules/cjs/loader:1364:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)
at Module.load (node:internal/modules/cjs/loader:1203:32)
at Module._load (node:internal/modules/cjs/loader:1019:12)
Switch to a newer node:
nvm use v22.1.0
Now using node v22.1.0 (npm v10.7.0)
💸
node test-built.js
# No exception!
Hey all!
As the title says, fix(jsr): extract version from url by antongolub · Pull Request #1193 · google/zx (released in Release 8.5.3 — Trap Master · google/zx) seems to break compatibility with Node < v22.1.0.
zx/src/index.ts at 4cd098058bb6a7f6afaf5950e8bca329de515244 · google/zx at line 25 uses
URL.parse. ButURL.parsewas only added in Node v22.1.0 ([URL | Node.js v24.4.1 Documentation](https://nodejs.org/api/url.html#urlparseinput-base)).This broke for me in an environment running Node 18. With:
To reproduce:
In
package.json:{ "name": "zx-node", "version": "1.0.0", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "description": "", "dependencies": { "zx": "^8.7.2" } }In
test.js:Pull
zxout of an environment where../package.jsonexists (see the line with the bug)npx esbuild test.js --bundle --format=iife --platform=node > test-built.jsSwitch to node 18:
💥
Switch to a newer node:
💸