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