UNPKG

@kitmi/utils

Version:

A JavaScript utility library for both server and browser

57 lines (56 loc) 1.57 kB
// this is not standard base64 encoding, it's a custom encoding that uses a url-friendly alphabet // for standard base64 encoding, use base64Encode and base64Decode "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { b64ton: function() { return b64ton; }, ntob64: function() { return ntob64; } }); const alphabet = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'; // binary to string lookup table const b2s = alphabet.split(''); // string to binary lookup table // 123 == 'z'.charCodeAt(0) + 1 const s2b = new Array(123); for(let i = 0; i < alphabet.length; i++){ s2b[alphabet.charCodeAt(i)] = i; } const ntob64 = (number)=>{ if (number < 0) return `-${ntob64(-number)}`; let lo = number >>> 0; let hi = number / 4294967296 >>> 0; let right = ''; while(hi > 0){ right = b2s[0x3f & lo] + right; lo >>>= 6; lo |= (0x3f & hi) << 26; hi >>>= 6; } let left = ''; do { left = b2s[0x3f & lo] + left; lo >>>= 6; }while (lo > 0) return left + right; }; const b64ton = (base64)=>{ let number = 0; const sign = base64.charAt(0) === '-' ? 1 : 0; for(let i = sign; i < base64.length; i++){ number = number * 64 + s2b[base64.charCodeAt(i)]; } return sign ? -number : number; }; //# sourceMappingURL=n2b64.js.map