Files
SnowLuma/.pnpm-store/v11/files/4b/4a92be6d346b6a3a5a29b7b90f5ff7443f0e526f1ba9c3a4154911d35021a55abfb4a263902b2778b54f4e013f5d84e743a3f0cc7954eccb98e724c109f1ea
T
TanTan 2a69b23b47
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

34 lines
901 B
Plaintext

//#region src/utils/encode.ts
/**
* @module
* Encode utility.
*/
const decodeBase64Url = (str) => {
return decodeBase64(str.replace(/_|-/g, (m) => ({
_: "/",
"-": "+"
})[m] ?? m));
};
const encodeBase64Url = (buf) => encodeBase64(buf).replace(/\/|\+/g, (m) => ({
"/": "_",
"+": "-"
})[m] ?? m);
const encodeBase64 = (buf) => {
let binary = "";
const bytes = new Uint8Array(buf);
for (let i = 0, len = bytes.length; i < len; i++) binary += String.fromCharCode(bytes[i]);
return btoa(binary);
};
const decodeBase64 = (str) => {
const binary = atob(str);
const bytes = new Uint8Array(new ArrayBuffer(binary.length));
const half = binary.length / 2;
for (let i = 0, j = binary.length - 1; i <= half; i++, j--) {
bytes[i] = binary.charCodeAt(i);
bytes[j] = binary.charCodeAt(j);
}
return bytes;
};
//#endregion
export { decodeBase64, decodeBase64Url, encodeBase64, encodeBase64Url };