123456789101112131415161718192021222324252627282930313233343536 |
- 'use strict';
- // btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js
- var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
- function E() {
- this.message = 'String contains an invalid character';
- }
- E.prototype = new Error;
- E.prototype.code = 5;
- E.prototype.name = 'InvalidCharacterError';
- function btoa(input) {
- var str = String(input);
- var output = '';
- for (
- // initialize result and counter
- var block, charCode, idx = 0, map = chars;
- // if the next str index does not exist:
- // change the mapping table to "="
- // check if d has no fractional digits
- str.charAt(idx | 0) || (map = '=', idx % 1);
- // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
- output += map.charAt(63 & block >> 8 - idx % 1 * 8)
- ) {
- charCode = str.charCodeAt(idx += 3 / 4);
- if (charCode > 0xFF) {
- throw new E();
- }
- block = block << 8 | charCode;
- }
- return output;
- }
- module.exports = btoa;
|