@fncts/observable 0.0.25 → 0.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Observable/api/raceWith.d.ts +0 -1
- package/Observable/api/repeatWhen.d.ts +1 -1
- package/Observable/api/share.d.ts +1 -1
- package/Observable/api.d.ts +4 -4
- package/Observable/definition.d.ts +1 -4
- package/Observable.d.ts +16 -16
- package/ObservableRef.d.ts +2 -2
- package/Operator.d.ts +3 -3
- package/Subject.d.ts +16 -7
- package/Subscriber.d.ts +23 -8
- package/Subscription.d.ts +2 -2
- package/_cjs/Action.cjs +2 -3
- package/_cjs/Action.cjs.map +1 -1
- package/_cjs/AnimationFrameAction.cjs +3 -3
- package/_cjs/AnimationFrameAction.cjs.map +1 -1
- package/_cjs/AnimationFrameScheduler.cjs +3 -3
- package/_cjs/AnimationFrameScheduler.cjs.map +1 -1
- package/_cjs/AsyncAction.cjs +5 -5
- package/_cjs/AsyncAction.cjs.map +1 -1
- package/_cjs/AsyncScheduler.cjs +3 -5
- package/_cjs/AsyncScheduler.cjs.map +1 -1
- package/_cjs/BehaviorSubject.cjs +3 -3
- package/_cjs/BehaviorSubject.cjs.map +1 -1
- package/_cjs/Notification.cjs.map +1 -1
- package/_cjs/Observable/api/connect.cjs +8 -8
- package/_cjs/Observable/api/connect.cjs.map +1 -1
- package/_cjs/Observable/api/connectable.cjs +5 -5
- package/_cjs/Observable/api/connectable.cjs.map +1 -1
- package/_cjs/Observable/api/fromCallback.cjs +3 -3
- package/_cjs/Observable/api/fromCallback.cjs.map +1 -1
- package/_cjs/Observable/api/fromEvent.cjs +2 -2
- package/_cjs/Observable/api/fromEvent.cjs.map +1 -1
- package/_cjs/Observable/api/index.cjs.map +1 -1
- package/_cjs/Observable/api/race.cjs +5 -5
- package/_cjs/Observable/api/race.cjs.map +1 -1
- package/_cjs/Observable/api/raceWith.cjs +4 -5
- package/_cjs/Observable/api/raceWith.cjs.map +1 -1
- package/_cjs/Observable/api/repeatWhen.cjs +10 -9
- package/_cjs/Observable/api/repeatWhen.cjs.map +1 -1
- package/_cjs/Observable/api/retryWhen.cjs +10 -9
- package/_cjs/Observable/api/retryWhen.cjs.map +1 -1
- package/_cjs/Observable/api/share.cjs +10 -10
- package/_cjs/Observable/api/share.cjs.map +1 -1
- package/_cjs/Observable/api/window.cjs +13 -12
- package/_cjs/Observable/api/window.cjs.map +1 -1
- package/_cjs/Observable/api/windowCount.cjs +13 -11
- package/_cjs/Observable/api/windowCount.cjs.map +1 -1
- package/_cjs/Observable/api/windowTime.cjs +13 -12
- package/_cjs/Observable/api/windowTime.cjs.map +1 -1
- package/_cjs/Observable/api/windowToggle.cjs +27 -25
- package/_cjs/Observable/api/windowToggle.cjs.map +1 -1
- package/_cjs/Observable/api/windowWhen.cjs +18 -16
- package/_cjs/Observable/api/windowWhen.cjs.map +1 -1
- package/_cjs/Observable/api.cjs +328 -317
- package/_cjs/Observable/api.cjs.map +1 -1
- package/_cjs/Observable/definition.cjs +8 -15
- package/_cjs/Observable/definition.cjs.map +1 -1
- package/_cjs/Observable/dom/animationFrames.cjs +4 -4
- package/_cjs/Observable/dom/animationFrames.cjs.map +1 -1
- package/_cjs/Observable/instances.cjs.map +1 -1
- package/_cjs/Observable.cjs +64 -64
- package/_cjs/Observable.cjs.map +1 -1
- package/_cjs/ObservableRef/api.cjs +3 -3
- package/_cjs/ObservableRef/api.cjs.map +1 -1
- package/_cjs/ObservableRef/atomic.cjs +3 -3
- package/_cjs/ObservableRef/atomic.cjs.map +1 -1
- package/_cjs/ObservableRef/definition.cjs +2 -2
- package/_cjs/ObservableRef/definition.cjs.map +1 -1
- package/_cjs/ObservableRef.cjs +8 -8
- package/_cjs/ObservableRef.cjs.map +1 -1
- package/_cjs/Observer.cjs.map +1 -1
- package/_cjs/Operator.cjs +10 -15
- package/_cjs/Operator.cjs.map +1 -1
- package/_cjs/Scheduler.cjs +3 -3
- package/_cjs/Scheduler.cjs.map +1 -1
- package/_cjs/Subject.cjs +70 -44
- package/_cjs/Subject.cjs.map +1 -1
- package/_cjs/Subscriber.cjs +123 -71
- package/_cjs/Subscriber.cjs.map +1 -1
- package/_cjs/Subscription.cjs +8 -8
- package/_cjs/Subscription.cjs.map +1 -1
- package/_cjs/config.cjs +15 -0
- package/_cjs/config.cjs.map +1 -0
- package/_cjs/global.cjs.map +1 -1
- package/_cjs/index.cjs +14 -14
- package/_cjs/index.cjs.map +1 -1
- package/_cjs/internal/animationFrameProvider.cjs +2 -2
- package/_cjs/internal/animationFrameProvider.cjs.map +1 -1
- package/_cjs/internal/args.cjs +2 -2
- package/_cjs/internal/args.cjs.map +1 -1
- package/_cjs/internal/intervalProvider.cjs.map +1 -1
- package/_cjs/internal/performanceTimestampProvider.cjs.map +1 -1
- package/_cjs/internal/timeoutProvider.cjs.map +1 -1
- package/_cjs/internal/timestampProvider.cjs.map +1 -1
- package/_cjs/internal/util.cjs +3 -3
- package/_cjs/internal/util.cjs.map +1 -1
- package/_mjs/Action.mjs +0 -1
- package/_mjs/Action.mjs.map +1 -1
- package/_mjs/AnimationFrameAction.mjs.map +1 -1
- package/_mjs/AnimationFrameScheduler.mjs.map +1 -1
- package/_mjs/AsyncAction.mjs +3 -3
- package/_mjs/AsyncAction.mjs.map +1 -1
- package/_mjs/AsyncScheduler.mjs +0 -2
- package/_mjs/AsyncScheduler.mjs.map +1 -1
- package/_mjs/BehaviorSubject.mjs +1 -1
- package/_mjs/BehaviorSubject.mjs.map +1 -1
- package/_mjs/Notification.mjs.map +1 -1
- package/_mjs/Observable/api/connect.mjs +6 -6
- package/_mjs/Observable/api/connect.mjs.map +1 -1
- package/_mjs/Observable/api/connectable.mjs +1 -1
- package/_mjs/Observable/api/connectable.mjs.map +1 -1
- package/_mjs/Observable/api/fromCallback.mjs.map +1 -1
- package/_mjs/Observable/api/fromEvent.mjs.map +1 -1
- package/_mjs/Observable/api/index.mjs.map +1 -1
- package/_mjs/Observable/api/race.mjs +1 -1
- package/_mjs/Observable/api/race.mjs.map +1 -1
- package/_mjs/Observable/api/raceWith.mjs +3 -4
- package/_mjs/Observable/api/raceWith.mjs.map +1 -1
- package/_mjs/Observable/api/repeatWhen.mjs +9 -8
- package/_mjs/Observable/api/repeatWhen.mjs.map +1 -1
- package/_mjs/Observable/api/retryWhen.mjs +9 -8
- package/_mjs/Observable/api/retryWhen.mjs.map +1 -1
- package/_mjs/Observable/api/share.mjs +8 -8
- package/_mjs/Observable/api/share.mjs.map +1 -1
- package/_mjs/Observable/api/window.mjs +12 -11
- package/_mjs/Observable/api/window.mjs.map +1 -1
- package/_mjs/Observable/api/windowCount.mjs +12 -10
- package/_mjs/Observable/api/windowCount.mjs.map +1 -1
- package/_mjs/Observable/api/windowTime.mjs +11 -10
- package/_mjs/Observable/api/windowTime.mjs.map +1 -1
- package/_mjs/Observable/api/windowToggle.mjs +25 -23
- package/_mjs/Observable/api/windowToggle.mjs.map +1 -1
- package/_mjs/Observable/api/windowWhen.mjs +17 -15
- package/_mjs/Observable/api/windowWhen.mjs.map +1 -1
- package/_mjs/Observable/api.mjs +306 -295
- package/_mjs/Observable/api.mjs.map +1 -1
- package/_mjs/Observable/definition.mjs +2 -9
- package/_mjs/Observable/definition.mjs.map +1 -1
- package/_mjs/Observable/dom/animationFrames.mjs +1 -1
- package/_mjs/Observable/dom/animationFrames.mjs.map +1 -1
- package/_mjs/Observable/instances.mjs.map +1 -1
- package/_mjs/Observable.mjs +16 -19
- package/_mjs/Observable.mjs.map +1 -1
- package/_mjs/ObservableRef/api.mjs.map +1 -1
- package/_mjs/ObservableRef/atomic.mjs.map +1 -1
- package/_mjs/ObservableRef/definition.mjs.map +1 -1
- package/_mjs/ObservableRef.mjs +2 -3
- package/_mjs/ObservableRef.mjs.map +1 -1
- package/_mjs/Observer.mjs.map +1 -1
- package/_mjs/Operator.mjs +6 -11
- package/_mjs/Operator.mjs.map +1 -1
- package/_mjs/Scheduler.mjs.map +1 -1
- package/_mjs/Subject.mjs +65 -39
- package/_mjs/Subject.mjs.map +1 -1
- package/_mjs/Subscriber.mjs +119 -67
- package/_mjs/Subscriber.mjs.map +1 -1
- package/_mjs/Subscription.mjs +6 -6
- package/_mjs/Subscription.mjs.map +1 -1
- package/_mjs/config.mjs +9 -0
- package/_mjs/config.mjs.map +1 -0
- package/_mjs/global.mjs.map +1 -1
- package/_mjs/index.mjs.map +1 -1
- package/_mjs/internal/animationFrameProvider.mjs.map +1 -1
- package/_mjs/internal/args.mjs.map +1 -1
- package/_mjs/internal/intervalProvider.mjs.map +1 -1
- package/_mjs/internal/performanceTimestampProvider.mjs.map +1 -1
- package/_mjs/internal/timeoutProvider.mjs.map +1 -1
- package/_mjs/internal/timestampProvider.mjs.map +1 -1
- package/_mjs/internal/util.mjs.map +1 -1
- package/_src/Action.ts +0 -1
- package/_src/AsyncAction.ts +3 -3
- package/_src/AsyncScheduler.ts +0 -2
- package/_src/BehaviorSubject.ts +1 -1
- package/_src/Observable/api/connect.ts +2 -2
- package/_src/Observable/api/connectable.ts +1 -1
- package/_src/Observable/api/race.ts +1 -1
- package/_src/Observable/api/raceWith.ts +2 -5
- package/_src/Observable/api/repeatWhen.ts +4 -4
- package/_src/Observable/api/retryWhen.ts +3 -3
- package/_src/Observable/api/share.ts +6 -6
- package/_src/Observable/api/window.ts +3 -3
- package/_src/Observable/api/windowCount.ts +30 -33
- package/_src/Observable/api/windowTime.ts +4 -4
- package/_src/Observable/api/windowToggle.ts +19 -21
- package/_src/Observable/api/windowWhen.ts +10 -13
- package/_src/Observable/api.ts +358 -366
- package/_src/Observable/definition.ts +2 -17
- package/_src/Observable/dom/animationFrames.ts +1 -1
- package/_src/Observable.ts +18 -19
- package/_src/ObservableRef.ts +2 -3
- package/_src/Operator.ts +9 -21
- package/_src/Subject.ts +66 -39
- package/_src/Subscriber.ts +134 -59
- package/_src/Subscription.ts +8 -8
- package/_src/config.ts +40 -0
- package/_src/global.ts +1 -1
- package/config.d.ts +36 -0
- package/global.d.ts +1 -1
- package/package.json +2 -2
package/_src/Observable/api.ts
CHANGED
|
@@ -97,7 +97,7 @@ export function from<R = never, E = never, A = never>(input: ObservableInput<R,
|
|
|
97
97
|
|
|
98
98
|
export function fromArrayLike<A>(input: ArrayLike<A>): Observable<never, never, A> {
|
|
99
99
|
return new Observable((s) => {
|
|
100
|
-
for (let i = 0; i < input.length && !s.
|
|
100
|
+
for (let i = 0; i < input.length && !s._closed; i++) {
|
|
101
101
|
s.next(input[i]!);
|
|
102
102
|
}
|
|
103
103
|
s.complete();
|
|
@@ -114,7 +114,7 @@ export function fromIterable<A>(iterable: Iterable<A>): Observable<never, never,
|
|
|
114
114
|
return new Observable((s) => {
|
|
115
115
|
for (const value of iterable) {
|
|
116
116
|
s.next(value);
|
|
117
|
-
if (s.
|
|
117
|
+
if (s._closed) {
|
|
118
118
|
return;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -127,7 +127,7 @@ export function fromPromise<A>(promise: PromiseLike<A>): Observable<never, never
|
|
|
127
127
|
promise
|
|
128
128
|
.then(
|
|
129
129
|
(value) => {
|
|
130
|
-
if (!s.
|
|
130
|
+
if (!s._closed) {
|
|
131
131
|
s.next(value);
|
|
132
132
|
s.complete();
|
|
133
133
|
}
|
|
@@ -195,7 +195,7 @@ export function iterate<S>(options: IterateOptions<S>): Observable<never, never,
|
|
|
195
195
|
async function process<A>(asyncIterable: AsyncIterable<A>, subscriber: Subscriber<never, A>) {
|
|
196
196
|
for await (const value of asyncIterable) {
|
|
197
197
|
subscriber.next(value);
|
|
198
|
-
if (subscriber.
|
|
198
|
+
if (subscriber._closed) {
|
|
199
199
|
return;
|
|
200
200
|
}
|
|
201
201
|
}
|
|
@@ -207,7 +207,6 @@ async function process<A>(asyncIterable: AsyncIterable<A>, subscriber: Subscribe
|
|
|
207
207
|
*/
|
|
208
208
|
export function interval(period = 0, scheduler: SchedulerLike = asyncScheduler): Observable<never, never, number> {
|
|
209
209
|
if (period < 0) {
|
|
210
|
-
// eslint-disable-next-line no-param-reassign
|
|
211
210
|
period = 0;
|
|
212
211
|
}
|
|
213
212
|
return timer(period, period, scheduler);
|
|
@@ -283,7 +282,7 @@ export function scheduleArray<A>(input: ArrayLike<A>, scheduler: SchedulerLike):
|
|
|
283
282
|
s.complete();
|
|
284
283
|
} else {
|
|
285
284
|
s.next(input[i++]!);
|
|
286
|
-
if (!s.
|
|
285
|
+
if (!s._closed) {
|
|
287
286
|
this.schedule();
|
|
288
287
|
}
|
|
289
288
|
}
|
|
@@ -406,7 +405,6 @@ export function timer(
|
|
|
406
405
|
let intervalDuration = -1;
|
|
407
406
|
if (intervalOrScheduler != null) {
|
|
408
407
|
if (isScheduler(intervalOrScheduler)) {
|
|
409
|
-
// eslint-disable-next-line no-param-reassign
|
|
410
408
|
scheduler = intervalOrScheduler;
|
|
411
409
|
} else {
|
|
412
410
|
intervalDuration = intervalOrScheduler as number;
|
|
@@ -419,7 +417,7 @@ export function timer(
|
|
|
419
417
|
}
|
|
420
418
|
let n = 0;
|
|
421
419
|
return scheduler.schedule(function () {
|
|
422
|
-
if (!s.
|
|
420
|
+
if (!s._closed) {
|
|
423
421
|
s.next(n++);
|
|
424
422
|
if (0 <= intervalDuration) {
|
|
425
423
|
this.schedule(undefined, intervalDuration);
|
|
@@ -450,7 +448,7 @@ export function makeZip<O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
|
450
448
|
subscriber.add(() => {
|
|
451
449
|
buffers = completed = null!;
|
|
452
450
|
});
|
|
453
|
-
for (let sourceIndex = 0; !subscriber.
|
|
451
|
+
for (let sourceIndex = 0; !subscriber._closed && sourceIndex < sources.length; sourceIndex++) {
|
|
454
452
|
from(sources[sourceIndex]!)
|
|
455
453
|
.provideEnvironment(environment)
|
|
456
454
|
.subscribe(
|
|
@@ -488,7 +486,7 @@ export function fromIO<R, E, A>(io: IO<R, E, A>, scheduler: SchedulerLike = asyn
|
|
|
488
486
|
const scheduled = scheduler.schedule(() => {
|
|
489
487
|
fiber = io.provideEnvironment(env).unsafeRunFiber();
|
|
490
488
|
fiber.addObserver((exit) => {
|
|
491
|
-
if (!s.
|
|
489
|
+
if (!s._closed) {
|
|
492
490
|
exit.match(
|
|
493
491
|
(cause) => s.error(cause),
|
|
494
492
|
(a) => s.next(a),
|
|
@@ -541,12 +539,12 @@ export function ap<A, R1, E1>(fa: Observable<R1, E1, A>) {
|
|
|
541
539
|
*/
|
|
542
540
|
export function mapWithIndex<A, B>(f: (i: number, a: A) => B) {
|
|
543
541
|
return <R, E>(fa: Observable<R, E, A>): Observable<R, E, B> => {
|
|
544
|
-
return
|
|
542
|
+
return new Observable((destination, environment) => {
|
|
545
543
|
let i = 0;
|
|
546
|
-
|
|
547
|
-
|
|
544
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
545
|
+
destination.operate({
|
|
548
546
|
next: (value) => {
|
|
549
|
-
|
|
547
|
+
destination.next(f(i++, value));
|
|
550
548
|
},
|
|
551
549
|
}),
|
|
552
550
|
);
|
|
@@ -577,9 +575,9 @@ export function as<B>(b: Lazy<B>) {
|
|
|
577
575
|
*/
|
|
578
576
|
export function mapError<E, E1>(f: (e: E) => E1) {
|
|
579
577
|
return <R, A>(fa: Observable<R, E, A>): Observable<R, E1, A> => {
|
|
580
|
-
return
|
|
581
|
-
|
|
582
|
-
|
|
578
|
+
return new Observable((subscriber, environment) => {
|
|
579
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
580
|
+
subscriber.operate({
|
|
583
581
|
error: (err) => {
|
|
584
582
|
subscriber.error(err.map(f));
|
|
585
583
|
},
|
|
@@ -593,9 +591,9 @@ export function mapError<E, E1>(f: (e: E) => E1) {
|
|
|
593
591
|
* @tsplus getter fncts.observable.Observable swap
|
|
594
592
|
*/
|
|
595
593
|
export function swap<R, E, A>(fa: Observable<R, E, A>): Observable<R, A, E> {
|
|
596
|
-
return
|
|
597
|
-
|
|
598
|
-
|
|
594
|
+
return new Observable((subscriber, environment) => {
|
|
595
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
596
|
+
subscriber.operate({
|
|
599
597
|
next: (value) => {
|
|
600
598
|
subscriber.error(Cause.fail(value));
|
|
601
599
|
},
|
|
@@ -625,13 +623,13 @@ export function filterWithIndex<A>(
|
|
|
625
623
|
): <R, E>(fa: Observable<R, E, A>) => Observable<R, E, A>;
|
|
626
624
|
export function filterWithIndex<A>(predicate: PredicateWithIndex<number, A>) {
|
|
627
625
|
return <R, E>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
628
|
-
return
|
|
626
|
+
return new Observable((subscriber, environment) => {
|
|
629
627
|
let index = 0;
|
|
630
|
-
|
|
631
|
-
.
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
628
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
629
|
+
subscriber.operate({
|
|
630
|
+
next: (value) => predicate(index++, value) && subscriber.next(value),
|
|
631
|
+
}),
|
|
632
|
+
);
|
|
635
633
|
});
|
|
636
634
|
};
|
|
637
635
|
}
|
|
@@ -654,10 +652,10 @@ export function filter<A>(predicate: Predicate<A>) {
|
|
|
654
652
|
*/
|
|
655
653
|
export function filterMapWithIndex<A, B>(f: (i: number, a: A) => Maybe<B>) {
|
|
656
654
|
return <R, E>(fa: Observable<R, E, A>): Observable<R, E, B> => {
|
|
657
|
-
return
|
|
655
|
+
return new Observable((subscriber, environment) => {
|
|
658
656
|
let index = 0;
|
|
659
|
-
|
|
660
|
-
|
|
657
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
658
|
+
subscriber.operate({
|
|
661
659
|
next: (value) =>
|
|
662
660
|
f(index++, value).match(
|
|
663
661
|
() => noop,
|
|
@@ -714,20 +712,20 @@ export function partition<A>(predicate: Predicate<A>) {
|
|
|
714
712
|
export function partitionMapWithIndex<A, B, C>(f: (i: number, a: A) => Either<B, C>) {
|
|
715
713
|
return <R, E>(fa: Observable<R, E, A>): readonly [Observable<R, E, B>, Observable<R, E, C>] => {
|
|
716
714
|
return [
|
|
717
|
-
|
|
715
|
+
new Observable((subscriber, environment) => {
|
|
718
716
|
let index = 0;
|
|
719
|
-
|
|
720
|
-
|
|
717
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
718
|
+
subscriber.operate({
|
|
721
719
|
next: (value) => {
|
|
722
720
|
f(index++, value).match((b) => subscriber.next(b), noop);
|
|
723
721
|
},
|
|
724
722
|
}),
|
|
725
723
|
);
|
|
726
724
|
}),
|
|
727
|
-
|
|
725
|
+
new Observable((subscriber, environment) => {
|
|
728
726
|
let index = 0;
|
|
729
|
-
|
|
730
|
-
|
|
727
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
728
|
+
subscriber.operate({
|
|
731
729
|
next: (value) => {
|
|
732
730
|
f(index++, value).match(noop, (c) => subscriber.next(c));
|
|
733
731
|
},
|
|
@@ -764,7 +762,9 @@ export function mergeMapWithIndex<A, R1, E1, B>(
|
|
|
764
762
|
concurrent = Infinity,
|
|
765
763
|
) {
|
|
766
764
|
return <R, E>(ma: Observable<R, E, A>): Observable<R | R1, E | E1, B> => {
|
|
767
|
-
return
|
|
765
|
+
return new Observable((subscriber, environment) => {
|
|
766
|
+
return mergeInternal(ma, subscriber, environment, f, concurrent);
|
|
767
|
+
});
|
|
768
768
|
};
|
|
769
769
|
}
|
|
770
770
|
|
|
@@ -816,7 +816,9 @@ export function flatten<R, E, R1, E1, A>(mma: Observable<R, E, Observable<R1, E1
|
|
|
816
816
|
*/
|
|
817
817
|
export function foldLeftWithIndex<A, B>(initial: B, f: (index: number, acc: B, value: A) => B) {
|
|
818
818
|
return <R, E>(fa: Observable<R, E, A>): Observable<R, E, B> => {
|
|
819
|
-
return
|
|
819
|
+
return new Observable((subscriber, environment) => {
|
|
820
|
+
return scanInternal(fa, subscriber, environment, f, initial, true, false, true);
|
|
821
|
+
});
|
|
820
822
|
};
|
|
821
823
|
}
|
|
822
824
|
|
|
@@ -847,7 +849,7 @@ export function at(index: number) {
|
|
|
847
849
|
*/
|
|
848
850
|
export function audit<A, R1, E1>(durationSelector: (value: A) => ObservableInput<R1, E1, any>) {
|
|
849
851
|
return <R, E>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, A> => {
|
|
850
|
-
return
|
|
852
|
+
return new Observable((subscriber, environment) => {
|
|
851
853
|
let lastValue: Maybe<A> = Nothing();
|
|
852
854
|
let durationSubscriber: Subscriber<any, any> | null = null;
|
|
853
855
|
let isComplete = false;
|
|
@@ -865,7 +867,7 @@ export function audit<A, R1, E1>(durationSelector: (value: A) => ObservableInput
|
|
|
865
867
|
durationSubscriber = null;
|
|
866
868
|
isComplete && subscriber.complete();
|
|
867
869
|
};
|
|
868
|
-
|
|
870
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
869
871
|
operatorSubscriber(subscriber, {
|
|
870
872
|
next: (value) => {
|
|
871
873
|
lastValue = Just(value);
|
|
@@ -882,7 +884,7 @@ export function audit<A, R1, E1>(durationSelector: (value: A) => ObservableInput
|
|
|
882
884
|
},
|
|
883
885
|
complete: () => {
|
|
884
886
|
isComplete = true;
|
|
885
|
-
(lastValue.isNothing() || !durationSubscriber || durationSubscriber.
|
|
887
|
+
(lastValue.isNothing() || !durationSubscriber || durationSubscriber._closed) && subscriber.complete();
|
|
886
888
|
},
|
|
887
889
|
}),
|
|
888
890
|
);
|
|
@@ -904,10 +906,10 @@ export function auditTime(duration: number, scheduler: SchedulerLike = asyncSche
|
|
|
904
906
|
*/
|
|
905
907
|
export function buffer<R1, E1>(closingNotifier: Observable<R1, E1, any>) {
|
|
906
908
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, ReadonlyArray<A>> => {
|
|
907
|
-
return
|
|
909
|
+
return new Observable((subscriber, environment) => {
|
|
908
910
|
let buffer: A[] = [];
|
|
909
|
-
|
|
910
|
-
|
|
911
|
+
fa.provideEnvironment(environment).subscribe(
|
|
912
|
+
subscriber.operate({
|
|
911
913
|
next: (value) => buffer.push(value),
|
|
912
914
|
complete: () => {
|
|
913
915
|
subscriber.next(buffer);
|
|
@@ -916,7 +918,7 @@ export function buffer<R1, E1>(closingNotifier: Observable<R1, E1, any>) {
|
|
|
916
918
|
}),
|
|
917
919
|
);
|
|
918
920
|
closingNotifier.provideEnvironment(environment).subscribe(
|
|
919
|
-
|
|
921
|
+
subscriber.operate({
|
|
920
922
|
next: () => {
|
|
921
923
|
const b = buffer;
|
|
922
924
|
buffer = [];
|
|
@@ -937,45 +939,41 @@ export function buffer<R1, E1>(closingNotifier: Observable<R1, E1, any>) {
|
|
|
937
939
|
*/
|
|
938
940
|
export function bufferCount(bufferSize: number, startBufferEvery?: number) {
|
|
939
941
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, ReadonlyArray<A>> => {
|
|
940
|
-
// eslint-disable-next-line no-param-reassign
|
|
941
942
|
startBufferEvery = startBufferEvery ?? bufferSize;
|
|
942
|
-
return
|
|
943
|
+
return new Observable((subscriber, environment) => {
|
|
943
944
|
let buffers: A[][] = [];
|
|
944
945
|
let count = 0;
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
toEmit = toEmit ?? [];
|
|
958
|
-
toEmit.push(buffer);
|
|
959
|
-
}
|
|
960
|
-
}
|
|
961
|
-
if (toEmit) {
|
|
962
|
-
for (const buffer of toEmit) {
|
|
963
|
-
arrayRemove(buffers, buffer);
|
|
964
|
-
subscriber.next(buffer);
|
|
965
|
-
}
|
|
946
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
947
|
+
subscriber.operate({
|
|
948
|
+
next: (value) => {
|
|
949
|
+
let toEmit: A[][] | null = null;
|
|
950
|
+
if (count++ % startBufferEvery! === 0) {
|
|
951
|
+
buffers.push([]);
|
|
952
|
+
}
|
|
953
|
+
for (const buffer of buffers) {
|
|
954
|
+
buffer.push(value);
|
|
955
|
+
if (bufferSize <= buffer.length) {
|
|
956
|
+
toEmit = toEmit ?? [];
|
|
957
|
+
toEmit.push(buffer);
|
|
966
958
|
}
|
|
967
|
-
}
|
|
968
|
-
|
|
969
|
-
for (const buffer of
|
|
959
|
+
}
|
|
960
|
+
if (toEmit) {
|
|
961
|
+
for (const buffer of toEmit) {
|
|
962
|
+
arrayRemove(buffers, buffer);
|
|
970
963
|
subscriber.next(buffer);
|
|
971
964
|
}
|
|
972
|
-
|
|
973
|
-
},
|
|
965
|
+
}
|
|
974
966
|
},
|
|
975
|
-
() => {
|
|
967
|
+
complete: () => {
|
|
968
|
+
for (const buffer of buffers) {
|
|
969
|
+
subscriber.next(buffer);
|
|
970
|
+
}
|
|
971
|
+
subscriber.complete();
|
|
972
|
+
},
|
|
973
|
+
finalize: () => {
|
|
976
974
|
buffers = null!;
|
|
977
975
|
},
|
|
978
|
-
),
|
|
976
|
+
}),
|
|
979
977
|
);
|
|
980
978
|
});
|
|
981
979
|
};
|
|
@@ -999,7 +997,7 @@ export function bufferTime(config: BufferTimeConfig) {
|
|
|
999
997
|
maxBufferSize = Infinity,
|
|
1000
998
|
scheduler = asyncScheduler,
|
|
1001
999
|
} = config;
|
|
1002
|
-
return
|
|
1000
|
+
return new Observable((subscriber, environment) => {
|
|
1003
1001
|
let bufferRecords:
|
|
1004
1002
|
| {
|
|
1005
1003
|
buffer: A[];
|
|
@@ -1027,38 +1025,40 @@ export function bufferTime(config: BufferTimeConfig) {
|
|
|
1027
1025
|
subs.add(scheduler.schedule(() => emit(record), bufferTimeSpan));
|
|
1028
1026
|
}
|
|
1029
1027
|
};
|
|
1028
|
+
|
|
1030
1029
|
bufferCreationInterval !== null && bufferCreationInterval >= 0
|
|
1031
1030
|
? subscriber.add(
|
|
1032
1031
|
scheduler.schedule(function () {
|
|
1033
1032
|
startBuffer();
|
|
1034
|
-
!this.
|
|
1033
|
+
!this._closed && subscriber.add(this.schedule(null, bufferCreationInterval));
|
|
1035
1034
|
}, bufferCreationInterval),
|
|
1036
1035
|
)
|
|
1037
1036
|
: (restartOnEmit = true);
|
|
1037
|
+
|
|
1038
1038
|
startBuffer();
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
{
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
}
|
|
1049
|
-
},
|
|
1050
|
-
complete: () => {
|
|
1051
|
-
while (bufferRecords?.length) {
|
|
1052
|
-
subscriber.next(bufferRecords.shift()!.buffer);
|
|
1053
|
-
}
|
|
1054
|
-
bufferTimeSubscriber?.unsubscribe();
|
|
1055
|
-
subscriber.complete();
|
|
1056
|
-
subscriber.unsubscribe();
|
|
1057
|
-
},
|
|
1039
|
+
|
|
1040
|
+
const bufferTimeSubscriber = subscriber.operate({
|
|
1041
|
+
next: (value: A) => {
|
|
1042
|
+
const recordsCopy = bufferRecords!.slice();
|
|
1043
|
+
for (const record of recordsCopy) {
|
|
1044
|
+
const { buffer } = record;
|
|
1045
|
+
buffer.push(value);
|
|
1046
|
+
maxBufferSize <= buffer.length && emit(record);
|
|
1047
|
+
}
|
|
1058
1048
|
},
|
|
1059
|
-
() =>
|
|
1060
|
-
|
|
1061
|
-
|
|
1049
|
+
complete: () => {
|
|
1050
|
+
while (bufferRecords?.length) {
|
|
1051
|
+
subscriber.next(bufferRecords.shift()!.buffer);
|
|
1052
|
+
}
|
|
1053
|
+
bufferTimeSubscriber?.unsubscribe();
|
|
1054
|
+
subscriber.complete();
|
|
1055
|
+
subscriber.unsubscribe();
|
|
1056
|
+
},
|
|
1057
|
+
finalize: () => {
|
|
1058
|
+
bufferRecords = null;
|
|
1059
|
+
},
|
|
1060
|
+
});
|
|
1061
|
+
return fa.provideEnvironment(environment).subscribe(bufferTimeSubscriber);
|
|
1062
1062
|
});
|
|
1063
1063
|
};
|
|
1064
1064
|
}
|
|
@@ -1071,7 +1071,7 @@ export function bufferToggle<R1, E1, B, R2, E2>(
|
|
|
1071
1071
|
closingSelector: (value: B) => ObservableInput<R2, E2, any>,
|
|
1072
1072
|
) {
|
|
1073
1073
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R | R1 | R2, E | E1 | E2, ReadonlyArray<A>> => {
|
|
1074
|
-
return
|
|
1074
|
+
return new Observable((subscriber, environment) => {
|
|
1075
1075
|
const buffers: A[][] = [];
|
|
1076
1076
|
from(openings)
|
|
1077
1077
|
.provideEnvironment(environment)
|
|
@@ -1095,8 +1095,8 @@ export function bufferToggle<R1, E1, B, R2, E2>(
|
|
|
1095
1095
|
complete: noop,
|
|
1096
1096
|
}),
|
|
1097
1097
|
);
|
|
1098
|
-
|
|
1099
|
-
|
|
1098
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
1099
|
+
subscriber.operate({
|
|
1100
1100
|
next: (value) => {
|
|
1101
1101
|
for (const buffer of buffers) {
|
|
1102
1102
|
buffer.push(value);
|
|
@@ -1119,7 +1119,7 @@ export function bufferToggle<R1, E1, B, R2, E2>(
|
|
|
1119
1119
|
*/
|
|
1120
1120
|
export function bufferWhen<R1, E1>(closingSelector: () => ObservableInput<R1, E1, any>) {
|
|
1121
1121
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, ReadonlyArray<A>> => {
|
|
1122
|
-
return
|
|
1122
|
+
return new Observable((subscriber, environment) => {
|
|
1123
1123
|
let buffer: A[] | null = null;
|
|
1124
1124
|
let closingSubscriber: Subscriber<E | E1, A> | null = null;
|
|
1125
1125
|
const openBuffer = () => {
|
|
@@ -1132,18 +1132,15 @@ export function bufferWhen<R1, E1>(closingSelector: () => ObservableInput<R1, E1
|
|
|
1132
1132
|
.subscribe((closingSubscriber = operatorSubscriber(subscriber, { next: openBuffer, complete: noop })));
|
|
1133
1133
|
};
|
|
1134
1134
|
openBuffer();
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
{
|
|
1139
|
-
next
|
|
1140
|
-
complete
|
|
1141
|
-
buffer && subscriber.next(buffer);
|
|
1142
|
-
subscriber.complete();
|
|
1143
|
-
},
|
|
1135
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
1136
|
+
subscriber.operate({
|
|
1137
|
+
next: (value) => buffer?.push(value),
|
|
1138
|
+
complete: () => {
|
|
1139
|
+
buffer && subscriber.next(buffer);
|
|
1140
|
+
subscriber.complete();
|
|
1144
1141
|
},
|
|
1145
|
-
() => (buffer = closingSubscriber = null),
|
|
1146
|
-
),
|
|
1142
|
+
finalize: () => (buffer = closingSubscriber = null),
|
|
1143
|
+
}),
|
|
1147
1144
|
);
|
|
1148
1145
|
});
|
|
1149
1146
|
};
|
|
@@ -1156,14 +1153,14 @@ export function catchAllCause<R, E, A, R1, E1, B>(
|
|
|
1156
1153
|
f: (cause: Cause<E>, caught: Observable<R | R1, E | E1, A | B>) => ObservableInput<R | R1, E1, B>,
|
|
1157
1154
|
) {
|
|
1158
1155
|
return (self: Observable<R, E, A>): Observable<R | R1, E1, A | B> => {
|
|
1159
|
-
return
|
|
1156
|
+
return new Observable((subscriber, environment) => {
|
|
1160
1157
|
let innerSub: Subscription | null = null;
|
|
1161
1158
|
let syncUnsub = false;
|
|
1162
1159
|
let handledResult: Observable<R | R1, E1, B>;
|
|
1163
|
-
innerSub =
|
|
1164
|
-
|
|
1160
|
+
innerSub = self.provideEnvironment(environment).subscribe(
|
|
1161
|
+
subscriber.operate({
|
|
1165
1162
|
error: (cause) => {
|
|
1166
|
-
handledResult = from(f(cause,
|
|
1163
|
+
handledResult = from(f(cause, self.catchAllCause(f)));
|
|
1167
1164
|
if (innerSub) {
|
|
1168
1165
|
innerSub.unsubscribe();
|
|
1169
1166
|
innerSub = null;
|
|
@@ -1195,7 +1192,7 @@ export function concatAll<R, E, R1, E1, A>(
|
|
|
1195
1192
|
/**
|
|
1196
1193
|
* @tsplus pipeable fncts.observable.Observable concat
|
|
1197
1194
|
*/
|
|
1198
|
-
export function concat<O extends ReadonlyArray<ObservableInput<any, any>>>(...sources: O) {
|
|
1195
|
+
export function concat<O extends ReadonlyArray<ObservableInput<any, any, any>>>(...sources: O) {
|
|
1199
1196
|
return <R, E, A>(
|
|
1200
1197
|
fa: Observable<R, E, A>,
|
|
1201
1198
|
): Observable<
|
|
@@ -1203,8 +1200,8 @@ export function concat<O extends ReadonlyArray<ObservableInput<any, any>>>(...so
|
|
|
1203
1200
|
E | Observable.ErrorOf<O[number]>,
|
|
1204
1201
|
A | Observable.TypeOf<O[number]>
|
|
1205
1202
|
> => {
|
|
1206
|
-
return
|
|
1207
|
-
fromArrayLike([
|
|
1203
|
+
return new Observable((subscriber, environment) => {
|
|
1204
|
+
return fromArrayLike([fa, ...sources])
|
|
1208
1205
|
.concatAll.provideEnvironment(environment)
|
|
1209
1206
|
.subscribe(subscriber as Subscriber<any, any>);
|
|
1210
1207
|
});
|
|
@@ -1264,10 +1261,11 @@ export function zipLatest<O extends ReadonlyArray<ObservableInput<any, any, any>
|
|
|
1264
1261
|
]
|
|
1265
1262
|
> => {
|
|
1266
1263
|
if (!sources.length) {
|
|
1267
|
-
return from(self)
|
|
1264
|
+
return unsafeCoerce(from(self));
|
|
1268
1265
|
}
|
|
1269
|
-
|
|
1270
|
-
|
|
1266
|
+
|
|
1267
|
+
return new Observable((subscriber, environment) => {
|
|
1268
|
+
return combineLatestInternal(subscriber, environment, [self, ...sources]);
|
|
1271
1269
|
});
|
|
1272
1270
|
};
|
|
1273
1271
|
}
|
|
@@ -1286,7 +1284,7 @@ export function zipWithLatest<A, R1, E1, B, C>(that: ObservableInput<R1, E1, B>,
|
|
|
1286
1284
|
*/
|
|
1287
1285
|
export function debounceWith<A, R1, E1>(durationSelector: (value: A) => ObservableInput<R1, E1, any>) {
|
|
1288
1286
|
return <R, E>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, A> => {
|
|
1289
|
-
return
|
|
1287
|
+
return new Observable((subscriber, environment) => {
|
|
1290
1288
|
let lastValue: Maybe<A> = Nothing();
|
|
1291
1289
|
let durationSubscriber: Subscriber<E1, any> | null = null;
|
|
1292
1290
|
const emit = () => {
|
|
@@ -1298,25 +1296,22 @@ export function debounceWith<A, R1, E1>(durationSelector: (value: A) => Observab
|
|
|
1298
1296
|
subscriber.next(value);
|
|
1299
1297
|
}
|
|
1300
1298
|
};
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
durationSubscriber = operatorSubscriber(subscriber, { next: emit, complete: noop });
|
|
1309
|
-
from(durationSelector(value)).provideEnvironment(environment).subscribe(durationSubscriber);
|
|
1310
|
-
},
|
|
1311
|
-
complete: () => {
|
|
1312
|
-
emit();
|
|
1313
|
-
subscriber.complete();
|
|
1314
|
-
},
|
|
1299
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
1300
|
+
subscriber.operate({
|
|
1301
|
+
next: (value) => {
|
|
1302
|
+
durationSubscriber?.unsubscribe();
|
|
1303
|
+
lastValue = Just(value);
|
|
1304
|
+
durationSubscriber = subscriber.operate({ next: emit, complete: noop });
|
|
1305
|
+
from(durationSelector(value)).provideEnvironment(environment).subscribe(durationSubscriber);
|
|
1315
1306
|
},
|
|
1316
|
-
() => {
|
|
1307
|
+
complete: () => {
|
|
1308
|
+
emit();
|
|
1309
|
+
subscriber.complete();
|
|
1310
|
+
},
|
|
1311
|
+
finalize: () => {
|
|
1317
1312
|
lastValue = durationSubscriber = null!;
|
|
1318
1313
|
},
|
|
1319
|
-
),
|
|
1314
|
+
}),
|
|
1320
1315
|
);
|
|
1321
1316
|
});
|
|
1322
1317
|
};
|
|
@@ -1327,7 +1322,7 @@ export function debounceWith<A, R1, E1>(durationSelector: (value: A) => Observab
|
|
|
1327
1322
|
*/
|
|
1328
1323
|
export function debounce(dueTime: number, scheduler: SchedulerLike = asyncScheduler) {
|
|
1329
1324
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
1330
|
-
return
|
|
1325
|
+
return new Observable((subscriber, environment) => {
|
|
1331
1326
|
let activeTask: Subscription | null = null;
|
|
1332
1327
|
let lastValue: A | null = null;
|
|
1333
1328
|
let lastTime: number | null = null;
|
|
@@ -1350,27 +1345,24 @@ export function debounce(dueTime: number, scheduler: SchedulerLike = asyncSchedu
|
|
|
1350
1345
|
}
|
|
1351
1346
|
emit();
|
|
1352
1347
|
}
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
subscriber.add(activeTask);
|
|
1363
|
-
}
|
|
1364
|
-
},
|
|
1365
|
-
complete: () => {
|
|
1366
|
-
emit();
|
|
1367
|
-
subscriber.complete();
|
|
1368
|
-
},
|
|
1348
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
1349
|
+
subscriber.operate({
|
|
1350
|
+
next: (value) => {
|
|
1351
|
+
lastValue = value;
|
|
1352
|
+
lastTime = scheduler.now();
|
|
1353
|
+
if (!activeTask) {
|
|
1354
|
+
activeTask = scheduler.schedule(emitWhenIdle, dueTime);
|
|
1355
|
+
subscriber.add(activeTask);
|
|
1356
|
+
}
|
|
1369
1357
|
},
|
|
1370
|
-
() => {
|
|
1358
|
+
complete: () => {
|
|
1359
|
+
emit();
|
|
1360
|
+
subscriber.complete();
|
|
1361
|
+
},
|
|
1362
|
+
finalize: () => {
|
|
1371
1363
|
lastValue = activeTask = null;
|
|
1372
1364
|
},
|
|
1373
|
-
),
|
|
1365
|
+
}),
|
|
1374
1366
|
);
|
|
1375
1367
|
});
|
|
1376
1368
|
};
|
|
@@ -1380,9 +1372,9 @@ export function debounce(dueTime: number, scheduler: SchedulerLike = asyncSchedu
|
|
|
1380
1372
|
* @tsplus getter fncts.observable.Observable either
|
|
1381
1373
|
*/
|
|
1382
1374
|
export function either<R, E, A>(fa: Observable<R, E, A>): Observable<R, never, Either<E, A>> {
|
|
1383
|
-
return
|
|
1384
|
-
|
|
1385
|
-
|
|
1375
|
+
return new Observable((subscriber, environment) => {
|
|
1376
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
1377
|
+
subscriber.operate({
|
|
1386
1378
|
next: (value) => {
|
|
1387
1379
|
subscriber.next(Either.right(value));
|
|
1388
1380
|
},
|
|
@@ -1429,10 +1421,10 @@ export function delay(due: number | Date, scheduler: SchedulerLike = asyncSchedu
|
|
|
1429
1421
|
* @tsplus getter fncts.observable.Observable dematerialize
|
|
1430
1422
|
*/
|
|
1431
1423
|
export function dematerialize<R, E, E1, A>(fa: Observable<R, E, Notification<E1, A>>): Observable<R, E | E1, A> {
|
|
1432
|
-
return
|
|
1433
|
-
|
|
1424
|
+
return new Observable((subscriber, environment) => {
|
|
1425
|
+
return fa
|
|
1434
1426
|
.provideEnvironment(environment)
|
|
1435
|
-
.subscribe(
|
|
1427
|
+
.subscribe(subscriber.operate({ next: (notification) => notification.observe(subscriber) }));
|
|
1436
1428
|
});
|
|
1437
1429
|
}
|
|
1438
1430
|
|
|
@@ -1441,9 +1433,9 @@ export function dematerialize<R, E, E1, A>(fa: Observable<R, E, Notification<E1,
|
|
|
1441
1433
|
*/
|
|
1442
1434
|
export function ensuring(finalizer: () => void) {
|
|
1443
1435
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
1444
|
-
return
|
|
1445
|
-
source.provideEnvironment(environment).subscribe(subscriber);
|
|
1436
|
+
return new Observable((subscriber, environment) => {
|
|
1446
1437
|
subscriber.add(finalizer);
|
|
1438
|
+
return fa.provideEnvironment(environment).subscribe(subscriber);
|
|
1447
1439
|
});
|
|
1448
1440
|
};
|
|
1449
1441
|
}
|
|
@@ -1454,17 +1446,17 @@ export function ensuring(finalizer: () => void) {
|
|
|
1454
1446
|
export function exhaustAll<R, E, R1, E1, A>(
|
|
1455
1447
|
ffa: Observable<R, E, ObservableInput<R1, E1, A>>,
|
|
1456
1448
|
): Observable<R | R1, E | E1, A> {
|
|
1457
|
-
return
|
|
1449
|
+
return new Observable((subscriber, environment) => {
|
|
1458
1450
|
let isComplete = false;
|
|
1459
1451
|
let innerSub: Subscription | null = null;
|
|
1460
|
-
|
|
1452
|
+
return ffa.provideEnvironment(environment).subscribe(
|
|
1461
1453
|
operatorSubscriber(subscriber, {
|
|
1462
1454
|
next: (inner) => {
|
|
1463
1455
|
if (!innerSub) {
|
|
1464
1456
|
innerSub = from(inner)
|
|
1465
1457
|
.provideEnvironment(environment)
|
|
1466
1458
|
.subscribe(
|
|
1467
|
-
|
|
1459
|
+
subscriber.operate({
|
|
1468
1460
|
complete: () => {
|
|
1469
1461
|
innerSub = null;
|
|
1470
1462
|
isComplete && subscriber.complete();
|
|
@@ -1487,15 +1479,15 @@ export function exhaustAll<R, E, R1, E1, A>(
|
|
|
1487
1479
|
*/
|
|
1488
1480
|
export function exhaustMapWithIndex<A, R1, E1, B>(f: (i: number, a: A) => ObservableInput<R1, E1, B>) {
|
|
1489
1481
|
return <R, E>(self: Observable<R, E, A>): Observable<R | R1, E | E1, B> => {
|
|
1490
|
-
return
|
|
1482
|
+
return new Observable((subscriber, environment) => {
|
|
1491
1483
|
let index = 0;
|
|
1492
1484
|
let innerSub: Subscriber<E1, B> | null = null;
|
|
1493
1485
|
let isComplete = false;
|
|
1494
|
-
|
|
1495
|
-
|
|
1486
|
+
self.provideEnvironment(environment).subscribe(
|
|
1487
|
+
subscriber.operate({
|
|
1496
1488
|
next: (outerValue) => {
|
|
1497
1489
|
if (!innerSub) {
|
|
1498
|
-
innerSub =
|
|
1490
|
+
innerSub = subscriber.operate({
|
|
1499
1491
|
complete: () => {
|
|
1500
1492
|
innerSub = null;
|
|
1501
1493
|
isComplete && subscriber.complete();
|
|
@@ -1532,9 +1524,9 @@ export function expandWithIndex<A, R1, E1, B>(
|
|
|
1532
1524
|
) {
|
|
1533
1525
|
return <R, E>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, B> => {
|
|
1534
1526
|
concurrent = (concurrent || 0) < 1 ? Infinity : concurrent;
|
|
1535
|
-
return
|
|
1536
|
-
mergeInternal(
|
|
1537
|
-
);
|
|
1527
|
+
return new Observable((subscriber, environment) => {
|
|
1528
|
+
return mergeInternal(fa, subscriber, environment, f, concurrent, undefined, true);
|
|
1529
|
+
});
|
|
1538
1530
|
};
|
|
1539
1531
|
}
|
|
1540
1532
|
|
|
@@ -1558,7 +1550,7 @@ export function findWithIndex<A>(
|
|
|
1558
1550
|
): <R, E>(fa: Observable<R, E, A>) => Observable<R, E, Maybe<A>>;
|
|
1559
1551
|
export function findWithIndex<A>(predicate: PredicateWithIndex<number, A>) {
|
|
1560
1552
|
return <R, E>(fa: Observable<R, E, A>): Observable<R, E, Maybe<A>> => {
|
|
1561
|
-
return
|
|
1553
|
+
return new Observable(findInternal(fa, predicate, "value"));
|
|
1562
1554
|
};
|
|
1563
1555
|
}
|
|
1564
1556
|
|
|
@@ -1586,7 +1578,7 @@ export function findIndexWithIndex<A>(
|
|
|
1586
1578
|
): <R, E>(fa: Observable<R, E, A>) => Observable<R, E, number>;
|
|
1587
1579
|
export function findIndexWithIndex<A>(predicate: PredicateWithIndex<number, A>) {
|
|
1588
1580
|
return <R, E>(fa: Observable<R, E, A>): Observable<R, E, number> => {
|
|
1589
|
-
return
|
|
1581
|
+
return new Observable(findInternal(fa, predicate, "index"));
|
|
1590
1582
|
};
|
|
1591
1583
|
}
|
|
1592
1584
|
|
|
@@ -1626,7 +1618,7 @@ export function forkJoin<A extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
|
1626
1618
|
>;
|
|
1627
1619
|
export function forkJoin(...args: any[]): Observable<any, any, any> {
|
|
1628
1620
|
const { args: sources, keys } = arrayOrObject(args);
|
|
1629
|
-
return new Observable((s) => {
|
|
1621
|
+
return new Observable((s, environment) => {
|
|
1630
1622
|
const length = sources.length;
|
|
1631
1623
|
if (!length) {
|
|
1632
1624
|
s.complete();
|
|
@@ -1637,33 +1629,35 @@ export function forkJoin(...args: any[]): Observable<any, any, any> {
|
|
|
1637
1629
|
let remainingEmissions = length;
|
|
1638
1630
|
for (let sourceIndex = 0; sourceIndex < length; sourceIndex++) {
|
|
1639
1631
|
let hasValue = false;
|
|
1640
|
-
from(sources[sourceIndex])
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
},
|
|
1649
|
-
complete: () => {
|
|
1650
|
-
if (!--remainingCompletions || !hasValue) {
|
|
1651
|
-
if (!remainingEmissions) {
|
|
1652
|
-
s.next(
|
|
1653
|
-
keys
|
|
1654
|
-
? keys.reduce((b, k, i) => {
|
|
1655
|
-
// @ts-expect-error
|
|
1656
|
-
b[k] = values[i];
|
|
1657
|
-
return b;
|
|
1658
|
-
}, {})
|
|
1659
|
-
: values,
|
|
1660
|
-
);
|
|
1632
|
+
from(sources[sourceIndex])
|
|
1633
|
+
.provideEnvironment(environment)
|
|
1634
|
+
.subscribe(
|
|
1635
|
+
s.operate({
|
|
1636
|
+
next: (value: any) => {
|
|
1637
|
+
if (!hasValue) {
|
|
1638
|
+
hasValue = true;
|
|
1639
|
+
remainingEmissions--;
|
|
1661
1640
|
}
|
|
1662
|
-
|
|
1663
|
-
}
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1641
|
+
values[sourceIndex] = value;
|
|
1642
|
+
},
|
|
1643
|
+
complete: () => {
|
|
1644
|
+
if (!--remainingCompletions || !hasValue) {
|
|
1645
|
+
if (!remainingEmissions) {
|
|
1646
|
+
s.next(
|
|
1647
|
+
keys
|
|
1648
|
+
? keys.reduce((b, k, i) => {
|
|
1649
|
+
// @ts-expect-error
|
|
1650
|
+
b[k] = values[i];
|
|
1651
|
+
return b;
|
|
1652
|
+
}, {})
|
|
1653
|
+
: values,
|
|
1654
|
+
);
|
|
1655
|
+
}
|
|
1656
|
+
s.complete();
|
|
1657
|
+
}
|
|
1658
|
+
},
|
|
1659
|
+
}),
|
|
1660
|
+
);
|
|
1667
1661
|
}
|
|
1668
1662
|
});
|
|
1669
1663
|
}
|
|
@@ -1672,9 +1666,9 @@ export function forkJoin(...args: any[]): Observable<any, any, any> {
|
|
|
1672
1666
|
* @tsplus getter fncts.observable.Observable ignore
|
|
1673
1667
|
*/
|
|
1674
1668
|
export function ignore<R, E, A>(fa: Observable<R, E, A>): Observable<R, E, never> {
|
|
1675
|
-
return
|
|
1676
|
-
|
|
1677
|
-
|
|
1669
|
+
return new Observable((subscriber, environment) => {
|
|
1670
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
1671
|
+
subscriber.operate({
|
|
1678
1672
|
next: noop,
|
|
1679
1673
|
}),
|
|
1680
1674
|
);
|
|
@@ -1685,9 +1679,9 @@ export function ignore<R, E, A>(fa: Observable<R, E, A>): Observable<R, E, never
|
|
|
1685
1679
|
* @tsplus getter fncts.observable.Observable isEmpty
|
|
1686
1680
|
*/
|
|
1687
1681
|
export function isEmpty<R, E, A>(fa: Observable<R, E, A>): Observable<R, E, boolean> {
|
|
1688
|
-
return
|
|
1689
|
-
|
|
1690
|
-
|
|
1682
|
+
return new Observable((subscriber, environment) => {
|
|
1683
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
1684
|
+
subscriber.operate({
|
|
1691
1685
|
next: () => {
|
|
1692
1686
|
subscriber.next(false);
|
|
1693
1687
|
subscriber.complete();
|
|
@@ -1705,9 +1699,9 @@ export function isEmpty<R, E, A>(fa: Observable<R, E, A>): Observable<R, E, bool
|
|
|
1705
1699
|
* @tsplus getter fncts.observable.Observable materialize
|
|
1706
1700
|
*/
|
|
1707
1701
|
export function materialize<R, E, A>(fa: Observable<R, E, A>): Observable<R, never, Notification<E, A>> {
|
|
1708
|
-
return
|
|
1709
|
-
|
|
1710
|
-
|
|
1702
|
+
return new Observable((subscriber, environment) => {
|
|
1703
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
1704
|
+
subscriber.operate({
|
|
1711
1705
|
next: (value) => {
|
|
1712
1706
|
subscriber.next(Notification.next(value));
|
|
1713
1707
|
},
|
|
@@ -1740,10 +1734,10 @@ export function mergeScanWithIndex<A, R1, E1, B>(
|
|
|
1740
1734
|
concurrent = Infinity,
|
|
1741
1735
|
) {
|
|
1742
1736
|
return <R, E>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, B> => {
|
|
1743
|
-
return
|
|
1737
|
+
return new Observable((subscriber, environment) => {
|
|
1744
1738
|
let state = initial;
|
|
1745
1739
|
return mergeInternal(
|
|
1746
|
-
|
|
1740
|
+
fa,
|
|
1747
1741
|
subscriber,
|
|
1748
1742
|
environment,
|
|
1749
1743
|
(index, value) => f(index, state, value),
|
|
@@ -1780,10 +1774,10 @@ export function onErrorResumeNext<R, E, A, O extends ReadonlyArray<ObservableInp
|
|
|
1780
1774
|
E | Observable.ErrorOf<O[number]>,
|
|
1781
1775
|
A | Observable.TypeOf<O[number]>
|
|
1782
1776
|
> {
|
|
1783
|
-
return
|
|
1784
|
-
const remaining = [
|
|
1777
|
+
return new Observable((subscriber, environment) => {
|
|
1778
|
+
const remaining = [fa, ...sources];
|
|
1785
1779
|
const subscribeNext = () => {
|
|
1786
|
-
if (!subscriber.
|
|
1780
|
+
if (!subscriber._closed) {
|
|
1787
1781
|
if (remaining.length > 0) {
|
|
1788
1782
|
let nextSource: Observable<
|
|
1789
1783
|
R | Observable.EnvironmentOf<O[number]>,
|
|
@@ -1796,7 +1790,7 @@ export function onErrorResumeNext<R, E, A, O extends ReadonlyArray<ObservableInp
|
|
|
1796
1790
|
subscribeNext();
|
|
1797
1791
|
return;
|
|
1798
1792
|
}
|
|
1799
|
-
const innerSub =
|
|
1793
|
+
const innerSub = subscriber.operate({ error: noop, complete: noop });
|
|
1800
1794
|
subscriber.add(nextSource.provideEnvironment(environment).subscribe(innerSub));
|
|
1801
1795
|
innerSub.add(subscribeNext);
|
|
1802
1796
|
} else {
|
|
@@ -1813,10 +1807,10 @@ export function onErrorResumeNext<R, E, A, O extends ReadonlyArray<ObservableInp
|
|
|
1813
1807
|
*/
|
|
1814
1808
|
export function onEmpty<B>(f: Lazy<B>) {
|
|
1815
1809
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, A | B> => {
|
|
1816
|
-
return
|
|
1810
|
+
return new Observable((subscriber, environment) => {
|
|
1817
1811
|
let hasValue = false;
|
|
1818
|
-
|
|
1819
|
-
|
|
1812
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
1813
|
+
subscriber.operate({
|
|
1820
1814
|
next: (value) => {
|
|
1821
1815
|
hasValue = true;
|
|
1822
1816
|
subscriber.next(value);
|
|
@@ -1840,13 +1834,13 @@ export function repeat(count = Infinity) {
|
|
|
1840
1834
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
1841
1835
|
return count <= 0
|
|
1842
1836
|
? empty()
|
|
1843
|
-
:
|
|
1837
|
+
: new Observable((subscriber, environment) => {
|
|
1844
1838
|
let repeats = 0;
|
|
1845
1839
|
let innerSub: Subscription | null;
|
|
1846
1840
|
const loop = () => {
|
|
1847
1841
|
let syncUnsub = false;
|
|
1848
|
-
innerSub =
|
|
1849
|
-
|
|
1842
|
+
innerSub = fa.provideEnvironment(environment).subscribe(
|
|
1843
|
+
subscriber.operate({
|
|
1850
1844
|
complete: () => {
|
|
1851
1845
|
if (++repeats < count) {
|
|
1852
1846
|
if (innerSub) {
|
|
@@ -1896,13 +1890,13 @@ export function retry(configOrCount: number | RetryConfig = Infinity) {
|
|
|
1896
1890
|
const { count, resetOnSuccess = false } = config;
|
|
1897
1891
|
return count <= 0
|
|
1898
1892
|
? fa
|
|
1899
|
-
:
|
|
1893
|
+
: new Observable((subscriber, environment) => {
|
|
1900
1894
|
let retries = 0;
|
|
1901
1895
|
let innerSub: Subscription | null;
|
|
1902
1896
|
const loop = () => {
|
|
1903
1897
|
let syncUnsub = false;
|
|
1904
|
-
innerSub =
|
|
1905
|
-
|
|
1898
|
+
innerSub = fa.provideEnvironment(environment).subscribe(
|
|
1899
|
+
subscriber.operate({
|
|
1906
1900
|
next: (value) => {
|
|
1907
1901
|
if (resetOnSuccess) {
|
|
1908
1902
|
retries = 0;
|
|
@@ -1940,11 +1934,11 @@ export function retry(configOrCount: number | RetryConfig = Infinity) {
|
|
|
1940
1934
|
*/
|
|
1941
1935
|
export function sample<R1, E1>(notifier: Observable<R1, E1, any>) {
|
|
1942
1936
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, A> => {
|
|
1943
|
-
return
|
|
1937
|
+
return new Observable((subscriber, environment) => {
|
|
1944
1938
|
let hasValue = false;
|
|
1945
1939
|
let lastValue: A | null = null;
|
|
1946
|
-
|
|
1947
|
-
|
|
1940
|
+
fa.provideEnvironment(environment).subscribe(
|
|
1941
|
+
subscriber.operate({
|
|
1948
1942
|
next: (value) => {
|
|
1949
1943
|
hasValue = true;
|
|
1950
1944
|
lastValue = value;
|
|
@@ -1959,9 +1953,7 @@ export function sample<R1, E1>(notifier: Observable<R1, E1, any>) {
|
|
|
1959
1953
|
subscriber.next(value);
|
|
1960
1954
|
}
|
|
1961
1955
|
};
|
|
1962
|
-
notifier
|
|
1963
|
-
.provideEnvironment(environment)
|
|
1964
|
-
.subscribe(operatorSubscriber(subscriber, { next: emit, complete: noop }));
|
|
1956
|
+
notifier.provideEnvironment(environment).subscribe(subscriber.operate({ next: emit, complete: noop }));
|
|
1965
1957
|
});
|
|
1966
1958
|
};
|
|
1967
1959
|
}
|
|
@@ -1980,7 +1972,9 @@ export function sampleTime(period: number, scheduler: SchedulerLike = asyncSched
|
|
|
1980
1972
|
*/
|
|
1981
1973
|
export function scanLeftWithIndex<A, B>(initial: B, f: (index: number, acc: B, value: A) => B) {
|
|
1982
1974
|
return <R, E>(fa: Observable<R, E, A>): Observable<R, E, B> => {
|
|
1983
|
-
return
|
|
1975
|
+
return new Observable((subscriber, environment) =>
|
|
1976
|
+
scanInternal(fa, subscriber, environment, f, initial, true, true),
|
|
1977
|
+
);
|
|
1984
1978
|
};
|
|
1985
1979
|
}
|
|
1986
1980
|
|
|
@@ -2033,11 +2027,11 @@ export function skipLast(skipCount: number) {
|
|
|
2033
2027
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
2034
2028
|
return skipCount <= 0
|
|
2035
2029
|
? fa
|
|
2036
|
-
:
|
|
2030
|
+
: new Observable((subscriber, environment) => {
|
|
2037
2031
|
let ring: A[] = new Array(skipCount);
|
|
2038
2032
|
let seen = 0;
|
|
2039
|
-
|
|
2040
|
-
|
|
2033
|
+
fa.provideEnvironment(environment).subscribe(
|
|
2034
|
+
subscriber.operate({
|
|
2041
2035
|
next: (value) => {
|
|
2042
2036
|
const valueIndex = seen++;
|
|
2043
2037
|
if (valueIndex < skipCount) {
|
|
@@ -2063,9 +2057,9 @@ export function skipLast(skipCount: number) {
|
|
|
2063
2057
|
*/
|
|
2064
2058
|
export function skipUntil<R1, E1>(notifier: Observable<R1, E1, any>) {
|
|
2065
2059
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, A> => {
|
|
2066
|
-
return
|
|
2060
|
+
return new Observable((subscriber, environment) => {
|
|
2067
2061
|
let taking = false;
|
|
2068
|
-
const skipSubscriber =
|
|
2062
|
+
const skipSubscriber = subscriber.operate({
|
|
2069
2063
|
next: () => {
|
|
2070
2064
|
skipSubscriber?.unsubscribe();
|
|
2071
2065
|
taking = true;
|
|
@@ -2073,8 +2067,8 @@ export function skipUntil<R1, E1>(notifier: Observable<R1, E1, any>) {
|
|
|
2073
2067
|
complete: noop,
|
|
2074
2068
|
});
|
|
2075
2069
|
from(notifier).provideEnvironment(environment).subscribe(skipSubscriber);
|
|
2076
|
-
|
|
2077
|
-
|
|
2070
|
+
fa.provideEnvironment(environment).subscribe(
|
|
2071
|
+
subscriber.operate({
|
|
2078
2072
|
next: (value) => taking && subscriber.next(value),
|
|
2079
2073
|
}),
|
|
2080
2074
|
);
|
|
@@ -2087,11 +2081,11 @@ export function skipUntil<R1, E1>(notifier: Observable<R1, E1, any>) {
|
|
|
2087
2081
|
*/
|
|
2088
2082
|
export function skipWhile<A>(predicate: PredicateWithIndex<number, A>) {
|
|
2089
2083
|
return <R, E>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
2090
|
-
return
|
|
2084
|
+
return new Observable((subscriber, environment) => {
|
|
2091
2085
|
let taking = false;
|
|
2092
2086
|
let index = 0;
|
|
2093
|
-
|
|
2094
|
-
|
|
2087
|
+
return fa.provideEnvironment(environment).subscribe(
|
|
2088
|
+
subscriber.operate({
|
|
2095
2089
|
next: (value) => (taking || (taking = !predicate(index++, value))) && subscriber.next(value),
|
|
2096
2090
|
}),
|
|
2097
2091
|
);
|
|
@@ -2103,10 +2097,10 @@ export function skipWhile<A>(predicate: PredicateWithIndex<number, A>) {
|
|
|
2103
2097
|
* @tsplus pipeable fncts.observable.Observable startWith
|
|
2104
2098
|
*/
|
|
2105
2099
|
export function startWith<B extends ReadonlyArray<unknown>>(...values: B) {
|
|
2106
|
-
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, A | B
|
|
2107
|
-
return
|
|
2100
|
+
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, A | Observable.TypeOf<B>> => {
|
|
2101
|
+
return new Observable((subscriber, environment) => {
|
|
2108
2102
|
// @ts-expect-error
|
|
2109
|
-
|
|
2103
|
+
return fa.concat(values).provideEnvironment(environment).subscribe(subscriber);
|
|
2110
2104
|
});
|
|
2111
2105
|
};
|
|
2112
2106
|
}
|
|
@@ -2116,8 +2110,8 @@ export function startWith<B extends ReadonlyArray<unknown>>(...values: B) {
|
|
|
2116
2110
|
*/
|
|
2117
2111
|
export function subscribeOn(scheduler: SchedulerLike, delay = 0) {
|
|
2118
2112
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
2119
|
-
return
|
|
2120
|
-
subscriber.add(scheduler.schedule(() =>
|
|
2113
|
+
return new Observable((subscriber, environment) => {
|
|
2114
|
+
subscriber.add(scheduler.schedule(() => fa.provideEnvironment(environment).subscribe(subscriber), delay));
|
|
2121
2115
|
});
|
|
2122
2116
|
};
|
|
2123
2117
|
}
|
|
@@ -2136,36 +2130,34 @@ export function switchAll<R, E, R1, E1, A>(
|
|
|
2136
2130
|
*/
|
|
2137
2131
|
export function switchMapWithIndex<A, R1, E1, B>(f: (index: number, value: A) => ObservableInput<R1, E1, B>) {
|
|
2138
2132
|
return <R, E>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, B> => {
|
|
2139
|
-
return
|
|
2133
|
+
return new Observable((destination, environment) => {
|
|
2140
2134
|
let innerSubscriber: Subscriber<E | E1, B> | null = null;
|
|
2141
2135
|
let index = 0;
|
|
2142
2136
|
let isComplete = false;
|
|
2143
|
-
const checkComplete = () => isComplete && !innerSubscriber &&
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
{
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
.
|
|
2154
|
-
(
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
);
|
|
2162
|
-
},
|
|
2137
|
+
const checkComplete = () => isComplete && !innerSubscriber && destination.complete();
|
|
2138
|
+
|
|
2139
|
+
fa.provideEnvironment(environment).subscribe(
|
|
2140
|
+
destination.operate({
|
|
2141
|
+
next: (value) => {
|
|
2142
|
+
innerSubscriber?.unsubscribe();
|
|
2143
|
+
const outerIndex = index++;
|
|
2144
|
+
from(f(outerIndex, value))
|
|
2145
|
+
.provideEnvironment(environment)
|
|
2146
|
+
.subscribe(
|
|
2147
|
+
(innerSubscriber = destination.operate({
|
|
2148
|
+
next: (innerValue) => destination.next(innerValue),
|
|
2149
|
+
complete: () => {
|
|
2150
|
+
innerSubscriber = null!;
|
|
2151
|
+
checkComplete();
|
|
2152
|
+
},
|
|
2153
|
+
})),
|
|
2154
|
+
);
|
|
2163
2155
|
},
|
|
2164
|
-
() => {
|
|
2156
|
+
complete: () => {
|
|
2165
2157
|
isComplete = true;
|
|
2166
2158
|
checkComplete();
|
|
2167
2159
|
},
|
|
2168
|
-
),
|
|
2160
|
+
}),
|
|
2169
2161
|
);
|
|
2170
2162
|
});
|
|
2171
2163
|
};
|
|
@@ -2188,10 +2180,9 @@ export function switchScanWithIndex<A, R1, E1, B>(
|
|
|
2188
2180
|
f: (index: number, acc: B, value: A) => ObservableInput<R1, E1, B>,
|
|
2189
2181
|
) {
|
|
2190
2182
|
return <R, E>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, B> => {
|
|
2191
|
-
return
|
|
2183
|
+
return new Observable((subscriber, environment) => {
|
|
2192
2184
|
let state = initial;
|
|
2193
|
-
|
|
2194
|
-
.switchMapWithIndex((index, value) => from(f(index, state, value)).map((b) => ((state = b), b)))
|
|
2185
|
+
fa.switchMapWithIndex((index, value) => from(f(index, state, value)).map((b) => ((state = b), b)))
|
|
2195
2186
|
.provideEnvironment(environment)
|
|
2196
2187
|
.subscribe(subscriber);
|
|
2197
2188
|
return () => {
|
|
@@ -2217,10 +2208,10 @@ export function take(count: number) {
|
|
|
2217
2208
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
2218
2209
|
return count <= 0
|
|
2219
2210
|
? empty()
|
|
2220
|
-
:
|
|
2211
|
+
: new Observable((sub, environment) => {
|
|
2221
2212
|
let seen = 0;
|
|
2222
|
-
|
|
2223
|
-
|
|
2213
|
+
fa.provideEnvironment(environment).subscribe(
|
|
2214
|
+
sub.operate({
|
|
2224
2215
|
next: (value) => {
|
|
2225
2216
|
if (++seen <= count) {
|
|
2226
2217
|
sub.next(value);
|
|
@@ -2242,27 +2233,24 @@ export function takeLast(count: number) {
|
|
|
2242
2233
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
2243
2234
|
return count <= 0
|
|
2244
2235
|
? empty()
|
|
2245
|
-
:
|
|
2236
|
+
: new Observable((subscriber, environment) => {
|
|
2246
2237
|
let buffer: A[] = [];
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
buffer.push(value);
|
|
2253
|
-
count < buffer.length && buffer.shift();
|
|
2254
|
-
},
|
|
2255
|
-
complete: () => {
|
|
2256
|
-
for (const value of buffer) {
|
|
2257
|
-
subscriber.next(value);
|
|
2258
|
-
}
|
|
2259
|
-
subscriber.complete();
|
|
2260
|
-
},
|
|
2238
|
+
fa.provideEnvironment(environment).subscribe(
|
|
2239
|
+
subscriber.operate({
|
|
2240
|
+
next: (value) => {
|
|
2241
|
+
buffer.push(value);
|
|
2242
|
+
count < buffer.length && buffer.shift();
|
|
2261
2243
|
},
|
|
2262
|
-
() => {
|
|
2244
|
+
complete: () => {
|
|
2245
|
+
for (const value of buffer) {
|
|
2246
|
+
subscriber.next(value);
|
|
2247
|
+
}
|
|
2248
|
+
subscriber.complete();
|
|
2249
|
+
},
|
|
2250
|
+
finalize: () => {
|
|
2263
2251
|
buffer = null!;
|
|
2264
2252
|
},
|
|
2265
|
-
),
|
|
2253
|
+
}),
|
|
2266
2254
|
);
|
|
2267
2255
|
});
|
|
2268
2256
|
};
|
|
@@ -2273,11 +2261,11 @@ export function takeLast(count: number) {
|
|
|
2273
2261
|
*/
|
|
2274
2262
|
export function takeUntil<R1, E1>(notifier: ObservableInput<R1, E1, any>) {
|
|
2275
2263
|
return <R, E, A>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, A> => {
|
|
2276
|
-
return
|
|
2264
|
+
return new Observable((subscriber, environment) => {
|
|
2277
2265
|
from(notifier)
|
|
2278
2266
|
.provideEnvironment(environment)
|
|
2279
|
-
.subscribe(
|
|
2280
|
-
!subscriber.
|
|
2267
|
+
.subscribe(subscriber.operate({ next: () => subscriber.complete(), complete: noop }));
|
|
2268
|
+
!subscriber._closed && fa.provideEnvironment(environment).subscribe(subscriber);
|
|
2281
2269
|
});
|
|
2282
2270
|
};
|
|
2283
2271
|
}
|
|
@@ -2295,10 +2283,10 @@ export function takeWhileWithIndex<A>(
|
|
|
2295
2283
|
): <R, E>(fa: Observable<R, E, A>) => Observable<R, E, A>;
|
|
2296
2284
|
export function takeWhileWithIndex<A>(predicate: PredicateWithIndex<number, A>, inclusive?: boolean) {
|
|
2297
2285
|
return <R, E>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
2298
|
-
return
|
|
2286
|
+
return new Observable((subscriber, environment) => {
|
|
2299
2287
|
let index = 0;
|
|
2300
|
-
|
|
2301
|
-
|
|
2288
|
+
fa.provideEnvironment(environment).subscribe(
|
|
2289
|
+
subscriber.operate({
|
|
2302
2290
|
next: (value) => {
|
|
2303
2291
|
const result = predicate(index++, value);
|
|
2304
2292
|
(result || inclusive) && subscriber.next(value);
|
|
@@ -2332,9 +2320,9 @@ export function takeWhile<A>(predicate: Predicate<A>, inclusive?: boolean) {
|
|
|
2332
2320
|
*/
|
|
2333
2321
|
export function tap<E, A>(observer: Partial<Observer<E, A>>) {
|
|
2334
2322
|
return <R>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
2335
|
-
return
|
|
2336
|
-
|
|
2337
|
-
|
|
2323
|
+
return new Observable((subscriber, environment) => {
|
|
2324
|
+
fa.provideEnvironment(environment).subscribe(
|
|
2325
|
+
subscriber.operate({
|
|
2338
2326
|
next: (value) => {
|
|
2339
2327
|
observer.next?.(value);
|
|
2340
2328
|
subscriber.next(value);
|
|
@@ -2371,7 +2359,7 @@ export function throttle<A, R1, E1>(
|
|
|
2371
2359
|
{ leading, trailing }: ThrottleConfig = defaultThrottleConfig,
|
|
2372
2360
|
) {
|
|
2373
2361
|
return <R, E>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, A> => {
|
|
2374
|
-
return
|
|
2362
|
+
return new Observable((subscriber, environment) => {
|
|
2375
2363
|
let sendValue: Maybe<A> = Nothing();
|
|
2376
2364
|
let throttled: Subscription | null = null;
|
|
2377
2365
|
let isComplete = false;
|
|
@@ -2390,7 +2378,7 @@ export function throttle<A, R1, E1>(
|
|
|
2390
2378
|
const startThrottling = (value: A) =>
|
|
2391
2379
|
(throttled = from(durationSelector(value))
|
|
2392
2380
|
.provideEnvironment(environment)
|
|
2393
|
-
.subscribe(
|
|
2381
|
+
.subscribe(subscriber.operate({ next: endThrottling, complete: cleanupThrottling })));
|
|
2394
2382
|
const send = () => {
|
|
2395
2383
|
if (sendValue.isJust()) {
|
|
2396
2384
|
const { value } = sendValue;
|
|
@@ -2399,15 +2387,15 @@ export function throttle<A, R1, E1>(
|
|
|
2399
2387
|
!isComplete && startThrottling(value);
|
|
2400
2388
|
}
|
|
2401
2389
|
};
|
|
2402
|
-
|
|
2403
|
-
|
|
2390
|
+
fa.provideEnvironment(environment).subscribe(
|
|
2391
|
+
subscriber.operate({
|
|
2404
2392
|
next: (value) => {
|
|
2405
2393
|
sendValue = Just(value);
|
|
2406
|
-
!(throttled && !throttled.
|
|
2394
|
+
!(throttled && !throttled._closed) && (leading ? send() : startThrottling(value));
|
|
2407
2395
|
},
|
|
2408
2396
|
complete: () => {
|
|
2409
2397
|
isComplete = true;
|
|
2410
|
-
!(trailing && sendValue.isJust() && throttled && !throttled.
|
|
2398
|
+
!(trailing && sendValue.isJust() && throttled && !throttled._closed) && subscriber.complete();
|
|
2411
2399
|
},
|
|
2412
2400
|
}),
|
|
2413
2401
|
);
|
|
@@ -2479,7 +2467,7 @@ export function timeout(config: any) {
|
|
|
2479
2467
|
scheduler = asyncScheduler,
|
|
2480
2468
|
meta = null!,
|
|
2481
2469
|
} = config as TimeoutConfig<R, E1, A, B, M>;
|
|
2482
|
-
return
|
|
2470
|
+
return new Observable((subscriber, environment) => {
|
|
2483
2471
|
// eslint-disable-next-line prefer-const
|
|
2484
2472
|
let originalSourceSubscription: Subscription;
|
|
2485
2473
|
let timerSubscription: Subscription;
|
|
@@ -2504,25 +2492,22 @@ export function timeout(config: any) {
|
|
|
2504
2492
|
delay,
|
|
2505
2493
|
);
|
|
2506
2494
|
};
|
|
2507
|
-
originalSourceSubscription =
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
subscriber.next(value);
|
|
2516
|
-
each! > 0 && startTimer(each!);
|
|
2517
|
-
},
|
|
2495
|
+
originalSourceSubscription = fa.provideEnvironment(environment).subscribe(
|
|
2496
|
+
subscriber.operate({
|
|
2497
|
+
next: (value) => {
|
|
2498
|
+
timerSubscription?.unsubscribe();
|
|
2499
|
+
seen++;
|
|
2500
|
+
lastValue = Just(value);
|
|
2501
|
+
subscriber.next(value);
|
|
2502
|
+
each! > 0 && startTimer(each!);
|
|
2518
2503
|
},
|
|
2519
|
-
() => {
|
|
2520
|
-
if (!timerSubscription?.
|
|
2504
|
+
finalize: () => {
|
|
2505
|
+
if (!timerSubscription?._closed) {
|
|
2521
2506
|
timerSubscription?.unsubscribe();
|
|
2522
2507
|
}
|
|
2523
2508
|
lastValue = Nothing();
|
|
2524
2509
|
},
|
|
2525
|
-
),
|
|
2510
|
+
}),
|
|
2526
2511
|
);
|
|
2527
2512
|
startTimer(first != null ? (typeof first === "number" ? first : +first - scheduler.now()) : each!);
|
|
2528
2513
|
});
|
|
@@ -2541,9 +2526,8 @@ function toArrayAccumulator(arr: any[], value: any) {
|
|
|
2541
2526
|
* @tsplus getter fncts.observable.Observable toArray
|
|
2542
2527
|
*/
|
|
2543
2528
|
export function toArray<R, E, A>(fa: Observable<R, E, A>): Observable<R, E, ReadonlyArray<A>> {
|
|
2544
|
-
return
|
|
2545
|
-
|
|
2546
|
-
.foldLeft([] as A[], toArrayAccumulator)
|
|
2529
|
+
return new Observable((subscriber, environment) => {
|
|
2530
|
+
fa.foldLeft([] as A[], toArrayAccumulator)
|
|
2547
2531
|
.provideEnvironment(environment)
|
|
2548
2532
|
.subscribe(subscriber);
|
|
2549
2533
|
});
|
|
@@ -2554,10 +2538,10 @@ export function toArray<R, E, A>(fa: Observable<R, E, A>): Observable<R, E, Read
|
|
|
2554
2538
|
*/
|
|
2555
2539
|
export function unique<A, K, R1, E1 = never>(toKey?: (value: A) => K, flushes?: Observable<R1, E1, any>) {
|
|
2556
2540
|
return <R, E>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, A> => {
|
|
2557
|
-
return
|
|
2541
|
+
return new Observable((subscriber, environment) => {
|
|
2558
2542
|
let distinctKeys = HashSet.empty<A | K>();
|
|
2559
|
-
|
|
2560
|
-
|
|
2543
|
+
fa.provideEnvironment(environment).subscribe(
|
|
2544
|
+
subscriber.operate({
|
|
2561
2545
|
next: (value) => {
|
|
2562
2546
|
const key = toKey ? toKey(value) : value;
|
|
2563
2547
|
if (!distinctKeys.has(key)) {
|
|
@@ -2569,7 +2553,7 @@ export function unique<A, K, R1, E1 = never>(toKey?: (value: A) => K, flushes?:
|
|
|
2569
2553
|
);
|
|
2570
2554
|
flushes
|
|
2571
2555
|
?.provideEnvironment(environment)
|
|
2572
|
-
.subscribe(
|
|
2556
|
+
.subscribe(subscriber.operate({ next: () => (distinctKeys = HashSet.empty()), complete: noop }));
|
|
2573
2557
|
});
|
|
2574
2558
|
};
|
|
2575
2559
|
}
|
|
@@ -2595,11 +2579,11 @@ export function uniqueUntilChanged<A, K = A>(
|
|
|
2595
2579
|
) {
|
|
2596
2580
|
return <R, E>(fa: Observable<R, E, A>): Observable<R, E, A> => {
|
|
2597
2581
|
const compare = "equals" in E ? E.equals : E;
|
|
2598
|
-
return
|
|
2582
|
+
return new Observable((subscriber, environment) => {
|
|
2599
2583
|
let previousKey: K;
|
|
2600
2584
|
let first = true;
|
|
2601
|
-
|
|
2602
|
-
|
|
2585
|
+
fa.provideEnvironment(environment).subscribe(
|
|
2586
|
+
subscriber.operate({
|
|
2603
2587
|
next: (value) => {
|
|
2604
2588
|
const currentKey = keySelector(value);
|
|
2605
2589
|
if (first || !compare(previousKey, currentKey)) {
|
|
@@ -2655,7 +2639,7 @@ function combineLatestInternal(
|
|
|
2655
2639
|
const source = scheduler ? observables[i]!.pipe(scheduled(scheduler)) : from(observables[i]!);
|
|
2656
2640
|
let hasFirstValue = false;
|
|
2657
2641
|
source.provideEnvironment(environment).subscribe(
|
|
2658
|
-
|
|
2642
|
+
subscriber.operate({
|
|
2659
2643
|
next: (value) => {
|
|
2660
2644
|
values[i] = value;
|
|
2661
2645
|
if (!hasFirstValue) {
|
|
@@ -2678,15 +2662,16 @@ function combineLatestInternal(
|
|
|
2678
2662
|
});
|
|
2679
2663
|
}
|
|
2680
2664
|
|
|
2681
|
-
function findInternal<A>(
|
|
2665
|
+
function findInternal<R, E, A>(
|
|
2666
|
+
source: Observable<R, E, A>,
|
|
2682
2667
|
predicate: PredicateWithIndex<number, A>,
|
|
2683
2668
|
emit: "value" | "index",
|
|
2684
|
-
):
|
|
2669
|
+
): (subscriber: Subscriber<E, any>, environment: Environment<R>) => void {
|
|
2685
2670
|
const findIndex = emit === "index";
|
|
2686
|
-
return (
|
|
2671
|
+
return (subscriber, environment) => {
|
|
2687
2672
|
let index = 0;
|
|
2688
2673
|
source.provideEnvironment(environment).subscribe(
|
|
2689
|
-
|
|
2674
|
+
subscriber.operate({
|
|
2690
2675
|
next: (value) => {
|
|
2691
2676
|
const i = index++;
|
|
2692
2677
|
if (predicate(index++, value)) {
|
|
@@ -2795,44 +2780,51 @@ function mergeInternal<R, E, A, R1, E1, B>(
|
|
|
2795
2780
|
}
|
|
2796
2781
|
|
|
2797
2782
|
export function scanInternal<R, E, A, B>(
|
|
2783
|
+
source: Observable<R, E, A>,
|
|
2784
|
+
subscriber: Subscriber<any, any>,
|
|
2785
|
+
environment: Environment<R>,
|
|
2798
2786
|
f: (index: number, acc: A, value: A) => B,
|
|
2799
2787
|
initial: B,
|
|
2800
2788
|
hasInitial: false,
|
|
2801
2789
|
emitOnNext: boolean,
|
|
2802
2790
|
emitBeforeComplete?: undefined | true,
|
|
2803
|
-
):
|
|
2791
|
+
): Subscription;
|
|
2804
2792
|
export function scanInternal<R, E, A, B>(
|
|
2793
|
+
source: Observable<R, E, A>,
|
|
2794
|
+
subscriber: Subscriber<any, any>,
|
|
2795
|
+
environment: Environment<R>,
|
|
2805
2796
|
f: (index: number, acc: B, value: A) => B,
|
|
2806
2797
|
initial: B,
|
|
2807
2798
|
hasInitial: true,
|
|
2808
2799
|
emitOnNext: boolean,
|
|
2809
2800
|
emitBeforeComplete?: undefined | true,
|
|
2810
|
-
):
|
|
2801
|
+
): Subscription;
|
|
2811
2802
|
export function scanInternal<R, E, A, B>(
|
|
2803
|
+
source: Observable<R, E, A>,
|
|
2804
|
+
subscriber: Subscriber<any, any>,
|
|
2805
|
+
environment: Environment<R>,
|
|
2812
2806
|
f: (index: number, acc: A | B, value: A) => B,
|
|
2813
2807
|
initial: B,
|
|
2814
2808
|
hasInitial: boolean,
|
|
2815
2809
|
emitOnNext: boolean,
|
|
2816
2810
|
emitBeforeComplete?: undefined | true,
|
|
2817
|
-
):
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
(
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
);
|
|
2837
|
-
};
|
|
2811
|
+
): Subscription {
|
|
2812
|
+
let hasState = hasInitial;
|
|
2813
|
+
let state: any = initial;
|
|
2814
|
+
let index = 0;
|
|
2815
|
+
return source.provideEnvironment(environment).subscribe(
|
|
2816
|
+
subscriber.operate({
|
|
2817
|
+
next: (value) => {
|
|
2818
|
+
const i = index++;
|
|
2819
|
+
state = hasState ? f(i, state, value) : ((hasState = true), value);
|
|
2820
|
+
emitOnNext && subscriber.next(state);
|
|
2821
|
+
},
|
|
2822
|
+
complete:
|
|
2823
|
+
emitBeforeComplete &&
|
|
2824
|
+
(() => {
|
|
2825
|
+
hasState && subscriber.next(state);
|
|
2826
|
+
subscriber.complete();
|
|
2827
|
+
}),
|
|
2828
|
+
}),
|
|
2829
|
+
);
|
|
2838
2830
|
}
|