Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 48x 48x 3x 2x 284x 61x 9x 9x 9x 60x | import { Logger } from 'ts-log'; import { Observable, from, groupBy, map, merge, mergeMap, share, tap } from 'rxjs'; interface NewAndStoredMulticast<T, K> { new$: Observable<T>; stored$: Observable<T[]>; storedFilterfn?: (value: T, index: number, array: T[]) => boolean; logger: Logger; logStringfn?: (stored: T[]) => string; groupByFn: (value: T) => K; } export const newAndStoredMulticast = <T, K>({ new$, stored$, logger, storedFilterfn = () => true, logStringfn = () => '', groupByFn }: NewAndStoredMulticast<T, K>) => merge<Array<T>>( new$.pipe(map((evt) => evt)), stored$.pipe( tap((stored) => logger.debug(logStringfn(stored))), map((stored) => stored.filter(storedFilterfn)), mergeMap((stored) => from(stored)) ) ).pipe( groupBy(groupByFn), map((group$) => group$.pipe(share())), share() ); |