@andrew_l/tl-pack 0.2.19 → 0.2.21

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 CHANGED
@@ -35,9 +35,11 @@ writer.writeObject({
35
35
  uint8: 255,
36
36
  uint16: 256,
37
37
  uint32: 65536,
38
+ uint64: 2n ** 64n - 1n,
38
39
  int8: -128,
39
40
  int16: -32768,
40
41
  int32: -2147483648,
42
+ int64: -100n,
41
43
  double: 3.14,
42
44
  string: 'Hello world',
43
45
  vector: [1, 2, 3, 4, 5, { text: 'hi' }],
@@ -298,9 +300,11 @@ const SecureData = defineStructure({
298
300
  | Int8 | 1 |
299
301
  | Int16 | 2 |
300
302
  | Int32 | 4 |
303
+ | Int64 | 8 |
301
304
  | UInt8 | 1 |
302
305
  | UInt16 | 2 |
303
306
  | UInt32 | 4 |
307
+ | UInt64 | 8 |
304
308
  | Float | 4 |
305
309
  | Double | 8 |
306
310
  | Map | 2 + sizeof(object) |
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const BinaryReader = require('./shared/tl-pack.c8vOMguk.cjs');
3
+ const BinaryReader = require('./shared/tl-pack.BBF47sk-.cjs');
4
4
  const toolkit = require('@andrew_l/toolkit');
5
5
  require('pako');
6
6
 
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { B as BinaryWriterOptions, a as BinaryReaderOptions } from './shared/tl-pack.DWKHpLIt.cjs';
2
- export { b as BinaryReader, c as BinaryWriter, C as CORE_TYPES, D as DecodeHandler, f as DefineStructureOptions, E as EncodeHandler, M as MAX_BUFFER_SIZE, S as Structure, T as TLExtension, d as createDictionary, e as createExtension, g as defineStructure } from './shared/tl-pack.DWKHpLIt.cjs';
1
+ import { B as BinaryWriterOptions, a as BinaryReaderOptions } from './shared/tl-pack.DM1wAuup.cjs';
2
+ export { b as BinaryReader, c as BinaryWriter, C as CORE_TYPES, D as DecodeHandler, f as DefineStructureOptions, E as EncodeHandler, M as MAX_BUFFER_SIZE, S as Structure, T as TLExtension, d as createDictionary, e as createExtension, g as defineStructure } from './shared/tl-pack.DM1wAuup.cjs';
3
3
  import '@andrew_l/toolkit';
4
4
 
5
5
  /**
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { B as BinaryWriterOptions, a as BinaryReaderOptions } from './shared/tl-pack.DWKHpLIt.mjs';
2
- export { b as BinaryReader, c as BinaryWriter, C as CORE_TYPES, D as DecodeHandler, f as DefineStructureOptions, E as EncodeHandler, M as MAX_BUFFER_SIZE, S as Structure, T as TLExtension, d as createDictionary, e as createExtension, g as defineStructure } from './shared/tl-pack.DWKHpLIt.mjs';
1
+ import { B as BinaryWriterOptions, a as BinaryReaderOptions } from './shared/tl-pack.DM1wAuup.mjs';
2
+ export { b as BinaryReader, c as BinaryWriter, C as CORE_TYPES, D as DecodeHandler, f as DefineStructureOptions, E as EncodeHandler, M as MAX_BUFFER_SIZE, S as Structure, T as TLExtension, d as createDictionary, e as createExtension, g as defineStructure } from './shared/tl-pack.DM1wAuup.mjs';
3
3
  import '@andrew_l/toolkit';
4
4
 
5
5
  /**
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { B as BinaryWriterOptions, a as BinaryReaderOptions } from './shared/tl-pack.DWKHpLIt.js';
2
- export { b as BinaryReader, c as BinaryWriter, C as CORE_TYPES, D as DecodeHandler, f as DefineStructureOptions, E as EncodeHandler, M as MAX_BUFFER_SIZE, S as Structure, T as TLExtension, d as createDictionary, e as createExtension, g as defineStructure } from './shared/tl-pack.DWKHpLIt.js';
1
+ import { B as BinaryWriterOptions, a as BinaryReaderOptions } from './shared/tl-pack.DM1wAuup.js';
2
+ export { b as BinaryReader, c as BinaryWriter, C as CORE_TYPES, D as DecodeHandler, f as DefineStructureOptions, E as EncodeHandler, M as MAX_BUFFER_SIZE, S as Structure, T as TLExtension, d as createDictionary, e as createExtension, g as defineStructure } from './shared/tl-pack.DM1wAuup.js';
3
3
  import '@andrew_l/toolkit';
4
4
 
5
5
  /**
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { B as BinaryWriter, a as BinaryReader } from './shared/tl-pack.JLeffH7U.mjs';
2
- export { C as CORE_TYPES, M as MAX_BUFFER_SIZE, S as Structure, c as createDictionary, d as defineStructure } from './shared/tl-pack.JLeffH7U.mjs';
1
+ import { B as BinaryWriter, a as BinaryReader } from './shared/tl-pack.Dqk7nt9S.mjs';
2
+ export { C as CORE_TYPES, M as MAX_BUFFER_SIZE, S as Structure, c as createDictionary, d as defineStructure } from './shared/tl-pack.Dqk7nt9S.mjs';
3
3
  import { assert } from '@andrew_l/toolkit';
4
4
  import 'pako';
5
5
 
@@ -16,9 +16,11 @@ var CORE_TYPES = /* @__PURE__ */ ((CORE_TYPES2) => {
16
16
  CORE_TYPES2[CORE_TYPES2["Date"] = 5] = "Date";
17
17
  CORE_TYPES2[CORE_TYPES2["Vector"] = 6] = "Vector";
18
18
  CORE_TYPES2[CORE_TYPES2["VectorDynamic"] = 7] = "VectorDynamic";
19
+ CORE_TYPES2[CORE_TYPES2["Int64"] = 22] = "Int64";
19
20
  CORE_TYPES2[CORE_TYPES2["Int32"] = 8] = "Int32";
20
21
  CORE_TYPES2[CORE_TYPES2["Int16"] = 9] = "Int16";
21
22
  CORE_TYPES2[CORE_TYPES2["Int8"] = 10] = "Int8";
23
+ CORE_TYPES2[CORE_TYPES2["UInt64"] = 23] = "UInt64";
22
24
  CORE_TYPES2[CORE_TYPES2["UInt32"] = 11] = "UInt32";
23
25
  CORE_TYPES2[CORE_TYPES2["UInt16"] = 12] = "UInt16";
24
26
  CORE_TYPES2[CORE_TYPES2["UInt8"] = 13] = "UInt8";
@@ -40,11 +42,12 @@ function createDictionary(values) {
40
42
  return new Dictionary(values);
41
43
  }
42
44
  class Dictionary {
43
- _count = 0;
45
+ _count;
44
46
  _wordToIndex;
45
47
  _words;
46
48
  _offset;
47
49
  constructor(values, offset = 0) {
50
+ this._count = 0;
48
51
  this._words = [];
49
52
  this._wordToIndex = /* @__PURE__ */ new Map();
50
53
  this._offset = offset;
@@ -56,6 +59,11 @@ class Dictionary {
56
59
  });
57
60
  }
58
61
  }
62
+ clear() {
63
+ this._count = 0;
64
+ this._words.length = 0;
65
+ this._wordToIndex.clear();
66
+ }
59
67
  get size() {
60
68
  return this._count;
61
69
  }
@@ -143,7 +151,7 @@ class BinaryWriter {
143
151
  this.offsetChecksum = 0;
144
152
  this._last = noop;
145
153
  this._repeat = void 0;
146
- this.dictionaryExtended = new Dictionary(void 0, this.dictionary.size);
154
+ this.dictionaryExtended.clear();
147
155
  return this;
148
156
  }
149
157
  allocate(size) {
@@ -199,6 +207,15 @@ class BinaryWriter {
199
207
  this.writeByte(CORE_TYPES.Null);
200
208
  return this;
201
209
  }
210
+ writeInt64(value, signed = true) {
211
+ this.allocate(8);
212
+ if (typeof value === "number") value = BigInt(value);
213
+ const low32 = Number(value & 0xffffffffn);
214
+ const high32 = Number(value >> 32n);
215
+ this.writeInt32(low32, signed);
216
+ this.writeInt32(high32, signed);
217
+ return this;
218
+ }
202
219
  writeInt32(value, signed = true) {
203
220
  this.allocate(4);
204
221
  if (signed) {
@@ -462,6 +479,9 @@ class BinaryWriter {
462
479
  case CORE_TYPES.Date: {
463
480
  return this.writeDate(value);
464
481
  }
482
+ case CORE_TYPES.Int64: {
483
+ return this.writeInt64(value);
484
+ }
465
485
  case CORE_TYPES.Int32: {
466
486
  return this.writeInt32(value);
467
487
  }
@@ -471,6 +491,9 @@ class BinaryWriter {
471
491
  case CORE_TYPES.Int8: {
472
492
  return this.writeInt8(value);
473
493
  }
494
+ case CORE_TYPES.UInt64: {
495
+ return this.writeInt64(value, false);
496
+ }
474
497
  case CORE_TYPES.UInt32: {
475
498
  return this.writeInt32(value, false);
476
499
  }
@@ -592,6 +615,15 @@ const TYPE_HANDLERS = {
592
615
  },
593
616
  estimatedSizeBytes: 4
594
617
  },
618
+ [CORE_TYPES.Int64]: {
619
+ encode: function(value, key) {
620
+ this.writeInt64(value[key], true);
621
+ },
622
+ decode: function(result, key) {
623
+ result[key] = this.readInt64(true);
624
+ },
625
+ estimatedSizeBytes: 8
626
+ },
595
627
  [CORE_TYPES.UInt8]: {
596
628
  encode: function(value, key) {
597
629
  this.writeInt8(value[key], false);
@@ -619,6 +651,15 @@ const TYPE_HANDLERS = {
619
651
  },
620
652
  estimatedSizeBytes: 4
621
653
  },
654
+ [CORE_TYPES.UInt64]: {
655
+ encode: function(value, key) {
656
+ this.writeInt64(value[key], false);
657
+ },
658
+ decode: function(result, key) {
659
+ result[key] = this.readInt64(false);
660
+ },
661
+ estimatedSizeBytes: 8
662
+ },
622
663
  [CORE_TYPES.Double]: {
623
664
  encode: function(value, key) {
624
665
  this.writeDouble(value[key]);
@@ -906,6 +947,14 @@ function coreType(value) {
906
947
  case "boolean": {
907
948
  return value ? CORE_TYPES.BoolTrue : CORE_TYPES.BoolFalse;
908
949
  }
950
+ case "bigint": {
951
+ if (value >= 0n && value <= 0xffffffffffffffffn) {
952
+ return CORE_TYPES.UInt64;
953
+ } else if (value >= -0x8000000000000000n && value <= 0x7fffffffffffffffn) {
954
+ return CORE_TYPES.Int64;
955
+ }
956
+ return CORE_TYPES.None;
957
+ }
909
958
  case "number": {
910
959
  if (Math.trunc(value) === value) {
911
960
  if (value >= 0 && value <= 255) {
@@ -1195,6 +1244,12 @@ class BinaryReader {
1195
1244
  this._last = this.target[this.offset++];
1196
1245
  return this._last;
1197
1246
  }
1247
+ readInt64(signed = true) {
1248
+ const low32 = this.readInt32(signed);
1249
+ const high32 = this.readInt32(signed);
1250
+ this._last = BigInt(high32) << 32n | BigInt(low32);
1251
+ return this._last;
1252
+ }
1198
1253
  readInt32(signed = true) {
1199
1254
  this.assertRead(4);
1200
1255
  this._last = this.target[this.offset++] | this.target[this.offset++] << 8 | this.target[this.offset++] << 16 | this.target[this.offset++] << 24;
@@ -1231,7 +1286,6 @@ class BinaryReader {
1231
1286
  }
1232
1287
  /**
1233
1288
  * Reads a real floating point (8 bytes) value.
1234
- * @returns {BigInteger}
1235
1289
  */
1236
1290
  readDouble() {
1237
1291
  this.assertRead(8);
@@ -1399,12 +1453,16 @@ class BinaryReader {
1399
1453
  return this.readString();
1400
1454
  case CORE_TYPES.Date:
1401
1455
  return this.readDate();
1456
+ case CORE_TYPES.Int64:
1457
+ return this.readInt64();
1402
1458
  case CORE_TYPES.Int32:
1403
1459
  return this.readInt32();
1404
1460
  case CORE_TYPES.Int16:
1405
1461
  return this.readInt16();
1406
1462
  case CORE_TYPES.Int8:
1407
1463
  return this.readInt8();
1464
+ case CORE_TYPES.UInt64:
1465
+ return this.readInt64(false);
1408
1466
  case CORE_TYPES.UInt32:
1409
1467
  return this.readInt32(false);
1410
1468
  case CORE_TYPES.UInt16:
@@ -1580,6 +1638,21 @@ class BinaryReader {
1580
1638
  seek(offset) {
1581
1639
  this.offset += offset;
1582
1640
  }
1641
+ /**
1642
+ * Sets the current buffer and reset initial state.
1643
+ */
1644
+ reset(data) {
1645
+ this.offset = 0;
1646
+ this._checksumOffset = 0;
1647
+ this._lastObject = void 0;
1648
+ this._last = void 0;
1649
+ this._repeat = void 0;
1650
+ this.dictionaryExtended.clear();
1651
+ if (data) {
1652
+ this.length = data.length;
1653
+ this.target = data;
1654
+ }
1655
+ }
1583
1656
  }
1584
1657
 
1585
1658
  exports.BinaryReader = BinaryReader;
@@ -1589,4 +1662,4 @@ exports.MAX_BUFFER_SIZE = MAX_BUFFER_SIZE;
1589
1662
  exports.Structure = Structure;
1590
1663
  exports.createDictionary = createDictionary;
1591
1664
  exports.defineStructure = defineStructure;
1592
- //# sourceMappingURL=tl-pack.c8vOMguk.cjs.map
1665
+ //# sourceMappingURL=tl-pack.BBF47sk-.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tl-pack.BBF47sk-.cjs","sources":["../../src/constants.ts","../../src/dictionary.ts","../../src/BinaryWriter.ts","../../src/Structure.ts","../../src/helpers.ts","../../src/BinaryReader.ts"],"sourcesContent":["export enum CORE_TYPES {\n None = 0,\n Binary = 1,\n BoolFalse = 2,\n BoolTrue = 3,\n Null = 4,\n Date = 5,\n Vector = 6,\n VectorDynamic = 7,\n Int64 = 22,\n Int32 = 8,\n Int16 = 9,\n Int8 = 10,\n UInt64 = 23,\n UInt32 = 11,\n UInt16 = 12,\n UInt8 = 13,\n Float = 14,\n Double = 15,\n Map = 16,\n DictValue = 17,\n DictIndex = 18,\n String = 19,\n Repeat = 20,\n Checksum = 21,\n GZIP = 25,\n Structure = 26,\n}\n\nexport const MAX_BUFFER_SIZE = 0x7fd00000;\n","export function createDictionary(values?: string[]): Dictionary {\n return new Dictionary(values);\n}\n\nexport class Dictionary {\n private _count;\n private _wordToIndex: Map<string, number>;\n private _words: string[];\n private _offset: number;\n\n constructor(values?: string[], offset = 0) {\n this._count = 0;\n this._words = [];\n this._wordToIndex = new Map();\n this._offset = offset;\n\n if (Array.isArray(values) && values.length) {\n values.forEach(word => {\n if (this._wordToIndex!.has(word)) return;\n\n this._wordToIndex.set(word, this._count++);\n this._words.push(word);\n });\n }\n }\n\n clear(): void {\n this._count = 0;\n this._words.length = 0;\n this._wordToIndex.clear();\n }\n\n get size(): number {\n return this._count;\n }\n\n /**\n * Returns inserted index or nothing\n */\n maybeInsert(word: string): number | null {\n if (this._wordToIndex.has(word)) return null;\n\n this._wordToIndex.set(word, this._count++);\n this._words.push(word);\n\n return this._count + this._offset;\n }\n\n getValue(index: number): string | null {\n return this._words[index - this._offset] ?? null;\n }\n\n getIndex(value: string): number | null {\n const idx = this._wordToIndex.get(value);\n\n if (idx === undefined) {\n return null;\n }\n\n return idx + this._offset;\n }\n\n hasValue(value: string): boolean {\n return this._wordToIndex.has(value);\n }\n\n hasIndex(index: number): boolean {\n return this._words[index - this._offset] !== undefined;\n }\n}\n","import pako from 'pako';\nimport type { Structure } from './Structure.js';\nimport { CORE_TYPES, MAX_BUFFER_SIZE } from './constants';\nimport { Dictionary } from './dictionary';\nimport type { TLExtension } from './extension';\nimport {\n byteArrayAllocate,\n coreType,\n float32,\n float64,\n int32,\n utf8Write,\n} from './helpers.js';\n\nconst noop = Symbol();\n\nexport interface BinaryWriterOptions {\n gzip?: boolean;\n dictionary?: string[] | Dictionary;\n extensions?: TLExtension[];\n structures?: Structure.Constructor[];\n}\n\nconst NO_CONSTRUCTOR = new Set([\n CORE_TYPES.BoolFalse,\n CORE_TYPES.BoolTrue,\n CORE_TYPES.Null,\n]);\n\nconst SUPPORT_COMPRESSION = new Set([CORE_TYPES.String]);\n\nconst NOOP_DICTIONARY = new Dictionary();\n\nexport class BinaryWriter {\n private withGzip: boolean;\n private target: Uint8Array;\n private dictionary: Dictionary;\n private dictionaryExtended: Dictionary;\n private extensions: Map<number, TLExtension>;\n private structures: Map<number, Structure.Constructor>;\n private _last: any;\n private offsetChecksum: number;\n private _repeat?: { offset: number; count: number };\n offset: number;\n\n constructor({\n gzip = false,\n dictionary = NOOP_DICTIONARY,\n extensions,\n structures,\n }: BinaryWriterOptions = {}) {\n this.offset = 0;\n this.offsetChecksum = 0;\n this.extensions = new Map();\n this.structures = new Map();\n this.withGzip = gzip;\n\n this.target = byteArrayAllocate(8192);\n this._last = noop;\n\n if (extensions) {\n for (const ext of extensions) {\n this.extensions.set(ext.token, ext);\n }\n }\n\n if (structures) {\n for (const struct of structures) {\n this.structures.set(struct.extension.token, struct);\n }\n }\n\n if (Array.isArray(dictionary)) {\n this.dictionary = new Dictionary(dictionary);\n } else {\n this.dictionary = dictionary;\n }\n\n this.dictionaryExtended = new Dictionary(undefined, this.dictionary.size);\n }\n\n /**\n * Reset internal state\n */\n reset(): this {\n this.offset = 0;\n this.offsetChecksum = 0;\n this._last = noop;\n this._repeat = undefined;\n this.dictionaryExtended.clear();\n return this;\n }\n\n allocate(size: number): this {\n const position = this.offset + size;\n\n if (this.safeEnd < position) {\n this.makeRoom(position);\n }\n\n return this;\n }\n\n private makeRoom(end: number): void {\n let start = 0;\n let newSize = 0;\n let target = this.target;\n\n if (end > 0x1000000) {\n // special handling for really large buffers\n if (end - start > MAX_BUFFER_SIZE)\n throw new Error(\n 'Packed buffer would be larger than maximum buffer size',\n );\n newSize = Math.min(\n MAX_BUFFER_SIZE,\n Math.round(\n Math.max((end - start) * (end > 0x4000000 ? 1.25 : 2), 0x400000) /\n 0x1000,\n ) * 0x1000,\n );\n } else {\n // faster handling for smaller buffers\n newSize =\n ((Math.max((end - start) << 2, target.length - 1) >> 12) + 1) << 12;\n }\n\n const newBuffer = byteArrayAllocate(newSize);\n\n end = Math.min(end, target.length);\n\n newBuffer.set(target.slice(start, end));\n\n this.target = newBuffer;\n }\n\n get safeEnd(): number {\n return this.target.length - 10;\n }\n\n getBuffer(): Uint8Array {\n return this.target.subarray(0, this.offset);\n }\n\n writeByte(value: number): this {\n this.allocate(1);\n this.target[this.offset++] = value;\n return this;\n }\n\n writeBool(value: boolean): this {\n if (value) {\n this.writeByte(CORE_TYPES.BoolTrue);\n } else {\n this.writeByte(CORE_TYPES.BoolFalse);\n }\n\n return this;\n }\n\n writeNull(): this {\n this.writeByte(CORE_TYPES.Null);\n return this;\n }\n\n writeInt64(value: number | bigint, signed = true): this {\n this.allocate(8);\n\n if (typeof value === 'number') value = BigInt(value);\n\n const low32 = Number(value & 0xffffffffn);\n const high32 = Number(value >> 32n);\n\n this.writeInt32(low32, signed);\n this.writeInt32(high32, signed);\n\n return this;\n }\n\n writeInt32(value: number, signed = true): this {\n this.allocate(4);\n\n if (signed) {\n this.target[this.offset++] = value;\n this.target[this.offset++] = value >> 8;\n this.target[this.offset++] = value >> 16;\n this.target[this.offset++] = value >> 24;\n } else {\n this.target[this.offset++] = value;\n this.target[this.offset++] = value >> 8;\n this.target[this.offset++] = value >> 16;\n this.target[this.offset++] = value >> 24;\n }\n\n return this;\n }\n\n writeInt16(value: number, signed = true): this {\n this.allocate(2);\n\n if (signed) {\n this.target[this.offset++] = value;\n this.target[this.offset++] = value >> 8;\n } else {\n this.target[this.offset++] = value;\n this.target[this.offset++] = value >> 8;\n }\n\n return this;\n }\n\n writeInt8(value: number, signed = true): this {\n this.allocate(1);\n this.target[this.offset++] = value;\n return this;\n }\n\n writeFloat(value: number): this {\n this.allocate(4);\n float32[0] = value;\n this.writeInt32(int32[0]);\n return this;\n }\n\n writeDouble(value: number): this {\n this.allocate(8);\n\n float64[0] = value;\n this.writeInt32(int32[0], false);\n this.writeInt32(int32[1], false);\n\n return this;\n }\n\n writeDate(value: number | Date): this {\n let timestamp = 0;\n\n if (value instanceof Date) {\n timestamp = value.getTime();\n } else if (typeof value === 'number') {\n timestamp = value;\n }\n\n this.writeDouble(timestamp);\n return this;\n }\n\n writeString(value: string): this {\n const strLength = value.length;\n\n let start = this.offset;\n let require = strLength << 2;\n\n if (require < 254) {\n require += 1;\n this.offset += 1;\n } else {\n require += 4;\n this.offset += 4;\n }\n\n this.allocate(require);\n\n const bytes = utf8Write(this.target, value, this.offset);\n\n if (require < 254) {\n this.target[start++] = bytes;\n } else {\n this.target[start++] = 254;\n this.target[start++] = bytes % 256;\n this.target[start++] = (bytes >> 8) % 256;\n this.target[start++] = (bytes >> 16) % 256;\n }\n\n this.offset += bytes;\n\n return this;\n }\n\n writeChecksum(withConstructor: boolean = true): this {\n const bytes = this.target.subarray(this.offsetChecksum, this.offset);\n let sum = 0;\n\n for (const val of bytes) {\n sum += val;\n }\n\n if (withConstructor) {\n this.writeByte(CORE_TYPES.Checksum);\n }\n\n this.writeInt32(sum);\n this.offsetChecksum = this.offset;\n\n return this;\n }\n\n writeBytes(value: Uint8Array): this {\n const length = value.length;\n\n this.writeLength(length);\n this.allocate(length);\n this.target.set(value, this.offset);\n\n this.offset += length;\n\n return this;\n }\n\n writeLength(value: number): this {\n if (value < 254) {\n this.allocate(1);\n this.target[this.offset++] = value;\n } else {\n this.allocate(4);\n this.target[this.offset++] = 254;\n this.target[this.offset++] = value % 256;\n this.target[this.offset++] = (value >> 8) % 256;\n this.target[this.offset++] = (value >> 16) % 256;\n }\n\n return this;\n }\n\n writeVector(value: Array<any>): this {\n const length = value.length;\n this.writeLength(length);\n\n for (let i = 0; i < length; i++) {\n if (value[i] === undefined) {\n this.writeNull();\n } else {\n this.writeObject(value[i]);\n }\n }\n\n return this;\n }\n\n writeMap(object: Record<string, any>): this {\n for (const key in object) {\n if (object[key] === undefined) continue;\n\n this._last = noop;\n this.wireDictionary(key);\n this.writeObject(object[key]);\n }\n\n this.writeByte(CORE_TYPES.None);\n\n return this;\n }\n\n wireDictionary(value: string): this {\n let idx: number | null = null;\n\n idx = this.dictionary.getIndex(value);\n\n if (idx === null) {\n idx = this.dictionaryExtended.getIndex(value);\n }\n\n if (idx === null) {\n this.dictionaryExtended.maybeInsert(value);\n this.writeCore(CORE_TYPES.DictValue, value);\n } else {\n this.writeCore(CORE_TYPES.DictIndex, idx);\n }\n\n return this;\n }\n\n writeStructure(value: Structure): this {\n const ctor = value.constructor as typeof Structure;\n\n this.writeInt32(ctor.extension.token, false);\n ctor.extension.encode.call(this, value.value);\n\n return this;\n }\n\n writeGzip(value: Uint8Array | ArrayBuffer): this {\n const compressed = pako.deflateRaw(value, { level: 9 });\n this.writeBytes(compressed);\n return this;\n }\n\n encode(value: any): Uint8Array {\n this.offset = 0;\n this.offsetChecksum = 0;\n this._last = noop;\n this._repeat = undefined;\n this.target = byteArrayAllocate(256);\n\n this.writeObject(value);\n\n return this.getBuffer();\n }\n\n startDynamicVector(): this {\n this.writeByte(CORE_TYPES.VectorDynamic);\n return this;\n }\n\n endDynamicVector(): this {\n this.writeByte(CORE_TYPES.None);\n return this;\n }\n\n private _writeCustom(value: any): boolean {\n const start = this.offset;\n\n this.allocate(1);\n\n this.offset++;\n\n let edgeExt;\n\n for (const ext of this.extensions.values()) {\n if (ext.token === -1) {\n edgeExt = ext;\n continue;\n }\n\n ext.encode.call(this, value);\n\n const processed = start + 1 < this.offset;\n\n if (processed) {\n const end = this.offset;\n this.offset = start;\n this.writeByte(ext.token);\n this.offset = end;\n\n return true;\n }\n }\n\n this.offset = start;\n\n if (edgeExt) {\n edgeExt.encode.call(this, value);\n return start < this.offset;\n }\n\n return false;\n }\n\n writeObject(value: any): this {\n if (value === undefined) return this;\n\n const constructorId = coreType(value);\n\n // console.log('write', {\n // \toffset: this.offset,\n // \tconstructorId: CORE_TYPES[constructorId],\n // \tvalue: String(value),\n // });\n\n if (constructorId === CORE_TYPES.None) {\n if (this._writeCustom(value)) {\n return this;\n }\n\n throw new TypeError(`Invalid core type of ${value}`);\n }\n\n if (this._last === value) {\n this.writeRepeat();\n } else {\n this._last = value;\n this._repeat = undefined;\n this.writeCore(constructorId, value);\n }\n\n return this;\n }\n\n writeObjectGzip(value: any): this {\n const writer = new BinaryWriter();\n\n writer.extensions = this.extensions;\n writer.dictionary = this.dictionary;\n writer.structures = this.structures;\n writer.dictionaryExtended = this.dictionaryExtended;\n\n writer.writeObject(value);\n this.writeCore(CORE_TYPES.GZIP, writer.getBuffer());\n\n return this;\n }\n\n private writeCore(constructorId: CORE_TYPES, value: any): this {\n if (this.withGzip && SUPPORT_COMPRESSION.has(constructorId)) {\n this.writeObjectGzip(value);\n return this;\n } else if (!NO_CONSTRUCTOR.has(constructorId)) {\n this.writeByte(constructorId);\n }\n\n switch (constructorId) {\n case CORE_TYPES.Structure: {\n return this.writeStructure(value);\n }\n\n case CORE_TYPES.Binary: {\n return this.writeBytes(value);\n }\n\n case CORE_TYPES.GZIP: {\n return this.writeGzip(value);\n }\n\n case CORE_TYPES.DictIndex: {\n return this.writeLength(value);\n }\n\n case CORE_TYPES.DictValue: {\n return this.writeString(value);\n }\n\n case CORE_TYPES.BoolFalse: {\n return this.writeBool(value);\n }\n\n case CORE_TYPES.BoolTrue: {\n return this.writeBool(value);\n }\n\n case CORE_TYPES.Date: {\n return this.writeDate(value);\n }\n\n case CORE_TYPES.Int64: {\n return this.writeInt64(value);\n }\n\n case CORE_TYPES.Int32: {\n return this.writeInt32(value);\n }\n\n case CORE_TYPES.Int16: {\n return this.writeInt16(value);\n }\n\n case CORE_TYPES.Int8: {\n return this.writeInt8(value);\n }\n\n case CORE_TYPES.UInt64: {\n return this.writeInt64(value, false);\n }\n\n case CORE_TYPES.UInt32: {\n return this.writeInt32(value, false);\n }\n\n case CORE_TYPES.UInt16: {\n return this.writeInt16(value, false);\n }\n\n case CORE_TYPES.UInt8: {\n return this.writeInt8(value, false);\n }\n\n case CORE_TYPES.Double: {\n return this.writeDouble(value);\n }\n\n case CORE_TYPES.Float: {\n return this.writeFloat(value);\n }\n\n case CORE_TYPES.Null: {\n return this.writeNull();\n }\n\n case CORE_TYPES.String: {\n // write short strings into dictionary\n if (value.length <= 0x10) {\n this.offset--;\n return this.wireDictionary(value);\n }\n\n return this.writeString(value);\n }\n\n case CORE_TYPES.Vector: {\n return this.writeVector(value);\n }\n\n case CORE_TYPES.Map: {\n return this.writeMap(value);\n }\n }\n\n return this;\n }\n\n private writeRepeat(): this {\n if (!this._repeat) {\n this.writeByte(CORE_TYPES.Repeat);\n this._repeat = { count: 0, offset: this.offset };\n }\n\n this.offset = this._repeat.offset;\n this._repeat.count++;\n\n this.writeLength(this._repeat.count);\n return this;\n }\n}\n","import { type Data, assert, crc32, noop } from '@andrew_l/toolkit';\nimport { BinaryReader, type BinaryReaderOptions } from './BinaryReader';\nimport { BinaryWriter, type BinaryWriterOptions } from './BinaryWriter';\nimport { CORE_TYPES } from './constants';\nimport type { DecodeHandler, EncodeHandler, TLExtension } from './extension';\n\ninterface CompiledStructure {\n id: number;\n encodeFns: EncodeFn[];\n decodeFns: DecodeFn[];\n structures: Structure.Constructor[];\n estimatedSizeBytes: number;\n}\n\ntype EncodeFn = (this: BinaryWriter, value: any) => void;\ntype DecodeFn = (this: BinaryReader, result: any) => void;\n\ntype TypeHandler = {\n encode: (this: BinaryWriter, value: any, key: string) => void;\n decode: (this: BinaryReader, result: any, key: string) => void;\n estimatedSizeBytes: number;\n};\n\nexport interface DefineStructureOptions<\n Props extends Structure.ObjectPropsOptions,\n> {\n /**\n * Unique name of binary structure\n */\n readonly name: string;\n\n /**\n * Version of binary structure\n */\n readonly version: number;\n\n /**\n * Binary structure properties\n */\n readonly properties: Props;\n\n /**\n * Write checksum to verify decoded data\n * @default false\n */\n readonly checksum?: boolean;\n}\n\nconst CONSTRUCTOR_OPTIONAL = 0x62016eac;\nconst CONSTRUCTOR_OPTIONAL_NULL = 0x22016eac;\n\nconst TYPE_HANDLERS: Record<string | number, TypeHandler> = {\n ['unknown']: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeObject(value[key]);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readObject();\n },\n estimatedSizeBytes: 0,\n },\n [CORE_TYPES.Map]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeMap(value[key]);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readMap(false);\n },\n estimatedSizeBytes: 0,\n },\n [CORE_TYPES.Binary]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeBytes(value[key]);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readBytes();\n },\n estimatedSizeBytes: 0,\n },\n [CORE_TYPES.Vector]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeVector(value[key]);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readVector(false);\n },\n estimatedSizeBytes: 0,\n },\n [Boolean.name]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeBool(value[key]);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readBool();\n },\n estimatedSizeBytes: 1,\n },\n [CORE_TYPES.Int8]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeInt8(value[key], true);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readInt8(true);\n },\n estimatedSizeBytes: 1,\n },\n [CORE_TYPES.Int16]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeInt16(value[key], true);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readInt16(true);\n },\n estimatedSizeBytes: 2,\n },\n [CORE_TYPES.Int32]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeInt32(value[key], true);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readInt32(true);\n },\n estimatedSizeBytes: 4,\n },\n [CORE_TYPES.Int64]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeInt64(value[key], true);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readInt64(true);\n },\n estimatedSizeBytes: 8,\n },\n [CORE_TYPES.UInt8]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeInt8(value[key], false);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readInt8(false);\n },\n estimatedSizeBytes: 1,\n },\n [CORE_TYPES.UInt16]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeInt16(value[key], false);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readInt16(false);\n },\n estimatedSizeBytes: 2,\n },\n [CORE_TYPES.UInt32]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeInt32(value[key], false);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readInt32(false);\n },\n estimatedSizeBytes: 4,\n },\n [CORE_TYPES.UInt64]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeInt64(value[key], false);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readInt64(false);\n },\n estimatedSizeBytes: 8,\n },\n [CORE_TYPES.Double]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeDouble(value[key]);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readDouble();\n },\n estimatedSizeBytes: 8,\n },\n [CORE_TYPES.Date]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeDate(value[key]);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readDate();\n },\n estimatedSizeBytes: 8,\n },\n [CORE_TYPES.String]: {\n encode: function (this: BinaryWriter, value: any, key: string): void {\n this.writeString(value[key]);\n },\n decode: function (this: BinaryReader, result: any, key: string): void {\n result[key] = this.readString();\n },\n estimatedSizeBytes: 0,\n },\n};\n\nTYPE_HANDLERS[Number.name] = TYPE_HANDLERS[CORE_TYPES.Double];\nTYPE_HANDLERS[String.name] = TYPE_HANDLERS[CORE_TYPES.String];\nTYPE_HANDLERS[Object.name] = TYPE_HANDLERS[CORE_TYPES.Map];\nTYPE_HANDLERS[Uint8Array.name] = TYPE_HANDLERS[CORE_TYPES.Binary];\nTYPE_HANDLERS[Array.name] = TYPE_HANDLERS[CORE_TYPES.Vector];\nTYPE_HANDLERS[Date.name] = TYPE_HANDLERS[CORE_TYPES.Date];\n\nfunction compileStructure(\n name: string,\n version: number,\n properties: Structure.ObjectPropsOptions,\n checksum: boolean,\n): CompiledStructure {\n const encodeFns: EncodeFn[] = [];\n const decodeFns: DecodeFn[] = [];\n const structures: Structure.Constructor[] = [];\n const structureId = crc32(name) >>> 0;\n\n let estimatedSizeBytes = 1;\n\n // Version handling\n encodeFns.push(function (this: BinaryWriter): void {\n this.writeByte(version);\n });\n\n decodeFns.push(function (this: BinaryReader): void {\n const ver = this.readByte();\n assert.ok(\n version === ver,\n `Structure ${structureId} version mismatch: expected ${version}, got ${ver}`,\n );\n });\n\n // Property handling - optimized loop\n const entries = Object.entries(properties);\n const entriesLength = entries.length;\n\n for (let i = 0; i < entriesLength; i++) {\n const [key, prop] = entries[i];\n const isRequired = prop.required === true;\n const isArray = Array.isArray(prop.type);\n const propType = Array.isArray(prop.type) ? prop.type[0] : prop.type;\n\n if (isStructureType(propType)) {\n encodeFns.push(\n createStructureEncoder(key, propType, isRequired, isArray),\n );\n decodeFns.push(createStructureDecoder(key, isRequired, isArray));\n estimatedSizeBytes += propType.estimatedSizeBytes;\n structures.push(propType);\n continue;\n }\n\n // Handle primitive types\n const typeName =\n (propType as Function)?.name ||\n (propType === null ? 'unknown' : propType);\n const handler = TYPE_HANDLERS[typeName as keyof typeof TYPE_HANDLERS];\n\n if (handler) {\n encodeFns.push(\n createBoundEncoder(handler.encode, key, isRequired, isArray),\n );\n decodeFns.push(\n createBoundDecoder(handler.decode, key, isRequired, isArray),\n );\n estimatedSizeBytes += handler.estimatedSizeBytes;\n } else {\n throw new Error(`Unsupported property type: ${typeName || 'unknown'}`);\n }\n }\n\n if (checksum) {\n estimatedSizeBytes += 4;\n\n encodeFns.push(function (this: BinaryWriter): void {\n this.writeChecksum(false);\n });\n\n decodeFns.push(function (this: BinaryReader): void {\n this.readChecksum(false);\n });\n }\n\n const compiled: CompiledStructure = {\n id: structureId,\n encodeFns,\n decodeFns,\n structures,\n estimatedSizeBytes,\n };\n\n return compiled;\n}\n\nfunction isStructureType(type: any): type is Structure.Constructor {\n return type?.prototype && Structure.prototype.isPrototypeOf(type.prototype);\n}\n\nfunction createStructureEncoder(\n key: string,\n StructureCtor: Structure.Constructor,\n isRequired: boolean,\n isArray: boolean,\n): EncodeFn {\n return function (this: BinaryWriter, value: any): void {\n const hasValue = value[key] !== undefined && value[key] !== null;\n\n if (!hasValue) {\n assert.ok(!isRequired, `Required property \"${key}\" is missing or null`);\n\n if (value[key] === null) {\n this.writeInt32(CONSTRUCTOR_OPTIONAL_NULL);\n } else {\n this.writeInt32(CONSTRUCTOR_OPTIONAL);\n }\n } else if (isArray) {\n const arr = value[key];\n\n assert.array(arr, `Expected property \"${key}\" to be array.`);\n\n this.writeLength(arr.length);\n\n for (let idx = 0; idx < arr.length; idx++) {\n this.writeStructure(\n (arr as any[])[idx] instanceof Structure\n ? (arr as any[])[idx]\n : new StructureCtor(arr[idx]),\n );\n }\n } else {\n this.writeStructure(\n value[key] instanceof Structure\n ? value[key]\n : new StructureCtor(value[key]),\n );\n }\n };\n}\n\nfunction createStructureDecoder(\n key: string,\n isRequired: boolean,\n isArray: boolean,\n): DecodeFn {\n return function (this: BinaryReader, result: any): void {\n let shouldRead = true;\n\n if (!isRequired) {\n shouldRead = !readMaybeInt32(this, CONSTRUCTOR_OPTIONAL);\n\n if (shouldRead && readMaybeInt32(this, CONSTRUCTOR_OPTIONAL_NULL)) {\n result[key] = null;\n return;\n }\n }\n\n if (shouldRead) {\n if (isArray) {\n const length = this.readLength();\n const arrResult = Array.from({ length });\n\n for (let idx = 0; idx < length; idx++) {\n arrResult[idx] = this.readStructure(false);\n }\n\n result[key] = arrResult;\n } else {\n result[key] = this.readStructure(false);\n }\n }\n };\n}\n\nfunction readMaybeInt32(reader: BinaryReader, expectedValue: number): boolean {\n let result = false;\n\n if (reader.length >= reader.offset + 4) {\n result = reader.readInt32() === expectedValue;\n\n // Make offset back when null constructor not detected\n if (!result) {\n reader.offset -= 4;\n }\n }\n\n return result;\n}\n\nfunction createBoundEncoder(\n encodeFn: Function,\n key: string,\n isRequired: boolean,\n isArray: boolean,\n): EncodeFn {\n return function (this: BinaryWriter, value: any): void {\n const hasValue = value[key] !== undefined && value[key] !== null;\n\n if (!hasValue) {\n assert.ok(!isRequired, `Required property \"${key}\" is missing or null`);\n\n if (value[key] === null) {\n this.writeInt32(CONSTRUCTOR_OPTIONAL_NULL);\n } else {\n this.writeInt32(CONSTRUCTOR_OPTIONAL);\n }\n } else if (isArray) {\n const arr = value[key];\n\n assert.array(arr, `Expected property \"${key}\" to be array.`);\n\n this.writeLength(arr.length);\n\n for (let idx = 0; idx < arr.length; idx++) {\n encodeFn.call(this, arr, idx);\n }\n } else {\n encodeFn.call(this, value, key);\n }\n };\n}\n\nfunction createBoundDecoder(\n decodeFn: Function,\n key: string,\n isRequired: boolean,\n isArray: boolean,\n): DecodeFn {\n return function (this: BinaryReader, result: any): void {\n let shouldRead = true;\n\n if (!isRequired) {\n shouldRead = !readMaybeInt32(this, CONSTRUCTOR_OPTIONAL);\n\n if (shouldRead && readMaybeInt32(this, CONSTRUCTOR_OPTIONAL_NULL)) {\n result[key] = null;\n return;\n }\n }\n\n if (shouldRead) {\n if (isArray) {\n const length = this.readLength();\n const arrResult = Array.from({ length });\n\n for (let idx = 0; idx < length; idx++) {\n decodeFn.call(this, arrResult, idx);\n }\n\n result[key] = arrResult;\n } else {\n decodeFn.call(this, result, key);\n }\n }\n };\n}\n\n/**\n * Create binary structure definition with type safety and performance optimization\n *\n * @example\n * // Define a user structure\n * const User = defineStructure({\n * name: 'User',\n * version: 1,\n * checksum: true,\n * properties: {\n * id: { type: Number, required: true },\n * name: { type: String, required: true },\n * email: { type: String, required: false },\n * isActive: { type: Boolean, required: true },\n * createdAt: { type: Date, required: true },\n * tags: { type: Array, required: false }\n * }\n * });\n *\n * // Create and serialize a user\n * const user = new User({\n * id: 123,\n * name: 'John Doe',\n * email: 'john@example.com',\n * isActive: true,\n * createdAt: new Date(),\n * tags: ['admin', 'verified']\n * });\n *\n * const buffer = user.toBuffer();\n * const restored = User.fromBuffer(buffer);\n *\n * @example\n * // Define nested structures\n * const Address = defineStructure({\n * name: 'Address',\n * version: 1,\n * properties: {\n * street: { type: String, required: true },\n * city: { type: String, required: true },\n * zipCode: { type: String, required: true }\n * }\n * });\n *\n * const Person = defineStructure({\n * name: 'Person',\n * version: 1,\n * properties: {\n * name: { type: String, required: true },\n * address: { type: Address, required: false }\n * }\n * });\n *\n * @example\n * // Using with complex data types\n * const GameState = defineStructure({\n * name: 'GameState',\n * version: 2,\n * checksum: true,\n * properties: {\n * playerData: { type: Object, required: true }, // Untrusted data\n * screenshot: { type: Uint8Array, required: false }, // Binary data\n * timestamp: { type: Date, required: true },\n * metadata: { type: Object, required: false }\n * }\n * });\n *\n * @group Main\n */\nexport function defineStructure<\n PropsOptions extends Structure.ObjectPropsOptions,\n T extends Data = Structure.ExtractPropTypes<PropsOptions>,\n>({\n name,\n properties,\n version,\n checksum = false,\n}: DefineStructureOptions<PropsOptions>): Structure.Constructor<T> {\n const compiled = compileStructure(name, version, properties, checksum);\n\n return class DefinedStructure extends Structure<T> {\n static readonly estimatedSizeBytes = compiled.estimatedSizeBytes;\n static readonly structures = compiled.structures;\n static readonly extension: TLExtension<T> = {\n token: compiled.id,\n\n encode(this: BinaryWriter, value: T): void {\n const fns = compiled.encodeFns;\n const length = fns.length;\n\n for (let i = 0; i < length; i++) {\n fns[i].call(this, value);\n }\n },\n\n decode(this: BinaryReader): T {\n const result: Record<string, any> = {};\n const fns = compiled.decodeFns;\n const length = fns.length;\n\n for (let i = 0; i < length; i++) {\n fns[i].call(this, result);\n }\n\n return result as T;\n },\n };\n } as Structure.Constructor<T>;\n}\n\nexport class Structure<T extends Data = Data>\n implements Structure.Structure<T>\n{\n public readonly value: T;\n\n constructor(value: T) {\n this.value = value;\n }\n\n toBuffer(options?: BinaryWriterOptions): Uint8Array {\n const ctor = this.constructor as Structure.Constructor;\n const writer = new BinaryWriter(options);\n\n ctor.extension.encode.call(writer, this.value);\n return writer.getBuffer();\n }\n\n static fromBuffer(\n buffer: Uint8Array,\n options: BinaryReaderOptions = {},\n ): Data {\n const reader = new BinaryReader(buffer, {\n ...options,\n structures: options.structures\n ? this.structures.concat(options.structures)\n : this.structures,\n });\n\n return this.extension.decode.call(reader);\n }\n\n static readonly estimatedSizeBytes: number = -1;\n\n static readonly structures: Structure.Constructor[] = [];\n\n static readonly extension: TLExtension = {\n token: CORE_TYPES.Binary,\n encode: noop,\n decode: noop,\n };\n}\n\nexport namespace Structure {\n export interface Options<T extends Data = Data> {\n readonly encode: EncodeHandler<T>;\n readonly decode: DecodeHandler<T>;\n }\n\n export interface Structure<T extends Data = Data> {\n /**\n * The structured data value\n * @type {T}\n * @readonly\n *\n * @example\n * const user = new UserStruct({ id: 1, name: 'Alice' });\n * console.log(user.value.name); // 'Alice'\n */\n readonly value: T;\n\n /**\n * Serializes the structure to a binary buffer\n *\n * @param {BinaryWriterOptions} [options] - Writer configuration options\n * @returns {Uint8Array} Serialized binary data\n *\n * @example\n * const user = new User({ id: 1, name: 'Alice' });\n * const buffer = user.toBuffer();\n * console.log(buffer.length); // Size in bytes\n *\n * @example\n * // With custom writer options\n * const buffer = user.toBuffer({\n * initialSize: 1024,\n * growthFactor: 2\n * });\n */\n toBuffer(options?: BinaryWriterOptions): Uint8Array;\n }\n\n /**\n * Base Structure class for binary serialization with type safety\n *\n * @template T - Data type extending Data interface\n *\n * @example\n * // Direct usage (not recommended, use defineStructure instead)\n * class CustomStruct extends Structure<{id: number, name: string}> {\n * // Custom implementation\n * }\n *\n * @example\n * // Typical usage through defineStructure\n * const MyStruct = defineStructure({\n * name: 'MyStruct',\n * version: 1,\n * properties: { id: { type: Number, required: true } }\n * });\n *\n * const instance = new MyStruct({ id: 42 });\n * console.log(instance.value.id); // 42\n */\n export interface Constructor<T extends Data = any> {\n /**\n * Creates a new Structure instance\n *\n * @param {T} value - The data to structure\n *\n * @example\n * const data = { id: 123, name: 'Test' };\n * const struct = new MyStructure(data);\n */\n new (value: T): Structure<T>;\n\n /**\n * Deserializes a structure from a binary buffer\n *\n * @param {Uint8Array} buffer - Binary data to deserialize\n * @param {BinaryReaderOptions} [options] - Reader configuration options\n * @returns {Data} Deserialized structure data\n *\n * @example\n * const buffer = user.toBuffer();\n * const restored = User.fromBuffer(buffer);\n * console.log(restored.id); // Original user ID\n */\n fromBuffer(buffer: Uint8Array, options?: BinaryReaderOptions): T;\n\n /**\n * Estimated size of bytes\n */\n readonly estimatedSizeBytes: number;\n\n /**\n * Nested structures defining encoding/decoding behavior\n */\n readonly structures: Constructor[];\n\n /**\n * Structure extension defining encoding/decoding behavior\n */\n readonly extension: TLExtension;\n }\n\n type PropConstructor<T = any> =\n | { new (...args: any[]): T & {} }\n | { (): T }\n | PropMethod<T>;\n\n type PropMethod<T, TConstructor = any> = [T] extends [\n ((...args: any) => any) | undefined,\n ] // if is function with args, allowing non-required functions\n ? { new (): TConstructor; (): T; readonly prototype: TConstructor } // Create Function like constructor\n : never;\n\n // Fixed OptionalKeys to properly detect optional properties\n type OptionalKeys<T> = Exclude<keyof T, RequiredKeys<T>>;\n\n type RequiredKeys<T> = {\n [K in keyof T]: T[K] extends { required: true } ? K : never;\n }[keyof T];\n\n type Prop<T> = PropOptions<T> | PropType<T>;\n\n type CoreInt =\n | CORE_TYPES.Int8\n | CORE_TYPES.Int16\n | CORE_TYPES.Int32\n | CORE_TYPES.UInt8\n | CORE_TYPES.UInt16\n | CORE_TYPES.UInt32\n | CORE_TYPES.Float\n | CORE_TYPES.Double;\n\n type InferPropType<T, NullAsAny = true> = [T] extends [null]\n ? NullAsAny extends true\n ? any\n : null\n : [T] extends [{ type: null }]\n ? any // As TS issue https://github.com/Microsoft/TypeScript/issues/14829 // somehow `ObjectConstructor` when inferred from { (): T } becomes `any` // `BooleanConstructor` when inferred from PropConstructor(with PropMethod) becomes `Boolean`\n : [T] extends [{ type: [null] }]\n ? any[]\n : [T] extends [{ type: ObjectConstructor | CORE_TYPES.Map }]\n ? Record<string, any>\n : [T] extends [{ type: CoreInt }]\n ? number\n : [T] extends [{ type: CORE_TYPES.String }]\n ? string\n : [T] extends [{ type: CORE_TYPES.Vector }]\n ? unknown[]\n : [T] extends [{ type: CORE_TYPES.Binary }]\n ? Uint8Array\n : [T] extends [{ type: BooleanConstructor }]\n ? boolean\n : [T] extends [{ type: DateConstructor | CORE_TYPES.Date }]\n ? Date\n : [T] extends [\n {\n type: CORE_TYPES.UInt64 | CORE_TYPES.Int64;\n },\n ]\n ? bigint\n : [T] extends [{ type: Constructor<infer U> }]\n ? U\n : [T] extends [{ type: [infer U] }]\n ? U extends DateConstructor\n ? Date[]\n : U extends Constructor<infer V>\n ? V[]\n : InferPropType<U, false>[]\n : [T] extends [{ type: (infer U)[] }]\n ? U extends DateConstructor\n ? Date | InferPropType<U, false>\n : InferPropType<U, false>\n : [T] extends [Prop<infer V>]\n ? V\n : T;\n\n export type ObjectPropsOptions<P = Data> = {\n readonly [K in keyof P]: PropOptions<P[K]>;\n };\n\n export interface PropOptions<T = any> {\n type: PropType<T> | null | [null];\n required?: boolean;\n }\n\n export type PropType<T> =\n | PropConstructor<T>\n | [PropConstructor<T>]\n | CORE_TYPES\n | [CORE_TYPES];\n\n export type ExtractType<T extends Constructor> =\n T extends Constructor<infer U> ? U : never;\n\n export type ExtractPropTypes<O> = {\n // use `keyof Pick<O, RequiredKeys<O>>` instead of `RequiredKeys<O>` to\n // support IDE features\n [K in keyof Pick<O, RequiredKeys<O>>]: O[K] extends { default: any }\n ? Exclude<InferPropType<O[K]>, undefined>\n : InferPropType<O[K]>;\n } & {\n // use `keyof Pick<O, OptionalKeys<O>>` instead of `OptionalKeys<O>` to\n // support IDE features\n [K in keyof Pick<O, OptionalKeys<O>>]?: InferPropType<O[K]> | null;\n };\n}\n","import { isPlainObject } from '@andrew_l/toolkit';\nimport { Structure } from './Structure';\nimport { CORE_TYPES } from './constants';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nconst fromCharCode = String.fromCharCode;\n\nexport const int32 = new Int32Array(2);\nexport const float32 = new Float32Array(int32.buffer);\nexport const float64 = new Float64Array(int32.buffer);\n\nexport function byteArrayAllocate(length: number): Uint8Array {\n return new Uint8Array(length);\n}\n\nexport function coreType(value: any): CORE_TYPES {\n if (value instanceof Structure) {\n return CORE_TYPES.Structure;\n } else if (value instanceof Uint8Array) {\n return CORE_TYPES.Binary;\n }\n\n switch (typeof value) {\n case 'string': {\n return CORE_TYPES.String;\n }\n\n case 'boolean': {\n return value ? CORE_TYPES.BoolTrue : CORE_TYPES.BoolFalse;\n }\n\n case 'bigint': {\n if (value >= 0n && value <= 0xffffffffffffffffn) {\n return CORE_TYPES.UInt64;\n } else if (\n value >= -0x8000000000000000n &&\n value <= 0x7fffffffffffffffn\n ) {\n return CORE_TYPES.Int64;\n }\n\n return CORE_TYPES.None;\n }\n\n case 'number': {\n if (Math.trunc(value) === value) {\n if (value >= 0 && value <= 0xff) {\n return CORE_TYPES.UInt8;\n } else if (value >= 0 && value <= 0xffff) {\n return CORE_TYPES.UInt16;\n } else if (value >= 0 && value <= 0xffffffff) {\n return CORE_TYPES.UInt32;\n } else if (value >= -0x80 && value <= 0x7f) {\n return CORE_TYPES.Int8;\n } else if (value >= -0x8000 && value <= 0x7fff) {\n return CORE_TYPES.Int16;\n } else if (value >= -0x80000000 && value <= 0x7fffffff) {\n return CORE_TYPES.Int32;\n }\n }\n\n return CORE_TYPES.Double;\n }\n\n case 'object': {\n if (value === null) return CORE_TYPES.Null;\n\n if (value instanceof Date) {\n return CORE_TYPES.Date;\n }\n\n if (Array.isArray(value)) {\n return CORE_TYPES.Vector;\n }\n\n if (isPlainObject(value)) {\n return CORE_TYPES.Map;\n }\n }\n }\n\n return CORE_TYPES.None;\n}\n\nexport function utf8Read(target: Uint8Array, length: number, offset: number) {\n let result;\n if (length < 16) {\n if ((result = utf8ReadShort(target, length, offset))) return result;\n }\n if (length > 64 && decoder)\n return decoder.decode(target.subarray(offset, (offset += length)));\n const end = offset + length;\n const units = [];\n result = '';\n while (offset < end) {\n const byte1 = target[offset++];\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n } else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = target[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n } else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = target[offset++] & 0x3f;\n const byte3 = target[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = target[offset++] & 0x3f;\n const byte3 = target[offset++] & 0x3f;\n const byte4 = target[offset++] & 0x3f;\n let unit =\n ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n } else {\n units.push(byte1);\n }\n\n if (units.length >= 0x1000) {\n result += fromCharCode.apply(String, units);\n units.length = 0;\n }\n }\n\n if (units.length > 0) {\n result += fromCharCode.apply(String, units);\n }\n\n return result;\n}\n\nexport function utf8ReadShort(\n target: Uint8Array,\n length: number,\n offset: number,\n) {\n if (length < 4) {\n if (length < 2) {\n if (length === 0) return '';\n else {\n let a = target[offset++];\n if ((a & 0x80) > 1) {\n offset -= 1;\n return;\n }\n return fromCharCode(a);\n }\n } else {\n let a = target[offset++];\n let b = target[offset++];\n if ((a & 0x80) > 0 || (b & 0x80) > 0) {\n offset -= 2;\n return;\n }\n if (length < 3) return fromCharCode(a, b);\n let c = target[offset++];\n if ((c & 0x80) > 0) {\n offset -= 3;\n return;\n }\n return fromCharCode(a, b, c);\n }\n } else {\n let a = target[offset++];\n let b = target[offset++];\n let c = target[offset++];\n let d = target[offset++];\n if ((a & 0x80) > 0 || (b & 0x80) > 0 || (c & 0x80) > 0 || (d & 0x80) > 0) {\n offset -= 4;\n return;\n }\n if (length < 6) {\n if (length === 4) return fromCharCode(a, b, c, d);\n else {\n let e = target[offset++];\n if ((e & 0x80) > 0) {\n offset -= 5;\n return;\n }\n return fromCharCode(a, b, c, d, e);\n }\n } else if (length < 8) {\n let e = target[offset++];\n let f = target[offset++];\n if ((e & 0x80) > 0 || (f & 0x80) > 0) {\n offset -= 6;\n return;\n }\n if (length < 7) return fromCharCode(a, b, c, d, e, f);\n let g = target[offset++];\n if ((g & 0x80) > 0) {\n offset -= 7;\n return;\n }\n return fromCharCode(a, b, c, d, e, f, g);\n } else {\n let e = target[offset++];\n let f = target[offset++];\n let g = target[offset++];\n let h = target[offset++];\n if (\n (e & 0x80) > 0 ||\n (f & 0x80) > 0 ||\n (g & 0x80) > 0 ||\n (h & 0x80) > 0\n ) {\n offset -= 8;\n return;\n }\n if (length < 10) {\n if (length === 8) return fromCharCode(a, b, c, d, e, f, g, h);\n else {\n let i = target[offset++];\n if ((i & 0x80) > 0) {\n offset -= 9;\n return;\n }\n return fromCharCode(a, b, c, d, e, f, g, h, i);\n }\n } else if (length < 12) {\n let i = target[offset++];\n let j = target[offset++];\n if ((i & 0x80) > 0 || (j & 0x80) > 0) {\n offset -= 10;\n return;\n }\n if (length < 11) return fromCharCode(a, b, c, d, e, f, g, h, i, j);\n let k = target[offset++];\n if ((k & 0x80) > 0) {\n offset -= 11;\n return;\n }\n return fromCharCode(a, b, c, d, e, f, g, h, i, j, k);\n } else {\n let i = target[offset++];\n let j = target[offset++];\n let k = target[offset++];\n let l = target[offset++];\n if (\n (i & 0x80) > 0 ||\n (j & 0x80) > 0 ||\n (k & 0x80) > 0 ||\n (l & 0x80) > 0\n ) {\n offset -= 12;\n return;\n }\n if (length < 14) {\n if (length === 12)\n return fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l);\n else {\n let m = target[offset++];\n if ((m & 0x80) > 0) {\n offset -= 13;\n return;\n }\n return fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m);\n }\n } else {\n let m = target[offset++];\n let n = target[offset++];\n if ((m & 0x80) > 0 || (n & 0x80) > 0) {\n offset -= 14;\n return;\n }\n if (length < 15)\n return fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n);\n let o = target[offset++];\n if ((o & 0x80) > 0) {\n offset -= 15;\n return;\n }\n return fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);\n }\n }\n }\n }\n}\n\nexport const utf8Write = function (target: any, value: string, offset: number) {\n return value.length < 0x40\n ? utf8WriteShort(target, value, offset)\n : encoder.encodeInto(value, target.subarray(offset)).written;\n};\n\nexport const utf8WriteShort = (target: any, value: string, offset: number) => {\n let i,\n c1,\n c2,\n strPosition = offset;\n\n const strLength = value.length;\n\n for (i = 0; i < strLength; i++) {\n c1 = value.charCodeAt(i);\n if (c1 < 0x80) {\n target[strPosition++] = c1;\n } else if (c1 < 0x800) {\n target[strPosition++] = (c1 >> 6) | 0xc0;\n target[strPosition++] = (c1 & 0x3f) | 0x80;\n } else if (\n (c1 & 0xfc00) === 0xd800 &&\n ((c2 = value.charCodeAt(i + 1)) & 0xfc00) === 0xdc00\n ) {\n c1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff);\n i++;\n target[strPosition++] = (c1 >> 18) | 0xf0;\n target[strPosition++] = ((c1 >> 12) & 0x3f) | 0x80;\n target[strPosition++] = ((c1 >> 6) & 0x3f) | 0x80;\n target[strPosition++] = (c1 & 0x3f) | 0x80;\n } else {\n target[strPosition++] = (c1 >> 12) | 0xe0;\n target[strPosition++] = ((c1 >> 6) & 0x3f) | 0x80;\n target[strPosition++] = (c1 & 0x3f) | 0x80;\n }\n }\n\n return strPosition - offset;\n};\n","import type { Data } from '@andrew_l/toolkit';\nimport pako from 'pako';\nimport type { Structure } from './Structure';\nimport { CORE_TYPES } from './constants';\nimport { Dictionary } from './dictionary';\nimport type { TLExtension } from './extension';\nimport { float32, float64, int32, utf8Read } from './helpers';\n\nconst NOOP_DICTIONARY = new Dictionary();\n\nexport interface BinaryReaderOptions {\n dictionary?: string[] | Dictionary;\n extensions?: TLExtension[];\n structures?: Structure.Constructor[];\n}\n\nexport class BinaryReader {\n private target: Uint8Array;\n private _last?: any;\n private _lastObject?: any;\n private dictionary?: Dictionary;\n private dictionaryExtended: Dictionary;\n private extensions: Map<number, TLExtension>;\n private structures: Map<number, Structure.Constructor>;\n private _repeat?: { pool: number; value: any };\n private _checksumOffset: number;\n offset: number;\n length: number;\n\n /**\n * Small utility class to read binary data.\n */\n constructor(\n data: Uint8Array,\n {\n dictionary = NOOP_DICTIONARY,\n extensions,\n structures,\n }: BinaryReaderOptions = {},\n ) {\n this.target = data;\n this.offset = 0;\n this._checksumOffset = 0;\n this.length = data.length;\n this.extensions = new Map();\n this.structures = new Map();\n\n if (extensions) {\n for (const ext of extensions) {\n this.extensions.set(ext.token, ext);\n }\n }\n\n if (structures) {\n for (const struct of structures) {\n this.structures.set(struct.extension.token, struct);\n }\n }\n\n if (Array.isArray(dictionary)) {\n this.dictionary = new Dictionary(dictionary);\n } else {\n this.dictionary = dictionary;\n }\n\n this.dictionaryExtended = new Dictionary(undefined, this.dictionary.size);\n }\n\n readByte(): number {\n this.assertRead(1);\n this._last = this.target[this.offset++];\n\n return this._last as number;\n }\n\n readInt64(signed = true): bigint {\n const low32 = this.readInt32(signed);\n const high32 = this.readInt32(signed);\n\n this._last = (BigInt(high32) << 32n) | BigInt(low32);\n\n return this._last as bigint;\n }\n\n readInt32(signed = true): number {\n this.assertRead(4);\n\n this._last =\n this.target[this.offset++] |\n (this.target[this.offset++] << 8) |\n (this.target[this.offset++] << 16) |\n (this.target[this.offset++] << 24);\n\n if (!signed) {\n this._last = this._last >>> 0;\n }\n\n return this._last as number;\n }\n\n readInt16(signed = true): number {\n this.assertRead(2);\n\n this._last = this.target[this.offset++] | (this.target[this.offset++] << 8);\n\n if (signed) {\n this._last = (this._last << 16) >> 16;\n }\n\n return this._last as number;\n }\n\n readInt8(signed = true): number {\n this.assertRead(1);\n\n this._last = this.target[this.offset++];\n\n if (signed) {\n this._last = (this._last << 24) >> 24;\n }\n\n return this._last as number;\n }\n\n /**\n * Reads a real floating point (4 bytes) value.\n * @returns {number}\n */\n readFloat(): number {\n this.assertRead(4);\n\n int32[0] = this.readInt32();\n this._last = float32[0];\n\n return this._last as number;\n }\n\n /**\n * Reads a real floating point (8 bytes) value.\n */\n readDouble(): number {\n this.assertRead(8);\n\n int32[0] = this.readInt32();\n int32[1] = this.readInt32();\n this._last = float64[0];\n\n return this._last as number;\n }\n\n /**\n * Throws error if provided length cannot be read from buffer\n * @param length {number}\n */\n assertRead(length: number): void {\n if (this.length < this.offset + +length) {\n const left = this.target.length - this.offset;\n const result = this.target.subarray(this.offset, this.offset + left);\n\n const err = new Error(\n `No more data left to read (need ${length}, got ${left}: ${result}); last read ${this._last}`,\n );\n\n (err as any).incomplete = true;\n\n Error.captureStackTrace(err, this.assertRead);\n\n throw err;\n }\n }\n\n assertConstructor(constructorId: CORE_TYPES): void {\n const byte = this.readByte();\n\n if (byte !== constructorId) {\n throw new Error(\n `Invalid constructor code, expected = ${CORE_TYPES[constructorId]}, got = ${\n CORE_TYPES[byte] || byte\n }, offset = ${this.offset - 1}`,\n );\n }\n }\n\n /**\n * Gets the byte array representing the current buffer as a whole.\n */\n getBuffer(): Uint8Array {\n return this.target;\n }\n\n readNull(): null {\n const value = this.readByte();\n\n if (value === CORE_TYPES.Null) {\n return null;\n }\n\n throw new Error(`Invalid boolean code ${value.toString(16)}`);\n }\n\n readLength(): number {\n const firstByte = this.readByte();\n\n if (firstByte === 254) {\n return this.readByte() | (this.readByte() << 8) | (this.readByte() << 16);\n }\n\n return firstByte;\n }\n\n readAll(): any[] {\n const result: any[] = [];\n\n while (this.length > this.offset) {\n result.push(this.readObject());\n }\n\n return result;\n }\n\n readBytes(): Uint8Array {\n const length = this.readLength();\n\n this.assertRead(length);\n\n const bytes = this.target.subarray(this.offset, this.offset + length);\n\n this.offset += bytes.length;\n\n this._last = bytes;\n\n return bytes;\n }\n\n /**\n * Reads encoded string.\n */\n readString(): string {\n const length = this.readLength();\n\n this.assertRead(length);\n\n const result = utf8Read(this.target, length, this.offset);\n\n this.offset += length;\n\n this._last = result;\n\n return result;\n }\n\n /**\n * Reads a boolean value.\n */\n readBool(): boolean {\n const value = this.readByte();\n\n if (value === CORE_TYPES.BoolTrue) {\n return true;\n } else if (value === CORE_TYPES.BoolFalse) {\n return false;\n } else {\n throw new Error(`Invalid boolean code ${value.toString(16)}`);\n }\n }\n\n /**\n * Reads and converts Unix time\n * into a Javascript {Date} object.\n */\n readDate(): Date {\n const value = this.readDouble();\n\n return new Date(value);\n }\n\n readStructure<T extends Data = Data>(checkConstructor: boolean = true): T {\n if (checkConstructor) {\n this.assertConstructor(CORE_TYPES.Structure);\n }\n\n const structureId = this.readInt32(false);\n const struct = this.structures.get(structureId);\n\n if (!struct) {\n throw new Error(\n `Unknown structure id = ${structureId}, offset = ${this.offset - 1}`,\n );\n }\n\n return struct.extension.decode.call(this);\n }\n\n /**\n * Reads a object.\n */\n readObject(): any {\n if (this._repeat) {\n if (this._repeat.pool > 0) {\n --this._repeat.pool;\n return this._repeat.value;\n } else {\n this._repeat = undefined;\n }\n }\n\n const constructorId = this.readByte();\n const ext = this.extensions.get(constructorId);\n\n let value: any;\n\n if (ext) {\n value = ext.decode.call(this);\n } else {\n value = this._lastObject = this.readCore(constructorId);\n }\n\n return value;\n }\n\n readObjectGzip(): any {\n const bytes = this.readGzip();\n const reader = new BinaryReader(bytes);\n\n reader.extensions = this.extensions;\n reader.dictionary = this.dictionary;\n reader.dictionaryExtended = this.dictionaryExtended;\n\n return reader.readObject();\n }\n\n readGzip(): any {\n return pako.inflateRaw(this.readBytes());\n }\n\n private readCore(constructorId: CORE_TYPES): any {\n switch (constructorId) {\n case CORE_TYPES.None:\n return this.readObject();\n case CORE_TYPES.GZIP:\n return this.readObjectGzip();\n case CORE_TYPES.BoolTrue:\n return true;\n case CORE_TYPES.BoolFalse:\n return false;\n case CORE_TYPES.Vector:\n return this.readVector(false);\n case CORE_TYPES.VectorDynamic:\n return this.readVectorDynamic(false);\n case CORE_TYPES.Null:\n return null;\n case CORE_TYPES.Binary:\n return this.readBytes();\n case CORE_TYPES.String:\n return this.readString();\n case CORE_TYPES.Date:\n return this.readDate();\n case CORE_TYPES.Int64:\n return this.readInt64();\n case CORE_TYPES.Int32:\n return this.readInt32();\n case CORE_TYPES.Int16:\n return this.readInt16();\n case CORE_TYPES.Int8:\n return this.readInt8();\n case CORE_TYPES.UInt64:\n return this.readInt64(false);\n case CORE_TYPES.UInt32:\n return this.readInt32(false);\n case CORE_TYPES.UInt16:\n return this.readInt16(false);\n case CORE_TYPES.UInt8:\n return this.readInt8(false);\n case CORE_TYPES.Float:\n return this.readFloat();\n case CORE_TYPES.Double:\n return this.readDouble();\n case CORE_TYPES.Map:\n return this.readMap(false);\n case CORE_TYPES.Checksum:\n return void this.readChecksum(false);\n case CORE_TYPES.Structure:\n return this.readStructure(false);\n case CORE_TYPES.DictIndex: {\n const idx = this.readLength();\n return this.getDictionaryValue(idx)!;\n }\n case CORE_TYPES.DictValue: {\n const value = this.readString();\n this.dictionaryExtended.maybeInsert(value);\n return value;\n }\n case CORE_TYPES.Repeat: {\n const size = this.readLength();\n this._repeat = { pool: size - 1, value: this._lastObject };\n return this._lastObject;\n }\n }\n\n throw new Error(\n `Invalid constructor = ${CORE_TYPES[constructorId] || constructorId}, offset = ${\n this.offset - 1\n }`,\n );\n }\n\n getDictionaryValue(index: number): string | null {\n let value: string | null = null;\n\n if (this.dictionary) {\n value = this.dictionary.getValue(index);\n }\n\n if (value === null) {\n value = this.dictionaryExtended.getValue(index);\n }\n\n return value;\n }\n\n readDictionary(): null | string {\n const constructorId = this.readByte();\n\n let key: string | null = null;\n\n switch (constructorId) {\n case CORE_TYPES.DictIndex: {\n const idx = this.readLength();\n key = this.getDictionaryValue(idx)!;\n break;\n }\n case CORE_TYPES.DictValue: {\n key = this.readString();\n this.dictionaryExtended.maybeInsert(key);\n break;\n }\n case CORE_TYPES.None: {\n key = null;\n break;\n }\n default: {\n this.seek(-1);\n }\n }\n\n return key;\n }\n\n readMap(checkConstructor = true): Record<string, any> {\n if (checkConstructor) {\n this.assertConstructor(CORE_TYPES.Map);\n }\n\n const temp: Record<string, any> = {};\n\n let key = this.readDictionary();\n\n while (key !== null) {\n temp[key] = this.readObject();\n key = this.readDictionary();\n }\n\n return temp;\n }\n\n decode<T = any>(value: Uint8Array): T {\n this.target = value;\n this._last = undefined;\n this._lastObject = undefined;\n this._repeat = undefined;\n this.offset = 0;\n this._checksumOffset = 0;\n this.length = value.length;\n\n return this.readObject();\n }\n\n /**\n * Reads a vector (a list) of objects.\n */\n readVector<T = any>(checkConstructor = true): T[] {\n if (checkConstructor) {\n this.assertConstructor(CORE_TYPES.Vector);\n }\n\n const count = this.readLength();\n const temp = [];\n\n for (let i = 0; i < count; i++) {\n temp.push(this.readObject());\n }\n\n return temp;\n }\n\n /**\n * Reads a vector (a list) of objects.\n */\n readVectorDynamic<T>(checkConstructor = true): T[] {\n if (checkConstructor) {\n this.assertConstructor(CORE_TYPES.VectorDynamic);\n }\n\n const temp = [];\n\n let complete = false;\n\n while (this.length > this.offset) {\n const constructorId = this.readByte();\n\n if (constructorId === CORE_TYPES.None) {\n complete = true;\n break;\n }\n\n const ext = this.extensions.get(constructorId);\n\n let value: any;\n\n if (ext) {\n value = ext.decode.call(this);\n } else {\n value = this.readCore(constructorId);\n }\n\n temp.push(value);\n }\n\n if (!complete) {\n const err = new Error(`DynamicVector incomplete.`);\n (err as any).incomplete = true;\n Error.captureStackTrace(err, this.readDictionary);\n\n throw err;\n }\n\n this._last = temp;\n\n return temp;\n }\n\n readChecksum(checkConstructor: boolean = true): void {\n const offset = this.offset;\n\n if (checkConstructor) {\n this.assertConstructor(CORE_TYPES.Checksum);\n }\n\n const bytes = this.target.subarray(this._checksumOffset, offset);\n const checksum = this.readInt32();\n let sum = 0;\n\n for (const val of bytes) {\n sum += val;\n }\n\n if (checksum - sum !== 0) {\n throw new Error(\n `Invalid checksum = ${checksum - sum}, offset = ${offset}`,\n );\n }\n\n this._checksumOffset = this.offset;\n }\n\n /**\n * Tells the current position on the stream.\n */\n tellPosition(): number {\n return this.offset;\n }\n\n /**\n * Sets the current position on the stream.\n */\n setPosition(position: number): void {\n this.offset = position;\n }\n\n /**\n * Seeks the stream position given an offset from the current position.\n * The offset may be negative.\n */\n seek(offset: number): void {\n this.offset += offset;\n }\n\n /**\n * Sets the current buffer and reset initial state.\n */\n reset(data?: Uint8Array): void {\n this.offset = 0;\n this._checksumOffset = 0;\n this._lastObject = undefined;\n this._last = undefined;\n this._repeat = undefined;\n this.dictionaryExtended.clear();\n\n if (data) {\n this.length = data.length;\n this.target = data;\n }\n }\n}\n"],"names":["CORE_TYPES","NOOP_DICTIONARY","pako","crc32","assert","noop","isPlainObject"],"mappings":"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"}
@@ -7,6 +7,7 @@ declare class Dictionary {
7
7
  private _words;
8
8
  private _offset;
9
9
  constructor(values?: string[], offset?: number);
10
+ clear(): void;
10
11
  get size(): number;
11
12
  /**
12
13
  * Returns inserted index or nothing
@@ -59,6 +60,7 @@ declare class BinaryWriter {
59
60
  writeByte(value: number): this;
60
61
  writeBool(value: boolean): this;
61
62
  writeNull(): this;
63
+ writeInt64(value: number | bigint, signed?: boolean): this;
62
64
  writeInt32(value: number, signed?: boolean): this;
63
65
  writeInt16(value: number, signed?: boolean): this;
64
66
  writeInt8(value: number, signed?: boolean): this;
@@ -93,9 +95,11 @@ declare enum CORE_TYPES {
93
95
  Date = 5,
94
96
  Vector = 6,
95
97
  VectorDynamic = 7,
98
+ Int64 = 22,
96
99
  Int32 = 8,
97
100
  Int16 = 9,
98
101
  Int8 = 10,
102
+ UInt64 = 23,
99
103
  UInt32 = 11,
100
104
  UInt16 = 12,
101
105
  UInt8 = 13,
@@ -343,7 +347,11 @@ declare namespace Structure {
343
347
  type: BooleanConstructor;
344
348
  }] ? boolean : [T] extends [{
345
349
  type: DateConstructor | CORE_TYPES.Date;
346
- }] ? Date : [T] extends [{
350
+ }] ? Date : [T] extends [
351
+ {
352
+ type: CORE_TYPES.UInt64 | CORE_TYPES.Int64;
353
+ }
354
+ ] ? bigint : [T] extends [{
347
355
  type: Constructor<infer U>;
348
356
  }] ? U : [T] extends [{
349
357
  type: [infer U];
@@ -391,6 +399,7 @@ declare class BinaryReader {
391
399
  */
392
400
  constructor(data: Uint8Array, { dictionary, extensions, structures, }?: BinaryReaderOptions);
393
401
  readByte(): number;
402
+ readInt64(signed?: boolean): bigint;
394
403
  readInt32(signed?: boolean): number;
395
404
  readInt16(signed?: boolean): number;
396
405
  readInt8(signed?: boolean): number;
@@ -401,7 +410,6 @@ declare class BinaryReader {
401
410
  readFloat(): number;
402
411
  /**
403
412
  * Reads a real floating point (8 bytes) value.
404
- * @returns {BigInteger}
405
413
  */
406
414
  readDouble(): number;
407
415
  /**
@@ -465,6 +473,10 @@ declare class BinaryReader {
465
473
  * The offset may be negative.
466
474
  */
467
475
  seek(offset: number): void;
476
+ /**
477
+ * Sets the current buffer and reset initial state.
478
+ */
479
+ reset(data?: Uint8Array): void;
468
480
  }
469
481
 
470
482
  export { type BinaryWriterOptions as B, CORE_TYPES as C, type DecodeHandler as D, type EncodeHandler as E, MAX_BUFFER_SIZE as M, Structure as S, type TLExtension as T, type BinaryReaderOptions as a, BinaryReader as b, BinaryWriter as c, createDictionary as d, createExtension as e, type DefineStructureOptions as f, defineStructure as g };