Skip to content

URL.parse, introduced in #1193, breaks compatibility with Node < v22.1.0 #1295

Description

@KieranHunt

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:

nvm use v18.20.8

💥

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!

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions