{"version":3,"file":"tl-pack.B8uBXdlJ.mjs","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, textDecoder, textEncoder } from '@andrew_l/toolkit';\nimport { Structure } from './Structure';\nimport { CORE_TYPES } from './constants';\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)\n    return textDecoder.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    : textEncoder.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","noop"],"mappings":"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"}