summaryrefslogtreecommitdiff
path: root/js/text_encoding.ts
diff options
context:
space:
mode:
Diffstat (limited to 'js/text_encoding.ts')
-rw-r--r--js/text_encoding.ts35
1 files changed, 35 insertions, 0 deletions
diff --git a/js/text_encoding.ts b/js/text_encoding.ts
index 03cc966b1..025a17f4f 100644
--- a/js/text_encoding.ts
+++ b/js/text_encoding.ts
@@ -461,6 +461,11 @@ export class TextDecoder {
}
}
+interface TextEncoderEncodeIntoResult {
+ read: number;
+ written: number;
+}
+
export class TextEncoder {
/** Returns "utf-8". */
readonly encoding = "utf-8";
@@ -484,6 +489,36 @@ export class TextEncoder {
return new Uint8Array(output);
}
+ encodeInto(input: string, dest: Uint8Array): TextEncoderEncodeIntoResult {
+ const encoder = new UTF8Encoder();
+ const inputStream = new Stream(stringToCodePoints(input));
+
+ let written = 0;
+ let read = 0;
+ while (true) {
+ const result = encoder.handler(inputStream.read());
+ if (result === FINISHED) {
+ break;
+ }
+ read++;
+ if (Array.isArray(result)) {
+ dest.set(result, written);
+ written += result.length;
+ if (result.length > 3) {
+ // increment read a second time if greater than U+FFFF
+ read++;
+ }
+ } else {
+ dest[written] = result;
+ written++;
+ }
+ }
+
+ return {
+ read,
+ written
+ };
+ }
get [Symbol.toStringTag](): string {
return "TextEncoder";
}