summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/internal/normalize_encoding.mjs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-02-14 17:38:45 +0100
committerGitHub <noreply@github.com>2023-02-14 17:38:45 +0100
commitd47147fb6ad229b1c039aff9d0959b6e281f4df5 (patch)
tree6e9e790f2b9bc71b5f0c9c7e64b95cae31579d58 /ext/node/polyfills/internal/normalize_encoding.mjs
parent1d00bbe47e2ca14e2d2151518e02b2324461a065 (diff)
feat(ext/node): embed std/node into the snapshot (#17724)
This commit moves "deno_std/node" in "ext/node" crate. The code is transpiled and snapshotted during the build process. During the first pass a minimal amount of work was done to create the snapshot, a lot of code in "ext/node" depends on presence of "Deno" global. This code will be gradually fixed in the follow up PRs to migrate it to import relevant APIs from "internal:" modules. Currently the code from snapshot is not used in any way, and all Node/npm compatibility still uses code from "https://deno.land/std/node" (or from the location specified by "DENO_NODE_COMPAT_URL"). This will also be handled in a follow up PRs. --------- Co-authored-by: crowlkats <crowlkats@toaxl.com> Co-authored-by: Divy Srivastava <dj.srivastava23@gmail.com> Co-authored-by: Yoshiya Hinosawa <stibium121@gmail.com>
Diffstat (limited to 'ext/node/polyfills/internal/normalize_encoding.mjs')
-rw-r--r--ext/node/polyfills/internal/normalize_encoding.mjs72
1 files changed, 72 insertions, 0 deletions
diff --git a/ext/node/polyfills/internal/normalize_encoding.mjs b/ext/node/polyfills/internal/normalize_encoding.mjs
new file mode 100644
index 000000000..788c86c56
--- /dev/null
+++ b/ext/node/polyfills/internal/normalize_encoding.mjs
@@ -0,0 +1,72 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+export function normalizeEncoding(enc) {
+ if (enc == null || enc === "utf8" || enc === "utf-8") return "utf8";
+ return slowCases(enc);
+}
+
+export function slowCases(enc) {
+ switch (enc.length) {
+ case 4:
+ if (enc === "UTF8") return "utf8";
+ if (enc === "ucs2" || enc === "UCS2") return "utf16le";
+ enc = `${enc}`.toLowerCase();
+ if (enc === "utf8") return "utf8";
+ if (enc === "ucs2") return "utf16le";
+ break;
+ case 3:
+ if (
+ enc === "hex" || enc === "HEX" ||
+ `${enc}`.toLowerCase() === "hex"
+ ) {
+ return "hex";
+ }
+ break;
+ case 5:
+ if (enc === "ascii") return "ascii";
+ if (enc === "ucs-2") return "utf16le";
+ if (enc === "UTF-8") return "utf8";
+ if (enc === "ASCII") return "ascii";
+ if (enc === "UCS-2") return "utf16le";
+ enc = `${enc}`.toLowerCase();
+ if (enc === "utf-8") return "utf8";
+ if (enc === "ascii") return "ascii";
+ if (enc === "ucs-2") return "utf16le";
+ break;
+ case 6:
+ if (enc === "base64") return "base64";
+ if (enc === "latin1" || enc === "binary") return "latin1";
+ if (enc === "BASE64") return "base64";
+ if (enc === "LATIN1" || enc === "BINARY") return "latin1";
+ enc = `${enc}`.toLowerCase();
+ if (enc === "base64") return "base64";
+ if (enc === "latin1" || enc === "binary") return "latin1";
+ break;
+ case 7:
+ if (
+ enc === "utf16le" || enc === "UTF16LE" ||
+ `${enc}`.toLowerCase() === "utf16le"
+ ) {
+ return "utf16le";
+ }
+ break;
+ case 8:
+ if (
+ enc === "utf-16le" || enc === "UTF-16LE" ||
+ `${enc}`.toLowerCase() === "utf-16le"
+ ) {
+ return "utf16le";
+ }
+ break;
+ case 9:
+ if (
+ enc === "base64url" || enc === "BASE64URL" ||
+ `${enc}`.toLowerCase() === "base64url"
+ ) {
+ return "base64url";
+ }
+ break;
+ default:
+ if (enc === "") return "utf8";
+ }
+}