@fncts/observable 0.0.2 → 0.0.5
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 +1 -1
- package/Notification.d.ts +1 -1
- package/Observable/api/connect.d.ts +1 -1
- package/Observable/api/connectable.d.ts +5 -5
- package/Observable/api/fromCallback.d.ts +2 -2
- package/Observable/api/fromEvent.d.ts +1 -1
- package/Observable/api/race.d.ts +2 -2
- package/Observable/api/raceWith.d.ts +1 -1
- package/Observable/api/repeatWhen.d.ts +2 -2
- package/Observable/api/retryWhen.d.ts +3 -3
- package/Observable/api/share.d.ts +5 -6
- package/Observable/api/window.d.ts +2 -2
- package/Observable/api/windowCount.d.ts +1 -1
- package/Observable/api/windowTime.d.ts +3 -3
- package/Observable/api/windowToggle.d.ts +2 -2
- package/Observable/api/windowWhen.d.ts +2 -2
- package/Observable/api.d.ts +204 -163
- package/Observable/definition.d.ts +24 -15
- package/Observable/dom/animationFrames.d.ts +1 -1
- package/Observer.d.ts +1 -1
- package/Operator.d.ts +4 -3
- package/Subject.d.ts +10 -9
- package/Subscriber.d.ts +1 -1
- package/_cjs/BehaviorSubject.cjs.map +1 -1
- package/_cjs/Observable/api/connect.cjs.map +1 -1
- package/_cjs/Observable/api/connectable.cjs.map +1 -1
- package/_cjs/Observable/api/fromCallback.cjs.map +1 -1
- package/_cjs/Observable/api/race.cjs.map +1 -1
- package/_cjs/Observable/api/raceWith.cjs.map +1 -1
- package/_cjs/Observable/api/repeatWhen.cjs.map +1 -1
- package/_cjs/Observable/api/retryWhen.cjs.map +1 -1
- package/_cjs/Observable/api/share.cjs +2 -11
- package/_cjs/Observable/api/share.cjs.map +1 -1
- package/_cjs/Observable/api/window.cjs.map +1 -1
- package/_cjs/Observable/api/windowTime.cjs.map +1 -1
- package/_cjs/Observable/api/windowToggle.cjs.map +1 -1
- package/_cjs/Observable/api/windowWhen.cjs.map +1 -1
- package/_cjs/Observable/api.cjs +325 -308
- package/_cjs/Observable/api.cjs.map +1 -1
- package/_cjs/Observable/definition.cjs +41 -15
- package/_cjs/Observable/definition.cjs.map +1 -1
- package/_cjs/Operator.cjs.map +1 -1
- package/_cjs/Subject.cjs +2 -2
- package/_cjs/Subject.cjs.map +1 -1
- package/_cjs/global.cjs +3 -1
- package/_cjs/global.cjs.map +1 -1
- package/_mjs/BehaviorSubject.mjs.map +1 -1
- package/_mjs/Observable/api/connect.mjs.map +1 -1
- package/_mjs/Observable/api/connectable.mjs.map +1 -1
- package/_mjs/Observable/api/fromCallback.mjs.map +1 -1
- package/_mjs/Observable/api/race.mjs.map +1 -1
- package/_mjs/Observable/api/raceWith.mjs.map +1 -1
- package/_mjs/Observable/api/repeatWhen.mjs.map +1 -1
- package/_mjs/Observable/api/retryWhen.mjs.map +1 -1
- package/_mjs/Observable/api/share.mjs +1 -6
- package/_mjs/Observable/api/share.mjs.map +1 -1
- package/_mjs/Observable/api/window.mjs.map +1 -1
- package/_mjs/Observable/api/windowTime.mjs.map +1 -1
- package/_mjs/Observable/api/windowToggle.mjs.map +1 -1
- package/_mjs/Observable/api/windowWhen.mjs.map +1 -1
- package/_mjs/Observable/api.mjs +301 -293
- package/_mjs/Observable/api.mjs.map +1 -1
- package/_mjs/Observable/definition.mjs +36 -14
- package/_mjs/Observable/definition.mjs.map +1 -1
- package/_mjs/Operator.mjs.map +1 -1
- package/_mjs/Subject.mjs +2 -2
- package/_mjs/Subject.mjs.map +1 -1
- package/_mjs/global.mjs +1 -1
- package/_mjs/global.mjs.map +1 -1
- package/_src/BehaviorSubject.ts +1 -1
- package/_src/Observable/api/connect.ts +5 -5
- package/_src/Observable/api/connectable.ts +7 -7
- package/_src/Observable/api/fromCallback.ts +8 -5
- package/_src/Observable/api/fromEvent.ts +1 -1
- package/_src/Observable/api/race.ts +2 -2
- package/_src/Observable/api/raceWith.ts +7 -3
- package/_src/Observable/api/repeatWhen.ts +8 -8
- package/_src/Observable/api/retryWhen.ts +8 -8
- package/_src/Observable/api/share.ts +10 -16
- package/_src/Observable/api/window.ts +5 -5
- package/_src/Observable/api/windowCount.ts +5 -5
- package/_src/Observable/api/windowTime.ts +18 -18
- package/_src/Observable/api/windowToggle.ts +8 -8
- package/_src/Observable/api/windowWhen.ts +6 -6
- package/_src/Observable/api.ts +524 -429
- package/_src/Observable/definition.ts +45 -21
- package/_src/Observable/dom/animationFrames.ts +2 -2
- package/_src/Operator.ts +6 -6
- package/_src/Subject.ts +9 -9
- package/_src/global.ts +5 -46
- package/global.d.ts +5 -45
- package/package.json +6 -2
package/_src/Observable/api.ts
CHANGED
|
@@ -1,40 +1,34 @@
|
|
|
1
1
|
import { popNumber } from "@fncts/observable/internal/args";
|
|
2
2
|
import { arrayOrObject, arrayRemove, readableStreamToAsyncGenerator } from "@fncts/observable/internal/util";
|
|
3
3
|
import { Notification } from "@fncts/observable/Notification";
|
|
4
|
-
import { EMPTY } from "@fncts/observable/Observable/definition";
|
|
4
|
+
import { EMPTY, EnvironmentWith, Observable } from "@fncts/observable/Observable/definition";
|
|
5
5
|
import { caughtSchedule } from "@fncts/observable/Scheduler";
|
|
6
6
|
|
|
7
7
|
export interface Subscribable<E, A> {
|
|
8
8
|
subscribe(observer: Partial<Observer<E, A>>): Unsubscribable;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
export type ObservableInput<E = never, A = never> =
|
|
12
|
-
| Observable<E, A>
|
|
11
|
+
export type ObservableInput<R = never, E = never, A = never> =
|
|
12
|
+
| Observable<R, E, A>
|
|
13
13
|
| Subscribable<E, A>
|
|
14
14
|
| AsyncIterable<A>
|
|
15
15
|
| PromiseLike<A>
|
|
16
16
|
| ArrayLike<A>
|
|
17
17
|
| Iterable<A>
|
|
18
18
|
| ReadableStreamLike<A>
|
|
19
|
-
| IO<
|
|
20
|
-
|
|
21
|
-
/*
|
|
22
|
-
* -------------------------------------------------------------------------------------------------
|
|
23
|
-
* constructors
|
|
24
|
-
* -------------------------------------------------------------------------------------------------
|
|
25
|
-
*/
|
|
19
|
+
| IO<R, E, A>;
|
|
26
20
|
|
|
27
21
|
/**
|
|
28
22
|
* @tsplus static fncts.observable.ObservableOps halt
|
|
29
23
|
*/
|
|
30
|
-
export function halt(defect: unknown): Observable<never, never> {
|
|
24
|
+
export function halt(defect: unknown): Observable<never, never, never> {
|
|
31
25
|
return new Observable((s) => s.error(Cause.halt(defect)));
|
|
32
26
|
}
|
|
33
27
|
|
|
34
28
|
/**
|
|
35
29
|
* @tsplus static fncts.observable.ObservableOps defer
|
|
36
30
|
*/
|
|
37
|
-
export function defer<E, A>(observable: Lazy<ObservableInput<E, A>>): Observable<E, A> {
|
|
31
|
+
export function defer<R, E, A>(observable: Lazy<ObservableInput<R, E, A>>): Observable<R, E, A> {
|
|
38
32
|
return new Observable((s) => {
|
|
39
33
|
from(observable()).subscribe(s);
|
|
40
34
|
});
|
|
@@ -43,28 +37,37 @@ export function defer<E, A>(observable: Lazy<ObservableInput<E, A>>): Observable
|
|
|
43
37
|
/**
|
|
44
38
|
* @tsplus static fncts.observable.ObservableOps empty
|
|
45
39
|
*/
|
|
46
|
-
export function empty<A>(): Observable<never, A> {
|
|
40
|
+
export function empty<A>(): Observable<never, never, A> {
|
|
47
41
|
return EMPTY;
|
|
48
42
|
}
|
|
49
43
|
|
|
44
|
+
/**
|
|
45
|
+
* @tsplus static fncts.observable.ObservableOps environmentWithObservable
|
|
46
|
+
*/
|
|
47
|
+
export function environmentWithObservable<R0, R, E, A>(
|
|
48
|
+
f: (environment: Environment<R0>) => Observable<R, E, A>,
|
|
49
|
+
): Observable<R0 | R, E, A> {
|
|
50
|
+
return new EnvironmentWith(f);
|
|
51
|
+
}
|
|
52
|
+
|
|
50
53
|
/**
|
|
51
54
|
* @tsplus static fncts.observable.ObservableOps failCause
|
|
52
55
|
*/
|
|
53
|
-
export function failCause<E>(cause: Cause<E>): Observable<E, never> {
|
|
56
|
+
export function failCause<E>(cause: Cause<E>): Observable<never, E, never> {
|
|
54
57
|
return new Observable((s) => s.error(cause));
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
/**
|
|
58
61
|
* @tsplus static fncts.observable.ObservableOps fail
|
|
59
62
|
*/
|
|
60
|
-
export function fail<E>(e: E): Observable<E, never> {
|
|
63
|
+
export function fail<E>(e: E): Observable<never, E, never> {
|
|
61
64
|
return new Observable((s) => s.error(Cause.fail(e)));
|
|
62
65
|
}
|
|
63
66
|
|
|
64
67
|
/**
|
|
65
68
|
* @tsplus static fncts.observable.ObservableOps from
|
|
66
69
|
*/
|
|
67
|
-
export function from<E = never, A = never>(input: ObservableInput<E, A>): Observable<E, A> {
|
|
70
|
+
export function from<R = never, E = never, A = never>(input: ObservableInput<R, E, A>): Observable<R, E, A> {
|
|
68
71
|
if (input instanceof Observable) {
|
|
69
72
|
return input;
|
|
70
73
|
}
|
|
@@ -92,7 +95,7 @@ export function from<E = never, A = never>(input: ObservableInput<E, A>): Observ
|
|
|
92
95
|
throw new TypeError("Invalid Observable input");
|
|
93
96
|
}
|
|
94
97
|
|
|
95
|
-
export function fromArrayLike<A>(input: ArrayLike<A>): Observable<never, A> {
|
|
98
|
+
export function fromArrayLike<A>(input: ArrayLike<A>): Observable<never, never, A> {
|
|
96
99
|
return new Observable((s) => {
|
|
97
100
|
for (let i = 0; i < input.length && !s.closed; i++) {
|
|
98
101
|
s.next(input[i]!);
|
|
@@ -101,13 +104,13 @@ export function fromArrayLike<A>(input: ArrayLike<A>): Observable<never, A> {
|
|
|
101
104
|
});
|
|
102
105
|
}
|
|
103
106
|
|
|
104
|
-
export function fromAsyncIterable<A>(asyncIterable: AsyncIterable<A>): Observable<never, A> {
|
|
107
|
+
export function fromAsyncIterable<A>(asyncIterable: AsyncIterable<A>): Observable<never, never, A> {
|
|
105
108
|
return new Observable((s) => {
|
|
106
109
|
process(asyncIterable, s).catch((err) => s.error(Cause.halt(err)));
|
|
107
110
|
});
|
|
108
111
|
}
|
|
109
112
|
|
|
110
|
-
export function fromIterable<A>(iterable: Iterable<A>): Observable<never, A> {
|
|
113
|
+
export function fromIterable<A>(iterable: Iterable<A>): Observable<never, never, A> {
|
|
111
114
|
return new Observable((s) => {
|
|
112
115
|
for (const value of iterable) {
|
|
113
116
|
s.next(value);
|
|
@@ -119,7 +122,7 @@ export function fromIterable<A>(iterable: Iterable<A>): Observable<never, A> {
|
|
|
119
122
|
});
|
|
120
123
|
}
|
|
121
124
|
|
|
122
|
-
export function fromPromise<A>(promise: PromiseLike<A>): Observable<never, A> {
|
|
125
|
+
export function fromPromise<A>(promise: PromiseLike<A>): Observable<never, never, A> {
|
|
123
126
|
return new Observable((s) => {
|
|
124
127
|
promise
|
|
125
128
|
.then(
|
|
@@ -135,14 +138,14 @@ export function fromPromise<A>(promise: PromiseLike<A>): Observable<never, A> {
|
|
|
135
138
|
});
|
|
136
139
|
}
|
|
137
140
|
|
|
138
|
-
export function fromReadableStreamLike<A>(readableStream: ReadableStreamLike<A>): Observable<never, A> {
|
|
141
|
+
export function fromReadableStreamLike<A>(readableStream: ReadableStreamLike<A>): Observable<never, never, A> {
|
|
139
142
|
return fromAsyncIterable(readableStreamToAsyncGenerator(readableStream));
|
|
140
143
|
}
|
|
141
144
|
|
|
142
145
|
/**
|
|
143
146
|
* @tsplus static fncts.observable.ObservableOps fromSubscribable
|
|
144
147
|
*/
|
|
145
|
-
export function fromSubscribable<E, A>(subscribable: Subscribable<E, A>): Observable<E, A> {
|
|
148
|
+
export function fromSubscribable<E, A>(subscribable: Subscribable<E, A>): Observable<never, E, A> {
|
|
146
149
|
return new Observable((subscriber) => subscribable.subscribe(subscriber));
|
|
147
150
|
}
|
|
148
151
|
|
|
@@ -152,7 +155,7 @@ export function fromInterop<A>(subscribable: {
|
|
|
152
155
|
error: (err: unknown) => void;
|
|
153
156
|
complete: () => void;
|
|
154
157
|
}) => Unsubscribable;
|
|
155
|
-
}): Observable<unknown, A> {
|
|
158
|
+
}): Observable<never, unknown, A> {
|
|
156
159
|
return new Observable((subscriber) =>
|
|
157
160
|
subscribable.subscribe({
|
|
158
161
|
next: (value) => subscriber.next(value),
|
|
@@ -162,12 +165,12 @@ export function fromInterop<A>(subscribable: {
|
|
|
162
165
|
);
|
|
163
166
|
}
|
|
164
167
|
|
|
165
|
-
function _if<E, A, E1, B>(
|
|
168
|
+
function _if<R, E, A, R1, E1, B>(
|
|
166
169
|
condition: () => boolean,
|
|
167
|
-
onTrue: ObservableInput<E, A>,
|
|
168
|
-
onFalse: ObservableInput<E1, B>,
|
|
169
|
-
): Observable<E | E1, A | B> {
|
|
170
|
-
return defer<E | E1, A | B>(() => (condition() ? onTrue : onFalse));
|
|
170
|
+
onTrue: ObservableInput<R, E, A>,
|
|
171
|
+
onFalse: ObservableInput<R1, E1, B>,
|
|
172
|
+
): Observable<R | R1, E | E1, A | B> {
|
|
173
|
+
return defer<R | R1, E | E1, A | B>(() => (condition() ? onTrue : onFalse));
|
|
171
174
|
}
|
|
172
175
|
|
|
173
176
|
export { _if as if };
|
|
@@ -179,7 +182,7 @@ export interface IterateOptions<S> {
|
|
|
179
182
|
readonly scheduler?: SchedulerLike;
|
|
180
183
|
}
|
|
181
184
|
|
|
182
|
-
export function iterate<S>(options: IterateOptions<S>): Observable<never, S> {
|
|
185
|
+
export function iterate<S>(options: IterateOptions<S>): Observable<never, never, S> {
|
|
183
186
|
const { initialState, cont, iterate, scheduler } = options;
|
|
184
187
|
|
|
185
188
|
function* gen() {
|
|
@@ -204,7 +207,7 @@ async function process<A>(asyncIterable: AsyncIterable<A>, subscriber: Subscribe
|
|
|
204
207
|
/**
|
|
205
208
|
* @tsplus static fncts.obervable.ObservableOps interval
|
|
206
209
|
*/
|
|
207
|
-
export function interval(period = 0, scheduler: SchedulerLike = asyncScheduler): Observable<never, number> {
|
|
210
|
+
export function interval(period = 0, scheduler: SchedulerLike = asyncScheduler): Observable<never, never, number> {
|
|
208
211
|
if (period < 0) {
|
|
209
212
|
// eslint-disable-next-line no-param-reassign
|
|
210
213
|
period = 0;
|
|
@@ -218,13 +221,13 @@ export function interval(period = 0, scheduler: SchedulerLike = asyncScheduler):
|
|
|
218
221
|
*/
|
|
219
222
|
export function merge<O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
220
223
|
...sources: O
|
|
221
|
-
): Observable<Observable.ErrorOf<O[number]>, Observable.TypeOf<O[number]>>;
|
|
224
|
+
): Observable<Observable.EnvironmentOf<O[number]>, Observable.ErrorOf<O[number]>, Observable.TypeOf<O[number]>>;
|
|
222
225
|
export function merge<O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
223
226
|
...sources: [...O, number?]
|
|
224
|
-
): Observable<Observable.ErrorOf<O[number]>, Observable.TypeOf<O[number]>>;
|
|
227
|
+
): Observable<Observable.EnvironmentOf<O[number]>, Observable.ErrorOf<O[number]>, Observable.TypeOf<O[number]>>;
|
|
225
228
|
export function merge<O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
226
229
|
...sources: [...O, number?]
|
|
227
|
-
): Observable<Observable.ErrorOf<O[number]>, Observable.TypeOf<O[number]>> {
|
|
230
|
+
): Observable<Observable.EnvironmentOf<O[number]>, Observable.ErrorOf<O[number]>, Observable.TypeOf<O[number]>> {
|
|
228
231
|
const concurrency = popNumber(sources, Infinity);
|
|
229
232
|
return !sources.length
|
|
230
233
|
? empty()
|
|
@@ -236,14 +239,14 @@ export function merge<O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
|
236
239
|
/**
|
|
237
240
|
* @tsplus static fncts.observable.ObservableOps of
|
|
238
241
|
*/
|
|
239
|
-
export function of<A>(...items: ReadonlyArray<A>): Observable<never, A> {
|
|
242
|
+
export function of<A>(...items: ReadonlyArray<A>): Observable<never, never, A> {
|
|
240
243
|
return fromArrayLike(items);
|
|
241
244
|
}
|
|
242
245
|
|
|
243
246
|
/**
|
|
244
247
|
* @tsplus static fncts.observable.ObservableOps single
|
|
245
248
|
*/
|
|
246
|
-
export function single<A>(a: A): Observable<never, A> {
|
|
249
|
+
export function single<A>(a: A): Observable<never, never, A> {
|
|
247
250
|
return new Observable((s) => {
|
|
248
251
|
s.next(a);
|
|
249
252
|
s.complete();
|
|
@@ -254,7 +257,7 @@ export function single<A>(a: A): Observable<never, A> {
|
|
|
254
257
|
* @tsplus fluent fncts.observable.Observable scheduled
|
|
255
258
|
* @tsplus static fncts.observable.ObservableOps scheduled
|
|
256
259
|
*/
|
|
257
|
-
export function scheduled<E, A>(input: ObservableInput<E, A>, scheduler: SchedulerLike): Observable<E, A> {
|
|
260
|
+
export function scheduled<R, E, A>(input: ObservableInput<R, E, A>, scheduler: SchedulerLike): Observable<R, E, A> {
|
|
258
261
|
if (isArrayLike(input)) {
|
|
259
262
|
return scheduleArray(input, scheduler);
|
|
260
263
|
}
|
|
@@ -273,8 +276,8 @@ export function scheduled<E, A>(input: ObservableInput<E, A>, scheduler: Schedul
|
|
|
273
276
|
return scheduleObservable(from(input), scheduler);
|
|
274
277
|
}
|
|
275
278
|
|
|
276
|
-
export function scheduleArray<A>(input: ArrayLike<A>, scheduler: SchedulerLike): Observable<never, A> {
|
|
277
|
-
return new Observable<never, A>((s) => {
|
|
279
|
+
export function scheduleArray<A>(input: ArrayLike<A>, scheduler: SchedulerLike): Observable<never, never, A> {
|
|
280
|
+
return new Observable<never, never, A>((s) => {
|
|
278
281
|
let i = 0;
|
|
279
282
|
return scheduler.schedule(function () {
|
|
280
283
|
if (i === input.length) {
|
|
@@ -289,7 +292,10 @@ export function scheduleArray<A>(input: ArrayLike<A>, scheduler: SchedulerLike):
|
|
|
289
292
|
});
|
|
290
293
|
}
|
|
291
294
|
|
|
292
|
-
export function scheduleAsyncIterable<A>(
|
|
295
|
+
export function scheduleAsyncIterable<A>(
|
|
296
|
+
input: AsyncIterable<A>,
|
|
297
|
+
scheduler: SchedulerLike,
|
|
298
|
+
): Observable<never, never, A> {
|
|
293
299
|
return new Observable((subscriber) => {
|
|
294
300
|
const sub = new Subscription();
|
|
295
301
|
sub.add(
|
|
@@ -313,7 +319,7 @@ export function scheduleAsyncIterable<A>(input: AsyncIterable<A>, scheduler: Sch
|
|
|
313
319
|
});
|
|
314
320
|
}
|
|
315
321
|
|
|
316
|
-
export function scheduleIterable<A>(input: Iterable<A>, scheduler: SchedulerLike): Observable<never, A> {
|
|
322
|
+
export function scheduleIterable<A>(input: Iterable<A>, scheduler: SchedulerLike): Observable<never, never, A> {
|
|
317
323
|
return new Observable((s) => {
|
|
318
324
|
let iterator: Iterator<A, A>;
|
|
319
325
|
s.add(
|
|
@@ -335,7 +341,7 @@ export function scheduleIterable<A>(input: Iterable<A>, scheduler: SchedulerLike
|
|
|
335
341
|
});
|
|
336
342
|
}
|
|
337
343
|
|
|
338
|
-
export function scheduleObservable<E, A>(input: Observable<E, A>, scheduler: SchedulerLike): Observable<E, A> {
|
|
344
|
+
export function scheduleObservable<R, E, A>(input: Observable<R, E, A>, scheduler: SchedulerLike): Observable<R, E, A> {
|
|
339
345
|
return new Observable((subscriber) => {
|
|
340
346
|
const sub = new Subscription();
|
|
341
347
|
sub.add(
|
|
@@ -358,7 +364,7 @@ export function scheduleObservable<E, A>(input: Observable<E, A>, scheduler: Sch
|
|
|
358
364
|
});
|
|
359
365
|
}
|
|
360
366
|
|
|
361
|
-
export function schedulePromise<A>(input: PromiseLike<A>, scheduler: SchedulerLike): Observable<never, A> {
|
|
367
|
+
export function schedulePromise<A>(input: PromiseLike<A>, scheduler: SchedulerLike): Observable<never, never, A> {
|
|
362
368
|
return new Observable((subscriber) => {
|
|
363
369
|
return scheduler.schedule(() => {
|
|
364
370
|
input.then(
|
|
@@ -381,20 +387,24 @@ export function schedulePromise<A>(input: PromiseLike<A>, scheduler: SchedulerLi
|
|
|
381
387
|
export function scheduleReadableStreamLike<A>(
|
|
382
388
|
input: ReadableStreamLike<A>,
|
|
383
389
|
scheduler: SchedulerLike,
|
|
384
|
-
): Observable<never, A> {
|
|
390
|
+
): Observable<never, never, A> {
|
|
385
391
|
return scheduleAsyncIterable(readableStreamToAsyncGenerator(input), scheduler);
|
|
386
392
|
}
|
|
387
393
|
|
|
388
394
|
/**
|
|
389
395
|
* @tsplus static fncts.observable.ObservableOps timer
|
|
390
396
|
*/
|
|
391
|
-
export function timer(
|
|
392
|
-
|
|
397
|
+
export function timer(
|
|
398
|
+
time: number | Date,
|
|
399
|
+
interval?: number,
|
|
400
|
+
scheduler?: SchedulerLike,
|
|
401
|
+
): Observable<never, never, number>;
|
|
402
|
+
export function timer(time: number | Date, scheduler?: SchedulerLike): Observable<never, never, number>;
|
|
393
403
|
export function timer(
|
|
394
404
|
time: number | Date = 0,
|
|
395
405
|
intervalOrScheduler?: number | SchedulerLike,
|
|
396
406
|
scheduler: SchedulerLike = asyncScheduler,
|
|
397
|
-
): Observable<never, number> {
|
|
407
|
+
): Observable<never, never, number> {
|
|
398
408
|
let intervalDuration = -1;
|
|
399
409
|
if (intervalOrScheduler != null) {
|
|
400
410
|
if (isScheduler(intervalOrScheduler)) {
|
|
@@ -428,7 +438,11 @@ export function timer(
|
|
|
428
438
|
*/
|
|
429
439
|
export function makeZip<O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
430
440
|
...sources: O
|
|
431
|
-
): Observable<
|
|
441
|
+
): Observable<
|
|
442
|
+
Observable.EnvironmentOf<O[number]>,
|
|
443
|
+
Observable.ErrorOf<O[number]>,
|
|
444
|
+
{ [K in keyof O]: Observable.TypeOf<O[K]> }
|
|
445
|
+
> {
|
|
432
446
|
return sources.length
|
|
433
447
|
? new Observable((subscriber) => {
|
|
434
448
|
let buffers: unknown[][] = sources.map(() => []);
|
|
@@ -466,11 +480,11 @@ export function makeZip<O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
|
466
480
|
/**
|
|
467
481
|
* @tsplus static fncts.observable.ObservableOps fromIO
|
|
468
482
|
*/
|
|
469
|
-
export function fromIO<E, A>(io: IO<
|
|
470
|
-
return new Observable((s) => {
|
|
483
|
+
export function fromIO<R, E, A>(io: IO<R, E, A>, scheduler: SchedulerLike = asyncScheduler): Observable<R, E, A> {
|
|
484
|
+
return new Observable((s, env) => {
|
|
471
485
|
let fiber: FiberContext<E, A>;
|
|
472
486
|
const scheduled = scheduler.schedule(() => {
|
|
473
|
-
fiber = io.unsafeRunFiber();
|
|
487
|
+
fiber = io.provideEnvironment(env).unsafeRunFiber();
|
|
474
488
|
fiber.unsafeOnDone((exit) => {
|
|
475
489
|
if (!s.closed) {
|
|
476
490
|
exit.flatten.match(
|
|
@@ -488,58 +502,46 @@ export function fromIO<E, A>(io: IO<never, E, A>, scheduler: SchedulerLike = asy
|
|
|
488
502
|
});
|
|
489
503
|
}
|
|
490
504
|
|
|
491
|
-
/*
|
|
492
|
-
* -------------------------------------------------------------------------------------------------
|
|
493
|
-
* Applicative
|
|
494
|
-
* -------------------------------------------------------------------------------------------------
|
|
495
|
-
*/
|
|
496
|
-
|
|
497
505
|
/**
|
|
498
506
|
* @tsplus static fncts.observable.ObservableOps unit
|
|
499
507
|
*/
|
|
500
|
-
export const unit: Observable<never, void> = Observable.single(undefined);
|
|
501
|
-
|
|
502
|
-
/*
|
|
503
|
-
* -------------------------------------------------------------------------------------------------
|
|
504
|
-
* Apply
|
|
505
|
-
* -------------------------------------------------------------------------------------------------
|
|
506
|
-
*/
|
|
508
|
+
export const unit: Observable<never, never, void> = Observable.single(undefined);
|
|
507
509
|
|
|
508
510
|
/**
|
|
509
511
|
* @tsplus fluent fncts.observable.Observable zipWith
|
|
510
512
|
*/
|
|
511
|
-
export function zipWith<E, A, E1, B, C>(
|
|
512
|
-
fa: Observable<E, A>,
|
|
513
|
-
fb: Observable<E1, B>,
|
|
513
|
+
export function zipWith<R, E, A, R1, E1, B, C>(
|
|
514
|
+
fa: Observable<R, E, A>,
|
|
515
|
+
fb: Observable<R1, E1, B>,
|
|
514
516
|
f: (a: A, b: B) => C,
|
|
515
|
-
): Observable<E | E1, C> {
|
|
517
|
+
): Observable<R | R1, E | E1, C> {
|
|
516
518
|
return fa.mergeMap((a) => fb.map((b) => f(a, b)));
|
|
517
519
|
}
|
|
518
520
|
|
|
519
521
|
/**
|
|
520
522
|
* @tsplus fluent fncts.observable.Observable zip
|
|
521
523
|
*/
|
|
522
|
-
export function zip<
|
|
524
|
+
export function zip<R, E, A, R1, E1, B>(
|
|
525
|
+
fa: Observable<R, E, A>,
|
|
526
|
+
fb: Observable<R1, E1, B>,
|
|
527
|
+
): Observable<R | R1, E | E1, readonly [A, B]> {
|
|
523
528
|
return zipWith(fa, fb, Function.tuple);
|
|
524
529
|
}
|
|
525
530
|
|
|
526
531
|
/**
|
|
527
532
|
* @tsplus fluent fncts.observable.Observable ap
|
|
528
533
|
*/
|
|
529
|
-
export function ap<
|
|
534
|
+
export function ap<R, E, A, R1, E1, B>(
|
|
535
|
+
fab: Observable<R, E, (a: A) => B>,
|
|
536
|
+
fa: Observable<R1, E1, A>,
|
|
537
|
+
): Observable<R | R1, E | E1, B> {
|
|
530
538
|
return zipWith(fab, fa, (f, a) => f(a));
|
|
531
539
|
}
|
|
532
540
|
|
|
533
|
-
/*
|
|
534
|
-
* -------------------------------------------------------------------------------------------------
|
|
535
|
-
* Functor
|
|
536
|
-
* -------------------------------------------------------------------------------------------------
|
|
537
|
-
*/
|
|
538
|
-
|
|
539
541
|
/**
|
|
540
542
|
* @tsplus fluent fncts.observable.Observable mapWithIndex
|
|
541
543
|
*/
|
|
542
|
-
export function mapWithIndex<E, A, B>(fa: Observable<E, A>, f: (i: number, a: A) => B): Observable<E, B> {
|
|
544
|
+
export function mapWithIndex<R, E, A, B>(fa: Observable<R, E, A>, f: (i: number, a: A) => B): Observable<R, E, B> {
|
|
543
545
|
return fa.operate((source, subscriber) => {
|
|
544
546
|
let i = 0;
|
|
545
547
|
source.subscribe(
|
|
@@ -555,27 +557,21 @@ export function mapWithIndex<E, A, B>(fa: Observable<E, A>, f: (i: number, a: A)
|
|
|
555
557
|
/**
|
|
556
558
|
* @tsplus fluent fncts.observable.Observable map
|
|
557
559
|
*/
|
|
558
|
-
export function map_<E, A, B>(fa: Observable<E, A>, f: (a: A) => B): Observable<E, B> {
|
|
560
|
+
export function map_<R, E, A, B>(fa: Observable<R, E, A>, f: (a: A) => B): Observable<R, E, B> {
|
|
559
561
|
return fa.mapWithIndex((_, a) => f(a));
|
|
560
562
|
}
|
|
561
563
|
|
|
562
564
|
/**
|
|
563
565
|
* @tsplus fluent fncts.observable.Observable as
|
|
564
566
|
*/
|
|
565
|
-
export function as_<E, A, B>(fa: Observable<E, A>, b: Lazy<B>): Observable<E, B> {
|
|
567
|
+
export function as_<R, E, A, B>(fa: Observable<R, E, A>, b: Lazy<B>): Observable<R, E, B> {
|
|
566
568
|
return map_(fa, b);
|
|
567
569
|
}
|
|
568
570
|
|
|
569
|
-
/*
|
|
570
|
-
* -------------------------------------------------------------------------------------------------
|
|
571
|
-
* Bifunctor
|
|
572
|
-
* -------------------------------------------------------------------------------------------------
|
|
573
|
-
*/
|
|
574
|
-
|
|
575
571
|
/**
|
|
576
572
|
* @tsplus fluent fncts.observable.Observable mapError
|
|
577
573
|
*/
|
|
578
|
-
export function mapError_<E, A, E1>(fa: Observable<E, A>, f: (e: E) => E1): Observable<E1, A> {
|
|
574
|
+
export function mapError_<R, E, A, E1>(fa: Observable<R, E, A>, f: (e: E) => E1): Observable<R, E1, A> {
|
|
579
575
|
return fa.operate((source, subscriber) => {
|
|
580
576
|
source.subscribe(
|
|
581
577
|
new OperatorSubscriber(subscriber, {
|
|
@@ -590,7 +586,7 @@ export function mapError_<E, A, E1>(fa: Observable<E, A>, f: (e: E) => E1): Obse
|
|
|
590
586
|
/**
|
|
591
587
|
* @tsplus getter fncts.observable.Observable swap
|
|
592
588
|
*/
|
|
593
|
-
export function swap<E, A>(fa: Observable<E, A>): Observable<A, E> {
|
|
589
|
+
export function swap<R, E, A>(fa: Observable<R, E, A>): Observable<R, A, E> {
|
|
594
590
|
return operate_(fa, (source, subscriber) => {
|
|
595
591
|
source.subscribe(
|
|
596
592
|
new OperatorSubscriber(subscriber, {
|
|
@@ -612,27 +608,21 @@ export function swap<E, A>(fa: Observable<E, A>): Observable<A, E> {
|
|
|
612
608
|
});
|
|
613
609
|
}
|
|
614
610
|
|
|
615
|
-
/*
|
|
616
|
-
* -------------------------------------------------------------------------------------------------
|
|
617
|
-
* Filterable
|
|
618
|
-
* -------------------------------------------------------------------------------------------------
|
|
619
|
-
*/
|
|
620
|
-
|
|
621
611
|
/**
|
|
622
612
|
* @tsplus fluent fncts.observable.Observable filterWithIndex
|
|
623
613
|
*/
|
|
624
|
-
export function filterWithIndex_<E, A, B extends A>(
|
|
625
|
-
fa: Observable<E, A>,
|
|
614
|
+
export function filterWithIndex_<R, E, A, B extends A>(
|
|
615
|
+
fa: Observable<R, E, A>,
|
|
626
616
|
refinement: RefinementWithIndex<number, A, B>,
|
|
627
|
-
): Observable<E, B>;
|
|
628
|
-
export function filterWithIndex_<E, A>(
|
|
629
|
-
fa: Observable<E, A>,
|
|
617
|
+
): Observable<R, E, B>;
|
|
618
|
+
export function filterWithIndex_<R, E, A>(
|
|
619
|
+
fa: Observable<R, E, A>,
|
|
630
620
|
predicate: PredicateWithIndex<number, A>,
|
|
631
|
-
): Observable<E, A>;
|
|
632
|
-
export function filterWithIndex_<E, A>(
|
|
633
|
-
fa: Observable<E, A>,
|
|
621
|
+
): Observable<R, E, A>;
|
|
622
|
+
export function filterWithIndex_<R, E, A>(
|
|
623
|
+
fa: Observable<R, E, A>,
|
|
634
624
|
predicate: PredicateWithIndex<number, A>,
|
|
635
|
-
): Observable<E, A> {
|
|
625
|
+
): Observable<R, E, A> {
|
|
636
626
|
return operate_(fa, (source, subscriber) => {
|
|
637
627
|
let index = 0;
|
|
638
628
|
source.subscribe(
|
|
@@ -644,16 +634,22 @@ export function filterWithIndex_<E, A>(
|
|
|
644
634
|
/**
|
|
645
635
|
* @tsplus fluent fncts.observable.Observable filter
|
|
646
636
|
*/
|
|
647
|
-
export function filter_<E, A, B extends A>(
|
|
648
|
-
|
|
649
|
-
|
|
637
|
+
export function filter_<R, E, A, B extends A>(
|
|
638
|
+
fa: Observable<R, E, A>,
|
|
639
|
+
refinement: Refinement<A, B>,
|
|
640
|
+
): Observable<R, E, B>;
|
|
641
|
+
export function filter_<R, E, A>(fa: Observable<R, E, A>, predicate: Predicate<A>): Observable<R, E, A>;
|
|
642
|
+
export function filter_<R, E, A>(fa: Observable<R, E, A>, predicate: Predicate<A>): Observable<R, E, A> {
|
|
650
643
|
return fa.filterWithIndex((_, a) => predicate(a));
|
|
651
644
|
}
|
|
652
645
|
|
|
653
646
|
/**
|
|
654
647
|
* @tsplus fluent fncts.observable.Observable filterMapWithIndex
|
|
655
648
|
*/
|
|
656
|
-
export function filterMapWithIndex<
|
|
649
|
+
export function filterMapWithIndex<R, E, A, B>(
|
|
650
|
+
fa: Observable<R, E, A>,
|
|
651
|
+
f: (i: number, a: A) => Maybe<B>,
|
|
652
|
+
): Observable<R, E, B> {
|
|
657
653
|
return operate_(fa, (source, subscriber) => {
|
|
658
654
|
let index = 0;
|
|
659
655
|
source.subscribe(
|
|
@@ -671,53 +667,53 @@ export function filterMapWithIndex<E, A, B>(fa: Observable<E, A>, f: (i: number,
|
|
|
671
667
|
/**
|
|
672
668
|
* @tsplus fluent fncts.observable.Observable filterMap
|
|
673
669
|
*/
|
|
674
|
-
export function filterMap_<E, A, B>(fa: Observable<E, A>, f: (a: A) => Maybe<B>): Observable<E, B> {
|
|
670
|
+
export function filterMap_<R, E, A, B>(fa: Observable<R, E, A>, f: (a: A) => Maybe<B>): Observable<R, E, B> {
|
|
675
671
|
return fa.filterMapWithIndex((_, a) => f(a));
|
|
676
672
|
}
|
|
677
673
|
|
|
678
674
|
/**
|
|
679
675
|
* @tsplus fluent fncts.observable.Observable partitionWithIndex
|
|
680
676
|
*/
|
|
681
|
-
export function partitionWithIndex<E, A, B extends A>(
|
|
682
|
-
fa: Observable<E, A>,
|
|
677
|
+
export function partitionWithIndex<R, E, A, B extends A>(
|
|
678
|
+
fa: Observable<R, E, A>,
|
|
683
679
|
refinement: RefinementWithIndex<number, A, B>,
|
|
684
|
-
): readonly [Observable<E, Exclude<A, B>>, Observable<E, B>];
|
|
685
|
-
export function partitionWithIndex<E, A>(
|
|
686
|
-
fa: Observable<E, A>,
|
|
680
|
+
): readonly [Observable<R, E, Exclude<A, B>>, Observable<R, E, B>];
|
|
681
|
+
export function partitionWithIndex<R, E, A>(
|
|
682
|
+
fa: Observable<R, E, A>,
|
|
687
683
|
predicate: PredicateWithIndex<number, A>,
|
|
688
|
-
): readonly [Observable<E, A>, Observable<E, A>];
|
|
689
|
-
export function partitionWithIndex<E, A>(
|
|
690
|
-
fa: Observable<E, A>,
|
|
684
|
+
): readonly [Observable<R, E, A>, Observable<R, E, A>];
|
|
685
|
+
export function partitionWithIndex<R, E, A>(
|
|
686
|
+
fa: Observable<R, E, A>,
|
|
691
687
|
predicate: PredicateWithIndex<number, A>,
|
|
692
|
-
): readonly [Observable<E, A>, Observable<E, A>] {
|
|
688
|
+
): readonly [Observable<R, E, A>, Observable<R, E, A>] {
|
|
693
689
|
return [fa.filterWithIndex((i, a) => !predicate(i, a)), fa.filterWithIndex(predicate)];
|
|
694
690
|
}
|
|
695
691
|
|
|
696
692
|
/**
|
|
697
693
|
* @tsplus fluent fncts.observable.Observable partition
|
|
698
694
|
*/
|
|
699
|
-
export function partition_<E, A, B extends A>(
|
|
700
|
-
fa: Observable<E, A>,
|
|
695
|
+
export function partition_<R, E, A, B extends A>(
|
|
696
|
+
fa: Observable<R, E, A>,
|
|
701
697
|
refinement: Refinement<A, B>,
|
|
702
|
-
): readonly [Observable<E, Exclude<A, B>>, Observable<E, B>];
|
|
703
|
-
export function partition_<E, A>(
|
|
704
|
-
fa: Observable<E, A>,
|
|
698
|
+
): readonly [Observable<R, E, Exclude<A, B>>, Observable<R, E, B>];
|
|
699
|
+
export function partition_<R, E, A>(
|
|
700
|
+
fa: Observable<R, E, A>,
|
|
705
701
|
predicate: Predicate<A>,
|
|
706
|
-
): readonly [Observable<E, A>, Observable<E, A>];
|
|
707
|
-
export function partition_<E, A>(
|
|
708
|
-
fa: Observable<E, A>,
|
|
702
|
+
): readonly [Observable<R, E, A>, Observable<R, E, A>];
|
|
703
|
+
export function partition_<R, E, A>(
|
|
704
|
+
fa: Observable<R, E, A>,
|
|
709
705
|
predicate: Predicate<A>,
|
|
710
|
-
): readonly [Observable<E, A>, Observable<E, A>] {
|
|
706
|
+
): readonly [Observable<R, E, A>, Observable<R, E, A>] {
|
|
711
707
|
return fa.partitionWithIndex((_, a) => predicate(a));
|
|
712
708
|
}
|
|
713
709
|
|
|
714
710
|
/**
|
|
715
711
|
* @tsplus fluent fncts.observable.Observable partitionMapWithIndex
|
|
716
712
|
*/
|
|
717
|
-
export function partitionMapWithIndex_<E, A, B, C>(
|
|
718
|
-
fa: Observable<E, A>,
|
|
713
|
+
export function partitionMapWithIndex_<R, E, A, B, C>(
|
|
714
|
+
fa: Observable<R, E, A>,
|
|
719
715
|
f: (i: number, a: A) => Either<B, C>,
|
|
720
|
-
): readonly [Observable<E, B>, Observable<E, C>] {
|
|
716
|
+
): readonly [Observable<R, E, B>, Observable<R, E, C>] {
|
|
721
717
|
return [
|
|
722
718
|
operate_(fa, (source, subscriber) => {
|
|
723
719
|
let index = 0;
|
|
@@ -745,102 +741,119 @@ export function partitionMapWithIndex_<E, A, B, C>(
|
|
|
745
741
|
/**
|
|
746
742
|
* @tsplus fluent fncts.observable.Observable partitionMap
|
|
747
743
|
*/
|
|
748
|
-
export function partitionMap_<E, A, B, C>(
|
|
749
|
-
fa: Observable<E, A>,
|
|
744
|
+
export function partitionMap_<R, E, A, B, C>(
|
|
745
|
+
fa: Observable<R, E, A>,
|
|
750
746
|
f: (a: A) => Either<B, C>,
|
|
751
|
-
): readonly [Observable<E, B>, Observable<E, C>] {
|
|
747
|
+
): readonly [Observable<R, E, B>, Observable<R, E, C>] {
|
|
752
748
|
return fa.partitionMapWithIndex((_, a) => f(a));
|
|
753
749
|
}
|
|
754
750
|
|
|
755
|
-
|
|
756
|
-
*
|
|
757
|
-
* Monad
|
|
758
|
-
* -------------------------------------------------------------------------------------------------
|
|
751
|
+
/**
|
|
752
|
+
* @tsplus fluent fncts.observable.Observable provideEnvironment
|
|
759
753
|
*/
|
|
754
|
+
export function provideEnvironment<R, E, A>(
|
|
755
|
+
self: Observable<R, E, A>,
|
|
756
|
+
environment: Environment<R>,
|
|
757
|
+
): Observable<never, E, A> {
|
|
758
|
+
return self.provide(environment);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
/**
|
|
762
|
+
* @tsplus fluent fncts.observable.Observable provideService
|
|
763
|
+
*/
|
|
764
|
+
export function provideService<R, E, A, S>(
|
|
765
|
+
self: Observable<R, E, A>,
|
|
766
|
+
service: S,
|
|
767
|
+
/** @tsplus auto */ tag: Tag<S>,
|
|
768
|
+
): Observable<Exclude<R, S>, E, A> {
|
|
769
|
+
return self.contramapEnvironment((environment) => environment.add(service, tag) as Environment<R>);
|
|
770
|
+
}
|
|
760
771
|
|
|
761
772
|
/**
|
|
762
773
|
* @tsplus fluent fncts.observable.Observable mergeMapWithIndex
|
|
763
774
|
*/
|
|
764
|
-
export function mergeMapWithIndex<E, A, E1, B>(
|
|
765
|
-
ma: Observable<E, A>,
|
|
766
|
-
f: (i: number, a: A) => ObservableInput<E1, B>,
|
|
775
|
+
export function mergeMapWithIndex<R, E, A, R1, E1, B>(
|
|
776
|
+
ma: Observable<R, E, A>,
|
|
777
|
+
f: (i: number, a: A) => ObservableInput<R1, E1, B>,
|
|
767
778
|
concurrent = Infinity,
|
|
768
|
-
): Observable<E | E1, B> {
|
|
779
|
+
): Observable<R | R1, E | E1, B> {
|
|
769
780
|
return operate_(ma, (source, sub) => mergeInternal(source, sub, f, concurrent));
|
|
770
781
|
}
|
|
771
782
|
|
|
772
783
|
/**
|
|
773
784
|
* @tsplus fluent fncts.observable.Observable mergeMap
|
|
774
785
|
*/
|
|
775
|
-
export function mergeMap_<E, A, E1, B>(
|
|
776
|
-
ma: Observable<E, A>,
|
|
777
|
-
f: (a: A) => ObservableInput<E1, B>,
|
|
786
|
+
export function mergeMap_<R, E, A, R1, E1, B>(
|
|
787
|
+
ma: Observable<R, E, A>,
|
|
788
|
+
f: (a: A) => ObservableInput<R1, E1, B>,
|
|
778
789
|
concurrent = Infinity,
|
|
779
|
-
): Observable<E | E1, B> {
|
|
790
|
+
): Observable<R | R1, E | E1, B> {
|
|
780
791
|
return ma.mergeMapWithIndex((_, a) => f(a), concurrent);
|
|
781
792
|
}
|
|
782
793
|
|
|
783
794
|
/**
|
|
784
795
|
* @tsplus fluent fncts.observable.Observable concatMapWithIndex
|
|
785
796
|
*/
|
|
786
|
-
export function concatMapWithIndex<E, A, E1, B>(
|
|
787
|
-
ma: Observable<E, A>,
|
|
788
|
-
f: (i: number, a: A) => ObservableInput<E1, B>,
|
|
789
|
-
): Observable<E | E1, B> {
|
|
797
|
+
export function concatMapWithIndex<R, E, A, R1, E1, B>(
|
|
798
|
+
ma: Observable<R, E, A>,
|
|
799
|
+
f: (i: number, a: A) => ObservableInput<R1, E1, B>,
|
|
800
|
+
): Observable<R | R1, E | E1, B> {
|
|
790
801
|
return ma.mergeMapWithIndex(f, 1);
|
|
791
802
|
}
|
|
792
803
|
|
|
793
804
|
/**
|
|
794
805
|
* @tsplus fluent fncts.observable.Observable concatMap
|
|
795
806
|
*/
|
|
796
|
-
export function concatMap_<E, A, E1, B>(
|
|
797
|
-
ma: Observable<E, A>,
|
|
798
|
-
f: (a: A) => ObservableInput<E1, B>,
|
|
799
|
-
): Observable<E | E1, B> {
|
|
807
|
+
export function concatMap_<R, E, A, R1, E1, B>(
|
|
808
|
+
ma: Observable<R, E, A>,
|
|
809
|
+
f: (a: A) => ObservableInput<R1, E1, B>,
|
|
810
|
+
): Observable<R | R1, E | E1, B> {
|
|
800
811
|
return ma.mergeMapWithIndex((_, a) => f(a), 1);
|
|
801
812
|
}
|
|
802
813
|
|
|
803
814
|
/**
|
|
804
|
-
* @tsplus
|
|
815
|
+
* @tsplus fluent fncts.observable.Observable contramapEnvironment
|
|
805
816
|
*/
|
|
806
|
-
export function
|
|
807
|
-
|
|
817
|
+
export function contramapEnvironment<R, E, A, R0>(
|
|
818
|
+
self: Observable<R, E, A>,
|
|
819
|
+
f: (r0: Environment<R0>) => Environment<R>,
|
|
820
|
+
): Observable<R0, E, A> {
|
|
821
|
+
return Observable.environmentWithObservable((environment) => self.provide(f(environment)));
|
|
808
822
|
}
|
|
809
823
|
|
|
810
|
-
|
|
811
|
-
*
|
|
812
|
-
* Foldable
|
|
813
|
-
* -------------------------------------------------------------------------------------------------
|
|
824
|
+
/**
|
|
825
|
+
* @tsplus getter fncts.observable.Observable flatten
|
|
814
826
|
*/
|
|
827
|
+
export function flatten<R, E, R1, E1, A>(mma: Observable<R, E, Observable<R1, E1, A>>): Observable<R | R1, E | E1, A> {
|
|
828
|
+
return mma.concatAll;
|
|
829
|
+
}
|
|
815
830
|
|
|
816
831
|
/**
|
|
817
832
|
* @tsplus fluent fncts.observable.Observable foldLeftWithIndex
|
|
818
833
|
*/
|
|
819
|
-
export function foldLeftWithIndex<E, A, B>(
|
|
820
|
-
fa: Observable<E, A>,
|
|
834
|
+
export function foldLeftWithIndex<R, E, A, B>(
|
|
835
|
+
fa: Observable<R, E, A>,
|
|
821
836
|
initial: B,
|
|
822
837
|
f: (index: number, acc: B, value: A) => B,
|
|
823
|
-
): Observable<E, B> {
|
|
838
|
+
): Observable<R, E, B> {
|
|
824
839
|
return fa.operate(scanInternal(f, initial, true, false, true));
|
|
825
840
|
}
|
|
826
841
|
|
|
827
842
|
/**
|
|
828
843
|
* @tsplus fluent fncts.observable.Observable foldLeft
|
|
829
844
|
*/
|
|
830
|
-
export function foldLeft<
|
|
845
|
+
export function foldLeft<R, E, A, B>(
|
|
846
|
+
fa: Observable<R, E, A>,
|
|
847
|
+
initial: B,
|
|
848
|
+
f: (acc: B, value: A) => B,
|
|
849
|
+
): Observable<R, E, B> {
|
|
831
850
|
return fa.foldLeftWithIndex(initial, (_, b, a) => f(b, a));
|
|
832
851
|
}
|
|
833
852
|
|
|
834
|
-
/*
|
|
835
|
-
* -------------------------------------------------------------------------------------------------
|
|
836
|
-
* combinators
|
|
837
|
-
* -------------------------------------------------------------------------------------------------
|
|
838
|
-
*/
|
|
839
|
-
|
|
840
853
|
/**
|
|
841
854
|
* @tsplus fluent fncts.observable.Observable at
|
|
842
855
|
*/
|
|
843
|
-
export function at_<E, A>(fa: Observable<E, A>, index: number): Observable<E, Maybe<A>> {
|
|
856
|
+
export function at_<R, E, A>(fa: Observable<R, E, A>, index: number): Observable<R, E, Maybe<A>> {
|
|
844
857
|
return fa
|
|
845
858
|
.filterWithIndex((i) => i === index)
|
|
846
859
|
.take(1)
|
|
@@ -851,10 +864,10 @@ export function at_<E, A>(fa: Observable<E, A>, index: number): Observable<E, Ma
|
|
|
851
864
|
/**
|
|
852
865
|
* @tsplus fluent fncts.observable.Observable audit
|
|
853
866
|
*/
|
|
854
|
-
export function audit_<E, A, E1>(
|
|
855
|
-
fa: Observable<E, A>,
|
|
856
|
-
durationSelector: (value: A) => ObservableInput<E1, any>,
|
|
857
|
-
): Observable<E | E1, A> {
|
|
867
|
+
export function audit_<R, E, A, R1, E1>(
|
|
868
|
+
fa: Observable<R, E, A>,
|
|
869
|
+
durationSelector: (value: A) => ObservableInput<R1, E1, any>,
|
|
870
|
+
): Observable<R | R1, E | E1, A> {
|
|
858
871
|
return fa.operate((source, subscriber) => {
|
|
859
872
|
let lastValue: Maybe<A> = Nothing();
|
|
860
873
|
let durationSubscriber: Subscriber<any, any> | null = null;
|
|
@@ -897,21 +910,21 @@ export function audit_<E, A, E1>(
|
|
|
897
910
|
/**
|
|
898
911
|
* @tsplus fluent fncts.observable.Observable auditTime
|
|
899
912
|
*/
|
|
900
|
-
export function auditTime_<E, A>(
|
|
901
|
-
fa: Observable<E, A>,
|
|
913
|
+
export function auditTime_<R, E, A>(
|
|
914
|
+
fa: Observable<R, E, A>,
|
|
902
915
|
duration: number,
|
|
903
916
|
scheduler: SchedulerLike = asyncScheduler,
|
|
904
|
-
): Observable<E, A> {
|
|
917
|
+
): Observable<R, E, A> {
|
|
905
918
|
return fa.audit(() => timer(duration, scheduler));
|
|
906
919
|
}
|
|
907
920
|
|
|
908
921
|
/**
|
|
909
922
|
* @tsplus fluent fncts.observable.Observable buffer
|
|
910
923
|
*/
|
|
911
|
-
export function buffer_<E, A, E1>(
|
|
912
|
-
fa: Observable<E, A>,
|
|
913
|
-
closingNotifier: Observable<E1, any>,
|
|
914
|
-
): Observable<E | E1, ReadonlyArray<A>> {
|
|
924
|
+
export function buffer_<R, E, A, R1, E1>(
|
|
925
|
+
fa: Observable<R, E, A>,
|
|
926
|
+
closingNotifier: Observable<R1, E1, any>,
|
|
927
|
+
): Observable<R | R1, E | E1, ReadonlyArray<A>> {
|
|
915
928
|
return fa.operate((source, subscriber) => {
|
|
916
929
|
let buffer: A[] = [];
|
|
917
930
|
source.subscribe(
|
|
@@ -942,11 +955,11 @@ export function buffer_<E, A, E1>(
|
|
|
942
955
|
/**
|
|
943
956
|
* @tsplus fluent fncts.observable.Observable bufferCount
|
|
944
957
|
*/
|
|
945
|
-
export function bufferCount_<E, A>(
|
|
946
|
-
fa: Observable<E, A>,
|
|
958
|
+
export function bufferCount_<R, E, A>(
|
|
959
|
+
fa: Observable<R, E, A>,
|
|
947
960
|
bufferSize: number,
|
|
948
961
|
startBufferEvery?: number,
|
|
949
|
-
): Observable<E, ReadonlyArray<A>> {
|
|
962
|
+
): Observable<R, E, ReadonlyArray<A>> {
|
|
950
963
|
// eslint-disable-next-line no-param-reassign
|
|
951
964
|
startBufferEvery = startBufferEvery ?? bufferSize;
|
|
952
965
|
return fa.operate((source, subscriber) => {
|
|
@@ -1000,7 +1013,10 @@ export interface BufferTimeConfig {
|
|
|
1000
1013
|
/**
|
|
1001
1014
|
* @tsplus fluent fncts.observable.Observable bufferTime
|
|
1002
1015
|
*/
|
|
1003
|
-
export function bufferTime_<E, A>(
|
|
1016
|
+
export function bufferTime_<R, E, A>(
|
|
1017
|
+
fa: Observable<R, E, A>,
|
|
1018
|
+
config: BufferTimeConfig,
|
|
1019
|
+
): Observable<R, E, ReadonlyArray<A>> {
|
|
1004
1020
|
const {
|
|
1005
1021
|
bufferTimeSpan,
|
|
1006
1022
|
bufferCreationInterval = null,
|
|
@@ -1068,11 +1084,11 @@ export function bufferTime_<E, A>(fa: Observable<E, A>, config: BufferTimeConfig
|
|
|
1068
1084
|
/**
|
|
1069
1085
|
* @tsplus fluent fncts.observable.Observable bufferToggle
|
|
1070
1086
|
*/
|
|
1071
|
-
export function bufferToggle_<E, A, E1, B, E2>(
|
|
1072
|
-
fa: Observable<E, A>,
|
|
1073
|
-
openings: ObservableInput<E1, B>,
|
|
1074
|
-
closingSelector: (value: B) => ObservableInput<E2, any>,
|
|
1075
|
-
): Observable<E | E1 | E2, ReadonlyArray<A>> {
|
|
1087
|
+
export function bufferToggle_<R, E, A, R1, E1, B, R2, E2>(
|
|
1088
|
+
fa: Observable<R, E, A>,
|
|
1089
|
+
openings: ObservableInput<R1, E1, B>,
|
|
1090
|
+
closingSelector: (value: B) => ObservableInput<R2, E2, any>,
|
|
1091
|
+
): Observable<R | R1 | R2, E | E1 | E2, ReadonlyArray<A>> {
|
|
1076
1092
|
return fa.operate((source, subscriber) => {
|
|
1077
1093
|
const buffers: A[][] = [];
|
|
1078
1094
|
from(openings).subscribe(
|
|
@@ -1116,10 +1132,10 @@ export function bufferToggle_<E, A, E1, B, E2>(
|
|
|
1116
1132
|
/**
|
|
1117
1133
|
* @tsplus fluent fncts.observable.Observable bufferWhen
|
|
1118
1134
|
*/
|
|
1119
|
-
export function bufferWhen_<E, A, E1>(
|
|
1120
|
-
fa: Observable<E, A>,
|
|
1121
|
-
closingSelector: () => ObservableInput<E1, any>,
|
|
1122
|
-
): Observable<E | E1, ReadonlyArray<A>> {
|
|
1135
|
+
export function bufferWhen_<R, E, A, R1, E1>(
|
|
1136
|
+
fa: Observable<R, E, A>,
|
|
1137
|
+
closingSelector: () => ObservableInput<R1, E1, any>,
|
|
1138
|
+
): Observable<R | R1, E | E1, ReadonlyArray<A>> {
|
|
1123
1139
|
return fa.operate((source, subscriber) => {
|
|
1124
1140
|
let buffer: A[] | null = null;
|
|
1125
1141
|
let closingSubscriber: Subscriber<E | E1, A> | null = null;
|
|
@@ -1149,23 +1165,17 @@ export function bufferWhen_<E, A, E1>(
|
|
|
1149
1165
|
});
|
|
1150
1166
|
}
|
|
1151
1167
|
|
|
1152
|
-
export function bufferWhen<E1>(
|
|
1153
|
-
closingSelector: () => ObservableInput<E1, any>,
|
|
1154
|
-
): <E, A>(fa: Observable<E, A>) => Observable<E | E1, ReadonlyArray<A>> {
|
|
1155
|
-
return (fa) => bufferWhen_(fa, closingSelector);
|
|
1156
|
-
}
|
|
1157
|
-
|
|
1158
1168
|
/**
|
|
1159
1169
|
* @tsplus fluent fncts.observable.Observable catchAllCause
|
|
1160
1170
|
*/
|
|
1161
|
-
export function catchAllCause<E, A, E1, B>(
|
|
1162
|
-
self: Observable<E, A>,
|
|
1163
|
-
f: (cause: Cause<E>, caught: Observable<E | E1, A | B>) => ObservableInput<E1, B>,
|
|
1164
|
-
): Observable<E1, A | B> {
|
|
1171
|
+
export function catchAllCause<R, E, A, R1, E1, B>(
|
|
1172
|
+
self: Observable<R, E, A>,
|
|
1173
|
+
f: (cause: Cause<E>, caught: Observable<R | R1, E | E1, A | B>) => ObservableInput<R | R1, E1, B>,
|
|
1174
|
+
): Observable<R | R1, E1, A | B> {
|
|
1165
1175
|
return self.operate((source, subscriber) => {
|
|
1166
1176
|
let innerSub: Subscription | null = null;
|
|
1167
1177
|
let syncUnsub = false;
|
|
1168
|
-
let handledResult: Observable<E1, B>;
|
|
1178
|
+
let handledResult: Observable<R | R1, E1, B>;
|
|
1169
1179
|
innerSub = source.subscribe(
|
|
1170
1180
|
operatorSubscriber(subscriber, {
|
|
1171
1181
|
error: (cause) => {
|
|
@@ -1191,17 +1201,23 @@ export function catchAllCause<E, A, E1, B>(
|
|
|
1191
1201
|
/**
|
|
1192
1202
|
* @tsplus getter fncts.observable.Observable concatAll
|
|
1193
1203
|
*/
|
|
1194
|
-
export function concatAll<
|
|
1204
|
+
export function concatAll<R, E, R1, E1, A>(
|
|
1205
|
+
ffa: Observable<R, E, ObservableInput<R1, E1, A>>,
|
|
1206
|
+
): Observable<R | R1, E | E1, A> {
|
|
1195
1207
|
return mergeAll_(ffa, 1);
|
|
1196
1208
|
}
|
|
1197
1209
|
|
|
1198
1210
|
/**
|
|
1199
1211
|
* @tsplus fluent fncts.observable.Observable concat
|
|
1200
1212
|
*/
|
|
1201
|
-
export function concat_<E, A, O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
1202
|
-
fa: Observable<E, A>,
|
|
1213
|
+
export function concat_<R, E, A, O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
1214
|
+
fa: Observable<R, E, A>,
|
|
1203
1215
|
...sources: O
|
|
1204
|
-
): Observable<
|
|
1216
|
+
): Observable<
|
|
1217
|
+
R | Observable.EnvironmentOf<O[number]>,
|
|
1218
|
+
E | Observable.ErrorOf<O[number]>,
|
|
1219
|
+
A | Observable.TypeOf<O[number]>
|
|
1220
|
+
> {
|
|
1205
1221
|
return fa.operate((source, subscriber) => {
|
|
1206
1222
|
fromArrayLike([source, ...sources]).concatAll.subscribe(subscriber);
|
|
1207
1223
|
});
|
|
@@ -1210,33 +1226,33 @@ export function concat_<E, A, O extends ReadonlyArray<ObservableInput<any, any>>
|
|
|
1210
1226
|
/**
|
|
1211
1227
|
* @tsplus getter fncts.observable.Observable count
|
|
1212
1228
|
*/
|
|
1213
|
-
export function count<E, A>(fa: Observable<E, A>): Observable<E, number> {
|
|
1229
|
+
export function count<R, E, A>(fa: Observable<R, E, A>): Observable<R, E, number> {
|
|
1214
1230
|
return fa.foldLeft(0, (total, _) => total + 1);
|
|
1215
1231
|
}
|
|
1216
1232
|
|
|
1217
1233
|
/**
|
|
1218
1234
|
* @tsplus fluent fncts.observable.Observable countWithIndex
|
|
1219
1235
|
*/
|
|
1220
|
-
export function countWithIndex<E, A>(
|
|
1221
|
-
fa: Observable<E, A>,
|
|
1236
|
+
export function countWithIndex<R, E, A>(
|
|
1237
|
+
fa: Observable<R, E, A>,
|
|
1222
1238
|
predicate: PredicateWithIndex<number, A>,
|
|
1223
|
-
): Observable<E, number> {
|
|
1239
|
+
): Observable<R, E, number> {
|
|
1224
1240
|
return fa.foldLeftWithIndex(0, (i, total, v) => (predicate(i, v) ? total + 1 : total));
|
|
1225
1241
|
}
|
|
1226
1242
|
|
|
1227
1243
|
/**
|
|
1228
1244
|
* @tsplus fluent fncts.observable.Observable countWith
|
|
1229
1245
|
*/
|
|
1230
|
-
export function countWith_<E, A>(fa: Observable<E, A>, predicate: Predicate<A>): Observable<E, number> {
|
|
1246
|
+
export function countWith_<R, E, A>(fa: Observable<R, E, A>, predicate: Predicate<A>): Observable<R, E, number> {
|
|
1231
1247
|
return fa.countWithIndex((_, a) => predicate(a));
|
|
1232
1248
|
}
|
|
1233
1249
|
|
|
1234
1250
|
/**
|
|
1235
1251
|
* @tsplus getter fncts.observable.Observable combineLatestAll
|
|
1236
1252
|
*/
|
|
1237
|
-
export function combineLatestAll<E, E1, A>(
|
|
1238
|
-
fa: Observable<E, ObservableInput<E1, A>>,
|
|
1239
|
-
): Observable<E | E1, ReadonlyArray<A>> {
|
|
1253
|
+
export function combineLatestAll<R, E, R1, E1, A>(
|
|
1254
|
+
fa: Observable<R, E, ObservableInput<R1, E1, A>>,
|
|
1255
|
+
): Observable<R | R1, E | E1, ReadonlyArray<A>> {
|
|
1240
1256
|
return joinAllInternal(fa, (sources) =>
|
|
1241
1257
|
!sources.length ? empty() : (combineLatest_(sources[0]!, ...sources.slice(1)) as any),
|
|
1242
1258
|
);
|
|
@@ -1245,10 +1261,14 @@ export function combineLatestAll<E, E1, A>(
|
|
|
1245
1261
|
/**
|
|
1246
1262
|
* @tsplus fluent fncts.observable.Observable combineLatest
|
|
1247
1263
|
*/
|
|
1248
|
-
export function combineLatest_<E, A, O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
1249
|
-
self: ObservableInput<E, A>,
|
|
1264
|
+
export function combineLatest_<R, E, A, O extends ReadonlyArray<ObservableInput<any, any, any>>>(
|
|
1265
|
+
self: ObservableInput<R, E, A>,
|
|
1250
1266
|
...sources: O
|
|
1251
|
-
): Observable<
|
|
1267
|
+
): Observable<
|
|
1268
|
+
R | Observable.EnvironmentOf<O[number]>,
|
|
1269
|
+
E | Observable.ErrorOf<O[number]>,
|
|
1270
|
+
[A, ...{ [K in keyof O]: Observable.TypeOf<O[K]> }]
|
|
1271
|
+
> {
|
|
1252
1272
|
if (!sources.length) {
|
|
1253
1273
|
return from(self).unsafeCoerce();
|
|
1254
1274
|
}
|
|
@@ -1260,10 +1280,10 @@ export function combineLatest_<E, A, O extends ReadonlyArray<ObservableInput<any
|
|
|
1260
1280
|
/**
|
|
1261
1281
|
* @tsplus fluent fncts.observable.Observable debounceWith
|
|
1262
1282
|
*/
|
|
1263
|
-
export function debounceWith_<E, A, E1>(
|
|
1264
|
-
fa: Observable<E, A>,
|
|
1265
|
-
durationSelector: (value: A) => ObservableInput<E1, any>,
|
|
1266
|
-
): Observable<E | E1, A> {
|
|
1283
|
+
export function debounceWith_<R, E, A, R1, E1>(
|
|
1284
|
+
fa: Observable<R, E, A>,
|
|
1285
|
+
durationSelector: (value: A) => ObservableInput<R1, E1, any>,
|
|
1286
|
+
): Observable<R | R1, E | E1, A> {
|
|
1267
1287
|
return fa.operate((source, subscriber) => {
|
|
1268
1288
|
let lastValue: Maybe<A> = Nothing();
|
|
1269
1289
|
let durationSubscriber: Subscriber<E1, any> | null = null;
|
|
@@ -1302,11 +1322,11 @@ export function debounceWith_<E, A, E1>(
|
|
|
1302
1322
|
/**
|
|
1303
1323
|
* @tsplus fluent fncts.observable.Observable debounce
|
|
1304
1324
|
*/
|
|
1305
|
-
export function debounce_<E, A>(
|
|
1306
|
-
fa: Observable<E, A>,
|
|
1325
|
+
export function debounce_<R, E, A>(
|
|
1326
|
+
fa: Observable<R, E, A>,
|
|
1307
1327
|
dueTime: number,
|
|
1308
1328
|
scheduler: SchedulerLike = asyncScheduler,
|
|
1309
|
-
): Observable<E, A> {
|
|
1329
|
+
): Observable<R, E, A> {
|
|
1310
1330
|
return fa.operate((source, subscriber) => {
|
|
1311
1331
|
let activeTask: Subscription | null = null;
|
|
1312
1332
|
let lastValue: A | null = null;
|
|
@@ -1359,7 +1379,7 @@ export function debounce_<E, A>(
|
|
|
1359
1379
|
/**
|
|
1360
1380
|
* @tsplus getter fncts.observable.Observable either
|
|
1361
1381
|
*/
|
|
1362
|
-
export function either<E, A>(fa: Observable<E, A>): Observable<never, Either<E, A>> {
|
|
1382
|
+
export function either<R, E, A>(fa: Observable<R, E, A>): Observable<R, never, Either<E, A>> {
|
|
1363
1383
|
return fa.operate((source, subscriber) => {
|
|
1364
1384
|
source.subscribe(
|
|
1365
1385
|
operatorSubscriber(subscriber, {
|
|
@@ -1380,31 +1400,31 @@ export function either<E, A>(fa: Observable<E, A>): Observable<never, Either<E,
|
|
|
1380
1400
|
/**
|
|
1381
1401
|
* @tsplus fluent fncts.observable.Observable delayWithIndex
|
|
1382
1402
|
*/
|
|
1383
|
-
export function delayWithIndex<E, A, E1>(
|
|
1384
|
-
fa: Observable<E, A>,
|
|
1385
|
-
f: (index: number, value: A) => Observable<E1, any>,
|
|
1386
|
-
): Observable<E | E1, A> {
|
|
1403
|
+
export function delayWithIndex<R, E, A, R1, E1>(
|
|
1404
|
+
fa: Observable<R, E, A>,
|
|
1405
|
+
f: (index: number, value: A) => Observable<R1, E1, any>,
|
|
1406
|
+
): Observable<R | R1, E | E1, A> {
|
|
1387
1407
|
return fa.mergeMapWithIndex((i, a) => f(i, a).take(1).as(a));
|
|
1388
1408
|
}
|
|
1389
1409
|
|
|
1390
1410
|
/**
|
|
1391
1411
|
* @tsplus fluent fncts.observable.Observable delayWith
|
|
1392
1412
|
*/
|
|
1393
|
-
export function delayWith_<E, A, E1>(
|
|
1394
|
-
fa: Observable<E, A>,
|
|
1395
|
-
f: (value: A) => Observable<E1, any>,
|
|
1396
|
-
): Observable<E | E1, A> {
|
|
1413
|
+
export function delayWith_<R, E, A, R1, E1>(
|
|
1414
|
+
fa: Observable<R, E, A>,
|
|
1415
|
+
f: (value: A) => Observable<R1, E1, any>,
|
|
1416
|
+
): Observable<R | R1, E | E1, A> {
|
|
1397
1417
|
return fa.delayWithIndex((_, a) => f(a));
|
|
1398
1418
|
}
|
|
1399
1419
|
|
|
1400
1420
|
/**
|
|
1401
1421
|
* @tsplus fluent fncts.observable.Observable delay
|
|
1402
1422
|
*/
|
|
1403
|
-
export function delay_<E, A>(
|
|
1404
|
-
fa: Observable<E, A>,
|
|
1423
|
+
export function delay_<R, E, A>(
|
|
1424
|
+
fa: Observable<R, E, A>,
|
|
1405
1425
|
due: number | Date,
|
|
1406
1426
|
scheduler: SchedulerLike = asyncScheduler,
|
|
1407
|
-
): Observable<E, A> {
|
|
1427
|
+
): Observable<R, E, A> {
|
|
1408
1428
|
const duration = timer(due, scheduler);
|
|
1409
1429
|
return delayWith_(fa, () => duration);
|
|
1410
1430
|
}
|
|
@@ -1412,7 +1432,7 @@ export function delay_<E, A>(
|
|
|
1412
1432
|
/**
|
|
1413
1433
|
* @tsplus getter fncts.observable.Observable dematerialize
|
|
1414
1434
|
*/
|
|
1415
|
-
export function dematerialize<E, E1, A>(fa: Observable<E, Notification<E1, A>>): Observable<E | E1, A> {
|
|
1435
|
+
export function dematerialize<R, E, E1, A>(fa: Observable<R, E, Notification<E1, A>>): Observable<R, E | E1, A> {
|
|
1416
1436
|
return fa.operate((source, subscriber) => {
|
|
1417
1437
|
source.subscribe(operatorSubscriber(subscriber, { next: (notification) => notification.observe(subscriber) }));
|
|
1418
1438
|
});
|
|
@@ -1421,7 +1441,7 @@ export function dematerialize<E, E1, A>(fa: Observable<E, Notification<E1, A>>):
|
|
|
1421
1441
|
/**
|
|
1422
1442
|
* @tsplus fluent fncts.observable.Observable ensuring
|
|
1423
1443
|
*/
|
|
1424
|
-
export function ensuring_<E, A>(fa: Observable<E, A>, finalizer: () => void): Observable<E, A> {
|
|
1444
|
+
export function ensuring_<R, E, A>(fa: Observable<R, E, A>, finalizer: () => void): Observable<R, E, A> {
|
|
1425
1445
|
return fa.operate((source, subscriber) => {
|
|
1426
1446
|
source.subscribe(subscriber);
|
|
1427
1447
|
subscriber.add(finalizer);
|
|
@@ -1431,7 +1451,9 @@ export function ensuring_<E, A>(fa: Observable<E, A>, finalizer: () => void): Ob
|
|
|
1431
1451
|
/**
|
|
1432
1452
|
* @tsplus getter fncts.observable.Observable exhaustAll
|
|
1433
1453
|
*/
|
|
1434
|
-
export function exhaustAll<
|
|
1454
|
+
export function exhaustAll<R, E, R1, E1, A>(
|
|
1455
|
+
ffa: Observable<R, E, ObservableInput<R1, E1, A>>,
|
|
1456
|
+
): Observable<R | R1, E | E1, A> {
|
|
1435
1457
|
return ffa.operate((source, subscriber) => {
|
|
1436
1458
|
let isComplete = false;
|
|
1437
1459
|
let innerSub: Subscription | null = null;
|
|
@@ -1461,10 +1483,10 @@ export function exhaustAll<E, E1, A>(ffa: Observable<E, ObservableInput<E1, A>>)
|
|
|
1461
1483
|
/**
|
|
1462
1484
|
* @tsplus fluent fncts.observable.Observable exhaustMapWithIndex
|
|
1463
1485
|
*/
|
|
1464
|
-
export function exhaustMapWithIndex<E, A, E1, B>(
|
|
1465
|
-
self: Observable<E, A>,
|
|
1466
|
-
f: (i: number, a: A) => ObservableInput<E1, B>,
|
|
1467
|
-
): Observable<E | E1, B> {
|
|
1486
|
+
export function exhaustMapWithIndex<R, E, A, R1, E1, B>(
|
|
1487
|
+
self: Observable<R, E, A>,
|
|
1488
|
+
f: (i: number, a: A) => ObservableInput<R1, E1, B>,
|
|
1489
|
+
): Observable<R | R1, E | E1, B> {
|
|
1468
1490
|
return self.operate((source, subscriber) => {
|
|
1469
1491
|
let index = 0;
|
|
1470
1492
|
let innerSub: Subscriber<E1, B> | null = null;
|
|
@@ -1494,21 +1516,21 @@ export function exhaustMapWithIndex<E, A, E1, B>(
|
|
|
1494
1516
|
/**
|
|
1495
1517
|
* @tsplus fluent fncts.observable.Observable exhaustMap
|
|
1496
1518
|
*/
|
|
1497
|
-
export function exhaustMap_<E, A, E1, B>(
|
|
1498
|
-
self: Observable<E, A>,
|
|
1499
|
-
f: (a: A) => ObservableInput<E1, B>,
|
|
1500
|
-
): Observable<E | E1, B> {
|
|
1519
|
+
export function exhaustMap_<R, E, A, R1, E1, B>(
|
|
1520
|
+
self: Observable<R, E, A>,
|
|
1521
|
+
f: (a: A) => ObservableInput<R1, E1, B>,
|
|
1522
|
+
): Observable<R | R1, E | E1, B> {
|
|
1501
1523
|
return self.exhaustMapWithIndex((_, a) => f(a));
|
|
1502
1524
|
}
|
|
1503
1525
|
|
|
1504
1526
|
/**
|
|
1505
1527
|
* @tsplus fluent fncts.observable.Observable expandWithIndex
|
|
1506
1528
|
*/
|
|
1507
|
-
export function expandWithIndex<E, A, E1, B>(
|
|
1508
|
-
fa: Observable<E, A>,
|
|
1509
|
-
f: (i: number, a: A) => ObservableInput<E1, B>,
|
|
1529
|
+
export function expandWithIndex<R, E, A, R1, E1, B>(
|
|
1530
|
+
fa: Observable<R, E, A>,
|
|
1531
|
+
f: (i: number, a: A) => ObservableInput<R1, E1, B>,
|
|
1510
1532
|
concurrent = Infinity,
|
|
1511
|
-
): Observable<E | E1, B> {
|
|
1533
|
+
): Observable<R | R1, E | E1, B> {
|
|
1512
1534
|
// eslint-disable-next-line no-param-reassign
|
|
1513
1535
|
concurrent = (concurrent || 0) < 1 ? Infinity : concurrent;
|
|
1514
1536
|
return fa.operate((source, subscriber) => mergeInternal(source, subscriber, f, concurrent, undefined, true));
|
|
@@ -1517,68 +1539,71 @@ export function expandWithIndex<E, A, E1, B>(
|
|
|
1517
1539
|
/**
|
|
1518
1540
|
* @tsplus fluent fncts.observable.Observable expand
|
|
1519
1541
|
*/
|
|
1520
|
-
export function expand_<E, A, E1, B>(
|
|
1521
|
-
fa: Observable<E, A>,
|
|
1522
|
-
f: (a: A) => ObservableInput<E1, B>,
|
|
1542
|
+
export function expand_<R, E, A, R1, E1, B>(
|
|
1543
|
+
fa: Observable<R, E, A>,
|
|
1544
|
+
f: (a: A) => ObservableInput<R1, E1, B>,
|
|
1523
1545
|
concurrent = Infinity,
|
|
1524
|
-
): Observable<E | E1, B> {
|
|
1546
|
+
): Observable<R | R1, E | E1, B> {
|
|
1525
1547
|
return fa.expandWithIndex((_, a) => f(a), concurrent);
|
|
1526
1548
|
}
|
|
1527
1549
|
|
|
1528
1550
|
/**
|
|
1529
1551
|
* @tsplus fluent fncts.observable.Observable findWithIndex
|
|
1530
1552
|
*/
|
|
1531
|
-
export function findWithIndex<E, A, B extends A>(
|
|
1532
|
-
fa: Observable<E, A>,
|
|
1553
|
+
export function findWithIndex<R, E, A, B extends A>(
|
|
1554
|
+
fa: Observable<R, E, A>,
|
|
1533
1555
|
refinement: RefinementWithIndex<number, A, B>,
|
|
1534
|
-
): Observable<E, Maybe<B>>;
|
|
1535
|
-
export function findWithIndex<E, A>(
|
|
1536
|
-
fa: Observable<E, A>,
|
|
1556
|
+
): Observable<R, E, Maybe<B>>;
|
|
1557
|
+
export function findWithIndex<R, E, A>(
|
|
1558
|
+
fa: Observable<R, E, A>,
|
|
1537
1559
|
predicate: PredicateWithIndex<number, A>,
|
|
1538
|
-
): Observable<E, Maybe<A>>;
|
|
1539
|
-
export function findWithIndex<E, A>(
|
|
1540
|
-
fa: Observable<E, A>,
|
|
1560
|
+
): Observable<R, E, Maybe<A>>;
|
|
1561
|
+
export function findWithIndex<R, E, A>(
|
|
1562
|
+
fa: Observable<R, E, A>,
|
|
1541
1563
|
predicate: PredicateWithIndex<number, A>,
|
|
1542
|
-
): Observable<E, Maybe<A>> {
|
|
1564
|
+
): Observable<R, E, Maybe<A>> {
|
|
1543
1565
|
return fa.operate(findInternal(predicate, "value"));
|
|
1544
1566
|
}
|
|
1545
1567
|
|
|
1546
1568
|
/**
|
|
1547
1569
|
* @tsplus fluent fncts.observable.Observable find
|
|
1548
1570
|
*/
|
|
1549
|
-
export function find_<E, A, B extends A>(
|
|
1550
|
-
|
|
1551
|
-
|
|
1571
|
+
export function find_<R, E, A, B extends A>(
|
|
1572
|
+
fa: Observable<R, E, A>,
|
|
1573
|
+
refinement: Refinement<A, B>,
|
|
1574
|
+
): Observable<R, E, Maybe<B>>;
|
|
1575
|
+
export function find_<R, E, A>(fa: Observable<R, E, A>, predicate: Predicate<A>): Observable<R, E, Maybe<A>>;
|
|
1576
|
+
export function find_<R, E, A>(fa: Observable<R, E, A>, predicate: Predicate<A>): Observable<R, E, Maybe<A>> {
|
|
1552
1577
|
return fa.findWithIndex((_, a) => predicate(a));
|
|
1553
1578
|
}
|
|
1554
1579
|
|
|
1555
1580
|
/**
|
|
1556
1581
|
* @tsplus fluent fncts.observable.Observable findIndexWithIndex
|
|
1557
1582
|
*/
|
|
1558
|
-
export function findIndexWithIndex<E, A, B extends A>(
|
|
1559
|
-
fa: Observable<E, A>,
|
|
1583
|
+
export function findIndexWithIndex<R, E, A, B extends A>(
|
|
1584
|
+
fa: Observable<R, E, A>,
|
|
1560
1585
|
refinement: RefinementWithIndex<number, A, B>,
|
|
1561
|
-
): Observable<E, number>;
|
|
1562
|
-
export function findIndexWithIndex<E, A>(
|
|
1563
|
-
fa: Observable<E, A>,
|
|
1586
|
+
): Observable<R, E, number>;
|
|
1587
|
+
export function findIndexWithIndex<R, E, A>(
|
|
1588
|
+
fa: Observable<R, E, A>,
|
|
1564
1589
|
predicate: PredicateWithIndex<number, A>,
|
|
1565
|
-
): Observable<E, number>;
|
|
1566
|
-
export function findIndexWithIndex<E, A>(
|
|
1567
|
-
fa: Observable<E, A>,
|
|
1590
|
+
): Observable<R, E, number>;
|
|
1591
|
+
export function findIndexWithIndex<R, E, A>(
|
|
1592
|
+
fa: Observable<R, E, A>,
|
|
1568
1593
|
predicate: PredicateWithIndex<number, A>,
|
|
1569
|
-
): Observable<E, number> {
|
|
1594
|
+
): Observable<R, E, number> {
|
|
1570
1595
|
return fa.operate(findInternal(predicate, "index"));
|
|
1571
1596
|
}
|
|
1572
1597
|
|
|
1573
1598
|
/**
|
|
1574
1599
|
* @tsplus fluent fncts.observable.Observable findIndex
|
|
1575
1600
|
*/
|
|
1576
|
-
export function findIndex_<E, A, B extends A>(
|
|
1577
|
-
fa: Observable<E, A>,
|
|
1601
|
+
export function findIndex_<R, E, A, B extends A>(
|
|
1602
|
+
fa: Observable<R, E, A>,
|
|
1578
1603
|
refinement: Refinement<A, B>,
|
|
1579
|
-
): Observable<E, number>;
|
|
1580
|
-
export function findIndex_<E, A>(fa: Observable<E, A>, predicate: Predicate<A>): Observable<E, number>;
|
|
1581
|
-
export function findIndex_<E, A>(fa: Observable<E, A>, predicate: Predicate<A>): Observable<E, number> {
|
|
1604
|
+
): Observable<R, E, number>;
|
|
1605
|
+
export function findIndex_<R, E, A>(fa: Observable<R, E, A>, predicate: Predicate<A>): Observable<R, E, number>;
|
|
1606
|
+
export function findIndex_<R, E, A>(fa: Observable<R, E, A>, predicate: Predicate<A>): Observable<R, E, number> {
|
|
1582
1607
|
return findIndexWithIndex(fa, (_, a) => predicate(a));
|
|
1583
1608
|
}
|
|
1584
1609
|
|
|
@@ -1587,11 +1612,19 @@ export function findIndex_<E, A>(fa: Observable<E, A>, predicate: Predicate<A>):
|
|
|
1587
1612
|
*/
|
|
1588
1613
|
export function forkJoin<S extends Record<string, ObservableInput<any, any>>>(
|
|
1589
1614
|
sources: S,
|
|
1590
|
-
): Observable<
|
|
1615
|
+
): Observable<
|
|
1616
|
+
Observable.EnvironmentOf<S[keyof S]>,
|
|
1617
|
+
Observable.ErrorOf<S[keyof S]>,
|
|
1618
|
+
{ [K in keyof S]: Observable.TypeOf<S[K]> }
|
|
1619
|
+
>;
|
|
1591
1620
|
export function forkJoin<A extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
1592
1621
|
...sources: A
|
|
1593
|
-
): Observable<
|
|
1594
|
-
|
|
1622
|
+
): Observable<
|
|
1623
|
+
Observable.EnvironmentOf<A[number]>,
|
|
1624
|
+
Observable.ErrorOf<A[number]>,
|
|
1625
|
+
{ [K in keyof A]: Observable.TypeOf<A[K]> }
|
|
1626
|
+
>;
|
|
1627
|
+
export function forkJoin(...args: any[]): Observable<any, any, any> {
|
|
1595
1628
|
const { args: sources, keys } = arrayOrObject(args);
|
|
1596
1629
|
return new Observable((s) => {
|
|
1597
1630
|
const length = sources.length;
|
|
@@ -1637,7 +1670,7 @@ export function forkJoin(...args: any[]): Observable<any, any> {
|
|
|
1637
1670
|
/**
|
|
1638
1671
|
* @tsplus getter fncts.observable.Observable ignore
|
|
1639
1672
|
*/
|
|
1640
|
-
export function ignore<E, A>(fa: Observable<E, A>): Observable<E, never> {
|
|
1673
|
+
export function ignore<R, E, A>(fa: Observable<R, E, A>): Observable<R, E, never> {
|
|
1641
1674
|
return fa.operate((source, subscriber) => {
|
|
1642
1675
|
source.subscribe(
|
|
1643
1676
|
operatorSubscriber(subscriber, {
|
|
@@ -1650,7 +1683,7 @@ export function ignore<E, A>(fa: Observable<E, A>): Observable<E, never> {
|
|
|
1650
1683
|
/**
|
|
1651
1684
|
* @tsplus getter fncts.observable.Observable isEmpty
|
|
1652
1685
|
*/
|
|
1653
|
-
export function isEmpty<E, A>(fa: Observable<E, A>): Observable<E, boolean> {
|
|
1686
|
+
export function isEmpty<R, E, A>(fa: Observable<R, E, A>): Observable<R, E, boolean> {
|
|
1654
1687
|
return fa.operate((source, subscriber) => {
|
|
1655
1688
|
source.subscribe(
|
|
1656
1689
|
operatorSubscriber(subscriber, {
|
|
@@ -1670,7 +1703,7 @@ export function isEmpty<E, A>(fa: Observable<E, A>): Observable<E, boolean> {
|
|
|
1670
1703
|
/**
|
|
1671
1704
|
* @tsplus getter fncts.observable.Observable materialize
|
|
1672
1705
|
*/
|
|
1673
|
-
export function materialize<E, A>(fa: Observable<E, A>): Observable<never, Notification<E, A>> {
|
|
1706
|
+
export function materialize<R, E, A>(fa: Observable<R, E, A>): Observable<R, never, Notification<E, A>> {
|
|
1674
1707
|
return fa.operate((source, subscriber) => {
|
|
1675
1708
|
source.subscribe(
|
|
1676
1709
|
operatorSubscriber(subscriber, {
|
|
@@ -1691,22 +1724,22 @@ export function materialize<E, A>(fa: Observable<E, A>): Observable<never, Notif
|
|
|
1691
1724
|
/**
|
|
1692
1725
|
* @tsplus fluent fncts.observable.Observable mergeAll
|
|
1693
1726
|
*/
|
|
1694
|
-
export function mergeAll_<E, E1, A>(
|
|
1695
|
-
self: Observable<E, ObservableInput<E1, A>>,
|
|
1727
|
+
export function mergeAll_<R, E, R1, E1, A>(
|
|
1728
|
+
self: Observable<R, E, ObservableInput<R1, E1, A>>,
|
|
1696
1729
|
concurrent = Infinity,
|
|
1697
|
-
): Observable<E | E1, A> {
|
|
1730
|
+
): Observable<R | R1, E | E1, A> {
|
|
1698
1731
|
return self.mergeMap(Function.identity, concurrent);
|
|
1699
1732
|
}
|
|
1700
1733
|
|
|
1701
1734
|
/**
|
|
1702
1735
|
* @tsplus fluent fncts.observable.Observable mergeScanWithIndex
|
|
1703
1736
|
*/
|
|
1704
|
-
export function mergeScanWithIndex<E, A, E1, B>(
|
|
1705
|
-
fa: Observable<E, A>,
|
|
1737
|
+
export function mergeScanWithIndex<R, E, A, R1, E1, B>(
|
|
1738
|
+
fa: Observable<R, E, A>,
|
|
1706
1739
|
initial: B,
|
|
1707
|
-
f: (index: number, acc: B, value: A) => ObservableInput<E1, B>,
|
|
1740
|
+
f: (index: number, acc: B, value: A) => ObservableInput<R1, E1, B>,
|
|
1708
1741
|
concurrent = Infinity,
|
|
1709
|
-
): Observable<E | E1, B> {
|
|
1742
|
+
): Observable<R | R1, E | E1, B> {
|
|
1710
1743
|
return fa.operate((source, subscriber) => {
|
|
1711
1744
|
let state = initial;
|
|
1712
1745
|
return mergeInternal(
|
|
@@ -1727,25 +1760,33 @@ export function mergeScanWithIndex<E, A, E1, B>(
|
|
|
1727
1760
|
/**
|
|
1728
1761
|
* @tsplus fluent fncts.observable.Observable mergeScan
|
|
1729
1762
|
*/
|
|
1730
|
-
export function mergeScan_<E, A, E1, B>(
|
|
1731
|
-
fa: Observable<E, A>,
|
|
1763
|
+
export function mergeScan_<R, E, A, R1, E1, B>(
|
|
1764
|
+
fa: Observable<R, E, A>,
|
|
1732
1765
|
initial: B,
|
|
1733
|
-
f: (acc: B, value: A) => ObservableInput<E1, B>,
|
|
1766
|
+
f: (acc: B, value: A) => ObservableInput<R1, E1, B>,
|
|
1734
1767
|
concurrent = Infinity,
|
|
1735
|
-
): Observable<E | E1, B> {
|
|
1768
|
+
): Observable<R | R1, E | E1, B> {
|
|
1736
1769
|
return fa.mergeScanWithIndex(initial, (_, b, a) => f(b, a), concurrent);
|
|
1737
1770
|
}
|
|
1738
1771
|
|
|
1739
|
-
export function onErrorResumeNext<E, A, O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
1740
|
-
fa: Observable<E, A>,
|
|
1772
|
+
export function onErrorResumeNext<R, E, A, O extends ReadonlyArray<ObservableInput<any, any>>>(
|
|
1773
|
+
fa: Observable<R, E, A>,
|
|
1741
1774
|
...sources: O
|
|
1742
|
-
): Observable<
|
|
1775
|
+
): Observable<
|
|
1776
|
+
R | Observable.EnvironmentOf<O[number]>,
|
|
1777
|
+
E | Observable.ErrorOf<O[number]>,
|
|
1778
|
+
A | Observable.TypeOf<O[number]>
|
|
1779
|
+
> {
|
|
1743
1780
|
return fa.operate((source, subscriber) => {
|
|
1744
1781
|
const remaining = [source, ...sources];
|
|
1745
1782
|
const subscribeNext = () => {
|
|
1746
1783
|
if (!subscriber.closed) {
|
|
1747
1784
|
if (remaining.length > 0) {
|
|
1748
|
-
let nextSource: Observable<
|
|
1785
|
+
let nextSource: Observable<
|
|
1786
|
+
R | Observable.EnvironmentOf<O[number]>,
|
|
1787
|
+
E | Observable.ErrorOf<O[number]>,
|
|
1788
|
+
A | Observable.TypeOf<O[number]>
|
|
1789
|
+
>;
|
|
1749
1790
|
try {
|
|
1750
1791
|
nextSource = from(remaining.shift()!);
|
|
1751
1792
|
} catch (err) {
|
|
@@ -1767,7 +1808,7 @@ export function onErrorResumeNext<E, A, O extends ReadonlyArray<ObservableInput<
|
|
|
1767
1808
|
/**
|
|
1768
1809
|
* @tsplus fluent fncts.observable.Observable onEmpty
|
|
1769
1810
|
*/
|
|
1770
|
-
export function onEmpty_<E, A, B>(fa: Observable<E, A>, f: Lazy<B>): Observable<E, A | B> {
|
|
1811
|
+
export function onEmpty_<R, E, A, B>(fa: Observable<R, E, A>, f: Lazy<B>): Observable<R, E, A | B> {
|
|
1771
1812
|
return fa.operate((source, subscriber) => {
|
|
1772
1813
|
let hasValue = false;
|
|
1773
1814
|
source.subscribe(
|
|
@@ -1790,7 +1831,7 @@ export function onEmpty_<E, A, B>(fa: Observable<E, A>, f: Lazy<B>): Observable<
|
|
|
1790
1831
|
/**
|
|
1791
1832
|
* @tsplus fluent fncts.observable.Observable repeat
|
|
1792
1833
|
*/
|
|
1793
|
-
export function repeat_<E, A>(fa: Observable<E, A>, count = Infinity): Observable<E, A> {
|
|
1834
|
+
export function repeat_<R, E, A>(fa: Observable<R, E, A>, count = Infinity): Observable<R, E, A> {
|
|
1794
1835
|
return count <= 0
|
|
1795
1836
|
? empty()
|
|
1796
1837
|
: fa.operate((source, subscriber) => {
|
|
@@ -1834,9 +1875,12 @@ export interface RetryConfig {
|
|
|
1834
1875
|
/**
|
|
1835
1876
|
* @tsplus fluent fncts.observable.Observable retry
|
|
1836
1877
|
*/
|
|
1837
|
-
export function retry_<E, A>(fa: Observable<E, A>, count?: number): Observable<E, A>;
|
|
1838
|
-
export function retry_<E, A>(fa: Observable<E, A>, config: RetryConfig): Observable<E, A>;
|
|
1839
|
-
export function retry_<
|
|
1878
|
+
export function retry_<R, E, A>(fa: Observable<R, E, A>, count?: number): Observable<R, E, A>;
|
|
1879
|
+
export function retry_<R, E, A>(fa: Observable<R, E, A>, config: RetryConfig): Observable<R, E, A>;
|
|
1880
|
+
export function retry_<R, E, A>(
|
|
1881
|
+
fa: Observable<R, E, A>,
|
|
1882
|
+
configOrCount: number | RetryConfig = Infinity,
|
|
1883
|
+
): Observable<R, E, A> {
|
|
1840
1884
|
let config: RetryConfig;
|
|
1841
1885
|
if (configOrCount && typeof configOrCount === "object") {
|
|
1842
1886
|
config = configOrCount;
|
|
@@ -1891,7 +1935,10 @@ export function retry_<E, A>(fa: Observable<E, A>, configOrCount: number | Retry
|
|
|
1891
1935
|
/**
|
|
1892
1936
|
* @tsplus fluent fncts.observable.Observable sample
|
|
1893
1937
|
*/
|
|
1894
|
-
export function sample_<
|
|
1938
|
+
export function sample_<R, E, A, R1, E1>(
|
|
1939
|
+
fa: Observable<R, E, A>,
|
|
1940
|
+
notifier: Observable<R1, E1, any>,
|
|
1941
|
+
): Observable<R | R1, E | E1, A> {
|
|
1895
1942
|
return fa.operate((source, subscriber) => {
|
|
1896
1943
|
let hasValue = false;
|
|
1897
1944
|
let lastValue: A | null = null;
|
|
@@ -1918,43 +1965,71 @@ export function sample_<E, A, E1>(fa: Observable<E, A>, notifier: Observable<E1,
|
|
|
1918
1965
|
/**
|
|
1919
1966
|
* @tsplus fluent fncts.observable.Observable sampleTime
|
|
1920
1967
|
*/
|
|
1921
|
-
export function sampleTime_<E, A>(
|
|
1922
|
-
fa: Observable<E, A>,
|
|
1968
|
+
export function sampleTime_<R, E, A>(
|
|
1969
|
+
fa: Observable<R, E, A>,
|
|
1923
1970
|
period: number,
|
|
1924
1971
|
scheduler: SchedulerLike = asyncScheduler,
|
|
1925
|
-
): Observable<E, A> {
|
|
1972
|
+
): Observable<R, E, A> {
|
|
1926
1973
|
return sample_(fa, interval(period, scheduler));
|
|
1927
1974
|
}
|
|
1928
1975
|
|
|
1929
1976
|
/**
|
|
1930
1977
|
* @tsplus fluent fncts.observable.Observable scanLeftWithIndex
|
|
1931
1978
|
*/
|
|
1932
|
-
export function scanLeftWithIndex<E, A, B>(
|
|
1933
|
-
fa: Observable<E, A>,
|
|
1979
|
+
export function scanLeftWithIndex<R, E, A, B>(
|
|
1980
|
+
fa: Observable<R, E, A>,
|
|
1934
1981
|
initial: B,
|
|
1935
1982
|
f: (index: number, acc: B, value: A) => B,
|
|
1936
|
-
): Observable<E, B> {
|
|
1983
|
+
): Observable<R, E, B> {
|
|
1937
1984
|
return fa.operate(scanInternal(f, initial, true, true));
|
|
1938
1985
|
}
|
|
1939
1986
|
|
|
1940
1987
|
/**
|
|
1941
1988
|
* @tsplus fluent fncts.observable.Observable scanLeft
|
|
1942
1989
|
*/
|
|
1943
|
-
export function scanLeft<
|
|
1990
|
+
export function scanLeft<R, E, A, B>(
|
|
1991
|
+
fa: Observable<R, E, A>,
|
|
1992
|
+
initial: B,
|
|
1993
|
+
f: (acc: B, value: A) => B,
|
|
1994
|
+
): Observable<R, E, B> {
|
|
1944
1995
|
return fa.scanLeftWithIndex(initial, (_, b, a) => f(b, a));
|
|
1945
1996
|
}
|
|
1946
1997
|
|
|
1998
|
+
/**
|
|
1999
|
+
* @tsplus static fncts.observable.ObservableOps service
|
|
2000
|
+
*/
|
|
2001
|
+
export function service<S>(/** @tsplus auto */ tag: Tag<S>): Observable<S, never, S> {
|
|
2002
|
+
return Observable.serviceWithObservable((service) => Observable.of(service), tag);
|
|
2003
|
+
}
|
|
2004
|
+
|
|
2005
|
+
/**
|
|
2006
|
+
* @tsplus static fncts.observable.ObservableOps serviceWith
|
|
2007
|
+
*/
|
|
2008
|
+
export function serviceWith<S, A>(f: (service: S) => A, /** @tsplus auto */ tag: Tag<S>): Observable<S, never, A> {
|
|
2009
|
+
return Observable.serviceWithObservable((service) => Observable.of(f(service)), tag);
|
|
2010
|
+
}
|
|
2011
|
+
|
|
2012
|
+
/**
|
|
2013
|
+
* @tsplus static fncts.observable.ObservableOps serviceWithObservable
|
|
2014
|
+
*/
|
|
2015
|
+
export function serviceWithObservable<S, R, E, A>(
|
|
2016
|
+
f: (service: S) => Observable<R, E, A>,
|
|
2017
|
+
/** @tsplus auto */ tag: Tag<S>,
|
|
2018
|
+
): Observable<S | R, E, A> {
|
|
2019
|
+
return Observable.environmentWithObservable((environment) => f(environment.unsafeGet(tag)));
|
|
2020
|
+
}
|
|
2021
|
+
|
|
1947
2022
|
/**
|
|
1948
2023
|
* @tsplus fluent fncts.observable.Observable skip
|
|
1949
2024
|
*/
|
|
1950
|
-
export function skip_<E, A>(fa: Observable<E, A>, count: number): Observable<E, A> {
|
|
2025
|
+
export function skip_<R, E, A>(fa: Observable<R, E, A>, count: number): Observable<R, E, A> {
|
|
1951
2026
|
return fa.filterWithIndex((index, _) => count <= index);
|
|
1952
2027
|
}
|
|
1953
2028
|
|
|
1954
2029
|
/**
|
|
1955
2030
|
* @tsplus fluent fncts.observable.Observable skipLast
|
|
1956
2031
|
*/
|
|
1957
|
-
export function skipLast_<E, A>(fa: Observable<E, A>, skipCount: number): Observable<E, A> {
|
|
2032
|
+
export function skipLast_<R, E, A>(fa: Observable<R, E, A>, skipCount: number): Observable<R, E, A> {
|
|
1958
2033
|
return skipCount <= 0
|
|
1959
2034
|
? fa
|
|
1960
2035
|
: fa.operate((source, subscriber) => {
|
|
@@ -1985,7 +2060,10 @@ export function skipLast_<E, A>(fa: Observable<E, A>, skipCount: number): Observ
|
|
|
1985
2060
|
/**
|
|
1986
2061
|
* @tsplus fluent fncts.observable.Observable skipUntil
|
|
1987
2062
|
*/
|
|
1988
|
-
export function skipUntil_<
|
|
2063
|
+
export function skipUntil_<R, E, A, R1, E1>(
|
|
2064
|
+
fa: Observable<R, E, A>,
|
|
2065
|
+
notifier: Observable<R1, E1, any>,
|
|
2066
|
+
): Observable<R | R1, E | E1, A> {
|
|
1989
2067
|
return fa.operate((source, subscriber) => {
|
|
1990
2068
|
let taking = false;
|
|
1991
2069
|
const skipSubscriber = operatorSubscriber(subscriber, {
|
|
@@ -2009,7 +2087,10 @@ export function skipUntil_<E, A, E1>(fa: Observable<E, A>, notifier: Observable<
|
|
|
2009
2087
|
/**
|
|
2010
2088
|
* @tsplus fluent fncts.observable.Observable skipWhile
|
|
2011
2089
|
*/
|
|
2012
|
-
export function skipWhile_<
|
|
2090
|
+
export function skipWhile_<R, E, A>(
|
|
2091
|
+
fa: Observable<R, E, A>,
|
|
2092
|
+
predicate: PredicateWithIndex<number, A>,
|
|
2093
|
+
): Observable<R, E, A> {
|
|
2013
2094
|
return fa.operate((source, subscriber) => {
|
|
2014
2095
|
let taking = false;
|
|
2015
2096
|
let index = 0;
|
|
@@ -2024,11 +2105,11 @@ export function skipWhile_<E, A>(fa: Observable<E, A>, predicate: PredicateWithI
|
|
|
2024
2105
|
/**
|
|
2025
2106
|
* @tsplus fluent fncts.observable.Observable startWith
|
|
2026
2107
|
*/
|
|
2027
|
-
export function startWith_<E, A, B extends ReadonlyArray<unknown>>(
|
|
2028
|
-
fa: Observable<E, A>,
|
|
2108
|
+
export function startWith_<R, E, A, B extends ReadonlyArray<unknown>>(
|
|
2109
|
+
fa: Observable<R, E, A>,
|
|
2029
2110
|
...values: B
|
|
2030
|
-
): Observable<E, A | B[number]> {
|
|
2031
|
-
return
|
|
2111
|
+
): Observable<R, E, A | B[number]> {
|
|
2112
|
+
return fa.operate((source, subscriber) => {
|
|
2032
2113
|
// @ts-expect-error
|
|
2033
2114
|
source.concat(values).subscribe(subscriber);
|
|
2034
2115
|
});
|
|
@@ -2037,7 +2118,11 @@ export function startWith_<E, A, B extends ReadonlyArray<unknown>>(
|
|
|
2037
2118
|
/**
|
|
2038
2119
|
* @tsplus fluent fncts.observable.Observable subscribeOn
|
|
2039
2120
|
*/
|
|
2040
|
-
export function subscribeOn_<
|
|
2121
|
+
export function subscribeOn_<R, E, A>(
|
|
2122
|
+
fa: Observable<R, E, A>,
|
|
2123
|
+
scheduler: SchedulerLike,
|
|
2124
|
+
delay = 0,
|
|
2125
|
+
): Observable<R, E, A> {
|
|
2041
2126
|
return fa.operate((source, subscriber) => {
|
|
2042
2127
|
subscriber.add(scheduler.schedule(() => source.subscribe(subscriber), delay));
|
|
2043
2128
|
});
|
|
@@ -2046,17 +2131,19 @@ export function subscribeOn_<E, A>(fa: Observable<E, A>, scheduler: SchedulerLik
|
|
|
2046
2131
|
/**
|
|
2047
2132
|
* @tsplus getter fncts.observable.Observable switchAll
|
|
2048
2133
|
*/
|
|
2049
|
-
export function switchAll<
|
|
2134
|
+
export function switchAll<R, E, R1, E1, A>(
|
|
2135
|
+
ffa: Observable<R, E, ObservableInput<R1, E1, A>>,
|
|
2136
|
+
): Observable<R | R1, E | E1, A> {
|
|
2050
2137
|
return switchMap_(ffa, Function.identity);
|
|
2051
2138
|
}
|
|
2052
2139
|
|
|
2053
2140
|
/**
|
|
2054
2141
|
* @tsplus fluent fncts.observable.Observable switchMapWithIndex
|
|
2055
2142
|
*/
|
|
2056
|
-
export function switchMapWithIndex<E, A, E1, B>(
|
|
2057
|
-
fa: Observable<E, A>,
|
|
2058
|
-
f: (index: number, value: A) => ObservableInput<E1, B>,
|
|
2059
|
-
): Observable<E | E1, B> {
|
|
2143
|
+
export function switchMapWithIndex<R, E, A, R1, E1, B>(
|
|
2144
|
+
fa: Observable<R, E, A>,
|
|
2145
|
+
f: (index: number, value: A) => ObservableInput<R1, E1, B>,
|
|
2146
|
+
): Observable<R | R1, E | E1, B> {
|
|
2060
2147
|
return operate_(fa, (source, subscriber) => {
|
|
2061
2148
|
let innerSubscriber: Subscriber<E | E1, B> | null = null;
|
|
2062
2149
|
let index = 0;
|
|
@@ -2094,21 +2181,21 @@ export function switchMapWithIndex<E, A, E1, B>(
|
|
|
2094
2181
|
/**
|
|
2095
2182
|
* @tsplus fluent fncts.observable.Observable switchMap
|
|
2096
2183
|
*/
|
|
2097
|
-
export function switchMap_<E, A, E1, B>(
|
|
2098
|
-
fa: Observable<E, A>,
|
|
2099
|
-
f: (value: A) => ObservableInput<E1, B>,
|
|
2100
|
-
): Observable<E | E1, B> {
|
|
2184
|
+
export function switchMap_<R, E, A, R1, E1, B>(
|
|
2185
|
+
fa: Observable<R, E, A>,
|
|
2186
|
+
f: (value: A) => ObservableInput<R1, E1, B>,
|
|
2187
|
+
): Observable<R | R1, E | E1, B> {
|
|
2101
2188
|
return fa.switchMapWithIndex((_, a) => f(a));
|
|
2102
2189
|
}
|
|
2103
2190
|
|
|
2104
2191
|
/**
|
|
2105
2192
|
* @tsplus fluent fncts.observable.Observable switchScanWithIndex
|
|
2106
2193
|
*/
|
|
2107
|
-
export function switchScanWithIndex<E, A, E1, B>(
|
|
2108
|
-
fa: Observable<E, A>,
|
|
2194
|
+
export function switchScanWithIndex<R, E, A, R1, E1, B>(
|
|
2195
|
+
fa: Observable<R, E, A>,
|
|
2109
2196
|
initial: B,
|
|
2110
|
-
f: (index: number, acc: B, value: A) => ObservableInput<E1, B>,
|
|
2111
|
-
): Observable<E | E1, B> {
|
|
2197
|
+
f: (index: number, acc: B, value: A) => ObservableInput<R1, E1, B>,
|
|
2198
|
+
): Observable<R | R1, E | E1, B> {
|
|
2112
2199
|
return operate_(fa, (source, subscriber) => {
|
|
2113
2200
|
let state = initial;
|
|
2114
2201
|
switchMapWithIndex(source, (index, value) => from(f(index, state, value)).map((b) => ((state = b), b))).subscribe(
|
|
@@ -2123,18 +2210,18 @@ export function switchScanWithIndex<E, A, E1, B>(
|
|
|
2123
2210
|
/**
|
|
2124
2211
|
* @tsplus fluent fncts.observable.Observable switchScan
|
|
2125
2212
|
*/
|
|
2126
|
-
export function switchScan_<E, A, E1, B>(
|
|
2127
|
-
fa: Observable<E, A>,
|
|
2213
|
+
export function switchScan_<R, E, A, R1, E1, B>(
|
|
2214
|
+
fa: Observable<R, E, A>,
|
|
2128
2215
|
initial: B,
|
|
2129
|
-
f: (acc: B, value: A) => ObservableInput<E1, B>,
|
|
2130
|
-
): Observable<E | E1, B> {
|
|
2216
|
+
f: (acc: B, value: A) => ObservableInput<R1, E1, B>,
|
|
2217
|
+
): Observable<R | R1, E | E1, B> {
|
|
2131
2218
|
return fa.switchScanWithIndex(initial, (_, b, a) => f(b, a));
|
|
2132
2219
|
}
|
|
2133
2220
|
|
|
2134
2221
|
/**
|
|
2135
2222
|
* @tsplus fluent fncts.observable.Observable take
|
|
2136
2223
|
*/
|
|
2137
|
-
export function take_<E, A>(fa: Observable<E, A>, count: number): Observable<E, A> {
|
|
2224
|
+
export function take_<R, E, A>(fa: Observable<R, E, A>, count: number): Observable<R, E, A> {
|
|
2138
2225
|
return count <= 0
|
|
2139
2226
|
? empty()
|
|
2140
2227
|
: fa.operate((source, sub) => {
|
|
@@ -2157,7 +2244,7 @@ export function take_<E, A>(fa: Observable<E, A>, count: number): Observable<E,
|
|
|
2157
2244
|
/**
|
|
2158
2245
|
* @tsplus fluent fncts.observable.Observable takeLast
|
|
2159
2246
|
*/
|
|
2160
|
-
export function takeLast_<E, A>(fa: Observable<E, A>, count: number): Observable<E, A> {
|
|
2247
|
+
export function takeLast_<R, E, A>(fa: Observable<R, E, A>, count: number): Observable<R, E, A> {
|
|
2161
2248
|
return count <= 0
|
|
2162
2249
|
? empty()
|
|
2163
2250
|
: fa.operate((source, subscriber) => {
|
|
@@ -2188,7 +2275,10 @@ export function takeLast_<E, A>(fa: Observable<E, A>, count: number): Observable
|
|
|
2188
2275
|
/**
|
|
2189
2276
|
* @tsplus fluent fncts.observable.Observable takeUntil
|
|
2190
2277
|
*/
|
|
2191
|
-
export function takeUntil_<
|
|
2278
|
+
export function takeUntil_<R, E, A, R1, E1>(
|
|
2279
|
+
fa: Observable<R, E, A>,
|
|
2280
|
+
notifier: ObservableInput<R1, E1, any>,
|
|
2281
|
+
): Observable<R | R1, E | E1, A> {
|
|
2192
2282
|
return fa.operate((source, subscriber) => {
|
|
2193
2283
|
from(notifier).subscribe(operatorSubscriber(subscriber, { next: () => subscriber.complete(), complete: noop }));
|
|
2194
2284
|
!subscriber.closed && source.subscribe(subscriber);
|
|
@@ -2198,21 +2288,21 @@ export function takeUntil_<E, A, E1>(fa: Observable<E, A>, notifier: ObservableI
|
|
|
2198
2288
|
/**
|
|
2199
2289
|
* @tsplus fluent fncts.observable.Observable takeWhileWithIndex
|
|
2200
2290
|
*/
|
|
2201
|
-
export function takeWhileWithIndex<E, A, B extends A>(
|
|
2202
|
-
fa: Observable<E, A>,
|
|
2291
|
+
export function takeWhileWithIndex<R, E, A, B extends A>(
|
|
2292
|
+
fa: Observable<R, E, A>,
|
|
2203
2293
|
refinement: RefinementWithIndex<number, A, B>,
|
|
2204
2294
|
inclusive?: boolean,
|
|
2205
|
-
): Observable<E, B>;
|
|
2206
|
-
export function takeWhileWithIndex<E, A>(
|
|
2207
|
-
fa: Observable<E, A>,
|
|
2295
|
+
): Observable<R, E, B>;
|
|
2296
|
+
export function takeWhileWithIndex<R, E, A>(
|
|
2297
|
+
fa: Observable<R, E, A>,
|
|
2208
2298
|
predicate: PredicateWithIndex<number, A>,
|
|
2209
2299
|
inclusive?: boolean,
|
|
2210
|
-
): Observable<E, A>;
|
|
2211
|
-
export function takeWhileWithIndex<E, A>(
|
|
2212
|
-
fa: Observable<E, A>,
|
|
2300
|
+
): Observable<R, E, A>;
|
|
2301
|
+
export function takeWhileWithIndex<R, E, A>(
|
|
2302
|
+
fa: Observable<R, E, A>,
|
|
2213
2303
|
predicate: PredicateWithIndex<number, A>,
|
|
2214
2304
|
inclusive?: boolean,
|
|
2215
|
-
): Observable<E, A> {
|
|
2305
|
+
): Observable<R, E, A> {
|
|
2216
2306
|
return fa.operate((source, subscriber) => {
|
|
2217
2307
|
let index = 0;
|
|
2218
2308
|
source.subscribe(
|
|
@@ -2230,20 +2320,28 @@ export function takeWhileWithIndex<E, A>(
|
|
|
2230
2320
|
/**
|
|
2231
2321
|
* @tsplus fluent fncts.observable.Observable takeWhile
|
|
2232
2322
|
*/
|
|
2233
|
-
export function takeWhile_<E, A, B extends A>(
|
|
2234
|
-
fa: Observable<E, A>,
|
|
2323
|
+
export function takeWhile_<R, E, A, B extends A>(
|
|
2324
|
+
fa: Observable<R, E, A>,
|
|
2235
2325
|
refinement: Refinement<A, B>,
|
|
2236
2326
|
inclusive?: boolean,
|
|
2237
|
-
): Observable<E, B>;
|
|
2238
|
-
export function takeWhile_<E, A>(
|
|
2239
|
-
|
|
2327
|
+
): Observable<R, E, B>;
|
|
2328
|
+
export function takeWhile_<R, E, A>(
|
|
2329
|
+
fa: Observable<R, E, A>,
|
|
2330
|
+
predicate: Predicate<A>,
|
|
2331
|
+
inclusive?: boolean,
|
|
2332
|
+
): Observable<R, E, A>;
|
|
2333
|
+
export function takeWhile_<R, E, A>(
|
|
2334
|
+
fa: Observable<R, E, A>,
|
|
2335
|
+
predicate: Predicate<A>,
|
|
2336
|
+
inclusive?: boolean,
|
|
2337
|
+
): Observable<R, E, A> {
|
|
2240
2338
|
return fa.takeWhileWithIndex((_, a) => predicate(a), inclusive);
|
|
2241
2339
|
}
|
|
2242
2340
|
|
|
2243
2341
|
/**
|
|
2244
2342
|
* @tsplus fluent fncts.observable.Observable tap
|
|
2245
2343
|
*/
|
|
2246
|
-
export function tap_<E, A>(fa: Observable<E, A>, observer: Partial<Observer<E, A>>): Observable<E, A> {
|
|
2344
|
+
export function tap_<R, E, A>(fa: Observable<R, E, A>, observer: Partial<Observer<E, A>>): Observable<R, E, A> {
|
|
2247
2345
|
return fa.operate((source, subscriber) => {
|
|
2248
2346
|
source.subscribe(
|
|
2249
2347
|
operatorSubscriber(subscriber, {
|
|
@@ -2277,11 +2375,11 @@ export const defaultThrottleConfig: ThrottleConfig = {
|
|
|
2277
2375
|
/**
|
|
2278
2376
|
* @tsplus fluent fncts.observable.Observable throttle
|
|
2279
2377
|
*/
|
|
2280
|
-
export function throttle_<E, A, E1>(
|
|
2281
|
-
fa: Observable<E, A>,
|
|
2282
|
-
durationSelector: (a: A) => ObservableInput<E1, any>,
|
|
2378
|
+
export function throttle_<R, E, A, R1, E1>(
|
|
2379
|
+
fa: Observable<R, E, A>,
|
|
2380
|
+
durationSelector: (a: A) => ObservableInput<R1, E1, any>,
|
|
2283
2381
|
{ leading, trailing }: ThrottleConfig = defaultThrottleConfig,
|
|
2284
|
-
): Observable<E | E1, A> {
|
|
2382
|
+
): Observable<R | R1, E | E1, A> {
|
|
2285
2383
|
return fa.operate((source, subscriber) => {
|
|
2286
2384
|
let sendValue: Maybe<A> = Nothing();
|
|
2287
2385
|
let throttled: Subscription | null = null;
|
|
@@ -2333,22 +2431,22 @@ export function throttle_<E, A, E1>(
|
|
|
2333
2431
|
/**
|
|
2334
2432
|
* @tsplus fluent fncts.observable.Observable throttleTime
|
|
2335
2433
|
*/
|
|
2336
|
-
export function throttleTime_<E, A>(
|
|
2337
|
-
fa: Observable<E, A>,
|
|
2434
|
+
export function throttleTime_<R, E, A>(
|
|
2435
|
+
fa: Observable<R, E, A>,
|
|
2338
2436
|
duration: number,
|
|
2339
2437
|
scheduler: SchedulerLike = asyncScheduler,
|
|
2340
2438
|
config = defaultThrottleConfig,
|
|
2341
|
-
): Observable<E, A> {
|
|
2439
|
+
): Observable<R, E, A> {
|
|
2342
2440
|
const duration$ = timer(duration, scheduler);
|
|
2343
2441
|
return throttle_(fa, () => duration$, config);
|
|
2344
2442
|
}
|
|
2345
2443
|
|
|
2346
|
-
export type TimeoutConfig<
|
|
2444
|
+
export type TimeoutConfig<R, E, A, B, M = unknown> = (
|
|
2347
2445
|
| { readonly each: number; readonly first?: number | Date }
|
|
2348
2446
|
| { readonly each?: number; readonly first: number | Date }
|
|
2349
2447
|
) & {
|
|
2350
2448
|
readonly scheduler?: SchedulerLike;
|
|
2351
|
-
readonly with?: (info: TimeoutInfo<A, M>) => ObservableInput<E, B>;
|
|
2449
|
+
readonly with?: (info: TimeoutInfo<A, M>) => ObservableInput<R, E, B>;
|
|
2352
2450
|
meta?: M;
|
|
2353
2451
|
};
|
|
2354
2452
|
|
|
@@ -2368,25 +2466,25 @@ export class TimeoutError<A, M> extends Error {
|
|
|
2368
2466
|
/**
|
|
2369
2467
|
* @tsplus fluent fncts.observable.Observable timeout
|
|
2370
2468
|
*/
|
|
2371
|
-
export function timeout_<E, A, E1, B, M = unknown>(
|
|
2372
|
-
fa: Observable<E, A>,
|
|
2373
|
-
config: TimeoutConfig<
|
|
2374
|
-
): Observable<E | E1, A | B>;
|
|
2375
|
-
export function timeout_<E, A, M = unknown>(
|
|
2376
|
-
fa: Observable<E, A>,
|
|
2377
|
-
config: Omit<TimeoutConfig<
|
|
2378
|
-
): Observable<E | TimeoutError<A, M>, A>;
|
|
2379
|
-
export function timeout_<E, A, E1, B, M = unknown>(
|
|
2380
|
-
fa: Observable<E, A>,
|
|
2469
|
+
export function timeout_<R, E, A, R1, E1, B, M = unknown>(
|
|
2470
|
+
fa: Observable<R, E, A>,
|
|
2471
|
+
config: TimeoutConfig<R1, E1, A, B, M> & { readonly with: (info: TimeoutInfo<A, M>) => ObservableInput<R1, E1, B> },
|
|
2472
|
+
): Observable<R | R1, E | E1, A | B>;
|
|
2473
|
+
export function timeout_<R, E, A, M = unknown>(
|
|
2474
|
+
fa: Observable<R, E, A>,
|
|
2475
|
+
config: Omit<TimeoutConfig<never, never, A, any, M>, "with">,
|
|
2476
|
+
): Observable<R, E | TimeoutError<A, M>, A>;
|
|
2477
|
+
export function timeout_<R, E, A, R1, E1, B, M = unknown>(
|
|
2478
|
+
fa: Observable<R, E, A>,
|
|
2381
2479
|
config: any,
|
|
2382
|
-
): Observable<E | E1 | TimeoutError<A, M>, A | B> {
|
|
2480
|
+
): Observable<R | R1, E | E1 | TimeoutError<A, M>, A | B> {
|
|
2383
2481
|
const {
|
|
2384
2482
|
first,
|
|
2385
2483
|
each,
|
|
2386
2484
|
with: _with = timeoutError,
|
|
2387
2485
|
scheduler = asyncScheduler,
|
|
2388
2486
|
meta = null!,
|
|
2389
|
-
} = config as TimeoutConfig<
|
|
2487
|
+
} = config as TimeoutConfig<R, E1, A, B, M>;
|
|
2390
2488
|
return operate_(fa, (source, subscriber) => {
|
|
2391
2489
|
// eslint-disable-next-line prefer-const
|
|
2392
2490
|
let originalSourceSubscription: Subscription;
|
|
@@ -2399,7 +2497,7 @@ export function timeout_<E, A, E1, B, M = unknown>(
|
|
|
2399
2497
|
scheduler,
|
|
2400
2498
|
() => {
|
|
2401
2499
|
originalSourceSubscription.unsubscribe();
|
|
2402
|
-
from<E1 | TimeoutError<A, M>, B>(
|
|
2500
|
+
from<R | R1, E1 | TimeoutError<A, M>, B>(
|
|
2403
2501
|
_with({
|
|
2404
2502
|
meta,
|
|
2405
2503
|
lastValue,
|
|
@@ -2436,7 +2534,7 @@ export function timeout_<E, A, E1, B, M = unknown>(
|
|
|
2436
2534
|
});
|
|
2437
2535
|
}
|
|
2438
2536
|
|
|
2439
|
-
function timeoutError<A, M>(info: TimeoutInfo<A, M>): Observable<TimeoutError<A, M>, never> {
|
|
2537
|
+
function timeoutError<R, A, M>(info: TimeoutInfo<A, M>): Observable<R, TimeoutError<A, M>, never> {
|
|
2440
2538
|
return fail(new TimeoutError(info));
|
|
2441
2539
|
}
|
|
2442
2540
|
|
|
@@ -2447,7 +2545,7 @@ function toArrayAccumulator(arr: any[], value: any) {
|
|
|
2447
2545
|
/**
|
|
2448
2546
|
* @tsplus getter fncts.observable.Observable toArray
|
|
2449
2547
|
*/
|
|
2450
|
-
export function toArray<E, A>(fa: Observable<E, A>): Observable<E, ReadonlyArray<A>> {
|
|
2548
|
+
export function toArray<R, E, A>(fa: Observable<R, E, A>): Observable<R, E, ReadonlyArray<A>> {
|
|
2451
2549
|
return operate_(fa, (source, subscriber) => {
|
|
2452
2550
|
source.foldLeft([] as A[], toArrayAccumulator).subscribe(subscriber);
|
|
2453
2551
|
});
|
|
@@ -2456,11 +2554,11 @@ export function toArray<E, A>(fa: Observable<E, A>): Observable<E, ReadonlyArray
|
|
|
2456
2554
|
/**
|
|
2457
2555
|
* @tsplus fluent fncts.observable.Observable unique
|
|
2458
2556
|
*/
|
|
2459
|
-
export function unique_<E, A, K, E1 = never>(
|
|
2460
|
-
fa: Observable<E, A>,
|
|
2557
|
+
export function unique_<R, E, A, K, R1, E1 = never>(
|
|
2558
|
+
fa: Observable<R, E, A>,
|
|
2461
2559
|
toKey?: (value: A) => K,
|
|
2462
|
-
flushes?: Observable<E1, any>,
|
|
2463
|
-
): Observable<E | E1, A> {
|
|
2560
|
+
flushes?: Observable<R1, E1, any>,
|
|
2561
|
+
): Observable<R | R1, E | E1, A> {
|
|
2464
2562
|
return operate_(fa, (source, subscriber) => {
|
|
2465
2563
|
let distinctKeys = HashSet.makeDefault<A | K>();
|
|
2466
2564
|
source.subscribe(
|
|
@@ -2483,23 +2581,26 @@ export function unique_<E, A, K, E1 = never>(
|
|
|
2483
2581
|
/**
|
|
2484
2582
|
* @tsplus fluent fncts.observable.Observable uniqueUntilChanged
|
|
2485
2583
|
*/
|
|
2486
|
-
export function uniqueUntilChanged_<E, A, K>(
|
|
2487
|
-
fa: Observable<E, A>,
|
|
2584
|
+
export function uniqueUntilChanged_<R, E, A, K>(
|
|
2585
|
+
fa: Observable<R, E, A>,
|
|
2488
2586
|
E: Eq<K>,
|
|
2489
2587
|
keySelector: (value: A) => K,
|
|
2490
|
-
): Observable<E, A>;
|
|
2491
|
-
export function uniqueUntilChanged_<E, A, K>(
|
|
2492
|
-
fa: Observable<E, A>,
|
|
2588
|
+
): Observable<R, E, A>;
|
|
2589
|
+
export function uniqueUntilChanged_<R, E, A, K>(
|
|
2590
|
+
fa: Observable<R, E, A>,
|
|
2493
2591
|
equals: (x: K, y: K) => boolean,
|
|
2494
2592
|
keySelector: (value: A) => K,
|
|
2495
|
-
): Observable<E, A>;
|
|
2496
|
-
export function uniqueUntilChanged_<E, A>(fa: Observable<E, A>, E: Eq<A>): Observable<E, A>;
|
|
2497
|
-
export function uniqueUntilChanged_<
|
|
2498
|
-
|
|
2499
|
-
|
|
2593
|
+
): Observable<R, E, A>;
|
|
2594
|
+
export function uniqueUntilChanged_<R, E, A>(fa: Observable<R, E, A>, E: Eq<A>): Observable<R, E, A>;
|
|
2595
|
+
export function uniqueUntilChanged_<R, E, A>(
|
|
2596
|
+
fa: Observable<R, E, A>,
|
|
2597
|
+
equals: (x: A, y: A) => boolean,
|
|
2598
|
+
): Observable<R, E, A>;
|
|
2599
|
+
export function uniqueUntilChanged_<R, E, A, K = A>(
|
|
2600
|
+
fa: Observable<R, E, A>,
|
|
2500
2601
|
E: Eq<K> | ((x: K, y: K) => boolean),
|
|
2501
2602
|
keySelector: (value: A) => K = Function.identity as (_: A) => K,
|
|
2502
|
-
): Observable<E, A> {
|
|
2603
|
+
): Observable<R, E, A> {
|
|
2503
2604
|
const compare = "equals" in E ? E.equals : E;
|
|
2504
2605
|
return fa.operate((source, subscriber) => {
|
|
2505
2606
|
let previousKey: K;
|
|
@@ -2522,34 +2623,28 @@ export function uniqueUntilChanged_<E, A, K = A>(
|
|
|
2522
2623
|
/**
|
|
2523
2624
|
* @tsplus fluent fncts.observable.Observable uniqueUntilKeyChanged
|
|
2524
2625
|
*/
|
|
2525
|
-
export function uniqueUntilKeyChanged_<E, A, K extends keyof A>(
|
|
2526
|
-
fa: Observable<E, A>,
|
|
2626
|
+
export function uniqueUntilKeyChanged_<R, E, A, K extends keyof A>(
|
|
2627
|
+
fa: Observable<R, E, A>,
|
|
2527
2628
|
key: K,
|
|
2528
2629
|
E: Eq<A[K]>,
|
|
2529
|
-
): Observable<E, A>;
|
|
2530
|
-
export function uniqueUntilKeyChanged_<E, A, K extends keyof A>(
|
|
2531
|
-
fa: Observable<E, A>,
|
|
2630
|
+
): Observable<R, E, A>;
|
|
2631
|
+
export function uniqueUntilKeyChanged_<R, E, A, K extends keyof A>(
|
|
2632
|
+
fa: Observable<R, E, A>,
|
|
2532
2633
|
key: K,
|
|
2533
2634
|
equals: (x: A[K], y: A[K]) => boolean,
|
|
2534
|
-
): Observable<E, A>;
|
|
2535
|
-
export function uniqueUntilKeyChanged_<E, A, K extends keyof A>(
|
|
2536
|
-
fa: Observable<E, A>,
|
|
2635
|
+
): Observable<R, E, A>;
|
|
2636
|
+
export function uniqueUntilKeyChanged_<R, E, A, K extends keyof A>(
|
|
2637
|
+
fa: Observable<R, E, A>,
|
|
2537
2638
|
key: K,
|
|
2538
2639
|
equals: Eq<A[K]> | ((x: A[K], y: A[K]) => boolean),
|
|
2539
|
-
): Observable<E, A> {
|
|
2640
|
+
): Observable<R, E, A> {
|
|
2540
2641
|
const compare = "equals" in equals ? equals.equals : equals;
|
|
2541
2642
|
return fa.uniqueUntilChanged((x, y) => compare(x[key], y[key]));
|
|
2542
2643
|
}
|
|
2543
2644
|
|
|
2544
|
-
/*
|
|
2545
|
-
* -------------------------------------------------------------------------------------------------
|
|
2546
|
-
* internal
|
|
2547
|
-
* -------------------------------------------------------------------------------------------------
|
|
2548
|
-
*/
|
|
2549
|
-
|
|
2550
2645
|
function combineLatestInternal(
|
|
2551
2646
|
subscriber: Subscriber<any, any>,
|
|
2552
|
-
observables: ObservableInput<any, any>[],
|
|
2647
|
+
observables: ObservableInput<any, any, any>[],
|
|
2553
2648
|
scheduler?: SchedulerLike,
|
|
2554
2649
|
valueTransform: (values: any[]) => any = Function.identity,
|
|
2555
2650
|
) {
|
|
@@ -2589,7 +2684,7 @@ function combineLatestInternal(
|
|
|
2589
2684
|
function findInternal<A>(
|
|
2590
2685
|
predicate: PredicateWithIndex<number, A>,
|
|
2591
2686
|
emit: "value" | "index",
|
|
2592
|
-
): <E>(source: Observable<E, A>, subscriber: Subscriber<E, any>) => void {
|
|
2687
|
+
): <R, E>(source: Observable<R, E, A>, subscriber: Subscriber<E, any>) => void {
|
|
2593
2688
|
const findIndex = emit === "index";
|
|
2594
2689
|
return (source, subscriber) => {
|
|
2595
2690
|
let index = 0;
|
|
@@ -2611,10 +2706,10 @@ function findInternal<A>(
|
|
|
2611
2706
|
};
|
|
2612
2707
|
}
|
|
2613
2708
|
|
|
2614
|
-
export function joinAllInternal<E, E1, A, E2, B>(
|
|
2615
|
-
fa: Observable<E, ObservableInput<E1, A>>,
|
|
2616
|
-
joiner: (sources: ReadonlyArray<ObservableInput<E1, A>>) => Observable<E2, B>,
|
|
2617
|
-
): Observable<E | E1 | E2, B> {
|
|
2709
|
+
export function joinAllInternal<R, E, R1, E1, A, R2, E2, B>(
|
|
2710
|
+
fa: Observable<R, E, ObservableInput<R1, E1, A>>,
|
|
2711
|
+
joiner: (sources: ReadonlyArray<ObservableInput<R1, E1, A>>) => Observable<R2, E2, B>,
|
|
2712
|
+
): Observable<R | R1 | R2, E | E1 | E2, B> {
|
|
2618
2713
|
return fa.toArray.mergeMap(joiner);
|
|
2619
2714
|
}
|
|
2620
2715
|
|
|
@@ -2626,10 +2721,10 @@ function maybeSchedule(subscription: Subscription, scheduler: SchedulerLike | un
|
|
|
2626
2721
|
}
|
|
2627
2722
|
}
|
|
2628
2723
|
|
|
2629
|
-
function mergeInternal<E, A, E1, B>(
|
|
2630
|
-
source: Observable<E, A>,
|
|
2724
|
+
function mergeInternal<R, E, A, R1, E1, B>(
|
|
2725
|
+
source: Observable<R, E, A>,
|
|
2631
2726
|
subscriber: Subscriber<E | E1, B>,
|
|
2632
|
-
f: (i: number, a: A) => ObservableInput<E1, B>,
|
|
2727
|
+
f: (i: number, a: A) => ObservableInput<R1, E1, B>,
|
|
2633
2728
|
concurrent: number,
|
|
2634
2729
|
onBeforeNext?: (innerValue: B) => void,
|
|
2635
2730
|
expand?: boolean,
|
|
@@ -2705,27 +2800,27 @@ function mergeInternal<E, A, E1, B>(
|
|
|
2705
2800
|
};
|
|
2706
2801
|
}
|
|
2707
2802
|
|
|
2708
|
-
export function scanInternal<E, A, B>(
|
|
2803
|
+
export function scanInternal<R, E, A, B>(
|
|
2709
2804
|
f: (index: number, acc: A, value: A) => B,
|
|
2710
2805
|
initial: B,
|
|
2711
2806
|
hasInitial: false,
|
|
2712
2807
|
emitOnNext: boolean,
|
|
2713
2808
|
emitBeforeComplete?: undefined | true,
|
|
2714
|
-
): (source: Observable<E, A>, subscriber: Subscriber<any, any>) => void;
|
|
2715
|
-
export function scanInternal<E, A, B>(
|
|
2809
|
+
): (source: Observable<R, E, A>, subscriber: Subscriber<any, any>) => void;
|
|
2810
|
+
export function scanInternal<R, E, A, B>(
|
|
2716
2811
|
f: (index: number, acc: B, value: A) => B,
|
|
2717
2812
|
initial: B,
|
|
2718
2813
|
hasInitial: true,
|
|
2719
2814
|
emitOnNext: boolean,
|
|
2720
2815
|
emitBeforeComplete?: undefined | true,
|
|
2721
|
-
): (source: Observable<E, A>, subscriber: Subscriber<any, any>) => void;
|
|
2722
|
-
export function scanInternal<E, A, B>(
|
|
2816
|
+
): (source: Observable<R, E, A>, subscriber: Subscriber<any, any>) => void;
|
|
2817
|
+
export function scanInternal<R, E, A, B>(
|
|
2723
2818
|
f: (index: number, acc: A | B, value: A) => B,
|
|
2724
2819
|
initial: B,
|
|
2725
2820
|
hasInitial: boolean,
|
|
2726
2821
|
emitOnNext: boolean,
|
|
2727
2822
|
emitBeforeComplete?: undefined | true,
|
|
2728
|
-
): (source: Observable<E, A>, subscriber: Subscriber<any, any>) => void {
|
|
2823
|
+
): (source: Observable<R, E, A>, subscriber: Subscriber<any, any>) => void {
|
|
2729
2824
|
return (source, subscriber) => {
|
|
2730
2825
|
let hasState = hasInitial;
|
|
2731
2826
|
let state: any = initial;
|