import type { RxJsFacade } from '@slickgrid-universal/common'; import { EMPTY, firstValueFrom, iif, isObservable, Observable, of, Subject, switchMap, type ObservableInput, type ObservedValueOf, type OperatorFunction, } from 'rxjs'; // oxlint-disable-next-line extensions import { takeUntil } from 'rxjs/operators'; export class RxJsResource implements RxJsFacade { readonly pluginName = 'RxJsResource'; /** * The same Observable instance returned by any call to without a scheduler. * This returns the EMPTY constant from RxJS */ get EMPTY(): Observable { return EMPTY; } /** Simple method to create an Observable */ createObservable(): Observable { return new Observable(); } /** Simple method to create a Subject */ createSubject(): Subject { return new Subject(); } /** Converts an observable to a promise by subscribing to the observable, and returning a promise that will resolve * as soon as the first value arrives from the observable. The subscription will then be closed. */ firstValueFrom(source: Observable): Promise { return firstValueFrom(source); } iif(condition: () => boolean, trueResult?: any, falseResult?: any): Observable { return iif(condition, trueResult, falseResult); } /** Tests to see if the object is an RxJS Observable */ isObservable(obj: any): boolean { return isObservable(obj); } /** Converts the arguments to an observable sequence. */ of(...value: any): Observable { return of(...value); } /** Projects each source value to an Observable which is merged in the output Observable, emitting values only from the most recently projected Observable. */ switchMap>(project: (value: T, index: number) => O): OperatorFunction> { return switchMap(project); } /** Emits the values emitted by the source Observable until a `notifier` Observable emits a value. */ takeUntil(notifier: Observable): any { return takeUntil(notifier); } }