simply-observe 1.0.2 → 1.0.3

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
@@ -5,6 +5,8 @@ A lightweight, dependency-free reactive primitives library for TypeScript/JavaSc
5
5
  Inspired by RxJS, built from scratch with a smaller surface area, and no external dependencies.
6
6
 
7
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
+
9
+ Check out and follow [Simply Observe on GitHub](https://github.com/Jsoto22/Simply-Observe). Your support and feedback is always welcomed!
8
10
 
9
11
  ## Install
10
12
 
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  type Flat<T extends readonly unknown[]> = T extends [infer F, ...infer R] ? F extends readonly unknown[] ? [...F, ...Flat<R>] : [F, ...Flat<R>] : [];
2
- type Pop<T extends readonly unknown[]> = T extends [...infer R, infer _] ? R : never;
2
+ type Pop<T extends readonly unknown[]> = T extends [...infer R, infer _] ? R : [];
3
3
  type ObserverRef = ReturnType<Crypto["randomUUID"]>;
4
4
  type ObserverTaskFunction<T> = (...args: ObserverTaskParameters<T>) => any;
5
5
  type ObserverTaskParameters<T> = [update: UpdateDispatcher<T>, error: ErrorDispatcher, complete: CompleteDispatcher<T>];
@@ -99,8 +99,8 @@ interface Observer<T> extends Subscribable<T>, Pipeable<T> {
99
99
  }
100
100
  declare const Observer: ObserverConstructor;
101
101
 
102
- type gaurdNever<T> = false extends isNever<T> ? [value: T] : [];
103
- type isNever<T> = T extends never ? true : false;
102
+ type gaurdNever<T> = isNever<T> extends true ? [value: T] : [];
103
+ type isNever<T> = [T] extends [never] ? true : false;
104
104
  interface SubjectConstructor {
105
105
  new <T extends any = never>(initial?: T): Subject<T>;
106
106
  }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  type Flat<T extends readonly unknown[]> = T extends [infer F, ...infer R] ? F extends readonly unknown[] ? [...F, ...Flat<R>] : [F, ...Flat<R>] : [];
2
- type Pop<T extends readonly unknown[]> = T extends [...infer R, infer _] ? R : never;
2
+ type Pop<T extends readonly unknown[]> = T extends [...infer R, infer _] ? R : [];
3
3
  type ObserverRef = ReturnType<Crypto["randomUUID"]>;
4
4
  type ObserverTaskFunction<T> = (...args: ObserverTaskParameters<T>) => any;
5
5
  type ObserverTaskParameters<T> = [update: UpdateDispatcher<T>, error: ErrorDispatcher, complete: CompleteDispatcher<T>];
@@ -99,8 +99,8 @@ interface Observer<T> extends Subscribable<T>, Pipeable<T> {
99
99
  }
100
100
  declare const Observer: ObserverConstructor;
101
101
 
102
- type gaurdNever<T> = false extends isNever<T> ? [value: T] : [];
103
- type isNever<T> = T extends never ? true : false;
102
+ type gaurdNever<T> = isNever<T> extends true ? [value: T] : [];
103
+ type isNever<T> = [T] extends [never] ? true : false;
104
104
  interface SubjectConstructor {
105
105
  new <T extends any = never>(initial?: T): Subject<T>;
106
106
  }
package/dist/index.js CHANGED
@@ -390,10 +390,8 @@ var Subject = class Subject2 extends ObserverLike {
390
390
  this.value = initial;
391
391
  }
392
392
  next(...values) {
393
- let value;
394
- if (values.length === 0) this._context.update();
395
- if (Array.isArray(values)) value = values[0];
396
393
  if (!this._context.active) return;
394
+ let value = values.length !== 0 ? values[0] : void 0;
397
395
  this.value = value;
398
396
  this._context.update(value);
399
397
  }
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 './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"]}
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> = isNever<T> extends true ? [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 if (!this._context.active) return;\r\n let value = (values.length !== 0) ? values[0] : undefined;\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
@@ -342,10 +342,8 @@ var Subject = class Subject2 extends ObserverLike {
342
342
  this.value = initial;
343
343
  }
344
344
  next(...values) {
345
- let value;
346
- if (values.length === 0) this._context.update();
347
- if (Array.isArray(values)) value = values[0];
348
345
  if (!this._context.active) return;
346
+ let value = values.length !== 0 ? values[0] : void 0;
349
347
  this.value = value;
350
348
  this._context.update(value);
351
349
  }
@@ -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, 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"]}
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> = isNever<T> extends true ? [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 if (!this._context.active) return;\r\n let value = (values.length !== 0) ? values[0] : undefined;\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.2",
3
+ "version": "1.0.3",
4
4
  "description": "A lightweight, dependency-free reactive primitives library for TypeScript",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",