From 346a4fa27da7c7530e0d6f6fd84d9b788f96cb42 Mon Sep 17 00:00:00 2001 From: Nikita Skovoroda Date: Tue, 10 Feb 2026 08:20:43 +0400 Subject: [PATCH] size: add utf16.browser impl --- package.json | 3 +++ tests/utf16.noenc.test.cjs | 10 +++++++--- utf16.browser.js | 8 ++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 utf16.browser.js diff --git a/package.json b/package.json index 0d8874d..98a9bde 100644 --- a/package.json +++ b/package.json @@ -124,6 +124,7 @@ "/single-byte.node.js", "/utf16.js", "/utf16.d.ts", + "/utf16.browser.js", "/utf16.native.js", "/utf16.node.js", "/utf8.js", @@ -205,6 +206,7 @@ "types": "./utf16.d.ts", "node": "./utf16.node.js", "react-native": "./utf16.native.js", + "browser": "./utf16.browser.js", "default": "./utf16.js" }, "./utf8.js": { @@ -222,6 +224,7 @@ } }, "browser": { + "./utf16.js": "./utf16.browser.js", "./fallback/utf8.auto.js": "./fallback/utf8.auto.browser.js" }, "react-native": { diff --git a/tests/utf16.noenc.test.cjs b/tests/utf16.noenc.test.cjs index dfe9a31..a33be3e 100644 --- a/tests/utf16.noenc.test.cjs +++ b/tests/utf16.noenc.test.cjs @@ -1,3 +1,7 @@ -delete globalThis.TextEncoder -if (!globalThis.Deno) delete globalThis.TextDecoder // Deno path requires it -require('./utf16.test.js') +if (process.env.EXODUS_TEST_IS_BROWSER || globalThis.Deno) { + require('node:test').test.skip('Under browsers and Deno, TextDecoder is required') +} else { + delete globalThis.TextEncoder + delete globalThis.TextDecoder + require('./utf16.test.js') +} diff --git a/utf16.browser.js b/utf16.browser.js new file mode 100644 index 0000000..0c6ecbd --- /dev/null +++ b/utf16.browser.js @@ -0,0 +1,8 @@ +// We trust browsers to always have correct TextDecoder for utf-16le/utf-16be with ignoreBOM without streaming + +import { encodeApi, decodeApiDecoders } from './fallback/utf16.js' + +export const utf16fromString = (str, format = 'uint16') => encodeApi(str, false, format) +export const utf16fromStringLoose = (str, format = 'uint16') => encodeApi(str, true, format) +export const utf16toString = (arr, format = 'uint16') => decodeApiDecoders(arr, false, format) +export const utf16toStringLoose = (arr, format = 'uint16') => decodeApiDecoders(arr, true, format)