@andrew_l/tl-pack
Version:
Another implementation of binary serialization.
1 lines • 4.58 kB
Source Map (JSON)
{"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":";;;;;;;AAaO,MAAM,iBAAiBA,qBAAA,CAAU;AAAA,EACtC,MAAA;AAAA,EACA,KAAA;AAAA,EAEA,YAAY,OAAA,EAA2B;AACrC,IAAA,MAAM,IAAA,GAAO,WAAW,EAAC;AACzB,IAAA,IAAA,CAAK,aAAA,GAAgB;AAAA,MACnB,kBAAA,EAAoB,IAAA;AAAA,MACpB,GAAI,IAAA,CAAK,aAAA,IAAiB;AAAC,KAC7B;AAEA,IAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AAExB,IAAA,MAAM,MAAA,GAAS,IAAIC,yBAAA,CAAa,OAAO,CAAA;AAEvC,IAAA,MAAM,WAAA,GAAc,KAAK,aAAA,CAAc,KAAA;AAEvC,IAAA,MAAM,YAAA,GAAe,IAAI,UAAA,CAAW,CAAC,CAAA;AAErC,IAAA,YAAA,CAAa,CAAC,IAAIC,uBAAA,CAAW,aAAA;AAC7B,IAAA,YAAA,CAAa,CAAC,IAAIA,uBAAA,CAAW,IAAA;AAG7B,IAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,QAAA,CAAS,CAAA,EAAG,CAAC,CAAC,CAAA;AAErC,IAAA,IAAA,CAAK,SAAS,CAAA,QAAA,KAAY;AAExB,MAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,QAAA,CAAS,CAAA,EAAG,CAAC,CAAC,CAAA;AAErC,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,MACjC,CAAA,MAAO;AACL,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,IACF,CAAA;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AAAA,EACf;AAAA,EAEA,UAAA,CACE,KAAA,EACA,QAAA,EACA,QAAA,EACA;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AACrC,IAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AACd,IAAA,IAAA,CAAK,KAAA,EAAA;AACL,IAAA,QAAA,EAAS;AAAA,EACX;AACF;AAEO,MAAM,iBAAiBF,qBAAA,CAAU;AAAA,EACtC,MAAA;AAAA,EACQ,gBAAA;AAAA,EAER,YAAY,OAAA,EAA4B;AACtC,IAAA,IAAI,CAAC,OAAA,EAAS,OAAA,GAAU,EAAC;AACzB,IAAA,OAAA,CAAQ,UAAA,GAAa,IAAA;AACrB,IAAA,KAAA,CAAM,OAAO,CAAA;AAEb,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,IAAA,IAAA,CAAK,SAAS,IAAIG,yBAAA,CAAa,IAAI,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,EACrD;AAAA,EAEA,UAAA,CACE,KAAA,EACA,QAAA,EACA,QAAA,EACA;AACA,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,KAAA,GAAQ,OAAO,MAAA,CAAO,CAAC,IAAA,CAAK,gBAAA,EAAkB,KAAK,CAAC,CAAA;AACpD,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AACtC,MAAA,OAAO,QAAA,CAAS,MAAM,KAAK,CAAA;AAAA,IAC7B,SAAS,GAAA,EAAK;AACZ,MAAA,IAAK,KAAa,UAAA,EAAY;AAC5B,QAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AACxB,QAAA,OAAO,QAAA,EAAS;AAAA,MAClB;AAEA,MAAA,OAAO,SAAS,GAAU,CAAA;AAAA,IAC5B;AAAA,EACF;AACF;;;;;"}