import { TypedEmitter } from "tiny-typed-emitter"; import type { ListenerSignature } from "tiny-typed-emitter"; import type { schémaFonctionOublier, schémaFonctionSuivi } from "./types.js"; export const estUnePromesse = (x: unknown): x is Promise => { return !!x && !!(x as Promise).then && !!(x as Promise).finally; }; export const appelerLorsque = < L extends ListenerSignature, U extends keyof L, >({ émetteur, événement, f, }: { émetteur: TypedEmitter; événement: U; f: schémaFonctionSuivi>; }): schémaFonctionOublier => { const promesses = new Set>(); // @ts-expect-error à voir const fFinale: L[U] = (...args) => { const p = f(...(args as [Parameters])); if (estUnePromesse(p)) { promesses.add(p); p.finally(() => promesses.delete(p)); } return p; }; émetteur.on(événement, fFinale); return async () => { émetteur.off(événement, fFinale); await Promise.allSettled(promesses); }; };