Spaces:
Sleeping
Sleeping
| import { toUint8Array } from "../bytes/index.js"; | |
| import { encode as encodeBinary, decode as decodeBinary } from "./binary.js"; | |
| const BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; | |
| function nodeBuffer() { | |
| return globalThis.Buffer; | |
| } | |
| export function normalize(text) { | |
| return text.replace(/[\n\r\t ]/g, ""); | |
| } | |
| export function pad(text) { | |
| const remainder = text.length % 4; | |
| return remainder ? text + "=".repeat(4 - remainder) : text; | |
| } | |
| export function is(text) { | |
| if (typeof text !== "string") { | |
| return false; | |
| } | |
| const normalized = normalize(text); | |
| return normalized === "" || BASE64_REGEX.test(normalized); | |
| } | |
| export function encode(data, _options) { | |
| const bytes = toUint8Array(data); | |
| const buffer = nodeBuffer(); | |
| if (buffer) { | |
| return buffer.from(bytes).toString("base64"); | |
| } | |
| return btoa(encodeBinary(bytes)); | |
| } | |
| export function decode(text, _options) { | |
| const normalized = normalize(text); | |
| if (!is(normalized)) { | |
| throw new TypeError("Input is not valid Base64 text"); | |
| } | |
| const buffer = nodeBuffer(); | |
| if (buffer) { | |
| return new Uint8Array(buffer.from(normalized, "base64")); | |
| } | |
| return decodeBinary(atob(normalized)); | |
| } | |
| export const base64 = { encode, decode, is, normalize, pad }; | |