Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
jajbshjahavahh
GitHub Repository: jajbshjahavahh/Gojo-Satoru
Path: blob/master/node_modules/@protobufjs/base64/index.js
2591 views
1
"use strict";
2
3
/**
4
* A minimal base64 implementation for number arrays.
5
* @memberof util
6
* @namespace
7
*/
8
var base64 = exports;
9
10
/**
11
* Calculates the byte length of a base64 encoded string.
12
* @param {string} string Base64 encoded string
13
* @returns {number} Byte length
14
*/
15
base64.length = function length(string) {
16
var p = string.length;
17
if (!p)
18
return 0;
19
var n = 0;
20
while (--p % 4 > 1 && string.charAt(p) === "=")
21
++n;
22
return Math.ceil(string.length * 3) / 4 - n;
23
};
24
25
// Base64 encoding table
26
var b64 = new Array(64);
27
28
// Base64 decoding table
29
var s64 = new Array(123);
30
31
// 65..90, 97..122, 48..57, 43, 47
32
for (var i = 0; i < 64;)
33
s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;
34
35
/**
36
* Encodes a buffer to a base64 encoded string.
37
* @param {Uint8Array} buffer Source buffer
38
* @param {number} start Source start
39
* @param {number} end Source end
40
* @returns {string} Base64 encoded string
41
*/
42
base64.encode = function encode(buffer, start, end) {
43
var parts = null,
44
chunk = [];
45
var i = 0, // output index
46
j = 0, // goto index
47
t; // temporary
48
while (start < end) {
49
var b = buffer[start++];
50
switch (j) {
51
case 0:
52
chunk[i++] = b64[b >> 2];
53
t = (b & 3) << 4;
54
j = 1;
55
break;
56
case 1:
57
chunk[i++] = b64[t | b >> 4];
58
t = (b & 15) << 2;
59
j = 2;
60
break;
61
case 2:
62
chunk[i++] = b64[t | b >> 6];
63
chunk[i++] = b64[b & 63];
64
j = 0;
65
break;
66
}
67
if (i > 8191) {
68
(parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));
69
i = 0;
70
}
71
}
72
if (j) {
73
chunk[i++] = b64[t];
74
chunk[i++] = 61;
75
if (j === 1)
76
chunk[i++] = 61;
77
}
78
if (parts) {
79
if (i)
80
parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));
81
return parts.join("");
82
}
83
return String.fromCharCode.apply(String, chunk.slice(0, i));
84
};
85
86
var invalidEncoding = "invalid encoding";
87
88
/**
89
* Decodes a base64 encoded string to a buffer.
90
* @param {string} string Source string
91
* @param {Uint8Array} buffer Destination buffer
92
* @param {number} offset Destination offset
93
* @returns {number} Number of bytes written
94
* @throws {Error} If encoding is invalid
95
*/
96
base64.decode = function decode(string, buffer, offset) {
97
var start = offset;
98
var j = 0, // goto index
99
t; // temporary
100
for (var i = 0; i < string.length;) {
101
var c = string.charCodeAt(i++);
102
if (c === 61 && j > 1)
103
break;
104
if ((c = s64[c]) === undefined)
105
throw Error(invalidEncoding);
106
switch (j) {
107
case 0:
108
t = c;
109
j = 1;
110
break;
111
case 1:
112
buffer[offset++] = t << 2 | (c & 48) >> 4;
113
t = c;
114
j = 2;
115
break;
116
case 2:
117
buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;
118
t = c;
119
j = 3;
120
break;
121
case 3:
122
buffer[offset++] = (t & 3) << 6 | c;
123
j = 0;
124
break;
125
}
126
}
127
if (j === 1)
128
throw Error(invalidEncoding);
129
return offset - start;
130
};
131
132
/**
133
* Tests if the specified string appears to be base64 encoded.
134
* @param {string} string String to test
135
* @returns {boolean} `true` if probably base64 encoded, otherwise false
136
*/
137
base64.test = function test(string) {
138
return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);
139
};
140
141