aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-07-06 17:08:01 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-07-06 17:08:01 -0700
commit4d2c86fd5cb29ed0c76e5763de7f935e15ea0414 (patch)
tree250e6cf00afbe7bc368d828fd54646d590c490ec
parentd905dbe2145a1b50584f156f819f392ee689b05d (diff)
downloadbun-4d2c86fd5cb29ed0c76e5763de7f935e15ea0414.tar.gz
bun-4d2c86fd5cb29ed0c76e5763de7f935e15ea0414.tar.zst
bun-4d2c86fd5cb29ed0c76e5763de7f935e15ea0414.zip
Add util.toUSVString
-rw-r--r--src/js/node/util.js5
-rw-r--r--src/js/out/modules/node/util.js6
-rw-r--r--test/js/node/util/util.test.js17
3 files changed, 27 insertions, 1 deletions
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);