Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@jsprismarine/jsbinaryutils

Package Overview
Dependencies
Maintainers
2
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@jsprismarine/jsbinaryutils - npm Package Compare versions

Comparing version
3.2.3
to
4.2.3
+340
dist/cjs/BinaryStream.d.ts
/// <reference types="node" />
export default class BinaryStream {
private binary;
private buffer;
private readIndex;
private writeIndex;
/**
* Creates a new BinaryStream instance.
* @param {Buffer|null|undefined} buffer - The array or Buffer containing binary data.
* @param {number} offset - The initial pointer position.
*/
constructor(buffer?: Buffer, offset?: number);
/**
* Reads a slice of buffer by the given length.
* @param {number} len
*/
read(len: number): Buffer;
/**
* Appends a buffer to the main buffer.
* @param {Buffer|Uint8Array} buf
*/
write(buf: Uint8Array): void;
/**
* Reads an unsigned byte (0 to 255).
* @returns {number}
*/
readByte(): number;
/**
* Writes an unsigned byte (0 to 255).
* @param {number} v
*/
writeByte(v: number): void;
/**
* Reads a signed byte (-128 to 127).
* @returns {number}
*/
readSignedByte(): number;
/**
* Writes a signed byte (-128 to 127).
* @param {number} v
*/
writeSignedByte(v: number): void;
/**
* Reads a boolean (true or false).
* @returns {boolean}
*/
readBoolean(): boolean;
/**
* Writes a boolean (true or false).
* @param {boolean} v
*/
writeBoolean(v: boolean): void;
/**
* Reads a 16 bit (2 bytes) signed big-endian number.
* @returns {number}
*/
readShort(): number;
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShort(v: number): void;
/**
* Reads a 16 bit (2 bytes) signed little-endian number.
* @returns {number}
*/
readShortLE(): number;
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShortLE(v: number): void;
/**
* Reads a 16 bit (2 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedShort(): number;
/**
* Writes a 16 bit (2 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedShort(v: number): void;
/**
* Reads a 16 bit (2 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedShortLE(): number;
/**
* Writes a 16 bit (2 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedShortLE(v: number): void;
/**
* Reads a 24 bit (3 bytes) signed big-endian number.
* @returns {number}
*/
readTriad(): number;
/**
* Writes a 24 bit (3 bytes) signed big-endian number.
* @param {number} v
*/
writeTriad(v: number): void;
/**
* Reads a 24 bit (3 bytes) little-endian number.
* @returns {number}
*/
readTriadLE(): number;
/**
* Writes a 24 bit (3 bytes) signed little-endian number.
* @param {number} v
*/
writeTriadLE(v: number): void;
/**
* Reads a 24 bit (3 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedTriad(): number;
/**
* Writes a 24 bit (3 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedTriad(v: number): void;
/**
* Reads a 24 bit (3 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedTriadLE(): number;
/**
* Writes a 24 bit (3 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedTriadLE(v: number): void;
/**
* Reads a 32 bit (4 bytes) big-endian signed number.
* @returns {number}
*/
readInt(): number;
/**
* Writes a 32 bit (4 bytes) big-endian signed number.
* @param {number} v
*/
writeInt(v: number): void;
/**
* Reads a 32 bit (4 bytes) signed number.
* @returns {number}
*/
readIntLE(): number;
/**
* Writes a 32 bit (4 bytes) little-endian signed number.
* @param {number} v
*/
writeIntLE(v: number): void;
/**
* Reads a 32 bit (4 bytes) big-endian unsigned number.
* @returns {number}
*/
readUnsignedInt(): number;
/**
* Writes a 32 bit (4 bytes) big-endian unsigned number.
* @param {number} v
*/
writeUnsignedInt(v: number): void;
/**
* Reads a 32 bit (4 bytes) little-endian unsigned number.
* @returns {number}
*/
readUnsignedIntLE(): number;
/**
* Writes a 32 bit (4 bytes) little-endian unsigned number.
* @param {number} v
*/
writeUnsignedIntLE(v: number): void;
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloat(): number;
/**
* Writes a 32 bit (4 bytes) big-endian floating point number.
* @param {number} v
*/
writeFloat(v: number): void;
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloatLE(): number;
/**
* Writes a 32 bit (4 bytes) little-endian floating point number.
* @param {number} v
*/
writeFloatLE(v: number): void;
/**
* Returns a 64 bit (8 bytes) big-endian flating point number.
* @returns {number}
*/
readDouble(): number;
/**
* Writes a 64 bit (8 bytes) big-endian floating point number.
* @param {number} v
*/
writeDouble(v: number): void;
/**
* Returns a 64 bit (8 bytes) little-endian flating point number.
* @returns {number}
*/
readDoubleLE(): number;
/**
* Writes a 64 bit (8 bytes) little-endian floating point number.
* @param {number} v
*/
writeDoubleLE(v: number): void;
/**
* Returns a 64 bit (8 bytes) signed big-endian number.
* @returns {bigint}
*/
readLong(): bigint;
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLong(v: bigint): void;
/**
* Returns a 64 bit (8 bytes) signed little-endian number.
* @returns {bigint}
*/
readLongLE(): bigint;
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLongLE(v: bigint): void;
/**
* Returns a 64 bit (8 bytes) unsigned big-endian number.
* @returns {bigint}
*/
readUnsignedLong(): bigint;
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLong(v: bigint): void;
/**
* Returns a 64 bit (8 bytes) unsigned little-endian number.
* @returns {bigint}
*/
readUnsignedLongLE(): bigint;
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLongLE(v: bigint): void;
/**
* Reads a 32 bit (4 bytes) zigzag-encoded number.
* @returns {number}
*/
readVarInt(): number;
/**
* Writes a 32 bit (4 bytes) zigzag-encoded number.
* @param {number} v
*/
writeVarInt(v: number): void;
/**
* Reads a 32 bit unsigned number.
* @returns {number}
*/
readUnsignedVarInt(): number;
/**
* Writes a 32 bit unsigned number with variable-length.
* @param {number} v
*/
writeUnsignedVarInt(v: number): void;
/**
* Reads a 64 bit zigzag-encoded variable-length number.
* @returns {bigint}
*/
readVarLong(): bigint;
/**
* Writes a 64 bit unsigned zigzag-encoded number.
* @param {bigint} v
*/
writeVarLong(v: bigint): void;
/**
* Reads a 64 bit unsigned variable-length number.
* @returns {bigint}
*/
readUnsignedVarLong(): bigint;
/**
* Writes a 64 bit unsigned variable-length number.
* @param {bigint} v
*/
writeUnsignedVarLong(v: bigint): void;
/**
* Increases the write offset by the given length.
* @param {number} length
*/
private addOffset;
/**
* Returns whatever or not the read offset is at end of line.
* @returns {number}
*/
feof(): boolean;
/**
* Reads the remaining bytes and returns the buffer slice.
* @returns {Buffer}
*/
readRemaining(): Buffer;
/**
* Skips len bytes on the buffer.
* @param {number} len
*/
skip(len: number): void;
/**
* Returns the encoded buffer.
* @returns {Buffer}
*/
getBuffer(): Buffer;
/**
* Retuns the read index.
* @returns {number}
*/
getReadIndex(): number;
/**
* Returns the write index.
* @returns {number}
*/
getWriteIndex(): number;
/**
* Do read assertions, check if the read buffer is null.
* @param {number} byteLength
*/
private doReadAssertions;
/**
* Do read assertions, check if the read buffer is null.
* @param {number|bigint} num
* @param {number|bigint} minVal
* @param {number|bigint} maxVal
*/
private doWriteAssertions;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = require("assert");
class BinaryStream {
/**
* Creates a new BinaryStream instance.
* @param {Buffer|null|undefined} buffer - The array or Buffer containing binary data.
* @param {number} offset - The initial pointer position.
*/
constructor(buffer, offset = 0) {
this.binary = [];
this.buffer = null;
this.writeIndex = 0;
this.buffer = buffer ?? null; // Keep this instance for reading
this.readIndex = offset;
}
/**
* Reads a slice of buffer by the given length.
* @param {number} len
*/
read(len) {
this.doReadAssertions(len);
return this.buffer.slice(this.readIndex, (this.readIndex += len));
}
write(buf) {
this.binary.push(...buf);
this.writeIndex += buf.byteLength;
}
/**
* Reads an unsigned byte (0 to 255).
* @returns {number}
*/
readByte() {
this.doReadAssertions(1);
return this.buffer.readUInt8(this.readIndex++);
}
/**
* Writes an unsigned byte (0 to 255).
* @param {number} v
*/
writeByte(v) {
v &= 0xff;
this.binary[this.writeIndex++] = v;
}
/**
* Reads a signed byte (-128 to 127).
* @returns {number}
*/
readSignedByte() {
this.doReadAssertions(1);
return this.buffer.readInt8(this.readIndex++);
}
/**
* Writes a signed byte (-128 to 127).
* @param {number} v
*/
writeSignedByte(v) {
if (v < 0)
v = 0xff + v + 1;
this.binary[this.writeIndex++] = v & 0xff;
}
/**
* Reads a boolean (true or false).
* @returns {boolean}
*/
readBoolean() {
this.doReadAssertions(1);
return !!this.readByte();
}
/**
* Writes a boolean (true or false).
* @param {boolean} v
*/
writeBoolean(v) {
this.writeByte(+v);
}
/**
* Reads a 16 bit (2 bytes) signed big-endian number.
* @returns {number}
*/
readShort() {
this.doReadAssertions(2);
return this.buffer.readInt16BE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShort(v) {
this.doWriteAssertions(v, -32768, 32767);
this.writeByte(v >> 8);
this.writeByte(v);
}
/**
* Reads a 16 bit (2 bytes) signed little-endian number.
* @returns {number}
*/
readShortLE() {
this.doReadAssertions(2);
return this.buffer.readInt16LE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShortLE(v) {
this.doWriteAssertions(v, -32768, 32767);
this.writeByte(v);
this.writeByte(v >> 8);
}
/**
* Reads a 16 bit (2 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedShort() {
this.doReadAssertions(2);
return this.buffer.readUInt16BE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedShort(v) {
this.doWriteAssertions(v, 0, 65535);
this.writeByte(v >>> 8);
this.writeByte(v);
}
/**
* Reads a 16 bit (2 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedShortLE() {
this.doReadAssertions(2);
return this.buffer.readUInt16LE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedShortLE(v) {
this.doWriteAssertions(v, 0, 65535);
this.writeByte(v);
this.writeByte(v >>> 8);
}
/**
* Reads a 24 bit (3 bytes) signed big-endian number.
* @returns {number}
*/
readTriad() {
this.doReadAssertions(3);
return this.buffer.readIntBE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) signed big-endian number.
* @param {number} v
*/
writeTriad(v) {
this.doWriteAssertions(v, -8388608, 8388607);
this.writeByte((v & 0xff0000) >> 16); // msb
this.writeByte((v & 0x00ff00) >> 8); // mib
this.writeByte(v & 0x0000ff); // lsb
}
/**
* Reads a 24 bit (3 bytes) little-endian number.
* @returns {number}
*/
readTriadLE() {
this.doReadAssertions(3);
return this.buffer.readIntLE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) signed little-endian number.
* @param {number} v
*/
writeTriadLE(v) {
this.doWriteAssertions(v, -8388608, 8388607);
this.writeByte(v & 0x0000ff);
this.writeByte((v & 0x00ff00) >> 8);
this.writeByte((v & 0xff0000) >> 16);
}
/**
* Reads a 24 bit (3 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedTriad() {
this.doReadAssertions(3);
return this.buffer.readUIntBE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedTriad(v) {
this.doWriteAssertions(v, 0, 16777215);
this.writeByte((v & 0xff0000) >>> 16); // msb
this.writeByte((v & 0x00ff00) >>> 8); // mib
this.writeByte(v & 0x0000ff); // lsb
}
/**
* Reads a 24 bit (3 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedTriadLE() {
this.doReadAssertions(3);
return this.buffer.readUIntLE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedTriadLE(v) {
this.doWriteAssertions(v, 0, 16777215);
this.writeByte(v & 0x0000ff);
this.writeByte((v & 0x00ff00) >>> 8);
this.writeByte((v & 0xff0000) >>> 16);
}
/**
* Reads a 32 bit (4 bytes) big-endian signed number.
* @returns {number}
*/
readInt() {
this.doReadAssertions(4);
return this.buffer.readInt32BE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) big-endian signed number.
* @param {number} v
*/
writeInt(v) {
if (v < 0)
v = v & (0xffffffff + v + 1);
this.doWriteAssertions(v, -2147483648, 2147483647);
this.writeByte(v >> 24);
this.writeByte(v >> 16);
this.writeByte(v >> 8);
this.writeByte(v);
}
/**
* Reads a 32 bit (4 bytes) signed number.
* @returns {number}
*/
readIntLE() {
this.doReadAssertions(4);
return this.buffer.readIntLE(this.addOffset(4), 4);
}
/**
* Writes a 32 bit (4 bytes) little-endian signed number.
* @param {number} v
*/
writeIntLE(v) {
if (v < 0)
v = v & (0xffffffff + v + 1);
this.doWriteAssertions(v, -2147483648, 2147483647);
this.writeByte(v);
this.writeByte(v >> 8);
this.writeByte(v >> 16);
this.writeByte(v >> 24);
}
/**
* Reads a 32 bit (4 bytes) big-endian unsigned number.
* @returns {number}
*/
readUnsignedInt() {
this.doReadAssertions(4);
return this.buffer.readUInt32BE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) big-endian unsigned number.
* @param {number} v
*/
writeUnsignedInt(v) {
this.doWriteAssertions(v, 0, 4294967295);
this.writeByte(v >>> 24);
this.writeByte(v >>> 16);
this.writeByte(v >>> 8);
this.writeByte(v);
}
/**
* Reads a 32 bit (4 bytes) little-endian unsigned number.
* @returns {number}
*/
readUnsignedIntLE() {
this.doReadAssertions(4);
return this.buffer.readUInt32LE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) little-endian unsigned number.
* @param {number} v
*/
writeUnsignedIntLE(v) {
this.doWriteAssertions(v, 0, 4294967295);
this.writeByte(v);
this.writeByte(v >>> 8);
this.writeByte(v >>> 16);
this.writeByte(v >>> 24);
}
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloat() {
this.doReadAssertions(4);
return this.buffer.readFloatBE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) big-endian floating point number.
* @param {number} v
*/
writeFloat(v) {
this.doWriteAssertions(v, -3.4028234663852886e38, +3.4028234663852886e38);
this.write(new Uint8Array(new Float32Array([v]).buffer).reverse());
}
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloatLE() {
this.doReadAssertions(4);
return this.buffer.readFloatLE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) little-endian floating point number.
* @param {number} v
*/
writeFloatLE(v) {
this.doWriteAssertions(v, -3.4028234663852886e38, +3.4028234663852886e38);
this.write(new Uint8Array(new Float32Array([v]).buffer));
}
/**
* Returns a 64 bit (8 bytes) big-endian flating point number.
* @returns {number}
*/
readDouble() {
this.doReadAssertions(8);
return this.buffer.readDoubleBE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) big-endian floating point number.
* @param {number} v
*/
writeDouble(v) {
this.doWriteAssertions(v, -1.7976931348623157e308, +1.7976931348623157e308);
this.write(new Uint8Array(new Float64Array([v]).buffer).reverse());
}
/**
* Returns a 64 bit (8 bytes) little-endian flating point number.
* @returns {number}
*/
readDoubleLE() {
this.doReadAssertions(8);
return this.buffer.readDoubleLE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) little-endian floating point number.
* @param {number} v
*/
writeDoubleLE(v) {
this.doWriteAssertions(v, -1.7976931348623157e308, +1.7976931348623157e308);
this.write(new Uint8Array(new Float64Array([v]).buffer));
}
/**
* Returns a 64 bit (8 bytes) signed big-endian number.
* @returns {bigint}
*/
readLong() {
this.doReadAssertions(8);
return this.buffer.readBigInt64BE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLong(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex + 7] = lo;
this.binary[this.writeIndex + 6] = lo >> 8;
this.binary[this.writeIndex + 5] = lo >> 16;
this.binary[this.writeIndex + 4] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex + 3] = hi;
this.binary[this.writeIndex + 2] = hi >> 8;
this.binary[this.writeIndex + 1] = hi >> 16;
this.binary[this.writeIndex] = hi >> 24;
this.writeIndex += 8;
}
/**
* Returns a 64 bit (8 bytes) signed little-endian number.
* @returns {bigint}
*/
readLongLE() {
this.doReadAssertions(8);
return this.buffer.readBigInt64LE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLongLE(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex++] = lo;
this.binary[this.writeIndex++] = lo >> 8;
this.binary[this.writeIndex++] = lo >> 16;
this.binary[this.writeIndex++] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex++] = hi;
this.binary[this.writeIndex++] = hi >> 8;
this.binary[this.writeIndex++] = hi >> 16;
this.binary[this.writeIndex++] = hi >> 24;
}
/**
* Returns a 64 bit (8 bytes) unsigned big-endian number.
* @returns {bigint}
*/
readUnsignedLong() {
this.doReadAssertions(8);
return this.buffer.readBigUInt64BE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLong(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex + 7] = lo;
this.binary[this.writeIndex + 6] = lo >> 8;
this.binary[this.writeIndex + 5] = lo >> 16;
this.binary[this.writeIndex + 4] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex + 3] = hi;
this.binary[this.writeIndex + 2] = hi >> 8;
this.binary[this.writeIndex + 1] = hi >> 16;
this.binary[this.writeIndex] = hi >> 24;
this.writeIndex += 8;
}
/**
* Returns a 64 bit (8 bytes) unsigned little-endian number.
* @returns {bigint}
*/
readUnsignedLongLE() {
this.doReadAssertions(8);
return this.buffer.readBigUInt64LE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLongLE(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex++] = lo;
this.binary[this.writeIndex++] = lo >> 8;
this.binary[this.writeIndex++] = lo >> 16;
this.binary[this.writeIndex++] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex++] = hi;
this.binary[this.writeIndex++] = hi >> 8;
this.binary[this.writeIndex++] = hi >> 16;
this.binary[this.writeIndex++] = hi >> 24;
}
/**
* Reads a 32 bit (4 bytes) zigzag-encoded number.
* @returns {number}
*/
readVarInt() {
const raw = this.readUnsignedVarInt();
const temp = (((raw << 63) >> 63) ^ raw) >> 1;
return temp ^ (raw & (1 << 63));
}
/**
* Writes a 32 bit (4 bytes) zigzag-encoded number.
* @param {number} v
*/
writeVarInt(v) {
v = (v << 32) >> 32;
return this.writeUnsignedVarInt((v << 1) ^ (v >> 31));
}
/**
* Reads a 32 bit unsigned number.
* @returns {number}
*/
readUnsignedVarInt() {
(0, assert_1.default)(this.buffer != null, 'Reading on empty buffer!');
let value = 0;
for (let i = 0; i <= 28; i += 7) {
if (typeof this.buffer[this.readIndex] === 'undefined') {
throw new Error('No bytes left in buffer');
}
let b = this.readByte();
value |= (b & 0x7f) << i;
if ((b & 0x80) === 0) {
return value;
}
}
throw new Error('VarInt did not terminate after 5 bytes!');
}
/**
* Writes a 32 bit unsigned number with variable-length.
* @param {number} v
*/
writeUnsignedVarInt(v) {
while ((v & 0xffffff80) !== 0) {
this.writeByte((v & 0x7f) | 0x80);
v >>>= 7;
}
this.writeByte(v & 0x7f);
}
/**
* Reads a 64 bit zigzag-encoded variable-length number.
* @returns {bigint}
*/
readVarLong() {
const raw = this.readUnsignedVarLong();
return raw >> 1n;
}
/**
* Writes a 64 bit unsigned zigzag-encoded number.
* @param {bigint} v
*/
writeVarLong(v) {
return this.writeUnsignedVarLong((v << 1n) ^ (v >> 63n));
}
/**
* Reads a 64 bit unsigned variable-length number.
* @returns {bigint}
*/
readUnsignedVarLong() {
let value = 0n;
for (let i = 0; i <= 63; i += 7) {
if (this.feof()) {
throw new Error('No bytes left in buffer');
}
const b = this.readByte();
value |= (BigInt(b) & 0x7fn) << BigInt(i);
if ((b & 0x80) === 0) {
return value;
}
}
throw new Error('VarLong did not terminate after 10 bytes!');
}
/**
* Writes a 64 bit unsigned variable-length number.
* @param {bigint} v
*/
writeUnsignedVarLong(v) {
for (let i = 0; i < 10; ++i) {
if (v >> 7n !== 0n) {
this.writeByte(Number(v | 0x80n));
}
else {
this.writeByte(Number(v & 0x7fn));
break;
}
v >>= 7n;
}
}
/**
* Increases the write offset by the given length.
* @param {number} length
*/
addOffset(length) {
return (this.readIndex += length) - length;
}
/**
* Returns whatever or not the read offset is at end of line.
* @returns {number}
*/
feof() {
if (!this.buffer)
throw new Error('Buffer is write only!');
return typeof this.buffer[this.readIndex] === 'undefined';
}
/**
* Reads the remaining bytes and returns the buffer slice.
* @returns {Buffer}
*/
readRemaining() {
if (!this.buffer)
throw new Error('Buffer is write only!');
const buf = this.buffer.slice(this.readIndex);
this.readIndex = this.buffer.byteLength;
return buf;
}
/**
* Skips len bytes on the buffer.
* @param {number} len
*/
skip(len) {
(0, assert_1.default)(Number.isInteger(len), 'Cannot skip a float amount of bytes');
this.readIndex += len;
}
/**
* Returns the encoded buffer.
* @returns {Buffer}
*/
getBuffer() {
return this.buffer !== null ? this.buffer : Buffer.from(this.binary);
}
/**
* Retuns the read index.
* @returns {number}
*/
getReadIndex() {
return this.readIndex;
}
/**
* Returns the write index.
* @returns {number}
*/
getWriteIndex() {
return this.writeIndex;
}
/**
* Do read assertions, check if the read buffer is null.
* @param {number} byteLength
*/
doReadAssertions(byteLength) {
(0, assert_1.default)(this.buffer !== null, 'Cannot read without buffer data!');
(0, assert_1.default)(this.buffer.byteLength >= byteLength, 'Cannot read without buffer data!');
}
/**
* Do read assertions, check if the read buffer is null.
* @param {number|bigint} num
* @param {number|bigint} minVal
* @param {number|bigint} maxVal
*/
doWriteAssertions(num, minVal, maxVal) {
(0, assert_1.default)(num >= minVal && num <= maxVal, `Value out of bounds: value=${num}, min=${minVal}, max=${maxVal}`);
}
}
exports.default = BinaryStream;
//# sourceMappingURL=BinaryStream.js.map
{"version":3,"file":"BinaryStream.js","sourceRoot":"","sources":["../../src/BinaryStream.ts"],"names":[],"mappings":"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"}
import assert from 'assert';
export default class BinaryStream {
/**
* Creates a new BinaryStream instance.
* @param {Buffer|null|undefined} buffer - The array or Buffer containing binary data.
* @param {number} offset - The initial pointer position.
*/
constructor(buffer, offset = 0) {
this.binary = [];
this.buffer = null;
this.writeIndex = 0;
this.buffer = buffer ?? null; // Keep this instance for reading
this.readIndex = offset;
}
/**
* Reads a slice of buffer by the given length.
* @param {number} len
*/
read(len) {
this.doReadAssertions(len);
return this.buffer.slice(this.readIndex, (this.readIndex += len));
}
write(buf) {
this.binary.push(...buf);
this.writeIndex += buf.byteLength;
}
/**
* Reads an unsigned byte (0 to 255).
* @returns {number}
*/
readByte() {
this.doReadAssertions(1);
return this.buffer.readUInt8(this.readIndex++);
}
/**
* Writes an unsigned byte (0 to 255).
* @param {number} v
*/
writeByte(v) {
v &= 0xff;
this.binary[this.writeIndex++] = v;
}
/**
* Reads a signed byte (-128 to 127).
* @returns {number}
*/
readSignedByte() {
this.doReadAssertions(1);
return this.buffer.readInt8(this.readIndex++);
}
/**
* Writes a signed byte (-128 to 127).
* @param {number} v
*/
writeSignedByte(v) {
if (v < 0)
v = 0xff + v + 1;
this.binary[this.writeIndex++] = v & 0xff;
}
/**
* Reads a boolean (true or false).
* @returns {boolean}
*/
readBoolean() {
this.doReadAssertions(1);
return !!this.readByte();
}
/**
* Writes a boolean (true or false).
* @param {boolean} v
*/
writeBoolean(v) {
this.writeByte(+v);
}
/**
* Reads a 16 bit (2 bytes) signed big-endian number.
* @returns {number}
*/
readShort() {
this.doReadAssertions(2);
return this.buffer.readInt16BE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShort(v) {
this.doWriteAssertions(v, -32768, 32767);
this.writeByte(v >> 8);
this.writeByte(v);
}
/**
* Reads a 16 bit (2 bytes) signed little-endian number.
* @returns {number}
*/
readShortLE() {
this.doReadAssertions(2);
return this.buffer.readInt16LE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShortLE(v) {
this.doWriteAssertions(v, -32768, 32767);
this.writeByte(v);
this.writeByte(v >> 8);
}
/**
* Reads a 16 bit (2 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedShort() {
this.doReadAssertions(2);
return this.buffer.readUInt16BE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedShort(v) {
this.doWriteAssertions(v, 0, 65535);
this.writeByte(v >>> 8);
this.writeByte(v);
}
/**
* Reads a 16 bit (2 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedShortLE() {
this.doReadAssertions(2);
return this.buffer.readUInt16LE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedShortLE(v) {
this.doWriteAssertions(v, 0, 65535);
this.writeByte(v);
this.writeByte(v >>> 8);
}
/**
* Reads a 24 bit (3 bytes) signed big-endian number.
* @returns {number}
*/
readTriad() {
this.doReadAssertions(3);
return this.buffer.readIntBE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) signed big-endian number.
* @param {number} v
*/
writeTriad(v) {
this.doWriteAssertions(v, -8388608, 8388607);
this.writeByte((v & 0xff0000) >> 16); // msb
this.writeByte((v & 0x00ff00) >> 8); // mib
this.writeByte(v & 0x0000ff); // lsb
}
/**
* Reads a 24 bit (3 bytes) little-endian number.
* @returns {number}
*/
readTriadLE() {
this.doReadAssertions(3);
return this.buffer.readIntLE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) signed little-endian number.
* @param {number} v
*/
writeTriadLE(v) {
this.doWriteAssertions(v, -8388608, 8388607);
this.writeByte(v & 0x0000ff);
this.writeByte((v & 0x00ff00) >> 8);
this.writeByte((v & 0xff0000) >> 16);
}
/**
* Reads a 24 bit (3 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedTriad() {
this.doReadAssertions(3);
return this.buffer.readUIntBE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedTriad(v) {
this.doWriteAssertions(v, 0, 16777215);
this.writeByte((v & 0xff0000) >>> 16); // msb
this.writeByte((v & 0x00ff00) >>> 8); // mib
this.writeByte(v & 0x0000ff); // lsb
}
/**
* Reads a 24 bit (3 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedTriadLE() {
this.doReadAssertions(3);
return this.buffer.readUIntLE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedTriadLE(v) {
this.doWriteAssertions(v, 0, 16777215);
this.writeByte(v & 0x0000ff);
this.writeByte((v & 0x00ff00) >>> 8);
this.writeByte((v & 0xff0000) >>> 16);
}
/**
* Reads a 32 bit (4 bytes) big-endian signed number.
* @returns {number}
*/
readInt() {
this.doReadAssertions(4);
return this.buffer.readInt32BE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) big-endian signed number.
* @param {number} v
*/
writeInt(v) {
if (v < 0)
v = v & (0xffffffff + v + 1);
this.doWriteAssertions(v, -2147483648, 2147483647);
this.writeByte(v >> 24);
this.writeByte(v >> 16);
this.writeByte(v >> 8);
this.writeByte(v);
}
/**
* Reads a 32 bit (4 bytes) signed number.
* @returns {number}
*/
readIntLE() {
this.doReadAssertions(4);
return this.buffer.readIntLE(this.addOffset(4), 4);
}
/**
* Writes a 32 bit (4 bytes) little-endian signed number.
* @param {number} v
*/
writeIntLE(v) {
if (v < 0)
v = v & (0xffffffff + v + 1);
this.doWriteAssertions(v, -2147483648, 2147483647);
this.writeByte(v);
this.writeByte(v >> 8);
this.writeByte(v >> 16);
this.writeByte(v >> 24);
}
/**
* Reads a 32 bit (4 bytes) big-endian unsigned number.
* @returns {number}
*/
readUnsignedInt() {
this.doReadAssertions(4);
return this.buffer.readUInt32BE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) big-endian unsigned number.
* @param {number} v
*/
writeUnsignedInt(v) {
this.doWriteAssertions(v, 0, 4294967295);
this.writeByte(v >>> 24);
this.writeByte(v >>> 16);
this.writeByte(v >>> 8);
this.writeByte(v);
}
/**
* Reads a 32 bit (4 bytes) little-endian unsigned number.
* @returns {number}
*/
readUnsignedIntLE() {
this.doReadAssertions(4);
return this.buffer.readUInt32LE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) little-endian unsigned number.
* @param {number} v
*/
writeUnsignedIntLE(v) {
this.doWriteAssertions(v, 0, 4294967295);
this.writeByte(v);
this.writeByte(v >>> 8);
this.writeByte(v >>> 16);
this.writeByte(v >>> 24);
}
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloat() {
this.doReadAssertions(4);
return this.buffer.readFloatBE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) big-endian floating point number.
* @param {number} v
*/
writeFloat(v) {
this.doWriteAssertions(v, -3.4028234663852886e38, +3.4028234663852886e38);
this.write(new Uint8Array(new Float32Array([v]).buffer).reverse());
}
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloatLE() {
this.doReadAssertions(4);
return this.buffer.readFloatLE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) little-endian floating point number.
* @param {number} v
*/
writeFloatLE(v) {
this.doWriteAssertions(v, -3.4028234663852886e38, +3.4028234663852886e38);
this.write(new Uint8Array(new Float32Array([v]).buffer));
}
/**
* Returns a 64 bit (8 bytes) big-endian flating point number.
* @returns {number}
*/
readDouble() {
this.doReadAssertions(8);
return this.buffer.readDoubleBE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) big-endian floating point number.
* @param {number} v
*/
writeDouble(v) {
this.doWriteAssertions(v, -1.7976931348623157e308, +1.7976931348623157e308);
this.write(new Uint8Array(new Float64Array([v]).buffer).reverse());
}
/**
* Returns a 64 bit (8 bytes) little-endian flating point number.
* @returns {number}
*/
readDoubleLE() {
this.doReadAssertions(8);
return this.buffer.readDoubleLE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) little-endian floating point number.
* @param {number} v
*/
writeDoubleLE(v) {
this.doWriteAssertions(v, -1.7976931348623157e308, +1.7976931348623157e308);
this.write(new Uint8Array(new Float64Array([v]).buffer));
}
/**
* Returns a 64 bit (8 bytes) signed big-endian number.
* @returns {bigint}
*/
readLong() {
this.doReadAssertions(8);
return this.buffer.readBigInt64BE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLong(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex + 7] = lo;
this.binary[this.writeIndex + 6] = lo >> 8;
this.binary[this.writeIndex + 5] = lo >> 16;
this.binary[this.writeIndex + 4] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex + 3] = hi;
this.binary[this.writeIndex + 2] = hi >> 8;
this.binary[this.writeIndex + 1] = hi >> 16;
this.binary[this.writeIndex] = hi >> 24;
this.writeIndex += 8;
}
/**
* Returns a 64 bit (8 bytes) signed little-endian number.
* @returns {bigint}
*/
readLongLE() {
this.doReadAssertions(8);
return this.buffer.readBigInt64LE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLongLE(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex++] = lo;
this.binary[this.writeIndex++] = lo >> 8;
this.binary[this.writeIndex++] = lo >> 16;
this.binary[this.writeIndex++] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex++] = hi;
this.binary[this.writeIndex++] = hi >> 8;
this.binary[this.writeIndex++] = hi >> 16;
this.binary[this.writeIndex++] = hi >> 24;
}
/**
* Returns a 64 bit (8 bytes) unsigned big-endian number.
* @returns {bigint}
*/
readUnsignedLong() {
this.doReadAssertions(8);
return this.buffer.readBigUInt64BE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLong(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex + 7] = lo;
this.binary[this.writeIndex + 6] = lo >> 8;
this.binary[this.writeIndex + 5] = lo >> 16;
this.binary[this.writeIndex + 4] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex + 3] = hi;
this.binary[this.writeIndex + 2] = hi >> 8;
this.binary[this.writeIndex + 1] = hi >> 16;
this.binary[this.writeIndex] = hi >> 24;
this.writeIndex += 8;
}
/**
* Returns a 64 bit (8 bytes) unsigned little-endian number.
* @returns {bigint}
*/
readUnsignedLongLE() {
this.doReadAssertions(8);
return this.buffer.readBigUInt64LE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLongLE(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex++] = lo;
this.binary[this.writeIndex++] = lo >> 8;
this.binary[this.writeIndex++] = lo >> 16;
this.binary[this.writeIndex++] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex++] = hi;
this.binary[this.writeIndex++] = hi >> 8;
this.binary[this.writeIndex++] = hi >> 16;
this.binary[this.writeIndex++] = hi >> 24;
}
/**
* Reads a 32 bit (4 bytes) zigzag-encoded number.
* @returns {number}
*/
readVarInt() {
const raw = this.readUnsignedVarInt();
const temp = (((raw << 63) >> 63) ^ raw) >> 1;
return temp ^ (raw & (1 << 63));
}
/**
* Writes a 32 bit (4 bytes) zigzag-encoded number.
* @param {number} v
*/
writeVarInt(v) {
v = (v << 32) >> 32;
return this.writeUnsignedVarInt((v << 1) ^ (v >> 31));
}
/**
* Reads a 32 bit unsigned number.
* @returns {number}
*/
readUnsignedVarInt() {
assert(this.buffer != null, 'Reading on empty buffer!');
let value = 0;
for (let i = 0; i <= 28; i += 7) {
if (typeof this.buffer[this.readIndex] === 'undefined') {
throw new Error('No bytes left in buffer');
}
let b = this.readByte();
value |= (b & 0x7f) << i;
if ((b & 0x80) === 0) {
return value;
}
}
throw new Error('VarInt did not terminate after 5 bytes!');
}
/**
* Writes a 32 bit unsigned number with variable-length.
* @param {number} v
*/
writeUnsignedVarInt(v) {
while ((v & 0xffffff80) !== 0) {
this.writeByte((v & 0x7f) | 0x80);
v >>>= 7;
}
this.writeByte(v & 0x7f);
}
/**
* Reads a 64 bit zigzag-encoded variable-length number.
* @returns {bigint}
*/
readVarLong() {
const raw = this.readUnsignedVarLong();
return raw >> 1n;
}
/**
* Writes a 64 bit unsigned zigzag-encoded number.
* @param {bigint} v
*/
writeVarLong(v) {
return this.writeUnsignedVarLong((v << 1n) ^ (v >> 63n));
}
/**
* Reads a 64 bit unsigned variable-length number.
* @returns {bigint}
*/
readUnsignedVarLong() {
let value = 0n;
for (let i = 0; i <= 63; i += 7) {
if (this.feof()) {
throw new Error('No bytes left in buffer');
}
const b = this.readByte();
value |= (BigInt(b) & 0x7fn) << BigInt(i);
if ((b & 0x80) === 0) {
return value;
}
}
throw new Error('VarLong did not terminate after 10 bytes!');
}
/**
* Writes a 64 bit unsigned variable-length number.
* @param {bigint} v
*/
writeUnsignedVarLong(v) {
for (let i = 0; i < 10; ++i) {
if (v >> 7n !== 0n) {
this.writeByte(Number(v | 0x80n));
}
else {
this.writeByte(Number(v & 0x7fn));
break;
}
v >>= 7n;
}
}
/**
* Increases the write offset by the given length.
* @param {number} length
*/
addOffset(length) {
return (this.readIndex += length) - length;
}
/**
* Returns whatever or not the read offset is at end of line.
* @returns {number}
*/
feof() {
if (!this.buffer)
throw new Error('Buffer is write only!');
return typeof this.buffer[this.readIndex] === 'undefined';
}
/**
* Reads the remaining bytes and returns the buffer slice.
* @returns {Buffer}
*/
readRemaining() {
if (!this.buffer)
throw new Error('Buffer is write only!');
const buf = this.buffer.slice(this.readIndex);
this.readIndex = this.buffer.byteLength;
return buf;
}
/**
* Skips len bytes on the buffer.
* @param {number} len
*/
skip(len) {
assert(Number.isInteger(len), 'Cannot skip a float amount of bytes');
this.readIndex += len;
}
/**
* Returns the encoded buffer.
* @returns {Buffer}
*/
getBuffer() {
return this.buffer !== null ? this.buffer : Buffer.from(this.binary);
}
/**
* Retuns the read index.
* @returns {number}
*/
getReadIndex() {
return this.readIndex;
}
/**
* Returns the write index.
* @returns {number}
*/
getWriteIndex() {
return this.writeIndex;
}
/**
* Do read assertions, check if the read buffer is null.
* @param {number} byteLength
*/
doReadAssertions(byteLength) {
assert(this.buffer !== null, 'Cannot read without buffer data!');
assert(this.buffer.byteLength >= byteLength, 'Cannot read without buffer data!');
}
/**
* Do read assertions, check if the read buffer is null.
* @param {number|bigint} num
* @param {number|bigint} minVal
* @param {number|bigint} maxVal
*/
doWriteAssertions(num, minVal, maxVal) {
assert(num >= minVal && num <= maxVal, `Value out of bounds: value=${num}, min=${minVal}, max=${maxVal}`);
}
}
//# sourceMappingURL=BinaryStream.js.map
{"version":3,"file":"BinaryStream.js","sourceRoot":"","sources":["../../src/BinaryStream.ts"],"names":[],"mappings":"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"}
/// <reference types="node" />
export default class BinaryStream {
private binary;
private buffer;
private readIndex;
private writeIndex;
/**
* Creates a new BinaryStream instance.
* @param {Buffer|null|undefined} buffer - The array or Buffer containing binary data.
* @param {number} offset - The initial pointer position.
*/
constructor(buffer?: Buffer, offset?: number);
/**
* Reads a slice of buffer by the given length.
* @param {number} len
*/
read(len: number): Buffer;
/**
* Appends a buffer to the main buffer.
* @param {Buffer|Uint8Array} buf
*/
write(buf: Uint8Array): void;
/**
* Reads an unsigned byte (0 to 255).
* @returns {number}
*/
readByte(): number;
/**
* Writes an unsigned byte (0 to 255).
* @param {number} v
*/
writeByte(v: number): void;
/**
* Reads a signed byte (-128 to 127).
* @returns {number}
*/
readSignedByte(): number;
/**
* Writes a signed byte (-128 to 127).
* @param {number} v
*/
writeSignedByte(v: number): void;
/**
* Reads a boolean (true or false).
* @returns {boolean}
*/
readBoolean(): boolean;
/**
* Writes a boolean (true or false).
* @param {boolean} v
*/
writeBoolean(v: boolean): void;
/**
* Reads a 16 bit (2 bytes) signed big-endian number.
* @returns {number}
*/
readShort(): number;
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShort(v: number): void;
/**
* Reads a 16 bit (2 bytes) signed little-endian number.
* @returns {number}
*/
readShortLE(): number;
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShortLE(v: number): void;
/**
* Reads a 16 bit (2 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedShort(): number;
/**
* Writes a 16 bit (2 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedShort(v: number): void;
/**
* Reads a 16 bit (2 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedShortLE(): number;
/**
* Writes a 16 bit (2 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedShortLE(v: number): void;
/**
* Reads a 24 bit (3 bytes) signed big-endian number.
* @returns {number}
*/
readTriad(): number;
/**
* Writes a 24 bit (3 bytes) signed big-endian number.
* @param {number} v
*/
writeTriad(v: number): void;
/**
* Reads a 24 bit (3 bytes) little-endian number.
* @returns {number}
*/
readTriadLE(): number;
/**
* Writes a 24 bit (3 bytes) signed little-endian number.
* @param {number} v
*/
writeTriadLE(v: number): void;
/**
* Reads a 24 bit (3 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedTriad(): number;
/**
* Writes a 24 bit (3 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedTriad(v: number): void;
/**
* Reads a 24 bit (3 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedTriadLE(): number;
/**
* Writes a 24 bit (3 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedTriadLE(v: number): void;
/**
* Reads a 32 bit (4 bytes) big-endian signed number.
* @returns {number}
*/
readInt(): number;
/**
* Writes a 32 bit (4 bytes) big-endian signed number.
* @param {number} v
*/
writeInt(v: number): void;
/**
* Reads a 32 bit (4 bytes) signed number.
* @returns {number}
*/
readIntLE(): number;
/**
* Writes a 32 bit (4 bytes) little-endian signed number.
* @param {number} v
*/
writeIntLE(v: number): void;
/**
* Reads a 32 bit (4 bytes) big-endian unsigned number.
* @returns {number}
*/
readUnsignedInt(): number;
/**
* Writes a 32 bit (4 bytes) big-endian unsigned number.
* @param {number} v
*/
writeUnsignedInt(v: number): void;
/**
* Reads a 32 bit (4 bytes) little-endian unsigned number.
* @returns {number}
*/
readUnsignedIntLE(): number;
/**
* Writes a 32 bit (4 bytes) little-endian unsigned number.
* @param {number} v
*/
writeUnsignedIntLE(v: number): void;
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloat(): number;
/**
* Writes a 32 bit (4 bytes) big-endian floating point number.
* @param {number} v
*/
writeFloat(v: number): void;
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloatLE(): number;
/**
* Writes a 32 bit (4 bytes) little-endian floating point number.
* @param {number} v
*/
writeFloatLE(v: number): void;
/**
* Returns a 64 bit (8 bytes) big-endian flating point number.
* @returns {number}
*/
readDouble(): number;
/**
* Writes a 64 bit (8 bytes) big-endian floating point number.
* @param {number} v
*/
writeDouble(v: number): void;
/**
* Returns a 64 bit (8 bytes) little-endian flating point number.
* @returns {number}
*/
readDoubleLE(): number;
/**
* Writes a 64 bit (8 bytes) little-endian floating point number.
* @param {number} v
*/
writeDoubleLE(v: number): void;
/**
* Returns a 64 bit (8 bytes) signed big-endian number.
* @returns {bigint}
*/
readLong(): bigint;
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLong(v: bigint): void;
/**
* Returns a 64 bit (8 bytes) signed little-endian number.
* @returns {bigint}
*/
readLongLE(): bigint;
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLongLE(v: bigint): void;
/**
* Returns a 64 bit (8 bytes) unsigned big-endian number.
* @returns {bigint}
*/
readUnsignedLong(): bigint;
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLong(v: bigint): void;
/**
* Returns a 64 bit (8 bytes) unsigned little-endian number.
* @returns {bigint}
*/
readUnsignedLongLE(): bigint;
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLongLE(v: bigint): void;
/**
* Reads a 32 bit (4 bytes) zigzag-encoded number.
* @returns {number}
*/
readVarInt(): number;
/**
* Writes a 32 bit (4 bytes) zigzag-encoded number.
* @param {number} v
*/
writeVarInt(v: number): void;
/**
* Reads a 32 bit unsigned number.
* @returns {number}
*/
readUnsignedVarInt(): number;
/**
* Writes a 32 bit unsigned number with variable-length.
* @param {number} v
*/
writeUnsignedVarInt(v: number): void;
/**
* Reads a 64 bit zigzag-encoded variable-length number.
* @returns {bigint}
*/
readVarLong(): bigint;
/**
* Writes a 64 bit unsigned zigzag-encoded number.
* @param {bigint} v
*/
writeVarLong(v: bigint): void;
/**
* Reads a 64 bit unsigned variable-length number.
* @returns {bigint}
*/
readUnsignedVarLong(): bigint;
/**
* Writes a 64 bit unsigned variable-length number.
* @param {bigint} v
*/
writeUnsignedVarLong(v: bigint): void;
/**
* Increases the write offset by the given length.
* @param {number} length
*/
private addOffset;
/**
* Returns whatever or not the read offset is at end of line.
* @returns {number}
*/
feof(): boolean;
/**
* Reads the remaining bytes and returns the buffer slice.
* @returns {Buffer}
*/
readRemaining(): Buffer;
/**
* Skips len bytes on the buffer.
* @param {number} len
*/
skip(len: number): void;
/**
* Returns the encoded buffer.
* @returns {Buffer}
*/
getBuffer(): Buffer;
/**
* Retuns the read index.
* @returns {number}
*/
getReadIndex(): number;
/**
* Returns the write index.
* @returns {number}
*/
getWriteIndex(): number;
/**
* Do read assertions, check if the read buffer is null.
* @param {number} byteLength
*/
private doReadAssertions;
/**
* Do read assertions, check if the read buffer is null.
* @param {number|bigint} num
* @param {number|bigint} minVal
* @param {number|bigint} maxVal
*/
private doWriteAssertions;
}
+18
-11
{
"name": "@jsprismarine/jsbinaryutils",
"version": "3.2.3",
"version": "4.2.3",
"description": "Basic binary data managing tool written in TypeScript.",
"main": "./dist/BinaryStream.js",
"types": "./dist/BinaryStream.d.ts",
"main": "./dist/cjs/index.cjs",
"exports": {
".": {
"types": "./dist/types/BinaryStream.d.ts",
"import": "./dist/esm/index.js",
"require": "./dist/cjs/index.cjs"
}
},
"types": "./dist/types/BinaryStream.d.ts",
"scripts": {

@@ -11,3 +18,3 @@ "test": "jest",

"prepublishOnly": "npm run test && npm run build",
"build": "tsc"
"build": "tsc --project tsconfig.esm.json & tsc --project tsconfig.cjs.json"
},

@@ -32,9 +39,9 @@ "files": [

"devDependencies": {
"@types/jest": "^27.0.2",
"@types/node": "14.11.5",
"husky": "^4.3.8",
"jest": "^27.3.1",
"prettier": "2.4.1",
"ts-jest": "^27.0.7",
"typescript": "4.0.3"
"@types/jest": "^29.2.5",
"@types/node": "^18.11.3",
"husky": "^8.0.3",
"jest": "^29.3.1",
"prettier": "2.8.1",
"ts-jest": "^29.0.3",
"typescript": "4.9.4"
},

@@ -41,0 +48,0 @@ "husky": {

/// <reference types="node" />
export default class BinaryStream {
private binary;
private buffer;
private readIndex;
private writeIndex;
/**
* Creates a new BinaryStream instance.
* @param {Buffer|null|undefined} buffer - The array or Buffer containing binary data.
* @param {number} offset - The initial pointer position.
*/
constructor(buffer?: Buffer, offset?: number);
/**
* Reads a slice of buffer by the given length.
* @param {number} len
*/
read(len: number): Buffer;
/**
* Appends a buffer to the main buffer.
* @param {Buffer|Uint8Array} buf
*/
write(buf: Uint8Array): void;
/**
* Reads an unsigned byte (0 to 255).
* @returns {number}
*/
readByte(): number;
/**
* Writes an unsigned byte (0 to 255).
* @param {number} v
*/
writeByte(v: number): void;
/**
* Reads a signed byte (-128 to 127).
* @returns {number}
*/
readSignedByte(): number;
/**
* Writes a signed byte (-128 to 127).
* @param {number} v
*/
writeSignedByte(v: number): void;
/**
* Reads a boolean (true or false).
* @returns {boolean}
*/
readBoolean(): boolean;
/**
* Writes a boolean (true or false).
* @param {boolean} v
*/
writeBoolean(v: boolean): void;
/**
* Reads a 16 bit (2 bytes) signed big-endian number.
* @returns {number}
*/
readShort(): number;
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShort(v: number): void;
/**
* Reads a 16 bit (2 bytes) signed little-endian number.
* @returns {number}
*/
readShortLE(): number;
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShortLE(v: number): void;
/**
* Reads a 16 bit (2 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedShort(): number;
/**
* Writes a 16 bit (2 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedShort(v: number): void;
/**
* Reads a 16 bit (2 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedShortLE(): number;
/**
* Writes a 16 bit (2 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedShortLE(v: number): void;
/**
* Reads a 24 bit (3 bytes) signed big-endian number.
* @returns {number}
*/
readTriad(): number;
/**
* Writes a 24 bit (3 bytes) signed big-endian number.
* @param {number} v
*/
writeTriad(v: number): void;
/**
* Reads a 24 bit (3 bytes) little-endian number.
* @returns {number}
*/
readTriadLE(): number;
/**
* Writes a 24 bit (3 bytes) signed little-endian number.
* @param {number} v
*/
writeTriadLE(v: number): void;
/**
* Reads a 24 bit (3 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedTriad(): number;
/**
* Writes a 24 bit (3 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedTriad(v: number): void;
/**
* Reads a 24 bit (3 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedTriadLE(): number;
/**
* Writes a 24 bit (3 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedTriadLE(v: number): void;
/**
* Reads a 32 bit (4 bytes) big-endian signed number.
* @returns {number}
*/
readInt(): number;
/**
* Writes a 32 bit (4 bytes) big-endian signed number.
* @param {number} v
*/
writeInt(v: number): void;
/**
* Reads a 32 bit (4 bytes) signed number.
* @returns {number}
*/
readIntLE(): number;
/**
* Writes a 32 bit (4 bytes) little-endian signed number.
* @param {number} v
*/
writeIntLE(v: number): void;
/**
* Reads a 32 bit (4 bytes) big-endian unsigned number.
* @returns {number}
*/
readUnsignedInt(): number;
/**
* Writes a 32 bit (4 bytes) big-endian unsigned number.
* @param {number} v
*/
writeUnsignedInt(v: number): void;
/**
* Reads a 32 bit (4 bytes) little-endian unsigned number.
* @returns {number}
*/
readUnsignedIntLE(): number;
/**
* Writes a 32 bit (4 bytes) little-endian unsigned number.
* @param {number} v
*/
writeUnsignedIntLE(v: number): void;
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloat(): number;
/**
* Writes a 32 bit (4 bytes) big-endian floating point number.
* @param {number} v
*/
writeFloat(v: number): void;
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloatLE(): number;
/**
* Writes a 32 bit (4 bytes) little-endian floating point number.
* @param {number} v
*/
writeFloatLE(v: number): void;
/**
* Returns a 64 bit (8 bytes) big-endian flating point number.
* @returns {number}
*/
readDouble(): number;
/**
* Writes a 64 bit (8 bytes) big-endian floating point number.
* @param {number} v
*/
writeDouble(v: number): void;
/**
* Returns a 64 bit (8 bytes) little-endian flating point number.
* @returns {number}
*/
readDoubleLE(): number;
/**
* Writes a 64 bit (8 bytes) little-endian floating point number.
* @param {number} v
*/
writeDoubleLE(v: number): void;
/**
* Returns a 64 bit (8 bytes) signed big-endian number.
* @returns {bigint}
*/
readLong(): bigint;
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLong(v: bigint): void;
/**
* Returns a 64 bit (8 bytes) signed little-endian number.
* @returns {bigint}
*/
readLongLE(): bigint;
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLongLE(v: bigint): void;
/**
* Returns a 64 bit (8 bytes) unsigned big-endian number.
* @returns {bigint}
*/
readUnsignedLong(): bigint;
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLong(v: bigint): void;
/**
* Returns a 64 bit (8 bytes) unsigned little-endian number.
* @returns {bigint}
*/
readUnsignedLongLE(): bigint;
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLongLE(v: bigint): void;
/**
* Reads a 32 bit (4 bytes) zigzag-encoded number.
* @returns {number}
*/
readVarInt(): number;
/**
* Writes a 32 bit (4 bytes) zigzag-encoded number.
* @param {number} v
*/
writeVarInt(v: number): void;
/**
* Reads a 32 bit unsigned number.
* @returns {number}
*/
readUnsignedVarInt(): number;
/**
* Writes a 32 bit unsigned number with variable-length.
* @param {number} v
*/
writeUnsignedVarInt(v: number): void;
/**
* Reads a 64 bit zigzag-encoded variable-length number.
* @returns {bigint}
*/
readVarLong(): bigint;
/**
* Writes a 64 bit unsigned zigzag-encoded number.
* @param {bigint} v
*/
writeVarLong(v: bigint): void;
/**
* Reads a 64 bit unsigned variable-length number.
* @returns {bigint}
*/
readUnsignedVarLong(): bigint;
/**
* Writes a 64 bit unsigned variable-length number.
* @param {bigint} v
*/
writeUnsignedVarLong(v: bigint): void;
/**
* Increases the write offset by the given length.
* @param {number} length
*/
private addOffset;
/**
* Returns whatever or not the read offset is at end of line.
* @returns {number}
*/
feof(): boolean;
/**
* Reads the remaining bytes and returns the buffer slice.
* @returns {Buffer}
*/
readRemaining(): Buffer;
/**
* Skips len bytes on the buffer.
* @param {number} len
*/
skip(len: number): void;
/**
* Returns the encoded buffer.
* @returns {Buffer}
*/
getBuffer(): Buffer;
/**
* Retuns the read index.
* @returns {number}
*/
getReadIndex(): number;
/**
* Returns the write index.
* @returns {number}
*/
getWriteIndex(): number;
/**
* Do read assertions, check if the read buffer is null.
* @param {number} byteLength
*/
private doReadAssertions;
/**
* Do read assertions, check if the read buffer is null.
* @param {number|bigint} num
* @param {number|bigint} minVal
* @param {number|bigint} maxVal
*/
private doWriteAssertions;
}
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = __importDefault(require("assert"));
class BinaryStream {
/**
* Creates a new BinaryStream instance.
* @param {Buffer|null|undefined} buffer - The array or Buffer containing binary data.
* @param {number} offset - The initial pointer position.
*/
constructor(buffer, offset = 0) {
this.binary = [];
this.buffer = null;
this.writeIndex = 0;
this.buffer = buffer ?? null; // Keep this instance for reading
this.readIndex = offset;
}
/**
* Reads a slice of buffer by the given length.
* @param {number} len
*/
read(len) {
this.doReadAssertions(len);
return this.buffer.slice(this.readIndex, (this.readIndex += len));
}
write(buf) {
this.binary.push(...buf);
this.writeIndex += buf.byteLength;
}
/**
* Reads an unsigned byte (0 to 255).
* @returns {number}
*/
readByte() {
this.doReadAssertions(1);
return this.buffer.readUInt8(this.readIndex++);
}
/**
* Writes an unsigned byte (0 to 255).
* @param {number} v
*/
writeByte(v) {
v &= 0xff;
this.binary[this.writeIndex++] = v;
}
/**
* Reads a signed byte (-128 to 127).
* @returns {number}
*/
readSignedByte() {
this.doReadAssertions(1);
return this.buffer.readInt8(this.readIndex++);
}
/**
* Writes a signed byte (-128 to 127).
* @param {number} v
*/
writeSignedByte(v) {
if (v < 0)
v = 0xff + v + 1;
this.binary[this.writeIndex++] = v & 0xff;
}
/**
* Reads a boolean (true or false).
* @returns {boolean}
*/
readBoolean() {
this.doReadAssertions(1);
return !!this.readByte();
}
/**
* Writes a boolean (true or false).
* @param {boolean} v
*/
writeBoolean(v) {
this.writeByte(+v);
}
/**
* Reads a 16 bit (2 bytes) signed big-endian number.
* @returns {number}
*/
readShort() {
this.doReadAssertions(2);
return this.buffer.readInt16BE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShort(v) {
this.doWriteAssertions(v, -32768, 32767);
this.writeByte(v >> 8);
this.writeByte(v);
}
/**
* Reads a 16 bit (2 bytes) signed little-endian number.
* @returns {number}
*/
readShortLE() {
this.doReadAssertions(2);
return this.buffer.readInt16LE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) signed big-endian number.
* @param {number} v
*/
writeShortLE(v) {
this.doWriteAssertions(v, -32768, 32767);
this.writeByte(v);
this.writeByte(v >> 8);
}
/**
* Reads a 16 bit (2 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedShort() {
this.doReadAssertions(2);
return this.buffer.readUInt16BE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedShort(v) {
this.doWriteAssertions(v, 0, 65535);
this.writeByte(v >>> 8);
this.writeByte(v);
}
/**
* Reads a 16 bit (2 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedShortLE() {
this.doReadAssertions(2);
return this.buffer.readUInt16LE(this.addOffset(2));
}
/**
* Writes a 16 bit (2 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedShortLE(v) {
this.doWriteAssertions(v, 0, 65535);
this.writeByte(v);
this.writeByte(v >>> 8);
}
/**
* Reads a 24 bit (3 bytes) signed big-endian number.
* @returns {number}
*/
readTriad() {
this.doReadAssertions(3);
return this.buffer.readIntBE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) signed big-endian number.
* @param {number} v
*/
writeTriad(v) {
this.doWriteAssertions(v, -8388608, 8388607);
this.writeByte((v & 0xff0000) >> 16); // msb
this.writeByte((v & 0x00ff00) >> 8); // mib
this.writeByte(v & 0x0000ff); // lsb
}
/**
* Reads a 24 bit (3 bytes) little-endian number.
* @returns {number}
*/
readTriadLE() {
this.doReadAssertions(3);
return this.buffer.readIntLE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) signed little-endian number.
* @param {number} v
*/
writeTriadLE(v) {
this.doWriteAssertions(v, -8388608, 8388607);
this.writeByte(v & 0x0000ff);
this.writeByte((v & 0x00ff00) >> 8);
this.writeByte((v & 0xff0000) >> 16);
}
/**
* Reads a 24 bit (3 bytes) unsigned big-endian number.
* @returns {number}
*/
readUnsignedTriad() {
this.doReadAssertions(3);
return this.buffer.readUIntBE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) unsigned big-endian number.
* @param {number} v
*/
writeUnsignedTriad(v) {
this.doWriteAssertions(v, 0, 16777215);
this.writeByte((v & 0xff0000) >>> 16); // msb
this.writeByte((v & 0x00ff00) >>> 8); // mib
this.writeByte(v & 0x0000ff); // lsb
}
/**
* Reads a 24 bit (3 bytes) unsigned little-endian number.
* @returns {number}
*/
readUnsignedTriadLE() {
this.doReadAssertions(3);
return this.buffer.readUIntLE(this.addOffset(3), 3);
}
/**
* Writes a 24 bit (3 bytes) unsigned little-endian number.
* @param {number} v
*/
writeUnsignedTriadLE(v) {
this.doWriteAssertions(v, 0, 16777215);
this.writeByte(v & 0x0000ff);
this.writeByte((v & 0x00ff00) >>> 8);
this.writeByte((v & 0xff0000) >>> 16);
}
/**
* Reads a 32 bit (4 bytes) big-endian signed number.
* @returns {number}
*/
readInt() {
this.doReadAssertions(4);
return this.buffer.readInt32BE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) big-endian signed number.
* @param {number} v
*/
writeInt(v) {
if (v < 0)
v = v & (0xffffffff + v + 1);
this.doWriteAssertions(v, -2147483648, 2147483647);
this.writeByte(v >> 24);
this.writeByte(v >> 16);
this.writeByte(v >> 8);
this.writeByte(v);
}
/**
* Reads a 32 bit (4 bytes) signed number.
* @returns {number}
*/
readIntLE() {
this.doReadAssertions(4);
return this.buffer.readIntLE(this.addOffset(4), 4);
}
/**
* Writes a 32 bit (4 bytes) little-endian signed number.
* @param {number} v
*/
writeIntLE(v) {
if (v < 0)
v = v & (0xffffffff + v + 1);
this.doWriteAssertions(v, -2147483648, 2147483647);
this.writeByte(v);
this.writeByte(v >> 8);
this.writeByte(v >> 16);
this.writeByte(v >> 24);
}
/**
* Reads a 32 bit (4 bytes) big-endian unsigned number.
* @returns {number}
*/
readUnsignedInt() {
this.doReadAssertions(4);
return this.buffer.readUInt32BE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) big-endian unsigned number.
* @param {number} v
*/
writeUnsignedInt(v) {
this.doWriteAssertions(v, 0, 4294967295);
this.writeByte(v >>> 24);
this.writeByte(v >>> 16);
this.writeByte(v >>> 8);
this.writeByte(v);
}
/**
* Reads a 32 bit (4 bytes) little-endian unsigned number.
* @returns {number}
*/
readUnsignedIntLE() {
this.doReadAssertions(4);
return this.buffer.readUInt32LE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) little-endian unsigned number.
* @param {number} v
*/
writeUnsignedIntLE(v) {
this.doWriteAssertions(v, 0, 4294967295);
this.writeByte(v);
this.writeByte(v >>> 8);
this.writeByte(v >>> 16);
this.writeByte(v >>> 24);
}
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloat() {
this.doReadAssertions(4);
return this.buffer.readFloatBE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) big-endian floating point number.
* @param {number} v
*/
writeFloat(v) {
this.doWriteAssertions(v, -3.4028234663852886e38, +3.4028234663852886e38);
this.write(new Uint8Array(new Float32Array([v]).buffer).reverse());
}
/**
* Returns a 32 bit (4 bytes) big-endian flating point number.
* @returns {number}
*/
readFloatLE() {
this.doReadAssertions(4);
return this.buffer.readFloatLE(this.addOffset(4));
}
/**
* Writes a 32 bit (4 bytes) little-endian floating point number.
* @param {number} v
*/
writeFloatLE(v) {
this.doWriteAssertions(v, -3.4028234663852886e38, +3.4028234663852886e38);
this.write(new Uint8Array(new Float32Array([v]).buffer));
}
/**
* Returns a 64 bit (8 bytes) big-endian flating point number.
* @returns {number}
*/
readDouble() {
this.doReadAssertions(8);
return this.buffer.readDoubleBE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) big-endian floating point number.
* @param {number} v
*/
writeDouble(v) {
this.doWriteAssertions(v, -1.7976931348623157e308, +1.7976931348623157e308);
this.write(new Uint8Array(new Float64Array([v]).buffer).reverse());
}
/**
* Returns a 64 bit (8 bytes) little-endian flating point number.
* @returns {number}
*/
readDoubleLE() {
this.doReadAssertions(8);
return this.buffer.readDoubleLE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) little-endian floating point number.
* @param {number} v
*/
writeDoubleLE(v) {
this.doWriteAssertions(v, -1.7976931348623157e308, +1.7976931348623157e308);
this.write(new Uint8Array(new Float64Array([v]).buffer));
}
/**
* Returns a 64 bit (8 bytes) signed big-endian number.
* @returns {bigint}
*/
readLong() {
this.doReadAssertions(8);
return this.buffer.readBigInt64BE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLong(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex + 7] = lo;
this.binary[this.writeIndex + 6] = lo >> 8;
this.binary[this.writeIndex + 5] = lo >> 16;
this.binary[this.writeIndex + 4] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex + 3] = hi;
this.binary[this.writeIndex + 2] = hi >> 8;
this.binary[this.writeIndex + 1] = hi >> 16;
this.binary[this.writeIndex] = hi >> 24;
this.writeIndex += 8;
}
/**
* Returns a 64 bit (8 bytes) signed little-endian number.
* @returns {bigint}
*/
readLongLE() {
this.doReadAssertions(8);
return this.buffer.readBigInt64LE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) signed big-endian number.
* @param {bigint} v
*/
writeLongLE(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex++] = lo;
this.binary[this.writeIndex++] = lo >> 8;
this.binary[this.writeIndex++] = lo >> 16;
this.binary[this.writeIndex++] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex++] = hi;
this.binary[this.writeIndex++] = hi >> 8;
this.binary[this.writeIndex++] = hi >> 16;
this.binary[this.writeIndex++] = hi >> 24;
}
/**
* Returns a 64 bit (8 bytes) unsigned big-endian number.
* @returns {bigint}
*/
readUnsignedLong() {
this.doReadAssertions(8);
return this.buffer.readBigUInt64BE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLong(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex + 7] = lo;
this.binary[this.writeIndex + 6] = lo >> 8;
this.binary[this.writeIndex + 5] = lo >> 16;
this.binary[this.writeIndex + 4] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex + 3] = hi;
this.binary[this.writeIndex + 2] = hi >> 8;
this.binary[this.writeIndex + 1] = hi >> 16;
this.binary[this.writeIndex] = hi >> 24;
this.writeIndex += 8;
}
/**
* Returns a 64 bit (8 bytes) unsigned little-endian number.
* @returns {bigint}
*/
readUnsignedLongLE() {
this.doReadAssertions(8);
return this.buffer.readBigUInt64LE(this.addOffset(8));
}
/**
* Writes a 64 bit (8 bytes) unsigned big-endian number.
* @param {bigint} v
*/
writeUnsignedLongLE(v) {
const lo = Number(v & BigInt(0xffffffff));
this.binary[this.writeIndex++] = lo;
this.binary[this.writeIndex++] = lo >> 8;
this.binary[this.writeIndex++] = lo >> 16;
this.binary[this.writeIndex++] = lo >> 24;
const hi = Number((v >> BigInt(32)) & BigInt(0xffffffff));
this.binary[this.writeIndex++] = hi;
this.binary[this.writeIndex++] = hi >> 8;
this.binary[this.writeIndex++] = hi >> 16;
this.binary[this.writeIndex++] = hi >> 24;
}
/**
* Reads a 32 bit (4 bytes) zigzag-encoded number.
* @returns {number}
*/
readVarInt() {
const raw = this.readUnsignedVarInt();
const temp = (((raw << 63) >> 63) ^ raw) >> 1;
return temp ^ (raw & (1 << 63));
}
/**
* Writes a 32 bit (4 bytes) zigzag-encoded number.
* @param {number} v
*/
writeVarInt(v) {
v = (v << 32) >> 32;
return this.writeUnsignedVarInt((v << 1) ^ (v >> 31));
}
/**
* Reads a 32 bit unsigned number.
* @returns {number}
*/
readUnsignedVarInt() {
assert_1.default(this.buffer != null, 'Reading on empty buffer!');
let value = 0;
for (let i = 0; i <= 28; i += 7) {
if (typeof this.buffer[this.readIndex] === 'undefined') {
throw new Error('No bytes left in buffer');
}
let b = this.readByte();
value |= (b & 0x7f) << i;
if ((b & 0x80) === 0) {
return value;
}
}
throw new Error('VarInt did not terminate after 5 bytes!');
}
/**
* Writes a 32 bit unsigned number with variable-length.
* @param {number} v
*/
writeUnsignedVarInt(v) {
while ((v & 0xffffff80) !== 0) {
this.writeByte((v & 0x7f) | 0x80);
v >>>= 7;
}
this.writeByte(v & 0x7f);
}
/**
* Reads a 64 bit zigzag-encoded variable-length number.
* @returns {bigint}
*/
readVarLong() {
const raw = this.readUnsignedVarLong();
return raw >> 1n;
}
/**
* Writes a 64 bit unsigned zigzag-encoded number.
* @param {bigint} v
*/
writeVarLong(v) {
return this.writeUnsignedVarLong((v << 1n) ^ (v >> 63n));
}
/**
* Reads a 64 bit unsigned variable-length number.
* @returns {bigint}
*/
readUnsignedVarLong() {
let value = 0n;
for (let i = 0; i <= 63; i += 7) {
if (this.feof()) {
throw new Error('No bytes left in buffer');
}
const b = this.readByte();
value |= (BigInt(b) & 0x7fn) << BigInt(i);
if ((b & 0x80) === 0) {
return value;
}
}
throw new Error('VarLong did not terminate after 10 bytes!');
}
/**
* Writes a 64 bit unsigned variable-length number.
* @param {bigint} v
*/
writeUnsignedVarLong(v) {
for (let i = 0; i < 10; ++i) {
if (v >> 7n !== 0n) {
this.writeByte(Number(v | 0x80n));
}
else {
this.writeByte(Number(v & 0x7fn));
break;
}
v >>= 7n;
}
}
/**
* Increases the write offset by the given length.
* @param {number} length
*/
addOffset(length) {
return (this.readIndex += length) - length;
}
/**
* Returns whatever or not the read offset is at end of line.
* @returns {number}
*/
feof() {
if (!this.buffer)
throw new Error('Buffer is write only!');
return typeof this.buffer[this.readIndex] === 'undefined';
}
/**
* Reads the remaining bytes and returns the buffer slice.
* @returns {Buffer}
*/
readRemaining() {
if (!this.buffer)
throw new Error('Buffer is write only!');
const buf = this.buffer.slice(this.readIndex);
this.readIndex = this.buffer.byteLength;
return buf;
}
/**
* Skips len bytes on the buffer.
* @param {number} len
*/
skip(len) {
assert_1.default(Number.isInteger(len), 'Cannot skip a float amount of bytes');
this.readIndex += len;
}
/**
* Returns the encoded buffer.
* @returns {Buffer}
*/
getBuffer() {
return this.buffer !== null ? this.buffer : Buffer.from(this.binary);
}
/**
* Retuns the read index.
* @returns {number}
*/
getReadIndex() {
return this.readIndex;
}
/**
* Returns the write index.
* @returns {number}
*/
getWriteIndex() {
return this.writeIndex;
}
/**
* Do read assertions, check if the read buffer is null.
* @param {number} byteLength
*/
doReadAssertions(byteLength) {
assert_1.default(this.buffer !== null, 'Cannot read without buffer data!');
assert_1.default(this.buffer.byteLength >= byteLength, 'Cannot read without buffer data!');
}
/**
* Do read assertions, check if the read buffer is null.
* @param {number|bigint} num
* @param {number|bigint} minVal
* @param {number|bigint} maxVal
*/
doWriteAssertions(num, minVal, maxVal) {
assert_1.default(num >= minVal && num <= maxVal, `Value out of bounds: value=${num}, min=${minVal}, max=${maxVal}`);
}
}
exports.default = BinaryStream;