/** * A Promise, AsyncIterable, or a synchronous value. */ export type AsyncState = Promise | AsyncIterable | T; /** * Type guard to check if a value is a Promise. */ export function isPromise(value: unknown): value is Promise { return ( value != null && typeof (value as Promise).then === 'function' && typeof (value as Promise).catch === 'function' ); } /** * Type guard to check if a value is an AsyncIterable. * This includes AsyncGenerators. */ export function isAsyncIterable(value: unknown): value is AsyncIterable { return value != null && typeof (value as AsyncIterable)[Symbol.asyncIterator] === 'function'; }