simply-observe 1.0.0
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/README.md +103 -0
- package/dist/index.d.mts +189 -0
- package/dist/index.d.ts +189 -0
- package/dist/index.js +703 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +655 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +33 -0
package/README.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Simply Observe
|
|
2
|
+
|
|
3
|
+
A lightweight, dependency-free reactive primitives library for TypeScript/JavaScript — `Observer`, `Subject`, and a set of combinators for working with streams of values over time.
|
|
4
|
+
|
|
5
|
+
Inspired by RxJS, built from scratch with a smaller surface area and no external dependencies.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install simply-observe
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
### Observer
|
|
16
|
+
|
|
17
|
+
An `Observer` wraps a task function that receives `next`, `error`, and `complete` dispatchers. Subscribers are added lazily — the task only runs once something subscribes.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { Observer } from 'simply-observe';
|
|
21
|
+
|
|
22
|
+
const observer = new Observer<number>((next, error, complete) => {
|
|
23
|
+
next(1);
|
|
24
|
+
next(2);
|
|
25
|
+
complete();
|
|
26
|
+
|
|
27
|
+
// optional teardown, called on unsubscribe/close
|
|
28
|
+
return () => {
|
|
29
|
+
console.log('cleaned up');
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
observer.subscribe(
|
|
34
|
+
(value) => console.log('next:', value),
|
|
35
|
+
(err) => console.log('error:', err),
|
|
36
|
+
() => console.log('complete')
|
|
37
|
+
);
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Subject
|
|
41
|
+
|
|
42
|
+
A `Subject` is both an Observer and a dispatcher — call `.next()`, `.error()`, or `.complete()` on it directly to push values to its subscribers.
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { Subject } from 'simply-observe';
|
|
46
|
+
|
|
47
|
+
const subject = new Subject<number>(0);
|
|
48
|
+
|
|
49
|
+
subject.subscribe((value) => console.log('got:', value));
|
|
50
|
+
|
|
51
|
+
subject.next(1);
|
|
52
|
+
subject.next(2);
|
|
53
|
+
subject.complete();
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Late subscribers (subscribing after `error()`, `complete()`, or `close()` has already fired) immediately receive that terminal event rather than hanging silently.
|
|
57
|
+
|
|
58
|
+
## Combinators
|
|
59
|
+
|
|
60
|
+
Static methods on `Observer` for combining multiple sources. Each accepts an array of `Observer`s and, where sources have different value types, infers a tuple so per-position types are preserved (`Observer.all([numberObs, stringObs])` returns `Observer<[number, string]>`, not `Observer<number | string>`).
|
|
61
|
+
|
|
62
|
+
| Method | Behavior |
|
|
63
|
+
|---|---|
|
|
64
|
+
| `Observer.all(observers)` | Waits for every source to complete, then emits one array of their final values. |
|
|
65
|
+
| `Observer.partial(observers)` | Emits a snapshot array after each individual source completes. |
|
|
66
|
+
| `Observer.latest(observers)` | Emits an updated array every time any source emits (`combineLatest`-style, may include `undefined` for sources that haven't emitted yet). |
|
|
67
|
+
| `Observer.zip(observers)` | Pairs values positionally — emits once every source has produced a value at that index. |
|
|
68
|
+
| `Observer.sequent(observers)` | Subscribes to sources one at a time, in order, emitting each one's value as it completes before moving to the next. |
|
|
69
|
+
| `Observer.race(observers)` | Mirrors whichever source emits or errors first; all others are unsubscribed. |
|
|
70
|
+
| `Observer.flat(observers)` | Merges all sources into a single stream, emitting values as they arrive from any source. |
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
import { Observer, of } from 'simply-observe';
|
|
74
|
+
|
|
75
|
+
Observer.zip([of(1, 2, 3), of('a', 'b', 'c')]).subscribe((pair) => {
|
|
76
|
+
console.log(pair); // [1, 'a'], then [2, 'b'], then [3, 'c']
|
|
77
|
+
});
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## `of(...)`
|
|
81
|
+
|
|
82
|
+
Constructs an `Observer` that synchronously emits the given values, in order, then completes.
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import { of } from 'simply-observe';
|
|
86
|
+
|
|
87
|
+
of(1, 2, 3).subscribe((v) => console.log(v));
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Unsubscribing
|
|
91
|
+
|
|
92
|
+
`subscribe()` returns a `Subscription`. Call `.unsubscribe()` to stop receiving values and run any teardown logic.
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
const sub = observer.subscribe((v) => console.log(v));
|
|
96
|
+
sub.unsubscribe();
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Subscriptions can be linked together — `subscription.add(other)` ties `other`'s lifecycle to `subscription`'s, so unsubscribing the parent tears down every linked child.
|
|
100
|
+
|
|
101
|
+
## License
|
|
102
|
+
|
|
103
|
+
MIT
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
type Flat<T extends readonly unknown[]> = T extends [infer F, ...infer R] ? F extends readonly unknown[] ? [...F, ...Flat<R>] : [F, ...Flat<R>] : [];
|
|
2
|
+
type Pop<T extends readonly unknown[]> = T extends [...infer R, infer _] ? R : never;
|
|
3
|
+
type ObserverRef = ReturnType<Crypto["randomUUID"]>;
|
|
4
|
+
type ObserverTaskFunction<T> = (...args: ObserverTaskParameters<T>) => any;
|
|
5
|
+
type ObserverTaskParameters<T> = [update: UpdateDispatcher<T>, error: ErrorDispatcher, complete: CompleteDispatcher<T>];
|
|
6
|
+
type UpdateDispatcher<T> = (next: T) => any;
|
|
7
|
+
type ErrorDispatcher = (err: any) => any;
|
|
8
|
+
type CompleteDispatcher<T> = (final?: T) => void;
|
|
9
|
+
type SubscriptionFunction<T> = (...args: SubscriptionParameters<T>) => Subscription<T>;
|
|
10
|
+
type SubscriptionParameters<T> = [next: NextHandler<T>, error?: ErrorHandler, complete?: CompleteHandler<T>];
|
|
11
|
+
type SubscriptionHandlers<T> = {
|
|
12
|
+
next: NextHandler<T>;
|
|
13
|
+
error?: ErrorHandler;
|
|
14
|
+
complete?: CompleteHandler<T>;
|
|
15
|
+
};
|
|
16
|
+
type UnsubscribeHandler$1 = () => boolean;
|
|
17
|
+
type NextHandler<T> = UpdateDispatcher<T>;
|
|
18
|
+
type ErrorHandler = ErrorDispatcher;
|
|
19
|
+
type CompleteHandler<T> = CompleteDispatcher<T>;
|
|
20
|
+
type CloseHandler = () => void;
|
|
21
|
+
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
22
|
+
type CatchUnknown<T> = IsAny<T> extends true ? any : unknown extends T ? never : T;
|
|
23
|
+
type extractUnknown<T> = T extends CatchUnknown<infer U> ? U : T;
|
|
24
|
+
type extractType<T> = T extends Observer<infer U>[] ? U : never;
|
|
25
|
+
type extractInputTuple<T> = {
|
|
26
|
+
[K in keyof T]: Observer<T[K]>;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
type UnsubscribeHandler = () => boolean;
|
|
30
|
+
interface SubscriptionConstructor {
|
|
31
|
+
new <T>(_unsubscribe?: UnsubscribeHandler): Subscription<T>;
|
|
32
|
+
}
|
|
33
|
+
interface Subscribable<T> {
|
|
34
|
+
subscribe: SubscriptionFunction<T>;
|
|
35
|
+
}
|
|
36
|
+
interface Subscription<T> {
|
|
37
|
+
ref: ObserverRef;
|
|
38
|
+
closed: boolean;
|
|
39
|
+
parents: Subscription<unknown>[] | null;
|
|
40
|
+
unsubscribe(): void;
|
|
41
|
+
add<U>(subscription: Subscription<U>): void;
|
|
42
|
+
remove<U>(subscription: Subscription<U>): void;
|
|
43
|
+
}
|
|
44
|
+
declare const Subscription: SubscriptionConstructor;
|
|
45
|
+
|
|
46
|
+
interface ObserverContextConstructor {
|
|
47
|
+
new <T>(): ObserverContext<T>;
|
|
48
|
+
}
|
|
49
|
+
interface ObserverContext<T> {
|
|
50
|
+
add(subscriber: SubscriptionHandlers<T>): () => boolean;
|
|
51
|
+
invoke(task: ObserverTaskFunction<T>): void;
|
|
52
|
+
update(value?: T): void;
|
|
53
|
+
error(value?: unknown): void;
|
|
54
|
+
complete(final?: T): void;
|
|
55
|
+
close(): void;
|
|
56
|
+
active: boolean;
|
|
57
|
+
invoked: boolean;
|
|
58
|
+
}
|
|
59
|
+
declare const ObserverContext: ObserverContextConstructor;
|
|
60
|
+
|
|
61
|
+
type OperatorFunction<T, R> = (source: Observer<T>) => Observer<R>;
|
|
62
|
+
declare function map<T, R>(fn: (value: T) => R): OperatorFunction<T, R>;
|
|
63
|
+
declare function filter<T>(predicate: (value: T) => boolean): OperatorFunction<T, T>;
|
|
64
|
+
declare function tap<T>(fn: (value: T) => void): OperatorFunction<T, T>;
|
|
65
|
+
declare function catchError<T>(handler: (err: any) => Observer<T>): OperatorFunction<T, T>;
|
|
66
|
+
declare function retry<T>(count: number): OperatorFunction<T, T>;
|
|
67
|
+
declare function take<T>(count: number): OperatorFunction<T, T>;
|
|
68
|
+
declare function takeUntil<T>(notifier: Observer<T>): OperatorFunction<T, T>;
|
|
69
|
+
declare function skip<T>(count: number): OperatorFunction<T, T>;
|
|
70
|
+
declare function debounce<T>(value: number): OperatorFunction<T, T>;
|
|
71
|
+
declare function toPipe<T, R>(operators: OperatorFunction<T, R>[]): OperatorFunction<T, R>;
|
|
72
|
+
type OpArgs<T, Args extends readonly unknown[]> = Flat<OpChain<Pop<[T, ...Args]>, Args>>;
|
|
73
|
+
type OpChain<A extends readonly unknown[], B extends readonly unknown[]> = {
|
|
74
|
+
[K in keyof A]: K extends keyof B ? [op: OperatorFunction<A[K], B[K]>] : never;
|
|
75
|
+
};
|
|
76
|
+
interface Pipeable<T> {
|
|
77
|
+
pipe(): Observer<T>;
|
|
78
|
+
pipe<A>(...args: OpArgs<T, [A]>): Observer<A>;
|
|
79
|
+
pipe<A, B>(...args: OpArgs<T, [A, B]>): Observer<B>;
|
|
80
|
+
pipe<A, B, C>(...args: OpArgs<T, [A, B, C]>): Observer<C>;
|
|
81
|
+
pipe<A, B, C, D>(...args: OpArgs<T, [A, B, C, D]>): Observer<D>;
|
|
82
|
+
pipe<A, B, C, D, E>(...args: OpArgs<T, [A, B, C, D, E]>): Observer<E>;
|
|
83
|
+
pipe<A, B, C, D, E, F>(...args: OpArgs<T, [A, B, C, D, E, F]>): Observer<F>;
|
|
84
|
+
pipe<A, B, C, D, E, F, G>(...args: OpArgs<T, [A, B, C, D, E, F, G]>): Observer<G>;
|
|
85
|
+
pipe<A, B, C, D, E, F, G, H>(...args: OpArgs<T, [A, B, C, D, E, F, G, H]>): Observer<H>;
|
|
86
|
+
pipe<A, B, C, D, E, F, G, H, I>(...args: OpArgs<T, [A, B, C, D, E, F, G, H, I]>): Observer<I>;
|
|
87
|
+
pipe<A, B, C, D, E, F, G, H, I>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, ...operations: OperatorFunction<any, any>[]): Observer<unknown>;
|
|
88
|
+
pipe(...operators: OperatorFunction<any, any>[]): Observer<any>;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
interface ObserverConstructor {
|
|
92
|
+
new <T extends any = never>(context: ObserverTaskFunction<T>): Observer<T>;
|
|
93
|
+
}
|
|
94
|
+
declare class ObserverLike<T> {
|
|
95
|
+
readonly ref: `${string}-${string}-${string}-${string}-${string}`;
|
|
96
|
+
protected _context: ObserverContext<T>;
|
|
97
|
+
get closed(): boolean;
|
|
98
|
+
}
|
|
99
|
+
interface Observer<T> extends Subscribable<T>, Pipeable<T> {
|
|
100
|
+
}
|
|
101
|
+
declare const Observer: ObserverConstructor;
|
|
102
|
+
|
|
103
|
+
interface SubjectConstructor {
|
|
104
|
+
new <T extends any = never>(initial?: T): Subject<T>;
|
|
105
|
+
}
|
|
106
|
+
interface Subject<T> extends Subscribable<T> {
|
|
107
|
+
close(): void;
|
|
108
|
+
next(value: T): void;
|
|
109
|
+
error(value: any): void;
|
|
110
|
+
complete(final?: T): void;
|
|
111
|
+
asObservable(): Observer<T>;
|
|
112
|
+
}
|
|
113
|
+
declare const Subject: SubjectConstructor;
|
|
114
|
+
|
|
115
|
+
declare function of(value?: undefined): Observer<undefined>;
|
|
116
|
+
declare function of(value: null): Observer<null>;
|
|
117
|
+
declare function of<T>(...args: CatchUnknown<T>[]): Observer<T>;
|
|
118
|
+
declare function timeout<T>(value: T, delay?: number | undefined): Observer<T>;
|
|
119
|
+
declare function interval(delay?: number | undefined): Observer<number>;
|
|
120
|
+
/**
|
|
121
|
+
* Returns an Observer that emits an array containing the latest emmited\
|
|
122
|
+
* values of all inner Observers, in the order of the Observer array given,\
|
|
123
|
+
* when the inner Observer completes. All inner Observer must emmit a complete\
|
|
124
|
+
* message for the outer observer to emmit its value.
|
|
125
|
+
*
|
|
126
|
+
* @param observers Observer array
|
|
127
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
128
|
+
*/
|
|
129
|
+
declare function all<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T>;
|
|
130
|
+
/**
|
|
131
|
+
* Returns an Observer that emits an array containing the\
|
|
132
|
+
* emmited values of all inner Observers, as they are completed,\
|
|
133
|
+
* in the order of the Observer array given. This streams all\
|
|
134
|
+
* inner Observer's latest values as they are individualy completed.
|
|
135
|
+
*
|
|
136
|
+
* @param observers Observer array
|
|
137
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
138
|
+
*/
|
|
139
|
+
declare function partial<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T>;
|
|
140
|
+
/**
|
|
141
|
+
* Returns an Observer that emits an array containing the\
|
|
142
|
+
* emmited values of all inner Observers. This streams all\
|
|
143
|
+
* inner Observer's latest values as they are individualy emmited.
|
|
144
|
+
*
|
|
145
|
+
* @param observers Observer array
|
|
146
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
147
|
+
*/
|
|
148
|
+
declare function latest<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T>;
|
|
149
|
+
/**
|
|
150
|
+
* Returns an Observer that emits an array containing the\
|
|
151
|
+
* emmited values of all inner Observers, in the order of the\
|
|
152
|
+
* Observer array given. When the previous Observer completes,\
|
|
153
|
+
* the next one is subscribed to, unsubscribing from the previous.\
|
|
154
|
+
* Once all inner Observers are completed, all values are emmited\
|
|
155
|
+
* by the outer Observer.
|
|
156
|
+
*
|
|
157
|
+
*
|
|
158
|
+
* @param observers Observer array
|
|
159
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
160
|
+
*/
|
|
161
|
+
declare function sequent<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T[number]>;
|
|
162
|
+
/**
|
|
163
|
+
* Returns an Observer that mirrors the first inner Observer\
|
|
164
|
+
* to emmit a value. All other Observers are ignored.
|
|
165
|
+
*
|
|
166
|
+
* @param observers Observer array
|
|
167
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
168
|
+
*/
|
|
169
|
+
declare function race<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T[number]>;
|
|
170
|
+
/**
|
|
171
|
+
* Returns an Observer that merges the emmited values of the\
|
|
172
|
+
* inner Observers as a single stream.
|
|
173
|
+
*
|
|
174
|
+
* @param observers Observer array
|
|
175
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
176
|
+
*/
|
|
177
|
+
declare function flat<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T[number]>;
|
|
178
|
+
/**
|
|
179
|
+
* Returns an Observer that merges the emmited values of the\
|
|
180
|
+
* inner Observers at the same index. The outer Observer waits\
|
|
181
|
+
* for a complete set before emmiting the values. If the inner\
|
|
182
|
+
* Observers
|
|
183
|
+
*
|
|
184
|
+
* @param observers Observer array
|
|
185
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
186
|
+
*/
|
|
187
|
+
declare function zip<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T>;
|
|
188
|
+
|
|
189
|
+
export { type CatchUnknown, type CloseHandler, type CompleteDispatcher, type CompleteHandler, type ErrorDispatcher, type ErrorHandler, type Flat, type IsAny, type NextHandler, Observer, type ObserverConstructor, ObserverLike, type ObserverRef, type ObserverTaskFunction, type ObserverTaskParameters, type OperatorFunction, type Pipeable, type Pop, Subject, type SubjectConstructor, type SubscriptionFunction, type SubscriptionHandlers, type SubscriptionParameters, type UnsubscribeHandler$1 as UnsubscribeHandler, type UpdateDispatcher, all, catchError, debounce, type extractInputTuple, type extractType, type extractUnknown, filter, flat, interval, latest, map, of, partial, race, retry, sequent, skip, take, takeUntil, tap, timeout, toPipe, zip };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
type Flat<T extends readonly unknown[]> = T extends [infer F, ...infer R] ? F extends readonly unknown[] ? [...F, ...Flat<R>] : [F, ...Flat<R>] : [];
|
|
2
|
+
type Pop<T extends readonly unknown[]> = T extends [...infer R, infer _] ? R : never;
|
|
3
|
+
type ObserverRef = ReturnType<Crypto["randomUUID"]>;
|
|
4
|
+
type ObserverTaskFunction<T> = (...args: ObserverTaskParameters<T>) => any;
|
|
5
|
+
type ObserverTaskParameters<T> = [update: UpdateDispatcher<T>, error: ErrorDispatcher, complete: CompleteDispatcher<T>];
|
|
6
|
+
type UpdateDispatcher<T> = (next: T) => any;
|
|
7
|
+
type ErrorDispatcher = (err: any) => any;
|
|
8
|
+
type CompleteDispatcher<T> = (final?: T) => void;
|
|
9
|
+
type SubscriptionFunction<T> = (...args: SubscriptionParameters<T>) => Subscription<T>;
|
|
10
|
+
type SubscriptionParameters<T> = [next: NextHandler<T>, error?: ErrorHandler, complete?: CompleteHandler<T>];
|
|
11
|
+
type SubscriptionHandlers<T> = {
|
|
12
|
+
next: NextHandler<T>;
|
|
13
|
+
error?: ErrorHandler;
|
|
14
|
+
complete?: CompleteHandler<T>;
|
|
15
|
+
};
|
|
16
|
+
type UnsubscribeHandler$1 = () => boolean;
|
|
17
|
+
type NextHandler<T> = UpdateDispatcher<T>;
|
|
18
|
+
type ErrorHandler = ErrorDispatcher;
|
|
19
|
+
type CompleteHandler<T> = CompleteDispatcher<T>;
|
|
20
|
+
type CloseHandler = () => void;
|
|
21
|
+
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
22
|
+
type CatchUnknown<T> = IsAny<T> extends true ? any : unknown extends T ? never : T;
|
|
23
|
+
type extractUnknown<T> = T extends CatchUnknown<infer U> ? U : T;
|
|
24
|
+
type extractType<T> = T extends Observer<infer U>[] ? U : never;
|
|
25
|
+
type extractInputTuple<T> = {
|
|
26
|
+
[K in keyof T]: Observer<T[K]>;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
type UnsubscribeHandler = () => boolean;
|
|
30
|
+
interface SubscriptionConstructor {
|
|
31
|
+
new <T>(_unsubscribe?: UnsubscribeHandler): Subscription<T>;
|
|
32
|
+
}
|
|
33
|
+
interface Subscribable<T> {
|
|
34
|
+
subscribe: SubscriptionFunction<T>;
|
|
35
|
+
}
|
|
36
|
+
interface Subscription<T> {
|
|
37
|
+
ref: ObserverRef;
|
|
38
|
+
closed: boolean;
|
|
39
|
+
parents: Subscription<unknown>[] | null;
|
|
40
|
+
unsubscribe(): void;
|
|
41
|
+
add<U>(subscription: Subscription<U>): void;
|
|
42
|
+
remove<U>(subscription: Subscription<U>): void;
|
|
43
|
+
}
|
|
44
|
+
declare const Subscription: SubscriptionConstructor;
|
|
45
|
+
|
|
46
|
+
interface ObserverContextConstructor {
|
|
47
|
+
new <T>(): ObserverContext<T>;
|
|
48
|
+
}
|
|
49
|
+
interface ObserverContext<T> {
|
|
50
|
+
add(subscriber: SubscriptionHandlers<T>): () => boolean;
|
|
51
|
+
invoke(task: ObserverTaskFunction<T>): void;
|
|
52
|
+
update(value?: T): void;
|
|
53
|
+
error(value?: unknown): void;
|
|
54
|
+
complete(final?: T): void;
|
|
55
|
+
close(): void;
|
|
56
|
+
active: boolean;
|
|
57
|
+
invoked: boolean;
|
|
58
|
+
}
|
|
59
|
+
declare const ObserverContext: ObserverContextConstructor;
|
|
60
|
+
|
|
61
|
+
type OperatorFunction<T, R> = (source: Observer<T>) => Observer<R>;
|
|
62
|
+
declare function map<T, R>(fn: (value: T) => R): OperatorFunction<T, R>;
|
|
63
|
+
declare function filter<T>(predicate: (value: T) => boolean): OperatorFunction<T, T>;
|
|
64
|
+
declare function tap<T>(fn: (value: T) => void): OperatorFunction<T, T>;
|
|
65
|
+
declare function catchError<T>(handler: (err: any) => Observer<T>): OperatorFunction<T, T>;
|
|
66
|
+
declare function retry<T>(count: number): OperatorFunction<T, T>;
|
|
67
|
+
declare function take<T>(count: number): OperatorFunction<T, T>;
|
|
68
|
+
declare function takeUntil<T>(notifier: Observer<T>): OperatorFunction<T, T>;
|
|
69
|
+
declare function skip<T>(count: number): OperatorFunction<T, T>;
|
|
70
|
+
declare function debounce<T>(value: number): OperatorFunction<T, T>;
|
|
71
|
+
declare function toPipe<T, R>(operators: OperatorFunction<T, R>[]): OperatorFunction<T, R>;
|
|
72
|
+
type OpArgs<T, Args extends readonly unknown[]> = Flat<OpChain<Pop<[T, ...Args]>, Args>>;
|
|
73
|
+
type OpChain<A extends readonly unknown[], B extends readonly unknown[]> = {
|
|
74
|
+
[K in keyof A]: K extends keyof B ? [op: OperatorFunction<A[K], B[K]>] : never;
|
|
75
|
+
};
|
|
76
|
+
interface Pipeable<T> {
|
|
77
|
+
pipe(): Observer<T>;
|
|
78
|
+
pipe<A>(...args: OpArgs<T, [A]>): Observer<A>;
|
|
79
|
+
pipe<A, B>(...args: OpArgs<T, [A, B]>): Observer<B>;
|
|
80
|
+
pipe<A, B, C>(...args: OpArgs<T, [A, B, C]>): Observer<C>;
|
|
81
|
+
pipe<A, B, C, D>(...args: OpArgs<T, [A, B, C, D]>): Observer<D>;
|
|
82
|
+
pipe<A, B, C, D, E>(...args: OpArgs<T, [A, B, C, D, E]>): Observer<E>;
|
|
83
|
+
pipe<A, B, C, D, E, F>(...args: OpArgs<T, [A, B, C, D, E, F]>): Observer<F>;
|
|
84
|
+
pipe<A, B, C, D, E, F, G>(...args: OpArgs<T, [A, B, C, D, E, F, G]>): Observer<G>;
|
|
85
|
+
pipe<A, B, C, D, E, F, G, H>(...args: OpArgs<T, [A, B, C, D, E, F, G, H]>): Observer<H>;
|
|
86
|
+
pipe<A, B, C, D, E, F, G, H, I>(...args: OpArgs<T, [A, B, C, D, E, F, G, H, I]>): Observer<I>;
|
|
87
|
+
pipe<A, B, C, D, E, F, G, H, I>(op1: OperatorFunction<T, A>, op2: OperatorFunction<A, B>, op3: OperatorFunction<B, C>, op4: OperatorFunction<C, D>, op5: OperatorFunction<D, E>, op6: OperatorFunction<E, F>, op7: OperatorFunction<F, G>, op8: OperatorFunction<G, H>, op9: OperatorFunction<H, I>, ...operations: OperatorFunction<any, any>[]): Observer<unknown>;
|
|
88
|
+
pipe(...operators: OperatorFunction<any, any>[]): Observer<any>;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
interface ObserverConstructor {
|
|
92
|
+
new <T extends any = never>(context: ObserverTaskFunction<T>): Observer<T>;
|
|
93
|
+
}
|
|
94
|
+
declare class ObserverLike<T> {
|
|
95
|
+
readonly ref: `${string}-${string}-${string}-${string}-${string}`;
|
|
96
|
+
protected _context: ObserverContext<T>;
|
|
97
|
+
get closed(): boolean;
|
|
98
|
+
}
|
|
99
|
+
interface Observer<T> extends Subscribable<T>, Pipeable<T> {
|
|
100
|
+
}
|
|
101
|
+
declare const Observer: ObserverConstructor;
|
|
102
|
+
|
|
103
|
+
interface SubjectConstructor {
|
|
104
|
+
new <T extends any = never>(initial?: T): Subject<T>;
|
|
105
|
+
}
|
|
106
|
+
interface Subject<T> extends Subscribable<T> {
|
|
107
|
+
close(): void;
|
|
108
|
+
next(value: T): void;
|
|
109
|
+
error(value: any): void;
|
|
110
|
+
complete(final?: T): void;
|
|
111
|
+
asObservable(): Observer<T>;
|
|
112
|
+
}
|
|
113
|
+
declare const Subject: SubjectConstructor;
|
|
114
|
+
|
|
115
|
+
declare function of(value?: undefined): Observer<undefined>;
|
|
116
|
+
declare function of(value: null): Observer<null>;
|
|
117
|
+
declare function of<T>(...args: CatchUnknown<T>[]): Observer<T>;
|
|
118
|
+
declare function timeout<T>(value: T, delay?: number | undefined): Observer<T>;
|
|
119
|
+
declare function interval(delay?: number | undefined): Observer<number>;
|
|
120
|
+
/**
|
|
121
|
+
* Returns an Observer that emits an array containing the latest emmited\
|
|
122
|
+
* values of all inner Observers, in the order of the Observer array given,\
|
|
123
|
+
* when the inner Observer completes. All inner Observer must emmit a complete\
|
|
124
|
+
* message for the outer observer to emmit its value.
|
|
125
|
+
*
|
|
126
|
+
* @param observers Observer array
|
|
127
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
128
|
+
*/
|
|
129
|
+
declare function all<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T>;
|
|
130
|
+
/**
|
|
131
|
+
* Returns an Observer that emits an array containing the\
|
|
132
|
+
* emmited values of all inner Observers, as they are completed,\
|
|
133
|
+
* in the order of the Observer array given. This streams all\
|
|
134
|
+
* inner Observer's latest values as they are individualy completed.
|
|
135
|
+
*
|
|
136
|
+
* @param observers Observer array
|
|
137
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
138
|
+
*/
|
|
139
|
+
declare function partial<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T>;
|
|
140
|
+
/**
|
|
141
|
+
* Returns an Observer that emits an array containing the\
|
|
142
|
+
* emmited values of all inner Observers. This streams all\
|
|
143
|
+
* inner Observer's latest values as they are individualy emmited.
|
|
144
|
+
*
|
|
145
|
+
* @param observers Observer array
|
|
146
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
147
|
+
*/
|
|
148
|
+
declare function latest<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T>;
|
|
149
|
+
/**
|
|
150
|
+
* Returns an Observer that emits an array containing the\
|
|
151
|
+
* emmited values of all inner Observers, in the order of the\
|
|
152
|
+
* Observer array given. When the previous Observer completes,\
|
|
153
|
+
* the next one is subscribed to, unsubscribing from the previous.\
|
|
154
|
+
* Once all inner Observers are completed, all values are emmited\
|
|
155
|
+
* by the outer Observer.
|
|
156
|
+
*
|
|
157
|
+
*
|
|
158
|
+
* @param observers Observer array
|
|
159
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
160
|
+
*/
|
|
161
|
+
declare function sequent<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T[number]>;
|
|
162
|
+
/**
|
|
163
|
+
* Returns an Observer that mirrors the first inner Observer\
|
|
164
|
+
* to emmit a value. All other Observers are ignored.
|
|
165
|
+
*
|
|
166
|
+
* @param observers Observer array
|
|
167
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
168
|
+
*/
|
|
169
|
+
declare function race<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T[number]>;
|
|
170
|
+
/**
|
|
171
|
+
* Returns an Observer that merges the emmited values of the\
|
|
172
|
+
* inner Observers as a single stream.
|
|
173
|
+
*
|
|
174
|
+
* @param observers Observer array
|
|
175
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
176
|
+
*/
|
|
177
|
+
declare function flat<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T[number]>;
|
|
178
|
+
/**
|
|
179
|
+
* Returns an Observer that merges the emmited values of the\
|
|
180
|
+
* inner Observers at the same index. The outer Observer waits\
|
|
181
|
+
* for a complete set before emmiting the values. If the inner\
|
|
182
|
+
* Observers
|
|
183
|
+
*
|
|
184
|
+
* @param observers Observer array
|
|
185
|
+
* @returns An Observer that subscribes to all inner Observers
|
|
186
|
+
*/
|
|
187
|
+
declare function zip<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T>;
|
|
188
|
+
|
|
189
|
+
export { type CatchUnknown, type CloseHandler, type CompleteDispatcher, type CompleteHandler, type ErrorDispatcher, type ErrorHandler, type Flat, type IsAny, type NextHandler, Observer, type ObserverConstructor, ObserverLike, type ObserverRef, type ObserverTaskFunction, type ObserverTaskParameters, type OperatorFunction, type Pipeable, type Pop, Subject, type SubjectConstructor, type SubscriptionFunction, type SubscriptionHandlers, type SubscriptionParameters, type UnsubscribeHandler$1 as UnsubscribeHandler, type UpdateDispatcher, all, catchError, debounce, type extractInputTuple, type extractType, type extractUnknown, filter, flat, interval, latest, map, of, partial, race, retry, sequent, skip, take, takeUntil, tap, timeout, toPipe, zip };
|