Skip to content

Commit 1029176

Browse files
committed
add a fix for a NodeJS 19.9.0 URL.canParse bug
nodejs/node#47505
1 parent e0de0dc commit 1029176

File tree

4 files changed

+17
-3
lines changed

4 files changed

+17
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
## Changelog
22
##### Unreleased
3+
- Added a fix for a NodeJS 19.9.0 `URL.canParse` [bug](https://github.com/nodejs/node/issues/47505)
34
- Compat data improvements:
45
- [`JSON.parse` source text access proposal](https://github.com/tc39/proposal-json-parse-with-source) features marked as [supported](https://chromestatus.com/feature/5121582673428480) from V8 ~ Chrome 114
56
- [`ArrayBuffer.prototype.transfer` and friends proposal](https://github.com/tc39/proposal-arraybuffer-transfer) features marked as [supported](https://chromestatus.com/feature/5073244152922112) from V8 ~ Chrome 114

packages/core-js/modules/web.url.can-parse.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
var $ = require('../internals/export');
22
var getBuiltIn = require('../internals/get-built-in');
3+
var fails = require('../internals/fails');
34
var validateArgumentsLength = require('../internals/validate-arguments-length');
45
var toString = require('../internals/to-string');
6+
var USE_NATIVE_URL = require('../internals/url-constructor-detection');
57

68
var URL = getBuiltIn('URL');
79

10+
// https://github.com/nodejs/node/issues/47505
11+
var THROWS_WITHOUT_ARGUMENTS = USE_NATIVE_URL && fails(function () {
12+
URL.canParse();
13+
});
14+
815
// `URL.canParse` method
916
// https://url.spec.whatwg.org/#dom-url-canparse
10-
$({ target: 'URL', stat: true }, {
17+
$({ target: 'URL', stat: true, forced: !THROWS_WITHOUT_ARGUMENTS }, {
1118
canParse: function canParse(url) {
1219
var length = validateArgumentsLength(arguments.length, 1);
1320
var urlString = toString(url);

tests/compat/tests.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1937,7 +1937,11 @@ GLOBAL.tests = {
19371937
'web.timers': TIMERS,
19381938
'web.url.constructor': URL_AND_URL_SEARCH_PARAMS_SUPPORT,
19391939
'web.url.can-parse': [URL_AND_URL_SEARCH_PARAMS_SUPPORT, function () {
1940-
return URL.canParse;
1940+
try {
1941+
URL.canParse();
1942+
} catch (error) {
1943+
return URL.canParse;
1944+
}
19411945
}],
19421946
'web.url.to-json': [URL_AND_URL_SEARCH_PARAMS_SUPPORT, function () {
19431947
return URL.prototype.toJSON;

tests/unit-global/web.url.can-parse.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
import { NODE } from '../helpers/constants';
2+
13
QUnit.test('URL.canParse', assert => {
24
const { canParse } = URL;
35

46
assert.isFunction(canParse);
57
assert.arity(canParse, 1);
68
assert.name(canParse, 'canParse');
7-
assert.looksNative(canParse);
9+
if (!NODE) assert.looksNative(canParse);
810

911
assert.false(canParse(undefined), 'undefined');
1012
assert.false(canParse(undefined, undefined), 'undefined, undefined');

0 commit comments

Comments
 (0)