From 4d2c86fd5cb29ed0c76e5763de7f935e15ea0414 Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Thu, 6 Jul 2023 17:08:01 -0700 Subject: Add util.toUSVString --- src/js/node/util.js | 5 +++++ src/js/out/modules/node/util.js | 6 +++++- test/js/node/util/util.test.js | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/js/node/util.js b/src/js/node/util.js index 8f20a4bc1..2ec4aadb9 100644 --- a/src/js/node/util.js +++ b/src/js/node/util.js @@ -552,6 +552,9 @@ function callbackify(original) { } export var TextDecoder = globalThis.TextDecoder; export var TextEncoder = globalThis.TextEncoder; +var toUSVString = input => { + return (input + "").toWellFormed(); +}; Object.assign(cjs_exports, { format, @@ -577,6 +580,7 @@ Object.assign(cjs_exports, { isBuffer, log, inherits, + toUSVString, promisify, callbackify, isDeepStrictEqual, @@ -609,4 +613,5 @@ export { promisify, callbackify, isDeepStrictEqual, + toUSVString, }; diff --git a/src/js/out/modules/node/util.js b/src/js/out/modules/node/util.js index 48b22871f..eade9e0d9 100644 --- a/src/js/out/modules/node/util.js +++ b/src/js/out/modules/node/util.js @@ -386,7 +386,9 @@ var isRegExp2 = types.isRegExp, isDate2 = types.isDate, isError = types.isNative return Object.defineProperties(fn, getOwnPropertyDescriptors(original)); }; promisify.custom = kCustomPromisifiedSymbol; -var { TextDecoder, TextEncoder } = globalThis; +var { TextDecoder, TextEncoder } = globalThis, toUSVString = (input) => { + return (input + "").toWellFormed(); +}; Object.assign(cjs_exports, { format, deprecate, @@ -411,6 +413,7 @@ Object.assign(cjs_exports, { isBuffer, log, inherits, + toUSVString, promisify, callbackify, isDeepStrictEqual, @@ -420,6 +423,7 @@ Object.assign(cjs_exports, { }); export { default2 as types, + toUSVString, promisify, log, isUndefined, diff --git a/test/js/node/util/util.test.js b/test/js/node/util/util.test.js index 45ecffda8..741b27d19 100644 --- a/test/js/node/util/util.test.js +++ b/test/js/node/util/util.test.js @@ -36,6 +36,23 @@ const deepStrictEqual = (...args) => { // Tests adapted from https://github.com/nodejs/node/blob/main/test/parallel/test-util.js describe("util", () => { + it("toUSVString", () => { + const strings = [ + // Lone high surrogate + "ab\uD800", + "ab\uD800c", + // Lone low surrogate + "\uDFFFab", + "c\uDFFFab", + // Well-formed + "abc", + "ab\uD83D\uDE04c", + ]; + const outputs = ["ab�", "ab�c", "�ab", "c�ab", "abc", "ab😄c"]; + for (let i = 0; i < strings.length; i++) { + expect(util.toUSVString(strings[i])).toBe(outputs[i]); + } + }); describe("isArray", () => { it("all cases", () => { strictEqual(util.isArray([]), true); -- cgit v1.2.3