type AwaitableCreator = ( target: any, ...args: any[] ) => Promise | undefined; /** @internal */ export const awaitableCreators = [] as AwaitableCreator[]; /** * Create a promise for an object. * @param emitter The emitter to listen on 'error' event for rejection, and * given event types for fulfillment. * @param type A string or an array of string of event types for fulfillment. * @param errorEmitters Other emitters to listen on 'error' event for * rejection. */ export function awaitable(target: any, ...args: any[]): Promise { for (let creator of awaitableCreators) { let promise = creator(target, ...args); if (promise) { return promise; } } throw new TypeError( 'Cannot create awaitable from the target object with given arguments', ); }