├── .babelrc
├── .gitignore
├── .travis.yml
├── package.js
├── bower.json
├── test
├── yoshinoya.js
├── large.js
├── es6.js
├── es5.js
├── index.html
└── dankogai.js
├── package.json
├── LICENSE.md
├── base64.html
├── README.md
├── base64.min.js
├── old
└── base64-1.7.js
├── base64_utf8
└── base64.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [ "es2015" ]
3 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *,v
2 | attic/**/*
3 | node_modules/**/*
4 | tmp/**/*
5 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "node"
4 |
5 |
6 |
--------------------------------------------------------------------------------
/package.js:
--------------------------------------------------------------------------------
1 | Package.describe({
2 | summary: "Yet another Base64 transcoder"
3 | })
4 |
5 | Package.on_use(function(api){
6 | api.export('Base64');
7 |
8 | api.add_files(['base64.js'], 'server');
9 | });
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "js-base64",
3 | "version": "2.4.3",
4 | "license": "BSD-3-Clause",
5 | "main": [
6 | "./base64.js"
7 | ],
8 | "ignore": [
9 | "old",
10 | "test",
11 | ".gitignore",
12 | ".travis.yml",
13 | "base64.html",
14 | "package.json"
15 | ],
16 | "dependencies": {
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/test/yoshinoya.js:
--------------------------------------------------------------------------------
1 | /*
2 | * use mocha to test me
3 | * http://visionmedia.github.com/mocha/
4 | */
5 | var assert = assert || require("assert");
6 | var Base64 = Base64 || require('../base64.js').Base64;
7 | var is = function (a, e, m) {
8 | return function () {
9 | assert.equal(a, e, m)
10 | }
11 | };
12 |
13 | describe('Yoshinoya', function () {
14 | it('.encode', is(Base64.encode('𠮷野家'), '8KCut+mHjuWutg=='));
15 | it('.encodeURI', is(Base64.encodeURI('𠮷野家'), '8KCut-mHjuWutg'));
16 | it('.decode', is(Base64.decode('8KCut+mHjuWutg=='), '𠮷野家'));
17 | it('.decode', is(Base64.decode('8KCut-mHjuWutg'), '𠮷野家'));
18 | /* it('.decode', is(Base64.decode('7aGC7b636YeO5a62'), '𠮷野家')); */
19 | });
20 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "js-base64",
3 | "version": "2.4.3",
4 | "description": "Yet another Base64 transcoder in pure-JS",
5 | "main": "base64.js",
6 | "directories": {
7 | "test": "test"
8 | },
9 | "scripts": {
10 | "test": "mocha --compilers js:babel-register"
11 | },
12 | "devDependencies": {
13 | "babel-preset-es2015": "^6.24.1",
14 | "babel-register": "^6.26.0",
15 | "mocha": "*"
16 | },
17 | "repository": {
18 | "type": "git",
19 | "url": "git://github.com/dankogai/js-base64.git"
20 | },
21 | "keywords": [
22 | "base64"
23 | ],
24 | "author": "Dan Kogai",
25 | "license": "BSD-3-Clause",
26 | "readmeFilename": "README.md",
27 | "gitHead": "8bfa436f733bec60c95c720e1d720c28b43ae0b2"
28 | }
29 |
--------------------------------------------------------------------------------
/test/large.js:
--------------------------------------------------------------------------------
1 | /*
2 | * $Id: large.js,v 0.3 2012/08/23 19:14:37 dankogai Exp dankogai $
3 | *
4 | * use mocha to test me
5 | * http://visionmedia.github.com/mocha/
6 | */
7 | var assert = assert || require("assert");
8 | var Base64 = Base64 || require('../base64.js').Base64;
9 | var is = function (a, e, m) {
10 | return function () {
11 | assert.equal(a, e, m)
12 | }
13 | };
14 | var seed = function () {
15 | var a, i;
16 | for (a = [], i = 0; i < 256; i++) {
17 | a.push(String.fromCharCode(i));
18 | }
19 | return a.join('');
20 | }();
21 | describe('Base64', function () {
22 | for (var i = 0, str = seed; i < 16; str += str, i++) {
23 | it(''+str.length, is(Base64.decode(Base64.encode(str)), str));
24 | }
25 | });
26 |
--------------------------------------------------------------------------------
/test/es6.js:
--------------------------------------------------------------------------------
1 | /*
2 | * $Id: es6.js,v 0.1 2017/11/29 21:43:17 ufolux Exp ufolux $
3 | *
4 | * use mocha to test me
5 | * http://visionmedia.github.com/mocha/
6 | */
7 | import {Base64} from '../base64'
8 |
9 | var assert = assert || require("assert");
10 | var is = function (a, e, m) {
11 | return function () {
12 | assert.equal(a, e, m)
13 | }
14 | };
15 |
16 | if ('extendString' in Base64){
17 | Base64.extendString();
18 | describe('String', function () {
19 | it('.toBase64', is('小飼弾'.toBase64(), '5bCP6aO85by+'));
20 | it('.toBase64', is('小飼弾'.toBase64(true), '5bCP6aO85by-'));
21 | it('.toBase64URI', is('小飼弾'.toBase64URI(), '5bCP6aO85by-'));
22 | it('.fromBase64', is('5bCP6aO85by+'.fromBase64(), '小飼弾'));
23 | it('.fromBase64', is('5bCP6aO85by-'.fromBase64(), '小飼弾'));
24 | });
25 | }
26 |
--------------------------------------------------------------------------------
/test/es5.js:
--------------------------------------------------------------------------------
1 | /*
2 | * $Id: es5.js,v 0.1 2012/08/23 19:43:17 dankogai Exp dankogai $
3 | *
4 | * use mocha to test me
5 | * http://visionmedia.github.com/mocha/
6 | */
7 | var assert = assert || require("assert");
8 | var Base64 = Base64 || require('../base64.js').Base64;
9 | var is = function (a, e, m) {
10 | return function () {
11 | assert.equal(a, e, m)
12 | }
13 | };
14 |
15 | if ('extendString' in Base64){
16 | Base64.extendString();
17 | describe('String', function () {
18 | it('.toBase64', is('小飼弾'.toBase64(), '5bCP6aO85by+'));
19 | it('.toBase64', is('小飼弾'.toBase64(true), '5bCP6aO85by-'));
20 | it('.toBase64URI', is('小飼弾'.toBase64URI(), '5bCP6aO85by-'));
21 | it('.fromBase64', is('5bCP6aO85by+'.fromBase64(), '小飼弾'));
22 | it('.fromBase64', is('5bCP6aO85by-'.fromBase64(), '小飼弾'));
23 | });
24 | }
25 |
--------------------------------------------------------------------------------
/test/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Mocha Tests
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
25 |
26 |
27 |
28 |
29 |
34 |
35 |
36 | $Id: index.html,v 0.3 2017/09/11 08:43:43 dankogai Exp dankogai $
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) 2014, Dan Kogai
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | * Neither the name of {{{project}}} nor the names of its
15 | contributors may be used to endorse or promote products derived from
16 | this software without specific prior written permission.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 |
--------------------------------------------------------------------------------
/base64.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Test for base64.js
7 |
8 |
9 | Test for base64.js
10 | $Id: base64.html,v 1.1 2009/03/01 22:00:28 dankogai Exp dankogai $
11 |
29 |
30 |
31 |
32 |
46 |
47 |
--------------------------------------------------------------------------------
/test/dankogai.js:
--------------------------------------------------------------------------------
1 | /*
2 | * $Id: dankogai.js,v 0.4 2012/08/24 05:23:18 dankogai Exp dankogai $
3 | *
4 | * use mocha to test me
5 | * http://visionmedia.github.com/mocha/
6 | */
7 | var assert = assert || require("assert");
8 | var Base64 = Base64 || require('../base64.js').Base64;
9 | var is = function (a, e, m) {
10 | return function () {
11 | assert.equal(a, e, m)
12 | }
13 | };
14 |
15 | describe('basic', function () {
16 | it('d', is(Base64.encode('d'), 'ZA=='));
17 | it('da', is(Base64.encode('da'), 'ZGE='));
18 | it('dan', is(Base64.encode('dan'), 'ZGFu'));
19 | it('ZA==', is(Base64.decode('ZA=='), 'd' ));
20 | it('ZGE=', is(Base64.decode('ZGE='), 'da' ));
21 | it('ZGFu', is(Base64.decode('ZGFu'), 'dan' ));
22 | });
23 |
24 | describe('whitespace', function () {
25 | it('Z A==', is(Base64.decode('ZA =='), 'd' ));
26 | it('ZG E=', is(Base64.decode('ZG E='), 'da' ));
27 | it('ZGF u', is(Base64.decode('ZGF u'), 'dan' ));
28 | });
29 |
30 | describe('null', function () {
31 | it('\\0', is(Base64.encode('\0'), 'AA=='));
32 | it('\\0\\0', is(Base64.encode('\0\0'), 'AAA='));
33 | it('\\0\\0\\0', is(Base64.encode('\0\0\0'), 'AAAA'));
34 | it('AA==', is(Base64.decode('AA=='), '\0' ));
35 | it('AAA=', is(Base64.decode('AAA='), '\0\0' ));
36 | it('AAAA', is(Base64.decode('AAAA'), '\0\0\0'));
37 | });
38 |
39 | describe('Base64', function () {
40 | it('.encode', is(Base64.encode('小飼弾'), '5bCP6aO85by+'));
41 | it('.encodeURI', is(Base64.encodeURI('小飼弾'), '5bCP6aO85by-'));
42 | it('.decode', is(Base64.decode('5bCP6aO85by+'), '小飼弾'));
43 | it('.decode', is(Base64.decode('5bCP6aO85by-'), '小飼弾'));
44 | });
45 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](http://travis-ci.org/dankogai/js-base64)
2 |
3 | # base64.js
4 |
5 | Yet another Base64 transcoder
6 |
7 | ## Usage
8 |
9 | ### In Browser
10 |
11 | ```html
12 |
13 | ```
14 |
15 | ### node.js
16 |
17 | ```javascript
18 | var Base64 = require('js-base64').Base64;
19 | ```
20 |
21 | ## es6+
22 |
23 | ```javascript
24 | import { Base64 } from 'js-base64';
25 | ```
26 |
27 | ### npm
28 |
29 | ```javascript
30 | $ npm install --save js-base64
31 | ```
32 |
33 |
34 | ## SYNOPSIS
35 |
36 | ```javascript
37 | Base64.encode('dankogai'); // ZGFua29nYWk=
38 | Base64.encode('小飼弾'); // 5bCP6aO85by+
39 | Base64.encodeURI('小飼弾'); // 5bCP6aO85by-
40 |
41 | Base64.decode('ZGFua29nYWk='); // dankogai
42 | Base64.decode('5bCP6aO85by+'); // 小飼弾
43 | // note .decodeURI() is unnecessary since it accepts both flavors
44 | Base64.decode('5bCP6aO85by-'); // 小飼弾
45 | ```
46 |
47 | ### String Extension for ES5
48 |
49 | ```javascript
50 | if (Base64.extendString) {
51 | // you have to explicitly extend String.prototype
52 | Base64.extendString();
53 | // once extended, you can do the following
54 | 'dankogai'.toBase64(); // ZGFua29nYWk=
55 | '小飼弾'.toBase64(); // 5bCP6aO85by+
56 | '小飼弾'.toBase64(true); // 5bCP6aO85by-
57 | '小飼弾'.toBase64URI(); // 5bCP6aO85by-
58 | 'ZGFua29nYWk='.fromBase64(); // dankogai
59 | '5bCP6aO85by+'.fromBase64(); // 小飼弾
60 | '5bCP6aO85by-'.fromBase64(); // 小飼弾
61 | }
62 | ```
63 |
64 | ### TypeScript
65 |
66 | TypeScript 2.0 type definition was added to the [DefinitelyTyped repository](https://github.com/DefinitelyTyped/DefinitelyTyped).
67 |
68 | ```bash
69 | $ npm install --save @types/js-base64
70 | ```
71 |
72 | ## `.decode()` vs `.atob` (and `.encode()` vs `btoa()`)
73 |
74 | Suppose you have:
75 |
76 | ```
77 | var pngBase64 =
78 | "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
79 | ```
80 |
81 | Which is a Base64-encoded 1x1 transparent PNG, **DO NOT USE** `Base64.decode(pngBase64)`. Use `Base64.atob(pngBase64)` instead. `Base64.decode()` decodes to UTF-8 string while `Base64.atob()` decodes to bytes, which is compatible to browser built-in `atob()` (Which is absent in node.js). The same rule applies to the opposite direction.
82 |
83 |
84 | ## SEE ALSO
85 |
86 | + http://en.wikipedia.org/wiki/Base64
87 |
--------------------------------------------------------------------------------
/base64.min.js:
--------------------------------------------------------------------------------
1 | (function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory(global):typeof define==="function"&&define.amd?define(factory):factory(global)})(typeof self!=="undefined"?self:typeof window!=="undefined"?window:typeof global!=="undefined"?global:this,function(global){"use strict";var _Base64=global.Base64;var version="2.4.3";var buffer;if(typeof module!=="undefined"&&module.exports){try{buffer=require("buffer").Buffer}catch(err){}}var b64chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var b64tab=function(bin){var t={};for(var i=0,l=bin.length;i>>6)+fromCharCode(128|cc&63):fromCharCode(224|cc>>>12&15)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}else{var cc=65536+(c.charCodeAt(0)-55296)*1024+(c.charCodeAt(1)-56320);return fromCharCode(240|cc>>>18&7)+fromCharCode(128|cc>>>12&63)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}};var re_utob=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;var utob=function(u){return u.replace(re_utob,cb_utob)};var cb_encode=function(ccc){var padlen=[0,2,1][ccc.length%3],ord=ccc.charCodeAt(0)<<16|(ccc.length>1?ccc.charCodeAt(1):0)<<8|(ccc.length>2?ccc.charCodeAt(2):0),chars=[b64chars.charAt(ord>>>18),b64chars.charAt(ord>>>12&63),padlen>=2?"=":b64chars.charAt(ord>>>6&63),padlen>=1?"=":b64chars.charAt(ord&63)];return chars.join("")};var btoa=global.btoa?function(b){return global.btoa(b)}:function(b){return b.replace(/[\s\S]{1,3}/g,cb_encode)};var _encode=buffer?buffer.from&&buffer.from!==Uint8Array.from?function(u){return(u.constructor===buffer.constructor?u:buffer.from(u)).toString("base64")}:function(u){return(u.constructor===buffer.constructor?u:new buffer(u)).toString("base64")}:function(u){return btoa(utob(u))};var encode=function(u,urisafe){return!urisafe?_encode(String(u)):_encode(String(u)).replace(/[+\/]/g,function(m0){return m0=="+"?"-":"_"}).replace(/=/g,"")};var encodeURI=function(u){return encode(u,true)};var re_btou=new RegExp(["[À-ß][-¿]","[à-ï][-¿]{2}","[ð-÷][-¿]{3}"].join("|"),"g");var cb_btou=function(cccc){switch(cccc.length){case 4:var cp=(7&cccc.charCodeAt(0))<<18|(63&cccc.charCodeAt(1))<<12|(63&cccc.charCodeAt(2))<<6|63&cccc.charCodeAt(3),offset=cp-65536;return fromCharCode((offset>>>10)+55296)+fromCharCode((offset&1023)+56320);case 3:return fromCharCode((15&cccc.charCodeAt(0))<<12|(63&cccc.charCodeAt(1))<<6|63&cccc.charCodeAt(2));default:return fromCharCode((31&cccc.charCodeAt(0))<<6|63&cccc.charCodeAt(1))}};var btou=function(b){return b.replace(re_btou,cb_btou)};var cb_decode=function(cccc){var len=cccc.length,padlen=len%4,n=(len>0?b64tab[cccc.charAt(0)]<<18:0)|(len>1?b64tab[cccc.charAt(1)]<<12:0)|(len>2?b64tab[cccc.charAt(2)]<<6:0)|(len>3?b64tab[cccc.charAt(3)]:0),chars=[fromCharCode(n>>>16),fromCharCode(n>>>8&255),fromCharCode(n&255)];chars.length-=[0,0,2,1][padlen];return chars.join("")};var atob=global.atob?function(a){return global.atob(a)}:function(a){return a.replace(/[\s\S]{1,4}/g,cb_decode)};var _decode=buffer?buffer.from&&buffer.from!==Uint8Array.from?function(a){return(a.constructor===buffer.constructor?a:buffer.from(a,"base64")).toString()}:function(a){return(a.constructor===buffer.constructor?a:new buffer(a,"base64")).toString()}:function(a){return btou(atob(a))};var decode=function(a){return _decode(String(a).replace(/[-_]/g,function(m0){return m0=="-"?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))};var noConflict=function(){var Base64=global.Base64;global.Base64=_Base64;return Base64};global.Base64={VERSION:version,atob:atob,btoa:btoa,fromBase64:decode,toBase64:encode,utob:utob,encode:encode,encodeURI:encodeURI,btou:btou,decode:decode,noConflict:noConflict};if(typeof Object.defineProperty==="function"){var noEnum=function(v){return{value:v,enumerable:false,writable:true,configurable:true}};global.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",noEnum(function(){return decode(this)}));Object.defineProperty(String.prototype,"toBase64",noEnum(function(urisafe){return encode(this,urisafe)}));Object.defineProperty(String.prototype,"toBase64URI",noEnum(function(){return encode(this,true)}))}}if(global["Meteor"]){Base64=global.Base64}if(typeof module!=="undefined"&&module.exports){module.exports.Base64=global.Base64}else if(typeof define==="function"&&define.amd){define([],function(){return global.Base64})}return{Base64:global.Base64}});
--------------------------------------------------------------------------------
/old/base64-1.7.js:
--------------------------------------------------------------------------------
1 | /*
2 | * $Id: base64.js,v 1.7 2012/08/23 10:30:18 dankogai Exp dankogai $
3 | *
4 | * Licensed under the MIT license.
5 | * http://www.opensource.org/licenses/mit-license.php
6 | *
7 | * References:
8 | * http://en.wikipedia.org/wiki/Base64
9 | */
10 |
11 | (function(global){
12 |
13 | var b64chars
14 | = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
15 |
16 | var b64charcodes = function(){
17 | var a = [];
18 | var codeA = 'A'.charCodeAt(0);
19 | var codea = 'a'.charCodeAt(0);
20 | var code0 = '0'.charCodeAt(0);
21 | for (var i = 0; i < 26; i ++) a.push(codeA + i);
22 | for (var i = 0; i < 26; i ++) a.push(codea + i);
23 | for (var i = 0; i < 10; i ++) a.push(code0 + i);
24 | a.push('+'.charCodeAt(0));
25 | a.push('/'.charCodeAt(0));
26 | return a;
27 | }();
28 |
29 | var b64tab = function(bin){
30 | var t = {};
31 | for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
32 | return t;
33 | }(b64chars);
34 |
35 | var stringToArray = function(s){
36 | var a = [];
37 | for (var i = 0, l = s.length; i < l; i ++) a[i] = s.charCodeAt(i);
38 | return a;
39 | };
40 |
41 | var convertUTF8ArrayToBase64 = function(bin){
42 | var padlen = 0;
43 | while (bin.length % 3){
44 | bin.push(0);
45 | padlen++;
46 | };
47 | var b64 = [];
48 | for (var i = 0, l = bin.length; i < l; i += 3){
49 | var c0 = bin[i], c1 = bin[i+1], c2 = bin[i+2];
50 | if (c0 >= 256 || c1 >= 256 || c2 >= 256)
51 | throw 'unsupported character found';
52 | var n = (c0 << 16) | (c1 << 8) | c2;
53 | b64.push(
54 | b64charcodes[ n >>> 18],
55 | b64charcodes[(n >>> 12) & 63],
56 | b64charcodes[(n >>> 6) & 63],
57 | b64charcodes[ n & 63]
58 | );
59 | }
60 | while (padlen--) b64[b64.length - padlen - 1] = '='.charCodeAt(0);
61 | return chunkStringFromCharCodeApply(b64);
62 | };
63 |
64 | var convertBase64ToUTF8Array = function(b64){
65 | b64 = b64.replace(/[^A-Za-z0-9+\/]+/g, '');
66 | var bin = [];
67 | var padlen = b64.length % 4;
68 | for (var i = 0, l = b64.length; i < l; i += 4){
69 | var n = ((b64tab[b64.charAt(i )] || 0) << 18)
70 | | ((b64tab[b64.charAt(i+1)] || 0) << 12)
71 | | ((b64tab[b64.charAt(i+2)] || 0) << 6)
72 | | ((b64tab[b64.charAt(i+3)] || 0));
73 | bin.push(
74 | ( n >> 16 ),
75 | ( (n >> 8) & 0xff ),
76 | ( n & 0xff )
77 | );
78 | }
79 | bin.length -= [0,0,2,1][padlen];
80 | return bin;
81 | };
82 |
83 | var convertUTF16ArrayToUTF8Array = function(uni){
84 | var bin = [];
85 | for (var i = 0, l = uni.length; i < l; i++){
86 | var n = uni[i];
87 | if (n < 0x80)
88 | bin.push(n);
89 | else if (n < 0x800)
90 | bin.push(
91 | 0xc0 | (n >>> 6),
92 | 0x80 | (n & 0x3f));
93 | else
94 | bin.push(
95 | 0xe0 | ((n >>> 12) & 0x0f),
96 | 0x80 | ((n >>> 6) & 0x3f),
97 | 0x80 | (n & 0x3f));
98 | }
99 | return bin;
100 | };
101 |
102 | var convertUTF8ArrayToUTF16Array = function(bin){
103 | var uni = [];
104 | for (var i = 0, l = bin.length; i < l; i++){
105 | var c0 = bin[i];
106 | if (c0 < 0x80){
107 | uni.push(c0);
108 | }else{
109 | var c1 = bin[++i];
110 | if (c0 < 0xe0){
111 | uni.push(((c0 & 0x1f) << 6) | (c1 & 0x3f));
112 | }else{
113 | var c2 = bin[++i];
114 | uni.push(
115 | ((c0 & 0x0f) << 12) | ((c1 & 0x3f) << 6) | (c2 & 0x3f)
116 | );
117 | }
118 | }
119 | }
120 | return uni;
121 | };
122 |
123 | var convertUTF8StringToBase64 = function(bin){
124 | return convertUTF8ArrayToBase64(stringToArray(bin));
125 | };
126 |
127 | var convertBase64ToUTF8String = function(b64){
128 | return chunkStringFromCharCodeApply(convertBase64ToUTF8Array(b64));
129 | };
130 |
131 | var convertUTF8StringToUTF16Array = function(bin){
132 | return convertUTF8ArrayToUTF16Array(stringToArray(bin));
133 | };
134 |
135 | var convertUTF8ArrayToUTF16String = function(bin){
136 | return chunkStringFromCharCodeApply(convertUTF8ArrayToUTF16Array(bin));
137 | };
138 |
139 | var convertUTF8StringToUTF16String = function(bin){
140 | return chunkStringFromCharCodeApply(
141 | convertUTF8ArrayToUTF16Array(stringToArray(bin))
142 | );
143 | };
144 |
145 | var convertUTF16StringToUTF8Array = function(uni){
146 | return convertUTF16ArrayToUTF8Array(stringToArray(uni));
147 | };
148 |
149 | var convertUTF16ArrayToUTF8String = function(uni){
150 | return chunkStringFromCharCodeApply(convertUTF16ArrayToUTF8Array(uni));
151 | };
152 |
153 | var convertUTF16StringToUTF8String = function(uni){
154 | return chunkStringFromCharCodeApply(
155 | convertUTF16ArrayToUTF8Array(stringToArray(uni))
156 | );
157 | };
158 |
159 | /*
160 | * String.fromCharCode.apply will only handle arrays as big as 65536,
161 | * after that it'll return a truncated string with no warning.
162 | */
163 | var chunkStringFromCharCodeApply = function(arr){
164 | var strs = [], i;
165 | for (i = 0; i < arr.length; i += 65536){
166 | strs.push(String.fromCharCode.apply(String, arr.slice(i, i+65536)));
167 | }
168 | return strs.join('');
169 | };
170 |
171 | if (global.btoa){
172 | var btoa = global.btoa;
173 | var convertUTF16StringToBase64 = function (uni){
174 | return btoa(convertUTF16StringToUTF8String(uni));
175 | };
176 | }
177 | else {
178 | var btoa = convertUTF8StringToBase64;
179 | var convertUTF16StringToBase64 = function (uni){
180 | return convertUTF8ArrayToBase64(convertUTF16StringToUTF8Array(uni));
181 | };
182 | }
183 |
184 | if (global.atob){
185 | var atob = global.atob;
186 | var convertBase64ToUTF16String = function (b64){
187 | return convertUTF8StringToUTF16String(atob(b64));
188 | };
189 | }
190 | else {
191 | var atob = convertBase64ToUTF8String;
192 | var convertBase64ToUTF16String = function (b64){
193 | return convertUTF8ArrayToUTF16String(convertBase64ToUTF8Array(b64));
194 | };
195 | }
196 |
197 | global.Base64 = {
198 | convertUTF8ArrayToBase64:convertUTF8ArrayToBase64,
199 | convertByteArrayToBase64:convertUTF8ArrayToBase64,
200 | convertBase64ToUTF8Array:convertBase64ToUTF8Array,
201 | convertBase64ToByteArray:convertBase64ToUTF8Array,
202 | convertUTF16ArrayToUTF8Array:convertUTF16ArrayToUTF8Array,
203 | convertUTF16ArrayToByteArray:convertUTF16ArrayToUTF8Array,
204 | convertUTF8ArrayToUTF16Array:convertUTF8ArrayToUTF16Array,
205 | convertByteArrayToUTF16Array:convertUTF8ArrayToUTF16Array,
206 | convertUTF8StringToBase64:convertUTF8StringToBase64,
207 | convertBase64ToUTF8String:convertBase64ToUTF8String,
208 | convertUTF8StringToUTF16Array:convertUTF8StringToUTF16Array,
209 | convertUTF8ArrayToUTF16String:convertUTF8ArrayToUTF16String,
210 | convertByteArrayToUTF16String:convertUTF8ArrayToUTF16String,
211 | convertUTF8StringToUTF16String:convertUTF8StringToUTF16String,
212 | convertUTF16StringToUTF8Array:convertUTF16StringToUTF8Array,
213 | convertUTF16StringToByteArray:convertUTF16StringToUTF8Array,
214 | convertUTF16ArrayToUTF8String:convertUTF16ArrayToUTF8String,
215 | convertUTF16StringToUTF8String:convertUTF16StringToUTF8String,
216 | convertUTF16StringToBase64:convertUTF16StringToBase64,
217 | convertBase64ToUTF16String:convertBase64ToUTF16String,
218 | fromBase64:convertBase64ToUTF8String,
219 | toBase64:convertUTF8StringToBase64,
220 | atob:atob,
221 | btoa:btoa,
222 | utob:convertUTF16StringToUTF8String,
223 | btou:convertUTF8StringToUTF16String,
224 | encode:convertUTF16StringToBase64,
225 | encodeURI:function(u){
226 | return convertUTF16StringToBase64(u).replace(/[+\/]/g, function(m0){
227 | return m0 == '+' ? '-' : '_';
228 | }).replace(/=+$/, '');
229 | },
230 | decode:function(a){
231 | return convertBase64ToUTF16String(a.replace(/[-_]/g, function(m0){
232 | return m0 == '-' ? '+' : '/';
233 | }));
234 | }
235 | };
236 |
237 | })(this);
238 |
--------------------------------------------------------------------------------
/base64_utf8:
--------------------------------------------------------------------------------
1 | ;(function (global, factory) {
2 | typeof exports === 'object' && typeof module !== 'undefined'
3 | ? module.exports = factory(global)
4 | : typeof define === 'function' && define.amd
5 | ? define(factory) : factory(global)
6 | }((
7 | typeof self !== 'undefined' ? self
8 | : typeof window !== 'undefined' ? window
9 | : typeof global !== 'undefined' ? global
10 | : this
11 | ), function(global) {
12 | 'use strict';
13 | // existing version for noConflict()
14 | var _Base64 = global.Base64;
15 | var version = "2.4.3";
16 | // if node.js, we use Buffer
17 | var buffer;
18 | if (typeof module !== 'undefined' && module.exports) {
19 | try {
20 | buffer = require('buffer').Buffer;
21 | } catch (err) {}
22 | }
23 | // constants
24 | var b64chars
25 | = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
26 | var b64tab = function(bin) {
27 | var t = {};
28 | for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
29 | return t;
30 | }(b64chars);
31 | var fromCharCode = String.fromCharCode;
32 | // encoder stuff
33 | var cb_utob = function(c) {
34 | if (c.length < 2) {
35 | var cc = c.charCodeAt(0);
36 | return cc < 0x80 ? c
37 | : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
38 | + fromCharCode(0x80 | (cc & 0x3f)))
39 | : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
40 | + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
41 | + fromCharCode(0x80 | ( cc & 0x3f)));
42 | } else {
43 | var cc = 0x10000
44 | + (c.charCodeAt(0) - 0xD800) * 0x400
45 | + (c.charCodeAt(1) - 0xDC00);
46 | return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
47 | + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
48 | + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
49 | + fromCharCode(0x80 | ( cc & 0x3f)));
50 | }
51 | };
52 | var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
53 | var utob = function(u) {
54 | return u.replace(re_utob, cb_utob);
55 | };
56 | var cb_encode = function(ccc) {
57 | var padlen = [0, 2, 1][ccc.length % 3],
58 | ord = ccc.charCodeAt(0) << 16
59 | | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
60 | | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
61 | chars = [
62 | b64chars.charAt( ord >>> 18),
63 | b64chars.charAt((ord >>> 12) & 63),
64 | padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
65 | padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
66 | ];
67 | return chars.join('');
68 | };
69 | var btoa = global.btoa ? function(b) {
70 | return global.btoa(b);
71 | } : function(b) {
72 | return b.replace(/[\s\S]{1,3}/g, cb_encode);
73 | };
74 | var _encode = buffer ?
75 | buffer.from && buffer.from !== Uint8Array.from ? function (u) {
76 | return (u.constructor === buffer.constructor ? u : buffer.from(u))
77 | .toString('base64')
78 | }
79 | : function (u) {
80 | return (u.constructor === buffer.constructor ? u : new buffer(u))
81 | .toString('base64')
82 | }
83 | : function (u) { return btoa(utob(u)) }
84 | ;
85 | var encode = function(u, urisafe) {
86 | return !urisafe
87 | ? _encode(String(u))
88 | : _encode(String(u)).replace(/[+\/]/g, function(m0) {
89 | return m0 == '+' ? '-' : '_';
90 | }).replace(/=/g, '');
91 | };
92 | var encodeURI = function(u) { return encode(u, true) };
93 | // decoder stuff
94 | var re_btou = new RegExp([
95 | '[\xC0-\xDF][\x80-\xBF]',
96 | '[\xE0-\xEF][\x80-\xBF]{2}',
97 | '[\xF0-\xF7][\x80-\xBF]{3}'
98 | ].join('|'), 'g');
99 | var cb_btou = function(cccc) {
100 | switch(cccc.length) {
101 | case 4:
102 | var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
103 | | ((0x3f & cccc.charCodeAt(1)) << 12)
104 | | ((0x3f & cccc.charCodeAt(2)) << 6)
105 | | (0x3f & cccc.charCodeAt(3)),
106 | offset = cp - 0x10000;
107 | return (fromCharCode((offset >>> 10) + 0xD800)
108 | + fromCharCode((offset & 0x3FF) + 0xDC00));
109 | case 3:
110 | return fromCharCode(
111 | ((0x0f & cccc.charCodeAt(0)) << 12)
112 | | ((0x3f & cccc.charCodeAt(1)) << 6)
113 | | (0x3f & cccc.charCodeAt(2))
114 | );
115 | default:
116 | return fromCharCode(
117 | ((0x1f & cccc.charCodeAt(0)) << 6)
118 | | (0x3f & cccc.charCodeAt(1))
119 | );
120 | }
121 | };
122 | var btou = function(b) {
123 | return b.replace(re_btou, cb_btou);
124 | };
125 | var cb_decode = function(cccc) {
126 | var len = cccc.length,
127 | padlen = len % 4,
128 | n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
129 | | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
130 | | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
131 | | (len > 3 ? b64tab[cccc.charAt(3)] : 0),
132 | chars = [
133 | fromCharCode( n >>> 16),
134 | fromCharCode((n >>> 8) & 0xff),
135 | fromCharCode( n & 0xff)
136 | ];
137 | chars.length -= [0, 0, 2, 1][padlen];
138 | return chars.join('');
139 | };
140 | var atob = global.atob ? function(a) {
141 | return global.atob(a);
142 | } : function(a){
143 | return a.replace(/[\s\S]{1,4}/g, cb_decode);
144 | };
145 | var _decode = buffer ?
146 | buffer.from && buffer.from !== Uint8Array.from ? function(a) {
147 | return (a.constructor === buffer.constructor
148 | ? a : buffer.from(a, 'base64')).toString();
149 | }
150 | : function(a) {
151 | return (a.constructor === buffer.constructor
152 | ? a : new buffer(a, 'base64')).toString();
153 | }
154 | : function(a) { return btou(atob(a)) };
155 | var decode = function(a){
156 | return _decode(
157 | String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })
158 | .replace(/[^A-Za-z0-9\+\/]/g, '')
159 | );
160 | };
161 | var noConflict = function() {
162 | var Base64 = global.Base64;
163 | global.Base64 = _Base64;
164 | return Base64;
165 | };
166 | // export Base64
167 | global.Base64 = {
168 | VERSION: version,
169 | atob: atob,
170 | btoa: btoa,
171 | fromBase64: decode,
172 | toBase64: encode,
173 | utob: utob,
174 | encode: encode,
175 | encodeURI: encodeURI,
176 | btou: btou,
177 | decode: decode,
178 | noConflict: noConflict
179 | };
180 | // if ES5 is available, make Base64.extendString() available
181 | if (typeof Object.defineProperty === 'function') {
182 | var noEnum = function(v){
183 | return {value:v,enumerable:false,writable:true,configurable:true};
184 | };
185 | global.Base64.extendString = function () {
186 | Object.defineProperty(
187 | String.prototype, 'fromBase64', noEnum(function () {
188 | return decode(this)
189 | }));
190 | Object.defineProperty(
191 | String.prototype, 'toBase64', noEnum(function (urisafe) {
192 | return encode(this, urisafe)
193 | }));
194 | Object.defineProperty(
195 | String.prototype, 'toBase64URI', noEnum(function () {
196 | return encode(this, true)
197 | }));
198 | };
199 | }
200 | //
201 | // export Base64 to the namespace
202 | //
203 | if (global['Meteor']) { // Meteor.js
204 | Base64 = global.Base64;
205 | }
206 | // module.exports and AMD are mutually exclusive.
207 | // module.exports has precedence.
208 | if (typeof module !== 'undefined' && module.exports) {
209 | module.exports.Base64 = global.Base64;
210 | }
211 | else if (typeof define === 'function' && define.amd) {
212 | // AMD. Register as an anonymous module.
213 | define([], function(){ return global.Base64 });
214 | }
215 | // that's it!
216 | return {Base64: global.Base64}
217 | }));
218 |
--------------------------------------------------------------------------------
/base64.js:
--------------------------------------------------------------------------------
1 | /*
2 | * base64.js
3 | *
4 | * Licensed under the BSD 3-Clause License.
5 | * http://opensource.org/licenses/BSD-3-Clause
6 | *
7 | * References:
8 | * http://en.wikipedia.org/wiki/Base64
9 | */
10 | ;(function (global, factory) {
11 | typeof exports === 'object' && typeof module !== 'undefined'
12 | ? module.exports = factory(global)
13 | : typeof define === 'function' && define.amd
14 | ? define(factory) : factory(global)
15 | }((
16 | typeof self !== 'undefined' ? self
17 | : typeof window !== 'undefined' ? window
18 | : typeof global !== 'undefined' ? global
19 | : this
20 | ), function(global) {
21 | 'use strict';
22 | // existing version for noConflict()
23 | var _Base64 = global.Base64;
24 | var version = "2.4.3";
25 | // if node.js, we use Buffer
26 | var buffer;
27 | if (typeof module !== 'undefined' && module.exports) {
28 | try {
29 | buffer = require('buffer').Buffer;
30 | } catch (err) {}
31 | }
32 | // constants
33 | var b64chars
34 | = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
35 | var b64tab = function(bin) {
36 | var t = {};
37 | for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
38 | return t;
39 | }(b64chars);
40 | var fromCharCode = String.fromCharCode;
41 | // encoder stuff
42 | var cb_utob = function(c) {
43 | if (c.length < 2) {
44 | var cc = c.charCodeAt(0);
45 | return cc < 0x80 ? c
46 | : cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
47 | + fromCharCode(0x80 | (cc & 0x3f)))
48 | : (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
49 | + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
50 | + fromCharCode(0x80 | ( cc & 0x3f)));
51 | } else {
52 | var cc = 0x10000
53 | + (c.charCodeAt(0) - 0xD800) * 0x400
54 | + (c.charCodeAt(1) - 0xDC00);
55 | return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
56 | + fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
57 | + fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
58 | + fromCharCode(0x80 | ( cc & 0x3f)));
59 | }
60 | };
61 | var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
62 | var utob = function(u) {
63 | return u.replace(re_utob, cb_utob);
64 | };
65 | var cb_encode = function(ccc) {
66 | var padlen = [0, 2, 1][ccc.length % 3],
67 | ord = ccc.charCodeAt(0) << 16
68 | | ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
69 | | ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
70 | chars = [
71 | b64chars.charAt( ord >>> 18),
72 | b64chars.charAt((ord >>> 12) & 63),
73 | padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
74 | padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
75 | ];
76 | return chars.join('');
77 | };
78 | var btoa = global.btoa ? function(b) {
79 | return global.btoa(b);
80 | } : function(b) {
81 | return b.replace(/[\s\S]{1,3}/g, cb_encode);
82 | };
83 | var _encode = buffer ?
84 | buffer.from && Uint8Array && buffer.from !== Uint8Array.from
85 | ? function (u) {
86 | return (u.constructor === buffer.constructor ? u : buffer.from(u))
87 | .toString('base64')
88 | }
89 | : function (u) {
90 | return (u.constructor === buffer.constructor ? u : new buffer(u))
91 | .toString('base64')
92 | }
93 | : function (u) { return btoa(utob(u)) }
94 | ;
95 | var encode = function(u, urisafe) {
96 | return !urisafe
97 | ? _encode(String(u))
98 | : _encode(String(u)).replace(/[+\/]/g, function(m0) {
99 | return m0 == '+' ? '-' : '_';
100 | }).replace(/=/g, '');
101 | };
102 | var encodeURI = function(u) { return encode(u, true) };
103 | // decoder stuff
104 | var re_btou = new RegExp([
105 | '[\xC0-\xDF][\x80-\xBF]',
106 | '[\xE0-\xEF][\x80-\xBF]{2}',
107 | '[\xF0-\xF7][\x80-\xBF]{3}'
108 | ].join('|'), 'g');
109 | var cb_btou = function(cccc) {
110 | switch(cccc.length) {
111 | case 4:
112 | var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
113 | | ((0x3f & cccc.charCodeAt(1)) << 12)
114 | | ((0x3f & cccc.charCodeAt(2)) << 6)
115 | | (0x3f & cccc.charCodeAt(3)),
116 | offset = cp - 0x10000;
117 | return (fromCharCode((offset >>> 10) + 0xD800)
118 | + fromCharCode((offset & 0x3FF) + 0xDC00));
119 | case 3:
120 | return fromCharCode(
121 | ((0x0f & cccc.charCodeAt(0)) << 12)
122 | | ((0x3f & cccc.charCodeAt(1)) << 6)
123 | | (0x3f & cccc.charCodeAt(2))
124 | );
125 | default:
126 | return fromCharCode(
127 | ((0x1f & cccc.charCodeAt(0)) << 6)
128 | | (0x3f & cccc.charCodeAt(1))
129 | );
130 | }
131 | };
132 | var btou = function(b) {
133 | return b.replace(re_btou, cb_btou);
134 | };
135 | var cb_decode = function(cccc) {
136 | var len = cccc.length,
137 | padlen = len % 4,
138 | n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
139 | | (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
140 | | (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
141 | | (len > 3 ? b64tab[cccc.charAt(3)] : 0),
142 | chars = [
143 | fromCharCode( n >>> 16),
144 | fromCharCode((n >>> 8) & 0xff),
145 | fromCharCode( n & 0xff)
146 | ];
147 | chars.length -= [0, 0, 2, 1][padlen];
148 | return chars.join('');
149 | };
150 | var atob = global.atob ? function(a) {
151 | return global.atob(a);
152 | } : function(a){
153 | return a.replace(/[\s\S]{1,4}/g, cb_decode);
154 | };
155 | var _decode = buffer ?
156 | buffer.from && Uint8Array && buffer.from !== Uint8Array.from
157 | ? function(a) {
158 | return (a.constructor === buffer.constructor
159 | ? a : buffer.from(a, 'base64')).toString();
160 | }
161 | : function(a) {
162 | return (a.constructor === buffer.constructor
163 | ? a : new buffer(a, 'base64')).toString();
164 | }
165 | : function(a) { return btou(atob(a)) };
166 | var decode = function(a){
167 | return _decode(
168 | String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' })
169 | .replace(/[^A-Za-z0-9\+\/]/g, '')
170 | );
171 | };
172 | var noConflict = function() {
173 | var Base64 = global.Base64;
174 | global.Base64 = _Base64;
175 | return Base64;
176 | };
177 | // export Base64
178 | global.Base64 = {
179 | VERSION: version,
180 | atob: atob,
181 | btoa: btoa,
182 | fromBase64: decode,
183 | toBase64: encode,
184 | utob: utob,
185 | encode: encode,
186 | encodeURI: encodeURI,
187 | btou: btou,
188 | decode: decode,
189 | noConflict: noConflict
190 | };
191 | // if ES5 is available, make Base64.extendString() available
192 | if (typeof Object.defineProperty === 'function') {
193 | var noEnum = function(v){
194 | return {value:v,enumerable:false,writable:true,configurable:true};
195 | };
196 | global.Base64.extendString = function () {
197 | Object.defineProperty(
198 | String.prototype, 'fromBase64', noEnum(function () {
199 | return decode(this)
200 | }));
201 | Object.defineProperty(
202 | String.prototype, 'toBase64', noEnum(function (urisafe) {
203 | return encode(this, urisafe)
204 | }));
205 | Object.defineProperty(
206 | String.prototype, 'toBase64URI', noEnum(function () {
207 | return encode(this, true)
208 | }));
209 | };
210 | }
211 | //
212 | // export Base64 to the namespace
213 | //
214 | if (global['Meteor']) { // Meteor.js
215 | Base64 = global.Base64;
216 | }
217 | // module.exports and AMD are mutually exclusive.
218 | // module.exports has precedence.
219 | if (typeof module !== 'undefined' && module.exports) {
220 | module.exports.Base64 = global.Base64;
221 | }
222 | else if (typeof define === 'function' && define.amd) {
223 | // AMD. Register as an anonymous module.
224 | define([], function(){ return global.Base64 });
225 | }
226 | // that's it!
227 | return {Base64: global.Base64}
228 | }));
229 |
--------------------------------------------------------------------------------