alinea
Version:
[](https://npmjs.org/package/alinea) [](https://packagephobia.com/result?p=alinea)
178 lines (176 loc) • 4.25 kB
JavaScript
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
};