import { filter, count, type Observable, takeUntil, timer } from 'rxjs'; export const getObservableValues = async >( observable$: Observable, cb: (value: T) => U = (value) => value as unknown as U, ): Promise => { const terminator$ = timer(1); const data: U[] = []; await observable$.pipe(takeUntil(terminator$)).forEach((value) => { const entry = cb(value); data.push(entry); }); return data; }; export const getObservableCount = async ( observable$: Observable, filterFn: (value: T) => boolean = () => true, ): Promise => { let result = 0; const terminator$ = timer(1); await observable$ .pipe(takeUntil(terminator$)) .pipe(filter(filterFn)) .pipe(count()) .forEach((val) => { result = val; }); return result; };