sonic-ws 1.3.2 → 1.3.3

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.
Files changed (46) hide show
  1. package/dist/index.d.ts +0 -4
  2. package/dist/version.d.ts +1 -5
  3. package/dist/version.js +23 -4
  4. package/dist/ws/Connection.d.ts +0 -4
  5. package/dist/ws/Connection.js +124 -4
  6. package/dist/ws/PacketProcessor.d.ts +0 -4
  7. package/dist/ws/PacketProcessor.js +50 -4
  8. package/dist/ws/client/core/ClientCore.d.ts +0 -4
  9. package/dist/ws/client/core/ClientCore.js +249 -4
  10. package/dist/ws/client/node/ClientNode.d.ts +0 -4
  11. package/dist/ws/client/node/ClientNode.js +34 -4
  12. package/dist/ws/debug/DebugServer.d.ts +0 -4
  13. package/dist/ws/debug/DebugServer.js +605 -4
  14. package/dist/ws/packets/PacketProcessors.d.ts +0 -4
  15. package/dist/ws/packets/PacketProcessors.js +315 -4
  16. package/dist/ws/packets/PacketType.d.ts +0 -4
  17. package/dist/ws/packets/PacketType.js +59 -4
  18. package/dist/ws/packets/Packets.d.ts +0 -4
  19. package/dist/ws/packets/Packets.js +275 -4
  20. package/dist/ws/server/SonicWSConnection.d.ts +0 -4
  21. package/dist/ws/server/SonicWSConnection.js +296 -4
  22. package/dist/ws/server/SonicWSServer.d.ts +1 -5
  23. package/dist/ws/server/SonicWSServer.js +305 -4
  24. package/dist/ws/util/BufferUtil.d.ts +0 -4
  25. package/dist/ws/util/BufferUtil.js +40 -4
  26. package/dist/ws/util/StringUtil.d.ts +0 -4
  27. package/dist/ws/util/StringUtil.js +49 -4
  28. package/dist/ws/util/enums/EnumHandler.d.ts +0 -4
  29. package/dist/ws/util/enums/EnumHandler.js +58 -4
  30. package/dist/ws/util/enums/EnumType.d.ts +0 -4
  31. package/dist/ws/util/enums/EnumType.js +70 -4
  32. package/dist/ws/util/packets/BatchHelper.d.ts +0 -4
  33. package/dist/ws/util/packets/BatchHelper.js +83 -4
  34. package/dist/ws/util/packets/CompressionUtil.d.ts +5 -9
  35. package/dist/ws/util/packets/CompressionUtil.js +275 -4
  36. package/dist/ws/util/packets/HashUtil.d.ts +0 -4
  37. package/dist/ws/util/packets/HashUtil.js +120 -4
  38. package/dist/ws/util/packets/JSONUtil.d.ts +0 -4
  39. package/dist/ws/util/packets/JSONUtil.js +177 -4
  40. package/dist/ws/util/packets/PacketHolder.d.ts +0 -4
  41. package/dist/ws/util/packets/PacketHolder.js +124 -4
  42. package/dist/ws/util/packets/PacketUtils.d.ts +0 -4
  43. package/dist/ws/util/packets/PacketUtils.js +281 -4
  44. package/dist/ws/util/packets/RateHandler.d.ts +0 -4
  45. package/dist/ws/util/packets/RateHandler.js +64 -4
  46. package/package.json +3 -3
@@ -1,7 +1,3 @@
1
- /**
2
- * Copyright 2026 Lily (liwybloc)
3
- * Licensed under the Apache License, Version 2.0.
4
- */
5
1
  import { EnumPackage } from "../util/enums/EnumType";
6
2
  import { Packet } from "./Packets";
7
3
  import { PacketType } from "./PacketType";
@@ -1,6 +1,317 @@
1
- /**
1
+ "use strict";
2
+ /*
2
3
  * Copyright 2026 Lily (liwybloc)
3
- * Licensed under the Apache License, Version 2.0.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
4
16
  */
