s3-node-stream-example/buffer.manager.ts

34 lines
820 B
TypeScript

export class BufferManager {
private buffer: Buffer;
constructor(
private readonly maxBufferSize: number,
) {
this.buffer = Buffer.alloc(0);
}
hasRoom(chunk: Buffer): boolean {
return chunk.length + this.buffer.length <= this.maxBufferSize;
}
append(chunk: Buffer) {
if (!this.hasRoom(chunk)) {
throw new Error('Buffer overflow - data will be lost. Check hasRoom before calling');
}
this.buffer = Buffer.concat([this.buffer, chunk]);
}
appendAndGetCompletedBuffer(chunk: Buffer): Buffer {
const fillSize = this.maxBufferSize - this.buffer.length;
const completedBuffer = Buffer.concat([this.buffer, chunk.slice(0, fillSize)]);
this.buffer = Buffer.from(chunk.slice(fillSize, chunk.length)); // ??? could be an issue
return completedBuffer;
}
}