1
0
mirror of https://github.com/twirl/The-API-Book.git synced 2025-05-13 21:26:26 +02:00

59 lines
1.4 KiB
TypeScript
Raw Normal View History

2023-08-14 17:41:39 +03:00
/**
* @fileoverview
* Various helpers for testing the components
*/
2023-07-30 15:25:21 +03:00
import { IEventEmitter } from '../src/interfaces/common';
export async function waitForEvents<
EventList extends Record<string, any>,
Type extends Extract<keyof EventList, string>
>(
emitter: IEventEmitter<EventList>,
type: Type,
callback: () => void,
n: number = 1
): Promise<Array<EventList[Type]>> {
let counter = 0;
const result = [];
const disposers = [];
return new Promise((resolve) => {
const disposer = emitter.on(type, (event) => {
result.push(event);
if (++counter >= n) {
setTimeout(() => {
for (const disposer of disposers) {
disposer.off();
}
resolve(result);
}, 0);
}
});
disposers.push(disposer);
callback();
});
}
export function defer<T>() {
let resolve: (result: T) => void;
let reject: (error: any) => void;
const promise = new Promise<T>((nestedResolve, nestedReject) => {
resolve = nestedResolve;
});
return {
resolve,
reject,
promise
};
}
export function omitUndefined<T>(obj: T): Partial<T> {
const result: Partial<T> = {};
for (const [k, v] of Object.entries(obj)) {
if (v !== undefined) {
result[k] = v;
}
}
return result;
}