From 603fcb565343f81bd2f38aabdc143611eff8cb03 Mon Sep 17 00:00:00 2001 From: Iwo Plaza <iwoplaza@gmail.com> Date: Thu, 18 Jul 2024 14:53:11 +0200 Subject: [PATCH] [Fix] Invalid typing for BufferReader/Writer options. (#17) --- src/io/bufferIOBase.ts | 21 +++++++++------------ src/io/bufferReaderWriter.test.ts | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/io/bufferIOBase.ts b/src/io/bufferIOBase.ts index 9da3e85..d0fa8e7 100644 --- a/src/io/bufferIOBase.ts +++ b/src/io/bufferIOBase.ts @@ -5,11 +5,11 @@ export type BufferIOOptions = { /** * @default 0 */ - byteOffset: number; + byteOffset?: number; /** * @default 'system' */ - endianness: Endianness | 'system'; + endianness?: Endianness | 'system'; }; export class BufferIOBase { @@ -25,7 +25,13 @@ export class BufferIOBase { public readonly endianness: Endianness; constructor(buffer: ArrayBufferLike, options?: BufferIOOptions) { - this.byteOffset = options?.byteOffset ?? 0; + const { byteOffset = 0, endianness = 'system' } = options ?? {}; + + this.byteOffset = byteOffset; + + const systemEndianness = getSystemEndianness(); + this.endianness = endianness === 'system' ? systemEndianness : endianness; + this.switchEndianness = this.endianness !== systemEndianness; if (typeof Buffer !== 'undefined' && buffer instanceof Buffer) { // Getting rid of the outer shell, which causes the Uint8Array line to create a copy, instead of a view. @@ -40,15 +46,6 @@ export class BufferIOBase { this.helperUint32View = new Uint32Array(helperBuffer); this.helperFloatView = new Float32Array(helperBuffer); this.helperByteView = new Uint8Array(helperBuffer); - - const systemEndianness = getSystemEndianness(); - - this.endianness = - !options || options.endianness === 'system' - ? systemEndianness - : options.endianness; - - this.switchEndianness = this.endianness !== systemEndianness; } get currentByteOffset() { diff --git a/src/io/bufferReaderWriter.test.ts b/src/io/bufferReaderWriter.test.ts index 80cecae..60858ab 100644 --- a/src/io/bufferReaderWriter.test.ts +++ b/src/io/bufferReaderWriter.test.ts @@ -2,8 +2,29 @@ import { describe, it, expect } from 'vitest'; import { BufferWriter } from './bufferWriter'; import { BufferReader } from './bufferReader'; import { randBetween, randIntBetween } from '../test/random'; +import { getSystemEndianness } from '../util'; describe('BufferWriter/BufferReader', () => { + it('parses options correctly', () => { + const buffer = Buffer.alloc(16); + + const noOptions = new BufferWriter(buffer); + expect(noOptions.endianness).toEqual(getSystemEndianness()); + expect(noOptions.currentByteOffset).toEqual(0); + + const withByteOffset = new BufferWriter(buffer, { byteOffset: 16 }); + expect(withByteOffset.endianness).toEqual(getSystemEndianness()); + expect(withByteOffset.currentByteOffset).toEqual(16); + + const withBigEndian = new BufferWriter(buffer, { endianness: 'big' }); + expect(withBigEndian.endianness).toEqual('big'); + expect(withBigEndian.currentByteOffset).toEqual(0); + + const withLittleEndian = new BufferWriter(buffer, { endianness: 'little' }); + expect(withLittleEndian.endianness).toEqual('little'); + expect(withLittleEndian.currentByteOffset).toEqual(0); + }); + it('should encode and decode int sequence', () => { // Generating random int sequence const intList = [];