@ton3/liteclient
Version:
TON Blockchain LiteClient
89 lines • 2.76 kB
JavaScript
"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