Skip to content

Commit

Permalink
StreamFn.events Promise[]
Browse files Browse the repository at this point in the history
  • Loading branch information
rafasofizada committed Oct 20, 2022
1 parent 42ddb03 commit 5a20470
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 5 deletions.
11 changes: 10 additions & 1 deletion utils/ByteLengthStreamFn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@ export function ByteLengthStreamFn(limit: number = Infinity): StreamFn<ByteLengt

const ee = new TypeSafeEventEmitter<ByteLengthStreamEvents>();

const events = {
[resultEvent]: new Promise<ByteLengthStreamEvents[typeof resultEvent]>((resolve) => {
ee.once(resultEvent, resolve);
}),
[limitEvent]: new Promise<ByteLengthStreamEvents[typeof limitEvent]>((resolve) => {
ee.on(limitEvent, resolve);
}),
}

async function* generator (this: unknown, source: Readable) {
for await (const chunk of source) {
byteLength += chunk.byteLength;
Expand All @@ -32,5 +41,5 @@ export function ByteLengthStreamFn(limit: number = Infinity): StreamFn<ByteLengt

const stream = Duplex.from(generator);

return { stream, once: ee.once.bind(ee) };
return { stream, events };
}
6 changes: 3 additions & 3 deletions utils/FileFieldController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,14 @@ export class FileFieldController {
}

private byteLength(): { stream: Duplex, byteLength: Promise<number> } {
const { stream, once } = ByteLengthStreamFn(this.config.maxFileByteLength);
const { stream, events } = ByteLengthStreamFn(this.config.maxFileByteLength);

return {
stream,
byteLength: new Promise((resolve, reject) => {
once('byteLength', resolve);
events.byteLength.then(resolve);
// TODO: Error
once('limit', (payload) => reject(payload))
events.limit.then(reject);
})
}
}
Expand Down
2 changes: 1 addition & 1 deletion utils/StreamFn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ import { EventConfig, TypeSafeEventEmitter } from "./TypeSafeEventEmitter";

export type StreamFn<EC extends EventConfig> = {
stream: Duplex,
once: TypeSafeEventEmitter<EC>['once']
events: { [E in keyof EC]: Promise<EC[E]> }
};
4 changes: 4 additions & 0 deletions utils/TypeSafeEventEmitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ export class TypeSafeEventEmitter<EC extends EventConfig> {
}
}

on<E extends keyof EC>(event: E, listener: (payload: EC[E]) => void): void {
this.ee.on(event as string, listener);
}

once<E extends keyof EC>(event: E, listener: (payload: EC[E]) => void): void {
this.ee.once(event as string, listener);
}
Expand Down

0 comments on commit 5a20470

Please sign in to comment.