5
-
6
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.createValidator=p,exports.createReceiveProcessor=l,exports.createSendProcessor=T,exports.createObjSendProcessor=function(e){const r=e.type.length,a=e.type.map(e=>T(e,!1,!1));return async(e,n)=>{let c=[];for(let s=0;s<r;s++){const r=n[s],o=await a[s](e,Array.isArray(r)?r:[r]);if(o.length>t.MAX_UVARINT)throw new Error(`Cannot send ${o.length}/${t.MAX_UVARINT} bytes of data!`);c.push(...(0,t.convertVarInt)(o.length)),o.forEach(e=>c.push(e))}return new Uint8Array(c)}},exports.createObjReceiveProcessor=function(e){const a=e.type.map((t,r)=>l(t,e.enumData,e.dataMax[r]));return(n,c)=>{let s=0,o=0,u=[];for(;s<n.length;){const[p,l]=(0,t.readVarInt)(n,s);s=p;const T=n.subarray(s,s+=l);u.push(a[u.length](T,c[u.length],e.type[u.length]==r.PacketType.ENUMS?o++:0))}return u}},exports.createObjValidator=function(e){const a=e.type.map((t,r)=>p(t,e.dataMax[r],e.dataMin[r],e,!1));return async n=>{let c=0,s=0,o=[];for(;c<n.length;){if(o.length>e.type.length)return[n,!1];const[u,p]=(0,t.readVarInt)(n,c);if(c=u,p+c>n.length)return[n,!1];const l=n.subarray(c,c+=p),[,T]=await a[o.length](l,e.type[o.length]==r.PacketType.ENUMS?s++:0);if(!1===T)return[n,!1];o.push(T)}return[n,o]}};const e=require("../util/BufferUtil"),t=require("../util/packets/CompressionUtil"),r=require("./PacketType"),a=require("../util/BufferUtil"),n=require("../util/StringUtil"),c=require("../util/packets/JSONUtil");function s(e,t){return r=>r.length>=t&&r.length<=e}function o(e,t){return t*=2,e*=2,r=>r.length>=t&&r.length<=e&&r.length%2==0}function u(e,r){return a=>{if(0==a.length)return r<=0&&[];let n=0,c=0,s=[];for(;c<a.length;){const[r,o]=(0,t.readVarInt)(a,c);if(c=r,s.push(o),++n>e)return!1}return!(n<r)&&s}}function p(e,a,n,p,l){const T=function(){switch(e){case r.PacketType.NONE:return e=>0==e.length;case r.PacketType.RAW:return()=>{};case r.PacketType.ENUMS:return(e,t)=>{if(e.length<n||e.length>a||t>=p.enumData.length)return!1;const r=p.enumData[t];for(let t=0;t<e.length;t++)if(r.values.length<=e[t])return!1};case r.PacketType.BYTES:case r.PacketType.UBYTES:case r.PacketType.HEX:return s(a,n);case r.PacketType.SHORTS:case r.PacketType.USHORTS:return o(a,n);case r.PacketType.VARINT:case r.PacketType.UVARINT:case r.PacketType.DELTAS:return u(a,n);case r.PacketType.FLOATS:return e=>{if(e.length%4!=0)return!1;const r=e.length*t.ONE_FOURTH;return!(r>a||r<n)&&void 0};case r.PacketType.DOUBLES:return e=>{if(e.length%8!=0)return!1;const r=e.length*t.ONE_EIGHT;return!(r>a||r<n)&&void 0};case r.PacketType.BOOLEANS:{const e=Math.ceil(n*t.ONE_EIGHT),r=Math.ceil(a*t.ONE_EIGHT);return t=>t.length>=e&&t.length<=r}case r.PacketType.STRINGS_ASCII:return e=>{let r=0;const[c,s]=(0,t.readVarInt)(e,r);if(r=c,s<n||s>a)return!1;const o=[];let u=0;for(let a=0;a<s;a++){const[a,n]=(0,t.readVarInt)(e,r);r=a,o.push(n),u+=n}return!(r+Math.ceil(u/8)>e.length)&&[s,o,r]};case r.PacketType.STRINGS_UTF16:return e=>{let r=0,c=0,s=[];for(;c<e.length;){if(r++,r>a)return!1;const[n,o]=(0,t.readVarInt)(e,c);c=n;let u=[];for(let r=0;r<o;r++){const[r,a]=(0,t.readVarInt)(e,c);if(c=r,c>e.length)return!1;u.push(a)}s.push(u)}return!(r<n)&&s};case r.PacketType.JSON:return e=>{try{return(0,c.decompressJSON)(e)}catch{return!1}};default:throw new Error("Unknown type: "+e)}}();return l&&0==p.dataBatching?async(e,r)=>{try{const a=await(0,t.decompressGzip)(e);return[a,T(a,r)]}catch{return[e,!1]}}:async(e,t)=>[e,T(e,t)]}function l(e,c,s){switch(e){case r.PacketType.NONE:return()=>{};case r.PacketType.RAW:return e=>e;case r.PacketType.BYTES:return e=>Array.from(e).map(t.demapZigZag);case r.PacketType.UBYTES:return e=>Array.from(e);case r.PacketType.HEX:return e=>(0,t.bytesToHex)(e);case r.PacketType.SHORTS:return e=>(0,a.splitBuffer)(e,2).map(e=>(0,t.demapShort_ZZ)(e));case r.PacketType.USHORTS:return e=>(0,a.splitBuffer)(e,2).map(e=>(0,t.fromShort)(e));case r.PacketType.VARINT:return(e,r)=>r.map(t.demapZigZag);case r.PacketType.UVARINT:return(e,t)=>t;case r.PacketType.DELTAS:return(e,r)=>r.map((e,a)=>r[a]=(r[a-1]||0)+(0,t.demapZigZag)(e));case r.PacketType.FLOATS:return e=>(0,a.splitBuffer)(e,4).map(t.deconvertFloat);case r.PacketType.DOUBLES:return e=>(0,a.splitBuffer)(e,8).map(t.deconvertDouble);case r.PacketType.BOOLEANS:return e=>Array.from(e).map(e=>(0,t.decompressBools)(e)).flat().splice(0,s);case r.PacketType.ENUMS:return(e,t,r)=>{const a=c[r];return Array.from(e).map(e=>a.values[e])};case r.PacketType.STRINGS_ASCII:return(e,r)=>{const[a,c,s]=r,o=(0,t.bytesToBits)(e.subarray(s)),u=(0,n.decodeHuffman)(o);if(!u)return[];const p=[];let l=0;for(let e=0;e<a;e++)p.push(u.slice(l,l+c[e])),l+=c[e];return p};case r.PacketType.STRINGS_UTF16:return(e,t)=>t.map(e=>String.fromCodePoint(...e));case r.PacketType.JSON:return(e,t)=>t;default:throw new Error("Unknown type: "+e)}}function T(a,s,o){const u=function(){switch(a){case r.PacketType.NONE:return()=>[];case r.PacketType.RAW:return e=>Array.from(e);case r.PacketType.ENUMS:return e=>e;case r.PacketType.BYTES:return e=>e.map(t.mapZigZag);case r.PacketType.UBYTES:return e=>e.map(t.toByte);case r.PacketType.HEX:return e=>{if("string"!=typeof e){if(e instanceof Array&&1==e.length)return(0,t.hexToBytes)(e[0]);throw new Error("Cannot send more than 1 hex string; this packet is equivalent to UBYTES: "+JSON.stringify(e))}return(0,t.hexToBytes)(e)};case r.PacketType.SHORTS:return e=>e.map(t.mapShort_ZZ).flat();case r.PacketType.USHORTS:return e=>e.map(t.toShort).flat();case r.PacketType.VARINT:return e=>e.map(e=>(0,t.convertVarInt)((0,t.mapZigZag)(e))).flat();case r.PacketType.UVARINT:return e=>e.map(t.convertVarInt).flat();case r.PacketType.DELTAS:return e=>e.map((r,a)=>(0,t.convertVarInt)((0,t.mapZigZag)(r-(e[a-1]||0)))).flat();case r.PacketType.FLOATS:return e=>e.map(t.convertFloat).flat();case r.PacketType.DOUBLES:return e=>e.map(t.convertDouble).flat();case r.PacketType.BOOLEANS:return r=>(0,e.splitArray)(r,8).map(e=>(0,t.compressBools)(e)).flat();case r.PacketType.STRINGS_ASCII:return e=>[...(0,t.convertVarInt)(e.length),...e.map(e=>(0,t.convertVarInt)(e.length)).flat(),...(0,n.encodeHuffman)(e.reduce((e,t)=>e+String(t),""))];case r.PacketType.STRINGS_UTF16:return e=>{const r=[];for(const a of e){const e=String(a),c=(0,n.processCharCodes)(e),s=c.length;r.push(...(0,t.convertVarInt)(s)),r.push(...c.map(t.convertVarInt).flat())}return r};case r.PacketType.JSON:return e=>Array.from((0,c.compressJSON)(e));default:throw new Error("Unknown type: "+a)}}();return!s||o?async(e,t)=>new Uint8Array(u(t)):async(e,r)=>(0,t.compressGzip)(new Uint8Array(u(r)),e)}
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.createValidator = createValidator;
19
+ exports.createReceiveProcessor = createReceiveProcessor;
20
+ exports.createSendProcessor = createSendProcessor;
21
+ exports.createObjSendProcessor = createObjSendProcessor;
22
+ exports.createObjReceiveProcessor = createObjReceiveProcessor;
23
+ exports.createObjValidator = createObjValidator;
24
+ const BufferUtil_1 = require("../util/BufferUtil");
25
+ const CompressionUtil_1 = require("../util/packets/CompressionUtil");
26
+ const PacketType_1 = require("./PacketType");
27
+ const BufferUtil_2 = require("../util/BufferUtil");
28
+ const StringUtil_1 = require("../util/StringUtil");
29
+ const JSONUtil_1 = require("../util/packets/JSONUtil");
30
+ function BYTE_LEN(cap, min) {
31
+ return (data) => data.length >= min && data.length <= cap;
32
+ }
33
+ function SHORT_LEN(cap, min) {
34
+ min *= 2;
35
+ cap *= 2;
36
+ return (data) => data.length >= min && data.length <= cap && data.length % 2 == 0;
37
+ }
38
+ function VARINT_VERIF(cap, min) {
39
+ return (data) => {
40
+ if (data.length == 0)
41
+ return min <= 0 ? [] : false;
42
+ let sectors = 0, i = 0, computed = [];
43
+ while (i < data.length) {
44
+ const [off, varint] = (0, CompressionUtil_1.readVarInt)(data, i);
45
+ i = off;
46
+ computed.push(varint);
47
+ if (++sectors > cap)
48
+ return false;
49
+ }
50
+ if (sectors < min)
51
+ return false;
52
+ return computed;
53
+ };
54
+ }
55
+ ;
56
+ function createValidator(type, dataCap, dataMin, packet, gzipCompression) {
57
+ function genFunc() {
58
+ switch (type) {
59
+ case PacketType_1.PacketType.NONE: return (data) => data.length == 0;
60
+ case PacketType_1.PacketType.RAW: return () => undefined;
61
+ case PacketType_1.PacketType.ENUMS: return (data, index) => {
62
+ if (data.length < dataMin || data.length > dataCap || index >= packet.enumData.length)
63
+ return false;
64
+ const pkg = packet.enumData[index];
65
+ for (let i = 0; i < data.length; i++) {
66
+ if (pkg.values.length <= data[i])
67
+ return false;
68
+ }
69
+ };
70
+ case PacketType_1.PacketType.BYTES: return BYTE_LEN(dataCap, dataMin);
71
+ case PacketType_1.PacketType.UBYTES: return BYTE_LEN(dataCap, dataMin);
72
+ case PacketType_1.PacketType.HEX: return BYTE_LEN(dataCap, dataMin);
73
+ case PacketType_1.PacketType.SHORTS: return SHORT_LEN(dataCap, dataMin);
74
+ case PacketType_1.PacketType.USHORTS: return SHORT_LEN(dataCap, dataMin);
75
+ case PacketType_1.PacketType.VARINT: return VARINT_VERIF(dataCap, dataMin);
76
+ case PacketType_1.PacketType.UVARINT: return VARINT_VERIF(dataCap, dataMin);
77
+ case PacketType_1.PacketType.DELTAS: return VARINT_VERIF(dataCap, dataMin);
78
+ case PacketType_1.PacketType.FLOATS: return (data) => {
79
+ if (data.length % 4 !== 0)
80
+ return false;
81
+ const sectors = data.length * CompressionUtil_1.ONE_FOURTH;
82
+ if (sectors > dataCap || sectors < dataMin)
83
+ return false;
84
+ return undefined;
85
+ };
86
+ case PacketType_1.PacketType.DOUBLES: return (data) => {
87
+ if (data.length % 8 !== 0)
88
+ return false;
89
+ const sectors = data.length * CompressionUtil_1.ONE_EIGHT;
90
+ if (sectors > dataCap || sectors < dataMin)
91
+ return false;
92
+ return undefined;
93
+ };
94
+ case PacketType_1.PacketType.BOOLEANS:
95
+ {
96
+ const min = Math.ceil(dataMin * CompressionUtil_1.ONE_EIGHT);
97
+ const cap = Math.ceil(dataCap * CompressionUtil_1.ONE_EIGHT);
98
+ return (data) => data.length >= min && data.length <= cap;
99
+ }
100
+ ;
101
+ case PacketType_1.PacketType.STRINGS_ASCII: return (data) => {
102
+ let index = 0;
103
+ const [offCount, stringCount] = (0, CompressionUtil_1.readVarInt)(data, index);
104
+ index = offCount;
105
+ if (stringCount < dataMin || stringCount > dataCap)
106
+ return false;
107
+ const lengths = [];
108
+ let totalLength = 0;
109
+ for (let i = 0; i < stringCount; i++) {
110
+ const [offLen, strLen] = (0, CompressionUtil_1.readVarInt)(data, index);
111
+ index = offLen;
112
+ lengths.push(strLen);
113
+ totalLength += strLen;
114
+ }
115
+ if (index + Math.ceil(totalLength / 8) > data.length)
116
+ return false;
117
+ return [stringCount, lengths, index];
118
+ };
119
+ case PacketType_1.PacketType.STRINGS_UTF16: return (data) => {
120
+ let sectors = 0, index = 0, computed = [];
121
+ while (index < data.length) {
122
+ sectors++;
123
+ if (sectors > dataCap)
124
+ return false;
125
+ const [off, strLength] = (0, CompressionUtil_1.readVarInt)(data, index);
126
+ index = off;
127
+ let string = [];
128
+ for (let i = 0; i < strLength; i++) {
129
+ const [newOff, char] = (0, CompressionUtil_1.readVarInt)(data, index);
130
+ index = newOff;
131
+ if (index > data.length)
132
+ return false;
133
+ string.push(char);
134
+ }
135
+ computed.push(string);
136
+ }
137
+ if (sectors < dataMin)
138
+ return false;
139
+ return computed;
140
+ };
141
+ case PacketType_1.PacketType.JSON: return (data) => {
142
+ try {
143
+ return (0, JSONUtil_1.decompressJSON)(data);
144
+ }
145
+ catch {
146
+ return false;
147
+ }
148
+ };
149
+ default: throw new Error("Unknown type: " + type);
150
+ }
151
+ }
152
+ const fn = genFunc();
153
+ return gzipCompression && packet.dataBatching == 0
154
+ ? async (data, index) => {
155
+ try {
156
+ const dec = await (0, CompressionUtil_1.decompressGzip)(data);
157
+ return [dec, fn(dec, index)];
158
+ }
159
+ catch {
160
+ return [data, false];
161
+ }
162
+ }
163
+ : async (data, index) => {
164
+ return [data, fn(data, index)];
165
+ };
166
+ }
167
+ function createReceiveProcessor(type, enumData, cap) {
168
+ switch (type) {
169
+ case PacketType_1.PacketType.NONE: return () => undefined;
170
+ case PacketType_1.PacketType.RAW: return (data) => data;
171
+ case PacketType_1.PacketType.BYTES: return (data) => Array.from(data).map(CompressionUtil_1.demapZigZag);
172
+ case PacketType_1.PacketType.UBYTES: return (data) => Array.from(data);
173
+ case PacketType_1.PacketType.HEX: return (data) => (0, CompressionUtil_1.bytesToHex)(data);
174
+ case PacketType_1.PacketType.SHORTS: return (data) => (0, BufferUtil_2.splitBuffer)(data, 2).map(v => (0, CompressionUtil_1.demapShort_ZZ)(v));
175
+ case PacketType_1.PacketType.USHORTS: return (data) => (0, BufferUtil_2.splitBuffer)(data, 2).map(v => (0, CompressionUtil_1.fromShort)(v));
176
+ case PacketType_1.PacketType.VARINT: return (_, computed) => computed.map(CompressionUtil_1.demapZigZag);
177
+ case PacketType_1.PacketType.UVARINT: return (_, computed) => computed;
178
+ case PacketType_1.PacketType.DELTAS: return (_, computed) => computed.map((x, i) => computed[i] = (computed[i - 1] || 0) + (0, CompressionUtil_1.demapZigZag)(x));
179
+ case PacketType_1.PacketType.FLOATS: return (data) => (0, BufferUtil_2.splitBuffer)(data, 4).map(CompressionUtil_1.deconvertFloat);
180
+ case PacketType_1.PacketType.DOUBLES: return (data) => (0, BufferUtil_2.splitBuffer)(data, 8).map(CompressionUtil_1.deconvertDouble);
181
+ case PacketType_1.PacketType.BOOLEANS: return (data) => Array.from(data).map(d => (0, CompressionUtil_1.decompressBools)(d)).flat().splice(0, cap);
182
+ case PacketType_1.PacketType.ENUMS: return (data, _, index) => {
183
+ const pkg = enumData[index];
184
+ return Array.from(data).map(code => pkg.values[code]);
185
+ };
186
+ case PacketType_1.PacketType.STRINGS_ASCII: return (data, validationResult) => {
187
+ const [stringCount, lengths, dataStart] = validationResult;
188
+ const bitString = (0, CompressionUtil_1.bytesToBits)(data.subarray(dataStart));
189
+ const decoded = (0, StringUtil_1.decodeHuffman)(bitString);
190
+ if (!decoded)
191
+ return [];
192
+ const strings = [];
193
+ let offset = 0;
194
+ for (let i = 0; i < stringCount; i++) {
195
+ strings.push(decoded.slice(offset, offset + lengths[i]));
196
+ offset += lengths[i];
197
+ }
198
+ return strings;
199
+ };
200
+ case PacketType_1.PacketType.STRINGS_UTF16: return (_, computed) => {
201
+ return computed.map(codes => String.fromCodePoint(...codes));
202
+ };
203
+ case PacketType_1.PacketType.JSON: return (_, computed) => computed;
204
+ default: throw new Error("Unknown type: " + type);
205
+ }
206
+ }
207
+ /** Creates a function that processes a packet type */
208
+ function createSendProcessor(type, gzipCompression, batchedData) {
209
+ function genFunc() {
210
+ switch (type) {
211
+ case PacketType_1.PacketType.NONE: return () => [];
212
+ case PacketType_1.PacketType.RAW: return (data) => Array.from(data);
213
+ case PacketType_1.PacketType.ENUMS: return (enums) => enums;
214
+ case PacketType_1.PacketType.BYTES: return (numbers) => numbers.map(CompressionUtil_1.mapZigZag);
215
+ case PacketType_1.PacketType.UBYTES: return (numbers) => numbers.map(CompressionUtil_1.toByte);
216
+ case PacketType_1.PacketType.HEX: return (hex) => {
217
+ if (typeof hex != "string") {
218
+ if (hex instanceof Array && hex.length == 1)
219
+ return (0, CompressionUtil_1.hexToBytes)(hex[0]);
220
+ throw new Error("Cannot send more than 1 hex string; this packet is equivalent to UBYTES: " + JSON.stringify(hex));
221
+ }
222
+ return (0, CompressionUtil_1.hexToBytes)(hex);
223
+ };
224
+ case PacketType_1.PacketType.SHORTS: return (numbers) => numbers.map(CompressionUtil_1.mapShort_ZZ).flat();
225
+ case PacketType_1.PacketType.USHORTS: return (numbers) => numbers.map(CompressionUtil_1.toShort).flat();
226
+ case PacketType_1.PacketType.VARINT: return (numbers) => numbers.map(n => (0, CompressionUtil_1.convertVarInt)((0, CompressionUtil_1.mapZigZag)(n))).flat();
227
+ case PacketType_1.PacketType.UVARINT: return (numbers) => numbers.map(CompressionUtil_1.convertVarInt).flat();
228
+ case PacketType_1.PacketType.DELTAS: return (numbers) => numbers.map((n, i) => (0, CompressionUtil_1.convertVarInt)((0, CompressionUtil_1.mapZigZag)(n - (numbers[i - 1] || 0)))).flat();
229
+ case PacketType_1.PacketType.FLOATS: return (singles) => singles.map(CompressionUtil_1.convertFloat).flat();
230
+ case PacketType_1.PacketType.DOUBLES: return (doubles) => doubles.map(CompressionUtil_1.convertDouble).flat();
231
+ case PacketType_1.PacketType.BOOLEANS: return (bools) => (0, BufferUtil_1.splitArray)(bools, 8).map((bools) => (0, CompressionUtil_1.compressBools)(bools)).flat();
232
+ case PacketType_1.PacketType.STRINGS_ASCII: return (strings) => {
233
+ return [
234
+ ...(0, CompressionUtil_1.convertVarInt)(strings.length),
235
+ ...strings.map(str => (0, CompressionUtil_1.convertVarInt)(str.length)).flat(),
236
+ ...(0, StringUtil_1.encodeHuffman)(strings.reduce((a, b) => a + String(b), "")),
237
+ ];
238
+ };
239
+ case PacketType_1.PacketType.STRINGS_UTF16: return (strings) => {
240
+ const res = [];
241
+ for (const v of strings) {
242
+ const string = String(v);
243
+ const charCodes = (0, StringUtil_1.processCharCodes)(string);
244
+ // hate js man
245
+ const length = charCodes.length;
246
+ res.push(...(0, CompressionUtil_1.convertVarInt)(length));
247
+ res.push(...charCodes.map(CompressionUtil_1.convertVarInt).flat());
248
+ }
249
+ return res;
250
+ };
251
+ case PacketType_1.PacketType.JSON: return (value) => Array.from((0, JSONUtil_1.compressJSON)(value));
252
+ default: throw new Error("Unknown type: " + type);
253
+ }
254
+ }
255
+ const fn = genFunc();
256
+ if (!gzipCompression || batchedData) {
257
+ return async (_, data) => {
258
+ return new Uint8Array(fn(data));
259
+ };
260
+ }
261
+ return async (ident, data) => {
262
+ return (0, CompressionUtil_1.compressGzip)(new Uint8Array(fn(data)), ident);
263
+ };
264
+ }
265
+ function createObjSendProcessor(packet) {
266
+ const size = packet.type.length;
267
+ // TODO: Add compression and add rereferences[]
268
+ const processors = packet.type.map(t => createSendProcessor(t, false, false));
269
+ return async (ident, data) => {
270
+ let result = [];
271
+ for (let i = 0; i < size; i++) {
272
+ const sectorData = data[i];
273
+ const d = await processors[i](ident, Array.isArray(sectorData) ? sectorData : [sectorData]);
274
+ if (d.length > CompressionUtil_1.MAX_UVARINT)
275
+ throw new Error(`Cannot send ${d.length}/${CompressionUtil_1.MAX_UVARINT} bytes of data!`);
276
+ result.push(...(0, CompressionUtil_1.convertVarInt)(d.length));
277
+ d.forEach(val => result.push(val));
278
+ }
279
+ return new Uint8Array(result);
280
+ };
281
+ }
282
+ function createObjReceiveProcessor(packet) {
283
+ const processors = packet.type.map((t, i) => createReceiveProcessor(t, packet.enumData, packet.dataMax[i]));
284
+ return (data, validationResult) => {
285
+ let index = 0, enums = 0, result = [];
286
+ while (index < data.length) {
287
+ // TODO: this does not need sector length because objects are actually deterministically sized in each one!!
288
+ const [off, sectorLength] = (0, CompressionUtil_1.readVarInt)(data, index);
289
+ index = off;
290
+ const sector = data.subarray(index, index += sectorLength);
291
+ // basically make this return the ending index
292
+ // *only works if dataMax=dataMin
293
+ result.push(processors[result.length](sector, validationResult[result.length], packet.type[result.length] == PacketType_1.PacketType.ENUMS ? enums++ : 0));
294
+ }
295
+ return result;
296
+ };
297
+ }
298
+ function createObjValidator(packet) {
299
+ const validators = packet.type.map((t, i) => createValidator(t, packet.dataMax[i], packet.dataMin[i], packet, false));
300
+ return async (data) => {
301
+ let index = 0, enums = 0, computedData = [];
302
+ while (index < data.length) {
303
+ if (computedData.length > packet.type.length)
304
+ return [data, false]; // only types amount of values
305
+ const [off, sectorLength] = (0, CompressionUtil_1.readVarInt)(data, index);
306
+ index = off;
307
+ if (sectorLength + index > data.length)
308
+ return [data, false];
309
+ const sector = data.subarray(index, index += sectorLength);
310
+ const [, result] = await validators[computedData.length](sector, packet.type[computedData.length] == PacketType_1.PacketType.ENUMS ? enums++ : 0);
311
+ if (result === false)
312
+ return [data, false]; // chat i used === to fix a bug !!!!
313
+ computedData.push(result);
314
+ }
315
+ return [data, computedData];
316
+ };
317
+ }
@@ -1,7 +1,3 @@
1
- /**
2
- * Copyright 2026 Lily (liwybloc)
3
- * Licensed under the Apache License, Version 2.0.
4
- */
5
1
  /** All different packet types. Use ENUMS for any constant primitive data */
