WXL
4 天以前 3bd962a6d7f61239c020e2dbbeb7341e5b842dd1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
 * Shared base64 decode helper for generated decode data.
 * Assumes global atob is available.
 */
export function decodeBase64(input: string): Uint16Array {
    const binary: string =
        // eslint-disable-next-line n/no-unsupported-features/node-builtins
        typeof atob === "function"
            ? // Browser (and Node >=16)
              // eslint-disable-next-line n/no-unsupported-features/node-builtins
              atob(input)
            : // Older Node versions (<16)
              // eslint-disable-next-line n/no-unsupported-features/node-builtins
              typeof Buffer.from === "function"
              ? // eslint-disable-next-line n/no-unsupported-features/node-builtins
                Buffer.from(input, "base64").toString("binary")
              : // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
                new Buffer(input, "base64").toString("binary");
 
    const evenLength = binary.length & ~1; // Round down to even length
    const out = new Uint16Array(evenLength / 2);
 
    for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
        const lo = binary.charCodeAt(index);
        const hi = binary.charCodeAt(index + 1);
        out[outIndex++] = lo | (hi << 8);
    }
 
    return out;
}