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 CHANGED
@@ -1,103 +1,149 @@
1
1
  # Simply Observe
2
2
 
3
- A lightweight, dependency-free reactive primitives library for TypeScript/JavaScript `Observer`, `Subject`, and a set of combinators for working with streams of values over time.
4
-
5
- Inspired by RxJS, built from scratch with a smaller surface area and no external dependencies.
6
-
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
- Static methods on `Observer` for combining multiple sources. Each accepts an array of `Observer`s and, where sources have different value types, infers a tuple so per-position types are preserved (`Observer.all([numberObs, stringObs])` returns `Observer<[number, string]>`, not `Observer<number | string>`).
61
-
62
- | Method | Behavior |
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
- | `Observer.all(observers)` | Waits for every source to complete, then emits one array of their final values. |
65
- | `Observer.partial(observers)` | Emits a snapshot array after each individual source completes. |
66
- | `Observer.latest(observers)` | Emits an updated array every time any source emits (`combineLatest`-style, may include `undefined` for sources that haven't emitted yet). |
67
- | `Observer.zip(observers)` | Pairs values positionally — emits once every source has produced a value at that index. |
68
- | `Observer.sequent(observers)` | Subscribes to sources one at a time, in order, emitting each one's value as it completes before moving to the next. |
69
- | `Observer.race(observers)` | Mirrors whichever source emits or errors first; all others are unsubscribed. |
70
- | `Observer.flat(observers)` | Merges all sources into a single stream, emitting values as they arrive from any source. |
71
-
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 { Observer, of } from 'simply-observe';
74
-
75
- Observer.zip([of(1, 2, 3), of('a', 'b', 'c')]).subscribe((pair) => {
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
- ## `of(...)`
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$1 = () => boolean;
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(value: T): void;
109
- error(value: any): void;
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$1 as UnsubscribeHandler, type UpdateDispatcher, all, catchError, debounce, type extractInputTuple, type extractType, type extractUnknown, filter, flat, interval, latest, map, of, partial, race, retry, sequent, skip, take, takeUntil, tap, timeout, toPipe, zip };
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$1 = () => boolean;
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(value: T): void;
109
- error(value: any): void;
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$1 as UnsubscribeHandler, type UpdateDispatcher, all, catchError, debounce, type extractInputTuple, type extractType, type extractUnknown, filter, flat, interval, latest, map, of, partial, race, retry, sequent, skip, take, takeUntil, tap, timeout, toPipe, zip };
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(value) {
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(value) {
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,
@@ -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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "simply-observe",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "A lightweight, dependency-free reactive primitives library for TypeScript",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",