@andrew_l/tl-pack 0.1.82 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"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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"}
@@ -0,0 +1,72 @@
1
+ 'use strict';
2
+
3
+ const node_stream = require('node:stream');
4
+ const BinaryWriter = require('./shared/tl-pack.DfL54MjP.cjs');
5
+ require('pako');
6
+ require('@andrew_l/toolkit');
7
+
8
+ class TLEncode extends node_stream.Transform {
9
+ writer;
10
+ count;
11
+ constructor(options) {
12
+ const opts = options || {};
13
+ opts.streamOptions = {
14
+ writableObjectMode: true,
15
+ ...opts.streamOptions || {}
16
+ };
17
+ super(opts.streamOptions);
18
+ const writer = new BinaryWriter.BinaryWriter(options);
19
+ const customFlush = opts.streamOptions.flush;
20
+ const VECTOR_TYPES = new Uint8Array(2);
21
+ VECTOR_TYPES[0] = BinaryWriter.CORE_TYPES.VectorDynamic;
22
+ VECTOR_TYPES[1] = BinaryWriter.CORE_TYPES.None;
23
+ this.push(VECTOR_TYPES.subarray(0, 1));
24
+ this._flush = (callback) => {
25
+ this.push(VECTOR_TYPES.subarray(1, 2));
26
+ if (customFlush) {
27
+ customFlush.call(this, callback);
28
+ } else {
29
+ callback();
30
+ }
31
+ };
32
+ this.writer = writer;
33
+ this.count = 0;
34
+ }
35
+ _transform(chunk, encoding, callback) {
36
+ const buff = this.writer.encode(chunk);
37
+ this.push(buff);
38
+ this.count++;
39
+ callback();
40
+ }
41
+ }
42
+ class TLDecode extends node_stream.Transform {
43
+ reader;
44
+ incompleteBuffer;
45
+ constructor(options) {
46
+ if (!options) options = {};
47
+ options.objectMode = true;
48
+ super(options);
49
+ this.incompleteBuffer = null;
50
+ this.reader = new BinaryWriter.BinaryReader(new Uint8Array(8192));
51
+ }
52
+ _transform(chunk, encoding, callback) {
53
+ if (this.incompleteBuffer) {
54
+ chunk = Buffer.concat([this.incompleteBuffer, chunk]);
55
+ this.incompleteBuffer = null;
56
+ }
57
+ try {
58
+ const value = this.reader.decode(chunk);
59
+ return callback(null, value);
60
+ } catch (err) {
61
+ if (err?.incomplete) {
62
+ this.incompleteBuffer = chunk;
63
+ return callback();
64
+ }
65
+ return callback(err);
66
+ }
67
+ }
68
+ }
69
+
70
+ exports.TLDecode = TLDecode;
71
+ exports.TLEncode = TLEncode;
72
+ //# sourceMappingURL=stream.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.cjs","sources":["../src/stream.ts"],"sourcesContent":["import {\n Transform,\n type TransformCallback,\n type TransformOptions,\n} from 'node:stream';\nimport { BinaryReader } from './BinaryReader';\nimport { BinaryWriter, type BinaryWriterOptions } from './BinaryWriter';\nimport { CORE_TYPES } from './constants';\n\nexport interface TLEncodeOptions extends BinaryWriterOptions {\n streamOptions?: TransformOptions;\n}\n\nexport class TLEncode extends Transform {\n writer: BinaryWriter;\n count: number;\n\n constructor(options?: TLEncodeOptions) {\n const opts = options || {};\n opts.streamOptions = {\n writableObjectMode: true,\n ...(opts.streamOptions || {}),\n };\n\n super(opts.streamOptions);\n\n const writer = new BinaryWriter(options);\n\n const customFlush = opts.streamOptions.flush;\n\n const VECTOR_TYPES = new Uint8Array(2);\n\n VECTOR_TYPES[0] = CORE_TYPES.VectorDynamic;\n VECTOR_TYPES[1] = CORE_TYPES.None;\n\n // push a byte about dynamic vector starting\n this.push(VECTOR_TYPES.subarray(0, 1));\n\n this._flush = callback => {\n // push a byte about dynamic vector ending\n this.push(VECTOR_TYPES.subarray(1, 2));\n\n if (customFlush) {\n customFlush.call(this, callback);\n } else {\n callback();\n }\n };\n\n this.writer = writer;\n this.count = 0;\n }\n\n _transform(\n chunk: any,\n encoding: BufferEncoding,\n callback: TransformCallback,\n ) {\n const buff = this.writer.encode(chunk);\n this.push(buff);\n this.count++;\n callback();\n }\n}\n\nexport class TLDecode extends Transform {\n reader: BinaryReader;\n private incompleteBuffer: Buffer | null;\n\n constructor(options?: TransformOptions) {\n if (!options) options = {};\n options.objectMode = true;\n super(options);\n\n this.incompleteBuffer = null;\n this.reader = new BinaryReader(new Uint8Array(8192));\n }\n\n _transform(\n chunk: any,\n encoding: BufferEncoding,\n callback: TransformCallback,\n ) {\n if (this.incompleteBuffer) {\n chunk = Buffer.concat([this.incompleteBuffer, chunk]);\n this.incompleteBuffer = null;\n }\n\n try {\n const value = this.reader.decode(chunk);\n return callback(null, value);\n } catch (err) {\n if ((err as any)?.incomplete) {\n this.incompleteBuffer = chunk;\n return callback();\n }\n\n return callback(err as any);\n }\n }\n}\n"],"names":["Transform","BinaryWriter","CORE_TYPES","BinaryReader"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { TransformOptions, Transform, TransformCallback } from 'node:stream';
2
+ import { B as BinaryWriterOptions, c as BinaryWriter, b as BinaryReader } from './shared/tl-pack.C2PEqnNg.cjs';
3
+
4
+ interface TLEncodeOptions extends BinaryWriterOptions {
5
+ streamOptions?: TransformOptions;
6
+ }
7
+ declare class TLEncode extends Transform {
8
+ writer: BinaryWriter;
9
+ count: number;
10
+ constructor(options?: TLEncodeOptions);
11
+ _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void;
12
+ }
13
+ declare class TLDecode extends Transform {
14
+ reader: BinaryReader;
15
+ private incompleteBuffer;
16
+ constructor(options?: TransformOptions);
17
+ _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void;
18
+ }
19
+
20
+ export { TLDecode, TLEncode, type TLEncodeOptions };
@@ -0,0 +1,20 @@
1
+ import { TransformOptions, Transform, TransformCallback } from 'node:stream';
2
+ import { B as BinaryWriterOptions, c as BinaryWriter, b as BinaryReader } from './shared/tl-pack.C2PEqnNg.mjs';
3
+
4
+ interface TLEncodeOptions extends BinaryWriterOptions {
5
+ streamOptions?: TransformOptions;
6
+ }
7
+ declare class TLEncode extends Transform {
8
+ writer: BinaryWriter;
9
+ count: number;
10
+ constructor(options?: TLEncodeOptions);
11
+ _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void;
12
+ }
13
+ declare class TLDecode extends Transform {
14
+ reader: BinaryReader;
15
+ private incompleteBuffer;
16
+ constructor(options?: TransformOptions);
17
+ _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void;
18
+ }
19
+
20
+ export { TLDecode, TLEncode, type TLEncodeOptions };
package/dist/stream.d.ts CHANGED
@@ -1,20 +1,20 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
- import { Transform, type TransformCallback, type TransformOptions } from 'stream';
4
- import { BinaryWriter, BinaryWriterOptions } from './BinaryWriter.js';
5
- import { BinaryReader } from './BinaryReader.js';
6
- export interface TLEncodeOptions extends BinaryWriterOptions {
1
+ import { TransformOptions, Transform, TransformCallback } from 'node:stream';
2
+ import { B as BinaryWriterOptions, c as BinaryWriter, b as BinaryReader } from './shared/tl-pack.C2PEqnNg.js';
3
+
4
+ interface TLEncodeOptions extends BinaryWriterOptions {
7
5
  streamOptions?: TransformOptions;
8
6
  }
9
- export declare class TLEncode extends Transform {
7
+ declare class TLEncode extends Transform {
10
8
  writer: BinaryWriter;
11
9
  count: number;
12
10
  constructor(options?: TLEncodeOptions);
13
11
  _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void;
14
12
  }
15
- export declare class TLDecode extends Transform {
13
+ declare class TLDecode extends Transform {
16
14
  reader: BinaryReader;
17
15
  private incompleteBuffer;
18
16
  constructor(options?: TransformOptions);
19
17
  _transform(chunk: any, encoding: BufferEncoding, callback: TransformCallback): void;
20
18
  }
19
+
20
+ export { TLDecode, TLEncode, type TLEncodeOptions };
@@ -0,0 +1,69 @@
1
+ import { Transform } from 'node:stream';
2
+ import { B as BinaryWriter, C as CORE_TYPES, a as BinaryReader } from './shared/tl-pack.CkwM-fIb.mjs';
3
+ import 'pako';
4
+ import '@andrew_l/toolkit';
5
+
6
+ class TLEncode extends Transform {
7
+ writer;
8
+ count;
9
+ constructor(options) {
10
+ const opts = options || {};
11
+ opts.streamOptions = {
12
+ writableObjectMode: true,
13
+ ...opts.streamOptions || {}
14
+ };
15
+ super(opts.streamOptions);
16
+ const writer = new BinaryWriter(options);
17
+ const customFlush = opts.streamOptions.flush;
18
+ const VECTOR_TYPES = new Uint8Array(2);
19
+ VECTOR_TYPES[0] = CORE_TYPES.VectorDynamic;
20
+ VECTOR_TYPES[1] = CORE_TYPES.None;
21
+ this.push(VECTOR_TYPES.subarray(0, 1));
22
+ this._flush = (callback) => {
23
+ this.push(VECTOR_TYPES.subarray(1, 2));
24
+ if (customFlush) {
25
+ customFlush.call(this, callback);
26
+ } else {
27
+ callback();
28
+ }
29
+ };
30
+ this.writer = writer;
31
+ this.count = 0;
32
+ }
33
+ _transform(chunk, encoding, callback) {
34
+ const buff = this.writer.encode(chunk);
35
+ this.push(buff);
36
+ this.count++;
37
+ callback();
38
+ }
39
+ }
40
+ class TLDecode extends Transform {
41
+ reader;
42
+ incompleteBuffer;
43
+ constructor(options) {
44
+ if (!options) options = {};
45
+ options.objectMode = true;
46
+ super(options);
47
+ this.incompleteBuffer = null;
48
+ this.reader = new BinaryReader(new Uint8Array(8192));
49
+ }
50
+ _transform(chunk, encoding, callback) {
51
+ if (this.incompleteBuffer) {
52
+ chunk = Buffer.concat([this.incompleteBuffer, chunk]);
53
+ this.incompleteBuffer = null;
54
+ }
55
+ try {
56
+ const value = this.reader.decode(chunk);
57
+ return callback(null, value);
58
+ } catch (err) {
59
+ if (err?.incomplete) {
60
+ this.incompleteBuffer = chunk;
61
+ return callback();
62
+ }
63
+ return callback(err);
64
+ }
65
+ }
66
+ }
67
+
68
+ export { TLDecode, TLEncode };
69
+ //# sourceMappingURL=stream.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.mjs","sources":["../src/stream.ts"],"sourcesContent":["import {\n Transform,\n type TransformCallback,\n type TransformOptions,\n} from 'node:stream';\nimport { BinaryReader } from './BinaryReader';\nimport { BinaryWriter, type BinaryWriterOptions } from './BinaryWriter';\nimport { CORE_TYPES } from './constants';\n\nexport interface TLEncodeOptions extends BinaryWriterOptions {\n streamOptions?: TransformOptions;\n}\n\nexport class TLEncode extends Transform {\n writer: BinaryWriter;\n count: number;\n\n constructor(options?: TLEncodeOptions) {\n const opts = options || {};\n opts.streamOptions = {\n writableObjectMode: true,\n ...(opts.streamOptions || {}),\n };\n\n super(opts.streamOptions);\n\n const writer = new BinaryWriter(options);\n\n const customFlush = opts.streamOptions.flush;\n\n const VECTOR_TYPES = new Uint8Array(2);\n\n VECTOR_TYPES[0] = CORE_TYPES.VectorDynamic;\n VECTOR_TYPES[1] = CORE_TYPES.None;\n\n // push a byte about dynamic vector starting\n this.push(VECTOR_TYPES.subarray(0, 1));\n\n this._flush = callback => {\n // push a byte about dynamic vector ending\n this.push(VECTOR_TYPES.subarray(1, 2));\n\n if (customFlush) {\n customFlush.call(this, callback);\n } else {\n callback();\n }\n };\n\n this.writer = writer;\n this.count = 0;\n }\n\n _transform(\n chunk: any,\n encoding: BufferEncoding,\n callback: TransformCallback,\n ) {\n const buff = this.writer.encode(chunk);\n this.push(buff);\n this.count++;\n callback();\n }\n}\n\nexport class TLDecode extends Transform {\n reader: BinaryReader;\n private incompleteBuffer: Buffer | null;\n\n constructor(options?: TransformOptions) {\n if (!options) options = {};\n options.objectMode = true;\n super(options);\n\n this.incompleteBuffer = null;\n this.reader = new BinaryReader(new Uint8Array(8192));\n }\n\n _transform(\n chunk: any,\n encoding: BufferEncoding,\n callback: TransformCallback,\n ) {\n if (this.incompleteBuffer) {\n chunk = Buffer.concat([this.incompleteBuffer, chunk]);\n this.incompleteBuffer = null;\n }\n\n try {\n const value = this.reader.decode(chunk);\n return callback(null, value);\n } catch (err) {\n if ((err as any)?.incomplete) {\n this.incompleteBuffer = chunk;\n return callback();\n }\n\n return callback(err as any);\n }\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,54 +1,51 @@
1
1
  {
2
- "name": "@andrew_l/tl-pack",
3
- "version": "0.1.82",
4
- "description": "Binary serialization library",
5
- "type": "module",
6
- "scripts": {
7
- "dev": "nodemon src/playground.ts",
8
- "build": "rm -rf dist && npx tsc"
9
- },
10
- "keywords": [
11
- "tl",
12
- "pack",
13
- "binary",
14
- "buffer",
15
- "serialization",
16
- "deserialization"
17
- ],
18
- "author": "Andrew L.",
19
- "license": "ISC",
20
- "files": [
21
- "dist/**"
22
- ],
23
- "repository": {
24
- "type": "git",
25
- "url": "https://github.com/men232/tl-pack.git"
26
- },
27
- "bugs": {
28
- "url": "https://github.com/men232/tl-pack/issues"
29
- },
30
- "main": "./dist/index.js",
31
- "types": "./dist/index.d.ts",
32
- "exports": {
33
- ".": {
34
- "import": "./dist/index.js",
35
- "types": "./dist/index.d.ts"
36
- },
37
- "./stream": {
38
- "import": "./dist/stream.js",
39
- "types": "./dist/stream.d.ts"
40
- }
41
- },
42
- "devDependencies": {
43
- "@types/node": "^20.3.2",
44
- "@types/pako": "^2.0.0",
45
- "eslint-config-prettier": "^8.8.0",
46
- "nodemon": "^2.0.22",
47
- "prettier": "^2.8.8",
48
- "ts-node": "^10.9.1",
49
- "typescript": "^5.1.5"
50
- },
51
- "dependencies": {
52
- "pako": "^2.1.0"
53
- }
54
- }
2
+ "name": "@andrew_l/tl-pack",
3
+ "version": "0.2.0",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "keywords": [
7
+ "tl",
8
+ "pack",
9
+ "binary",
10
+ "buffer",
11
+ "serialization",
12
+ "deserialization"
13
+ ],
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/men232/toolkit.git",
17
+ "directory": "packages/tl-pack"
18
+ },
19
+ "exports": {
20
+ ".": {
21
+ "import": "./dist/index.mjs",
22
+ "require": "./dist/index.cjs"
23
+ },
24
+ "./stream": {
25
+ "import": "./dist/stream.mjs",
26
+ "require": "./dist/stream.cjs",
27
+ "types": "./dist/stream.d.ts"
28
+ }
29
+ },
30
+ "main": "./dist/index.cjs",
31
+ "types": "./dist/index.d.ts",
32
+ "files": [
33
+ "dist"
34
+ ],
35
+ "dependencies": {
36
+ "pako": "^2.1.0",
37
+ "@andrew_l/toolkit": "0.0.2"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^20.16.10",
41
+ "@types/pako": "^2.0.3",
42
+ "typescript": "~5.6.2",
43
+ "unbuild": "3.0.0-rc.11",
44
+ "vitest": "^2.1.3"
45
+ },
46
+ "scripts": {
47
+ "build": "unbuild",
48
+ "test": "vitest run --typecheck",
49
+ "test:watch": "vitest watch --typecheck"
50
+ }
51
+ }
@@ -1,109 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { CORE_TYPES } from './constants.js';
3
- import { Dictionary } from './dictionary.js';
4
- import { TLExtension } from './extension.js';
5
- export interface BinaryReaderOptions {
6
- dictionary?: string[] | Dictionary;
7
- extensions?: TLExtension[];
8
- }
9
- export declare class BinaryReader {
10
- private target;
11
- private _last?;
12
- private _lastObject?;
13
- private dictionary?;
14
- private dictionaryExtended;
15
- private extensions;
16
- private _repeat?;
17
- offset: number;
18
- length: number;
19
- /**
20
- * Small utility class to read binary data.
21
- * @param data {Buffer}
22
- */
23
- constructor(data: Buffer | Uint8Array, options?: BinaryReaderOptions);
24
- readByte(): number;
25
- readInt32(signed?: boolean): number;
26
- readInt16(signed?: boolean): number;
27
- readInt8(signed?: boolean): number;
28
- /**
29
- * Reads a real floating point (4 bytes) value.
30
- * @returns {number}
31
- */
32
- readFloat(): number;
33
- /**
34
- * Reads a real floating point (8 bytes) value.
35
- * @returns {BigInteger}
36
- */
37
- readDouble(): number;
38
- /**
39
- * Read the given amount of bytes, or -1 to read all remaining.
40
- * @param length {number}
41
- */
42
- assertRead(length: number): void;
43
- assertConstructor(constructorId: CORE_TYPES): void;
44
- /**
45
- * Gets the byte array representing the current buffer as a whole.
46
- * @returns {Buffer}
47
- */
48
- getBuffer(): Buffer | Uint8Array;
49
- readNull(): null;
50
- readLength(): number;
51
- readAll(): any[];
52
- /**
53
- * @returns {Uint8Array | Buffer}
54
- */
55
- readBytes(): Buffer | Uint8Array;
56
- /**
57
- * Reads encoded string.
58
- * @returns {string}
59
- */
60
- readString(): string;
61
- /**
62
- * Reads a boolean value.
63
- * @returns {boolean}
64
- */
65
- readBool(): boolean;
66
- /**
67
- * Reads and converts Unix time
68
- * into a Javascript {Date} object.
69
- * @returns {Date}
70
- */
71
- readDate(): Date;
72
- /**
73
- * Reads a object.
74
- */
75
- readObject(): any;
76
- readObjectGzip(): any;
77
- readGzip(): Uint8Array;
78
- private readCore;
79
- getDictionaryValue(index: number): string | undefined;
80
- readDictionary(): null | string;
81
- readMap(checkConstructor?: boolean): Record<string, any>;
82
- decode(value: Buffer | Uint8Array): any;
83
- /**
84
- * Reads a vector (a list) of objects.
85
- * @returns {any[]}
86
- */
87
- readVector(checkConstructor?: boolean): any[];
88
- /**
89
- * Reads a vector (a list) of objects.
90
- * @returns {any[]}
91
- */
92
- readVectorDynamic(checkConstructor?: boolean): any[];
93
- /**
94
- * Tells the current position on the stream.
95
- * @returns {number}
96
- */
97
- tellPosition(): number;
98
- /**
99
- * Sets the current position on the stream.
100
- * @param position
101
- */
102
- setPosition(position: number): void;
103
- /**
104
- * Seeks the stream position given an offset from the current position.
105
- * The offset may be negative.
106
- * @param offset
107
- */
108
- seek(offset: number): void;
109
- }