diff options
Diffstat (limited to 'extensions/web/08_text_encoding.js')
-rw-r--r-- | extensions/web/08_text_encoding.js | 53 |
1 files changed, 35 insertions, 18 deletions
diff --git a/extensions/web/08_text_encoding.js b/extensions/web/08_text_encoding.js index 0918cee64..9be4aa753 100644 --- a/extensions/web/08_text_encoding.js +++ b/extensions/web/08_text_encoding.js @@ -2,6 +2,7 @@ // @ts-check /// <reference path="../../core/lib.deno_core.d.ts" /> +/// <reference path="../../core/internal.d.ts" /> /// <reference path="../webidl/internal.d.ts" /> /// <reference path="../fetch/lib.deno_fetch.d.ts" /> /// <reference path="../web/internal.d.ts" /> @@ -13,6 +14,17 @@ ((window) => { const core = Deno.core; const webidl = window.__bootstrap.webidl; + const { + ArrayBufferIsView, + PromiseReject, + PromiseResolve, + StringPrototypeCharCodeAt, + StringPrototypeSlice, + SymbolToStringTag, + TypedArrayPrototypeSubarray, + TypedArrayPrototypeSlice, + Uint8Array, + } = window.__bootstrap.primordials; class TextDecoder { /** @type {string} */ @@ -95,7 +107,7 @@ } try { - if (ArrayBuffer.isView(input)) { + if (ArrayBufferIsView(input)) { input = new Uint8Array( input.buffer, input.byteOffset, @@ -116,7 +128,7 @@ } } - get [Symbol.toStringTag]() { + get [SymbolToStringTag]() { return "TextDecoder"; } } @@ -172,7 +184,7 @@ return core.opSync("op_encoding_encode_into", source, destination); } - get [Symbol.toStringTag]() { + get [SymbolToStringTag]() { return "TextEncoder"; } } @@ -213,9 +225,9 @@ if (decoded) { controller.enqueue(decoded); } - return Promise.resolve(); + return PromiseResolve(); } catch (err) { - return Promise.reject(err); + return PromiseReject(err); } }, flush: (controller) => { @@ -224,9 +236,9 @@ if (final) { controller.enqueue(final); } - return Promise.resolve(); + return PromiseResolve(); } catch (err) { - return Promise.reject(err); + return PromiseReject(err); } }, }); @@ -263,7 +275,7 @@ return this.#transform.writable; } - get [Symbol.toStringTag]() { + get [SymbolToStringTag]() { return "TextDecoderStream"; } } @@ -286,19 +298,22 @@ if (this.#pendingHighSurrogate !== null) { chunk = this.#pendingHighSurrogate + chunk; } - const lastCodeUnit = chunk.charCodeAt(chunk.length - 1); + const lastCodeUnit = StringPrototypeCharCodeAt( + chunk, + chunk.length - 1, + ); if (0xD800 <= lastCodeUnit && lastCodeUnit <= 0xDBFF) { - this.#pendingHighSurrogate = chunk.slice(-1); - chunk = chunk.slice(0, -1); + this.#pendingHighSurrogate = StringPrototypeSlice(chunk, -1); + chunk = StringPrototypeSlice(chunk, 0, -1); } else { this.#pendingHighSurrogate = null; } if (chunk) { controller.enqueue(core.encode(chunk)); } - return Promise.resolve(); + return PromiseResolve(); } catch (err) { - return Promise.reject(err); + return PromiseReject(err); } }, flush: (controller) => { @@ -306,9 +321,9 @@ if (this.#pendingHighSurrogate !== null) { controller.enqueue(new Uint8Array([0xEF, 0xBF, 0xBD])); } - return Promise.resolve(); + return PromiseResolve(); } catch (err) { - return Promise.reject(err); + return PromiseReject(err); } }, }); @@ -333,7 +348,7 @@ return this.#transform.writable; } - get [Symbol.toStringTag]() { + get [SymbolToStringTag]() { return "TextEncoderStream"; } } @@ -377,14 +392,16 @@ if (BOMEncoding === "UTF-8") start = 3; else start = 2; } - return new TextDecoder(encoding).decode(bytes.slice(start)); + return new TextDecoder(encoding).decode( + TypedArrayPrototypeSlice(bytes, start), + ); } /** * @param {Uint8Array} bytes */ function BOMSniff(bytes) { - const BOM = bytes.subarray(0, 3); + const BOM = TypedArrayPrototypeSubarray(bytes, 0, 3); if (BOM[0] === 0xEF && BOM[1] === 0xBB && BOM[2] === 0xBF) { return "UTF-8"; } |