{"version":3,"file":"tl-pack.DfL54MjP.cjs","sources":["../../src/constants.ts","../../src/dictionary.ts","../../src/helpers.ts","../../src/BinaryReader.ts","../../src/BinaryWriter.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  Int32 = 8,\n  Int16 = 9,\n  Int8 = 10,\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}\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 = 0;\n  private _wordToIndex: Map<string, number>;\n  private _words: string[];\n  private _offset: number;\n\n  constructor(values?: string[], offset = 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  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 { isPlainObject } from '@andrew_l/toolkit';\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  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 '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 pako from 'pako';\nimport { CORE_TYPES } from './constants';\nimport { Dictionary } from './dictionary';\nimport type { TLExtension } from './extension';\nimport { float32, float64, int32, utf8Read } from './helpers';\n\nexport interface BinaryReaderOptions {\n  dictionary?: string[] | Dictionary;\n  extensions?: TLExtension[];\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 _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(data: Uint8Array, options?: BinaryReaderOptions) {\n    this.target = data;\n    this.offset = 0;\n    this._checksumOffset = 0;\n    this.length = data.length;\n    this.extensions = new Map();\n\n    if (options && options.extensions) {\n      options.extensions.forEach(ext => {\n        this.extensions.set(ext.token, ext);\n      });\n    }\n\n    if (!options) {\n      this.dictionary = new Dictionary();\n    } else if (options.dictionary instanceof Dictionary) {\n      this.dictionary = options.dictionary;\n    } else if (Array.isArray(options.dictionary)) {\n      this.dictionary = new Dictionary(options.dictionary);\n    } else {\n      this.dictionary = new Dictionary();\n    }\n\n    this.dictionaryExtended = new Dictionary(undefined, this.dictionary.size);\n  }\n\n  readByte() {\n    this.assertRead(1);\n    this._last = this.target[this.offset++];\n\n    return this._last as number;\n  }\n\n  readInt32(signed = true) {\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) {\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) {\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() {\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   * @returns {BigInteger}\n   */\n  readDouble() {\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   * Read the given amount of bytes, or -1 to read all remaining.\n   * @param length {number}\n   */\n  assertRead(length: number) {\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) {\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() {\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() {\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() {\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  /**\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.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.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.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.slice(this._checksumOffset, offset);\n    const checksum = this.readLength();\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","import pako from 'pako';\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}\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\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 _last: any = noop;\n  private _checksumOffset: number;\n  private _repeat?: { offset: number; count: number };\n  offset: number;\n\n  constructor(options?: BinaryWriterOptions) {\n    this.offset = 0;\n    this._checksumOffset = 0;\n    this.extensions = new Map();\n    this.withGzip = !!options && !!options.gzip;\n\n    this.target = byteArrayAllocate(8192);\n\n    if (options && options.extensions) {\n      options.extensions.forEach(ext => {\n        this.extensions.set(ext.token, ext);\n      });\n    }\n\n    if (!options) {\n      this.dictionary = new Dictionary();\n    } else if (options.dictionary instanceof Dictionary) {\n      this.dictionary = options.dictionary;\n    } else if (Array.isArray(options.dictionary)) {\n      this.dictionary = new Dictionary(options.dictionary);\n    } else {\n      this.dictionary = new Dictionary();\n    }\n\n    this.dictionaryExtended = new Dictionary(undefined, this.dictionary.size);\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  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.slice(this._checksumOffset, 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.writeLength(sum);\n    this._checksumOffset = 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    if (this.dictionary) {\n      idx = this.dictionary.getIndex(value);\n    }\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  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._checksumOffset = 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.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.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.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.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"],"names":["CORE_TYPES","isPlainObject","pako"],"mappings":"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"}