@fncts/observable 0.0.9 → 0.0.11
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/BehaviorSubject.d.ts +2 -2
- package/Notification.d.ts +4 -4
- package/Observable/api/connect.d.ts +2 -2
- package/Observable/api/connectable.d.ts +2 -2
- package/Observable/api/fromEvent.d.ts +4 -0
- package/Observable/api/race.d.ts +2 -1
- package/Observable/api/raceWith.d.ts +2 -2
- package/Observable/api/repeatWhen.d.ts +5 -2
- package/Observable/api/retryWhen.d.ts +2 -3
- package/Observable/api/share.d.ts +5 -4
- package/Observable/api/window.d.ts +2 -2
- package/Observable/api/windowCount.d.ts +2 -2
- package/Observable/api/windowTime.d.ts +5 -5
- package/Observable/api/windowToggle.d.ts +3 -3
- package/Observable/api/windowWhen.d.ts +3 -3
- package/Observable/api.d.ts +189 -195
- package/Observable/definition.d.ts +8 -6
- package/ObservableRef/api.d.ts +63 -0
- package/ObservableRef/atomic.d.ts +32 -0
- package/ObservableRef/definition.d.ts +52 -0
- package/Operator.d.ts +2 -2
- package/_cjs/Action.cjs +0 -7
- package/_cjs/Action.cjs.map +1 -1
- package/_cjs/AnimationFrameAction.cjs +0 -12
- package/_cjs/AnimationFrameAction.cjs.map +1 -1
- package/_cjs/AnimationFrameScheduler.cjs +0 -12
- package/_cjs/AnimationFrameScheduler.cjs.map +1 -1
- package/_cjs/AsyncAction.cjs +0 -25
- package/_cjs/AsyncAction.cjs.map +1 -1
- package/_cjs/AsyncScheduler.cjs +2 -16
- package/_cjs/AsyncScheduler.cjs.map +1 -1
- package/_cjs/BehaviorSubject.cjs +1 -13
- package/_cjs/BehaviorSubject.cjs.map +1 -1
- package/_cjs/Notification.cjs +21 -40
- package/_cjs/Notification.cjs.map +1 -1
- package/_cjs/Observable/api/connect.cjs +12 -17
- package/_cjs/Observable/api/connect.cjs.map +1 -1
- package/_cjs/Observable/api/connectable.cjs +6 -18
- package/_cjs/Observable/api/connectable.cjs.map +1 -1
- package/_cjs/Observable/api/fromCallback.cjs +0 -15
- package/_cjs/Observable/api/fromCallback.cjs.map +1 -1
- package/_cjs/Observable/api/fromEvent.cjs +3 -5
- package/_cjs/Observable/api/fromEvent.cjs.map +1 -1
- package/_cjs/Observable/api/index.cjs +0 -28
- package/_cjs/Observable/api/index.cjs.map +1 -1
- package/_cjs/Observable/api/race.cjs +2 -12
- package/_cjs/Observable/api/race.cjs.map +1 -1
- package/_cjs/Observable/api/raceWith.cjs +8 -11
- package/_cjs/Observable/api/raceWith.cjs.map +1 -1
- package/_cjs/Observable/api/repeatWhen.cjs +44 -55
- package/_cjs/Observable/api/repeatWhen.cjs.map +1 -1
- package/_cjs/Observable/api/retryWhen.cjs +29 -45
- package/_cjs/Observable/api/retryWhen.cjs.map +1 -1
- package/_cjs/Observable/api/share.cjs +61 -77
- package/_cjs/Observable/api/share.cjs.map +1 -1
- package/_cjs/Observable/api/window.cjs +33 -39
- package/_cjs/Observable/api/window.cjs.map +1 -1
- package/_cjs/Observable/api/windowCount.cjs +40 -48
- package/_cjs/Observable/api/windowCount.cjs.map +1 -1
- package/_cjs/Observable/api/windowTime.cjs +60 -73
- package/_cjs/Observable/api/windowTime.cjs.map +1 -1
- package/_cjs/Observable/api/windowToggle.cjs +55 -71
- package/_cjs/Observable/api/windowToggle.cjs.map +1 -1
- package/_cjs/Observable/api/windowWhen.cjs +42 -52
- package/_cjs/Observable/api/windowWhen.cjs.map +1 -1
- package/_cjs/Observable/api.cjs +1260 -1485
- package/_cjs/Observable/api.cjs.map +1 -1
- package/_cjs/Observable/definition.cjs +9 -37
- package/_cjs/Observable/definition.cjs.map +1 -1
- package/_cjs/Observable/dom/animationFrames.cjs +0 -12
- package/_cjs/Observable/dom/animationFrames.cjs.map +1 -1
- package/_cjs/Observable.cjs +0 -38
- package/_cjs/Observable.cjs.map +1 -1
- package/_cjs/ObservableRef/api.cjs +160 -0
- package/_cjs/ObservableRef/api.cjs.map +1 -0
- package/_cjs/ObservableRef/atomic.cjs +93 -0
- package/_cjs/ObservableRef/atomic.cjs.map +1 -0
- package/_cjs/ObservableRef/definition.cjs +24 -0
- package/_cjs/ObservableRef/definition.cjs.map +1 -0
- package/_cjs/Operator.cjs +11 -21
- package/_cjs/Operator.cjs.map +1 -1
- package/_cjs/Scheduler.cjs +0 -18
- package/_cjs/Scheduler.cjs.map +1 -1
- package/_cjs/Subject.cjs +3 -50
- package/_cjs/Subject.cjs.map +1 -1
- package/_cjs/Subscriber.cjs +0 -32
- package/_cjs/Subscriber.cjs.map +1 -1
- package/_cjs/Subscription.cjs +0 -37
- package/_cjs/Subscription.cjs.map +1 -1
- package/_cjs/index.cjs +0 -28
- package/_cjs/internal/animationFrameProvider.cjs +0 -9
- package/_cjs/internal/animationFrameProvider.cjs.map +1 -1
- package/_cjs/internal/args.cjs +0 -6
- package/_cjs/internal/args.cjs.map +1 -1
- package/_cjs/internal/intervalProvider.cjs +0 -2
- package/_cjs/internal/intervalProvider.cjs.map +1 -1
- package/_cjs/internal/performanceTimestampProvider.cjs +0 -1
- package/_cjs/internal/performanceTimestampProvider.cjs.map +1 -1
- package/_cjs/internal/timeoutProvider.cjs +0 -2
- package/_cjs/internal/timeoutProvider.cjs.map +1 -1
- package/_cjs/internal/timestampProvider.cjs +0 -1
- package/_cjs/internal/timestampProvider.cjs.map +1 -1
- package/_cjs/internal/util.cjs +2 -21
- package/_cjs/internal/util.cjs.map +1 -1
- package/_mjs/Action.mjs +0 -3
- package/_mjs/Action.mjs.map +1 -1
- package/_mjs/AnimationFrameAction.mjs +0 -6
- package/_mjs/AnimationFrameAction.mjs.map +1 -1
- package/_mjs/AnimationFrameScheduler.mjs +0 -7
- package/_mjs/AnimationFrameScheduler.mjs.map +1 -1
- package/_mjs/AsyncAction.mjs +0 -17
- package/_mjs/AsyncAction.mjs.map +1 -1
- package/_mjs/AsyncScheduler.mjs +2 -10
- package/_mjs/AsyncScheduler.mjs.map +1 -1
- package/_mjs/BehaviorSubject.mjs +1 -8
- package/_mjs/BehaviorSubject.mjs.map +1 -1
- package/_mjs/Notification.mjs +18 -26
- package/_mjs/Notification.mjs.map +1 -1
- package/_mjs/Observable/api/connect.mjs +12 -11
- package/_mjs/Observable/api/connect.mjs.map +1 -1
- package/_mjs/Observable/api/connectable.mjs +6 -9
- package/_mjs/Observable/api/connectable.mjs.map +1 -1
- package/_mjs/Observable/api/fromCallback.mjs +0 -10
- package/_mjs/Observable/api/fromCallback.mjs.map +1 -1
- package/_mjs/Observable/api/fromEvent.mjs +3 -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 +2 -6
- package/_mjs/Observable/api/race.mjs.map +1 -1
- package/_mjs/Observable/api/raceWith.mjs +7 -6
- package/_mjs/Observable/api/raceWith.mjs.map +1 -1
- package/_mjs/Observable/api/repeatWhen.mjs +44 -48
- package/_mjs/Observable/api/repeatWhen.mjs.map +1 -1
- package/_mjs/Observable/api/retryWhen.mjs +29 -37
- package/_mjs/Observable/api/retryWhen.mjs.map +1 -1
- package/_mjs/Observable/api/share.mjs +60 -70
- package/_mjs/Observable/api/share.mjs.map +1 -1
- package/_mjs/Observable/api/window.mjs +32 -33
- package/_mjs/Observable/api/window.mjs.map +1 -1
- package/_mjs/Observable/api/windowCount.mjs +39 -43
- package/_mjs/Observable/api/windowCount.mjs.map +1 -1
- package/_mjs/Observable/api/windowTime.mjs +59 -63
- package/_mjs/Observable/api/windowTime.mjs.map +1 -1
- package/_mjs/Observable/api/windowToggle.mjs +54 -62
- package/_mjs/Observable/api/windowToggle.mjs.map +1 -1
- package/_mjs/Observable/api/windowWhen.mjs +41 -45
- package/_mjs/Observable/api/windowWhen.mjs.map +1 -1
- package/_mjs/Observable/api.mjs +1186 -1311
- package/_mjs/Observable/api.mjs.map +1 -1
- package/_mjs/Observable/definition.mjs +9 -24
- package/_mjs/Observable/definition.mjs.map +1 -1
- package/_mjs/Observable/dom/animationFrames.mjs +0 -5
- package/_mjs/Observable/dom/animationFrames.mjs.map +1 -1
- package/_mjs/Observable.mjs +4 -4
- package/_mjs/Observable.mjs.map +1 -1
- package/_mjs/ObservableRef/api.mjs +141 -0
- package/_mjs/ObservableRef/api.mjs.map +1 -0
- package/_mjs/ObservableRef/atomic.mjs +82 -0
- package/_mjs/ObservableRef/atomic.mjs.map +1 -0
- package/_mjs/ObservableRef/definition.mjs +16 -0
- package/_mjs/ObservableRef/definition.mjs.map +1 -0
- package/_mjs/Operator.mjs +11 -12
- package/_mjs/Operator.mjs.map +1 -1
- package/_mjs/Scheduler.mjs +0 -9
- package/_mjs/Scheduler.mjs.map +1 -1
- package/_mjs/Subject.mjs +3 -37
- package/_mjs/Subject.mjs.map +1 -1
- package/_mjs/Subscriber.mjs +0 -20
- package/_mjs/Subscriber.mjs.map +1 -1
- package/_mjs/Subscription.mjs +0 -26
- package/_mjs/Subscription.mjs.map +1 -1
- package/_mjs/index.mjs.map +1 -1
- package/_mjs/internal/animationFrameProvider.mjs +0 -5
- package/_mjs/internal/animationFrameProvider.mjs.map +1 -1
- package/_mjs/internal/args.mjs +0 -2
- package/_mjs/internal/args.mjs.map +1 -1
- package/_mjs/internal/intervalProvider.mjs +0 -2
- package/_mjs/internal/intervalProvider.mjs.map +1 -1
- package/_mjs/internal/performanceTimestampProvider.mjs +0 -1
- package/_mjs/internal/performanceTimestampProvider.mjs.map +1 -1
- package/_mjs/internal/timeoutProvider.mjs +0 -2
- package/_mjs/internal/timeoutProvider.mjs.map +1 -1
- package/_mjs/internal/timestampProvider.mjs +0 -1
- package/_mjs/internal/timestampProvider.mjs.map +1 -1
- package/_mjs/internal/util.mjs +2 -7
- package/_mjs/internal/util.mjs.map +1 -1
- package/_src/Action.ts +0 -1
- package/_src/AnimationFrameAction.ts +0 -2
- package/_src/AnimationFrameScheduler.ts +2 -7
- package/_src/BehaviorSubject.ts +3 -3
- package/_src/Notification.ts +21 -23
- package/_src/Observable/api/connect.ts +12 -9
- package/_src/Observable/api/connectable.ts +6 -7
- package/_src/Observable/api/fromCallback.ts +0 -1
- package/_src/Observable/api/fromEvent.ts +3 -0
- package/_src/Observable/api/race.ts +15 -13
- package/_src/Observable/api/raceWith.ts +15 -14
- package/_src/Observable/api/repeatWhen.ts +51 -56
- package/_src/Observable/api/retryWhen.ts +38 -43
- package/_src/Observable/api/share.ts +63 -71
- package/_src/Observable/api/window.ts +36 -41
- package/_src/Observable/api/windowCount.ts +44 -51
- package/_src/Observable/api/windowTime.ts +69 -81
- package/_src/Observable/api/windowToggle.ts +69 -73
- package/_src/Observable/api/windowWhen.ts +49 -55
- package/_src/Observable/api.ts +1493 -1498
- package/_src/Observable/definition.ts +24 -18
- package/_src/Observable/dom/animationFrames.ts +16 -6
- package/_src/Observable/instances.ts +0 -23
- package/_src/Observable.ts +0 -2
- package/_src/ObservableRef/api.ts +169 -0
- package/_src/ObservableRef/atomic.ts +85 -0
- package/_src/ObservableRef/definition.ts +57 -0
- package/_src/Operator.ts +20 -15
- package/_src/Scheduler.ts +0 -6
- package/_src/Subject.ts +1 -1
- package/_src/Subscriber.ts +3 -2
- package/_src/global.ts +5 -1
- package/_src/internal/util.ts +8 -4
- package/global.d.ts +5 -1
- package/package.json +2 -2
package/_src/Notification.ts
CHANGED
|
@@ -60,32 +60,30 @@ export function complete<E = never, A = never>(): Notification<E, A> {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
|
-
* @tsplus
|
|
63
|
+
* @tsplus pipeable fncts.observable.Notification match
|
|
64
64
|
*/
|
|
65
|
-
export function
|
|
66
|
-
fa: Notification<E, A
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
case "Complete":
|
|
77
|
-
return onComplete();
|
|
78
|
-
}
|
|
65
|
+
export function match<E, A, B, C, F>(onNext: (a: A) => B, onFail: (e: Cause<E>) => C, onComplete: () => F) {
|
|
66
|
+
return <D>(fa: Notification<E, A>): B | C | D | F => {
|
|
67
|
+
switch (fa._tag) {
|
|
68
|
+
case "Next":
|
|
69
|
+
return onNext(fa.value);
|
|
70
|
+
case "Fail":
|
|
71
|
+
return onFail(fa.error);
|
|
72
|
+
case "Complete":
|
|
73
|
+
return onComplete();
|
|
74
|
+
}
|
|
75
|
+
};
|
|
79
76
|
}
|
|
80
77
|
|
|
81
78
|
/**
|
|
82
|
-
* @tsplus
|
|
79
|
+
* @tsplus pipeable fncts.observable.Notification observe
|
|
83
80
|
*/
|
|
84
|
-
export function
|
|
85
|
-
return
|
|
86
|
-
notification
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
81
|
+
export function observe<E, A>(observer: Partial<Observer<E, A>>) {
|
|
82
|
+
return (notification: Notification<E, A>): void => {
|
|
83
|
+
return notification.match(
|
|
84
|
+
(a) => observer.next?.(a),
|
|
85
|
+
(e) => observer.error?.(e),
|
|
86
|
+
() => observer.complete?.(),
|
|
87
|
+
);
|
|
88
|
+
};
|
|
91
89
|
}
|
|
@@ -7,17 +7,20 @@ const DEFAULT_CONNECT_CONFIG: ConnectConfig<any, any> = {
|
|
|
7
7
|
};
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* @tsplus
|
|
10
|
+
* @tsplus pipeable fncts.observable.Observable connect
|
|
11
11
|
*/
|
|
12
12
|
export function connect<R, E, A, R1, E1, B>(
|
|
13
|
-
fa: Observable<R, E, A>,
|
|
14
13
|
selector: (shared: Observable<R, E, A>) => ObservableInput<R1, E1, B>,
|
|
15
14
|
config: ConnectConfig<E, A> = DEFAULT_CONNECT_CONFIG,
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
) {
|
|
16
|
+
return (fa: Observable<R, E, A>): Observable<R | R1, E | E1, B> => {
|
|
17
|
+
const { connector } = config;
|
|
18
|
+
return fa.operate((source, subscriber, environment) => {
|
|
19
|
+
const subject = connector();
|
|
20
|
+
Observable.from(selector(Observable.fromSubscribable(subject)))
|
|
21
|
+
.provideEnvironment(environment)
|
|
22
|
+
.subscribe(subscriber);
|
|
23
|
+
subscriber.add(source.provideEnvironment(environment).subscribe(subject));
|
|
24
|
+
});
|
|
25
|
+
};
|
|
23
26
|
}
|
|
@@ -32,7 +32,7 @@ export class Connectable<R, E, A> extends Observable<R, E, A> implements Connect
|
|
|
32
32
|
}
|
|
33
33
|
connect() {
|
|
34
34
|
if (!this.connection || this.connection.closed) {
|
|
35
|
-
this.connection = Observable.defer(this.source).subscribe(this.subject);
|
|
35
|
+
this.connection = Observable.defer(this.source).provideEnvironment(this.environment).subscribe(this.subject);
|
|
36
36
|
if (this.resetOnDisconnect) {
|
|
37
37
|
this.connection.add(() => (this.subject = this.connector()));
|
|
38
38
|
}
|
|
@@ -42,11 +42,10 @@ export class Connectable<R, E, A> extends Observable<R, E, A> implements Connect
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
|
-
* @tsplus
|
|
45
|
+
* @tsplus pipeable fncts.observable.Observable connectable
|
|
46
46
|
*/
|
|
47
|
-
export function connectable<
|
|
48
|
-
source: ObservableInput<R, E, A
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return new Connectable(source, config);
|
|
47
|
+
export function connectable<E, A>(config: ConnectableConfig<E, A> = DEFAULT_CONFIG) {
|
|
48
|
+
return <R>(source: ObservableInput<R, E, A>): Connectable<R, E, A> => {
|
|
49
|
+
return new Connectable(source, config);
|
|
50
|
+
};
|
|
52
51
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
type EventHandler = (...args: any[]) => void;
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @tsplus static fncts.observable.ObservableOps fromEvent
|
|
5
|
+
*/
|
|
3
6
|
export function fromEvent<A extends ReadonlyArray<unknown>>(
|
|
4
7
|
addHandler: (handler: (...args: A) => void) => any,
|
|
5
8
|
removeHandler?: (handler: EventHandler, signal?: any) => void,
|
|
@@ -8,23 +8,25 @@ export function race<O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export function raceInit<R, E, A>(sources: ReadonlyArray<ObservableInput<R, E, A>>) {
|
|
11
|
-
return (subscriber: Subscriber<E, A>) => {
|
|
11
|
+
return (subscriber: Subscriber<E, A>, environment: Environment<R>) => {
|
|
12
12
|
let subscriptions: Subscription[] = [];
|
|
13
13
|
for (let i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) {
|
|
14
14
|
subscriptions.push(
|
|
15
|
-
Observable.from(sources[i]!)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
Observable.from(sources[i]!)
|
|
16
|
+
.provideEnvironment(environment)
|
|
17
|
+
.subscribe(
|
|
18
|
+
operatorSubscriber(subscriber, {
|
|
19
|
+
next: (value) => {
|
|
20
|
+
if (subscriptions) {
|
|
21
|
+
for (let s = 0; s < subscriptions.length; s++) {
|
|
22
|
+
s !== i && subscriptions[s]!.unsubscribe();
|
|
23
|
+
}
|
|
24
|
+
subscriptions = null!;
|
|
21
25
|
}
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}),
|
|
27
|
-
),
|
|
26
|
+
subscriber.next(value);
|
|
27
|
+
},
|
|
28
|
+
}),
|
|
29
|
+
),
|
|
28
30
|
);
|
|
29
31
|
}
|
|
30
32
|
};
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { raceInit } from "./race.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @tsplus
|
|
4
|
+
* @tsplus pipeable fncts.observable.Observablen raceWith
|
|
5
5
|
*/
|
|
6
|
-
export function
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
): Observable<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
> {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
export function raceWith<O extends ReadonlyArray<ObservableInput<any, any>>>(...sources: O) {
|
|
7
|
+
return <R, E, A>(
|
|
8
|
+
fa: Observable<R, E, A>,
|
|
9
|
+
): Observable<
|
|
10
|
+
R | Observable.EnvironmentOf<O[number]>,
|
|
11
|
+
E | Observable.ErrorOf<O[number]>,
|
|
12
|
+
A | Observable.TypeOf<O[number]>
|
|
13
|
+
> => {
|
|
14
|
+
return !sources.length
|
|
15
|
+
? fa
|
|
16
|
+
: fa.operate((source, subscriber, environment) => {
|
|
17
|
+
raceInit([source, ...sources])(subscriber, environment);
|
|
18
|
+
});
|
|
19
|
+
};
|
|
19
20
|
}
|
|
@@ -1,63 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @tsplus pipeable fncts.observable.Observable repeatWhen
|
|
3
|
+
*/
|
|
4
|
+
export function repeatWhen<R, E, A, R1, E1>(
|
|
3
5
|
notifier: (notifications: Observable<never, never, void>) => Observable<R1, E1, any>,
|
|
4
|
-
)
|
|
5
|
-
return fa
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
) {
|
|
7
|
+
return <R, E, A>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, A> => {
|
|
8
|
+
return fa.operate((source, subscriber, environment) => {
|
|
9
|
+
let innerSub: Subscription | null;
|
|
10
|
+
let syncResub = false;
|
|
11
|
+
let completions$: Subject<never, never, void>;
|
|
12
|
+
let isNotifierComplete = false;
|
|
13
|
+
let isMainComplete = false;
|
|
14
|
+
const checkComplete = () => isMainComplete && isNotifierComplete && (subscriber.complete(), true);
|
|
15
|
+
const getCompletionSubject = () => {
|
|
16
|
+
if (!completions$) {
|
|
17
|
+
completions$ = new Subject();
|
|
18
|
+
notifier(completions$)
|
|
19
|
+
.provideEnvironment(environment)
|
|
20
|
+
.subscribe(
|
|
21
|
+
operatorSubscriber(subscriber, {
|
|
22
|
+
next: () => {
|
|
23
|
+
if (innerSub) {
|
|
24
|
+
loop();
|
|
25
|
+
} else {
|
|
26
|
+
syncResub = true;
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
complete: () => {
|
|
30
|
+
isNotifierComplete = true;
|
|
31
|
+
checkComplete();
|
|
32
|
+
},
|
|
33
|
+
}),
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
return completions$;
|
|
37
|
+
};
|
|
38
|
+
const loop = () => {
|
|
39
|
+
isMainComplete = false;
|
|
40
|
+
innerSub = source.provideEnvironment(environment).subscribe(
|
|
18
41
|
operatorSubscriber(subscriber, {
|
|
19
|
-
next: () => {
|
|
20
|
-
if (innerSub) {
|
|
21
|
-
loop();
|
|
22
|
-
} else {
|
|
23
|
-
syncResub = true;
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
42
|
complete: () => {
|
|
27
|
-
|
|
28
|
-
checkComplete();
|
|
43
|
+
isMainComplete = true;
|
|
44
|
+
!checkComplete() && getCompletionSubject().next();
|
|
29
45
|
},
|
|
30
46
|
}),
|
|
31
47
|
);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
!checkComplete() && getCompletionSubject().next();
|
|
43
|
-
},
|
|
44
|
-
}),
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
if (syncResub) {
|
|
48
|
-
innerSub.unsubscribe();
|
|
49
|
-
innerSub = null;
|
|
50
|
-
syncResub = false;
|
|
51
|
-
loop();
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
loop();
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export function repeatWhen<R1, E1>(
|
|
60
|
-
notifier: (notifications: Observable<never, never, void>) => Observable<R1, E1, any>,
|
|
61
|
-
): <R, E, A>(fa: Observable<R, E, A>) => Observable<R | R1, E | E1, A> {
|
|
62
|
-
return (fa) => repeatWhen_(fa, notifier);
|
|
48
|
+
if (syncResub) {
|
|
49
|
+
innerSub.unsubscribe();
|
|
50
|
+
innerSub = null;
|
|
51
|
+
syncResub = false;
|
|
52
|
+
loop();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
loop();
|
|
56
|
+
});
|
|
57
|
+
};
|
|
63
58
|
}
|
|
@@ -1,47 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @tsplus
|
|
2
|
+
* @tsplus pipeable fncts.observable.Observable retryWhen
|
|
3
3
|
*/
|
|
4
|
-
export function
|
|
5
|
-
fa: Observable<R, E, A>,
|
|
4
|
+
export function retryWhen<E, R1, E1>(
|
|
6
5
|
notifier: (errors: Observable<never, never, Cause<E>>) => Observable<R1, E1, any>,
|
|
7
|
-
)
|
|
8
|
-
return
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function retryWhen<R1, E1>(
|
|
44
|
-
notifier: (errors: Observable<never, never, any>) => Observable<R1, E1, any>,
|
|
45
|
-
): <R, E, A>(fa: Observable<R, E, A>) => Observable<R | R1, E | E1, A> {
|
|
46
|
-
return (fa) => retryWhen_(fa, notifier);
|
|
6
|
+
) {
|
|
7
|
+
return <R, A>(fa: Observable<R, E, A>): Observable<R | R1, E | E1, A> => {
|
|
8
|
+
return fa.operate((source, subscriber, environment) => {
|
|
9
|
+
let innerSub: Subscription | null;
|
|
10
|
+
let syncResub = false;
|
|
11
|
+
let defects$: Subject<never, never, any>;
|
|
12
|
+
const loop = () => {
|
|
13
|
+
innerSub = source.provideEnvironment(environment).subscribe(
|
|
14
|
+
operatorSubscriber(subscriber, {
|
|
15
|
+
error: (err) => {
|
|
16
|
+
if (!defects$) {
|
|
17
|
+
defects$ = new Subject();
|
|
18
|
+
notifier(defects$)
|
|
19
|
+
.provideEnvironment(environment)
|
|
20
|
+
.subscribe(
|
|
21
|
+
operatorSubscriber(subscriber, {
|
|
22
|
+
next: () => (innerSub ? loop() : (syncResub = true)),
|
|
23
|
+
}),
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
if (defects$) {
|
|
27
|
+
defects$.next(err);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
}),
|
|
31
|
+
);
|
|
32
|
+
if (syncResub) {
|
|
33
|
+
innerSub.unsubscribe();
|
|
34
|
+
innerSub = null;
|
|
35
|
+
syncResub = false;
|
|
36
|
+
loop();
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
loop();
|
|
40
|
+
});
|
|
41
|
+
};
|
|
47
42
|
}
|
|
@@ -1,101 +1,93 @@
|
|
|
1
1
|
export interface ShareConfig<R, E, A, R1 = never, E1 = never, R2 = never, E2 = never, R3 = never, E3 = never> {
|
|
2
|
-
readonly connector?: () =>
|
|
2
|
+
readonly connector?: () => Subject<R, E, A>;
|
|
3
3
|
readonly resetOnDefect?: boolean | ((err: unknown) => Observable<R1, E1, any>);
|
|
4
4
|
readonly resetOnComplete?: boolean | (() => Observable<R2, E2, any>);
|
|
5
5
|
readonly resetOnRefCountZero?: boolean | (() => Observable<R3, E3, any>);
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* @tsplus
|
|
9
|
+
* @tsplus pipeable fncts.observable.Observable share
|
|
10
10
|
*/
|
|
11
|
-
export function
|
|
12
|
-
fa: Observable<R, E, A>,
|
|
11
|
+
export function share<R, E, A, R1 = never, E1 = never, R2 = never, E2 = never, R3 = never, E3 = never>(
|
|
13
12
|
options: ShareConfig<R, E, A, R1, E1, R2, E2, R3, E3> = {},
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const reset = () => {
|
|
35
|
-
cancelReset();
|
|
36
|
-
connection = subject = null;
|
|
37
|
-
hasCompleted = hasErrored = false;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const resetAndUnsubscribe = () => {
|
|
41
|
-
const conn = connection;
|
|
42
|
-
reset();
|
|
43
|
-
conn?.unsubscribe();
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
return operate_(fa, (source, subscriber) => {
|
|
47
|
-
refCount++;
|
|
48
|
-
if (!hasErrored && !hasCompleted) {
|
|
13
|
+
) {
|
|
14
|
+
return (fa: Observable<R, E, A>): Observable<R | R1 | R2, E | E1 | E2 | E3, A> => {
|
|
15
|
+
const {
|
|
16
|
+
connector = () => new Subject<R, E, A>(),
|
|
17
|
+
resetOnDefect = true,
|
|
18
|
+
resetOnComplete = true,
|
|
19
|
+
resetOnRefCountZero = true,
|
|
20
|
+
} = options;
|
|
21
|
+
let connection: SafeSubscriber<E, A> | null = null;
|
|
22
|
+
let resetConnection: Subscription | null = null;
|
|
23
|
+
let subject: Subject<R, E, A> | null = null;
|
|
24
|
+
let refCount = 0;
|
|
25
|
+
let hasCompleted = false;
|
|
26
|
+
let hasErrored = false;
|
|
27
|
+
const cancelReset = () => {
|
|
28
|
+
resetConnection?.unsubscribe();
|
|
29
|
+
resetConnection = null;
|
|
30
|
+
};
|
|
31
|
+
const reset = () => {
|
|
49
32
|
cancelReset();
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
33
|
+
connection = subject = null;
|
|
34
|
+
hasCompleted = hasErrored = false;
|
|
35
|
+
};
|
|
36
|
+
const resetAndUnsubscribe = () => {
|
|
37
|
+
const conn = connection;
|
|
38
|
+
reset();
|
|
39
|
+
conn?.unsubscribe();
|
|
40
|
+
};
|
|
41
|
+
return fa.operate((source, subscriber, environment) => {
|
|
42
|
+
refCount++;
|
|
43
|
+
if (!hasErrored && !hasCompleted) {
|
|
44
|
+
cancelReset();
|
|
58
45
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
next: (value) => dest.next(value),
|
|
66
|
-
error: (defect) => {
|
|
67
|
-
hasErrored = true;
|
|
68
|
-
cancelReset();
|
|
69
|
-
resetConnection = handleReset(reset, resetOnDefect, defect);
|
|
70
|
-
dest.error(defect);
|
|
71
|
-
},
|
|
72
|
-
complete: () => {
|
|
73
|
-
hasCompleted = true;
|
|
74
|
-
cancelReset();
|
|
75
|
-
resetConnection = handleReset(reset, resetOnComplete);
|
|
76
|
-
dest.complete();
|
|
77
|
-
},
|
|
46
|
+
const dest = (subject ||= connector());
|
|
47
|
+
subscriber.add(() => {
|
|
48
|
+
refCount--;
|
|
49
|
+
if (refCount === 0 && !hasErrored && !hasCompleted) {
|
|
50
|
+
resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero, environment);
|
|
51
|
+
}
|
|
78
52
|
});
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
53
|
+
dest.provideEnvironment(environment).subscribe(subscriber);
|
|
54
|
+
if (!connection) {
|
|
55
|
+
connection = new SafeSubscriber({
|
|
56
|
+
next: (value) => dest.next(value),
|
|
57
|
+
error: (defect) => {
|
|
58
|
+
hasErrored = true;
|
|
59
|
+
cancelReset();
|
|
60
|
+
resetConnection = handleReset(reset, resetOnDefect, environment, defect);
|
|
61
|
+
dest.error(defect);
|
|
62
|
+
},
|
|
63
|
+
complete: () => {
|
|
64
|
+
hasCompleted = true;
|
|
65
|
+
cancelReset();
|
|
66
|
+
resetConnection = handleReset(reset, resetOnComplete, environment);
|
|
67
|
+
dest.complete();
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
Observable.from(source).provideEnvironment(environment).subscribe(connection);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
};
|
|
82
74
|
}
|
|
83
75
|
|
|
84
76
|
function handleReset<T extends unknown[] = never[]>(
|
|
85
77
|
reset: () => void,
|
|
86
78
|
on: boolean | ((...args: T) => Observable<any, any, any>),
|
|
79
|
+
environment: Environment<any>,
|
|
87
80
|
...args: T
|
|
88
81
|
): Subscription | null {
|
|
89
82
|
if (on === true) {
|
|
90
83
|
reset();
|
|
91
84
|
return null;
|
|
92
85
|
}
|
|
93
|
-
|
|
94
86
|
if (on === false) {
|
|
95
87
|
return null;
|
|
96
88
|
}
|
|
97
|
-
|
|
98
89
|
return on(...args)
|
|
99
90
|
.take(1)
|
|
91
|
+
.provideEnvironment(environment)
|
|
100
92
|
.subscribe({ next: () => reset() });
|
|
101
93
|
}
|
|
@@ -1,44 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @tsplus
|
|
2
|
+
* @tsplus pipeable fncts.observable.Observable window
|
|
3
3
|
*/
|
|
4
|
-
export function
|
|
5
|
-
fa: Observable<R, E, A
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
return () => {
|
|
40
|
-
windowSubject.unsubscribe();
|
|
41
|
-
windowSubject = null!;
|
|
42
|
-
};
|
|
43
|
-
});
|
|
4
|
+
export function window(windowBoundaries: Observable<never, never, any>) {
|
|
5
|
+
return <R, E, A>(fa: Observable<R, E, A>): Observable<R, E, Observable<never, E, A>> => {
|
|
6
|
+
return fa.operate((source, subscriber, environment) => {
|
|
7
|
+
let windowSubject: Subject<never, E, A> = new Subject();
|
|
8
|
+
subscriber.next(windowSubject.asObservable());
|
|
9
|
+
const errorHandler = (err: Cause<E>) => {
|
|
10
|
+
windowSubject.error(err);
|
|
11
|
+
subscriber.error(err);
|
|
12
|
+
};
|
|
13
|
+
source.provideEnvironment(environment).subscribe(
|
|
14
|
+
operatorSubscriber(subscriber, {
|
|
15
|
+
next: (value) => windowSubject.next(value),
|
|
16
|
+
error: errorHandler,
|
|
17
|
+
complete: () => {
|
|
18
|
+
windowSubject.complete();
|
|
19
|
+
subscriber.complete();
|
|
20
|
+
},
|
|
21
|
+
}),
|
|
22
|
+
);
|
|
23
|
+
windowBoundaries.subscribe(
|
|
24
|
+
operatorSubscriber(subscriber, {
|
|
25
|
+
next: () => {
|
|
26
|
+
windowSubject.complete();
|
|
27
|
+
subscriber.next((windowSubject = new Subject()));
|
|
28
|
+
},
|
|
29
|
+
complete: noop,
|
|
30
|
+
error: errorHandler,
|
|
31
|
+
}),
|
|
32
|
+
);
|
|
33
|
+
return () => {
|
|
34
|
+
windowSubject.unsubscribe();
|
|
35
|
+
windowSubject = null!;
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
};
|
|
44
39
|
}
|