sonic-ws 1.0.0-rc.7 → 1.0.0
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/README.md +19 -11
- package/dist/index.js +1 -1
- package/dist/version.d.ts +5 -3
- package/dist/version.js +8 -5
- package/dist/ws/Connection.d.ts +19 -0
- package/dist/ws/Connection.js +17 -0
- package/dist/ws/client/core/ClientCore.d.ts +27 -9
- package/dist/ws/client/core/ClientCore.js +162 -64
- package/dist/ws/client/node/ClientNode.js +2 -2
- package/dist/ws/packets/PacketProcessors.d.ts +11 -6
- package/dist/ws/packets/PacketProcessors.js +233 -175
- package/dist/ws/packets/PacketType.d.ts +30 -16
- package/dist/ws/packets/PacketType.js +31 -17
- package/dist/ws/packets/Packets.d.ts +15 -14
- package/dist/ws/packets/Packets.js +117 -99
- package/dist/ws/server/SonicWSConnection.d.ts +30 -8
- package/dist/ws/server/SonicWSConnection.js +67 -25
- package/dist/ws/server/SonicWSServer.d.ts +22 -0
- package/dist/ws/server/SonicWSServer.js +50 -8
- package/dist/ws/util/ArrayUtil.js +1 -1
- package/dist/ws/util/BufferUtil.d.ts +4 -0
- package/dist/ws/util/BufferUtil.js +40 -0
- package/dist/ws/util/StringUtil.d.ts +6 -0
- package/dist/ws/util/StringUtil.js +66 -0
- package/dist/ws/util/enums/EnumHandler.d.ts +2 -3
- package/dist/ws/util/enums/EnumHandler.js +4 -7
- package/dist/ws/util/enums/EnumType.d.ts +3 -2
- package/dist/ws/util/enums/EnumType.js +21 -10
- package/dist/ws/util/packets/BatchHelper.d.ts +10 -6
- package/dist/ws/util/packets/BatchHelper.js +28 -16
- package/dist/ws/util/packets/CompressionUtil.d.ts +44 -0
- package/dist/ws/util/packets/CompressionUtil.js +321 -0
- package/dist/ws/util/packets/PacketHolder.d.ts +5 -10
- package/dist/ws/util/packets/PacketHolder.js +25 -13
- package/dist/ws/util/packets/PacketUtils.d.ts +11 -8
- package/dist/ws/util/packets/PacketUtils.js +31 -26
- package/dist/ws/util/packets/RateHandler.js +16 -1
- package/package.json +2 -2
- package/dist/ws/util/packets/CodePointUtil.d.ts +0 -22
- package/dist/ws/util/packets/CodePointUtil.js +0 -220
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2025 Lily (
|
|
3
|
+
* Copyright 2025 Lily (liwybloc)
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -14,207 +14,265 @@
|
|
|
14
14
|
* See the License for the specific language governing permissions and
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
|
-
var _a, _b, _c;
|
|
18
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.
|
|
18
|
+
exports.createValidator = createValidator;
|
|
19
|
+
exports.createReceiveProcessor = createReceiveProcessor;
|
|
20
|
+
exports.createSendProcessor = createSendProcessor;
|
|
20
21
|
exports.createObjSendProcessor = createObjSendProcessor;
|
|
21
22
|
exports.createObjReceiveProcessor = createObjReceiveProcessor;
|
|
22
23
|
exports.createObjValidator = createObjValidator;
|
|
23
24
|
var ArrayUtil_1 = require("../util/ArrayUtil");
|
|
24
|
-
var
|
|
25
|
+
var CompressionUtil_1 = require("../util/packets/CompressionUtil");
|
|
25
26
|
var PacketType_1 = require("./PacketType");
|
|
26
|
-
var
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
};
|
|
40
|
-
var INT_C_LEN = function (data, cap, min) { return data.length >= min && data.length <= cap && (0, CodePointUtil_1.processCharCodes)(data).find(function (v) { return v > CodePointUtil_1.MAX_C; }) == null; };
|
|
41
|
-
var INT_D_LIKE = function (raw, cap, min, off) {
|
|
42
|
-
if (raw.length == 0)
|
|
43
|
-
return false;
|
|
44
|
-
var dataLength = raw.length - 1, sectSize = raw.charCodeAt(0) + off;
|
|
45
|
-
if (dataLength % sectSize != 0)
|
|
46
|
-
return false;
|
|
47
|
-
var valueAmount = dataLength / sectSize;
|
|
48
|
-
if (valueAmount < min || valueAmount > cap)
|
|
49
|
-
return false;
|
|
50
|
-
return true;
|
|
51
|
-
};
|
|
52
|
-
// todo, instead of big array make this a function that creates functions, then i can include pre-defined data like Math.floor(min/8) and stuff
|
|
53
|
-
exports.PacketValidityProcessors = (_a = {},
|
|
54
|
-
_a[PacketType_1.PacketType.NONE] = function (data) { return data.length == 0; },
|
|
55
|
-
_a[PacketType_1.PacketType.RAW] = function () { return true; },
|
|
56
|
-
_a[PacketType_1.PacketType.STRINGS] = LEN_DELIMIT,
|
|
57
|
-
_a[PacketType_1.PacketType.ENUMS] = function (data, cap, min, packet, index) {
|
|
58
|
-
if (data.length < min || data.length > cap || index >= packet.enumData.length)
|
|
27
|
+
var BufferUtil_1 = require("../util/BufferUtil");
|
|
28
|
+
var StringUtil_1 = require("../util/StringUtil");
|
|
29
|
+
function BYTE_LEN(cap, min) {
|
|
30
|
+
return function (data) { return data.length >= min && data.length <= cap; };
|
|
31
|
+
}
|
|
32
|
+
function SHORT_LEN(cap, min) {
|
|
33
|
+
min *= 2;
|
|
34
|
+
cap *= 2;
|
|
35
|
+
return function (data) { return data.length >= min && data.length <= cap && data.length % 2 == 0; };
|
|
36
|
+
}
|
|
37
|
+
function VARINT_VERIF(cap, min, signed) {
|
|
38
|
+
return function (data) {
|
|
39
|
+
if (data.length == 0)
|
|
59
40
|
return false;
|
|
60
|
-
var
|
|
61
|
-
|
|
62
|
-
|
|
41
|
+
var sectors = 0, i = 0, computed = [];
|
|
42
|
+
while (i < data.length) {
|
|
43
|
+
var _a = (0, CompressionUtil_1.readVarInt)(data, i, signed), off = _a[0], varint = _a[1];
|
|
44
|
+
i = off;
|
|
45
|
+
computed.push(varint);
|
|
46
|
+
if (++sectors > cap)
|
|
63
47
|
return false;
|
|
64
48
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (sectors > cap)
|
|
49
|
+
if (sectors < min)
|
|
50
|
+
return false;
|
|
51
|
+
return computed;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
;
|
|
55
|
+
function createValidator(type, dataCap, dataMin, enumData) {
|
|
56
|
+
switch (type) {
|
|
57
|
+
case PacketType_1.PacketType.NONE: return function (data) { return data.length == 0; };
|
|
58
|
+
case PacketType_1.PacketType.RAW: return function () { return undefined; };
|
|
59
|
+
case PacketType_1.PacketType.ENUMS: return function (data, index) {
|
|
60
|
+
if (data.length < dataMin || data.length > dataCap || index >= enumData.length)
|
|
78
61
|
return false;
|
|
79
|
-
var
|
|
80
|
-
var
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
62
|
+
var pkg = enumData[index];
|
|
63
|
+
for (var i = 0; i < data.length; i++) {
|
|
64
|
+
if (pkg.values.length <= data[i])
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
};
|
|
69
|
+
case PacketType_1.PacketType.BYTES: return BYTE_LEN(dataCap, dataMin);
|
|
70
|
+
case PacketType_1.PacketType.UBYTES: return BYTE_LEN(dataCap, dataMin);
|
|
71
|
+
case PacketType_1.PacketType.BYTES_ZZ: return BYTE_LEN(dataCap, dataMin);
|
|
72
|
+
case PacketType_1.PacketType.SHORTS: return SHORT_LEN(dataCap, dataMin);
|
|
73
|
+
case PacketType_1.PacketType.USHORTS: return SHORT_LEN(dataCap, dataMin);
|
|
74
|
+
case PacketType_1.PacketType.SHORTS_ZZ: return SHORT_LEN(dataCap, dataMin);
|
|
75
|
+
case PacketType_1.PacketType.NUMBERS: return function (raw) {
|
|
76
|
+
if (raw.length == 0)
|
|
84
77
|
return false;
|
|
85
|
-
|
|
86
|
-
if (
|
|
78
|
+
var sectSize = raw[0];
|
|
79
|
+
if (sectSize > CompressionUtil_1.MAX_DSECT_SIZE)
|
|
87
80
|
return false;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
var
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
81
|
+
var dataLength = raw.length - 1;
|
|
82
|
+
if (dataLength % sectSize != 0)
|
|
83
|
+
return false;
|
|
84
|
+
var valueAmount = dataLength / sectSize;
|
|
85
|
+
if (valueAmount < dataMin || valueAmount > dataCap)
|
|
86
|
+
return false;
|
|
87
|
+
return undefined;
|
|
88
|
+
};
|
|
89
|
+
case PacketType_1.PacketType.VARINT: return VARINT_VERIF(dataCap, dataMin, true);
|
|
90
|
+
case PacketType_1.PacketType.UVARINT: return VARINT_VERIF(dataCap, dataMin, false);
|
|
91
|
+
case PacketType_1.PacketType.VARINT_ZZ: return VARINT_VERIF(dataCap, dataMin, false);
|
|
92
|
+
case PacketType_1.PacketType.DELTAS: return VARINT_VERIF(dataCap, dataMin, false);
|
|
93
|
+
case PacketType_1.PacketType.FLOAT: return function (data) {
|
|
94
|
+
if (data.length % 4 !== 0)
|
|
95
|
+
return false;
|
|
96
|
+
var sectors = data.length / 4;
|
|
97
|
+
if (sectors > dataCap || sectors < dataMin)
|
|
98
|
+
return false;
|
|
99
|
+
return undefined;
|
|
100
|
+
};
|
|
101
|
+
case PacketType_1.PacketType.BOOLEANS:
|
|
102
|
+
{
|
|
103
|
+
var min_1 = Math.floor(dataMin / 8);
|
|
104
|
+
var cap_1 = Math.floor(dataCap / 8);
|
|
105
|
+
return function (data) { return data.length >= min_1 && data.length <= cap_1; };
|
|
106
|
+
}
|
|
107
|
+
;
|
|
108
|
+
case PacketType_1.PacketType.STRINGS_ASCII: return function (data) {
|
|
109
|
+
var sectors = 0, index = 0, computed = [];
|
|
110
|
+
while (index < data.length) {
|
|
111
|
+
sectors++;
|
|
112
|
+
if (sectors > dataCap)
|
|
113
|
+
return false;
|
|
114
|
+
var _a = (0, CompressionUtil_1.readVarInt)(data, index, false), off = _a[0], varint = _a[1];
|
|
115
|
+
index = off + varint;
|
|
116
|
+
computed.push(varint);
|
|
117
|
+
if (index > data.length)
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
if (sectors < dataMin)
|
|
121
|
+
return false;
|
|
122
|
+
return computed; // todo
|
|
123
|
+
};
|
|
124
|
+
case PacketType_1.PacketType.STRINGS_UTF16: return function (data) {
|
|
125
|
+
var sectors = 0, index = 0, computed = [];
|
|
126
|
+
while (index < data.length) {
|
|
127
|
+
sectors++;
|
|
128
|
+
if (sectors > dataCap)
|
|
129
|
+
return false;
|
|
130
|
+
var _a = (0, CompressionUtil_1.readVarInt)(data, index, false), off = _a[0], varint = _a[1];
|
|
131
|
+
index = off + varint * 2;
|
|
132
|
+
computed.push(varint);
|
|
133
|
+
if (index > data.length)
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
if (sectors < dataMin)
|
|
137
|
+
return false;
|
|
138
|
+
return computed; // todo
|
|
139
|
+
};
|
|
140
|
+
default: throw new Error("Unknown type: " + type);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function createReceiveProcessor(type, enumData, cap) {
|
|
144
|
+
switch (type) {
|
|
145
|
+
case PacketType_1.PacketType.NONE: return function () { return undefined; };
|
|
146
|
+
case PacketType_1.PacketType.RAW: return function (data) { return data; };
|
|
147
|
+
case PacketType_1.PacketType.BYTES: return function (data) { return Array.from(data).map(CompressionUtil_1.fromSignedByte); };
|
|
148
|
+
case PacketType_1.PacketType.UBYTES: return function (data) { return Array.from(data); };
|
|
149
|
+
case PacketType_1.PacketType.BYTES_ZZ: return function (data) { return Array.from(data).map(CompressionUtil_1.demapZigZag); };
|
|
150
|
+
case PacketType_1.PacketType.SHORTS: return function (data) { return (0, BufferUtil_1.splitBuffer)(data, 2).map(function (v) { return (0, CompressionUtil_1.fromSignedShort)(v); }); };
|
|
151
|
+
case PacketType_1.PacketType.USHORTS: return function (data) { return (0, BufferUtil_1.splitBuffer)(data, 2).map(function (v) { return (0, CompressionUtil_1.fromShort)(v); }); };
|
|
152
|
+
case PacketType_1.PacketType.SHORTS_ZZ: return function (data) { return (0, BufferUtil_1.splitBuffer)(data, 2).map(function (v) { return (0, CompressionUtil_1.demapShort_ZZ)(v); }); };
|
|
153
|
+
case PacketType_1.PacketType.VARINT: return function (_, computed) { return computed; };
|
|
154
|
+
case PacketType_1.PacketType.UVARINT: return function (_, computed) { return computed; };
|
|
155
|
+
case PacketType_1.PacketType.VARINT_ZZ: return function (_, computed) { return computed.map(CompressionUtil_1.demapZigZag); };
|
|
156
|
+
case PacketType_1.PacketType.DELTAS: return function (_, computed) { return computed.map(function (x, i) { return computed[i] = (computed[i - 1] || 0) + (0, CompressionUtil_1.demapZigZag)(x); }); };
|
|
157
|
+
case PacketType_1.PacketType.FLOAT: return function (data) { return (0, BufferUtil_1.splitBuffer)(data, 4).map(CompressionUtil_1.deconvertFloat); };
|
|
158
|
+
case PacketType_1.PacketType.BOOLEANS: return function (data) { return Array.from(data).map(function (d) { return (0, CompressionUtil_1.decompressBools)(d); }).flat().splice(0, cap); };
|
|
159
|
+
case PacketType_1.PacketType.NUMBERS: return function (data) { return (0, ArrayUtil_1.splitArray)(data.subarray(1), data[0]).map(CompressionUtil_1.deconvertBytePows); };
|
|
160
|
+
case PacketType_1.PacketType.ENUMS: return function (data, _, index) {
|
|
161
|
+
var pkg = enumData[index];
|
|
162
|
+
return Array.from(data).map(function (code) { return pkg.values[code]; });
|
|
163
|
+
};
|
|
164
|
+
case PacketType_1.PacketType.STRINGS_ASCII: return function (data, computed) {
|
|
165
|
+
var off = 0;
|
|
166
|
+
return computed.map(function (len) { return (0, BufferUtil_1.as8String)(data.subarray(++off, off += len)); });
|
|
167
|
+
};
|
|
168
|
+
case PacketType_1.PacketType.STRINGS_UTF16: return function (data, computed) {
|
|
169
|
+
var off = 0;
|
|
170
|
+
return computed.map(function (len) { return (0, BufferUtil_1.as16String)(data.subarray(++off, off += len * 2)); });
|
|
171
|
+
};
|
|
172
|
+
default: throw new Error("Unknown type: " + type);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/** Creates a function that processes a packet type */
|
|
176
|
+
function createSendProcessor(type) {
|
|
177
|
+
switch (type) {
|
|
178
|
+
case PacketType_1.PacketType.NONE: return function () { return []; };
|
|
179
|
+
case PacketType_1.PacketType.RAW: return function (data) { return Array.from(data); };
|
|
180
|
+
case PacketType_1.PacketType.ENUMS: return function (enums) { return enums; };
|
|
181
|
+
case PacketType_1.PacketType.BYTES: return function (numbers) { return numbers.map(CompressionUtil_1.toSignedByte); };
|
|
182
|
+
case PacketType_1.PacketType.UBYTES: return function (numbers) { return numbers.map(function (n) { return (0, CompressionUtil_1.toByte)(n, false); }); };
|
|
183
|
+
case PacketType_1.PacketType.BYTES_ZZ: return function (numbers) { return numbers.map(CompressionUtil_1.mapZigZag); };
|
|
184
|
+
case PacketType_1.PacketType.SHORTS: return function (numbers) { return numbers.map(CompressionUtil_1.toSignedShort).flat(); };
|
|
185
|
+
case PacketType_1.PacketType.USHORTS: return function (numbers) { return numbers.map(function (n) { return (0, CompressionUtil_1.toShort)(n, false); }).flat(); };
|
|
186
|
+
case PacketType_1.PacketType.SHORTS_ZZ: return function (numbers) { return numbers.map(CompressionUtil_1.mapShort_ZZ).flat(); };
|
|
187
|
+
case PacketType_1.PacketType.VARINT: return function (numbers) { return numbers.map(function (n) { return (0, CompressionUtil_1.convertVarInt)(n, true); }).flat(); };
|
|
188
|
+
case PacketType_1.PacketType.UVARINT: return function (numbers) { return numbers.map(function (n) { return (0, CompressionUtil_1.convertVarInt)(n, false); }).flat(); };
|
|
189
|
+
case PacketType_1.PacketType.VARINT_ZZ: return function (numbers) { return numbers.map(function (n) { return (0, CompressionUtil_1.convertVarInt)((0, CompressionUtil_1.mapZigZag)(n), false); }).flat(); };
|
|
190
|
+
case PacketType_1.PacketType.DELTAS: return function (numbers) { return numbers.map(function (n, i) { return (0, CompressionUtil_1.convertVarInt)((0, CompressionUtil_1.mapZigZag)(n - (numbers[i - 1] || 0)), false); }).flat(); };
|
|
191
|
+
case PacketType_1.PacketType.FLOAT: return function (floats) { return floats.map(CompressionUtil_1.convertFloat).flat(); };
|
|
192
|
+
case PacketType_1.PacketType.BOOLEANS: return function (bools) { return (0, ArrayUtil_1.splitArray)(bools, 8).map(function (bools) { return (0, CompressionUtil_1.compressBools)(bools); }).flat(); };
|
|
193
|
+
case PacketType_1.PacketType.NUMBERS: return function (numbers) {
|
|
194
|
+
var res = [];
|
|
195
|
+
var sectSize = numbers.reduce(function (c, n) { return Math.max(c, (0, CompressionUtil_1.sectorSize)(n, CompressionUtil_1.byteOverflowPow)); }, 1);
|
|
196
|
+
res.push(sectSize);
|
|
197
|
+
numbers.forEach(function (n) { return (0, CompressionUtil_1.convertBytePows)(n, sectSize).forEach(function (c) { return res.push(c); }); });
|
|
198
|
+
return res;
|
|
199
|
+
};
|
|
200
|
+
case PacketType_1.PacketType.STRINGS_ASCII: return function (strings) {
|
|
201
|
+
var res = [];
|
|
202
|
+
for (var _i = 0, strings_1 = strings; _i < strings_1.length; _i++) {
|
|
203
|
+
var v = strings_1[_i];
|
|
204
|
+
var string = String(v);
|
|
205
|
+
res.push.apply(res, (0, CompressionUtil_1.convertVarInt)(string.length, false));
|
|
206
|
+
var codes = (0, StringUtil_1.processCharCodes)(string);
|
|
207
|
+
var highCode = codes.find(function (x) { return x > CompressionUtil_1.MAX_BYTE; });
|
|
208
|
+
if (highCode)
|
|
209
|
+
throw new Error("Cannot store code ".concat(highCode, " (").concat(String.fromCharCode(highCode), ") in a UTF-8 String! Use STRINGS_UTF16."));
|
|
210
|
+
codes.map(function (c) { return res.push(c); });
|
|
211
|
+
}
|
|
212
|
+
return res;
|
|
213
|
+
};
|
|
214
|
+
case PacketType_1.PacketType.STRINGS_UTF16: return function (strings) {
|
|
215
|
+
var res = [];
|
|
216
|
+
for (var _i = 0, strings_2 = strings; _i < strings_2.length; _i++) {
|
|
217
|
+
var v = strings_2[_i];
|
|
218
|
+
var string = String(v);
|
|
219
|
+
res.push.apply(res, (0, CompressionUtil_1.convertVarInt)(string.length, false));
|
|
220
|
+
(0, StringUtil_1.processCharCodes)(string).map(function (c) { return res.push.apply(res, (0, StringUtil_1.splitCodePoint)(c).map(function (p) { return (0, CompressionUtil_1.toShort)(p, false); }).flat()); });
|
|
221
|
+
}
|
|
222
|
+
return res;
|
|
223
|
+
};
|
|
224
|
+
default: throw new Error("Unknown type: " + type);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function createObjSendProcessor(packet) {
|
|
228
|
+
var types = packet.type;
|
|
177
229
|
var size = types.length;
|
|
178
|
-
var processors = types.map(function (t) { return
|
|
230
|
+
var processors = types.map(function (t) { return createSendProcessor(t); });
|
|
179
231
|
return function (data) {
|
|
180
|
-
var result =
|
|
232
|
+
var result = [];
|
|
181
233
|
for (var i = 0; i < size; i++) {
|
|
182
234
|
var sectorData = data[i];
|
|
183
235
|
var d = processors[i](Array.isArray(sectorData) ? sectorData : [sectorData]);
|
|
184
|
-
if (d.length >
|
|
185
|
-
throw new Error("Cannot
|
|
186
|
-
result
|
|
236
|
+
if (d.length > CompressionUtil_1.MAX_UVARINT)
|
|
237
|
+
throw new Error("Cannot send ".concat(d.length, "/").concat(CompressionUtil_1.MAX_UVARINT, " bytes of data!"));
|
|
238
|
+
result.push.apply(result, (0, CompressionUtil_1.convertVarInt)(d.length, false));
|
|
239
|
+
d.forEach(function (val) { return result.push(val); });
|
|
187
240
|
}
|
|
188
241
|
return result;
|
|
189
242
|
};
|
|
190
243
|
}
|
|
191
|
-
function createObjReceiveProcessor(
|
|
192
|
-
var
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
var enums = 0;
|
|
196
|
-
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
|
|
244
|
+
function createObjReceiveProcessor(packet) {
|
|
245
|
+
var types = packet.type, dataMaxes = packet.dataMax;
|
|
246
|
+
var processors = types.map(function (t, i) { return createReceiveProcessor(t, packet.enumData, dataMaxes[i]); });
|
|
247
|
+
return function (data, validationResult) {
|
|
248
|
+
var index = 0, enums = 0, result = [];
|
|
249
|
+
while (index < data.length) {
|
|
250
|
+
var _a = (0, CompressionUtil_1.readVarInt)(data, index, false), off = _a[0], sectorLength = _a[1];
|
|
251
|
+
index = off;
|
|
252
|
+
var sector = data.subarray(index, index += sectorLength);
|
|
253
|
+
result.push(processors[result.length](sector, validationResult[result.length], types[result.length] == PacketType_1.PacketType.ENUMS ? enums++ : 0));
|
|
200
254
|
}
|
|
201
255
|
return result;
|
|
202
256
|
};
|
|
203
257
|
}
|
|
204
|
-
function createObjValidator(
|
|
205
|
-
var
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
if (
|
|
258
|
+
function createObjValidator(packet) {
|
|
259
|
+
var types = packet.type, dataMaxes = packet.dataMax, dataMins = packet.dataMin;
|
|
260
|
+
var validators = types.map(function (t, i) { return createValidator(t, dataMaxes[i], dataMins[i], packet.enumData); });
|
|
261
|
+
return function (data) {
|
|
262
|
+
var index = 0, enums = 0, computedData = [];
|
|
263
|
+
while (index < data.length) {
|
|
264
|
+
if (computedData.length > types.length)
|
|
265
|
+
return false; // only types amount of values
|
|
266
|
+
var _a = (0, CompressionUtil_1.readVarInt)(data, index, false), off = _a[0], sectorLength = _a[1];
|
|
267
|
+
index = off;
|
|
268
|
+
if (sectorLength + index > data.length)
|
|
211
269
|
return false;
|
|
212
|
-
var sector = data.
|
|
213
|
-
|
|
270
|
+
var sector = data.subarray(index, index += sectorLength);
|
|
271
|
+
var result = validators[computedData.length](sector, types[computedData.length] == PacketType_1.PacketType.ENUMS ? enums++ : 0);
|
|
272
|
+
if (result == false)
|
|
214
273
|
return false;
|
|
215
|
-
|
|
216
|
-
return false; // caps length is also the amount of values there are
|
|
274
|
+
computedData.push(result);
|
|
217
275
|
}
|
|
218
|
-
return
|
|
276
|
+
return computedData;
|
|
219
277
|
};
|
|
220
278
|
}
|
|
@@ -4,24 +4,38 @@ export declare enum PacketType {
|
|
|
4
4
|
NONE = 0,
|
|
5
5
|
/** Raw data */
|
|
6
6
|
RAW = 1,
|
|
7
|
-
/**
|
|
7
|
+
/** 8 byte string data (0-255 codes) */
|
|
8
|
+
STRINGS_ASCII = 2,
|
|
9
|
+
/** 16 byte string data (0-65535 codes) */
|
|
10
|
+
STRINGS_UTF16 = 3,
|
|
11
|
+
/** Strings; defaults to UTF8 (0-255 codes) */
|
|
8
12
|
STRINGS = 2,
|
|
9
13
|
/** Constant primitive data; strings, numbers, booleans, null, undefined */
|
|
10
|
-
ENUMS =
|
|
11
|
-
/** One or more
|
|
12
|
-
|
|
13
|
-
/** One or more
|
|
14
|
-
|
|
15
|
-
/** One or more
|
|
16
|
-
|
|
14
|
+
ENUMS = 4,
|
|
15
|
+
/** One or more bytes; -128 to 127 */
|
|
16
|
+
BYTES = 5,
|
|
17
|
+
/** One or more bytes; 0 to 255 */
|
|
18
|
+
UBYTES = 6,
|
|
19
|
+
/** One or more bytes; -128 to 127 | zig-zag encoded for small negatives (good for deltas; maps like -1->1, 1->2, -2->3, 2->4, etc.) */
|
|
20
|
+
BYTES_ZZ = 7,
|
|
21
|
+
/** One or more shorts; -32,768 to 32,767 */
|
|
22
|
+
SHORTS = 8,
|
|
23
|
+
/** One or more shorts; 0 to 65,535 */
|
|
24
|
+
USHORTS = 9,
|
|
25
|
+
/** One or more shorts; -32,768 to 32,767 | zig-zag encoded for small negatives (good for deltas; maps like -1->1, 1->2, -2->3, 2->4, etc.) */
|
|
26
|
+
SHORTS_ZZ = 10,
|
|
17
27
|
/** One or more integers up to MAX_SAFE_INTEGER | 9,007,199,254,740,991 (or negative). Similar maximum size will produce maximum efficiency */
|
|
18
|
-
|
|
19
|
-
/** One or more integers
|
|
20
|
-
|
|
21
|
-
/** One or more
|
|
22
|
-
|
|
23
|
-
/** One or more
|
|
24
|
-
|
|
28
|
+
NUMBERS = 11,
|
|
29
|
+
/** One or more integers between -281,474,976,710,656 and 281,474,976,710,655. */
|
|
30
|
+
VARINT = 12,
|
|
31
|
+
/** One or more integers up to 562,949,953,421,311. */
|
|
32
|
+
UVARINT = 13,
|
|
33
|
+
/** One or more integers between -281,474,976,710,656 and 281,474,976,710,655 | zig-zag encoded (good for deltas; maps like -1->1, 1->2, -2->3, 2->4, etc.) */
|
|
34
|
+
VARINT_ZZ = 14,
|
|
35
|
+
/** Var ints that use deltas; each value will show the difference from the last value. Good for close numbers */
|
|
36
|
+
DELTAS = 15,
|
|
37
|
+
/** One or more single precision floating point numbers. Only up to 7 digits of accuracy. */
|
|
38
|
+
FLOAT = 16,
|
|
25
39
|
/** One or more true/false */
|
|
26
|
-
BOOLEANS =
|
|
40
|
+
BOOLEANS = 17
|
|
27
41
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2025 Lily (
|
|
3
|
+
* Copyright 2025 Lily (liwybloc)
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -24,24 +24,38 @@ var PacketType;
|
|
|
24
24
|
PacketType[PacketType["NONE"] = 0] = "NONE";
|
|
25
25
|
/** Raw data */
|
|
26
26
|
PacketType[PacketType["RAW"] = 1] = "RAW";
|
|
27
|
-
/**
|
|
27
|
+
/** 8 byte string data (0-255 codes) */
|
|
28
|
+
PacketType[PacketType["STRINGS_ASCII"] = 2] = "STRINGS_ASCII";
|
|
29
|
+
/** 16 byte string data (0-65535 codes) */
|
|
30
|
+
PacketType[PacketType["STRINGS_UTF16"] = 3] = "STRINGS_UTF16";
|
|
31
|
+
/** Strings; defaults to UTF8 (0-255 codes) */
|
|
28
32
|
PacketType[PacketType["STRINGS"] = 2] = "STRINGS";
|
|
29
33
|
/** Constant primitive data; strings, numbers, booleans, null, undefined */
|
|
30
|
-
PacketType[PacketType["ENUMS"] =
|
|
31
|
-
/** One or more
|
|
32
|
-
PacketType[PacketType["
|
|
33
|
-
/** One or more
|
|
34
|
-
PacketType[PacketType["
|
|
35
|
-
/** One or more
|
|
36
|
-
PacketType[PacketType["
|
|
34
|
+
PacketType[PacketType["ENUMS"] = 4] = "ENUMS";
|
|
35
|
+
/** One or more bytes; -128 to 127 */
|
|
36
|
+
PacketType[PacketType["BYTES"] = 5] = "BYTES";
|
|
37
|
+
/** One or more bytes; 0 to 255 */
|
|
38
|
+
PacketType[PacketType["UBYTES"] = 6] = "UBYTES";
|
|
39
|
+
/** One or more bytes; -128 to 127 | zig-zag encoded for small negatives (good for deltas; maps like -1->1, 1->2, -2->3, 2->4, etc.) */
|
|
40
|
+
PacketType[PacketType["BYTES_ZZ"] = 7] = "BYTES_ZZ";
|
|
41
|
+
/** One or more shorts; -32,768 to 32,767 */
|
|
42
|
+
PacketType[PacketType["SHORTS"] = 8] = "SHORTS";
|
|
43
|
+
/** One or more shorts; 0 to 65,535 */
|
|
44
|
+
PacketType[PacketType["USHORTS"] = 9] = "USHORTS";
|
|
45
|
+
/** One or more shorts; -32,768 to 32,767 | zig-zag encoded for small negatives (good for deltas; maps like -1->1, 1->2, -2->3, 2->4, etc.) */
|
|
46
|
+
PacketType[PacketType["SHORTS_ZZ"] = 10] = "SHORTS_ZZ";
|
|
37
47
|
/** One or more integers up to MAX_SAFE_INTEGER | 9,007,199,254,740,991 (or negative). Similar maximum size will produce maximum efficiency */
|
|
38
|
-
PacketType[PacketType["
|
|
39
|
-
/** One or more integers
|
|
40
|
-
PacketType[PacketType["
|
|
41
|
-
/** One or more
|
|
42
|
-
PacketType[PacketType["
|
|
43
|
-
/** One or more
|
|
44
|
-
PacketType[PacketType["
|
|
48
|
+
PacketType[PacketType["NUMBERS"] = 11] = "NUMBERS";
|
|
49
|
+
/** One or more integers between -281,474,976,710,656 and 281,474,976,710,655. */
|
|
50
|
+
PacketType[PacketType["VARINT"] = 12] = "VARINT";
|
|
51
|
+
/** One or more integers up to 562,949,953,421,311. */
|
|
52
|
+
PacketType[PacketType["UVARINT"] = 13] = "UVARINT";
|
|
53
|
+
/** One or more integers between -281,474,976,710,656 and 281,474,976,710,655 | zig-zag encoded (good for deltas; maps like -1->1, 1->2, -2->3, 2->4, etc.) */
|
|
54
|
+
PacketType[PacketType["VARINT_ZZ"] = 14] = "VARINT_ZZ";
|
|
55
|
+
/** Var ints that use deltas; each value will show the difference from the last value. Good for close numbers */
|
|
56
|
+
PacketType[PacketType["DELTAS"] = 15] = "DELTAS";
|
|
57
|
+
/** One or more single precision floating point numbers. Only up to 7 digits of accuracy. */
|
|
58
|
+
PacketType[PacketType["FLOAT"] = 16] = "FLOAT";
|
|
45
59
|
/** One or more true/false */
|
|
46
|
-
PacketType[PacketType["BOOLEANS"] =
|
|
60
|
+
PacketType[PacketType["BOOLEANS"] = 17] = "BOOLEANS";
|
|
47
61
|
})(PacketType || (exports.PacketType = PacketType = {}));
|