From 9397cf508e57b8dac7d68b5469c1cca0618c6b10 Mon Sep 17 00:00:00 2001 From: Benjamin Gruenbaum Date: Mon, 2 Nov 2020 01:57:18 +0200 Subject: [PATCH] fix(op_crates/web): make TextEncoder work with forced non-strings (#8206) Fixes: #8201 --- cli/tests/unit/text_encoding_test.ts | 14 ++++++++++++++ op_crates/web/08_text_encoding.js | 1 + 2 files changed, 15 insertions(+) diff --git a/cli/tests/unit/text_encoding_test.ts b/cli/tests/unit/text_encoding_test.ts index 4c5606a4f0..189d391c52 100644 --- a/cli/tests/unit/text_encoding_test.ts +++ b/cli/tests/unit/text_encoding_test.ts @@ -210,3 +210,17 @@ unitTest(function toStringShouldBeWebCompatibility(): void { const decoder = new TextDecoder(); assertEquals(decoder.toString(), "[object TextDecoder]"); }); +unitTest(function textEncoderShouldCoerceToString(): void { + const encoder = new TextEncoder(); + const fixutreText = "text"; + const fixture = { + toString() { + return fixutreText; + }, + }; + + const bytes = encoder.encode(fixture as unknown as string); + const decoder = new TextDecoder(); + const decoded = decoder.decode(bytes); + assertEquals(decoded, fixutreText); +}); diff --git a/op_crates/web/08_text_encoding.js b/op_crates/web/08_text_encoding.js index d933197580..13e256982c 100644 --- a/op_crates/web/08_text_encoding.js +++ b/op_crates/web/08_text_encoding.js @@ -1061,6 +1061,7 @@ class TextEncoder { encoding = "utf-8"; encode(input = "") { + input = String(input); // Deno.core.encode() provides very efficient utf-8 encoding if (this.encoding === "utf-8") { return core.encode(input);