6
2
  export declare enum PacketType {
7
3
  /** No data */
@@ -1,6 +1,61 @@
1
- /**
1
+ "use strict";
2
+ /*
2
3
  * Copyright 2026 Lily (liwybloc)
3
- * Licensed under the Apache License, Version 2.0.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
4
16
  */
5
-
6
- var S;Object.defineProperty(exports,"__esModule",{value:!0}),exports.PacketType=void 0,function(S){S[S.NONE=0]="NONE",S[S.RAW=1]="RAW",S[S.STRINGS_ASCII=2]="STRINGS_ASCII",S[S.STRINGS_UTF16=3]="STRINGS_UTF16",S[S.STRINGS=2]="STRINGS",S[S.ENUMS=4]="ENUMS",S[S.BYTES=5]="BYTES",S[S.UBYTES=6]="UBYTES",S[S.SHORTS=7]="SHORTS",S[S.USHORTS=8]="USHORTS",S[S.VARINT=9]="VARINT",S[S.UVARINT=10]="UVARINT",S[S.DELTAS=11]="DELTAS",S[S.FLOATS=12]="FLOATS",S[S.DOUBLES=13]="DOUBLES",S[S.BOOLEANS=14]="BOOLEANS",S[S.KEY_EFFECTIVE=15]="KEY_EFFECTIVE",S[S.JSON=16]="JSON",S[S.HEX=17]="HEX"}(S||(exports.PacketType=S={}));
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.PacketType = void 0;
19
+ // separated file to allow imports
20
+ /** All different packet types. Use ENUMS for any constant primitive data */
21
+ var PacketType;
22
+ (function (PacketType) {
23
+ /** No data */
24
+ PacketType[PacketType["NONE"] = 0] = "NONE";
25
+ /** Raw data */
26
+ PacketType[PacketType["RAW"] = 1] = "RAW";
27
+ /** 8 byte string data (0-255 codes) */
28
+ PacketType[PacketType["STRINGS_ASCII"] = 2] = "STRINGS_ASCII";
29
+ /** Code point UTF16 data; up to 0x10FFFF */
30
+ PacketType[PacketType["STRINGS_UTF16"] = 3] = "STRINGS_UTF16";
31
+ /** Strings; defaults to ASCII (0-255 codes). Use STRINGS_UTF16 for more codes. */
32
+ PacketType[PacketType["STRINGS"] = 2] = "STRINGS";
33
+ /** Constant primitive data; strings, numbers, booleans, null, undefined */
34
+ PacketType[PacketType["ENUMS"] = 4] = "ENUMS";
35
+ /** One or more bytes; -128 to 127 | zig-zag encoded */
36
+ PacketType[PacketType["BYTES"] = 5] = "BYTES";
37
+ /** One or more bytes; 0 to 255 */
38
+ PacketType[PacketType["UBYTES"] = 6] = "UBYTES";
39
+ /** One or more shorts; -32,768 to 32,767 | zig-zag encoded */
40
+ PacketType[PacketType["SHORTS"] = 7] = "SHORTS";
41
+ /** One or more shorts; 0 to 65,535 */
42
+ PacketType[PacketType["USHORTS"] = 8] = "USHORTS";
43
+ /** One or more integers between -281,474,976,710,656 and 281,474,976,710,655 | zig-zag encoded */
44
+ PacketType[PacketType["VARINT"] = 9] = "VARINT";
45
+ /** One or more integers up to 562,949,953,421,311. */
46
+ PacketType[PacketType["UVARINT"] = 10] = "UVARINT";
47
+ /** Var ints that use deltas; each value will show the difference from the last value. Good for close numbers */
48
+ PacketType[PacketType["DELTAS"] = 11] = "DELTAS";
49
+ /** One or more single precision floating point numbers. Only up to 7 digits of accuracy. */
50
+ PacketType[PacketType["FLOATS"] = 12] = "FLOATS";
51
+ /** One or more double precision floating point numbers. */
52
+ PacketType[PacketType["DOUBLES"] = 13] = "DOUBLES";
53
+ /** One or more true/false */
54
+ PacketType[PacketType["BOOLEANS"] = 14] = "BOOLEANS";
55
+ /** Consumes multiple keys to describe the value. E.g. if you want to send a boolean, this could take up 2 keys instead of sending 2 bytes. Currently W.I.P. */
56
+ PacketType[PacketType["KEY_EFFECTIVE"] = 15] = "KEY_EFFECTIVE";
57
+ /** A more optimized version of JSON for when it's a necessity. However, please try to avoid this; the other types are usually better. */
58
+ PacketType[PacketType["JSON"] = 16] = "JSON";
59
+ /** Hex bytes, e.g. 0xFFFFFF - the result will always be returned in lowercase. This can only hold 1 hex string, since it's the same as UBYTES but auto-parses. */
60
+ PacketType[PacketType["HEX"] = 17] = "HEX";
61
+ })(PacketType || (exports.PacketType = PacketType = {}));
@@ -1,7 +1,3 @@
1
- /**
2
- * Copyright 2026 Lily (liwybloc)
3
- * Licensed under the Apache License, Version 2.0.
4
- */
5
1
  import { EnumPackage } from "../util/enums/EnumType";
6
2
  import { SonicWSConnection } from "../server/SonicWSConnection";
7
3
  import { ArguableType } from "../util/packets/PacketUtils";