| 88 | }); |
| 89 | |
| 90 | export const traceWhile = <T = any>( |
| 91 | name: string, |
| 92 | test: (a: T) => boolean, |
| 93 | options?: { orComplete?: boolean } |
| 94 | ) => (source$: Observable<T>) => new Observable<T>(subscriber => { |
| 95 | let traceSubscription: Subscription | undefined; |
| 96 | return source$.pipe( |
| 97 | tap( |
| 98 | a => { |
| 99 | if (test(a)) { |
| 100 | traceSubscription = traceSubscription || trace$(name).subscribe(); |
| 101 | } else { |
| 102 | if (traceSubscription) { |
| 103 | traceSubscription.unsubscribe(); |
| 104 | } |
| 105 | |
| 106 | traceSubscription = undefined; |
| 107 | } |
| 108 | }, |
| 109 | () => undefined, |
| 110 | () => options && options.orComplete && traceSubscription && traceSubscription.unsubscribe() |
| 111 | ) |
| 112 | ).subscribe(subscriber); |
| 113 | }); |
| 114 | |
| 115 | export const traceUntilComplete = <T = any>(name: string) => (source$: Observable<T>) => new Observable<T>(subscriber => { |
| 116 | const traceSubscription = trace$(name).subscribe(); |