simply-observe 1.0.0 → 1.0.2
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 +92 -46
- package/dist/index.d.mts +6 -5
- package/dist/index.d.ts +6 -5
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,103 +1,149 @@
|
|
|
1
1
|
# Simply Observe
|
|
2
2
|
|
|
3
|
-
A lightweight, dependency-free reactive primitives library for TypeScript/JavaScript
|
|
4
|
-
|
|
5
|
-
Inspired by RxJS, built from scratch with a smaller surface area and no external dependencies.
|
|
6
|
-
|
|
3
|
+
A lightweight, dependency-free reactive primitives library for TypeScript/JavaScript. This includes `Observer` and `Subject` classes, with combinators and pipeable operators 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
|
+
Originally built to share state between components in frameworks like React that have no built-in singleton or service pattern — a `Subject` created once and subscribed to from multiple components can sidestep complex prop drilling or managing Context entirely.
|
|
8
|
+
|
|
7
9
|
## Install
|
|
8
|
-
|
|
10
|
+
|
|
9
11
|
```bash
|
|
10
12
|
npm install simply-observe
|
|
11
13
|
```
|
|
12
|
-
|
|
14
|
+
|
|
13
15
|
## Quick start
|
|
14
|
-
|
|
16
|
+
|
|
15
17
|
### Observer
|
|
16
|
-
|
|
18
|
+
|
|
17
19
|
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
|
-
|
|
20
|
+
|
|
19
21
|
```ts
|
|
20
22
|
import { Observer } from 'simply-observe';
|
|
21
|
-
|
|
23
|
+
|
|
22
24
|
const observer = new Observer<number>((next, error, complete) => {
|
|
23
25
|
next(1);
|
|
24
26
|
next(2);
|
|
25
27
|
complete();
|
|
26
|
-
|
|
28
|
+
|
|
27
29
|
// optional teardown, called on unsubscribe/close
|
|
28
30
|
return () => {
|
|
29
31
|
console.log('cleaned up');
|
|
30
32
|
};
|
|
31
33
|
});
|
|
32
|
-
|
|
34
|
+
|
|
33
35
|
observer.subscribe(
|
|
34
36
|
(value) => console.log('next:', value),
|
|
35
37
|
(err) => console.log('error:', err),
|
|
36
38
|
() => console.log('complete')
|
|
37
39
|
);
|
|
38
40
|
```
|
|
39
|
-
|
|
41
|
+
|
|
40
42
|
### Subject
|
|
41
|
-
|
|
43
|
+
|
|
42
44
|
A `Subject` is both an Observer and a dispatcher — call `.next()`, `.error()`, or `.complete()` on it directly to push values to its subscribers.
|
|
43
|
-
|
|
45
|
+
|
|
44
46
|
```ts
|
|
45
47
|
import { Subject } from 'simply-observe';
|
|
46
|
-
|
|
48
|
+
|
|
47
49
|
const subject = new Subject<number>(0);
|
|
48
|
-
|
|
50
|
+
|
|
49
51
|
subject.subscribe((value) => console.log('got:', value));
|
|
50
|
-
|
|
52
|
+
|
|
51
53
|
subject.next(1);
|
|
52
54
|
subject.next(2);
|
|
53
55
|
subject.complete();
|
|
54
56
|
```
|
|
55
|
-
|
|
57
|
+
|
|
56
58
|
Late subscribers (subscribing after `error()`, `complete()`, or `close()` has already fired) immediately receive that terminal event rather than hanging silently.
|
|
57
|
-
|
|
59
|
+
|
|
58
60
|
## Combinators
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
|
61
|
+
|
|
62
|
+
Standalone functions 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 (`all([numberObs, stringObs])` returns `Observer<[number, string]>`, not `Observer<number | string>`).
|
|
63
|
+
|
|
64
|
+
| Function | Behavior |
|
|
63
65
|
|---|---|
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
66
|
-
| `
|
|
67
|
-
| `
|
|
68
|
-
| `
|
|
69
|
-
| `
|
|
70
|
-
| `
|
|
71
|
-
|
|
66
|
+
| `all(observers)` | Waits for every source to complete, then emits one array of their final values. |
|
|
67
|
+
| `partial(observers)` | Emits a snapshot array after each individual source completes. |
|
|
68
|
+
| `latest(observers)` | Emits an updated array every time any source emits (`combineLatest`-style, may include `undefined` for sources that haven't emitted yet). |
|
|
69
|
+
| `zip(observers)` | Pairs values positionally — emits once every source has produced a value at that index. |
|
|
70
|
+
| `sequent(observers)` | Subscribes to sources one at a time, in order, emitting each one's value as it completes before moving to the next. |
|
|
71
|
+
| `race(observers)` | Mirrors whichever source emits or errors first; all others are unsubscribed. |
|
|
72
|
+
| `flat(observers)` | Merges all sources into a single stream, emitting values as they arrive from any source. |
|
|
73
|
+
|
|
72
74
|
```ts
|
|
73
|
-
import {
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
import { zip, of } from 'simply-observe';
|
|
76
|
+
|
|
77
|
+
zip([of(1, 2, 3), of('a', 'b', 'c')]).subscribe((pair) => {
|
|
76
78
|
console.log(pair); // [1, 'a'], then [2, 'b'], then [3, 'c']
|
|
77
79
|
});
|
|
78
80
|
```
|
|
79
81
|
|
|
80
|
-
##
|
|
81
|
-
|
|
82
|
+
## Utils
|
|
83
|
+
|
|
84
|
+
### `of(...)`
|
|
85
|
+
|
|
82
86
|
Constructs an `Observer` that synchronously emits the given values, in order, then completes.
|
|
83
|
-
|
|
87
|
+
|
|
84
88
|
```ts
|
|
85
89
|
import { of } from 'simply-observe';
|
|
86
|
-
|
|
90
|
+
|
|
87
91
|
of(1, 2, 3).subscribe((v) => console.log(v));
|
|
88
92
|
```
|
|
89
|
-
|
|
93
|
+
|
|
94
|
+
### `timeout` and `interval`
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
import { timeout, interval } from 'simply-observe';
|
|
98
|
+
|
|
99
|
+
// emits `value` once, after `delay` ms, then completes
|
|
100
|
+
timeout('done', 500).subscribe((v) => console.log(v));
|
|
101
|
+
|
|
102
|
+
// emits an increasing count every `delay` ms, never completes on its own
|
|
103
|
+
const sub = interval(1000).subscribe((count) => console.log(count));
|
|
104
|
+
sub.unsubscribe(); // stop it
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Pipeable operators
|
|
108
|
+
|
|
109
|
+
`Observer` has a `.pipe()` method for chaining transformations. Each operator is a standalone function that returns an `OperatorFunction`. A guide for custom operators will be coming soon.
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
import { of, map, filter } from 'simply-observe';
|
|
113
|
+
|
|
114
|
+
of(1, 2, 3, 4, 5)
|
|
115
|
+
.pipe(
|
|
116
|
+
filter((n) => n % 2 === 0),
|
|
117
|
+
map((n) => n * 10)
|
|
118
|
+
)
|
|
119
|
+
.subscribe((v) => console.log(v)); // 20, 40
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
| Operator | Behavior |
|
|
123
|
+
|---|---|
|
|
124
|
+
| `map(fn)` | Transforms each emitted value. |
|
|
125
|
+
| `filter(predicate)` | Only emits values that pass the predicate. |
|
|
126
|
+
| `tap(fn)` | Runs a side effect for each value without altering it. |
|
|
127
|
+
| `take(count)` | Emits only the first `count` values, then completes. |
|
|
128
|
+
| `skip(count)` | Ignores the first `count` values, then emits the rest. |
|
|
129
|
+
| `debounce(delay)` | Waits for a pause of `delay` ms with no new emissions before emitting the latest value. |
|
|
130
|
+
| `takeUntil(notifier)` | Stops emitting (and completes) as soon as `notifier` emits. |
|
|
131
|
+
| `retry(count)` | On error, re-subscribes to the source up to `count` times before propagating the error. |
|
|
132
|
+
| `catchError(handler)` | On error, subscribes to the `Observer` returned by `handler(err)` instead of propagating the error. |
|
|
133
|
+
|
|
134
|
+
A thrown error inside `map`/`filter`/`tap`'s callback is caught automatically and routed to the stream's `error` channel so you don't need to wrap operator callbacks in your own try/catch.
|
|
135
|
+
|
|
90
136
|
## Unsubscribing
|
|
91
|
-
|
|
137
|
+
|
|
92
138
|
`subscribe()` returns a `Subscription`. Call `.unsubscribe()` to stop receiving values and run any teardown logic.
|
|
93
|
-
|
|
139
|
+
|
|
94
140
|
```ts
|
|
95
141
|
const sub = observer.subscribe((v) => console.log(v));
|
|
96
142
|
sub.unsubscribe();
|
|
97
143
|
```
|
|
98
|
-
|
|
144
|
+
|
|
99
145
|
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
|
-
|
|
146
|
+
|
|
101
147
|
## License
|
|
102
|
-
|
|
103
|
-
MIT
|
|
148
|
+
|
|
149
|
+
MIT
|
package/dist/index.d.mts
CHANGED
|
@@ -13,7 +13,7 @@ type SubscriptionHandlers<T> = {
|
|
|
13
13
|
error?: ErrorHandler;
|
|
14
14
|
complete?: CompleteHandler<T>;
|
|
15
15
|
};
|
|
16
|
-
type UnsubscribeHandler
|
|
16
|
+
type UnsubscribeHandler = () => boolean;
|
|
17
17
|
type NextHandler<T> = UpdateDispatcher<T>;
|
|
18
18
|
type ErrorHandler = ErrorDispatcher;
|
|
19
19
|
type CompleteHandler<T> = CompleteDispatcher<T>;
|
|
@@ -26,7 +26,6 @@ type extractInputTuple<T> = {
|
|
|
26
26
|
[K in keyof T]: Observer<T[K]>;
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
type UnsubscribeHandler = () => boolean;
|
|
30
29
|
interface SubscriptionConstructor {
|
|
31
30
|
new <T>(_unsubscribe?: UnsubscribeHandler): Subscription<T>;
|
|
32
31
|
}
|
|
@@ -100,13 +99,15 @@ interface Observer<T> extends Subscribable<T>, Pipeable<T> {
|
|
|
100
99
|
}
|
|
101
100
|
declare const Observer: ObserverConstructor;
|
|
102
101
|
|
|
102
|
+
type gaurdNever<T> = false extends isNever<T> ? [value: T] : [];
|
|
103
|
+
type isNever<T> = T extends never ? true : false;
|
|
103
104
|
interface SubjectConstructor {
|
|
104
105
|
new <T extends any = never>(initial?: T): Subject<T>;
|
|
105
106
|
}
|
|
106
107
|
interface Subject<T> extends Subscribable<T> {
|
|
107
108
|
close(): void;
|
|
108
|
-
next(
|
|
109
|
-
error(value
|
|
109
|
+
next(...values: gaurdNever<T>): void;
|
|
110
|
+
error(value?: any): void;
|
|
110
111
|
complete(final?: T): void;
|
|
111
112
|
asObservable(): Observer<T>;
|
|
112
113
|
}
|
|
@@ -186,4 +187,4 @@ declare function flat<T extends readonly unknown[]>(observers: extractInputTuple
|
|
|
186
187
|
*/
|
|
187
188
|
declare function zip<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T>;
|
|
188
189
|
|
|
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
|
|
190
|
+
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 Subscribable, Subscription, type SubscriptionConstructor, type SubscriptionFunction, type SubscriptionHandlers, type SubscriptionParameters, type 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
CHANGED
|
@@ -13,7 +13,7 @@ type SubscriptionHandlers<T> = {
|
|
|
13
13
|
error?: ErrorHandler;
|
|
14
14
|
complete?: CompleteHandler<T>;
|
|
15
15
|
};
|
|
16
|
-
type UnsubscribeHandler
|
|
16
|
+
type UnsubscribeHandler = () => boolean;
|
|
17
17
|
type NextHandler<T> = UpdateDispatcher<T>;
|
|
18
18
|
type ErrorHandler = ErrorDispatcher;
|
|
19
19
|
type CompleteHandler<T> = CompleteDispatcher<T>;
|
|
@@ -26,7 +26,6 @@ type extractInputTuple<T> = {
|
|
|
26
26
|
[K in keyof T]: Observer<T[K]>;
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
type UnsubscribeHandler = () => boolean;
|
|
30
29
|
interface SubscriptionConstructor {
|
|
31
30
|
new <T>(_unsubscribe?: UnsubscribeHandler): Subscription<T>;
|
|
32
31
|
}
|
|
@@ -100,13 +99,15 @@ interface Observer<T> extends Subscribable<T>, Pipeable<T> {
|
|
|
100
99
|
}
|
|
101
100
|
declare const Observer: ObserverConstructor;
|
|
102
101
|
|
|
102
|
+
type gaurdNever<T> = false extends isNever<T> ? [value: T] : [];
|
|
103
|
+
type isNever<T> = T extends never ? true : false;
|
|
103
104
|
interface SubjectConstructor {
|
|
104
105
|
new <T extends any = never>(initial?: T): Subject<T>;
|
|
105
106
|
}
|
|
106
107
|
interface Subject<T> extends Subscribable<T> {
|
|
107
108
|
close(): void;
|
|
108
|
-
next(
|
|
109
|
-
error(value
|
|
109
|
+
next(...values: gaurdNever<T>): void;
|
|
110
|
+
error(value?: any): void;
|
|
110
111
|
complete(final?: T): void;
|
|
111
112
|
asObservable(): Observer<T>;
|
|
112
113
|
}
|
|
@@ -186,4 +187,4 @@ declare function flat<T extends readonly unknown[]>(observers: extractInputTuple
|
|
|
186
187
|
*/
|
|
187
188
|
declare function zip<T extends readonly unknown[]>(observers: extractInputTuple<T>): Observer<T>;
|
|
188
189
|
|
|
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
|
|
190
|
+
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 Subscribable, Subscription, type SubscriptionConstructor, type SubscriptionFunction, type SubscriptionHandlers, type SubscriptionParameters, type 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.js
CHANGED
|
@@ -22,6 +22,7 @@ __export(src_exports, {
|
|
|
22
22
|
Observer: () => Observer,
|
|
23
23
|
ObserverLike: () => ObserverLike,
|
|
24
24
|
Subject: () => Subject,
|
|
25
|
+
Subscription: () => Subscription,
|
|
25
26
|
all: () => all,
|
|
26
27
|
catchError: () => catchError,
|
|
27
28
|
debounce: () => debounce,
|
|
@@ -388,7 +389,10 @@ var Subject = class Subject2 extends ObserverLike {
|
|
|
388
389
|
super();
|
|
389
390
|
this.value = initial;
|
|
390
391
|
}
|
|
391
|
-
next(
|
|
392
|
+
next(...values) {
|
|
393
|
+
let value;
|
|
394
|
+
if (values.length === 0) this._context.update();
|
|
395
|
+
if (Array.isArray(values)) value = values[0];
|
|
392
396
|
if (!this._context.active) return;
|
|
393
397
|
this.value = value;
|
|
394
398
|
this._context.update(value);
|
|
@@ -679,6 +683,7 @@ var isAllCompleted = (completed) => {
|
|
|
679
683
|
Observer,
|
|
680
684
|
ObserverLike,
|
|
681
685
|
Subject,
|
|
686
|
+
Subscription,
|
|
682
687
|
all,
|
|
683
688
|
catchError,
|
|
684
689
|
debounce,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/subscription.ts","../src/context.ts","../src/pipes.ts","../src/observer.ts","../src/subject.ts","../src/utils.ts"],"sourcesContent":["export * from './observer'\r\nexport * from './subject'\r\nexport * from './utils'\r\nexport * from './pipes'\r\nexport * from './types'","import { ObserverRef, SubscriptionFunction } from \"./types\"\r\n\r\nexport interface Subscription<T> {\r\n ref: ObserverRef\r\n closed: boolean\r\n parents: Subscription<unknown>[] | null\r\n unsubscribe(): void\r\n add<U>(subscription: Subscription<U>): void\r\n remove<U>(subscription: Subscription<U>): void\r\n}\r\n\r\nexport type UnsubscribeHandler = () => boolean\r\nexport interface SubscriptionConstructor {\r\n new <T>(_unsubscribe?: UnsubscribeHandler): Subscription<T>\r\n}\r\n\r\nexport interface Subscribable<T> {\r\n subscribe: SubscriptionFunction<T>\r\n}\r\n\r\n\r\nexport const Subscription: SubscriptionConstructor = class Subscription<T> implements Subscription<T> {\r\n\r\n private _ref = crypto.randomUUID()\r\n private _linked: Subscription<unknown>[] = []\r\n private _parents: Subscription<unknown>[] | null = null\r\n private _closed = false\r\n\r\n constructor(private _unsubscribe: UnsubscribeHandler = () => true) { }\r\n\r\n public get ref() {\r\n return this._ref\r\n }\r\n\r\n public get closed() {\r\n return this._closed\r\n }\r\n\r\n public get parents() {\r\n return this._parents\r\n }\r\n\r\n public unsubscribe = () => {\r\n let error;\r\n\r\n if (!this._closed) {\r\n this._closed = true;\r\n\r\n const parents = this._parents;\r\n this._parents = null;\r\n if (parents) {\r\n for (let parent of parents) {\r\n parent.remove(this);\r\n }\r\n }\r\n\r\n try {\r\n if (!this._unsubscribe()) throw Error('Error occurred during unsubscription');\r\n } catch (err: any) {\r\n error = err;\r\n }\r\n\r\n const linked = this._linked;\r\n this._linked = [];\r\n\r\n for (let subscription of linked) {\r\n subscription.unsubscribe();\r\n }\r\n\r\n }\r\n\r\n if (error) throw error;\r\n }\r\n\r\n public add = <U>(subscription: Subscription<U>) => {\r\n if (subscription !== this) {\r\n if (this._closed) subscription.unsubscribe();\r\n else {\r\n if (subscription.closed || subscription.hasParent(this)) return;\r\n subscription.linkParent(this);\r\n this._linked.push(subscription);\r\n }\r\n }\r\n }\r\n\r\n public remove = <U>(subscription: Subscription<U>) => {\r\n if (subscription !== this) {\r\n const index = this._linked.indexOf(subscription);\r\n 0 <= index && this._linked.splice(index, 1);\r\n if (subscription.hasParent(this)) subscription.removeParent(this);\r\n }\r\n }\r\n\r\n private linkParent = <U>(subscription: Subscription<U>) => {\r\n if (!this._parents) this._parents = [];\r\n if (this.hasParent(subscription)) return;\r\n this._parents.push(subscription)\r\n }\r\n\r\n private removeParent = <U>(subscription: Subscription<U>) => {\r\n if (!Array.isArray(this._parents)) return;\r\n const index = this._parents.indexOf(subscription);\r\n 0 <= index && this._parents.splice(index, 1);\r\n if (this._parents.length === 0) this._parents = null;\r\n }\r\n\r\n private hasParent = <U>(subscription: Subscription<U>) => {\r\n return this._parents?.includes(subscription)\r\n }\r\n\r\n}\r\n\r\nexport default Subscription","import { ObserverTaskFunction, SubscriptionHandlers } from \"./types\"\r\n\r\nexport interface ObserverContext<T> {\r\n add(subscriber: SubscriptionHandlers<T>): () => boolean\r\n invoke(task: ObserverTaskFunction<T>): void\r\n update(value?: T): void\r\n error(value?: unknown): void\r\n complete(final?: T): void\r\n close(): void\r\n active: boolean\r\n invoked: boolean\r\n}\r\n\r\nexport interface ObserverContextConstructor {\r\n new <T>(): ObserverContext<T>\r\n}\r\n\r\nexport const ObserverContext: ObserverContextConstructor = class ObserverContext<T> implements ObserverContext<T> {\r\n\r\n private _invoked = false\r\n private _closed = false;\r\n private _teardown?: Function;\r\n private _subscribers = new Set<SubscriptionHandlers<T>>();\r\n public get active() { return !this._closed }\r\n public get invoked() { return this._invoked }\r\n\r\n constructor() { }\r\n\r\n private finalize() {\r\n if (this._teardown && typeof this._teardown === 'function') {\r\n this._teardown();\r\n }\r\n }\r\n\r\n public add(subscriber: SubscriptionHandlers<T>) {\r\n this._subscribers.add(subscriber)\r\n return () => {\r\n this._subscribers.delete(subscriber)\r\n if (this._subscribers.size === 0) {\r\n this.close();\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n public invoke(task: ObserverTaskFunction<T>) {\r\n this._invoked = true;\r\n this._teardown = task(this.update, this.error, this.complete)\r\n }\r\n\r\n public close() {\r\n if (!this.active) return;\r\n this._closed = true;\r\n this._subscribers.clear();\r\n this.finalize();\r\n }\r\n\r\n public update = (value?: T) => {\r\n if (!this.active) return;\r\n for (let { next } of this._subscribers.values()) {\r\n if (next || typeof next === 'function') {\r\n try {\r\n next(value!);\r\n } catch (error) {\r\n this.error(error)\r\n }\r\n }\r\n }\r\n }\r\n\r\n public error = (value?: unknown) => {\r\n if (!this.active) return;\r\n this._closed = true;\r\n const subscribers = [...this._subscribers.values()];\r\n this._subscribers.clear();\r\n for (let { error } of subscribers) {\r\n if (error || typeof error === 'function') {\r\n error(value);\r\n }\r\n }\r\n this.finalize();\r\n }\r\n\r\n public complete = (final?: T) => {\r\n if (!this.active) return;\r\n this._closed = true;\r\n const subscribers = [...this._subscribers.values()];\r\n this._subscribers.clear();\r\n for (let { complete } of subscribers) {\r\n if (complete || typeof complete === 'function') {\r\n complete(final);\r\n }\r\n }\r\n this.finalize();\r\n }\r\n}\r\n\r\nexport default { ObserverContext }","import { Observer } from \"./observer\";\r\nimport Subscription from \"./subscription\";\r\nimport { CatchUnknown, CompleteHandler, Flat, NextHandler, Pop } from \"./types\";\r\n\r\nexport type OperatorFunction<T, R> = (source: Observer<T>) => Observer<R>;\r\n\r\nexport function map<T, R>(fn: (value: T) => R): OperatorFunction<T, R> {\r\n return (source: Observer<T>) => new Observer<R>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => next(fn(val)),\r\n error,\r\n complete as unknown as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function filter<T>(predicate: (value: T) => boolean): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => { if (predicate(val)) next(val); },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function tap<T>(fn: (value: T) => void): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => { fn(val); next(val); },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function catchError<T>(handler: (err: any) => Observer<T>): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n let inner: Subscription<T> | null = null;\r\n const outerSub = source.subscribe(\r\n next as NextHandler<T>,\r\n (err: any) => {\r\n const fallback = handler(err);\r\n inner = fallback.subscribe(next as NextHandler<T>, error, complete as CompleteHandler<T>);\r\n },\r\n complete as CompleteHandler<T>\r\n );\r\n\r\n return () => {\r\n outerSub.unsubscribe();\r\n inner?.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function retry<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const onError = (err: any) => {\r\n if (count <= 0) {\r\n error(err);\r\n return;\r\n }\r\n count--;\r\n inner = source.subscribe(next as NextHandler<T>, onError, complete as CompleteHandler<T>);\r\n }\r\n let inner: Subscription<T> | null = null;\r\n const outerSub = source.subscribe(\r\n next as NextHandler<T>,\r\n onError,\r\n complete as CompleteHandler<T>\r\n );\r\n\r\n return () => {\r\n outerSub.unsubscribe();\r\n inner?.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function take<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (count < 0) return;\r\n if (count === 0) complete();\r\n count--;\r\n next(val as CatchUnknown<T>);\r\n },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function takeUntil<T>(notifier: Observer<T>): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const notification = notifier.subscribe(() => complete())\r\n const sub = source.subscribe(\r\n (val) => next(val as CatchUnknown<T>),\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => {\r\n sub.unsubscribe();\r\n notification.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function skip<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (count > 0) {\r\n count--;\r\n return\r\n };\r\n next(val as CatchUnknown<T>);\r\n },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function debounce<T>(value: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n let timeout: any;\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (timeout) clearTimeout(timeout);\r\n\r\n timeout = setTimeout(() => {\r\n next(val as CatchUnknown<T>);\r\n }, value);\r\n },\r\n (err) => {\r\n clearTimeout(timeout);\r\n error(err)\r\n },\r\n () => {\r\n clearTimeout(timeout);\r\n complete()\r\n }\r\n );\r\n return () => { clearTimeout(timeout); sub.unsubscribe(); }\r\n });\r\n}\r\n\r\nexport function toPipe<T, R>(operators: OperatorFunction<T, R>[]): OperatorFunction<T, R> {\r\n if (operators.length === 0) return (<T>(x: T): T => x) as OperatorFunction<T, R>;\r\n if (operators.length === 1) return operators[0] as OperatorFunction<T, R>;\r\n return (source: Observer<any>): Observer<R> => {\r\n return operators.reduce((a, f) => f(a), source as Observer<any>);\r\n }\r\n}\r\n\r\ntype OpArgs<T, Args extends readonly unknown[]> = Flat<OpChain<Pop<[T, ...Args]>, Args>>\r\ntype OpChain<A extends readonly unknown[], B extends readonly unknown[]> = {\r\n [K in keyof A]: K extends keyof B ? [op: OperatorFunction<A[K], B[K]>] : never;\r\n};\r\n\r\nexport interface Pipeable<T> {\r\n pipe(): Observer<T>;\r\n pipe<A>(...args: OpArgs<T, [A]>): Observer<A>;\r\n pipe<A, B>(...args: OpArgs<T, [A, B]>): Observer<B>;\r\n pipe<A, B, C>(...args: OpArgs<T, [A, B, C]>): Observer<C>;\r\n pipe<A, B, C, D>(...args: OpArgs<T, [A, B, C, D]>): Observer<D>;\r\n pipe<A, B, C, D, E>(...args: OpArgs<T, [A, B, C, D, E]>): Observer<E>;\r\n pipe<A, B, C, D, E, F>(...args: OpArgs<T, [A, B, C, D, E, F]>): Observer<F>;\r\n pipe<A, B, C, D, E, F, G>(...args: OpArgs<T, [A, B, C, D, E, F, G]>): Observer<G>;\r\n pipe<A, B, C, D, E, F, G, H>(...args: OpArgs<T, [A, B, C, D, E, F, G, H]>): Observer<H>;\r\n pipe<A, B, C, D, E, F, G, H, I>(...args: OpArgs<T, [A, B, C, D, E, F, G, H, I]>): Observer<I>;\r\n pipe<A, B, C, D, E, F, G, H, I>(\r\n op1: OperatorFunction<T, A>,\r\n op2: OperatorFunction<A, B>,\r\n op3: OperatorFunction<B, C>,\r\n op4: OperatorFunction<C, D>,\r\n op5: OperatorFunction<D, E>,\r\n op6: OperatorFunction<E, F>,\r\n op7: OperatorFunction<F, G>,\r\n op8: OperatorFunction<G, H>,\r\n op9: OperatorFunction<H, I>,\r\n ...operations: OperatorFunction<any, any>[]\r\n ): Observer<unknown>;\r\n pipe(...operators: OperatorFunction<any, any>[]): Observer<any>;\r\n}","import { Subscribable, Subscription } from \"./subscription\";\r\nimport { ObserverContext } from \"./context\";\r\nimport { OperatorFunction, Pipeable, toPipe } from \"./pipes\";\r\nimport {\r\n ObserverTaskFunction,\r\n NextHandler,\r\n ErrorHandler,\r\n CompleteHandler,\r\n} from \"./types\";\r\n\r\nexport interface Observer<T> extends Subscribable<T>, Pipeable<T> { }\r\nexport interface ObserverConstructor {\r\n new <T extends any = never>(context: ObserverTaskFunction<T>): Observer<T>\r\n}\r\n\r\nexport class ObserverLike<T> {\r\n readonly ref = crypto.randomUUID()\r\n protected _context: ObserverContext<T> = new ObserverContext<T>();\r\n public get closed() {\r\n return !this._context.active\r\n }\r\n}\r\n\r\nexport const Observer: ObserverConstructor = class Observer<T> extends ObserverLike<T> implements Observer<T> {\r\n\r\n constructor(private task: ObserverTaskFunction<T>) {\r\n super();\r\n }\r\n\r\n public close() {\r\n if (!this._context.active) return;\r\n this._context.close();\r\n }\r\n\r\n public subscribe(next: NextHandler<T>, error?: ErrorHandler, complete?: CompleteHandler<T>) {\r\n if (!this._context.active) this._context = new ObserverContext();\r\n const teardown = this._context.add({ next, error, complete });\r\n if (!this._context.invoked) this._context.invoke(this.task);\r\n return new Subscription(teardown);\r\n }\r\n\r\n public pipe(...operators: OperatorFunction<any, any>[]) {\r\n return toPipe(operators)(this);\r\n }\r\n}\r\n\r\nexport default { Observer }","\r\nimport { Observer, ObserverLike } from \"./observer\";\r\nimport { Subscribable, Subscription } from \"./subscription\";\r\nimport { CompleteHandler, ErrorHandler, NextHandler } from \"./types\";\r\n\r\nexport interface Subject<T> extends Subscribable<T> {\r\n close(): void\r\n next(value: T): void\r\n error(value: any): void\r\n complete(final?: T): void\r\n asObservable(): Observer<T>\r\n}\r\n\r\nexport interface SubjectConstructor {\r\n new <T extends any = never>(initial?: T): Subject<T>\r\n}\r\n\r\nexport const Subject: SubjectConstructor = class Subject<T> extends ObserverLike<T> implements Subject<T> {\r\n\r\n private value?: T;\r\n private terminal?: { type: 'error'; value: any } | { type: 'complete'; value?: T };\r\n\r\n constructor(initial?: T) {\r\n super()\r\n this.value = initial\r\n }\r\n\r\n public next(value: T) {\r\n if (!this._context.active) return;\r\n this.value = value;\r\n this._context.update(value);\r\n }\r\n\r\n public error(value: any) {\r\n if (!this._context.active) return;\r\n this.terminal = { type: 'error', value };\r\n this._context.error(value);\r\n }\r\n\r\n public complete(final?: T) {\r\n if (!this._context.active) return;\r\n this.terminal = { type: 'complete', value: final };\r\n this._context.complete(final);\r\n }\r\n\r\n public close() {\r\n if (!this._context.active) return;\r\n this.terminal = { type: \"complete\", value: void 0 };\r\n this._context.close();\r\n }\r\n\r\n public asObservable(): Observer<T> {\r\n return new Observer<T>((next, error, complete) => {\r\n const sub = this.subscribe(next, error, complete);\r\n return () => sub.unsubscribe();\r\n });\r\n }\r\n\r\n public subscribe(next: NextHandler<T>, error?: ErrorHandler, complete?: CompleteHandler<T>) {\r\n if (this.terminal) {\r\n if (this.terminal.type === 'error') error?.(this.terminal.value);\r\n else complete?.(this.terminal.value);\r\n return new Subscription<T>(() => true);\r\n }\r\n\r\n const sub = new Subscription<T>(this._context.add({ next, error, complete }));\r\n if (this.value !== undefined) next(this.value);\r\n return sub;\r\n }\r\n}\r\n\r\nexport default Subject\r\n","import { Observer } from \"./observer\";\r\nimport Subscription from \"./subscription\";\r\nimport { CatchUnknown, extractInputTuple, ObserverTaskFunction } from \"./types\";\r\n\r\nexport function of(value?: undefined): Observer<undefined>\r\nexport function of(value: null): Observer<null>\r\nexport function of<T>(...args: CatchUnknown<T>[]): Observer<T>\r\nexport function of<T>(...args: CatchUnknown<T>[]) {\r\n return new Observer<T>((next, _, complete) => {\r\n for (let item of args) {\r\n next(item)\r\n }\r\n complete()\r\n })\r\n}\r\n\r\nexport function timeout<T>(value: T, delay: number | undefined = 0) {\r\n return new Observer<T>((next, _, complete) => {\r\n const t = setTimeout(() => { next(value); complete(); }, delay);\r\n return () => clearTimeout(t);\r\n });\r\n}\r\n\r\nexport function interval(delay: number | undefined = 0) {\r\n return new Observer<number>((next) => {\r\n let count = 0;\r\n const t = setInterval(() => next(count++), delay);\r\n return () => clearInterval(t);\r\n });\r\n}\r\n\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the latest emmited\\\r\n * values of all inner Observers, in the order of the Observer array given,\\\r\n * when the inner Observer completes. All inner Observer must emmit a complete\\\r\n * message for the outer observer to emmit its value.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function all<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n next([...stream] as unknown as T);\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers, as they are completed,\\\r\n * in the order of the Observer array given. This streams all\\\r\n * inner Observer's latest values as they are individualy completed.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function partial<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.map((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n next([...stream] as unknown as T);\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n };\r\n });\r\n root.add(sub)\r\n })\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers. This streams all\\\r\n * inner Observer's latest values as they are individualy emmited.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function latest<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n next([...stream] as unknown as T);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers, in the order of the\\\r\n * Observer array given. When the previous Observer completes,\\\r\n * the next one is subscribed to, unsubscribing from the previous.\\\r\n * Once all inner Observers are completed, all values are emmited\\\r\n * by the outer Observer.\r\n * \r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function sequent<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const queue = [...observers];\r\n\r\n const mountNext = () => {\r\n let value: T[number];\r\n let obs = queue.shift();\r\n\r\n if (!obs) {\r\n root.unsubscribe();\r\n complete();\r\n return;\r\n }\r\n\r\n const sub = obs.subscribe((val) => {\r\n value = val;\r\n next(value);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n mountNext();\r\n });\r\n root.add(sub);\r\n };\r\n\r\n mountNext();\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that mirrors the first inner Observer\\\r\n * to emmit a value. All other Observers are ignored.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function race<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n let won = false;\r\n\r\n observers.forEach((obs) => {\r\n const sub = obs.subscribe((val) => {\r\n if (won) return;\r\n won = true;\r\n root.unsubscribe();\r\n next(val);\r\n complete();\r\n }, (err) => {\r\n if (won) return;\r\n won = true;\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n // a source completing with no emission doesn't win\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that merges the emmited values of the\\\r\n * inner Observers as a single stream.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function flat<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n next(val);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that merges the emmited values of the\\\r\n * inner Observers at the same index. The outer Observer waits\\\r\n * for a complete set before emmiting the values. If the inner\\\r\n * Observers \r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function zip<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const streams: unknown[][] = observers.map(() => []);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n const checkReady = () => {\r\n const min = Math.min(...streams.map((s) => s.length));\r\n if (min > 0) {\r\n next(streams.map((stream) => stream.shift()) as unknown as T);\r\n }\r\n };\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n streams[i].push(val);\r\n checkReady();\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\nconst isAllCompleted = (completed: boolean[]) => {\r\n return !completed.includes(false)\r\n}\r\n"],"mappings":"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","names":["Subscription","ObserverContext","timeout","Observer","Subject"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/subscription.ts","../src/context.ts","../src/pipes.ts","../src/observer.ts","../src/subject.ts","../src/utils.ts"],"sourcesContent":["export * from './observer'\r\nexport * from './subject'\r\nexport * from './subscription'\r\nexport * from './utils'\r\nexport * from './pipes'\r\nexport * from './types'","import { ObserverRef, SubscriptionFunction, UnsubscribeHandler } from \"./types\"\r\n\r\nexport interface Subscription<T> {\r\n ref: ObserverRef\r\n closed: boolean\r\n parents: Subscription<unknown>[] | null\r\n unsubscribe(): void\r\n add<U>(subscription: Subscription<U>): void\r\n remove<U>(subscription: Subscription<U>): void\r\n}\r\n\r\nexport interface SubscriptionConstructor {\r\n new <T>(_unsubscribe?: UnsubscribeHandler): Subscription<T>\r\n}\r\n\r\nexport interface Subscribable<T> {\r\n subscribe: SubscriptionFunction<T>\r\n}\r\n\r\n\r\nexport const Subscription: SubscriptionConstructor = class Subscription<T> implements Subscription<T> {\r\n\r\n private _ref = crypto.randomUUID()\r\n private _linked: Subscription<unknown>[] = []\r\n private _parents: Subscription<unknown>[] | null = null\r\n private _closed = false\r\n\r\n constructor(private _unsubscribe: UnsubscribeHandler = () => true) { }\r\n\r\n public get ref() {\r\n return this._ref\r\n }\r\n\r\n public get closed() {\r\n return this._closed\r\n }\r\n\r\n public get parents() {\r\n return this._parents\r\n }\r\n\r\n public unsubscribe = () => {\r\n let error;\r\n\r\n if (!this._closed) {\r\n this._closed = true;\r\n\r\n const parents = this._parents;\r\n this._parents = null;\r\n if (parents) {\r\n for (let parent of parents) {\r\n parent.remove(this);\r\n }\r\n }\r\n\r\n try {\r\n if (!this._unsubscribe()) throw Error('Error occurred during unsubscription');\r\n } catch (err: any) {\r\n error = err;\r\n }\r\n\r\n const linked = this._linked;\r\n this._linked = [];\r\n\r\n for (let subscription of linked) {\r\n subscription.unsubscribe();\r\n }\r\n\r\n }\r\n\r\n if (error) throw error;\r\n }\r\n\r\n public add = <U>(subscription: Subscription<U>) => {\r\n if (subscription !== this) {\r\n if (this._closed) subscription.unsubscribe();\r\n else {\r\n if (subscription.closed || subscription.hasParent(this)) return;\r\n subscription.linkParent(this);\r\n this._linked.push(subscription);\r\n }\r\n }\r\n }\r\n\r\n public remove = <U>(subscription: Subscription<U>) => {\r\n if (subscription !== this) {\r\n const index = this._linked.indexOf(subscription);\r\n 0 <= index && this._linked.splice(index, 1);\r\n if (subscription.hasParent(this)) subscription.removeParent(this);\r\n }\r\n }\r\n\r\n private linkParent = <U>(subscription: Subscription<U>) => {\r\n if (!this._parents) this._parents = [];\r\n if (this.hasParent(subscription)) return;\r\n this._parents.push(subscription)\r\n }\r\n\r\n private removeParent = <U>(subscription: Subscription<U>) => {\r\n if (!Array.isArray(this._parents)) return;\r\n const index = this._parents.indexOf(subscription);\r\n 0 <= index && this._parents.splice(index, 1);\r\n if (this._parents.length === 0) this._parents = null;\r\n }\r\n\r\n private hasParent = <U>(subscription: Subscription<U>) => {\r\n return this._parents?.includes(subscription)\r\n }\r\n\r\n}\r\n\r\nexport default Subscription","import { ObserverTaskFunction, SubscriptionHandlers } from \"./types\"\r\n\r\nexport interface ObserverContext<T> {\r\n add(subscriber: SubscriptionHandlers<T>): () => boolean\r\n invoke(task: ObserverTaskFunction<T>): void\r\n update(value?: T): void\r\n error(value?: unknown): void\r\n complete(final?: T): void\r\n close(): void\r\n active: boolean\r\n invoked: boolean\r\n}\r\n\r\nexport interface ObserverContextConstructor {\r\n new <T>(): ObserverContext<T>\r\n}\r\n\r\nexport const ObserverContext: ObserverContextConstructor = class ObserverContext<T> implements ObserverContext<T> {\r\n\r\n private _invoked = false\r\n private _closed = false;\r\n private _teardown?: Function;\r\n private _subscribers = new Set<SubscriptionHandlers<T>>();\r\n public get active() { return !this._closed }\r\n public get invoked() { return this._invoked }\r\n\r\n constructor() { }\r\n\r\n private finalize() {\r\n if (this._teardown && typeof this._teardown === 'function') {\r\n this._teardown();\r\n }\r\n }\r\n\r\n public add(subscriber: SubscriptionHandlers<T>) {\r\n this._subscribers.add(subscriber)\r\n return () => {\r\n this._subscribers.delete(subscriber)\r\n if (this._subscribers.size === 0) {\r\n this.close();\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n public invoke(task: ObserverTaskFunction<T>) {\r\n this._invoked = true;\r\n this._teardown = task(this.update, this.error, this.complete)\r\n }\r\n\r\n public close() {\r\n if (!this.active) return;\r\n this._closed = true;\r\n this._subscribers.clear();\r\n this.finalize();\r\n }\r\n\r\n public update = (value?: T) => {\r\n if (!this.active) return;\r\n for (let { next } of this._subscribers.values()) {\r\n if (next || typeof next === 'function') {\r\n try {\r\n next(value!);\r\n } catch (error) {\r\n this.error(error)\r\n }\r\n }\r\n }\r\n }\r\n\r\n public error = (value?: unknown) => {\r\n if (!this.active) return;\r\n this._closed = true;\r\n const subscribers = [...this._subscribers.values()];\r\n this._subscribers.clear();\r\n for (let { error } of subscribers) {\r\n if (error || typeof error === 'function') {\r\n error(value);\r\n }\r\n }\r\n this.finalize();\r\n }\r\n\r\n public complete = (final?: T) => {\r\n if (!this.active) return;\r\n this._closed = true;\r\n const subscribers = [...this._subscribers.values()];\r\n this._subscribers.clear();\r\n for (let { complete } of subscribers) {\r\n if (complete || typeof complete === 'function') {\r\n complete(final);\r\n }\r\n }\r\n this.finalize();\r\n }\r\n}\r\n\r\nexport default { ObserverContext }","import { Observer } from \"./observer\";\r\nimport Subscription from \"./subscription\";\r\nimport { CatchUnknown, CompleteHandler, Flat, NextHandler, Pop } from \"./types\";\r\n\r\nexport type OperatorFunction<T, R> = (source: Observer<T>) => Observer<R>;\r\n\r\nexport function map<T, R>(fn: (value: T) => R): OperatorFunction<T, R> {\r\n return (source: Observer<T>) => new Observer<R>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => next(fn(val)),\r\n error,\r\n complete as unknown as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function filter<T>(predicate: (value: T) => boolean): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => { if (predicate(val)) next(val); },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function tap<T>(fn: (value: T) => void): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => { fn(val); next(val); },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function catchError<T>(handler: (err: any) => Observer<T>): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n let inner: Subscription<T> | null = null;\r\n const outerSub = source.subscribe(\r\n next as NextHandler<T>,\r\n (err: any) => {\r\n const fallback = handler(err);\r\n inner = fallback.subscribe(next as NextHandler<T>, error, complete as CompleteHandler<T>);\r\n },\r\n complete as CompleteHandler<T>\r\n );\r\n\r\n return () => {\r\n outerSub.unsubscribe();\r\n inner?.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function retry<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const onError = (err: any) => {\r\n if (count <= 0) {\r\n error(err);\r\n return;\r\n }\r\n count--;\r\n inner = source.subscribe(next as NextHandler<T>, onError, complete as CompleteHandler<T>);\r\n }\r\n let inner: Subscription<T> | null = null;\r\n const outerSub = source.subscribe(\r\n next as NextHandler<T>,\r\n onError,\r\n complete as CompleteHandler<T>\r\n );\r\n\r\n return () => {\r\n outerSub.unsubscribe();\r\n inner?.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function take<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (count < 0) return;\r\n if (count === 0) complete();\r\n count--;\r\n next(val as CatchUnknown<T>);\r\n },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function takeUntil<T>(notifier: Observer<T>): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const notification = notifier.subscribe(() => complete())\r\n const sub = source.subscribe(\r\n (val) => next(val as CatchUnknown<T>),\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => {\r\n sub.unsubscribe();\r\n notification.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function skip<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (count > 0) {\r\n count--;\r\n return\r\n };\r\n next(val as CatchUnknown<T>);\r\n },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function debounce<T>(value: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n let timeout: any;\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (timeout) clearTimeout(timeout);\r\n\r\n timeout = setTimeout(() => {\r\n next(val as CatchUnknown<T>);\r\n }, value);\r\n },\r\n (err) => {\r\n clearTimeout(timeout);\r\n error(err)\r\n },\r\n () => {\r\n clearTimeout(timeout);\r\n complete()\r\n }\r\n );\r\n return () => { clearTimeout(timeout); sub.unsubscribe(); }\r\n });\r\n}\r\n\r\nexport function toPipe<T, R>(operators: OperatorFunction<T, R>[]): OperatorFunction<T, R> {\r\n if (operators.length === 0) return (<T>(x: T): T => x) as OperatorFunction<T, R>;\r\n if (operators.length === 1) return operators[0] as OperatorFunction<T, R>;\r\n return (source: Observer<any>): Observer<R> => {\r\n return operators.reduce((a, f) => f(a), source as Observer<any>);\r\n }\r\n}\r\n\r\ntype OpArgs<T, Args extends readonly unknown[]> = Flat<OpChain<Pop<[T, ...Args]>, Args>>\r\ntype OpChain<A extends readonly unknown[], B extends readonly unknown[]> = {\r\n [K in keyof A]: K extends keyof B ? [op: OperatorFunction<A[K], B[K]>] : never;\r\n};\r\n\r\nexport interface Pipeable<T> {\r\n pipe(): Observer<T>;\r\n pipe<A>(...args: OpArgs<T, [A]>): Observer<A>;\r\n pipe<A, B>(...args: OpArgs<T, [A, B]>): Observer<B>;\r\n pipe<A, B, C>(...args: OpArgs<T, [A, B, C]>): Observer<C>;\r\n pipe<A, B, C, D>(...args: OpArgs<T, [A, B, C, D]>): Observer<D>;\r\n pipe<A, B, C, D, E>(...args: OpArgs<T, [A, B, C, D, E]>): Observer<E>;\r\n pipe<A, B, C, D, E, F>(...args: OpArgs<T, [A, B, C, D, E, F]>): Observer<F>;\r\n pipe<A, B, C, D, E, F, G>(...args: OpArgs<T, [A, B, C, D, E, F, G]>): Observer<G>;\r\n pipe<A, B, C, D, E, F, G, H>(...args: OpArgs<T, [A, B, C, D, E, F, G, H]>): Observer<H>;\r\n pipe<A, B, C, D, E, F, G, H, I>(...args: OpArgs<T, [A, B, C, D, E, F, G, H, I]>): Observer<I>;\r\n pipe<A, B, C, D, E, F, G, H, I>(\r\n op1: OperatorFunction<T, A>,\r\n op2: OperatorFunction<A, B>,\r\n op3: OperatorFunction<B, C>,\r\n op4: OperatorFunction<C, D>,\r\n op5: OperatorFunction<D, E>,\r\n op6: OperatorFunction<E, F>,\r\n op7: OperatorFunction<F, G>,\r\n op8: OperatorFunction<G, H>,\r\n op9: OperatorFunction<H, I>,\r\n ...operations: OperatorFunction<any, any>[]\r\n ): Observer<unknown>;\r\n pipe(...operators: OperatorFunction<any, any>[]): Observer<any>;\r\n}","import { Subscribable, Subscription } from \"./subscription\";\r\nimport { ObserverContext } from \"./context\";\r\nimport { OperatorFunction, Pipeable, toPipe } from \"./pipes\";\r\nimport {\r\n ObserverTaskFunction,\r\n NextHandler,\r\n ErrorHandler,\r\n CompleteHandler,\r\n} from \"./types\";\r\n\r\nexport interface Observer<T> extends Subscribable<T>, Pipeable<T> { }\r\nexport interface ObserverConstructor {\r\n new <T extends any = never>(context: ObserverTaskFunction<T>): Observer<T>\r\n}\r\n\r\nexport class ObserverLike<T> {\r\n readonly ref = crypto.randomUUID()\r\n protected _context: ObserverContext<T> = new ObserverContext<T>();\r\n public get closed() {\r\n return !this._context.active\r\n }\r\n}\r\n\r\nexport const Observer: ObserverConstructor = class Observer<T> extends ObserverLike<T> implements Observer<T> {\r\n\r\n constructor(private task: ObserverTaskFunction<T>) {\r\n super();\r\n }\r\n\r\n public close() {\r\n if (!this._context.active) return;\r\n this._context.close();\r\n }\r\n\r\n public subscribe(next: NextHandler<T>, error?: ErrorHandler, complete?: CompleteHandler<T>) {\r\n if (!this._context.active) this._context = new ObserverContext();\r\n const teardown = this._context.add({ next, error, complete });\r\n if (!this._context.invoked) this._context.invoke(this.task);\r\n return new Subscription(teardown);\r\n }\r\n\r\n public pipe(...operators: OperatorFunction<any, any>[]) {\r\n return toPipe(operators)(this);\r\n }\r\n}\r\n\r\nexport default { Observer }","\r\nimport { Observer, ObserverLike } from \"./observer\";\r\nimport { Subscribable, Subscription } from \"./subscription\";\r\nimport { CompleteHandler, ErrorHandler, NextHandler } from \"./types\";\r\n\r\ntype gaurdNever<T> = false extends isNever<T> ? [value: T] : [];\r\ntype isNever<T> = T extends never ? true : false;\r\n\r\nexport interface Subject<T> extends Subscribable<T> {\r\n close(): void\r\n next(...values: gaurdNever<T>): void;\r\n error(value?: any): void\r\n complete(final?: T): void\r\n asObservable(): Observer<T>\r\n}\r\n\r\nexport interface SubjectConstructor {\r\n new <T extends any = never>(initial?: T): Subject<T>\r\n}\r\n\r\nexport const Subject: SubjectConstructor = class Subject<T> extends ObserverLike<T> implements Subject<T> {\r\n\r\n private value?: T;\r\n private terminal?: { type: 'error'; value: any } | { type: 'complete'; value?: T };\r\n\r\n constructor(initial?: T) {\r\n super()\r\n this.value = initial\r\n }\r\n\r\n public next(...values: gaurdNever<T>) {\r\n let value;\r\n if (values.length === 0) this._context.update();\r\n if (Array.isArray(values)) value = values[0];\r\n if (!this._context.active) return;\r\n this.value = value;\r\n this._context.update(value);\r\n }\r\n\r\n public error(value?: any) {\r\n if (!this._context.active) return;\r\n this.terminal = { type: 'error', value };\r\n this._context.error(value);\r\n }\r\n\r\n public complete(final?: T) {\r\n if (!this._context.active) return;\r\n this.terminal = { type: 'complete', value: final };\r\n this._context.complete(final);\r\n }\r\n\r\n public close() {\r\n if (!this._context.active) return;\r\n this.terminal = { type: \"complete\", value: void 0 };\r\n this._context.close();\r\n }\r\n\r\n public asObservable(): Observer<T> {\r\n return new Observer<T>((next, error, complete) => {\r\n const sub = this.subscribe(next, error, complete);\r\n return () => sub.unsubscribe();\r\n });\r\n }\r\n\r\n public subscribe(next: NextHandler<T>, error?: ErrorHandler, complete?: CompleteHandler<T>) {\r\n if (this.terminal) {\r\n if (this.terminal.type === 'error') error?.(this.terminal.value);\r\n else complete?.(this.terminal.value);\r\n return new Subscription<T>(() => true);\r\n }\r\n\r\n const sub = new Subscription<T>(this._context.add({ next, error, complete }));\r\n if (this.value !== undefined) next(this.value);\r\n return sub;\r\n }\r\n}\r\n\r\n\r\nexport default Subject\r\n","import { Observer } from \"./observer\";\r\nimport Subscription from \"./subscription\";\r\nimport { CatchUnknown, extractInputTuple, ObserverTaskFunction } from \"./types\";\r\n\r\nexport function of(value?: undefined): Observer<undefined>\r\nexport function of(value: null): Observer<null>\r\nexport function of<T>(...args: CatchUnknown<T>[]): Observer<T>\r\nexport function of<T>(...args: CatchUnknown<T>[]) {\r\n return new Observer<T>((next, _, complete) => {\r\n for (let item of args) {\r\n next(item)\r\n }\r\n complete()\r\n })\r\n}\r\n\r\nexport function timeout<T>(value: T, delay: number | undefined = 0) {\r\n return new Observer<T>((next, _, complete) => {\r\n const t = setTimeout(() => { next(value); complete(); }, delay);\r\n return () => clearTimeout(t);\r\n });\r\n}\r\n\r\nexport function interval(delay: number | undefined = 0) {\r\n return new Observer<number>((next) => {\r\n let count = 0;\r\n const t = setInterval(() => next(count++), delay);\r\n return () => clearInterval(t);\r\n });\r\n}\r\n\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the latest emmited\\\r\n * values of all inner Observers, in the order of the Observer array given,\\\r\n * when the inner Observer completes. All inner Observer must emmit a complete\\\r\n * message for the outer observer to emmit its value.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function all<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n next([...stream] as unknown as T);\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers, as they are completed,\\\r\n * in the order of the Observer array given. This streams all\\\r\n * inner Observer's latest values as they are individualy completed.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function partial<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.map((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n next([...stream] as unknown as T);\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n };\r\n });\r\n root.add(sub)\r\n })\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers. This streams all\\\r\n * inner Observer's latest values as they are individualy emmited.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function latest<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n next([...stream] as unknown as T);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers, in the order of the\\\r\n * Observer array given. When the previous Observer completes,\\\r\n * the next one is subscribed to, unsubscribing from the previous.\\\r\n * Once all inner Observers are completed, all values are emmited\\\r\n * by the outer Observer.\r\n * \r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function sequent<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const queue = [...observers];\r\n\r\n const mountNext = () => {\r\n let value: T[number];\r\n let obs = queue.shift();\r\n\r\n if (!obs) {\r\n root.unsubscribe();\r\n complete();\r\n return;\r\n }\r\n\r\n const sub = obs.subscribe((val) => {\r\n value = val;\r\n next(value);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n mountNext();\r\n });\r\n root.add(sub);\r\n };\r\n\r\n mountNext();\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that mirrors the first inner Observer\\\r\n * to emmit a value. All other Observers are ignored.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function race<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n let won = false;\r\n\r\n observers.forEach((obs) => {\r\n const sub = obs.subscribe((val) => {\r\n if (won) return;\r\n won = true;\r\n root.unsubscribe();\r\n next(val);\r\n complete();\r\n }, (err) => {\r\n if (won) return;\r\n won = true;\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n // a source completing with no emission doesn't win\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that merges the emmited values of the\\\r\n * inner Observers as a single stream.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function flat<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n next(val);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that merges the emmited values of the\\\r\n * inner Observers at the same index. The outer Observer waits\\\r\n * for a complete set before emmiting the values. If the inner\\\r\n * Observers \r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function zip<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const streams: unknown[][] = observers.map(() => []);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n const checkReady = () => {\r\n const min = Math.min(...streams.map((s) => s.length));\r\n if (min > 0) {\r\n next(streams.map((stream) => stream.shift()) as unknown as T);\r\n }\r\n };\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n streams[i].push(val);\r\n checkReady();\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\nconst isAllCompleted = (completed: boolean[]) => {\r\n return !completed.includes(false)\r\n}\r\n"],"mappings":"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","names":["Subscription","ObserverContext","timeout","Observer","Subject"]}
|
package/dist/index.mjs
CHANGED
|
@@ -341,7 +341,10 @@ var Subject = class Subject2 extends ObserverLike {
|
|
|
341
341
|
super();
|
|
342
342
|
this.value = initial;
|
|
343
343
|
}
|
|
344
|
-
next(
|
|
344
|
+
next(...values) {
|
|
345
|
+
let value;
|
|
346
|
+
if (values.length === 0) this._context.update();
|
|
347
|
+
if (Array.isArray(values)) value = values[0];
|
|
345
348
|
if (!this._context.active) return;
|
|
346
349
|
this.value = value;
|
|
347
350
|
this._context.update(value);
|
|
@@ -631,6 +634,7 @@ export {
|
|
|
631
634
|
Observer,
|
|
632
635
|
ObserverLike,
|
|
633
636
|
Subject,
|
|
637
|
+
Subscription,
|
|
634
638
|
all,
|
|
635
639
|
catchError,
|
|
636
640
|
debounce,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/subscription.ts","../src/context.ts","../src/pipes.ts","../src/observer.ts","../src/subject.ts","../src/utils.ts"],"sourcesContent":["import { ObserverRef, SubscriptionFunction } from \"./types\"\r\n\r\nexport interface Subscription<T> {\r\n ref: ObserverRef\r\n closed: boolean\r\n parents: Subscription<unknown>[] | null\r\n unsubscribe(): void\r\n add<U>(subscription: Subscription<U>): void\r\n remove<U>(subscription: Subscription<U>): void\r\n}\r\n\r\nexport type UnsubscribeHandler = () => boolean\r\nexport interface SubscriptionConstructor {\r\n new <T>(_unsubscribe?: UnsubscribeHandler): Subscription<T>\r\n}\r\n\r\nexport interface Subscribable<T> {\r\n subscribe: SubscriptionFunction<T>\r\n}\r\n\r\n\r\nexport const Subscription: SubscriptionConstructor = class Subscription<T> implements Subscription<T> {\r\n\r\n private _ref = crypto.randomUUID()\r\n private _linked: Subscription<unknown>[] = []\r\n private _parents: Subscription<unknown>[] | null = null\r\n private _closed = false\r\n\r\n constructor(private _unsubscribe: UnsubscribeHandler = () => true) { }\r\n\r\n public get ref() {\r\n return this._ref\r\n }\r\n\r\n public get closed() {\r\n return this._closed\r\n }\r\n\r\n public get parents() {\r\n return this._parents\r\n }\r\n\r\n public unsubscribe = () => {\r\n let error;\r\n\r\n if (!this._closed) {\r\n this._closed = true;\r\n\r\n const parents = this._parents;\r\n this._parents = null;\r\n if (parents) {\r\n for (let parent of parents) {\r\n parent.remove(this);\r\n }\r\n }\r\n\r\n try {\r\n if (!this._unsubscribe()) throw Error('Error occurred during unsubscription');\r\n } catch (err: any) {\r\n error = err;\r\n }\r\n\r\n const linked = this._linked;\r\n this._linked = [];\r\n\r\n for (let subscription of linked) {\r\n subscription.unsubscribe();\r\n }\r\n\r\n }\r\n\r\n if (error) throw error;\r\n }\r\n\r\n public add = <U>(subscription: Subscription<U>) => {\r\n if (subscription !== this) {\r\n if (this._closed) subscription.unsubscribe();\r\n else {\r\n if (subscription.closed || subscription.hasParent(this)) return;\r\n subscription.linkParent(this);\r\n this._linked.push(subscription);\r\n }\r\n }\r\n }\r\n\r\n public remove = <U>(subscription: Subscription<U>) => {\r\n if (subscription !== this) {\r\n const index = this._linked.indexOf(subscription);\r\n 0 <= index && this._linked.splice(index, 1);\r\n if (subscription.hasParent(this)) subscription.removeParent(this);\r\n }\r\n }\r\n\r\n private linkParent = <U>(subscription: Subscription<U>) => {\r\n if (!this._parents) this._parents = [];\r\n if (this.hasParent(subscription)) return;\r\n this._parents.push(subscription)\r\n }\r\n\r\n private removeParent = <U>(subscription: Subscription<U>) => {\r\n if (!Array.isArray(this._parents)) return;\r\n const index = this._parents.indexOf(subscription);\r\n 0 <= index && this._parents.splice(index, 1);\r\n if (this._parents.length === 0) this._parents = null;\r\n }\r\n\r\n private hasParent = <U>(subscription: Subscription<U>) => {\r\n return this._parents?.includes(subscription)\r\n }\r\n\r\n}\r\n\r\nexport default Subscription","import { ObserverTaskFunction, SubscriptionHandlers } from \"./types\"\r\n\r\nexport interface ObserverContext<T> {\r\n add(subscriber: SubscriptionHandlers<T>): () => boolean\r\n invoke(task: ObserverTaskFunction<T>): void\r\n update(value?: T): void\r\n error(value?: unknown): void\r\n complete(final?: T): void\r\n close(): void\r\n active: boolean\r\n invoked: boolean\r\n}\r\n\r\nexport interface ObserverContextConstructor {\r\n new <T>(): ObserverContext<T>\r\n}\r\n\r\nexport const ObserverContext: ObserverContextConstructor = class ObserverContext<T> implements ObserverContext<T> {\r\n\r\n private _invoked = false\r\n private _closed = false;\r\n private _teardown?: Function;\r\n private _subscribers = new Set<SubscriptionHandlers<T>>();\r\n public get active() { return !this._closed }\r\n public get invoked() { return this._invoked }\r\n\r\n constructor() { }\r\n\r\n private finalize() {\r\n if (this._teardown && typeof this._teardown === 'function') {\r\n this._teardown();\r\n }\r\n }\r\n\r\n public add(subscriber: SubscriptionHandlers<T>) {\r\n this._subscribers.add(subscriber)\r\n return () => {\r\n this._subscribers.delete(subscriber)\r\n if (this._subscribers.size === 0) {\r\n this.close();\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n public invoke(task: ObserverTaskFunction<T>) {\r\n this._invoked = true;\r\n this._teardown = task(this.update, this.error, this.complete)\r\n }\r\n\r\n public close() {\r\n if (!this.active) return;\r\n this._closed = true;\r\n this._subscribers.clear();\r\n this.finalize();\r\n }\r\n\r\n public update = (value?: T) => {\r\n if (!this.active) return;\r\n for (let { next } of this._subscribers.values()) {\r\n if (next || typeof next === 'function') {\r\n try {\r\n next(value!);\r\n } catch (error) {\r\n this.error(error)\r\n }\r\n }\r\n }\r\n }\r\n\r\n public error = (value?: unknown) => {\r\n if (!this.active) return;\r\n this._closed = true;\r\n const subscribers = [...this._subscribers.values()];\r\n this._subscribers.clear();\r\n for (let { error } of subscribers) {\r\n if (error || typeof error === 'function') {\r\n error(value);\r\n }\r\n }\r\n this.finalize();\r\n }\r\n\r\n public complete = (final?: T) => {\r\n if (!this.active) return;\r\n this._closed = true;\r\n const subscribers = [...this._subscribers.values()];\r\n this._subscribers.clear();\r\n for (let { complete } of subscribers) {\r\n if (complete || typeof complete === 'function') {\r\n complete(final);\r\n }\r\n }\r\n this.finalize();\r\n }\r\n}\r\n\r\nexport default { ObserverContext }","import { Observer } from \"./observer\";\r\nimport Subscription from \"./subscription\";\r\nimport { CatchUnknown, CompleteHandler, Flat, NextHandler, Pop } from \"./types\";\r\n\r\nexport type OperatorFunction<T, R> = (source: Observer<T>) => Observer<R>;\r\n\r\nexport function map<T, R>(fn: (value: T) => R): OperatorFunction<T, R> {\r\n return (source: Observer<T>) => new Observer<R>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => next(fn(val)),\r\n error,\r\n complete as unknown as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function filter<T>(predicate: (value: T) => boolean): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => { if (predicate(val)) next(val); },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function tap<T>(fn: (value: T) => void): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => { fn(val); next(val); },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function catchError<T>(handler: (err: any) => Observer<T>): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n let inner: Subscription<T> | null = null;\r\n const outerSub = source.subscribe(\r\n next as NextHandler<T>,\r\n (err: any) => {\r\n const fallback = handler(err);\r\n inner = fallback.subscribe(next as NextHandler<T>, error, complete as CompleteHandler<T>);\r\n },\r\n complete as CompleteHandler<T>\r\n );\r\n\r\n return () => {\r\n outerSub.unsubscribe();\r\n inner?.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function retry<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const onError = (err: any) => {\r\n if (count <= 0) {\r\n error(err);\r\n return;\r\n }\r\n count--;\r\n inner = source.subscribe(next as NextHandler<T>, onError, complete as CompleteHandler<T>);\r\n }\r\n let inner: Subscription<T> | null = null;\r\n const outerSub = source.subscribe(\r\n next as NextHandler<T>,\r\n onError,\r\n complete as CompleteHandler<T>\r\n );\r\n\r\n return () => {\r\n outerSub.unsubscribe();\r\n inner?.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function take<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (count < 0) return;\r\n if (count === 0) complete();\r\n count--;\r\n next(val as CatchUnknown<T>);\r\n },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function takeUntil<T>(notifier: Observer<T>): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const notification = notifier.subscribe(() => complete())\r\n const sub = source.subscribe(\r\n (val) => next(val as CatchUnknown<T>),\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => {\r\n sub.unsubscribe();\r\n notification.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function skip<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (count > 0) {\r\n count--;\r\n return\r\n };\r\n next(val as CatchUnknown<T>);\r\n },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function debounce<T>(value: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n let timeout: any;\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (timeout) clearTimeout(timeout);\r\n\r\n timeout = setTimeout(() => {\r\n next(val as CatchUnknown<T>);\r\n }, value);\r\n },\r\n (err) => {\r\n clearTimeout(timeout);\r\n error(err)\r\n },\r\n () => {\r\n clearTimeout(timeout);\r\n complete()\r\n }\r\n );\r\n return () => { clearTimeout(timeout); sub.unsubscribe(); }\r\n });\r\n}\r\n\r\nexport function toPipe<T, R>(operators: OperatorFunction<T, R>[]): OperatorFunction<T, R> {\r\n if (operators.length === 0) return (<T>(x: T): T => x) as OperatorFunction<T, R>;\r\n if (operators.length === 1) return operators[0] as OperatorFunction<T, R>;\r\n return (source: Observer<any>): Observer<R> => {\r\n return operators.reduce((a, f) => f(a), source as Observer<any>);\r\n }\r\n}\r\n\r\ntype OpArgs<T, Args extends readonly unknown[]> = Flat<OpChain<Pop<[T, ...Args]>, Args>>\r\ntype OpChain<A extends readonly unknown[], B extends readonly unknown[]> = {\r\n [K in keyof A]: K extends keyof B ? [op: OperatorFunction<A[K], B[K]>] : never;\r\n};\r\n\r\nexport interface Pipeable<T> {\r\n pipe(): Observer<T>;\r\n pipe<A>(...args: OpArgs<T, [A]>): Observer<A>;\r\n pipe<A, B>(...args: OpArgs<T, [A, B]>): Observer<B>;\r\n pipe<A, B, C>(...args: OpArgs<T, [A, B, C]>): Observer<C>;\r\n pipe<A, B, C, D>(...args: OpArgs<T, [A, B, C, D]>): Observer<D>;\r\n pipe<A, B, C, D, E>(...args: OpArgs<T, [A, B, C, D, E]>): Observer<E>;\r\n pipe<A, B, C, D, E, F>(...args: OpArgs<T, [A, B, C, D, E, F]>): Observer<F>;\r\n pipe<A, B, C, D, E, F, G>(...args: OpArgs<T, [A, B, C, D, E, F, G]>): Observer<G>;\r\n pipe<A, B, C, D, E, F, G, H>(...args: OpArgs<T, [A, B, C, D, E, F, G, H]>): Observer<H>;\r\n pipe<A, B, C, D, E, F, G, H, I>(...args: OpArgs<T, [A, B, C, D, E, F, G, H, I]>): Observer<I>;\r\n pipe<A, B, C, D, E, F, G, H, I>(\r\n op1: OperatorFunction<T, A>,\r\n op2: OperatorFunction<A, B>,\r\n op3: OperatorFunction<B, C>,\r\n op4: OperatorFunction<C, D>,\r\n op5: OperatorFunction<D, E>,\r\n op6: OperatorFunction<E, F>,\r\n op7: OperatorFunction<F, G>,\r\n op8: OperatorFunction<G, H>,\r\n op9: OperatorFunction<H, I>,\r\n ...operations: OperatorFunction<any, any>[]\r\n ): Observer<unknown>;\r\n pipe(...operators: OperatorFunction<any, any>[]): Observer<any>;\r\n}","import { Subscribable, Subscription } from \"./subscription\";\r\nimport { ObserverContext } from \"./context\";\r\nimport { OperatorFunction, Pipeable, toPipe } from \"./pipes\";\r\nimport {\r\n ObserverTaskFunction,\r\n NextHandler,\r\n ErrorHandler,\r\n CompleteHandler,\r\n} from \"./types\";\r\n\r\nexport interface Observer<T> extends Subscribable<T>, Pipeable<T> { }\r\nexport interface ObserverConstructor {\r\n new <T extends any = never>(context: ObserverTaskFunction<T>): Observer<T>\r\n}\r\n\r\nexport class ObserverLike<T> {\r\n readonly ref = crypto.randomUUID()\r\n protected _context: ObserverContext<T> = new ObserverContext<T>();\r\n public get closed() {\r\n return !this._context.active\r\n }\r\n}\r\n\r\nexport const Observer: ObserverConstructor = class Observer<T> extends ObserverLike<T> implements Observer<T> {\r\n\r\n constructor(private task: ObserverTaskFunction<T>) {\r\n super();\r\n }\r\n\r\n public close() {\r\n if (!this._context.active) return;\r\n this._context.close();\r\n }\r\n\r\n public subscribe(next: NextHandler<T>, error?: ErrorHandler, complete?: CompleteHandler<T>) {\r\n if (!this._context.active) this._context = new ObserverContext();\r\n const teardown = this._context.add({ next, error, complete });\r\n if (!this._context.invoked) this._context.invoke(this.task);\r\n return new Subscription(teardown);\r\n }\r\n\r\n public pipe(...operators: OperatorFunction<any, any>[]) {\r\n return toPipe(operators)(this);\r\n }\r\n}\r\n\r\nexport default { Observer }","\r\nimport { Observer, ObserverLike } from \"./observer\";\r\nimport { Subscribable, Subscription } from \"./subscription\";\r\nimport { CompleteHandler, ErrorHandler, NextHandler } from \"./types\";\r\n\r\nexport interface Subject<T> extends Subscribable<T> {\r\n close(): void\r\n next(value: T): void\r\n error(value: any): void\r\n complete(final?: T): void\r\n asObservable(): Observer<T>\r\n}\r\n\r\nexport interface SubjectConstructor {\r\n new <T extends any = never>(initial?: T): Subject<T>\r\n}\r\n\r\nexport const Subject: SubjectConstructor = class Subject<T> extends ObserverLike<T> implements Subject<T> {\r\n\r\n private value?: T;\r\n private terminal?: { type: 'error'; value: any } | { type: 'complete'; value?: T };\r\n\r\n constructor(initial?: T) {\r\n super()\r\n this.value = initial\r\n }\r\n\r\n public next(value: T) {\r\n if (!this._context.active) return;\r\n this.value = value;\r\n this._context.update(value);\r\n }\r\n\r\n public error(value: any) {\r\n if (!this._context.active) return;\r\n this.terminal = { type: 'error', value };\r\n this._context.error(value);\r\n }\r\n\r\n public complete(final?: T) {\r\n if (!this._context.active) return;\r\n this.terminal = { type: 'complete', value: final };\r\n this._context.complete(final);\r\n }\r\n\r\n public close() {\r\n if (!this._context.active) return;\r\n this.terminal = { type: \"complete\", value: void 0 };\r\n this._context.close();\r\n }\r\n\r\n public asObservable(): Observer<T> {\r\n return new Observer<T>((next, error, complete) => {\r\n const sub = this.subscribe(next, error, complete);\r\n return () => sub.unsubscribe();\r\n });\r\n }\r\n\r\n public subscribe(next: NextHandler<T>, error?: ErrorHandler, complete?: CompleteHandler<T>) {\r\n if (this.terminal) {\r\n if (this.terminal.type === 'error') error?.(this.terminal.value);\r\n else complete?.(this.terminal.value);\r\n return new Subscription<T>(() => true);\r\n }\r\n\r\n const sub = new Subscription<T>(this._context.add({ next, error, complete }));\r\n if (this.value !== undefined) next(this.value);\r\n return sub;\r\n }\r\n}\r\n\r\nexport default Subject\r\n","import { Observer } from \"./observer\";\r\nimport Subscription from \"./subscription\";\r\nimport { CatchUnknown, extractInputTuple, ObserverTaskFunction } from \"./types\";\r\n\r\nexport function of(value?: undefined): Observer<undefined>\r\nexport function of(value: null): Observer<null>\r\nexport function of<T>(...args: CatchUnknown<T>[]): Observer<T>\r\nexport function of<T>(...args: CatchUnknown<T>[]) {\r\n return new Observer<T>((next, _, complete) => {\r\n for (let item of args) {\r\n next(item)\r\n }\r\n complete()\r\n })\r\n}\r\n\r\nexport function timeout<T>(value: T, delay: number | undefined = 0) {\r\n return new Observer<T>((next, _, complete) => {\r\n const t = setTimeout(() => { next(value); complete(); }, delay);\r\n return () => clearTimeout(t);\r\n });\r\n}\r\n\r\nexport function interval(delay: number | undefined = 0) {\r\n return new Observer<number>((next) => {\r\n let count = 0;\r\n const t = setInterval(() => next(count++), delay);\r\n return () => clearInterval(t);\r\n });\r\n}\r\n\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the latest emmited\\\r\n * values of all inner Observers, in the order of the Observer array given,\\\r\n * when the inner Observer completes. All inner Observer must emmit a complete\\\r\n * message for the outer observer to emmit its value.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function all<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n next([...stream] as unknown as T);\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers, as they are completed,\\\r\n * in the order of the Observer array given. This streams all\\\r\n * inner Observer's latest values as they are individualy completed.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function partial<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.map((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n next([...stream] as unknown as T);\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n };\r\n });\r\n root.add(sub)\r\n })\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers. This streams all\\\r\n * inner Observer's latest values as they are individualy emmited.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function latest<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n next([...stream] as unknown as T);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers, in the order of the\\\r\n * Observer array given. When the previous Observer completes,\\\r\n * the next one is subscribed to, unsubscribing from the previous.\\\r\n * Once all inner Observers are completed, all values are emmited\\\r\n * by the outer Observer.\r\n * \r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function sequent<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const queue = [...observers];\r\n\r\n const mountNext = () => {\r\n let value: T[number];\r\n let obs = queue.shift();\r\n\r\n if (!obs) {\r\n root.unsubscribe();\r\n complete();\r\n return;\r\n }\r\n\r\n const sub = obs.subscribe((val) => {\r\n value = val;\r\n next(value);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n mountNext();\r\n });\r\n root.add(sub);\r\n };\r\n\r\n mountNext();\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that mirrors the first inner Observer\\\r\n * to emmit a value. All other Observers are ignored.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function race<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n let won = false;\r\n\r\n observers.forEach((obs) => {\r\n const sub = obs.subscribe((val) => {\r\n if (won) return;\r\n won = true;\r\n root.unsubscribe();\r\n next(val);\r\n complete();\r\n }, (err) => {\r\n if (won) return;\r\n won = true;\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n // a source completing with no emission doesn't win\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that merges the emmited values of the\\\r\n * inner Observers as a single stream.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function flat<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n next(val);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that merges the emmited values of the\\\r\n * inner Observers at the same index. The outer Observer waits\\\r\n * for a complete set before emmiting the values. If the inner\\\r\n * Observers \r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function zip<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const streams: unknown[][] = observers.map(() => []);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n const checkReady = () => {\r\n const min = Math.min(...streams.map((s) => s.length));\r\n if (min > 0) {\r\n next(streams.map((stream) => stream.shift()) as unknown as T);\r\n }\r\n };\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n streams[i].push(val);\r\n checkReady();\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\nconst isAllCompleted = (completed: boolean[]) => {\r\n return !completed.includes(false)\r\n}\r\n"],"mappings":"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","names":["Subscription","ObserverContext","timeout","Observer","Subject"]}
|
|
1
|
+
{"version":3,"sources":["../src/subscription.ts","../src/context.ts","../src/pipes.ts","../src/observer.ts","../src/subject.ts","../src/utils.ts"],"sourcesContent":["import { ObserverRef, SubscriptionFunction, UnsubscribeHandler } from \"./types\"\r\n\r\nexport interface Subscription<T> {\r\n ref: ObserverRef\r\n closed: boolean\r\n parents: Subscription<unknown>[] | null\r\n unsubscribe(): void\r\n add<U>(subscription: Subscription<U>): void\r\n remove<U>(subscription: Subscription<U>): void\r\n}\r\n\r\nexport interface SubscriptionConstructor {\r\n new <T>(_unsubscribe?: UnsubscribeHandler): Subscription<T>\r\n}\r\n\r\nexport interface Subscribable<T> {\r\n subscribe: SubscriptionFunction<T>\r\n}\r\n\r\n\r\nexport const Subscription: SubscriptionConstructor = class Subscription<T> implements Subscription<T> {\r\n\r\n private _ref = crypto.randomUUID()\r\n private _linked: Subscription<unknown>[] = []\r\n private _parents: Subscription<unknown>[] | null = null\r\n private _closed = false\r\n\r\n constructor(private _unsubscribe: UnsubscribeHandler = () => true) { }\r\n\r\n public get ref() {\r\n return this._ref\r\n }\r\n\r\n public get closed() {\r\n return this._closed\r\n }\r\n\r\n public get parents() {\r\n return this._parents\r\n }\r\n\r\n public unsubscribe = () => {\r\n let error;\r\n\r\n if (!this._closed) {\r\n this._closed = true;\r\n\r\n const parents = this._parents;\r\n this._parents = null;\r\n if (parents) {\r\n for (let parent of parents) {\r\n parent.remove(this);\r\n }\r\n }\r\n\r\n try {\r\n if (!this._unsubscribe()) throw Error('Error occurred during unsubscription');\r\n } catch (err: any) {\r\n error = err;\r\n }\r\n\r\n const linked = this._linked;\r\n this._linked = [];\r\n\r\n for (let subscription of linked) {\r\n subscription.unsubscribe();\r\n }\r\n\r\n }\r\n\r\n if (error) throw error;\r\n }\r\n\r\n public add = <U>(subscription: Subscription<U>) => {\r\n if (subscription !== this) {\r\n if (this._closed) subscription.unsubscribe();\r\n else {\r\n if (subscription.closed || subscription.hasParent(this)) return;\r\n subscription.linkParent(this);\r\n this._linked.push(subscription);\r\n }\r\n }\r\n }\r\n\r\n public remove = <U>(subscription: Subscription<U>) => {\r\n if (subscription !== this) {\r\n const index = this._linked.indexOf(subscription);\r\n 0 <= index && this._linked.splice(index, 1);\r\n if (subscription.hasParent(this)) subscription.removeParent(this);\r\n }\r\n }\r\n\r\n private linkParent = <U>(subscription: Subscription<U>) => {\r\n if (!this._parents) this._parents = [];\r\n if (this.hasParent(subscription)) return;\r\n this._parents.push(subscription)\r\n }\r\n\r\n private removeParent = <U>(subscription: Subscription<U>) => {\r\n if (!Array.isArray(this._parents)) return;\r\n const index = this._parents.indexOf(subscription);\r\n 0 <= index && this._parents.splice(index, 1);\r\n if (this._parents.length === 0) this._parents = null;\r\n }\r\n\r\n private hasParent = <U>(subscription: Subscription<U>) => {\r\n return this._parents?.includes(subscription)\r\n }\r\n\r\n}\r\n\r\nexport default Subscription","import { ObserverTaskFunction, SubscriptionHandlers } from \"./types\"\r\n\r\nexport interface ObserverContext<T> {\r\n add(subscriber: SubscriptionHandlers<T>): () => boolean\r\n invoke(task: ObserverTaskFunction<T>): void\r\n update(value?: T): void\r\n error(value?: unknown): void\r\n complete(final?: T): void\r\n close(): void\r\n active: boolean\r\n invoked: boolean\r\n}\r\n\r\nexport interface ObserverContextConstructor {\r\n new <T>(): ObserverContext<T>\r\n}\r\n\r\nexport const ObserverContext: ObserverContextConstructor = class ObserverContext<T> implements ObserverContext<T> {\r\n\r\n private _invoked = false\r\n private _closed = false;\r\n private _teardown?: Function;\r\n private _subscribers = new Set<SubscriptionHandlers<T>>();\r\n public get active() { return !this._closed }\r\n public get invoked() { return this._invoked }\r\n\r\n constructor() { }\r\n\r\n private finalize() {\r\n if (this._teardown && typeof this._teardown === 'function') {\r\n this._teardown();\r\n }\r\n }\r\n\r\n public add(subscriber: SubscriptionHandlers<T>) {\r\n this._subscribers.add(subscriber)\r\n return () => {\r\n this._subscribers.delete(subscriber)\r\n if (this._subscribers.size === 0) {\r\n this.close();\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n public invoke(task: ObserverTaskFunction<T>) {\r\n this._invoked = true;\r\n this._teardown = task(this.update, this.error, this.complete)\r\n }\r\n\r\n public close() {\r\n if (!this.active) return;\r\n this._closed = true;\r\n this._subscribers.clear();\r\n this.finalize();\r\n }\r\n\r\n public update = (value?: T) => {\r\n if (!this.active) return;\r\n for (let { next } of this._subscribers.values()) {\r\n if (next || typeof next === 'function') {\r\n try {\r\n next(value!);\r\n } catch (error) {\r\n this.error(error)\r\n }\r\n }\r\n }\r\n }\r\n\r\n public error = (value?: unknown) => {\r\n if (!this.active) return;\r\n this._closed = true;\r\n const subscribers = [...this._subscribers.values()];\r\n this._subscribers.clear();\r\n for (let { error } of subscribers) {\r\n if (error || typeof error === 'function') {\r\n error(value);\r\n }\r\n }\r\n this.finalize();\r\n }\r\n\r\n public complete = (final?: T) => {\r\n if (!this.active) return;\r\n this._closed = true;\r\n const subscribers = [...this._subscribers.values()];\r\n this._subscribers.clear();\r\n for (let { complete } of subscribers) {\r\n if (complete || typeof complete === 'function') {\r\n complete(final);\r\n }\r\n }\r\n this.finalize();\r\n }\r\n}\r\n\r\nexport default { ObserverContext }","import { Observer } from \"./observer\";\r\nimport Subscription from \"./subscription\";\r\nimport { CatchUnknown, CompleteHandler, Flat, NextHandler, Pop } from \"./types\";\r\n\r\nexport type OperatorFunction<T, R> = (source: Observer<T>) => Observer<R>;\r\n\r\nexport function map<T, R>(fn: (value: T) => R): OperatorFunction<T, R> {\r\n return (source: Observer<T>) => new Observer<R>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => next(fn(val)),\r\n error,\r\n complete as unknown as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function filter<T>(predicate: (value: T) => boolean): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => { if (predicate(val)) next(val); },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function tap<T>(fn: (value: T) => void): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => { fn(val); next(val); },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function catchError<T>(handler: (err: any) => Observer<T>): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n let inner: Subscription<T> | null = null;\r\n const outerSub = source.subscribe(\r\n next as NextHandler<T>,\r\n (err: any) => {\r\n const fallback = handler(err);\r\n inner = fallback.subscribe(next as NextHandler<T>, error, complete as CompleteHandler<T>);\r\n },\r\n complete as CompleteHandler<T>\r\n );\r\n\r\n return () => {\r\n outerSub.unsubscribe();\r\n inner?.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function retry<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const onError = (err: any) => {\r\n if (count <= 0) {\r\n error(err);\r\n return;\r\n }\r\n count--;\r\n inner = source.subscribe(next as NextHandler<T>, onError, complete as CompleteHandler<T>);\r\n }\r\n let inner: Subscription<T> | null = null;\r\n const outerSub = source.subscribe(\r\n next as NextHandler<T>,\r\n onError,\r\n complete as CompleteHandler<T>\r\n );\r\n\r\n return () => {\r\n outerSub.unsubscribe();\r\n inner?.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function take<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (count < 0) return;\r\n if (count === 0) complete();\r\n count--;\r\n next(val as CatchUnknown<T>);\r\n },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function takeUntil<T>(notifier: Observer<T>): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const notification = notifier.subscribe(() => complete())\r\n const sub = source.subscribe(\r\n (val) => next(val as CatchUnknown<T>),\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => {\r\n sub.unsubscribe();\r\n notification.unsubscribe();\r\n };\r\n });\r\n}\r\n\r\nexport function skip<T>(count: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (count > 0) {\r\n count--;\r\n return\r\n };\r\n next(val as CatchUnknown<T>);\r\n },\r\n error,\r\n complete as CompleteHandler<T>\r\n );\r\n return () => sub.unsubscribe();\r\n });\r\n}\r\n\r\nexport function debounce<T>(value: number): OperatorFunction<T, T> {\r\n return (source: Observer<T>) => new Observer<T>((next, error, complete) => {\r\n let timeout: any;\r\n const sub = source.subscribe(\r\n (val) => {\r\n if (timeout) clearTimeout(timeout);\r\n\r\n timeout = setTimeout(() => {\r\n next(val as CatchUnknown<T>);\r\n }, value);\r\n },\r\n (err) => {\r\n clearTimeout(timeout);\r\n error(err)\r\n },\r\n () => {\r\n clearTimeout(timeout);\r\n complete()\r\n }\r\n );\r\n return () => { clearTimeout(timeout); sub.unsubscribe(); }\r\n });\r\n}\r\n\r\nexport function toPipe<T, R>(operators: OperatorFunction<T, R>[]): OperatorFunction<T, R> {\r\n if (operators.length === 0) return (<T>(x: T): T => x) as OperatorFunction<T, R>;\r\n if (operators.length === 1) return operators[0] as OperatorFunction<T, R>;\r\n return (source: Observer<any>): Observer<R> => {\r\n return operators.reduce((a, f) => f(a), source as Observer<any>);\r\n }\r\n}\r\n\r\ntype OpArgs<T, Args extends readonly unknown[]> = Flat<OpChain<Pop<[T, ...Args]>, Args>>\r\ntype OpChain<A extends readonly unknown[], B extends readonly unknown[]> = {\r\n [K in keyof A]: K extends keyof B ? [op: OperatorFunction<A[K], B[K]>] : never;\r\n};\r\n\r\nexport interface Pipeable<T> {\r\n pipe(): Observer<T>;\r\n pipe<A>(...args: OpArgs<T, [A]>): Observer<A>;\r\n pipe<A, B>(...args: OpArgs<T, [A, B]>): Observer<B>;\r\n pipe<A, B, C>(...args: OpArgs<T, [A, B, C]>): Observer<C>;\r\n pipe<A, B, C, D>(...args: OpArgs<T, [A, B, C, D]>): Observer<D>;\r\n pipe<A, B, C, D, E>(...args: OpArgs<T, [A, B, C, D, E]>): Observer<E>;\r\n pipe<A, B, C, D, E, F>(...args: OpArgs<T, [A, B, C, D, E, F]>): Observer<F>;\r\n pipe<A, B, C, D, E, F, G>(...args: OpArgs<T, [A, B, C, D, E, F, G]>): Observer<G>;\r\n pipe<A, B, C, D, E, F, G, H>(...args: OpArgs<T, [A, B, C, D, E, F, G, H]>): Observer<H>;\r\n pipe<A, B, C, D, E, F, G, H, I>(...args: OpArgs<T, [A, B, C, D, E, F, G, H, I]>): Observer<I>;\r\n pipe<A, B, C, D, E, F, G, H, I>(\r\n op1: OperatorFunction<T, A>,\r\n op2: OperatorFunction<A, B>,\r\n op3: OperatorFunction<B, C>,\r\n op4: OperatorFunction<C, D>,\r\n op5: OperatorFunction<D, E>,\r\n op6: OperatorFunction<E, F>,\r\n op7: OperatorFunction<F, G>,\r\n op8: OperatorFunction<G, H>,\r\n op9: OperatorFunction<H, I>,\r\n ...operations: OperatorFunction<any, any>[]\r\n ): Observer<unknown>;\r\n pipe(...operators: OperatorFunction<any, any>[]): Observer<any>;\r\n}","import { Subscribable, Subscription } from \"./subscription\";\r\nimport { ObserverContext } from \"./context\";\r\nimport { OperatorFunction, Pipeable, toPipe } from \"./pipes\";\r\nimport {\r\n ObserverTaskFunction,\r\n NextHandler,\r\n ErrorHandler,\r\n CompleteHandler,\r\n} from \"./types\";\r\n\r\nexport interface Observer<T> extends Subscribable<T>, Pipeable<T> { }\r\nexport interface ObserverConstructor {\r\n new <T extends any = never>(context: ObserverTaskFunction<T>): Observer<T>\r\n}\r\n\r\nexport class ObserverLike<T> {\r\n readonly ref = crypto.randomUUID()\r\n protected _context: ObserverContext<T> = new ObserverContext<T>();\r\n public get closed() {\r\n return !this._context.active\r\n }\r\n}\r\n\r\nexport const Observer: ObserverConstructor = class Observer<T> extends ObserverLike<T> implements Observer<T> {\r\n\r\n constructor(private task: ObserverTaskFunction<T>) {\r\n super();\r\n }\r\n\r\n public close() {\r\n if (!this._context.active) return;\r\n this._context.close();\r\n }\r\n\r\n public subscribe(next: NextHandler<T>, error?: ErrorHandler, complete?: CompleteHandler<T>) {\r\n if (!this._context.active) this._context = new ObserverContext();\r\n const teardown = this._context.add({ next, error, complete });\r\n if (!this._context.invoked) this._context.invoke(this.task);\r\n return new Subscription(teardown);\r\n }\r\n\r\n public pipe(...operators: OperatorFunction<any, any>[]) {\r\n return toPipe(operators)(this);\r\n }\r\n}\r\n\r\nexport default { Observer }","\r\nimport { Observer, ObserverLike } from \"./observer\";\r\nimport { Subscribable, Subscription } from \"./subscription\";\r\nimport { CompleteHandler, ErrorHandler, NextHandler } from \"./types\";\r\n\r\ntype gaurdNever<T> = false extends isNever<T> ? [value: T] : [];\r\ntype isNever<T> = T extends never ? true : false;\r\n\r\nexport interface Subject<T> extends Subscribable<T> {\r\n close(): void\r\n next(...values: gaurdNever<T>): void;\r\n error(value?: any): void\r\n complete(final?: T): void\r\n asObservable(): Observer<T>\r\n}\r\n\r\nexport interface SubjectConstructor {\r\n new <T extends any = never>(initial?: T): Subject<T>\r\n}\r\n\r\nexport const Subject: SubjectConstructor = class Subject<T> extends ObserverLike<T> implements Subject<T> {\r\n\r\n private value?: T;\r\n private terminal?: { type: 'error'; value: any } | { type: 'complete'; value?: T };\r\n\r\n constructor(initial?: T) {\r\n super()\r\n this.value = initial\r\n }\r\n\r\n public next(...values: gaurdNever<T>) {\r\n let value;\r\n if (values.length === 0) this._context.update();\r\n if (Array.isArray(values)) value = values[0];\r\n if (!this._context.active) return;\r\n this.value = value;\r\n this._context.update(value);\r\n }\r\n\r\n public error(value?: any) {\r\n if (!this._context.active) return;\r\n this.terminal = { type: 'error', value };\r\n this._context.error(value);\r\n }\r\n\r\n public complete(final?: T) {\r\n if (!this._context.active) return;\r\n this.terminal = { type: 'complete', value: final };\r\n this._context.complete(final);\r\n }\r\n\r\n public close() {\r\n if (!this._context.active) return;\r\n this.terminal = { type: \"complete\", value: void 0 };\r\n this._context.close();\r\n }\r\n\r\n public asObservable(): Observer<T> {\r\n return new Observer<T>((next, error, complete) => {\r\n const sub = this.subscribe(next, error, complete);\r\n return () => sub.unsubscribe();\r\n });\r\n }\r\n\r\n public subscribe(next: NextHandler<T>, error?: ErrorHandler, complete?: CompleteHandler<T>) {\r\n if (this.terminal) {\r\n if (this.terminal.type === 'error') error?.(this.terminal.value);\r\n else complete?.(this.terminal.value);\r\n return new Subscription<T>(() => true);\r\n }\r\n\r\n const sub = new Subscription<T>(this._context.add({ next, error, complete }));\r\n if (this.value !== undefined) next(this.value);\r\n return sub;\r\n }\r\n}\r\n\r\n\r\nexport default Subject\r\n","import { Observer } from \"./observer\";\r\nimport Subscription from \"./subscription\";\r\nimport { CatchUnknown, extractInputTuple, ObserverTaskFunction } from \"./types\";\r\n\r\nexport function of(value?: undefined): Observer<undefined>\r\nexport function of(value: null): Observer<null>\r\nexport function of<T>(...args: CatchUnknown<T>[]): Observer<T>\r\nexport function of<T>(...args: CatchUnknown<T>[]) {\r\n return new Observer<T>((next, _, complete) => {\r\n for (let item of args) {\r\n next(item)\r\n }\r\n complete()\r\n })\r\n}\r\n\r\nexport function timeout<T>(value: T, delay: number | undefined = 0) {\r\n return new Observer<T>((next, _, complete) => {\r\n const t = setTimeout(() => { next(value); complete(); }, delay);\r\n return () => clearTimeout(t);\r\n });\r\n}\r\n\r\nexport function interval(delay: number | undefined = 0) {\r\n return new Observer<number>((next) => {\r\n let count = 0;\r\n const t = setInterval(() => next(count++), delay);\r\n return () => clearInterval(t);\r\n });\r\n}\r\n\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the latest emmited\\\r\n * values of all inner Observers, in the order of the Observer array given,\\\r\n * when the inner Observer completes. All inner Observer must emmit a complete\\\r\n * message for the outer observer to emmit its value.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function all<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n next([...stream] as unknown as T);\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers, as they are completed,\\\r\n * in the order of the Observer array given. This streams all\\\r\n * inner Observer's latest values as they are individualy completed.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function partial<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.map((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n next([...stream] as unknown as T);\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n };\r\n });\r\n root.add(sub)\r\n })\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers. This streams all\\\r\n * inner Observer's latest values as they are individualy emmited.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function latest<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const stream: unknown[] = Array(observers.length);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n stream[i] = val;\r\n next([...stream] as unknown as T);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that emits an array containing the\\\r\n * emmited values of all inner Observers, in the order of the\\\r\n * Observer array given. When the previous Observer completes,\\\r\n * the next one is subscribed to, unsubscribing from the previous.\\\r\n * Once all inner Observers are completed, all values are emmited\\\r\n * by the outer Observer.\r\n * \r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function sequent<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const queue = [...observers];\r\n\r\n const mountNext = () => {\r\n let value: T[number];\r\n let obs = queue.shift();\r\n\r\n if (!obs) {\r\n root.unsubscribe();\r\n complete();\r\n return;\r\n }\r\n\r\n const sub = obs.subscribe((val) => {\r\n value = val;\r\n next(value);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n mountNext();\r\n });\r\n root.add(sub);\r\n };\r\n\r\n mountNext();\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that mirrors the first inner Observer\\\r\n * to emmit a value. All other Observers are ignored.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function race<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n let won = false;\r\n\r\n observers.forEach((obs) => {\r\n const sub = obs.subscribe((val) => {\r\n if (won) return;\r\n won = true;\r\n root.unsubscribe();\r\n next(val);\r\n complete();\r\n }, (err) => {\r\n if (won) return;\r\n won = true;\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n // a source completing with no emission doesn't win\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that merges the emmited values of the\\\r\n * inner Observers as a single stream.\r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\n\r\nexport function flat<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T[number]> {\r\n\r\n const task: ObserverTaskFunction<T[number]> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n next(val);\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T[number]>(task);\r\n}\r\n\r\n/**\r\n * Returns an Observer that merges the emmited values of the\\\r\n * inner Observers at the same index. The outer Observer waits\\\r\n * for a complete set before emmiting the values. If the inner\\\r\n * Observers \r\n * \r\n * @param observers Observer array\r\n * @returns An Observer that subscribes to all inner Observers\r\n */\r\nexport function zip<T extends readonly unknown[]>(\r\n observers: extractInputTuple<T>\r\n): Observer<T> {\r\n\r\n const task: ObserverTaskFunction<T> = (next, error, complete) => {\r\n if (observers.length === 0) {\r\n next([] as unknown as T);\r\n complete();\r\n return () => { };\r\n }\r\n\r\n const root = new Subscription();\r\n const streams: unknown[][] = observers.map(() => []);\r\n const completed: boolean[] = Array(observers.length).fill(false);\r\n\r\n const checkReady = () => {\r\n const min = Math.min(...streams.map((s) => s.length));\r\n if (min > 0) {\r\n next(streams.map((stream) => stream.shift()) as unknown as T);\r\n }\r\n };\r\n\r\n observers.forEach((obs, i) => {\r\n const sub = obs.subscribe((val) => {\r\n streams[i].push(val);\r\n checkReady();\r\n }, (err) => {\r\n root.unsubscribe();\r\n error(err);\r\n }, () => {\r\n completed[i] = true;\r\n if (isAllCompleted(completed)) {\r\n root.unsubscribe();\r\n complete();\r\n }\r\n });\r\n root.add(sub);\r\n });\r\n\r\n return () => root.unsubscribe();\r\n };\r\n\r\n return new Observer<T>(task);\r\n}\r\n\r\nconst isAllCompleted = (completed: boolean[]) => {\r\n return !completed.includes(false)\r\n}\r\n"],"mappings":"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","names":["Subscription","ObserverContext","timeout","Observer","Subject"]}
|