export const isDefined = (t: T | undefined): t is T => t !== undefined; export const promiseTimeout = (sleep: number) => new Promise((resolve) => setTimeout(resolve, sleep)); export interface PromiseWithResolvers { resolve: (t: T | PromiseLike) => void; reject: (reason?: unknown) => void; promise: Promise; } export function withResolvers(): PromiseWithResolvers { let resolve: (t: T | PromiseLike) => void = () => {}; let reject: (reason?: unknown) => void = () => {}; const promise = new Promise((r, j) => { resolve = r; reject = j; }); return { promise, resolve, reject }; } export function withResolved(t: T): PromiseWithResolvers { const resolvers = withResolvers(); resolvers.resolve(t); return resolvers; } declare global { interface ReadableStream { [Symbol.asyncIterator](): AsyncIterator; } }