GeezerVison is showing github.com — lib,src: replace toUSVString with `toWellFormed()` · nodejs/node@246cf73
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: benchmark/url/usvstring.js -27Lines changed: 0 additions & 27 deletions Collapse file Copy file name to clipboardExpand all lines: benchmark/util/to-usv-string.js -21Lines changed: 0 additions & 21 deletions Collapse file Copy file name to clipboardExpand all lines: lib/internal/file.js +2-2Lines changed: 2 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 4 | 4 | DateNow, | 5 | 5 | NumberIsNaN, | 6 | 6 | ObjectDefineProperties, | | 7 | + StringPrototypeToWellFormed, | 7 | 8 | SymbolToStringTag, | 8 | 9 | } = primordials; | 9 | 10 |
| @@ -15,7 +16,6 @@ const { | 15 | 16 | customInspectSymbol: kInspect, | 16 | 17 | kEnumerableProperty, | 17 | 18 | kEmptyObject, | 18 | | - toUSVString, | 19 | 19 | } = require('internal/util'); | 20 | 20 |
| 21 | 21 | const { | @@ -55,7 +55,7 @@ class File extends Blob { | 55 | 55 | lastModified = DateNow(); | 56 | 56 | } | 57 | 57 |
| 58 | | - this.#name = toUSVString(fileName); | | 58 | + this.#name = StringPrototypeToWellFormed(`${fileName}`); | 59 | 59 | this.#lastModified = lastModified; | 60 | 60 | } | 61 | 61 |
| |
Collapse file Copy file name to clipboardExpand all lines: lib/internal/url.js +24-21Lines changed: 24 additions & 21 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -26,6 +26,7 @@ const { | 26 | 26 | StringPrototypeIndexOf, | 27 | 27 | StringPrototypeSlice, | 28 | 28 | StringPrototypeStartsWith, | | 29 | + StringPrototypeToWellFormed, | 29 | 30 | Symbol, | 30 | 31 | SymbolIterator, | 31 | 32 | SymbolToStringTag, | @@ -42,7 +43,6 @@ const { | 42 | 43 | const { | 43 | 44 | getConstructorOf, | 44 | 45 | removeColors, | 45 | | - toUSVString, | 46 | 46 | kEnumerableProperty, | 47 | 47 | SideEffectFreeRegExpPrototypeSymbolReplace, | 48 | 48 | } = require('internal/util'); | @@ -366,7 +366,11 @@ class URLSearchParams { | 366 | 366 | throw new ERR_INVALID_TUPLE('Each query pair', '[name, value]'); | 367 | 367 | } | 368 | 368 | // Append (innerSequence[0], innerSequence[1]) to querys list. | 369 | | - ArrayPrototypePush(this.#searchParams, toUSVString(pair[0]), toUSVString(pair[1])); | | 369 | + ArrayPrototypePush( | | 370 | + this.#searchParams, | | 371 | + StringPrototypeToWellFormed(`${pair[0]}`), | | 372 | + StringPrototypeToWellFormed(`${pair[1]}`), | | 373 | + ); | 370 | 374 | } else { | 371 | 375 | if (((typeof pair !== 'object' && typeof pair !== 'function') || | 372 | 376 | typeof pair[SymbolIterator] !== 'function')) { | @@ -377,7 +381,7 @@ class URLSearchParams { | 377 | 381 |
| 378 | 382 | for (const element of pair) { | 379 | 383 | length++; | 380 | | - ArrayPrototypePush(this.#searchParams, toUSVString(element)); | | 384 | + ArrayPrototypePush(this.#searchParams, StringPrototypeToWellFormed(`${element}`)); | 381 | 385 | } | 382 | 386 |
| 383 | 387 | // If innerSequence's size is not 2, then throw a TypeError. | @@ -395,8 +399,8 @@ class URLSearchParams { | 395 | 399 | const key = keys[i]; | 396 | 400 | const desc = ReflectGetOwnPropertyDescriptor(init, key); | 397 | 401 | if (desc !== undefined && desc.enumerable) { | 398 | | - const typedKey = toUSVString(key); | 399 | | - const typedValue = toUSVString(init[key]); | | 402 | + const typedKey = StringPrototypeToWellFormed(key); | | 403 | + const typedValue = StringPrototypeToWellFormed(`${init[key]}`); | 400 | 404 |
| 401 | 405 | // Two different keys may become the same USVString after normalization. | 402 | 406 | // In that case, we retain the later one. Refer to WPT. | @@ -413,7 +417,7 @@ class URLSearchParams { | 413 | 417 | } | 414 | 418 | } else { | 415 | 419 | // https://url.spec.whatwg.org/#dom-urlsearchparams-urlsearchparams | 416 | | - init = toUSVString(init); | | 420 | + init = StringPrototypeToWellFormed(`${init}`); | 417 | 421 | this.#searchParams = init ? parseParams(init) : []; | 418 | 422 | } | 419 | 423 | } | @@ -468,8 +472,8 @@ class URLSearchParams { | 468 | 472 | throw new ERR_MISSING_ARGS('name', 'value'); | 469 | 473 | } | 470 | 474 |
| 471 | | - name = toUSVString(name); | 472 | | - value = toUSVString(value); | | 475 | + name = StringPrototypeToWellFormed(`${name}`); | | 476 | + value = StringPrototypeToWellFormed(`${value}`); | 473 | 477 | ArrayPrototypePush(this.#searchParams, name, value); | 474 | 478 | if (this.#context) { | 475 | 479 | this.#context.search = this.toString(); | @@ -485,10 +489,10 @@ class URLSearchParams { | 485 | 489 | } | 486 | 490 |
| 487 | 491 | const list = this.#searchParams; | 488 | | - name = toUSVString(name); | | 492 | + name = StringPrototypeToWellFormed(`${name}`); | 489 | 493 |
| 490 | 494 | if (value !== undefined) { | 491 | | - value = toUSVString(value); | | 495 | + value = StringPrototypeToWellFormed(`${value}`); | 492 | 496 | for (let i = 0; i < list.length;) { | 493 | 497 | if (list[i] === name && list[i + 1] === value) { | 494 | 498 | list.splice(i, 2); | @@ -519,7 +523,7 @@ class URLSearchParams { | 519 | 523 | } | 520 | 524 |
| 521 | 525 | const list = this.#searchParams; | 522 | | - name = toUSVString(name); | | 526 | + name = StringPrototypeToWellFormed(`${name}`); | 523 | 527 | for (let i = 0; i < list.length; i += 2) { | 524 | 528 | if (list[i] === name) { | 525 | 529 | return list[i + 1]; | @@ -538,7 +542,7 @@ class URLSearchParams { | 538 | 542 |
| 539 | 543 | const list = this.#searchParams; | 540 | 544 | const values = []; | 541 | | - name = toUSVString(name); | | 545 | + name = StringPrototypeToWellFormed(`${name}`); | 542 | 546 | for (let i = 0; i < list.length; i += 2) { | 543 | 547 | if (list[i] === name) { | 544 | 548 | values.push(list[i + 1]); | @@ -556,10 +560,10 @@ class URLSearchParams { | 556 | 560 | } | 557 | 561 |
| 558 | 562 | const list = this.#searchParams; | 559 | | - name = toUSVString(name); | | 563 | + name = StringPrototypeToWellFormed(`${name}`); | 560 | 564 |
| 561 | 565 | if (value !== undefined) { | 562 | | - value = toUSVString(value); | | 566 | + value = StringPrototypeToWellFormed(`${value}`); | 563 | 567 | } | 564 | 568 |
| 565 | 569 | for (let i = 0; i < list.length; i += 2) { | @@ -582,8 +586,8 @@ class URLSearchParams { | 582 | 586 | } | 583 | 587 |
| 584 | 588 | const list = this.#searchParams; | 585 | | - name = toUSVString(name); | 586 | | - value = toUSVString(value); | | 589 | + name = StringPrototypeToWellFormed(`${name}`); | | 590 | + value = StringPrototypeToWellFormed(`${value}`); | 587 | 591 |
| 588 | 592 | // If there are any name-value pairs whose name is `name`, in `list`, set | 589 | 593 | // the value of the first such name-value pair to `value` and remove the | @@ -773,7 +777,7 @@ class URL { | 773 | 777 | throw new ERR_MISSING_ARGS('url'); | 774 | 778 | } | 775 | 779 |
| 776 | | - // toUSVString is not needed. | | 780 | + // StringPrototypeToWellFormed is not needed. | 777 | 781 | input = `${input}`; | 778 | 782 |
| 779 | 783 | if (base !== undefined) { | @@ -1006,7 +1010,7 @@ class URL { | 1006 | 1010 | } | 1007 | 1011 |
| 1008 | 1012 | set search(value) { | 1009 | | - const href = bindingUrl.update(this.#context.href, updateActions.kSearch, toUSVString(value)); | | 1013 | + const href = bindingUrl.update(this.#context.href, updateActions.kSearch, StringPrototypeToWellFormed(`${value}`)); | 1010 | 1014 | if (href) { | 1011 | 1015 | this.#updateContext(href); | 1012 | 1016 | } | @@ -1297,15 +1301,15 @@ function domainToASCII(domain) { | 1297 | 1301 | if (arguments.length < 1) | 1298 | 1302 | throw new ERR_MISSING_ARGS('domain'); | 1299 | 1303 |
| 1300 | | - // toUSVString is not needed. | | 1304 | + // StringPrototypeToWellFormed is not needed. | 1301 | 1305 | return bindingUrl.domainToASCII(`${domain}`); | 1302 | 1306 | } | 1303 | 1307 |
| 1304 | 1308 | function domainToUnicode(domain) { | 1305 | 1309 | if (arguments.length < 1) | 1306 | 1310 | throw new ERR_MISSING_ARGS('domain'); | 1307 | 1311 |
| 1308 | | - // toUSVString is not needed. | | 1312 | + // StringPrototypeToWellFormed is not needed. | 1309 | 1313 | return bindingUrl.domainToUnicode(`${domain}`); | 1310 | 1314 | } | 1311 | 1315 |
| @@ -1501,7 +1505,6 @@ function getURLOrigin(url) { | 1501 | 1505 | } | 1502 | 1506 |
| 1503 | 1507 | module.exports = { | 1504 | | - toUSVString, | 1505 | 1508 | fileURLToPath, | 1506 | 1509 | pathToFileURL, | 1507 | 1510 | toPathIfFileURL, | |
Collapse file Copy file name to clipboardExpand all lines: lib/internal/util.js -14Lines changed: 0 additions & 14 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -62,7 +62,6 @@ const { | 62 | 62 | decorated_private_symbol, | 63 | 63 | }, | 64 | 64 | sleep: _sleep, | 65 | | - toUSVString: _toUSVString, | 66 | 65 | } = internalBinding('util'); | 67 | 66 | const { isNativeError, isPromise } = internalBinding('types'); | 68 | 67 | const { getOptionValue } = require('internal/options'); | @@ -73,18 +72,6 @@ const experimentalWarnings = new SafeSet(); | 73 | 72 |
| 74 | 73 | const colorRegExp = /\u001b\[\d\d?m/g; // eslint-disable-line no-control-regex | 75 | 74 |
| 76 | | -const unpairedSurrogateRe = | 77 | | - /(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])/; | 78 | | -function toUSVString(val) { | 79 | | - const str = `${val}`; | 80 | | - // As of V8 5.5, `str.search()` (and `unpairedSurrogateRe[@@search]()`) are | 81 | | - // slower than `unpairedSurrogateRe.exec()`. | 82 | | - const match = RegExpPrototypeExec(unpairedSurrogateRe, str); | 83 | | - if (!match) | 84 | | - return str; | 85 | | - return _toUSVString(str, match.index); | 86 | | -} | 87 | | - | 88 | 75 | let uvBinding; | 89 | 76 |
| 90 | 77 | function lazyUv() { | @@ -913,7 +900,6 @@ module.exports = { | 913 | 900 | sleep, | 914 | 901 | spliceOne, | 915 | 902 | setupCoverageHooks, | 916 | | - toUSVString, | 917 | 903 | removeColors, | 918 | 904 |
| 919 | 905 | // Symbol used to customize promisify conversion | |
Collapse file Copy file name to clipboardExpand all lines: lib/util.js +4-2Lines changed: 4 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -44,6 +44,7 @@ const { | 44 | 44 | ObjectValues, | 45 | 45 | ReflectApply, | 46 | 46 | StringPrototypePadStart, | | 47 | + StringPrototypeToWellFormed, | 47 | 48 | } = primordials; | 48 | 49 |
| 49 | 50 | const { | @@ -75,7 +76,6 @@ const { | 75 | 76 | getSystemErrorMap, | 76 | 77 | getSystemErrorName: internalErrorName, | 77 | 78 | promisify, | 78 | | - toUSVString, | 79 | 79 | defineLazyProperties, | 80 | 80 | } = require('internal/util'); | 81 | 81 |
| @@ -411,7 +411,9 @@ module.exports = { | 411 | 411 | log, | 412 | 412 | promisify, | 413 | 413 | stripVTControlCharacters, | 414 | | - toUSVString, | | 414 | + toUSVString(input) { | | 415 | + return StringPrototypeToWellFormed(`${input}`); | | 416 | + }, | 415 | 417 | get transferableAbortSignal() { | 416 | 418 | return lazyAbortController().transferableAbortSignal; | 417 | 419 | }, | |
Collapse file Copy file name to clipboardExpand all lines: src/node_util.cc -40Lines changed: 0 additions & 40 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -37,9 +37,6 @@ using v8::String; | 37 | 37 | using v8::Uint32; | 38 | 38 | using v8::Value; | 39 | 39 |
| 40 | | -// Used in ToUSVString(). | 41 | | -constexpr char16_t kUnicodeReplacementCharacter = 0xFFFD; | 42 | | - | 43 | 40 | // If a UTF-16 character is a low/trailing surrogate. | 44 | 41 | CHAR_TEST(16, IsUnicodeTrail, (ch & 0xFC00) == 0xDC00) | 45 | 42 |
| @@ -240,40 +237,6 @@ static uint32_t FastGuessHandleType(Local<Value> receiver, const uint32_t fd) { | 240 | 237 |
| 241 | 238 | CFunction fast_guess_handle_type_(CFunction::Make(FastGuessHandleType)); | 242 | 239 |
| 243 | | -static void ToUSVString(const FunctionCallbackInfo<Value>& args) { | 244 | | - Environment* env = Environment::GetCurrent(args); | 245 | | - CHECK_GE(args.Length(), 2); | 246 | | - CHECK(args[0]->IsString()); | 247 | | - CHECK(args[1]->IsNumber()); | 248 | | - | 249 | | - TwoByteValue value(env->isolate(), args[0]); | 250 | | - | 251 | | - int64_t start = args[1]->IntegerValue(env->context()).FromJust(); | 252 | | - CHECK_GE(start, 0); | 253 | | - | 254 | | - for (size_t i = start; i < value.length(); i++) { | 255 | | - char16_t c = value[i]; | 256 | | - if (!IsUnicodeSurrogate(c)) { | 257 | | - continue; | 258 | | - } else if (IsUnicodeSurrogateTrail(c) || i == value.length() - 1) { | 259 | | - value[i] = kUnicodeReplacementCharacter; | 260 | | - } else { | 261 | | - char16_t d = value[i + 1]; | 262 | | - if (IsUnicodeTrail(d)) { | 263 | | - i++; | 264 | | - } else { | 265 | | - value[i] = kUnicodeReplacementCharacter; | 266 | | - } | 267 | | - } | 268 | | - } | 269 | | - | 270 | | - args.GetReturnValue().Set( | 271 | | - String::NewFromTwoByte(env->isolate(), | 272 | | - *value, | 273 | | - v8::NewStringType::kNormal, | 274 | | - value.length()).ToLocalChecked()); | 275 | | -} | 276 | | - | 277 | 240 | void RegisterExternalReferences(ExternalReferenceRegistry* registry) { | 278 | 241 | registry->Register(GetPromiseDetails); | 279 | 242 | registry->Register(GetProxyDetails); | @@ -288,7 +251,6 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) { | 288 | 251 | registry->Register(GuessHandleType); | 289 | 252 | registry->Register(FastGuessHandleType); | 290 | 253 | registry->Register(fast_guess_handle_type_.GetTypeInfo()); | 291 | | - registry->Register(ToUSVString); | 292 | 254 | } | 293 | 255 |
| 294 | 256 | void Initialize(Local<Object> target, | @@ -403,8 +365,6 @@ void Initialize(Local<Object> target, | 403 | 365 | "guessHandleType", | 404 | 366 | GuessHandleType, | 405 | 367 | &fast_guess_handle_type_); | 406 | | - | 407 | | - SetMethodNoSideEffect(context, target, "toUSVString", ToUSVString); | 408 | 368 | } | 409 | 369 |
| 410 | 370 | } // namespace util | |
Collapse file Copy file name to clipboardExpand all lines: typings/internalBinding/util.d.ts -1Lines changed: 0 additions & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
@@ -43,5 +43,4 @@ export interface UtilBinding { | 43 | 43 | shouldAbortOnUncaughtToggle: [shouldAbort: 0 | 1]; | 44 | 44 | WeakReference: typeof InternalUtilBinding.WeakReference; | 45 | 45 | guessHandleType(fd: number): 'TCP' | 'TTY' | 'UDP' | 'FILE' | 'PIPE' | 'UNKNOWN'; | 46 | | - toUSVString(str: string, start: number): string; | 47 | 46 | } |
Collapse file Copy file name to clipboardExpand all lines: typings/primordials.d.ts +1Lines changed: 1 addition & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -420,6 +420,7 @@ declare namespace primordials { | 420 | 420 | export const StringPrototypeToLocaleUpperCase: UncurryThis<typeof String.prototype.toLocaleUpperCase> | 421 | 421 | export const StringPrototypeToLowerCase: UncurryThis<typeof String.prototype.toLowerCase> | 422 | 422 | export const StringPrototypeToUpperCase: UncurryThis<typeof String.prototype.toUpperCase> | | 423 | + export const StringPrototypeToWellFormed: UncurryThis<typeof String.prototype.toWellFormed> | 423 | 424 | export const StringPrototypeValueOf: UncurryThis<typeof String.prototype.valueOf> | 424 | 425 | export const StringPrototypeReplaceAll: UncurryThis<typeof String.prototype.replaceAll> | 425 | 426 | export import Symbol = globalThis.Symbol; | |
|