openchemlib
Version:
Manipulate molecules
56 lines (45 loc) • 1.31 kB
JavaScript
;
/* eslint-disable unicorn/prefer-code-point */
// https://github.com/niklasvh/base64-arraybuffer/blob/master/LICENSE
const chars =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
// Use a lookup table to find the index.
const lookup = new Uint8Array(256);
for (let i = 0; i < chars.length; i++) {
lookup[chars.charCodeAt(i)] = i;
}
function decodeBase64(base64) {
let bufferLength = base64.length * 0.75;
let len = base64.length;
let i;
let p = 0;
let encoded1;
let encoded2;
let encoded3;
let encoded4;
if (base64.at(-1) === '=') {
bufferLength--;
if (base64.at(-2) === '=') {
bufferLength--;
}
}
const arraybuffer = new ArrayBuffer(bufferLength);
const bytes = new Uint8Array(arraybuffer);
for (i = 0; i < len; i += 4) {
encoded1 = lookup[base64.charCodeAt(i)];
encoded2 = lookup[base64.charCodeAt(i + 1)];
encoded3 = lookup[base64.charCodeAt(i + 2)];
encoded4 = lookup[base64.charCodeAt(i + 3)];
bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
}
return arraybuffer;
}
function toHex(v) {
return v.toString(16).padStart(2, '0');
}
module.exports = {
decodeBase64,
toHex,
};