@jsprismarine/jsbinaryutils
Advanced tools
| /// <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; |
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
95700
178.47%8
100%1935
99.07%1
Infinity%1
Infinity%