import {Observable} from 'rxjs'; import {first} from 'rxjs/operators'; import {lastValueFrom} from './lastValueFrom'; export interface FirstValueFromConfig { defaultValue: T; } export function firstValueFrom( signal: AbortSignal, source: Observable, config: FirstValueFromConfig, ): Promise; export function firstValueFrom( signal: AbortSignal, source: Observable, ): Promise; /** * Like original `firstValueFrom` from RxJS, but accepts `AbortSignal`. When * that signal is aborted, unsubscribes from the observable and throws * `AbortError`. */ export function firstValueFrom( signal: AbortSignal, source: Observable, config?: FirstValueFromConfig, ): Promise { return typeof config === 'object' ? lastValueFrom(signal, source.pipe(first()), config) : lastValueFrom(signal, source.pipe(first())); }