diff options
author | Luca Casonato <lucacasonato@yahoo.com> | 2021-06-05 23:10:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-05 23:10:07 +0200 |
commit | c73ef5fa143b473677d4cab069241ff018e0c971 (patch) | |
tree | f13f3ddb1741a81138240c36846e2a23fd562a02 /runtime/js | |
parent | bb0c90cadbb99784681a2acac1fd65ac7f802297 (diff) |
refactor(web): use encoding_rs for text encoding (#10844)
This commit removes all JS based text encoding / text decoding. Instead
encoding now happens in Rust via encoding_rs (already in tree). This
implementation retains stream support, but adds the last missing
encodings. We are incredibly close to 100% WPT on text encoding now.
This should reduce our baseline heap by quite a bit.
Diffstat (limited to 'runtime/js')
-rw-r--r-- | runtime/js/11_workers.js | 4 | ||||
-rw-r--r-- | runtime/js/40_read_file.js | 7 | ||||
-rw-r--r-- | runtime/js/41_prompt.js | 3 | ||||
-rw-r--r-- | runtime/js/99_main.js | 16 |
4 files changed, 17 insertions, 13 deletions
diff --git a/runtime/js/11_workers.js b/runtime/js/11_workers.js index 5660b291c..c917a2880 100644 --- a/runtime/js/11_workers.js +++ b/runtime/js/11_workers.js @@ -38,8 +38,6 @@ return core.opAsync("op_host_get_message", id); } - const decoder = new TextDecoder(); - /** * @param {string} permission * @return {boolean} @@ -166,7 +164,7 @@ this.#name = name; const hasSourceCode = false; - const sourceCode = decoder.decode(new Uint8Array()); + const sourceCode = core.decode(new Uint8Array()); if ( specifier.startsWith("./") || specifier.startsWith("../") || diff --git a/runtime/js/40_read_file.js b/runtime/js/40_read_file.js index 1efd5338d..7eee28d89 100644 --- a/runtime/js/40_read_file.js +++ b/runtime/js/40_read_file.js @@ -2,6 +2,7 @@ "use strict"; ((window) => { + const core = window.Deno.core; const { open, openSync } = window.__bootstrap.files; const { readAll, readAllSync } = window.__bootstrap.io; @@ -29,8 +30,7 @@ const file = openSync(path); try { const contents = readAllSync(file); - const decoder = new TextDecoder(); - return decoder.decode(contents); + return core.decode(contents); } finally { file.close(); } @@ -40,8 +40,7 @@ const file = await open(path); try { const contents = await readAll(file); - const decoder = new TextDecoder(); - return decoder.decode(contents); + return core.decode(contents); } finally { file.close(); } diff --git a/runtime/js/41_prompt.js b/runtime/js/41_prompt.js index d74a937aa..cb088dafa 100644 --- a/runtime/js/41_prompt.js +++ b/runtime/js/41_prompt.js @@ -5,7 +5,6 @@ const { isatty } = window.__bootstrap.tty; const LF = "\n".charCodeAt(0); const CR = "\r".charCodeAt(0); - const decoder = new TextDecoder(); const core = window.Deno.core; function alert(message = "Alert") { @@ -70,7 +69,7 @@ } buf.push(c[0]); } - return decoder.decode(new Uint8Array(buf)); + return core.decode(new Uint8Array(buf)); } window.__bootstrap.prompt = { diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index d64625993..7ec422c1f 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -16,6 +16,8 @@ delete Object.prototype.__proto__; const errorStack = window.__bootstrap.errorStack; const os = window.__bootstrap.os; const timers = window.__bootstrap.timers; + const base64 = window.__bootstrap.base64; + const encoding = window.__bootstrap.encoding; const Console = window.__bootstrap.console.Console; const worker = window.__bootstrap.worker; const signals = window.__bootstrap.signals; @@ -198,6 +200,12 @@ delete Object.prototype.__proto__; return new DOMException(msg, "NotSupported"); }, ); + core.registerErrorBuilder( + "DOMExceptionInvalidCharacterError", + function DOMExceptionInvalidCharacterError(msg) { + return new DOMException(msg, "InvalidCharacterError"); + }, + ); } class Navigator { @@ -277,8 +285,8 @@ delete Object.prototype.__proto__; ), Request: util.nonEnumerable(fetch.Request), Response: util.nonEnumerable(fetch.Response), - TextDecoder: util.nonEnumerable(TextDecoder), - TextEncoder: util.nonEnumerable(TextEncoder), + TextDecoder: util.nonEnumerable(encoding.TextDecoder), + TextEncoder: util.nonEnumerable(encoding.TextEncoder), TransformStream: util.nonEnumerable(streams.TransformStream), URL: util.nonEnumerable(url.URL), URLSearchParams: util.nonEnumerable(url.URLSearchParams), @@ -295,8 +303,8 @@ delete Object.prototype.__proto__; TransformStreamDefaultController: util.nonEnumerable( streams.TransformStreamDefaultController, ), - atob: util.writable(atob), - btoa: util.writable(btoa), + atob: util.writable(base64.atob), + btoa: util.writable(base64.btoa), clearInterval: util.writable(timers.clearInterval), clearTimeout: util.writable(timers.clearTimeout), console: util.writable( |