/*
 * 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;
}
