summaryrefslogtreecommitdiff
path: root/alarm/node_modules/abab/lib/btoa.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-10-18 08:59:09 +0200
committerMinteck <contact@minteck.org>2022-10-18 08:59:09 +0200
commit2c4ae43e688a9873e86211ea0e7aeb9ba770dd77 (patch)
tree17848d95522dab25d3cdeb9c4a6450e2a234861f /alarm/node_modules/abab/lib/btoa.js
parent108525534c28013cfe1897c30e4565f9893f3766 (diff)
downloadpluralconnect-2c4ae43e688a9873e86211ea0e7aeb9ba770dd77.tar.gz
pluralconnect-2c4ae43e688a9873e86211ea0e7aeb9ba770dd77.tar.bz2
pluralconnect-2c4ae43e688a9873e86211ea0e7aeb9ba770dd77.zip
Update
Diffstat (limited to 'alarm/node_modules/abab/lib/btoa.js')
-rw-r--r--alarm/node_modules/abab/lib/btoa.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/alarm/node_modules/abab/lib/btoa.js b/alarm/node_modules/abab/lib/btoa.js
new file mode 100644
index 0000000..8d385d7
--- /dev/null
+++ b/alarm/node_modules/abab/lib/btoa.js
@@ -0,0 +1,62 @@
+"use strict";
+
+/**
+ * btoa() as defined by the HTML and Infra specs, which mostly just references
+ * RFC 4648.
+ */
+function btoa(s) {
+ if (arguments.length === 0) {
+ throw new TypeError("1 argument required, but only 0 present.");
+ }
+
+ let i;
+ // String conversion as required by Web IDL.
+ s = `${s}`;
+ // "The btoa() method must throw an "InvalidCharacterError" DOMException if
+ // data contains any character whose code point is greater than U+00FF."
+ for (i = 0; i < s.length; i++) {
+ if (s.charCodeAt(i) > 255) {
+ return null;
+ }
+ }
+ let out = "";
+ for (i = 0; i < s.length; i += 3) {
+ const groupsOfSix = [undefined, undefined, undefined, undefined];
+ groupsOfSix[0] = s.charCodeAt(i) >> 2;
+ groupsOfSix[1] = (s.charCodeAt(i) & 0x03) << 4;
+ if (s.length > i + 1) {
+ groupsOfSix[1] |= s.charCodeAt(i + 1) >> 4;
+ groupsOfSix[2] = (s.charCodeAt(i + 1) & 0x0f) << 2;
+ }
+ if (s.length > i + 2) {
+ groupsOfSix[2] |= s.charCodeAt(i + 2) >> 6;
+ groupsOfSix[3] = s.charCodeAt(i + 2) & 0x3f;
+ }
+ for (let j = 0; j < groupsOfSix.length; j++) {
+ if (typeof groupsOfSix[j] === "undefined") {
+ out += "=";
+ } else {
+ out += btoaLookup(groupsOfSix[j]);
+ }
+ }
+ }
+ return out;
+}
+
+/**
+ * Lookup table for btoa(), which converts a six-bit number into the
+ * corresponding ASCII character.
+ */
+const keystr =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+function btoaLookup(index) {
+ if (index >= 0 && index < 64) {
+ return keystr[index];
+ }
+
+ // Throw INVALID_CHARACTER_ERR exception here -- won't be hit in the tests.
+ return undefined;
+}
+
+module.exports = btoa;