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