UNPKG

alinea

Version:

[![npm](https://img.shields.io/npm/v/alinea.svg)](https://npmjs.org/package/alinea) [![install size](https://packagephobia.com/badge?p=alinea)](https://packagephobia.com/result?p=alinea)

178 lines (176 loc) 4.25 kB
import "../../chunks/chunk-U5RRZUYZ.js"; // src/core/util/Encoding.ts function parse(string, encoding, opts = {}) { if (!encoding.codes) { encoding.codes = {}; for (let i = 0; i < encoding.chars.length; ++i) { encoding.codes[encoding.chars[i]] = i; } } if (!opts.loose && string.length * encoding.bits & 7) { throw new SyntaxError("Invalid padding"); } let end = string.length; while (string[end - 1] === "=") { --end; if (!opts.loose && !((string.length - end) * encoding.bits & 7)) { throw new SyntaxError("Invalid padding"); } } const out = new (opts.out ?? Uint8Array)( end * encoding.bits / 8 | 0 ); let bits = 0; let buffer = 0; let written = 0; for (let i = 0; i < end; ++i) { const value = encoding.codes[string[i]]; if (value === void 0) { throw new SyntaxError("Invalid character " + string[i]); } buffer = buffer << encoding.bits | value; bits += encoding.bits; if (bits >= 8) { bits -= 8; out[written++] = 255 & buffer >> bits; } } if (bits >= encoding.bits || 255 & buffer << 8 - bits) { throw new SyntaxError("Unexpected end of data"); } return out; } function stringify(data, encoding, opts = {}) { const { pad = true } = opts; const mask = (1 << encoding.bits) - 1; let out = ""; let bits = 0; let buffer = 0; for (let i = 0; i < data.length; ++i) { buffer = buffer << 8 | 255 & data[i]; bits += 8; while (bits > encoding.bits) { bits -= encoding.bits; out += encoding.chars[mask & buffer >> bits]; } } if (bits) { out += encoding.chars[mask & buffer << encoding.bits - bits]; } if (pad) { while (out.length * encoding.bits & 7) { out += "="; } } return out; } var base16Encoding = { chars: "0123456789ABCDEF", bits: 4 }; var base32Encoding = { chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", bits: 5 }; var base32HexEncoding = { chars: "0123456789ABCDEFGHIJKLMNOPQRSTUV", bits: 5 }; var base62Encoding = { chars: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", bits: 6 }; var base64Encoding = { chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", bits: 6 }; var base64UrlEncoding = { chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_", bits: 6 }; var base85Encoding = { chars: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~", bits: 7 }; var base16 = { parse(string, opts) { return parse(string.toUpperCase(), base16Encoding, opts); }, stringify(data, opts) { return stringify(data, base16Encoding, opts); } }; var base32 = { parse(string, opts = {}) { return parse( opts.loose ? string.toUpperCase().replace(/0/g, "O").replace(/1/g, "L").replace(/8/g, "B") : string, base32Encoding, opts ); }, stringify(data, opts) { return stringify(data, base32Encoding, opts); } }; var base32hex = { parse(string, opts) { return parse(string, base32HexEncoding, opts); }, stringify(data, opts) { return stringify(data, base32HexEncoding, opts); } }; var base64 = { parse(string, opts) { return parse(string, base64Encoding, opts); }, stringify(data, opts) { return stringify(data, base64Encoding, opts); } }; var base62 = { parse(string, opts) { return parse(string, base62Encoding, opts); }, stringify(data, opts) { return stringify(data, base62Encoding, opts); } }; var base64url = { parse(string, opts) { return parse(string, base64UrlEncoding, opts); }, stringify(data, opts) { return stringify(data, base64UrlEncoding, opts); } }; var base85 = { parse(string, opts) { return parse(string, base85Encoding, opts); }, stringify(data, opts) { return stringify(data, base85Encoding, opts); } }; var codec = { parse, stringify }; function btoa(input) { return base64.stringify(new TextEncoder().encode(input)); } function atob(input) { input = String(input).replace(/[\t\n\f\r ]+/g, ""); return new TextDecoder().decode(base64.parse(input)); } export { atob, base16, base32, base32hex, base62, base64, base64url, base85, btoa, codec, parse, stringify };