@dcl/sdk 7.24.6-30098879609.commit-e704246 → 7.25.1-30310486734.commit-5ffe873
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/atom.d.ts +19 -0
- package/atom.js +83 -0
- package/composite-provider.js +9 -4
- package/future.d.ts +8 -0
- package/future.js +26 -0
- package/network/binary-message-bus.d.ts +6 -3
- package/network/binary-message-bus.js +9 -5
- package/network/chunking.d.ts +5 -0
- package/network/chunking.js +38 -0
- package/network/events/implementation.d.ts +93 -0
- package/network/events/implementation.js +221 -0
- package/network/events/index.d.ts +42 -0
- package/network/events/index.js +43 -0
- package/network/events/protocol.d.ts +27 -0
- package/network/events/protocol.js +66 -0
- package/network/events/registry.d.ts +8 -0
- package/network/events/registry.js +3 -0
- package/network/index.d.ts +8 -2
- package/network/index.js +16 -3
- package/network/message-bus-sync.d.ts +14 -1
- package/network/message-bus-sync.js +161 -103
- package/network/server/index.d.ts +14 -0
- package/network/server/index.js +219 -0
- package/network/server/utils.d.ts +18 -0
- package/network/server/utils.js +135 -0
- package/network/state.js +3 -5
- package/package.json +7 -6
- package/server/env-var.d.ts +15 -0
- package/server/env-var.js +31 -0
- package/server/index.d.ts +2 -0
- package/server/index.js +3 -0
- package/server/storage/constants.d.ts +79 -0
- package/server/storage/constants.js +19 -0
- package/server/storage/index.d.ts +45 -0
- package/server/storage/index.js +51 -0
- package/server/storage/player.d.ts +45 -0
- package/server/storage/player.js +198 -0
- package/server/storage/scene.d.ts +40 -0
- package/server/storage/scene.js +188 -0
- package/server/storage/value-cache.d.ts +1 -0
- package/server/storage/value-cache.js +52 -0
- package/server/storage/write-queue.d.ts +1 -0
- package/server/storage/write-queue.js +71 -0
- package/server/storage-url.d.ts +13 -0
- package/server/storage-url.js +42 -0
- package/server/utils.d.ts +35 -0
- package/server/utils.js +61 -0
- package/src/atom.ts +98 -0
- package/src/composite-provider.ts +10 -3
- package/src/ethereum-provider/text-encoding.d.ts +4 -0
- package/src/future.ts +38 -0
- package/src/network/binary-message-bus.ts +9 -4
- package/src/network/chunking.ts +45 -0
- package/src/network/events/implementation.ts +271 -0
- package/src/network/events/index.ts +48 -0
- package/src/network/events/protocol.ts +94 -0
- package/src/network/events/registry.ts +18 -0
- package/src/network/index.ts +40 -3
- package/src/network/message-bus-sync.ts +174 -110
- package/src/network/server/index.ts +301 -0
- package/src/network/server/utils.ts +189 -0
- package/src/network/state.ts +3 -4
- package/src/server/env-var.ts +36 -0
- package/src/server/index.ts +12 -0
- package/src/server/storage/constants.ts +111 -0
- package/src/server/storage/index.ts +74 -0
- package/src/server/storage/player.ts +289 -0
- package/src/server/storage/scene.ts +270 -0
- package/src/server/storage/value-cache.ts +92 -0
- package/src/server/storage/write-queue.ts +131 -0
- package/src/server/storage-url.ts +49 -0
- package/src/server/utils.ts +76 -0
- package/src/text-codec.ts +12 -59
- package/text-codec.d.ts +8 -23
- package/text-codec.js +13 -55
- package/internal/utf8.d.ts +0 -15
- package/internal/utf8.js +0 -172
- package/src/internal/utf8.ts +0 -167
package/internal/utf8.js
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Self-contained UTF-8 codec implementing the WHATWG Encoding Standard
|
|
3
|
-
* algorithms (https://encoding.spec.whatwg.org/), so SDK code never depends
|
|
4
|
-
* on the host providing `TextEncoder` / `TextDecoder` globals.
|
|
5
|
-
*/
|
|
6
|
-
const REPLACEMENT_CHARACTER = 0xfffd;
|
|
7
|
-
export function decodeUtf8(input, options = {}) {
|
|
8
|
-
const fatal = options.fatal === true;
|
|
9
|
-
const start = !options.ignoreBOM && input.length >= 3 && input[0] === 0xef && input[1] === 0xbb && input[2] === 0xbf ? 3 : 0;
|
|
10
|
-
let result = '';
|
|
11
|
-
let pending = [];
|
|
12
|
-
let codePoint = 0;
|
|
13
|
-
let bytesNeeded = 0;
|
|
14
|
-
let bytesSeen = 0;
|
|
15
|
-
let lowerBoundary = 0x80;
|
|
16
|
-
let upperBoundary = 0xbf;
|
|
17
|
-
function emit(value) {
|
|
18
|
-
if (value <= 0xffff) {
|
|
19
|
-
pending.push(value);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
const offset = value - 0x10000;
|
|
23
|
-
pending.push(0xd800 + (offset >> 10), 0xdc00 + (offset & 0x3ff));
|
|
24
|
-
}
|
|
25
|
-
if (pending.length >= 4096) {
|
|
26
|
-
result += String.fromCharCode(...pending);
|
|
27
|
-
pending = [];
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function malformed() {
|
|
31
|
-
if (fatal)
|
|
32
|
-
throw new TypeError('decodeUtf8: the encoded data is not valid utf-8');
|
|
33
|
-
emit(REPLACEMENT_CHARACTER);
|
|
34
|
-
}
|
|
35
|
-
for (let i = start; i < input.length; i++) {
|
|
36
|
-
const byte = input[i];
|
|
37
|
-
if (bytesNeeded === 0) {
|
|
38
|
-
if (byte <= 0x7f) {
|
|
39
|
-
emit(byte);
|
|
40
|
-
}
|
|
41
|
-
else if (byte >= 0xc2 && byte <= 0xdf) {
|
|
42
|
-
bytesNeeded = 1;
|
|
43
|
-
codePoint = byte & 0x1f;
|
|
44
|
-
}
|
|
45
|
-
else if (byte >= 0xe0 && byte <= 0xef) {
|
|
46
|
-
if (byte === 0xe0)
|
|
47
|
-
lowerBoundary = 0xa0;
|
|
48
|
-
if (byte === 0xed)
|
|
49
|
-
upperBoundary = 0x9f;
|
|
50
|
-
bytesNeeded = 2;
|
|
51
|
-
codePoint = byte & 0xf;
|
|
52
|
-
}
|
|
53
|
-
else if (byte >= 0xf0 && byte <= 0xf4) {
|
|
54
|
-
if (byte === 0xf0)
|
|
55
|
-
lowerBoundary = 0x90;
|
|
56
|
-
if (byte === 0xf4)
|
|
57
|
-
upperBoundary = 0x8f;
|
|
58
|
-
bytesNeeded = 3;
|
|
59
|
-
codePoint = byte & 0x7;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
malformed();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
else if (byte < lowerBoundary || byte > upperBoundary) {
|
|
66
|
-
codePoint = 0;
|
|
67
|
-
bytesNeeded = 0;
|
|
68
|
-
bytesSeen = 0;
|
|
69
|
-
lowerBoundary = 0x80;
|
|
70
|
-
upperBoundary = 0xbf;
|
|
71
|
-
malformed();
|
|
72
|
-
// the spec prepends the byte back to the stream: it starts a new sequence
|
|
73
|
-
i--;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
lowerBoundary = 0x80;
|
|
77
|
-
upperBoundary = 0xbf;
|
|
78
|
-
codePoint = (codePoint << 6) | (byte & 0x3f);
|
|
79
|
-
if (++bytesSeen === bytesNeeded) {
|
|
80
|
-
emit(codePoint);
|
|
81
|
-
codePoint = 0;
|
|
82
|
-
bytesNeeded = 0;
|
|
83
|
-
bytesSeen = 0;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
if (bytesNeeded !== 0)
|
|
88
|
-
malformed();
|
|
89
|
-
if (pending.length > 0)
|
|
90
|
-
result += String.fromCharCode(...pending);
|
|
91
|
-
return result;
|
|
92
|
-
}
|
|
93
|
-
export function encodeUtf8(input) {
|
|
94
|
-
const output = new Uint8Array(utf8ByteLength(input));
|
|
95
|
-
let offset = 0;
|
|
96
|
-
for (let i = 0; i < input.length; i++) {
|
|
97
|
-
const codePoint = codePointAt(input, i);
|
|
98
|
-
if (codePoint > 0xffff)
|
|
99
|
-
i++;
|
|
100
|
-
offset = writeCodePoint(output, offset, codePoint);
|
|
101
|
-
}
|
|
102
|
-
return output;
|
|
103
|
-
}
|
|
104
|
-
export function encodeUtf8Into(source, destination) {
|
|
105
|
-
let read = 0;
|
|
106
|
-
let written = 0;
|
|
107
|
-
for (let i = 0; i < source.length; i++) {
|
|
108
|
-
const codePoint = codePointAt(source, i);
|
|
109
|
-
const size = byteSize(codePoint);
|
|
110
|
-
if (written + size > destination.length)
|
|
111
|
-
break;
|
|
112
|
-
written = writeCodePoint(destination, written, codePoint);
|
|
113
|
-
if (codePoint > 0xffff) {
|
|
114
|
-
i++;
|
|
115
|
-
read += 2;
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
read += 1;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return { read, written };
|
|
122
|
-
}
|
|
123
|
-
// Reads the code point at index, replacing unpaired surrogates with U+FFFD
|
|
124
|
-
// (the USVString conversion `TextEncoder` mandates).
|
|
125
|
-
function codePointAt(input, index) {
|
|
126
|
-
const first = input.charCodeAt(index);
|
|
127
|
-
if (first >= 0xd800 && first <= 0xdbff) {
|
|
128
|
-
const second = index + 1 < input.length ? input.charCodeAt(index + 1) : 0;
|
|
129
|
-
if (second >= 0xdc00 && second <= 0xdfff)
|
|
130
|
-
return 0x10000 + ((first - 0xd800) << 10) + (second - 0xdc00);
|
|
131
|
-
return REPLACEMENT_CHARACTER;
|
|
132
|
-
}
|
|
133
|
-
if (first >= 0xdc00 && first <= 0xdfff)
|
|
134
|
-
return REPLACEMENT_CHARACTER;
|
|
135
|
-
return first;
|
|
136
|
-
}
|
|
137
|
-
function byteSize(codePoint) {
|
|
138
|
-
return codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4;
|
|
139
|
-
}
|
|
140
|
-
function utf8ByteLength(input) {
|
|
141
|
-
let length = 0;
|
|
142
|
-
for (let i = 0; i < input.length; i++) {
|
|
143
|
-
const codePoint = codePointAt(input, i);
|
|
144
|
-
if (codePoint > 0xffff)
|
|
145
|
-
i++;
|
|
146
|
-
length += byteSize(codePoint);
|
|
147
|
-
}
|
|
148
|
-
return length;
|
|
149
|
-
}
|
|
150
|
-
function writeCodePoint(output, offset, codePoint) {
|
|
151
|
-
let next = offset;
|
|
152
|
-
if (codePoint <= 0x7f) {
|
|
153
|
-
output[next++] = codePoint;
|
|
154
|
-
}
|
|
155
|
-
else if (codePoint <= 0x7ff) {
|
|
156
|
-
output[next++] = 0xc0 | (codePoint >> 6);
|
|
157
|
-
output[next++] = 0x80 | (codePoint & 0x3f);
|
|
158
|
-
}
|
|
159
|
-
else if (codePoint <= 0xffff) {
|
|
160
|
-
output[next++] = 0xe0 | (codePoint >> 12);
|
|
161
|
-
output[next++] = 0x80 | ((codePoint >> 6) & 0x3f);
|
|
162
|
-
output[next++] = 0x80 | (codePoint & 0x3f);
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
output[next++] = 0xf0 | (codePoint >> 18);
|
|
166
|
-
output[next++] = 0x80 | ((codePoint >> 12) & 0x3f);
|
|
167
|
-
output[next++] = 0x80 | ((codePoint >> 6) & 0x3f);
|
|
168
|
-
output[next++] = 0x80 | (codePoint & 0x3f);
|
|
169
|
-
}
|
|
170
|
-
return next;
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRmOC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlcm5hbC91dGY4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQTtBQU9wQyxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWlCLEVBQUUsVUFBNkIsRUFBRTtJQUMzRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQTtJQUNwQyxNQUFNLEtBQUssR0FDVCxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRWhILElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUNmLElBQUksT0FBTyxHQUFhLEVBQUUsQ0FBQTtJQUMxQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUE7SUFDakIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFBO0lBQ25CLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQTtJQUNqQixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUE7SUFDeEIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFBO0lBRXhCLFNBQVMsSUFBSSxDQUFDLEtBQWE7UUFDekIsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDcEI7YUFBTTtZQUNMLE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUE7WUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLEVB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R0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUE7S0FDM0M7U0FBTTtRQUNMLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUN6QyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUNsRCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUNqRCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUE7S0FDM0M7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlbGYtY29udGFpbmVkIFVURi04IGNvZGVjIGltcGxlbWVudGluZyB0aGUgV0hBVFdHIEVuY29kaW5nIFN0YW5kYXJkXG4gKiBhbGdvcml0aG1zIChodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8pLCBzbyBTREsgY29kZSBuZXZlciBkZXBlbmRzXG4gKiBvbiB0aGUgaG9zdCBwcm92aWRpbmcgYFRleHRFbmNvZGVyYCAvIGBUZXh0RGVjb2RlcmAgZ2xvYmFscy5cbiAqL1xuXG5jb25zdCBSRVBMQUNFTUVOVF9DSEFSQUNURVIgPSAweGZmZmRcblxuZXhwb3J0IHR5cGUgRGVjb2RlVXRmOE9wdGlvbnMgPSB7XG4gIGZhdGFsPzogYm9vbGVhblxuICBpZ25vcmVCT00/OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVdGY4KGlucHV0OiBVaW50OEFycmF5LCBvcHRpb25zOiBEZWNvZGVVdGY4T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgY29uc3QgZmF0YWwgPSBvcHRpb25zLmZhdGFsID09PSB0cnVlXG4gIGNvbnN0IHN0YXJ0ID1cbiAgICAhb3B0aW9ucy5pZ25vcmVCT00gJiYgaW5wdXQubGVuZ3RoID49IDMgJiYgaW5wdXRbMF0gPT09IDB4ZWYgJiYgaW5wdXRbMV0gPT09IDB4YmIgJiYgaW5wdXRbMl0gPT09IDB4YmYgPyAzIDogMFxuXG4gIGxldCByZXN1bHQgPSAnJ1xuICBsZXQgcGVuZGluZzogbnVtYmVyW10gPSBbXVxuICBsZXQgY29kZVBvaW50ID0gMFxuICBsZXQgYnl0ZXNOZWVkZWQgPSAwXG4gIGxldCBieXRlc1NlZW4gPSAwXG4gIGxldCBsb3dlckJvdW5kYXJ5ID0gMHg4MFxuICBsZXQgdXBwZXJCb3VuZGFyeSA9IDB4YmZcblxuICBmdW5jdGlvbiBlbWl0KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPD0gMHhmZmZmKSB7XG4gICAgICBwZW5kaW5nLnB1c2godmFsdWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHZhbHVlIC0gMHgxMDAwMFxuICAgICAgcGVuZGluZy5wdXNoKDB4ZDgwMCArIChvZmZzZXQgPj4gMTApLCAweGRjMDAgKyAob2Zmc2V0ICYgMHgzZmYpKVxuICAgIH1cbiAgICBpZiAocGVuZGluZy5sZW5ndGggPj0gNDA5Nikge1xuICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4ucGVuZGluZylcbiAgICAgIHBlbmRpbmcgPSBbXVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1hbGZvcm1lZCgpIHtcbiAgICBpZiAoZmF0YWwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RlY29kZVV0Zjg6IHRoZSBlbmNvZGVkIGRhdGEgaXMgbm90IHZhbGlkIHV0Zi04JylcbiAgICBlbWl0KFJFUExBQ0VNRU5UX0NIQVJBQ1RFUilcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYnl0ZSA9IGlucHV0W2ldXG4gICAgaWYgKGJ5dGVzTmVlZGVkID09PSAwKSB7XG4gICAgICBpZiAoYnl0ZSA8PSAweDdmKSB7XG4gICAgICAgIGVtaXQoYnl0ZSlcbiAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAweGMyICYmIGJ5dGUgPD0gMHhkZikge1xuICAgICAgICBieXRlc05lZWRlZCA9IDFcbiAgICAgICAgY29kZVBvaW50ID0gYnl0ZSAmIDB4MWZcbiAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAweGUwICYmIGJ5dGUgPD0gMHhlZikge1xuICAgICAgICBpZiAoYnl0ZSA9PT0gMHhlMCkgbG93ZXJCb3VuZGFyeSA9IDB4YTBcbiAgICAgICAgaWYgKGJ5dGUgPT09IDB4ZWQpIHVwcGVyQm91bmRhcnkgPSAweDlmXG4gICAgICAgIGJ5dGVzTmVlZGVkID0gMlxuICAgICAgICBjb2RlUG9pbnQgPSBieXRlICYgMHhmXG4gICAgICB9IGVsc2UgaWYgKGJ5dGUgPj0gMHhmMCAmJiBieXRlIDw9IDB4ZjQpIHtcbiAgICAgICAgaWYgKGJ5dGUgPT09IDB4ZjApIGxvd2VyQm91bmRhcnkgPSAweDkwXG4gICAgICAgIGlmIChieXRlID09PSAweGY0KSB1cHBlckJvdW5kYXJ5ID0gMHg4ZlxuICAgICAgICBieXRlc05lZWRlZCA9IDNcbiAgICAgICAgY29kZVBvaW50ID0gYnl0ZSAmIDB4N1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFsZm9ybWVkKClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJ5dGUgPCBsb3dlckJvdW5kYXJ5IHx8IGJ5dGUgPiB1cHBlckJvdW5kYXJ5KSB7XG4gICAgICBjb2RlUG9pbnQgPSAwXG4gICAgICBieXRlc05lZWRlZCA9IDBcbiAgICAgIGJ5dGVzU2VlbiA9IDBcbiAgICAgIGxvd2VyQm91bmRhcnkgPSAweDgwXG4gICAgICB1cHBlckJvdW5kYXJ5ID0gMHhiZlxuICAgICAgbWFsZm9ybWVkKClcbiAgICAgIC8vIHRoZSBzcGVjIHByZXBlbmRzIHRoZSBieXRlIGJhY2sgdG8gdGhlIHN0cmVhbTogaXQgc3RhcnRzIGEgbmV3IHNlcXVlbmNlXG4gICAgICBpLS1cbiAgICB9IGVsc2Uge1xuICAgICAgbG93ZXJCb3VuZGFyeSA9IDB4ODBcbiAgICAgIHVwcGVyQm91bmRhcnkgPSAweGJmXG4gICAgICBjb2RlUG9pbnQgPSAoY29kZVBvaW50IDw8IDYpIHwgKGJ5dGUgJiAweDNmKVxuICAgICAgaWYgKCsrYnl0ZXNTZWVuID09PSBieXRlc05lZWRlZCkge1xuICAgICAgICBlbWl0KGNvZGVQb2ludClcbiAgICAgICAgY29kZVBvaW50ID0gMFxuICAgICAgICBieXRlc05lZWRlZCA9IDBcbiAgICAgICAgYnl0ZXNTZWVuID0gMFxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYnl0ZXNOZWVkZWQgIT09IDApIG1hbGZvcm1lZCgpXG5cbiAgaWYgKHBlbmRpbmcubGVuZ3RoID4gMCkgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoLi4ucGVuZGluZylcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVXRmOChpbnB1dDogc3RyaW5nKTogVWludDhBcnJheSB7XG4gIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5KHV0ZjhCeXRlTGVuZ3RoKGlucHV0KSlcbiAgbGV0IG9mZnNldCA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvZGVQb2ludCA9IGNvZGVQb2ludEF0KGlucHV0LCBpKVxuICAgIGlmIChjb2RlUG9pbnQgPiAweGZmZmYpIGkrK1xuICAgIG9mZnNldCA9IHdyaXRlQ29kZVBvaW50KG91dHB1dCwgb2Zmc2V0LCBjb2RlUG9pbnQpXG4gIH1cbiAgcmV0dXJuIG91dHB1dFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVXRmOEludG8oc291cmNlOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBVaW50OEFycmF5KTogeyByZWFkOiBudW1iZXI7IHdyaXR0ZW46IG51bWJlciB9IHtcbiAgbGV0IHJlYWQgPSAwXG4gIGxldCB3cml0dGVuID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvZGVQb2ludCA9IGNvZGVQb2ludEF0KHNvdXJjZSwgaSlcbiAgICBjb25zdCBzaXplID0gYnl0ZVNpemUoY29kZVBvaW50KVxuICAgIGlmICh3cml0dGVuICsgc2l6ZSA+IGRlc3RpbmF0aW9uLmxlbmd0aCkgYnJlYWtcbiAgICB3cml0dGVuID0gd3JpdGVDb2RlUG9pbnQoZGVzdGluYXRpb24sIHdyaXR0ZW4sIGNvZGVQb2ludClcbiAgICBpZiAoY29kZVBvaW50ID4gMHhmZmZmKSB7XG4gICAgICBpKytcbiAgICAgIHJlYWQgKz0gMlxuICAgIH0gZWxzZSB7XG4gICAgICByZWFkICs9IDFcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgcmVhZCwgd3JpdHRlbiB9XG59XG5cbi8vIFJlYWRzIHRoZSBjb2RlIHBvaW50IGF0IGluZGV4LCByZXBsYWNpbmcgdW5wYWlyZWQgc3Vycm9nYXRlcyB3aXRoIFUrRkZGRFxuLy8gKHRoZSBVU1ZTdHJpbmcgY29udmVyc2lvbiBgVGV4dEVuY29kZXJgIG1hbmRhdGVzKS5cbmZ1bmN0aW9uIGNvZGVQb2ludEF0KGlucHV0OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBmaXJzdCA9IGlucHV0LmNoYXJDb2RlQXQoaW5kZXgpXG4gIGlmIChmaXJzdCA+PSAweGQ4MDAgJiYgZmlyc3QgPD0gMHhkYmZmKSB7XG4gICAgY29uc3Qgc2Vjb25kID0gaW5kZXggKyAxIDwgaW5wdXQubGVuZ3RoID8gaW5wdXQuY2hhckNvZGVBdChpbmRleCArIDEpIDogMFxuICAgIGlmIChzZWNvbmQgPj0gMHhkYzAwICYmIHNlY29uZCA8PSAweGRmZmYpIHJldHVybiAweDEwMDAwICsgKChmaXJzdCAtIDB4ZDgwMCkgPDwgMTApICsgKHNlY29uZCAtIDB4ZGMwMClcbiAgICByZXR1cm4gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSXG4gIH1cbiAgaWYgKGZpcnN0ID49IDB4ZGMwMCAmJiBmaXJzdCA8PSAweGRmZmYpIHJldHVybiBSRVBMQUNFTUVOVF9DSEFSQUNURVJcbiAgcmV0dXJuIGZpcnN0XG59XG5cbmZ1bmN0aW9uIGJ5dGVTaXplKGNvZGVQb2ludDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGNvZGVQb2ludCA8PSAweDdmID8gMSA6IGNvZGVQb2ludCA8PSAweDdmZiA/IDIgOiBjb2RlUG9pbnQgPD0gMHhmZmZmID8gMyA6IDRcbn1cblxuZnVuY3Rpb24gdXRmOEJ5dGVMZW5ndGgoaW5wdXQ6IHN0cmluZyk6IG51bWJlciB7XG4gIGxldCBsZW5ndGggPSAwXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjb2RlUG9pbnQgPSBjb2RlUG9pbnRBdChpbnB1dCwgaSlcbiAgICBpZiAoY29kZVBvaW50ID4gMHhmZmZmKSBpKytcbiAgICBsZW5ndGggKz0gYnl0ZVNpemUoY29kZVBvaW50KVxuICB9XG4gIHJldHVybiBsZW5ndGhcbn1cblxuZnVuY3Rpb24gd3JpdGVDb2RlUG9pbnQob3V0cHV0OiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgY29kZVBvaW50OiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgbmV4dCA9IG9mZnNldFxuICBpZiAoY29kZVBvaW50IDw9IDB4N2YpIHtcbiAgICBvdXRwdXRbbmV4dCsrXSA9IGNvZGVQb2ludFxuICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8PSAweDdmZikge1xuICAgIG91dHB1dFtuZXh0KytdID0gMHhjMCB8IChjb2RlUG9pbnQgPj4gNilcbiAgICBvdXRwdXRbbmV4dCsrXSA9IDB4ODAgfCAoY29kZVBvaW50ICYgMHgzZilcbiAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPD0gMHhmZmZmKSB7XG4gICAgb3V0cHV0W25leHQrK10gPSAweGUwIHwgKGNvZGVQb2ludCA+PiAxMilcbiAgICBvdXRwdXRbbmV4dCsrXSA9IDB4ODAgfCAoKGNvZGVQb2ludCA+PiA2KSAmIDB4M2YpXG4gICAgb3V0cHV0W25leHQrK10gPSAweDgwIHwgKGNvZGVQb2ludCAmIDB4M2YpXG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0W25leHQrK10gPSAweGYwIHwgKGNvZGVQb2ludCA+PiAxOClcbiAgICBvdXRwdXRbbmV4dCsrXSA9IDB4ODAgfCAoKGNvZGVQb2ludCA+PiAxMikgJiAweDNmKVxuICAgIG91dHB1dFtuZXh0KytdID0gMHg4MCB8ICgoY29kZVBvaW50ID4+IDYpICYgMHgzZilcbiAgICBvdXRwdXRbbmV4dCsrXSA9IDB4ODAgfCAoY29kZVBvaW50ICYgMHgzZilcbiAgfVxuICByZXR1cm4gbmV4dFxufVxuIl19
|
package/src/internal/utf8.ts
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Self-contained UTF-8 codec implementing the WHATWG Encoding Standard
|
|
3
|
-
* algorithms (https://encoding.spec.whatwg.org/), so SDK code never depends
|
|
4
|
-
* on the host providing `TextEncoder` / `TextDecoder` globals.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const REPLACEMENT_CHARACTER = 0xfffd
|
|
8
|
-
|
|
9
|
-
export type DecodeUtf8Options = {
|
|
10
|
-
fatal?: boolean
|
|
11
|
-
ignoreBOM?: boolean
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function decodeUtf8(input: Uint8Array, options: DecodeUtf8Options = {}): string {
|
|
15
|
-
const fatal = options.fatal === true
|
|
16
|
-
const start =
|
|
17
|
-
!options.ignoreBOM && input.length >= 3 && input[0] === 0xef && input[1] === 0xbb && input[2] === 0xbf ? 3 : 0
|
|
18
|
-
|
|
19
|
-
let result = ''
|
|
20
|
-
let pending: number[] = []
|
|
21
|
-
let codePoint = 0
|
|
22
|
-
let bytesNeeded = 0
|
|
23
|
-
let bytesSeen = 0
|
|
24
|
-
let lowerBoundary = 0x80
|
|
25
|
-
let upperBoundary = 0xbf
|
|
26
|
-
|
|
27
|
-
function emit(value: number) {
|
|
28
|
-
if (value <= 0xffff) {
|
|
29
|
-
pending.push(value)
|
|
30
|
-
} else {
|
|
31
|
-
const offset = value - 0x10000
|
|
32
|
-
pending.push(0xd800 + (offset >> 10), 0xdc00 + (offset & 0x3ff))
|
|
33
|
-
}
|
|
34
|
-
if (pending.length >= 4096) {
|
|
35
|
-
result += String.fromCharCode(...pending)
|
|
36
|
-
pending = []
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function malformed() {
|
|
41
|
-
if (fatal) throw new TypeError('decodeUtf8: the encoded data is not valid utf-8')
|
|
42
|
-
emit(REPLACEMENT_CHARACTER)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
for (let i = start; i < input.length; i++) {
|
|
46
|
-
const byte = input[i]
|
|
47
|
-
if (bytesNeeded === 0) {
|
|
48
|
-
if (byte <= 0x7f) {
|
|
49
|
-
emit(byte)
|
|
50
|
-
} else if (byte >= 0xc2 && byte <= 0xdf) {
|
|
51
|
-
bytesNeeded = 1
|
|
52
|
-
codePoint = byte & 0x1f
|
|
53
|
-
} else if (byte >= 0xe0 && byte <= 0xef) {
|
|
54
|
-
if (byte === 0xe0) lowerBoundary = 0xa0
|
|
55
|
-
if (byte === 0xed) upperBoundary = 0x9f
|
|
56
|
-
bytesNeeded = 2
|
|
57
|
-
codePoint = byte & 0xf
|
|
58
|
-
} else if (byte >= 0xf0 && byte <= 0xf4) {
|
|
59
|
-
if (byte === 0xf0) lowerBoundary = 0x90
|
|
60
|
-
if (byte === 0xf4) upperBoundary = 0x8f
|
|
61
|
-
bytesNeeded = 3
|
|
62
|
-
codePoint = byte & 0x7
|
|
63
|
-
} else {
|
|
64
|
-
malformed()
|
|
65
|
-
}
|
|
66
|
-
} else if (byte < lowerBoundary || byte > upperBoundary) {
|
|
67
|
-
codePoint = 0
|
|
68
|
-
bytesNeeded = 0
|
|
69
|
-
bytesSeen = 0
|
|
70
|
-
lowerBoundary = 0x80
|
|
71
|
-
upperBoundary = 0xbf
|
|
72
|
-
malformed()
|
|
73
|
-
// the spec prepends the byte back to the stream: it starts a new sequence
|
|
74
|
-
i--
|
|
75
|
-
} else {
|
|
76
|
-
lowerBoundary = 0x80
|
|
77
|
-
upperBoundary = 0xbf
|
|
78
|
-
codePoint = (codePoint << 6) | (byte & 0x3f)
|
|
79
|
-
if (++bytesSeen === bytesNeeded) {
|
|
80
|
-
emit(codePoint)
|
|
81
|
-
codePoint = 0
|
|
82
|
-
bytesNeeded = 0
|
|
83
|
-
bytesSeen = 0
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
if (bytesNeeded !== 0) malformed()
|
|
88
|
-
|
|
89
|
-
if (pending.length > 0) result += String.fromCharCode(...pending)
|
|
90
|
-
return result
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export function encodeUtf8(input: string): Uint8Array {
|
|
94
|
-
const output = new Uint8Array(utf8ByteLength(input))
|
|
95
|
-
let offset = 0
|
|
96
|
-
for (let i = 0; i < input.length; i++) {
|
|
97
|
-
const codePoint = codePointAt(input, i)
|
|
98
|
-
if (codePoint > 0xffff) i++
|
|
99
|
-
offset = writeCodePoint(output, offset, codePoint)
|
|
100
|
-
}
|
|
101
|
-
return output
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export function encodeUtf8Into(source: string, destination: Uint8Array): { read: number; written: number } {
|
|
105
|
-
let read = 0
|
|
106
|
-
let written = 0
|
|
107
|
-
for (let i = 0; i < source.length; i++) {
|
|
108
|
-
const codePoint = codePointAt(source, i)
|
|
109
|
-
const size = byteSize(codePoint)
|
|
110
|
-
if (written + size > destination.length) break
|
|
111
|
-
written = writeCodePoint(destination, written, codePoint)
|
|
112
|
-
if (codePoint > 0xffff) {
|
|
113
|
-
i++
|
|
114
|
-
read += 2
|
|
115
|
-
} else {
|
|
116
|
-
read += 1
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return { read, written }
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Reads the code point at index, replacing unpaired surrogates with U+FFFD
|
|
123
|
-
// (the USVString conversion `TextEncoder` mandates).
|
|
124
|
-
function codePointAt(input: string, index: number): number {
|
|
125
|
-
const first = input.charCodeAt(index)
|
|
126
|
-
if (first >= 0xd800 && first <= 0xdbff) {
|
|
127
|
-
const second = index + 1 < input.length ? input.charCodeAt(index + 1) : 0
|
|
128
|
-
if (second >= 0xdc00 && second <= 0xdfff) return 0x10000 + ((first - 0xd800) << 10) + (second - 0xdc00)
|
|
129
|
-
return REPLACEMENT_CHARACTER
|
|
130
|
-
}
|
|
131
|
-
if (first >= 0xdc00 && first <= 0xdfff) return REPLACEMENT_CHARACTER
|
|
132
|
-
return first
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
function byteSize(codePoint: number): number {
|
|
136
|
-
return codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function utf8ByteLength(input: string): number {
|
|
140
|
-
let length = 0
|
|
141
|
-
for (let i = 0; i < input.length; i++) {
|
|
142
|
-
const codePoint = codePointAt(input, i)
|
|
143
|
-
if (codePoint > 0xffff) i++
|
|
144
|
-
length += byteSize(codePoint)
|
|
145
|
-
}
|
|
146
|
-
return length
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
function writeCodePoint(output: Uint8Array, offset: number, codePoint: number): number {
|
|
150
|
-
let next = offset
|
|
151
|
-
if (codePoint <= 0x7f) {
|
|
152
|
-
output[next++] = codePoint
|
|
153
|
-
} else if (codePoint <= 0x7ff) {
|
|
154
|
-
output[next++] = 0xc0 | (codePoint >> 6)
|
|
155
|
-
output[next++] = 0x80 | (codePoint & 0x3f)
|
|
156
|
-
} else if (codePoint <= 0xffff) {
|
|
157
|
-
output[next++] = 0xe0 | (codePoint >> 12)
|
|
158
|
-
output[next++] = 0x80 | ((codePoint >> 6) & 0x3f)
|
|
159
|
-
output[next++] = 0x80 | (codePoint & 0x3f)
|
|
160
|
-
} else {
|
|
161
|
-
output[next++] = 0xf0 | (codePoint >> 18)
|
|
162
|
-
output[next++] = 0x80 | ((codePoint >> 12) & 0x3f)
|
|
163
|
-
output[next++] = 0x80 | ((codePoint >> 6) & 0x3f)
|
|
164
|
-
output[next++] = 0x80 | (codePoint & 0x3f)
|
|
165
|
-
}
|
|
166
|
-
return next
|
|
167
|
-
}
|