UNPKG

@ton3/liteclient

Version:
103 lines 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StreamWriter = void 0; const ton3_core_1 = require("ton3-core"); const utils_1 = require("./utils"); const boolean_1 = require("../types/boolean"); class StreamWriter { constructor() { this._buffer = new ArrayBuffer(0); } concat(values) { const length = values.reduce((acc, el) => acc += el.byteLength, 0); const { temp } = values.reduce((acc, el) => { acc.temp.set(new Uint8Array(el), acc.offset); return { temp: acc.temp, offset: acc.offset += el.byteLength }; }, { temp: new Uint8Array(length), offset: 0 }); return temp.buffer; } append(value) { this._buffer = this.concat([this._buffer, value]); return this; } view(size) { const buffer = new ArrayBuffer(size); return new DataView(buffer); } writeBytes(value) { const lengthSize = value.length < 254 ? 1 : 4; const paddingSize = 4 - (((lengthSize + value.length) % 4) || 4); const buffer = new Uint8Array(lengthSize + value.length + paddingSize).fill(0); if (value.length < 254) { buffer.set([value.length], 0); } else { buffer.set([0xfe], 0); buffer.set((0, utils_1.uintToBytes)(value.length, 3).reverse(), 1); } buffer.set(value, lengthSize); this.append(buffer.buffer); return this; } writeBuffer(value) { this.append(value); return this; } writeBool(value) { this.writeUint32LE(value ? boolean_1.TLBoolean.TRUE : boolean_1.TLBoolean.FALSE); return this; } writeUint8(value) { const view = this.view(1); view.setUint8(0, value); this.append(view.buffer); return this; } writeInt32LE(value) { const view = this.view(4); view.setInt32(0, value, true); this.append(view.buffer); return this; } writeUint32LE(value) { const view = this.view(4); view.setUint32(0, value, true); this.append(view.buffer); return this; } writeInt64LE(value) { const view = this.view(8); view.setBigInt64(0, value, true); this.append(view.buffer); return this; } writeUint64LE(value) { const view = this.view(8); view.setBigUint64(0, value, true); this.append(view.buffer); return this; } writeInt128(value) { const buffer = new Uint8Array(16).fill(0); const bytes = typeof value === 'string' ? ton3_core_1.Utils.Helpers.hexToBytes(value) : value; buffer.set(bytes, 0); this.append(buffer.buffer); return this; } writeInt256(value) { const buffer = new Uint8Array(32).fill(0); const bytes = typeof value === 'string' ? ton3_core_1.Utils.Helpers.hexToBytes(value) : value; buffer.set(bytes, 0); this.append(buffer.buffer); return this; } get buffer() { return new Uint8Array(this._buffer); } } exports.StreamWriter = StreamWriter; //# sourceMappingURL=stream-writer.js.map