UNPKG

@ton3/liteclient

Version:
89 lines 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StreamReader = void 0; const utils_1 = require("./utils"); const ton3_core_1 = require("ton3-core"); const boolean_1 = require("../types/boolean"); class StreamReader { constructor(buffer) { this.offset = 0; const temp = new Uint8Array(buffer.byteLength); if (Buffer.isBuffer(buffer)) { buffer.copy(temp, 0, 0, buffer.byteLength); } else { temp.set(buffer); } this.buffer = temp.buffer; this.view = new DataView(this.buffer); } readBytes() { let length = this.readUint8(); let lengthSize = 1; if (length === 0xfe) { length = (0, utils_1.bytesToUint)(new Uint8Array(this.buffer.slice(this.offset, this.offset + 3)).reverse()); this.offset += 3; lengthSize += 3; } const buffer = this.readBuffer(length); this.offset += 4 - (((lengthSize + length) % 4) || 4); return new Uint8Array(buffer); } readBuffer(length) { const value = this.buffer.slice(this.offset, this.offset + length); this.offset += length; return new Uint8Array(value); } readBool() { const result = this.readUint32LE(); if (result === boolean_1.TLBoolean.TRUE) { return true; } if (result === boolean_1.TLBoolean.FALSE) { return false; } throw new Error('Cannot parse boolean - unexpected value reached.'); } readUint8() { const value = this.view.getUint8(this.offset); this.offset += 1; return value; } readInt32LE() { const value = this.view.getInt32(this.offset, true); this.offset += 4; return value; } readUint32LE() { const value = this.view.getUint32(this.offset, true); this.offset += 4; return value; } readInt64LE() { const value = this.readUint64LE(); const sign = 1n << 63n; return value >= sign ? value - sign * 2n : value; } readUint64LE() { return BigInt(this.readUint32LE()) | (BigInt(this.readUint32LE()) << 32n); } readVector(reader) { const length = this.readUint32LE(); const result = []; for (let i = 0; i < length; i++) { result.push(reader(this)); } return result; } readString() { return ton3_core_1.Utils.Helpers.bytesToString(this.tail); } get position() { return this.offset; } get tail() { return new Uint8Array(this.buffer.slice(this.offset)); } } exports.StreamReader = StreamReader; //# sourceMappingURL=stream-reader.js.map