browser-atob.js
 1  (function (w) {
 2    "use strict";
 3  
 4    function findBest(atobNative) {
 5      // normal window
 6      if ('function' === typeof atobNative) { return atobNative; }
 7  
 8  
 9      // browserify (web worker)
10      if ('function' === typeof Buffer) {
11        return function atobBrowserify(a) {
12          //!! Deliberately using an API that's deprecated in node.js because
13          //!! this file is for browsers and we expect them to cope with it.
14          //!! Discussion: github.com/node-browser-compat/atob/pull/9
15          return new Buffer(a, 'base64').toString('binary');
16        };
17      }
18  
19      // ios web worker with base64js
20      if ('object' === typeof w.base64js) {
21        // bufferToBinaryString
22        // https://git.coolaj86.com/coolaj86/unibabel.js/blob/master/index.js#L50
23        return function atobWebWorker_iOS(a) {
24          var buf = w.base64js.b64ToByteArray(a);
25          return Array.prototype.map.call(buf, function (ch) {
26            return String.fromCharCode(ch);
27          }).join('');
28        };
29      }
30  
31  		return function () {
32  			// ios web worker without base64js
33  			throw new Error("You're probably in an old browser or an iOS webworker." +
34  				" It might help to include beatgammit's base64-js.");
35      };
36    }
37  
38    var atobBest = findBest(w.atob);
39    w.atob = atobBest;
40  
41    if ((typeof module === 'object') && module && module.exports) {
42      module.exports = atobBest;
43    }
44  }(window));