// Web Streams API types are now available globally via DOM types in tsconfig class TypeTransformer implements Transformer { private buffer?: O[]; private doneCallback?: (args0: readonly O[]) => Promise; private transformFn: (arg0: I) => O; constructor( transformFn: (arg0: I) => O, doneCallback?: (args0: readonly O[]) => Promise ) { this.transformFn = transformFn; this.doneCallback = doneCallback; this.buffer = doneCallback ? [] : undefined; } async transform(obj: I, controller: TransformStreamDefaultController) { const val = this.transformFn(obj); if (val) { controller.enqueue(val); this.buffer?.push(val); } } async flush(controller: TransformStreamDefaultController) { await this.doneCallback?.(this.buffer ?? []); controller.terminate(); } } export class RespTransformStream extends TransformStream { constructor( transformFn: (arg0: I) => O, doneCallback?: (args0: readonly O[]) => Promise ) { super(new TypeTransformer(transformFn, doneCallback)); } }