diff --git a/packages/util/src/FlexibleBuffer.ts b/packages/util/src/FlexibleBuffer.ts index 1e5f3d1f8..9c47ed0d0 100644 --- a/packages/util/src/FlexibleBuffer.ts +++ b/packages/util/src/FlexibleBuffer.ts @@ -13,11 +13,17 @@ interface IFlexibleBuffer { } export abstract class FlexibleBuffer implements IFlexibleBuffer { - static flexible() { + static auto(size?: number | null): FlexibleBuffer { + return typeof size === "number" + ? new BufferFlexibleBuffer(size) + : new ArrayFlexibleBuffer(); + } + + static flexible(): FlexibleBuffer { return new ArrayFlexibleBuffer(); } - static fixed(size: number) { + static fixed(size: number): FlexibleBuffer { return new BufferFlexibleBuffer(size); } @@ -29,15 +35,15 @@ export abstract class FlexibleBuffer implements IFlexibleBuffer { abstract toJSON(): IBufferJson } -export class BufferFlexibleBuffer extends FlexibleBuffer { - private readonly _buffer: Buffer; - private _index: number = 0; - +class BufferFlexibleBuffer extends FlexibleBuffer { constructor(size: number) { super(); this._buffer = Buffer.alloc(size); } + private readonly _buffer: Buffer; + private _index: number = 0; + get length(): number { return this._index; } @@ -66,7 +72,7 @@ export class BufferFlexibleBuffer extends FlexibleBuffer { } } -export class ArrayFlexibleBuffer extends FlexibleBuffer { +class ArrayFlexibleBuffer extends FlexibleBuffer { private readonly _buffer: any[] = []; private _length = 0; diff --git a/packages/util/src/index.ts b/packages/util/src/index.ts index 4d9ad61a5..be73f9540 100644 --- a/packages/util/src/index.ts +++ b/packages/util/src/index.ts @@ -3,11 +3,10 @@ import "source-map-support/register"; export * from "./BitField"; export * from "./config"; export * from "./FileResolver"; +export * from "./FlexibleBuffer"; export * from "./glob"; export * from "./JSON"; export * from "./ModPermissionsBF"; export * from "./utils"; -export { FlexibleBuffer } from "./FlexibleBuffer"; - export const version: string = "__PACKAGE_VERSION__"; diff --git a/packages/util/src/test/FlexibleBuffer.test.ts b/packages/util/src/test/FlexibleBuffer.test.ts index 81364880e..002bd6a0c 100644 --- a/packages/util/src/test/FlexibleBuffer.test.ts +++ b/packages/util/src/test/FlexibleBuffer.test.ts @@ -1,28 +1,22 @@ import assert from "assert"; import test, { suite } from "node:test"; -import { ArrayFlexibleBuffer, BufferFlexibleBuffer, FlexibleBuffer } from "../FlexibleBuffer"; +import { FlexibleBuffer } from "../FlexibleBuffer"; + +const array = [1, 2, 3]; suite("Array FlexibleBuffer", () => { const buffer = FlexibleBuffer.flexible(); - test("Instance must be ArrayBased", () => { - assert(buffer instanceof ArrayFlexibleBuffer); - }); - test("Allow push oversized", () => { - buffer.push([1, 2, 3]); - assert(buffer.length === 3); + buffer.push(array); + assert.strictEqual(buffer.length, array.length); }); }); suite("Buffer FlexibleBuffer", () => { - const buffer = FlexibleBuffer.fixed(0); - - test("Instance must be BufferBased", () => { - assert(buffer instanceof BufferFlexibleBuffer); - }); + const buffer = FlexibleBuffer.fixed(1); test("Deny push oversized", () => { - assert.throws(() => buffer.push([0])); + assert.throws(() => buffer.push(array)); }); });