summaryrefslogtreecommitdiff
path: root/extensions/web/08_text_encoding.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/web/08_text_encoding.js')
-rw-r--r--extensions/web/08_text_encoding.js53
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";
}