arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
socketioMEANseed/server/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js
server/node_modules/base64-arraybuffer/lib/base64-arraybuffer.jsRaw
 1/*
 2 * base64-arraybuffer
 3 * https://github.com/niklasvh/base64-arraybuffer
 4 *
 5 * Copyright (c) 2012 Niklas von Hertzen
 6 * Licensed under the MIT license.
 7 */
 8(function(){
 9  "use strict";
10
11  var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
12
13  // Use a lookup table to find the index.
14  var lookup = new Uint8Array(256);
15  for (var i = 0; i < chars.length; i++) {
16    lookup[chars.charCodeAt(i)] = i;
17  }
18
19  exports.encode = function(arraybuffer) {
20    var bytes = new Uint8Array(arraybuffer),
21    i, len = bytes.length, base64 = "";
22
23    for (i = 0; i < len; i+=3) {
24      base64 += chars[bytes[i] >> 2];
25      base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
26      base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
27      base64 += chars[bytes[i + 2] & 63];
28    }
29
30    if ((len % 3) === 2) {
31      base64 = base64.substring(0, base64.length - 1) + "=";
32    } else if (len % 3 === 1) {
33      base64 = base64.substring(0, base64.length - 2) + "==";
34    }
35
36    return base64;
37  };
38
39  exports.decode =  function(base64) {
40    var bufferLength = base64.length * 0.75,
41    len = base64.length, i, p = 0,
42    encoded1, encoded2, encoded3, encoded4;
43
44    if (base64[base64.length - 1] === "=") {
45      bufferLength--;
46      if (base64[base64.length - 2] === "=") {
47        bufferLength--;
48      }
49    }
50
51    var arraybuffer = new ArrayBuffer(bufferLength),
52    bytes = new Uint8Array(arraybuffer);
53
54    for (i = 0; i < len; i+=4) {
55      encoded1 = lookup[base64.charCodeAt(i)];
56      encoded2 = lookup[base64.charCodeAt(i+1)];
57      encoded3 = lookup[base64.charCodeAt(i+2)];
58      encoded4 = lookup[base64.charCodeAt(i+3)];
59
60      bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
61      bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
62      bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
63    }
64
65    return arraybuffer;
66  };
67})();