UNPKG

multiformats

Version:

Interface for multihash, multicodec, multibase and CID

64 lines (60 loc) 1.62 kB
'use strict'; var base = require('./base.js'); const alphabetSettings = alphabet => ({ alphabet, padding: alphabet.indexOf('=') > -1, url: alphabet.indexOf('-') > -1 && alphabet.indexOf('_') > -1 }); var b64 = b64 => { const encode = (input, {url, padding}) => { let output = b64.encode(input); if (url) { output = output.replace(/\+/g, '-').replace(/\//g, '_'); } const pad = output.indexOf('='); if (pad > 0 && !padding) { output = output.substring(0, pad); } return output; }; const decode = (input, {alphabet}) => { for (const char of input) { if (alphabet.indexOf(char) < 0) { throw new Error('invalid base64 character'); } } return b64.decode(input); }; const codec = ({name, prefix, alphabet}) => base.withSettings({ name, prefix, settings: alphabetSettings(alphabet), decode, encode }); return { b64, __browser: b64.__browser, base64: codec({ name: 'base64', prefix: 'm', alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' }), base64pad: codec({ name: 'base64pad', prefix: 'M', alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' }), base64url: codec({ name: 'base64url', prefix: 'u', alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_' }), base64urlpad: codec({ name: 'base64urlpad', prefix: 'U', alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=' }) }; }; module.exports = b64;