From c7be984e890f5dbe8d4e4d329d2680a1f3485b31 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Wed, 10 Dec 2025 13:29:58 +0100 Subject: [PATCH 1/2] lib: enforce use of `URLParse` There's no reason to use the user-mutable `URL.parse` in core. --- lib/eslint.config_partial.mjs | 4 ++++ lib/internal/socketaddress.js | 4 ++-- lib/internal/test_runner/mock/mock.js | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/eslint.config_partial.mjs b/lib/eslint.config_partial.mjs index fc899bff694524..bb5b4d8cc7c980 100644 --- a/lib/eslint.config_partial.mjs +++ b/lib/eslint.config_partial.mjs @@ -30,6 +30,10 @@ const noRestrictedSyntax = [ selector: "CallExpression[callee.object.name='Error'][callee.property.name='captureStackTrace']", message: "Use 'hideStackFrames' from 'internal/errors' instead.", }, + { + selector: "CallExpression[callee.object.name='URL'][callee.property.name='parse']", + message: "Use 'URLParse' from 'internal/url' instead.", + }, { selector: "AssignmentExpression:matches([left.object.name='Error']):matches([left.name='prepareStackTrace'], [left.property.name='prepareStackTrace'])", message: "Use 'overrideStackTrace' from 'internal/errors' instead.", diff --git a/lib/internal/socketaddress.js b/lib/internal/socketaddress.js index 7fbe63980a0226..724ffd90cf77f1 100644 --- a/lib/internal/socketaddress.js +++ b/lib/internal/socketaddress.js @@ -37,7 +37,7 @@ const { kDeserialize, } = require('internal/worker/js_transferable'); -const { URL } = require('internal/url'); +const { URLParse } = require('internal/url'); const kHandle = Symbol('kHandle'); const kDetail = Symbol('kDetail'); @@ -156,7 +156,7 @@ class SocketAddress { const { hostname: address, port, - } = URL.parse(`http://${input}`); + } = URLParse(`http://${input}`); if (address.startsWith('[') && address.endsWith(']')) { return new SocketAddress({ address: address.slice(1, -1), diff --git a/lib/internal/test_runner/mock/mock.js b/lib/internal/test_runner/mock/mock.js index c018d1690fc9fb..5322873abbdc81 100644 --- a/lib/internal/test_runner/mock/mock.js +++ b/lib/internal/test_runner/mock/mock.js @@ -31,6 +31,7 @@ const { isURL, pathToFileURL, URL, + URLParse, } = require('internal/url'); const { emitExperimentalWarning, @@ -652,7 +653,7 @@ class MockTracker { if (format) { // Format is not yet known for ambiguous files when detection is enabled. validateOneOf(format, 'format', kSupportedFormats); } - const baseURL = URL.parse(url); + const baseURL = URLParse(url); if (!baseURL) { throw new ERR_INVALID_ARG_VALUE( From aa8c4f3ad82aace6a069ae50b24560783900907a Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Wed, 10 Dec 2025 13:37:26 +0100 Subject: [PATCH 2/2] fixup! lib: enforce use of `URLParse` --- lib/internal/test_runner/mock/mock.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/internal/test_runner/mock/mock.js b/lib/internal/test_runner/mock/mock.js index 5322873abbdc81..1af24c77a10731 100644 --- a/lib/internal/test_runner/mock/mock.js +++ b/lib/internal/test_runner/mock/mock.js @@ -30,7 +30,6 @@ const { fileURLToPath, isURL, pathToFileURL, - URL, URLParse, } = require('internal/url'); const {