1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.createFromBase64 = void 0;
- const constants_1 = require("./constants");
- const E = '=';
- const createFromBase64 = (chars = constants_1.alphabet, noPadding = false) => {
- if (chars.length !== 64)
- throw new Error('chars must be 64 characters long');
- let max = 0;
- for (let i = 0; i < chars.length; i++)
- max = Math.max(max, chars.charCodeAt(i));
- const table = [];
- for (let i = 0; i <= max; i += 1)
- table[i] = -1;
- for (let i = 0; i < chars.length; i++)
- table[chars.charCodeAt(i)] = i;
- return (encoded) => {
- if (!encoded)
- return new Uint8Array(0);
- let length = encoded.length;
- if (noPadding) {
- const mod = length % 4;
- if (mod === 2) {
- encoded += '==';
- length += 2;
- }
- else if (mod === 3) {
- encoded += '=';
- length += 1;
- }
- }
- if (length % 4 !== 0)
- throw new Error('Base64 string length must be a multiple of 4');
- const mainLength = encoded[length - 1] !== E ? length : length - 4;
- let bufferLength = (length >> 2) * 3;
- let padding = 0;
- if (encoded[length - 2] === E) {
- padding = 2;
- bufferLength -= 2;
- }
- else if (encoded[length - 1] === E) {
- padding = 1;
- bufferLength -= 1;
- }
- const buf = new Uint8Array(bufferLength);
- let j = 0;
- let i = 0;
- for (; i < mainLength; i += 4) {
- const sextet0 = table[encoded.charCodeAt(i)];
- const sextet1 = table[encoded.charCodeAt(i + 1)];
- const sextet2 = table[encoded.charCodeAt(i + 2)];
- const sextet3 = table[encoded.charCodeAt(i + 3)];
- if (sextet0 < 0 || sextet1 < 0 || sextet2 < 0 || sextet3 < 0)
- throw new Error('INVALID_BASE64_STRING');
- buf[j] = (sextet0 << 2) | (sextet1 >> 4);
- buf[j + 1] = (sextet1 << 4) | (sextet2 >> 2);
- buf[j + 2] = (sextet2 << 6) | sextet3;
- j += 3;
- }
- if (padding === 2) {
- const sextet0 = table[encoded.charCodeAt(mainLength)];
- const sextet1 = table[encoded.charCodeAt(mainLength + 1)];
- if (sextet0 < 0 || sextet1 < 0)
- throw new Error('INVALID_BASE64_STRING');
- buf[j] = (sextet0 << 2) | (sextet1 >> 4);
- }
- else if (padding === 1) {
- const sextet0 = table[encoded.charCodeAt(mainLength)];
- const sextet1 = table[encoded.charCodeAt(mainLength + 1)];
- const sextet2 = table[encoded.charCodeAt(mainLength + 2)];
- if (sextet0 < 0 || sextet1 < 0 || sextet2 < 0)
- throw new Error('INVALID_BASE64_STRING');
- buf[j] = (sextet0 << 2) | (sextet1 >> 4);
- buf[j + 1] = (sextet1 << 4) | (sextet2 >> 2);
- }
- return buf;
- };
- };
- exports.createFromBase64 = createFromBase64;
- //# sourceMappingURL=createFromBase64.js.map
|