export function createPromise(): { resolver: (resolvedData: T | PromiseLike) => void; promise: Promise; } { let resolver: (resolvedData: T | PromiseLike) => void = () => {}; const promise = new Promise((_resolver) => (resolver = _resolver)); return { resolver, promise, }; } export function createPromiseFn(): { resolver: (resolvedData: T | PromiseLike) => void; fn: () => Promise; } { const { resolver, promise } = createPromise(); return { resolver, fn: () => promise, }; }