@real-router/rx 0.1.26 → 0.1.28

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/dist/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("@real-router/core"),t=class{#e;constructor(e){this.#e=e}subscribe(e,t){const r="function"==typeof e?{next:e}:e,{signal:n}=t??{};if(n?.aborted)return{unsubscribe:()=>{},closed:!0};let o,s=!1;const i=e=>{if(!s)try{r.next?.(e)}catch(e){u(e)}},u=e=>{if(!s)try{r.error?r.error(e):console.error("Unhandled error in RxObservable:",e)}catch{}},c=()=>{if(!s){s=!0;try{r.complete?.()}catch{}}},b={unsubscribe:()=>{if(!s&&(s=!0,a&&n?.removeEventListener("abort",a),o))try{o()}catch{}},get closed(){return s}};let a;n&&(a=()=>{b.unsubscribe()},n.addEventListener("abort",a));try{o=this.#e({next:i,error:u,complete:c})}catch(e){u(e)}return b}pipe(...e){if(0===e.length)return this;let t=this;for(const r of e)t=r(t);return t}[Symbol.observable](){return this}"@@observable"(){return this}async*[Symbol.asyncIterator](){let e,t=null,r=!1,n=!1,o=null;const s=this.subscribe({next:n=>{if(e=n,r=!0,t){const e=t;t=null,e()}},error:e=>{if(o=e,n=!0,t){const e=t;t=null,e()}},complete:()=>{if(n=!0,t){const e=t;t=null,e()}}});try{for(;!n;)if(r){const t=e;r=!1,yield t}else if(await new Promise(e=>{t=e}),null!==o)throw o}finally{s.unsubscribe()}}};function r(e){return r=>new t(t=>{const n=r.subscribe({next:r=>{e(r,t)},error:e=>t.error?.(e),complete:()=>t.complete?.()});return()=>{n.unsubscribe()}})}function n(r,n){const{replay:o=!0}=n??{};return new t(t=>{const n=e.getPluginApi(r).addEventListener(e.events.TRANSITION_SUCCESS,(e,r)=>{t.next?.({route:e,previousRoute:r})});if(o){const e=r.getState();e&&queueMicrotask(()=>{t.next?.({route:e,previousRoute:void 0})})}return n})}exports.RxObservable=t,exports.debounceTime=function(e){if(!Number.isFinite(e)||e<0)throw new RangeError(`debounceTime: duration must be a non-negative finite number, got ${e}`);return r=>new t(t=>{let n,o,s=!1;const i=r.subscribe({next:r=>{o=r,s=!0,void 0!==n&&clearTimeout(n),n=setTimeout(()=>{s&&(t.next?.(o),s=!1),n=void 0},e)},error:e=>{void 0!==n&&(clearTimeout(n),n=void 0),t.error?.(e)},complete:()=>{void 0!==n&&(clearTimeout(n),n=void 0),s&&(t.next?.(o),s=!1),t.complete?.()}});return()=>{void 0!==n&&(clearTimeout(n),n=void 0),i.unsubscribe()}})},exports.distinctUntilChanged=function(e){return r=(t,r)=>{let n,o=!1;const s=e??((e,t)=>e===t),i=t.subscribe({next:e=>{if(!o)return o=!0,n=e,void r.next?.(e);try{s(n,e)||(n=e,r.next?.(e))}catch(e){r.error?.(e)}},error:e=>r.error?.(e),complete:()=>r.complete?.()});return()=>{i.unsubscribe()}},e=>new t(t=>r(e,t));var r},exports.events$=function(r){return new t(t=>{const n=e.getPluginApi(r),o=[];try{o.push(n.addEventListener(e.events.ROUTER_START,()=>{t.next?.({type:"ROUTER_START"})})),o.push(n.addEventListener(e.events.ROUTER_STOP,()=>{t.next?.({type:"ROUTER_STOP"})})),o.push(n.addEventListener(e.events.TRANSITION_START,(e,r)=>{t.next?.({type:"TRANSITION_START",toState:e,fromState:r})})),o.push(n.addEventListener(e.events.TRANSITION_SUCCESS,(e,r,n)=>{t.next?.({type:"TRANSITION_SUCCESS",toState:e,fromState:r,options:n})})),o.push(n.addEventListener(e.events.TRANSITION_ERROR,(e,r,n)=>{t.next?.({type:"TRANSITION_ERROR",toState:e,fromState:r,error:n})})),o.push(n.addEventListener(e.events.TRANSITION_CANCEL,(e,r)=>{t.next?.({type:"TRANSITION_CANCEL",toState:e,fromState:r})}))}catch(e){for(const e of o)e();throw e}return()=>{for(const e of o)e()}})},exports.filter=function(e){return r((t,r)=>{try{e(t)&&r.next?.(t)}catch(e){r.error?.(e)}})},exports.map=function(e){return r((t,r)=>{try{const n=e(t);r.next?.(n)}catch(e){r.error?.(e)}})},exports.observable=function(e){return n(e)},exports.state$=n,exports.takeUntil=function(e){return r=>new t(t=>{let n,o,s=!1;const i=()=>{s||(s=!0,n&&n.unsubscribe(),o&&o.unsubscribe(),t.complete?.())};if(o=e.subscribe({next:()=>{i()},error:e=>{s||(s=!0,n&&n.unsubscribe(),t.error?.(e))}}),!s)return n=r.subscribe({next:e=>{s||t.next?.(e)},error:e=>{s||(s=!0,o.unsubscribe(),t.error?.(e))},complete:()=>{i()}}),()=>{n.unsubscribe(),o.unsubscribe()}})};//# sourceMappingURL=index.js.map
1
+ var e=require("@real-router/core"),t=require("@real-router/core/api"),r=class{#e;constructor(e){this.#e=e}subscribe(e,t){const r="function"==typeof e?{next:e}:e,{signal:n}=t??{};if(n?.aborted)return{unsubscribe:()=>{},closed:!0};let o,s=!1;const i=e=>{if(!s)try{r.next?.(e)}catch(e){u(e)}},u=e=>{if(!s)try{r.error?r.error(e):console.error("Unhandled error in RxObservable:",e)}catch{}},c=()=>{if(!s){s=!0;try{r.complete?.()}catch{}}},b={unsubscribe:()=>{if(!s&&(s=!0,a&&n?.removeEventListener("abort",a),o))try{o()}catch{}},get closed(){return s}};let a;n&&(a=()=>{b.unsubscribe()},n.addEventListener("abort",a));try{o=this.#e({next:i,error:u,complete:c})}catch(e){u(e)}return b}pipe(...e){if(0===e.length)return this;let t=this;for(const r of e)t=r(t);return t}[Symbol.observable](){return this}"@@observable"(){return this}async*[Symbol.asyncIterator](){let e,t=null,r=!1,n=!1,o=null;const s=this.subscribe({next:n=>{if(e=n,r=!0,t){const e=t;t=null,e()}},error:e=>{if(o=e,n=!0,t){const e=t;t=null,e()}},complete:()=>{if(n=!0,t){const e=t;t=null,e()}}});try{for(;!n;)if(r){const t=e;r=!1,yield t}else if(await new Promise(e=>{t=e}),null!==o)throw o}finally{s.unsubscribe()}}};function n(e){return t=>new r(r=>{const n=t.subscribe({next:t=>{e(t,r)},error:e=>r.error?.(e),complete:()=>r.complete?.()});return()=>{n.unsubscribe()}})}function o(n,o){const{replay:s=!0}=o??{};return new r(r=>{const o=t.getPluginApi(n).addEventListener(e.events.TRANSITION_SUCCESS,(e,t)=>{r.next?.({route:e,previousRoute:t})});if(s){const e=n.getState();e&&queueMicrotask(()=>{r.next?.({route:e,previousRoute:void 0})})}return o})}exports.RxObservable=r,exports.debounceTime=function(e){if(!Number.isFinite(e)||e<0)throw new RangeError(`debounceTime: duration must be a non-negative finite number, got ${e}`);return t=>new r(r=>{let n,o,s=!1;const i=t.subscribe({next:t=>{o=t,s=!0,void 0!==n&&clearTimeout(n),n=setTimeout(()=>{s&&(r.next?.(o),s=!1),n=void 0},e)},error:e=>{void 0!==n&&(clearTimeout(n),n=void 0),r.error?.(e)},complete:()=>{void 0!==n&&(clearTimeout(n),n=void 0),s&&(r.next?.(o),s=!1),r.complete?.()}});return()=>{void 0!==n&&(clearTimeout(n),n=void 0),i.unsubscribe()}})},exports.distinctUntilChanged=function(e){return t=(t,r)=>{let n,o=!1;const s=e??((e,t)=>e===t),i=t.subscribe({next:e=>{if(!o)return o=!0,n=e,void r.next?.(e);try{s(n,e)||(n=e,r.next?.(e))}catch(e){r.error?.(e)}},error:e=>r.error?.(e),complete:()=>r.complete?.()});return()=>{i.unsubscribe()}},e=>new r(r=>t(e,r));var t},exports.events$=function(n){return new r(r=>{const o=t.getPluginApi(n),s=[];try{s.push(o.addEventListener(e.events.ROUTER_START,()=>{r.next?.({type:"ROUTER_START"})})),s.push(o.addEventListener(e.events.ROUTER_STOP,()=>{r.next?.({type:"ROUTER_STOP"})})),s.push(o.addEventListener(e.events.TRANSITION_START,(e,t)=>{r.next?.({type:"TRANSITION_START",toState:e,fromState:t})})),s.push(o.addEventListener(e.events.TRANSITION_SUCCESS,(e,t,n)=>{r.next?.({type:"TRANSITION_SUCCESS",toState:e,fromState:t,options:n})})),s.push(o.addEventListener(e.events.TRANSITION_ERROR,(e,t,n)=>{r.next?.({type:"TRANSITION_ERROR",toState:e,fromState:t,error:n})})),s.push(o.addEventListener(e.events.TRANSITION_CANCEL,(e,t)=>{r.next?.({type:"TRANSITION_CANCEL",toState:e,fromState:t})}))}catch(e){for(const e of s)e();throw e}return()=>{for(const e of s)e()}})},exports.filter=function(e){return n((t,r)=>{try{e(t)&&r.next?.(t)}catch(e){r.error?.(e)}})},exports.map=function(e){return n((t,r)=>{try{const n=e(t);r.next?.(n)}catch(e){r.error?.(e)}})},exports.observable=function(e){return o(e)},exports.state$=o,exports.takeUntil=function(e){return t=>new r(r=>{let n,o,s=!1;const i=()=>{s||(s=!0,n&&n.unsubscribe(),o&&o.unsubscribe(),r.complete?.())};if(o=e.subscribe({next:()=>{i()},error:e=>{s||(s=!0,n&&n.unsubscribe(),r.error?.(e))}}),!s)return n=t.subscribe({next:e=>{s||r.next?.(e)},error:e=>{s||(s=!0,o.unsubscribe(),r.error?.(e))},complete:()=>{i()}}),()=>{n.unsubscribe(),o.unsubscribe()}})};//# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/RxObservable.ts","../../src/operators/createOperator.ts","../../src/operators/map.ts","../../src/operators/filter.ts","../../src/operators/debounceTime.ts","../../src/operators/distinctUntilChanged.ts","../../src/operators/takeUntil.ts","../../src/state$.ts","../../src/events$.ts","../../src/observable.ts"],"names":["getPluginApi","events"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n Observer,\n Subscription,\n ObservableOptions,\n SubscribeFn,\n Operator,\n} from \"./types\";\n\ndeclare global {\n interface SymbolConstructor {\n readonly observable: symbol;\n }\n}\n\nexport class RxObservable<T> {\n #subscribeFn: SubscribeFn<T>;\n\n constructor(subscribeFn: SubscribeFn<T>) {\n this.#subscribeFn = subscribeFn;\n }\n\n subscribe(\n observerOrNext: Observer<T> | ((value: T) => void),\n options?: ObservableOptions,\n ): Subscription {\n const observer: Observer<T> =\n typeof observerOrNext === \"function\"\n ? { next: observerOrNext }\n : observerOrNext;\n\n const { signal } = options ?? {};\n\n if (signal?.aborted) {\n return {\n unsubscribe: () => {},\n closed: true,\n };\n }\n\n let closed = false;\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type -- matches SubscribeFn return type\n let teardown: void | (() => void);\n\n const safeNext = (value: T) => {\n if (closed) {\n return;\n }\n\n try {\n observer.next?.(value);\n } catch (error) {\n safeError(error);\n }\n };\n\n const safeError = (err: unknown) => {\n if (closed) {\n return;\n }\n\n try {\n if (observer.error) {\n observer.error(err);\n } else {\n console.error(\"Unhandled error in RxObservable:\", err);\n }\n } catch {\n // Errors in error handler are caught silently\n }\n };\n\n const safeComplete = () => {\n if (closed) {\n return;\n }\n\n closed = true;\n\n try {\n observer.complete?.();\n } catch {\n // Errors in complete handler are caught silently\n }\n };\n\n const subscription: Subscription = {\n unsubscribe: () => {\n if (closed) {\n return;\n }\n\n closed = true;\n\n if (abortHandler) {\n signal?.removeEventListener(\"abort\", abortHandler);\n }\n\n if (teardown) {\n try {\n teardown();\n } catch {\n // Teardown errors are caught silently\n }\n }\n },\n get closed() {\n return closed;\n },\n };\n\n let abortHandler: (() => void) | undefined;\n\n if (signal) {\n abortHandler = () => {\n subscription.unsubscribe();\n };\n signal.addEventListener(\"abort\", abortHandler);\n }\n\n try {\n teardown = this.#subscribeFn({\n next: safeNext,\n error: safeError,\n complete: safeComplete,\n });\n } catch (error) {\n safeError(error);\n }\n\n return subscription;\n }\n\n pipe(): this;\n pipe<A>(op1: Operator<T, A>): RxObservable<A>;\n pipe<A, B>(op1: Operator<T, A>, op2: Operator<A, B>): RxObservable<B>;\n pipe<A, B, C>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n ): RxObservable<C>;\n pipe<A, B, C, D>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n ): RxObservable<D>;\n pipe<A, B, C, D, E>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n ): RxObservable<E>;\n pipe<A, B, C, D, E, F>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n ): RxObservable<F>;\n pipe<A, B, C, D, E, F, G>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n ): RxObservable<G>;\n pipe<A, B, C, D, E, F, G, H>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n ): RxObservable<H>;\n pipe<A, B, C, D, E, F, G, H, I>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n op9: Operator<H, I>,\n ): RxObservable<I>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipe(...operators: Operator<any, any>[]): any {\n if (operators.length === 0) {\n return this;\n }\n\n // eslint-disable-next-line unicorn/no-this-assignment, @typescript-eslint/no-this-alias -- pipe pattern\n let result: RxObservable<unknown> = this;\n\n for (const operator of operators) {\n result = operator(result);\n }\n\n return result;\n }\n\n [Symbol.observable](): this {\n return this;\n }\n\n [\"@@observable\"](): this {\n return this;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterableIterator<T> {\n let resolve: (() => void) | null = null;\n let latestValue: T | undefined;\n let hasValue = false;\n let completed = false;\n let error: unknown = null;\n\n const subscription = this.subscribe({\n next: (value) => {\n latestValue = value;\n hasValue = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n /* v8 ignore start -- v8 coverage can't track branches inside suspended async generators */\n error: (err) => {\n error = err;\n completed = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n complete: () => {\n completed = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n /* v8 ignore stop */\n });\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- v8 ignore affects analysis\n while (!completed) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- v8 ignore affects analysis\n if (hasValue) {\n const value = latestValue as T;\n\n hasValue = false;\n yield value;\n } else {\n await new Promise<void>((_resolve) => {\n resolve = _resolve;\n });\n\n if (error !== null) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw error;\n }\n }\n }\n } finally {\n subscription.unsubscribe();\n }\n }\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Observer } from \"../types\";\n\n/**\n * Creates a stateless operator. Wires error/complete/teardown automatically.\n * The `next` callback receives each value and the downstream observer.\n */\nexport function createOperator<T, R>(\n next: (value: T, observer: Observer<R>) => void,\n): (source: RxObservable<T>) => RxObservable<R> {\n return (source: RxObservable<T>) =>\n new RxObservable<R>((observer) => {\n const subscription = source.subscribe({\n next: (value) => {\n next(value, observer);\n },\n error: (error) => observer.error?.(error),\n complete: () => observer.complete?.(),\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n}\n\n/**\n * Creates a stateful operator. The subscribeFn sets up its own subscriptions\n * and returns a teardown function.\n */\nexport function createStatefulOperator<T, R>(\n subscribeFn: (source: RxObservable<T>, observer: Observer<R>) => () => void,\n): (source: RxObservable<T>) => RxObservable<R> {\n return (source: RxObservable<T>) =>\n new RxObservable<R>((observer) => subscribeFn(source, observer));\n}\n","import { createOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function map<T, R>(project: (value: T) => R): Operator<T, R> {\n return createOperator<T, R>((value, observer) => {\n try {\n const result = project(value);\n\n observer.next?.(result);\n } catch (error) {\n observer.error?.(error);\n }\n });\n}\n","import { createOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function filter<T, S extends T>(\n predicate: (value: T) => value is S,\n): Operator<T, S>;\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T>;\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return createOperator<T, T>((value, observer) => {\n try {\n if (predicate(value)) {\n observer.next?.(value);\n }\n } catch (error) {\n observer.error?.(error);\n }\n });\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Operator } from \"../types\";\n\nexport function debounceTime<T>(duration: number): Operator<T, T> {\n if (!Number.isFinite(duration) || duration < 0) {\n throw new RangeError(\n `debounceTime: duration must be a non-negative finite number, got ${duration}`,\n );\n }\n\n return (source: RxObservable<T>) =>\n new RxObservable<T>((observer) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let latestValue: T;\n let hasValue = false;\n\n const subscription = source.subscribe({\n next: (value) => {\n latestValue = value;\n hasValue = true;\n\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n /* v8 ignore start -- defensive: timer fired after flush */\n if (hasValue) {\n observer.next?.(latestValue);\n hasValue = false;\n }\n /* v8 ignore stop */\n\n timeoutId = undefined;\n }, duration);\n },\n error: (error) => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n observer.error?.(error);\n },\n complete: () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n if (hasValue) {\n observer.next?.(latestValue);\n hasValue = false;\n }\n\n observer.complete?.();\n },\n });\n\n return () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n subscription.unsubscribe();\n };\n });\n}\n","import { createStatefulOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function distinctUntilChanged<T>(\n comparator?: (a: T, b: T) => boolean,\n): Operator<T, T> {\n return createStatefulOperator<T, T>((source, observer) => {\n let hasLast = false;\n let last: T;\n const compare = comparator ?? ((a: T, b: T) => a === b);\n\n const subscription = source.subscribe({\n next: (value) => {\n if (!hasLast) {\n hasLast = true;\n last = value;\n observer.next?.(value);\n\n return;\n }\n\n try {\n if (!compare(last, value)) {\n last = value;\n observer.next?.(value);\n }\n } catch (error) {\n observer.error?.(error);\n }\n },\n error: (error) => observer.error?.(error),\n complete: () => observer.complete?.(),\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Operator } from \"../types\";\n\nexport function takeUntil<T>(notifier: RxObservable<unknown>): Operator<T, T> {\n return (source: RxObservable<T>) =>\n new RxObservable<T>((observer) => {\n // eslint-disable-next-line prefer-const -- assigned after usage in complete()\n let sourceSubscription: ReturnType<typeof source.subscribe> | undefined;\n // eslint-disable-next-line prefer-const -- assigned after usage in complete()\n let notifierSubscription:\n | ReturnType<typeof notifier.subscribe>\n | undefined;\n let completed = false;\n\n const complete = () => {\n /* v8 ignore start -- defensive: race condition guard */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // sourceSubscription may be undefined if notifier emits synchronously\n if (sourceSubscription) {\n sourceSubscription.unsubscribe();\n }\n // notifierSubscription may be undefined if we're inside notifier.subscribe() call\n if (notifierSubscription) {\n notifierSubscription.unsubscribe();\n }\n\n observer.complete?.();\n };\n\n notifierSubscription = notifier.subscribe({\n next: () => {\n complete();\n },\n error: (error) => {\n /* v8 ignore start -- defensive: notifier error after completion */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // sourceSubscription may be undefined if notifier errors synchronously\n if (sourceSubscription) {\n sourceSubscription.unsubscribe();\n }\n\n observer.error?.(error);\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive\n if (completed) {\n return;\n }\n\n sourceSubscription = source.subscribe({\n next: (value) => {\n /* v8 ignore start -- defensive: emission after completion */\n\n if (!completed) {\n observer.next?.(value);\n }\n /* v8 ignore stop */\n },\n error: (error) => {\n /* v8 ignore start -- defensive: race condition guard */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // notifierSubscription is always defined here (notifier subscribes before source)\n notifierSubscription.unsubscribe();\n\n observer.error?.(error);\n },\n complete: () => {\n complete();\n },\n });\n\n return () => {\n // Both guaranteed defined: notifier subscribes first (line 37),\n // early return on line 60 if sync complete/error, source subscribes after (line 64)\n sourceSubscription.unsubscribe();\n notifierSubscription.unsubscribe();\n };\n });\n}\n","import { events, getPluginApi } from \"@real-router/core\";\n\nimport { RxObservable } from \"./RxObservable\";\n\nimport type { Router, State, SubscribeState } from \"@real-router/core\";\n\nexport type { SubscribeState } from \"@real-router/core\";\n\nexport function state$(\n router: Router,\n options?: { replay?: boolean },\n): RxObservable<SubscribeState> {\n const { replay = true } = options ?? {};\n\n return new RxObservable<SubscribeState>((observer) => {\n const api = getPluginApi(router);\n const unsubscribe = api.addEventListener(\n events.TRANSITION_SUCCESS,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ route: toState, previousRoute: fromState });\n },\n );\n\n if (replay) {\n const currentState = router.getState();\n\n if (currentState) {\n queueMicrotask(() => {\n observer.next?.({ route: currentState, previousRoute: undefined });\n });\n }\n }\n\n return unsubscribe;\n });\n}\n","import { events, getPluginApi } from \"@real-router/core\";\n\nimport { RxObservable } from \"./RxObservable\";\n\nimport type {\n Router,\n State,\n NavigationOptions,\n RouterError,\n} from \"@real-router/core\";\n\nexport type RouterEvent =\n | { type: \"ROUTER_START\" }\n | { type: \"ROUTER_STOP\" }\n | { type: \"TRANSITION_START\"; toState: State; fromState: State | undefined }\n | {\n type: \"TRANSITION_SUCCESS\";\n toState: State;\n fromState: State | undefined;\n options: NavigationOptions;\n }\n | {\n type: \"TRANSITION_ERROR\";\n toState: State | undefined;\n fromState: State | undefined;\n error: RouterError;\n }\n | { type: \"TRANSITION_CANCEL\"; toState: State; fromState: State | undefined };\n\nexport function events$(router: Router): RxObservable<RouterEvent> {\n return new RxObservable<RouterEvent>((observer) => {\n const api = getPluginApi(router);\n const unsubscribes: (() => void)[] = [];\n\n /* eslint-disable unicorn/prefer-single-call -- individual pushes for partial registration safety */\n try {\n unsubscribes.push(\n api.addEventListener(events.ROUTER_START, () => {\n observer.next?.({ type: \"ROUTER_START\" });\n }),\n );\n unsubscribes.push(\n api.addEventListener(events.ROUTER_STOP, () => {\n observer.next?.({ type: \"ROUTER_STOP\" });\n }),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_START,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ type: \"TRANSITION_START\", toState, fromState });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_SUCCESS,\n (\n toState: State,\n fromState: State | undefined,\n options: NavigationOptions,\n ) => {\n observer.next?.({\n type: \"TRANSITION_SUCCESS\",\n toState,\n fromState,\n options,\n });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_ERROR,\n (\n toState: State | undefined,\n fromState: State | undefined,\n error: RouterError,\n ) => {\n observer.next?.({\n type: \"TRANSITION_ERROR\",\n toState,\n fromState,\n error,\n });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_CANCEL,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ type: \"TRANSITION_CANCEL\", toState, fromState });\n },\n ),\n );\n /* eslint-enable unicorn/prefer-single-call */\n /* v8 ignore start -- defensive: partial listener registration failure */\n } catch (error) {\n // Clean up any listeners that were successfully registered\n for (const unsub of unsubscribes) {\n unsub();\n }\n\n throw error;\n }\n /* v8 ignore stop */\n\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n });\n}\n","import { state$, type SubscribeState } from \"./state$\";\n\nimport type { RxObservable } from \"./RxObservable\";\nimport type { Router } from \"@real-router/core\";\n\n/**\n * Creates a TC39-compliant Observable from a router instance.\n *\n * This is a semantic wrapper over `state$()` that provides TC39 Observable interop.\n * Use this when you need RxJS compatibility via `from(observable(router))`.\n *\n * @param router - Router instance to observe\n * @returns RxObservable that emits state changes\n *\n * @example\n * ```typescript\n * import { from } from 'rxjs';\n * import { observable } from '@real-router/rx';\n *\n * const router$ = from(observable(router));\n * router$.subscribe(({ route, previousRoute }) => {\n * console.log('Navigation:', previousRoute?.name, '→', route.name);\n * });\n * ```\n */\nexport function observable(router: Router): RxObservable<SubscribeState> {\n return state$(router);\n}\n"]}
1
+ {"version":3,"sources":["../../src/RxObservable.ts","../../src/operators/createOperator.ts","../../src/operators/map.ts","../../src/operators/filter.ts","../../src/operators/debounceTime.ts","../../src/operators/distinctUntilChanged.ts","../../src/operators/takeUntil.ts","../../src/state$.ts","../../src/events$.ts","../../src/observable.ts"],"names":["api","getPluginApi","events"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n Observer,\n Subscription,\n ObservableOptions,\n SubscribeFn,\n Operator,\n} from \"./types\";\n\ndeclare global {\n interface SymbolConstructor {\n readonly observable: symbol;\n }\n}\n\nexport class RxObservable<T> {\n #subscribeFn: SubscribeFn<T>;\n\n constructor(subscribeFn: SubscribeFn<T>) {\n this.#subscribeFn = subscribeFn;\n }\n\n subscribe(\n observerOrNext: Observer<T> | ((value: T) => void),\n options?: ObservableOptions,\n ): Subscription {\n const observer: Observer<T> =\n typeof observerOrNext === \"function\"\n ? { next: observerOrNext }\n : observerOrNext;\n\n const { signal } = options ?? {};\n\n if (signal?.aborted) {\n return {\n unsubscribe: () => {},\n closed: true,\n };\n }\n\n let closed = false;\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type -- matches SubscribeFn return type\n let teardown: void | (() => void);\n\n const safeNext = (value: T) => {\n if (closed) {\n return;\n }\n\n try {\n observer.next?.(value);\n } catch (error) {\n safeError(error);\n }\n };\n\n const safeError = (err: unknown) => {\n if (closed) {\n return;\n }\n\n try {\n if (observer.error) {\n observer.error(err);\n } else {\n console.error(\"Unhandled error in RxObservable:\", err);\n }\n } catch {\n // Errors in error handler are caught silently\n }\n };\n\n const safeComplete = () => {\n if (closed) {\n return;\n }\n\n closed = true;\n\n try {\n observer.complete?.();\n } catch {\n // Errors in complete handler are caught silently\n }\n };\n\n const subscription: Subscription = {\n unsubscribe: () => {\n if (closed) {\n return;\n }\n\n closed = true;\n\n if (abortHandler) {\n signal?.removeEventListener(\"abort\", abortHandler);\n }\n\n if (teardown) {\n try {\n teardown();\n } catch {\n // Teardown errors are caught silently\n }\n }\n },\n get closed() {\n return closed;\n },\n };\n\n let abortHandler: (() => void) | undefined;\n\n if (signal) {\n abortHandler = () => {\n subscription.unsubscribe();\n };\n signal.addEventListener(\"abort\", abortHandler);\n }\n\n try {\n teardown = this.#subscribeFn({\n next: safeNext,\n error: safeError,\n complete: safeComplete,\n });\n } catch (error) {\n safeError(error);\n }\n\n return subscription;\n }\n\n pipe(): this;\n pipe<A>(op1: Operator<T, A>): RxObservable<A>;\n pipe<A, B>(op1: Operator<T, A>, op2: Operator<A, B>): RxObservable<B>;\n pipe<A, B, C>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n ): RxObservable<C>;\n pipe<A, B, C, D>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n ): RxObservable<D>;\n pipe<A, B, C, D, E>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n ): RxObservable<E>;\n pipe<A, B, C, D, E, F>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n ): RxObservable<F>;\n pipe<A, B, C, D, E, F, G>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n ): RxObservable<G>;\n pipe<A, B, C, D, E, F, G, H>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n ): RxObservable<H>;\n pipe<A, B, C, D, E, F, G, H, I>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n op9: Operator<H, I>,\n ): RxObservable<I>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipe(...operators: Operator<any, any>[]): any {\n if (operators.length === 0) {\n return this;\n }\n\n // eslint-disable-next-line unicorn/no-this-assignment, @typescript-eslint/no-this-alias -- pipe pattern\n let result: RxObservable<unknown> = this;\n\n for (const operator of operators) {\n result = operator(result);\n }\n\n return result;\n }\n\n [Symbol.observable](): this {\n return this;\n }\n\n [\"@@observable\"](): this {\n return this;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterableIterator<T> {\n let resolve: (() => void) | null = null;\n let latestValue: T | undefined;\n let hasValue = false;\n let completed = false;\n let error: unknown = null;\n\n const subscription = this.subscribe({\n next: (value) => {\n latestValue = value;\n hasValue = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n /* v8 ignore start -- v8 coverage can't track branches inside suspended async generators */\n error: (err) => {\n error = err;\n completed = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n complete: () => {\n completed = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n /* v8 ignore stop */\n });\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- v8 ignore affects analysis\n while (!completed) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- v8 ignore affects analysis\n if (hasValue) {\n const value = latestValue as T;\n\n hasValue = false;\n yield value;\n } else {\n await new Promise<void>((_resolve) => {\n resolve = _resolve;\n });\n\n if (error !== null) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw error;\n }\n }\n }\n } finally {\n subscription.unsubscribe();\n }\n }\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Observer } from \"../types\";\n\n/**\n * Creates a stateless operator. Wires error/complete/teardown automatically.\n * The `next` callback receives each value and the downstream observer.\n */\nexport function createOperator<T, R>(\n next: (value: T, observer: Observer<R>) => void,\n): (source: RxObservable<T>) => RxObservable<R> {\n return (source: RxObservable<T>) =>\n new RxObservable<R>((observer) => {\n const subscription = source.subscribe({\n next: (value) => {\n next(value, observer);\n },\n error: (error) => observer.error?.(error),\n complete: () => observer.complete?.(),\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n}\n\n/**\n * Creates a stateful operator. The subscribeFn sets up its own subscriptions\n * and returns a teardown function.\n */\nexport function createStatefulOperator<T, R>(\n subscribeFn: (source: RxObservable<T>, observer: Observer<R>) => () => void,\n): (source: RxObservable<T>) => RxObservable<R> {\n return (source: RxObservable<T>) =>\n new RxObservable<R>((observer) => subscribeFn(source, observer));\n}\n","import { createOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function map<T, R>(project: (value: T) => R): Operator<T, R> {\n return createOperator<T, R>((value, observer) => {\n try {\n const result = project(value);\n\n observer.next?.(result);\n } catch (error) {\n observer.error?.(error);\n }\n });\n}\n","import { createOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function filter<T, S extends T>(\n predicate: (value: T) => value is S,\n): Operator<T, S>;\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T>;\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return createOperator<T, T>((value, observer) => {\n try {\n if (predicate(value)) {\n observer.next?.(value);\n }\n } catch (error) {\n observer.error?.(error);\n }\n });\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Operator } from \"../types\";\n\nexport function debounceTime<T>(duration: number): Operator<T, T> {\n if (!Number.isFinite(duration) || duration < 0) {\n throw new RangeError(\n `debounceTime: duration must be a non-negative finite number, got ${duration}`,\n );\n }\n\n return (source: RxObservable<T>) =>\n new RxObservable<T>((observer) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let latestValue: T;\n let hasValue = false;\n\n const subscription = source.subscribe({\n next: (value) => {\n latestValue = value;\n hasValue = true;\n\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n /* v8 ignore start -- defensive: timer fired after flush */\n if (hasValue) {\n observer.next?.(latestValue);\n hasValue = false;\n }\n /* v8 ignore stop */\n\n timeoutId = undefined;\n }, duration);\n },\n error: (error) => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n observer.error?.(error);\n },\n complete: () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n if (hasValue) {\n observer.next?.(latestValue);\n hasValue = false;\n }\n\n observer.complete?.();\n },\n });\n\n return () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n subscription.unsubscribe();\n };\n });\n}\n","import { createStatefulOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function distinctUntilChanged<T>(\n comparator?: (a: T, b: T) => boolean,\n): Operator<T, T> {\n return createStatefulOperator<T, T>((source, observer) => {\n let hasLast = false;\n let last: T;\n const compare = comparator ?? ((a: T, b: T) => a === b);\n\n const subscription = source.subscribe({\n next: (value) => {\n if (!hasLast) {\n hasLast = true;\n last = value;\n observer.next?.(value);\n\n return;\n }\n\n try {\n if (!compare(last, value)) {\n last = value;\n observer.next?.(value);\n }\n } catch (error) {\n observer.error?.(error);\n }\n },\n error: (error) => observer.error?.(error),\n complete: () => observer.complete?.(),\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Operator } from \"../types\";\n\nexport function takeUntil<T>(notifier: RxObservable<unknown>): Operator<T, T> {\n return (source: RxObservable<T>) =>\n new RxObservable<T>((observer) => {\n // eslint-disable-next-line prefer-const -- assigned after usage in complete()\n let sourceSubscription: ReturnType<typeof source.subscribe> | undefined;\n // eslint-disable-next-line prefer-const -- assigned after usage in complete()\n let notifierSubscription:\n | ReturnType<typeof notifier.subscribe>\n | undefined;\n let completed = false;\n\n const complete = () => {\n /* v8 ignore start -- defensive: race condition guard */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // sourceSubscription may be undefined if notifier emits synchronously\n if (sourceSubscription) {\n sourceSubscription.unsubscribe();\n }\n // notifierSubscription may be undefined if we're inside notifier.subscribe() call\n if (notifierSubscription) {\n notifierSubscription.unsubscribe();\n }\n\n observer.complete?.();\n };\n\n notifierSubscription = notifier.subscribe({\n next: () => {\n complete();\n },\n error: (error) => {\n /* v8 ignore start -- defensive: notifier error after completion */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // sourceSubscription may be undefined if notifier errors synchronously\n if (sourceSubscription) {\n sourceSubscription.unsubscribe();\n }\n\n observer.error?.(error);\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive\n if (completed) {\n return;\n }\n\n sourceSubscription = source.subscribe({\n next: (value) => {\n /* v8 ignore start -- defensive: emission after completion */\n\n if (!completed) {\n observer.next?.(value);\n }\n /* v8 ignore stop */\n },\n error: (error) => {\n /* v8 ignore start -- defensive: race condition guard */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // notifierSubscription is always defined here (notifier subscribes before source)\n notifierSubscription.unsubscribe();\n\n observer.error?.(error);\n },\n complete: () => {\n complete();\n },\n });\n\n return () => {\n // Both guaranteed defined: notifier subscribes first (line 37),\n // early return on line 60 if sync complete/error, source subscribes after (line 64)\n sourceSubscription.unsubscribe();\n notifierSubscription.unsubscribe();\n };\n });\n}\n","import { events } from \"@real-router/core\";\nimport { getPluginApi } from \"@real-router/core/api\";\n\nimport { RxObservable } from \"./RxObservable\";\n\nimport type { Router, State, SubscribeState } from \"@real-router/core\";\n\nexport type { SubscribeState } from \"@real-router/core\";\n\nexport function state$(\n router: Router,\n options?: { replay?: boolean },\n): RxObservable<SubscribeState> {\n const { replay = true } = options ?? {};\n\n return new RxObservable<SubscribeState>((observer) => {\n const api = getPluginApi(router);\n const unsubscribe = api.addEventListener(\n events.TRANSITION_SUCCESS,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ route: toState, previousRoute: fromState });\n },\n );\n\n if (replay) {\n const currentState = router.getState();\n\n if (currentState) {\n queueMicrotask(() => {\n observer.next?.({ route: currentState, previousRoute: undefined });\n });\n }\n }\n\n return unsubscribe;\n });\n}\n","import { events } from \"@real-router/core\";\nimport { getPluginApi } from \"@real-router/core/api\";\n\nimport { RxObservable } from \"./RxObservable\";\n\nimport type {\n Router,\n State,\n NavigationOptions,\n RouterError,\n} from \"@real-router/core\";\n\nexport type RouterEvent =\n | { type: \"ROUTER_START\" }\n | { type: \"ROUTER_STOP\" }\n | { type: \"TRANSITION_START\"; toState: State; fromState: State | undefined }\n | {\n type: \"TRANSITION_SUCCESS\";\n toState: State;\n fromState: State | undefined;\n options: NavigationOptions;\n }\n | {\n type: \"TRANSITION_ERROR\";\n toState: State | undefined;\n fromState: State | undefined;\n error: RouterError;\n }\n | { type: \"TRANSITION_CANCEL\"; toState: State; fromState: State | undefined };\n\nexport function events$(router: Router): RxObservable<RouterEvent> {\n return new RxObservable<RouterEvent>((observer) => {\n const api = getPluginApi(router);\n const unsubscribes: (() => void)[] = [];\n\n /* eslint-disable unicorn/prefer-single-call -- individual pushes for partial registration safety */\n try {\n unsubscribes.push(\n api.addEventListener(events.ROUTER_START, () => {\n observer.next?.({ type: \"ROUTER_START\" });\n }),\n );\n unsubscribes.push(\n api.addEventListener(events.ROUTER_STOP, () => {\n observer.next?.({ type: \"ROUTER_STOP\" });\n }),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_START,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ type: \"TRANSITION_START\", toState, fromState });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_SUCCESS,\n (\n toState: State,\n fromState: State | undefined,\n options: NavigationOptions,\n ) => {\n observer.next?.({\n type: \"TRANSITION_SUCCESS\",\n toState,\n fromState,\n options,\n });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_ERROR,\n (\n toState: State | undefined,\n fromState: State | undefined,\n error: RouterError,\n ) => {\n observer.next?.({\n type: \"TRANSITION_ERROR\",\n toState,\n fromState,\n error,\n });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_CANCEL,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ type: \"TRANSITION_CANCEL\", toState, fromState });\n },\n ),\n );\n /* eslint-enable unicorn/prefer-single-call */\n /* v8 ignore start -- defensive: partial listener registration failure */\n } catch (error) {\n // Clean up any listeners that were successfully registered\n for (const unsub of unsubscribes) {\n unsub();\n }\n\n throw error;\n }\n /* v8 ignore stop */\n\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n });\n}\n","import { state$, type SubscribeState } from \"./state$\";\n\nimport type { RxObservable } from \"./RxObservable\";\nimport type { Router } from \"@real-router/core\";\n\n/**\n * Creates a TC39-compliant Observable from a router instance.\n *\n * This is a semantic wrapper over `state$()` that provides TC39 Observable interop.\n * Use this when you need RxJS compatibility via `from(observable(router))`.\n *\n * @param router - Router instance to observe\n * @returns RxObservable that emits state changes\n *\n * @example\n * ```typescript\n * import { from } from 'rxjs';\n * import { observable } from '@real-router/rx';\n *\n * const router$ = from(observable(router));\n * router$.subscribe(({ route, previousRoute }) => {\n * console.log('Navigation:', previousRoute?.name, '→', route.name);\n * });\n * ```\n */\nexport function observable(router: Router): RxObservable<SubscribeState> {\n return state$(router);\n}\n"]}
@@ -1 +1 @@
1
- {"inputs":{"../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js":{"bytes":569,"imports":[],"format":"esm"},"src/RxObservable.ts":{"bytes":6310,"imports":[{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/createOperator.ts":{"bytes":1177,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/map.ts":{"bytes":364,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/filter.ts":{"bytes":550,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/debounceTime.ts":{"bytes":1803,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/distinctUntilChanged.ts":{"bytes":955,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/takeUntil.ts":{"bytes":2959,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/index.ts":{"bytes":219,"imports":[{"path":"src/operators/map.ts","kind":"import-statement","original":"./map"},{"path":"src/operators/filter.ts","kind":"import-statement","original":"./filter"},{"path":"src/operators/debounceTime.ts","kind":"import-statement","original":"./debounceTime"},{"path":"src/operators/distinctUntilChanged.ts","kind":"import-statement","original":"./distinctUntilChanged"},{"path":"src/operators/takeUntil.ts","kind":"import-statement","original":"./takeUntil"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/state$.ts":{"bytes":972,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/events$.ts":{"bytes":3177,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/observable.ts":{"bytes":897,"imports":[{"path":"src/state$.ts","kind":"import-statement","original":"./state$"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":489,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"},{"path":"src/operators/index.ts","kind":"import-statement","original":"./operators"},{"path":"src/state$.ts","kind":"import-statement","original":"./state$"},{"path":"src/events$.ts","kind":"import-statement","original":"./events$"},{"path":"src/observable.ts","kind":"import-statement","original":"./observable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/cjs/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":27659},"dist/cjs/index.js":{"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true}],"exports":["RxObservable","debounceTime","distinctUntilChanged","events$","filter","map","observable","state$","takeUntil"],"entryPoint":"src/index.ts","inputs":{"src/RxObservable.ts":{"bytesInOutput":3515},"src/index.ts":{"bytesInOutput":0},"src/operators/createOperator.ts":{"bytesInOutput":497},"src/operators/map.ts":{"bytesInOutput":216},"src/operators/index.ts":{"bytesInOutput":0},"src/operators/filter.ts":{"bytesInOutput":223},"src/operators/debounceTime.ts":{"bytesInOutput":1376},"src/operators/distinctUntilChanged.ts":{"bytesInOutput":775},"src/operators/takeUntil.ts":{"bytesInOutput":1369},"src/state$.ts":{"bytesInOutput":667},"src/events$.ts":{"bytesInOutput":1882},"src/observable.ts":{"bytesInOutput":57}},"bytes":10987}}}
1
+ {"inputs":{"../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js":{"bytes":569,"imports":[],"format":"esm"},"src/RxObservable.ts":{"bytes":6310,"imports":[{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/createOperator.ts":{"bytes":1177,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/map.ts":{"bytes":364,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/filter.ts":{"bytes":550,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/debounceTime.ts":{"bytes":1803,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/distinctUntilChanged.ts":{"bytes":955,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/takeUntil.ts":{"bytes":2959,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/operators/index.ts":{"bytes":219,"imports":[{"path":"src/operators/map.ts","kind":"import-statement","original":"./map"},{"path":"src/operators/filter.ts","kind":"import-statement","original":"./filter"},{"path":"src/operators/debounceTime.ts","kind":"import-statement","original":"./debounceTime"},{"path":"src/operators/distinctUntilChanged.ts","kind":"import-statement","original":"./distinctUntilChanged"},{"path":"src/operators/takeUntil.ts","kind":"import-statement","original":"./takeUntil"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/state$.ts":{"bytes":1012,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/events$.ts":{"bytes":3217,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/observable.ts":{"bytes":897,"imports":[{"path":"src/state$.ts","kind":"import-statement","original":"./state$"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":489,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"},{"path":"src/operators/index.ts","kind":"import-statement","original":"./operators"},{"path":"src/state$.ts","kind":"import-statement","original":"./state$"},{"path":"src/events$.ts","kind":"import-statement","original":"./events$"},{"path":"src/observable.ts","kind":"import-statement","original":"./observable"},{"path":"/home/runner/work/real-router/real-router/node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/cjs/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":27767},"dist/cjs/index.js":{"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true}],"exports":["RxObservable","debounceTime","distinctUntilChanged","events$","filter","map","observable","state$","takeUntil"],"entryPoint":"src/index.ts","inputs":{"src/RxObservable.ts":{"bytesInOutput":3515},"src/index.ts":{"bytesInOutput":0},"src/operators/createOperator.ts":{"bytesInOutput":497},"src/operators/map.ts":{"bytesInOutput":216},"src/operators/index.ts":{"bytesInOutput":0},"src/operators/filter.ts":{"bytesInOutput":223},"src/operators/debounceTime.ts":{"bytesInOutput":1376},"src/operators/distinctUntilChanged.ts":{"bytesInOutput":775},"src/operators/takeUntil.ts":{"bytesInOutput":1369},"src/state$.ts":{"bytesInOutput":707},"src/events$.ts":{"bytesInOutput":1922},"src/observable.ts":{"bytesInOutput":57}},"bytes":11067}}}
@@ -1 +1 @@
1
- import{getPluginApi as e,events as t}from"@real-router/core";var r=class{#e;constructor(e){this.#e=e}subscribe(e,t){const r="function"==typeof e?{next:e}:e,{signal:n}=t??{};if(n?.aborted)return{unsubscribe:()=>{},closed:!0};let o,s=!1;const u=e=>{if(!s)try{r.next?.(e)}catch(e){i(e)}},i=e=>{if(!s)try{r.error?r.error(e):console.error("Unhandled error in RxObservable:",e)}catch{}},c=()=>{if(!s){s=!0;try{r.complete?.()}catch{}}},b={unsubscribe:()=>{if(!s&&(s=!0,a&&n?.removeEventListener("abort",a),o))try{o()}catch{}},get closed(){return s}};let a;n&&(a=()=>{b.unsubscribe()},n.addEventListener("abort",a));try{o=this.#e({next:u,error:i,complete:c})}catch(e){i(e)}return b}pipe(...e){if(0===e.length)return this;let t=this;for(const r of e)t=r(t);return t}[Symbol.observable](){return this}"@@observable"(){return this}async*[Symbol.asyncIterator](){let e,t=null,r=!1,n=!1,o=null;const s=this.subscribe({next:n=>{if(e=n,r=!0,t){const e=t;t=null,e()}},error:e=>{if(o=e,n=!0,t){const e=t;t=null,e()}},complete:()=>{if(n=!0,t){const e=t;t=null,e()}}});try{for(;!n;)if(r){const t=e;r=!1,yield t}else if(await new Promise(e=>{t=e}),null!==o)throw o}finally{s.unsubscribe()}}};function n(e){return t=>new r(r=>{const n=t.subscribe({next:t=>{e(t,r)},error:e=>r.error?.(e),complete:()=>r.complete?.()});return()=>{n.unsubscribe()}})}function o(e){return n((t,r)=>{try{const n=e(t);r.next?.(n)}catch(e){r.error?.(e)}})}function s(e){return n((t,r)=>{try{e(t)&&r.next?.(t)}catch(e){r.error?.(e)}})}function u(e){if(!Number.isFinite(e)||e<0)throw new RangeError(`debounceTime: duration must be a non-negative finite number, got ${e}`);return t=>new r(r=>{let n,o,s=!1;const u=t.subscribe({next:t=>{o=t,s=!0,void 0!==n&&clearTimeout(n),n=setTimeout(()=>{s&&(r.next?.(o),s=!1),n=void 0},e)},error:e=>{void 0!==n&&(clearTimeout(n),n=void 0),r.error?.(e)},complete:()=>{void 0!==n&&(clearTimeout(n),n=void 0),s&&(r.next?.(o),s=!1),r.complete?.()}});return()=>{void 0!==n&&(clearTimeout(n),n=void 0),u.unsubscribe()}})}function i(e){return t=(t,r)=>{let n,o=!1;const s=e??((e,t)=>e===t),u=t.subscribe({next:e=>{if(!o)return o=!0,n=e,void r.next?.(e);try{s(n,e)||(n=e,r.next?.(e))}catch(e){r.error?.(e)}},error:e=>r.error?.(e),complete:()=>r.complete?.()});return()=>{u.unsubscribe()}},e=>new r(r=>t(e,r));var t}function c(e){return t=>new r(r=>{let n,o,s=!1;const u=()=>{s||(s=!0,n&&n.unsubscribe(),o&&o.unsubscribe(),r.complete?.())};if(o=e.subscribe({next:()=>{u()},error:e=>{s||(s=!0,n&&n.unsubscribe(),r.error?.(e))}}),!s)return n=t.subscribe({next:e=>{s||r.next?.(e)},error:e=>{s||(s=!0,o.unsubscribe(),r.error?.(e))},complete:()=>{u()}}),()=>{n.unsubscribe(),o.unsubscribe()}})}function b(n,o){const{replay:s=!0}=o??{};return new r(r=>{const o=e(n).addEventListener(t.TRANSITION_SUCCESS,(e,t)=>{r.next?.({route:e,previousRoute:t})});if(s){const e=n.getState();e&&queueMicrotask(()=>{r.next?.({route:e,previousRoute:void 0})})}return o})}function a(n){return new r(r=>{const o=e(n),s=[];try{s.push(o.addEventListener(t.ROUTER_START,()=>{r.next?.({type:"ROUTER_START"})})),s.push(o.addEventListener(t.ROUTER_STOP,()=>{r.next?.({type:"ROUTER_STOP"})})),s.push(o.addEventListener(t.TRANSITION_START,(e,t)=>{r.next?.({type:"TRANSITION_START",toState:e,fromState:t})})),s.push(o.addEventListener(t.TRANSITION_SUCCESS,(e,t,n)=>{r.next?.({type:"TRANSITION_SUCCESS",toState:e,fromState:t,options:n})})),s.push(o.addEventListener(t.TRANSITION_ERROR,(e,t,n)=>{r.next?.({type:"TRANSITION_ERROR",toState:e,fromState:t,error:n})})),s.push(o.addEventListener(t.TRANSITION_CANCEL,(e,t)=>{r.next?.({type:"TRANSITION_CANCEL",toState:e,fromState:t})}))}catch(e){for(const e of s)e();throw e}return()=>{for(const e of s)e()}})}function l(e){return b(e)}export{r as RxObservable,u as debounceTime,i as distinctUntilChanged,a as events$,s as filter,o as map,l as observable,b as state$,c as takeUntil};//# sourceMappingURL=index.mjs.map
1
+ import{events as e}from"@real-router/core";import{getPluginApi as t}from"@real-router/core/api";var r=class{#e;constructor(e){this.#e=e}subscribe(e,t){const r="function"==typeof e?{next:e}:e,{signal:n}=t??{};if(n?.aborted)return{unsubscribe:()=>{},closed:!0};let o,s=!1;const u=e=>{if(!s)try{r.next?.(e)}catch(e){i(e)}},i=e=>{if(!s)try{r.error?r.error(e):console.error("Unhandled error in RxObservable:",e)}catch{}},c=()=>{if(!s){s=!0;try{r.complete?.()}catch{}}},b={unsubscribe:()=>{if(!s&&(s=!0,a&&n?.removeEventListener("abort",a),o))try{o()}catch{}},get closed(){return s}};let a;n&&(a=()=>{b.unsubscribe()},n.addEventListener("abort",a));try{o=this.#e({next:u,error:i,complete:c})}catch(e){i(e)}return b}pipe(...e){if(0===e.length)return this;let t=this;for(const r of e)t=r(t);return t}[Symbol.observable](){return this}"@@observable"(){return this}async*[Symbol.asyncIterator](){let e,t=null,r=!1,n=!1,o=null;const s=this.subscribe({next:n=>{if(e=n,r=!0,t){const e=t;t=null,e()}},error:e=>{if(o=e,n=!0,t){const e=t;t=null,e()}},complete:()=>{if(n=!0,t){const e=t;t=null,e()}}});try{for(;!n;)if(r){const t=e;r=!1,yield t}else if(await new Promise(e=>{t=e}),null!==o)throw o}finally{s.unsubscribe()}}};function n(e){return t=>new r(r=>{const n=t.subscribe({next:t=>{e(t,r)},error:e=>r.error?.(e),complete:()=>r.complete?.()});return()=>{n.unsubscribe()}})}function o(e){return n((t,r)=>{try{const n=e(t);r.next?.(n)}catch(e){r.error?.(e)}})}function s(e){return n((t,r)=>{try{e(t)&&r.next?.(t)}catch(e){r.error?.(e)}})}function u(e){if(!Number.isFinite(e)||e<0)throw new RangeError(`debounceTime: duration must be a non-negative finite number, got ${e}`);return t=>new r(r=>{let n,o,s=!1;const u=t.subscribe({next:t=>{o=t,s=!0,void 0!==n&&clearTimeout(n),n=setTimeout(()=>{s&&(r.next?.(o),s=!1),n=void 0},e)},error:e=>{void 0!==n&&(clearTimeout(n),n=void 0),r.error?.(e)},complete:()=>{void 0!==n&&(clearTimeout(n),n=void 0),s&&(r.next?.(o),s=!1),r.complete?.()}});return()=>{void 0!==n&&(clearTimeout(n),n=void 0),u.unsubscribe()}})}function i(e){return t=(t,r)=>{let n,o=!1;const s=e??((e,t)=>e===t),u=t.subscribe({next:e=>{if(!o)return o=!0,n=e,void r.next?.(e);try{s(n,e)||(n=e,r.next?.(e))}catch(e){r.error?.(e)}},error:e=>r.error?.(e),complete:()=>r.complete?.()});return()=>{u.unsubscribe()}},e=>new r(r=>t(e,r));var t}function c(e){return t=>new r(r=>{let n,o,s=!1;const u=()=>{s||(s=!0,n&&n.unsubscribe(),o&&o.unsubscribe(),r.complete?.())};if(o=e.subscribe({next:()=>{u()},error:e=>{s||(s=!0,n&&n.unsubscribe(),r.error?.(e))}}),!s)return n=t.subscribe({next:e=>{s||r.next?.(e)},error:e=>{s||(s=!0,o.unsubscribe(),r.error?.(e))},complete:()=>{u()}}),()=>{n.unsubscribe(),o.unsubscribe()}})}function b(n,o){const{replay:s=!0}=o??{};return new r(r=>{const o=t(n).addEventListener(e.TRANSITION_SUCCESS,(e,t)=>{r.next?.({route:e,previousRoute:t})});if(s){const e=n.getState();e&&queueMicrotask(()=>{r.next?.({route:e,previousRoute:void 0})})}return o})}function a(n){return new r(r=>{const o=t(n),s=[];try{s.push(o.addEventListener(e.ROUTER_START,()=>{r.next?.({type:"ROUTER_START"})})),s.push(o.addEventListener(e.ROUTER_STOP,()=>{r.next?.({type:"ROUTER_STOP"})})),s.push(o.addEventListener(e.TRANSITION_START,(e,t)=>{r.next?.({type:"TRANSITION_START",toState:e,fromState:t})})),s.push(o.addEventListener(e.TRANSITION_SUCCESS,(e,t,n)=>{r.next?.({type:"TRANSITION_SUCCESS",toState:e,fromState:t,options:n})})),s.push(o.addEventListener(e.TRANSITION_ERROR,(e,t,n)=>{r.next?.({type:"TRANSITION_ERROR",toState:e,fromState:t,error:n})})),s.push(o.addEventListener(e.TRANSITION_CANCEL,(e,t)=>{r.next?.({type:"TRANSITION_CANCEL",toState:e,fromState:t})}))}catch(e){for(const e of s)e();throw e}return()=>{for(const e of s)e()}})}function l(e){return b(e)}export{r as RxObservable,u as debounceTime,i as distinctUntilChanged,a as events$,s as filter,o as map,l as observable,b as state$,c as takeUntil};//# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/RxObservable.ts","../../src/operators/createOperator.ts","../../src/operators/map.ts","../../src/operators/filter.ts","../../src/operators/debounceTime.ts","../../src/operators/distinctUntilChanged.ts","../../src/operators/takeUntil.ts","../../src/state$.ts","../../src/events$.ts","../../src/observable.ts"],"names":["getPluginApi","events"],"mappings":"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","file":"index.mjs","sourcesContent":["import type {\n Observer,\n Subscription,\n ObservableOptions,\n SubscribeFn,\n Operator,\n} from \"./types\";\n\ndeclare global {\n interface SymbolConstructor {\n readonly observable: symbol;\n }\n}\n\nexport class RxObservable<T> {\n #subscribeFn: SubscribeFn<T>;\n\n constructor(subscribeFn: SubscribeFn<T>) {\n this.#subscribeFn = subscribeFn;\n }\n\n subscribe(\n observerOrNext: Observer<T> | ((value: T) => void),\n options?: ObservableOptions,\n ): Subscription {\n const observer: Observer<T> =\n typeof observerOrNext === \"function\"\n ? { next: observerOrNext }\n : observerOrNext;\n\n const { signal } = options ?? {};\n\n if (signal?.aborted) {\n return {\n unsubscribe: () => {},\n closed: true,\n };\n }\n\n let closed = false;\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type -- matches SubscribeFn return type\n let teardown: void | (() => void);\n\n const safeNext = (value: T) => {\n if (closed) {\n return;\n }\n\n try {\n observer.next?.(value);\n } catch (error) {\n safeError(error);\n }\n };\n\n const safeError = (err: unknown) => {\n if (closed) {\n return;\n }\n\n try {\n if (observer.error) {\n observer.error(err);\n } else {\n console.error(\"Unhandled error in RxObservable:\", err);\n }\n } catch {\n // Errors in error handler are caught silently\n }\n };\n\n const safeComplete = () => {\n if (closed) {\n return;\n }\n\n closed = true;\n\n try {\n observer.complete?.();\n } catch {\n // Errors in complete handler are caught silently\n }\n };\n\n const subscription: Subscription = {\n unsubscribe: () => {\n if (closed) {\n return;\n }\n\n closed = true;\n\n if (abortHandler) {\n signal?.removeEventListener(\"abort\", abortHandler);\n }\n\n if (teardown) {\n try {\n teardown();\n } catch {\n // Teardown errors are caught silently\n }\n }\n },\n get closed() {\n return closed;\n },\n };\n\n let abortHandler: (() => void) | undefined;\n\n if (signal) {\n abortHandler = () => {\n subscription.unsubscribe();\n };\n signal.addEventListener(\"abort\", abortHandler);\n }\n\n try {\n teardown = this.#subscribeFn({\n next: safeNext,\n error: safeError,\n complete: safeComplete,\n });\n } catch (error) {\n safeError(error);\n }\n\n return subscription;\n }\n\n pipe(): this;\n pipe<A>(op1: Operator<T, A>): RxObservable<A>;\n pipe<A, B>(op1: Operator<T, A>, op2: Operator<A, B>): RxObservable<B>;\n pipe<A, B, C>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n ): RxObservable<C>;\n pipe<A, B, C, D>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n ): RxObservable<D>;\n pipe<A, B, C, D, E>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n ): RxObservable<E>;\n pipe<A, B, C, D, E, F>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n ): RxObservable<F>;\n pipe<A, B, C, D, E, F, G>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n ): RxObservable<G>;\n pipe<A, B, C, D, E, F, G, H>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n ): RxObservable<H>;\n pipe<A, B, C, D, E, F, G, H, I>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n op9: Operator<H, I>,\n ): RxObservable<I>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipe(...operators: Operator<any, any>[]): any {\n if (operators.length === 0) {\n return this;\n }\n\n // eslint-disable-next-line unicorn/no-this-assignment, @typescript-eslint/no-this-alias -- pipe pattern\n let result: RxObservable<unknown> = this;\n\n for (const operator of operators) {\n result = operator(result);\n }\n\n return result;\n }\n\n [Symbol.observable](): this {\n return this;\n }\n\n [\"@@observable\"](): this {\n return this;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterableIterator<T> {\n let resolve: (() => void) | null = null;\n let latestValue: T | undefined;\n let hasValue = false;\n let completed = false;\n let error: unknown = null;\n\n const subscription = this.subscribe({\n next: (value) => {\n latestValue = value;\n hasValue = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n /* v8 ignore start -- v8 coverage can't track branches inside suspended async generators */\n error: (err) => {\n error = err;\n completed = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n complete: () => {\n completed = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n /* v8 ignore stop */\n });\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- v8 ignore affects analysis\n while (!completed) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- v8 ignore affects analysis\n if (hasValue) {\n const value = latestValue as T;\n\n hasValue = false;\n yield value;\n } else {\n await new Promise<void>((_resolve) => {\n resolve = _resolve;\n });\n\n if (error !== null) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw error;\n }\n }\n }\n } finally {\n subscription.unsubscribe();\n }\n }\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Observer } from \"../types\";\n\n/**\n * Creates a stateless operator. Wires error/complete/teardown automatically.\n * The `next` callback receives each value and the downstream observer.\n */\nexport function createOperator<T, R>(\n next: (value: T, observer: Observer<R>) => void,\n): (source: RxObservable<T>) => RxObservable<R> {\n return (source: RxObservable<T>) =>\n new RxObservable<R>((observer) => {\n const subscription = source.subscribe({\n next: (value) => {\n next(value, observer);\n },\n error: (error) => observer.error?.(error),\n complete: () => observer.complete?.(),\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n}\n\n/**\n * Creates a stateful operator. The subscribeFn sets up its own subscriptions\n * and returns a teardown function.\n */\nexport function createStatefulOperator<T, R>(\n subscribeFn: (source: RxObservable<T>, observer: Observer<R>) => () => void,\n): (source: RxObservable<T>) => RxObservable<R> {\n return (source: RxObservable<T>) =>\n new RxObservable<R>((observer) => subscribeFn(source, observer));\n}\n","import { createOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function map<T, R>(project: (value: T) => R): Operator<T, R> {\n return createOperator<T, R>((value, observer) => {\n try {\n const result = project(value);\n\n observer.next?.(result);\n } catch (error) {\n observer.error?.(error);\n }\n });\n}\n","import { createOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function filter<T, S extends T>(\n predicate: (value: T) => value is S,\n): Operator<T, S>;\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T>;\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return createOperator<T, T>((value, observer) => {\n try {\n if (predicate(value)) {\n observer.next?.(value);\n }\n } catch (error) {\n observer.error?.(error);\n }\n });\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Operator } from \"../types\";\n\nexport function debounceTime<T>(duration: number): Operator<T, T> {\n if (!Number.isFinite(duration) || duration < 0) {\n throw new RangeError(\n `debounceTime: duration must be a non-negative finite number, got ${duration}`,\n );\n }\n\n return (source: RxObservable<T>) =>\n new RxObservable<T>((observer) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let latestValue: T;\n let hasValue = false;\n\n const subscription = source.subscribe({\n next: (value) => {\n latestValue = value;\n hasValue = true;\n\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n /* v8 ignore start -- defensive: timer fired after flush */\n if (hasValue) {\n observer.next?.(latestValue);\n hasValue = false;\n }\n /* v8 ignore stop */\n\n timeoutId = undefined;\n }, duration);\n },\n error: (error) => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n observer.error?.(error);\n },\n complete: () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n if (hasValue) {\n observer.next?.(latestValue);\n hasValue = false;\n }\n\n observer.complete?.();\n },\n });\n\n return () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n subscription.unsubscribe();\n };\n });\n}\n","import { createStatefulOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function distinctUntilChanged<T>(\n comparator?: (a: T, b: T) => boolean,\n): Operator<T, T> {\n return createStatefulOperator<T, T>((source, observer) => {\n let hasLast = false;\n let last: T;\n const compare = comparator ?? ((a: T, b: T) => a === b);\n\n const subscription = source.subscribe({\n next: (value) => {\n if (!hasLast) {\n hasLast = true;\n last = value;\n observer.next?.(value);\n\n return;\n }\n\n try {\n if (!compare(last, value)) {\n last = value;\n observer.next?.(value);\n }\n } catch (error) {\n observer.error?.(error);\n }\n },\n error: (error) => observer.error?.(error),\n complete: () => observer.complete?.(),\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Operator } from \"../types\";\n\nexport function takeUntil<T>(notifier: RxObservable<unknown>): Operator<T, T> {\n return (source: RxObservable<T>) =>\n new RxObservable<T>((observer) => {\n // eslint-disable-next-line prefer-const -- assigned after usage in complete()\n let sourceSubscription: ReturnType<typeof source.subscribe> | undefined;\n // eslint-disable-next-line prefer-const -- assigned after usage in complete()\n let notifierSubscription:\n | ReturnType<typeof notifier.subscribe>\n | undefined;\n let completed = false;\n\n const complete = () => {\n /* v8 ignore start -- defensive: race condition guard */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // sourceSubscription may be undefined if notifier emits synchronously\n if (sourceSubscription) {\n sourceSubscription.unsubscribe();\n }\n // notifierSubscription may be undefined if we're inside notifier.subscribe() call\n if (notifierSubscription) {\n notifierSubscription.unsubscribe();\n }\n\n observer.complete?.();\n };\n\n notifierSubscription = notifier.subscribe({\n next: () => {\n complete();\n },\n error: (error) => {\n /* v8 ignore start -- defensive: notifier error after completion */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // sourceSubscription may be undefined if notifier errors synchronously\n if (sourceSubscription) {\n sourceSubscription.unsubscribe();\n }\n\n observer.error?.(error);\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive\n if (completed) {\n return;\n }\n\n sourceSubscription = source.subscribe({\n next: (value) => {\n /* v8 ignore start -- defensive: emission after completion */\n\n if (!completed) {\n observer.next?.(value);\n }\n /* v8 ignore stop */\n },\n error: (error) => {\n /* v8 ignore start -- defensive: race condition guard */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // notifierSubscription is always defined here (notifier subscribes before source)\n notifierSubscription.unsubscribe();\n\n observer.error?.(error);\n },\n complete: () => {\n complete();\n },\n });\n\n return () => {\n // Both guaranteed defined: notifier subscribes first (line 37),\n // early return on line 60 if sync complete/error, source subscribes after (line 64)\n sourceSubscription.unsubscribe();\n notifierSubscription.unsubscribe();\n };\n });\n}\n","import { events, getPluginApi } from \"@real-router/core\";\n\nimport { RxObservable } from \"./RxObservable\";\n\nimport type { Router, State, SubscribeState } from \"@real-router/core\";\n\nexport type { SubscribeState } from \"@real-router/core\";\n\nexport function state$(\n router: Router,\n options?: { replay?: boolean },\n): RxObservable<SubscribeState> {\n const { replay = true } = options ?? {};\n\n return new RxObservable<SubscribeState>((observer) => {\n const api = getPluginApi(router);\n const unsubscribe = api.addEventListener(\n events.TRANSITION_SUCCESS,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ route: toState, previousRoute: fromState });\n },\n );\n\n if (replay) {\n const currentState = router.getState();\n\n if (currentState) {\n queueMicrotask(() => {\n observer.next?.({ route: currentState, previousRoute: undefined });\n });\n }\n }\n\n return unsubscribe;\n });\n}\n","import { events, getPluginApi } from \"@real-router/core\";\n\nimport { RxObservable } from \"./RxObservable\";\n\nimport type {\n Router,\n State,\n NavigationOptions,\n RouterError,\n} from \"@real-router/core\";\n\nexport type RouterEvent =\n | { type: \"ROUTER_START\" }\n | { type: \"ROUTER_STOP\" }\n | { type: \"TRANSITION_START\"; toState: State; fromState: State | undefined }\n | {\n type: \"TRANSITION_SUCCESS\";\n toState: State;\n fromState: State | undefined;\n options: NavigationOptions;\n }\n | {\n type: \"TRANSITION_ERROR\";\n toState: State | undefined;\n fromState: State | undefined;\n error: RouterError;\n }\n | { type: \"TRANSITION_CANCEL\"; toState: State; fromState: State | undefined };\n\nexport function events$(router: Router): RxObservable<RouterEvent> {\n return new RxObservable<RouterEvent>((observer) => {\n const api = getPluginApi(router);\n const unsubscribes: (() => void)[] = [];\n\n /* eslint-disable unicorn/prefer-single-call -- individual pushes for partial registration safety */\n try {\n unsubscribes.push(\n api.addEventListener(events.ROUTER_START, () => {\n observer.next?.({ type: \"ROUTER_START\" });\n }),\n );\n unsubscribes.push(\n api.addEventListener(events.ROUTER_STOP, () => {\n observer.next?.({ type: \"ROUTER_STOP\" });\n }),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_START,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ type: \"TRANSITION_START\", toState, fromState });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_SUCCESS,\n (\n toState: State,\n fromState: State | undefined,\n options: NavigationOptions,\n ) => {\n observer.next?.({\n type: \"TRANSITION_SUCCESS\",\n toState,\n fromState,\n options,\n });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_ERROR,\n (\n toState: State | undefined,\n fromState: State | undefined,\n error: RouterError,\n ) => {\n observer.next?.({\n type: \"TRANSITION_ERROR\",\n toState,\n fromState,\n error,\n });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_CANCEL,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ type: \"TRANSITION_CANCEL\", toState, fromState });\n },\n ),\n );\n /* eslint-enable unicorn/prefer-single-call */\n /* v8 ignore start -- defensive: partial listener registration failure */\n } catch (error) {\n // Clean up any listeners that were successfully registered\n for (const unsub of unsubscribes) {\n unsub();\n }\n\n throw error;\n }\n /* v8 ignore stop */\n\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n });\n}\n","import { state$, type SubscribeState } from \"./state$\";\n\nimport type { RxObservable } from \"./RxObservable\";\nimport type { Router } from \"@real-router/core\";\n\n/**\n * Creates a TC39-compliant Observable from a router instance.\n *\n * This is a semantic wrapper over `state$()` that provides TC39 Observable interop.\n * Use this when you need RxJS compatibility via `from(observable(router))`.\n *\n * @param router - Router instance to observe\n * @returns RxObservable that emits state changes\n *\n * @example\n * ```typescript\n * import { from } from 'rxjs';\n * import { observable } from '@real-router/rx';\n *\n * const router$ = from(observable(router));\n * router$.subscribe(({ route, previousRoute }) => {\n * console.log('Navigation:', previousRoute?.name, '→', route.name);\n * });\n * ```\n */\nexport function observable(router: Router): RxObservable<SubscribeState> {\n return state$(router);\n}\n"]}
1
+ {"version":3,"sources":["../../src/RxObservable.ts","../../src/operators/createOperator.ts","../../src/operators/map.ts","../../src/operators/filter.ts","../../src/operators/debounceTime.ts","../../src/operators/distinctUntilChanged.ts","../../src/operators/takeUntil.ts","../../src/state$.ts","../../src/events$.ts","../../src/observable.ts"],"names":["getPluginApi","events"],"mappings":"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","file":"index.mjs","sourcesContent":["import type {\n Observer,\n Subscription,\n ObservableOptions,\n SubscribeFn,\n Operator,\n} from \"./types\";\n\ndeclare global {\n interface SymbolConstructor {\n readonly observable: symbol;\n }\n}\n\nexport class RxObservable<T> {\n #subscribeFn: SubscribeFn<T>;\n\n constructor(subscribeFn: SubscribeFn<T>) {\n this.#subscribeFn = subscribeFn;\n }\n\n subscribe(\n observerOrNext: Observer<T> | ((value: T) => void),\n options?: ObservableOptions,\n ): Subscription {\n const observer: Observer<T> =\n typeof observerOrNext === \"function\"\n ? { next: observerOrNext }\n : observerOrNext;\n\n const { signal } = options ?? {};\n\n if (signal?.aborted) {\n return {\n unsubscribe: () => {},\n closed: true,\n };\n }\n\n let closed = false;\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type -- matches SubscribeFn return type\n let teardown: void | (() => void);\n\n const safeNext = (value: T) => {\n if (closed) {\n return;\n }\n\n try {\n observer.next?.(value);\n } catch (error) {\n safeError(error);\n }\n };\n\n const safeError = (err: unknown) => {\n if (closed) {\n return;\n }\n\n try {\n if (observer.error) {\n observer.error(err);\n } else {\n console.error(\"Unhandled error in RxObservable:\", err);\n }\n } catch {\n // Errors in error handler are caught silently\n }\n };\n\n const safeComplete = () => {\n if (closed) {\n return;\n }\n\n closed = true;\n\n try {\n observer.complete?.();\n } catch {\n // Errors in complete handler are caught silently\n }\n };\n\n const subscription: Subscription = {\n unsubscribe: () => {\n if (closed) {\n return;\n }\n\n closed = true;\n\n if (abortHandler) {\n signal?.removeEventListener(\"abort\", abortHandler);\n }\n\n if (teardown) {\n try {\n teardown();\n } catch {\n // Teardown errors are caught silently\n }\n }\n },\n get closed() {\n return closed;\n },\n };\n\n let abortHandler: (() => void) | undefined;\n\n if (signal) {\n abortHandler = () => {\n subscription.unsubscribe();\n };\n signal.addEventListener(\"abort\", abortHandler);\n }\n\n try {\n teardown = this.#subscribeFn({\n next: safeNext,\n error: safeError,\n complete: safeComplete,\n });\n } catch (error) {\n safeError(error);\n }\n\n return subscription;\n }\n\n pipe(): this;\n pipe<A>(op1: Operator<T, A>): RxObservable<A>;\n pipe<A, B>(op1: Operator<T, A>, op2: Operator<A, B>): RxObservable<B>;\n pipe<A, B, C>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n ): RxObservable<C>;\n pipe<A, B, C, D>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n ): RxObservable<D>;\n pipe<A, B, C, D, E>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n ): RxObservable<E>;\n pipe<A, B, C, D, E, F>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n ): RxObservable<F>;\n pipe<A, B, C, D, E, F, G>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n ): RxObservable<G>;\n pipe<A, B, C, D, E, F, G, H>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n ): RxObservable<H>;\n pipe<A, B, C, D, E, F, G, H, I>(\n op1: Operator<T, A>,\n op2: Operator<A, B>,\n op3: Operator<B, C>,\n op4: Operator<C, D>,\n op5: Operator<D, E>,\n op6: Operator<E, F>,\n op7: Operator<F, G>,\n op8: Operator<G, H>,\n op9: Operator<H, I>,\n ): RxObservable<I>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipe(...operators: Operator<any, any>[]): any {\n if (operators.length === 0) {\n return this;\n }\n\n // eslint-disable-next-line unicorn/no-this-assignment, @typescript-eslint/no-this-alias -- pipe pattern\n let result: RxObservable<unknown> = this;\n\n for (const operator of operators) {\n result = operator(result);\n }\n\n return result;\n }\n\n [Symbol.observable](): this {\n return this;\n }\n\n [\"@@observable\"](): this {\n return this;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterableIterator<T> {\n let resolve: (() => void) | null = null;\n let latestValue: T | undefined;\n let hasValue = false;\n let completed = false;\n let error: unknown = null;\n\n const subscription = this.subscribe({\n next: (value) => {\n latestValue = value;\n hasValue = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n /* v8 ignore start -- v8 coverage can't track branches inside suspended async generators */\n error: (err) => {\n error = err;\n completed = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n complete: () => {\n completed = true;\n if (resolve) {\n const r = resolve;\n\n resolve = null;\n r();\n }\n },\n /* v8 ignore stop */\n });\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- v8 ignore affects analysis\n while (!completed) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- v8 ignore affects analysis\n if (hasValue) {\n const value = latestValue as T;\n\n hasValue = false;\n yield value;\n } else {\n await new Promise<void>((_resolve) => {\n resolve = _resolve;\n });\n\n if (error !== null) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw error;\n }\n }\n }\n } finally {\n subscription.unsubscribe();\n }\n }\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Observer } from \"../types\";\n\n/**\n * Creates a stateless operator. Wires error/complete/teardown automatically.\n * The `next` callback receives each value and the downstream observer.\n */\nexport function createOperator<T, R>(\n next: (value: T, observer: Observer<R>) => void,\n): (source: RxObservable<T>) => RxObservable<R> {\n return (source: RxObservable<T>) =>\n new RxObservable<R>((observer) => {\n const subscription = source.subscribe({\n next: (value) => {\n next(value, observer);\n },\n error: (error) => observer.error?.(error),\n complete: () => observer.complete?.(),\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n}\n\n/**\n * Creates a stateful operator. The subscribeFn sets up its own subscriptions\n * and returns a teardown function.\n */\nexport function createStatefulOperator<T, R>(\n subscribeFn: (source: RxObservable<T>, observer: Observer<R>) => () => void,\n): (source: RxObservable<T>) => RxObservable<R> {\n return (source: RxObservable<T>) =>\n new RxObservable<R>((observer) => subscribeFn(source, observer));\n}\n","import { createOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function map<T, R>(project: (value: T) => R): Operator<T, R> {\n return createOperator<T, R>((value, observer) => {\n try {\n const result = project(value);\n\n observer.next?.(result);\n } catch (error) {\n observer.error?.(error);\n }\n });\n}\n","import { createOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function filter<T, S extends T>(\n predicate: (value: T) => value is S,\n): Operator<T, S>;\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T>;\n\nexport function filter<T>(predicate: (value: T) => boolean): Operator<T, T> {\n return createOperator<T, T>((value, observer) => {\n try {\n if (predicate(value)) {\n observer.next?.(value);\n }\n } catch (error) {\n observer.error?.(error);\n }\n });\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Operator } from \"../types\";\n\nexport function debounceTime<T>(duration: number): Operator<T, T> {\n if (!Number.isFinite(duration) || duration < 0) {\n throw new RangeError(\n `debounceTime: duration must be a non-negative finite number, got ${duration}`,\n );\n }\n\n return (source: RxObservable<T>) =>\n new RxObservable<T>((observer) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let latestValue: T;\n let hasValue = false;\n\n const subscription = source.subscribe({\n next: (value) => {\n latestValue = value;\n hasValue = true;\n\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n /* v8 ignore start -- defensive: timer fired after flush */\n if (hasValue) {\n observer.next?.(latestValue);\n hasValue = false;\n }\n /* v8 ignore stop */\n\n timeoutId = undefined;\n }, duration);\n },\n error: (error) => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n observer.error?.(error);\n },\n complete: () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n if (hasValue) {\n observer.next?.(latestValue);\n hasValue = false;\n }\n\n observer.complete?.();\n },\n });\n\n return () => {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n subscription.unsubscribe();\n };\n });\n}\n","import { createStatefulOperator } from \"./createOperator\";\n\nimport type { Operator } from \"../types\";\n\nexport function distinctUntilChanged<T>(\n comparator?: (a: T, b: T) => boolean,\n): Operator<T, T> {\n return createStatefulOperator<T, T>((source, observer) => {\n let hasLast = false;\n let last: T;\n const compare = comparator ?? ((a: T, b: T) => a === b);\n\n const subscription = source.subscribe({\n next: (value) => {\n if (!hasLast) {\n hasLast = true;\n last = value;\n observer.next?.(value);\n\n return;\n }\n\n try {\n if (!compare(last, value)) {\n last = value;\n observer.next?.(value);\n }\n } catch (error) {\n observer.error?.(error);\n }\n },\n error: (error) => observer.error?.(error),\n complete: () => observer.complete?.(),\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n}\n","import { RxObservable } from \"../RxObservable\";\n\nimport type { Operator } from \"../types\";\n\nexport function takeUntil<T>(notifier: RxObservable<unknown>): Operator<T, T> {\n return (source: RxObservable<T>) =>\n new RxObservable<T>((observer) => {\n // eslint-disable-next-line prefer-const -- assigned after usage in complete()\n let sourceSubscription: ReturnType<typeof source.subscribe> | undefined;\n // eslint-disable-next-line prefer-const -- assigned after usage in complete()\n let notifierSubscription:\n | ReturnType<typeof notifier.subscribe>\n | undefined;\n let completed = false;\n\n const complete = () => {\n /* v8 ignore start -- defensive: race condition guard */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // sourceSubscription may be undefined if notifier emits synchronously\n if (sourceSubscription) {\n sourceSubscription.unsubscribe();\n }\n // notifierSubscription may be undefined if we're inside notifier.subscribe() call\n if (notifierSubscription) {\n notifierSubscription.unsubscribe();\n }\n\n observer.complete?.();\n };\n\n notifierSubscription = notifier.subscribe({\n next: () => {\n complete();\n },\n error: (error) => {\n /* v8 ignore start -- defensive: notifier error after completion */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // sourceSubscription may be undefined if notifier errors synchronously\n if (sourceSubscription) {\n sourceSubscription.unsubscribe();\n }\n\n observer.error?.(error);\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive\n if (completed) {\n return;\n }\n\n sourceSubscription = source.subscribe({\n next: (value) => {\n /* v8 ignore start -- defensive: emission after completion */\n\n if (!completed) {\n observer.next?.(value);\n }\n /* v8 ignore stop */\n },\n error: (error) => {\n /* v8 ignore start -- defensive: race condition guard */\n if (completed) {\n return;\n }\n /* v8 ignore stop */\n\n completed = true;\n\n // notifierSubscription is always defined here (notifier subscribes before source)\n notifierSubscription.unsubscribe();\n\n observer.error?.(error);\n },\n complete: () => {\n complete();\n },\n });\n\n return () => {\n // Both guaranteed defined: notifier subscribes first (line 37),\n // early return on line 60 if sync complete/error, source subscribes after (line 64)\n sourceSubscription.unsubscribe();\n notifierSubscription.unsubscribe();\n };\n });\n}\n","import { events } from \"@real-router/core\";\nimport { getPluginApi } from \"@real-router/core/api\";\n\nimport { RxObservable } from \"./RxObservable\";\n\nimport type { Router, State, SubscribeState } from \"@real-router/core\";\n\nexport type { SubscribeState } from \"@real-router/core\";\n\nexport function state$(\n router: Router,\n options?: { replay?: boolean },\n): RxObservable<SubscribeState> {\n const { replay = true } = options ?? {};\n\n return new RxObservable<SubscribeState>((observer) => {\n const api = getPluginApi(router);\n const unsubscribe = api.addEventListener(\n events.TRANSITION_SUCCESS,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ route: toState, previousRoute: fromState });\n },\n );\n\n if (replay) {\n const currentState = router.getState();\n\n if (currentState) {\n queueMicrotask(() => {\n observer.next?.({ route: currentState, previousRoute: undefined });\n });\n }\n }\n\n return unsubscribe;\n });\n}\n","import { events } from \"@real-router/core\";\nimport { getPluginApi } from \"@real-router/core/api\";\n\nimport { RxObservable } from \"./RxObservable\";\n\nimport type {\n Router,\n State,\n NavigationOptions,\n RouterError,\n} from \"@real-router/core\";\n\nexport type RouterEvent =\n | { type: \"ROUTER_START\" }\n | { type: \"ROUTER_STOP\" }\n | { type: \"TRANSITION_START\"; toState: State; fromState: State | undefined }\n | {\n type: \"TRANSITION_SUCCESS\";\n toState: State;\n fromState: State | undefined;\n options: NavigationOptions;\n }\n | {\n type: \"TRANSITION_ERROR\";\n toState: State | undefined;\n fromState: State | undefined;\n error: RouterError;\n }\n | { type: \"TRANSITION_CANCEL\"; toState: State; fromState: State | undefined };\n\nexport function events$(router: Router): RxObservable<RouterEvent> {\n return new RxObservable<RouterEvent>((observer) => {\n const api = getPluginApi(router);\n const unsubscribes: (() => void)[] = [];\n\n /* eslint-disable unicorn/prefer-single-call -- individual pushes for partial registration safety */\n try {\n unsubscribes.push(\n api.addEventListener(events.ROUTER_START, () => {\n observer.next?.({ type: \"ROUTER_START\" });\n }),\n );\n unsubscribes.push(\n api.addEventListener(events.ROUTER_STOP, () => {\n observer.next?.({ type: \"ROUTER_STOP\" });\n }),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_START,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ type: \"TRANSITION_START\", toState, fromState });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_SUCCESS,\n (\n toState: State,\n fromState: State | undefined,\n options: NavigationOptions,\n ) => {\n observer.next?.({\n type: \"TRANSITION_SUCCESS\",\n toState,\n fromState,\n options,\n });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_ERROR,\n (\n toState: State | undefined,\n fromState: State | undefined,\n error: RouterError,\n ) => {\n observer.next?.({\n type: \"TRANSITION_ERROR\",\n toState,\n fromState,\n error,\n });\n },\n ),\n );\n unsubscribes.push(\n api.addEventListener(\n events.TRANSITION_CANCEL,\n (toState: State, fromState: State | undefined) => {\n observer.next?.({ type: \"TRANSITION_CANCEL\", toState, fromState });\n },\n ),\n );\n /* eslint-enable unicorn/prefer-single-call */\n /* v8 ignore start -- defensive: partial listener registration failure */\n } catch (error) {\n // Clean up any listeners that were successfully registered\n for (const unsub of unsubscribes) {\n unsub();\n }\n\n throw error;\n }\n /* v8 ignore stop */\n\n return () => {\n for (const unsub of unsubscribes) {\n unsub();\n }\n };\n });\n}\n","import { state$, type SubscribeState } from \"./state$\";\n\nimport type { RxObservable } from \"./RxObservable\";\nimport type { Router } from \"@real-router/core\";\n\n/**\n * Creates a TC39-compliant Observable from a router instance.\n *\n * This is a semantic wrapper over `state$()` that provides TC39 Observable interop.\n * Use this when you need RxJS compatibility via `from(observable(router))`.\n *\n * @param router - Router instance to observe\n * @returns RxObservable that emits state changes\n *\n * @example\n * ```typescript\n * import { from } from 'rxjs';\n * import { observable } from '@real-router/rx';\n *\n * const router$ = from(observable(router));\n * router$.subscribe(({ route, previousRoute }) => {\n * console.log('Navigation:', previousRoute?.name, '→', route.name);\n * });\n * ```\n */\nexport function observable(router: Router): RxObservable<SubscribeState> {\n return state$(router);\n}\n"]}
@@ -1 +1 @@
1
- {"inputs":{"src/RxObservable.ts":{"bytes":6310,"imports":[],"format":"esm"},"src/operators/createOperator.ts":{"bytes":1177,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"}],"format":"esm"},"src/operators/map.ts":{"bytes":364,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"}],"format":"esm"},"src/operators/filter.ts":{"bytes":550,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"}],"format":"esm"},"src/operators/debounceTime.ts":{"bytes":1803,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"}],"format":"esm"},"src/operators/distinctUntilChanged.ts":{"bytes":955,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"}],"format":"esm"},"src/operators/takeUntil.ts":{"bytes":2959,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"}],"format":"esm"},"src/operators/index.ts":{"bytes":219,"imports":[{"path":"src/operators/map.ts","kind":"import-statement","original":"./map"},{"path":"src/operators/filter.ts","kind":"import-statement","original":"./filter"},{"path":"src/operators/debounceTime.ts","kind":"import-statement","original":"./debounceTime"},{"path":"src/operators/distinctUntilChanged.ts","kind":"import-statement","original":"./distinctUntilChanged"},{"path":"src/operators/takeUntil.ts","kind":"import-statement","original":"./takeUntil"}],"format":"esm"},"src/state$.ts":{"bytes":972,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"}],"format":"esm"},"src/events$.ts":{"bytes":3177,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"}],"format":"esm"},"src/observable.ts":{"bytes":897,"imports":[{"path":"src/state$.ts","kind":"import-statement","original":"./state$"}],"format":"esm"},"src/index.ts":{"bytes":489,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"},{"path":"src/operators/index.ts","kind":"import-statement","original":"./operators"},{"path":"src/state$.ts","kind":"import-statement","original":"./state$"},{"path":"src/events$.ts","kind":"import-statement","original":"./events$"},{"path":"src/observable.ts","kind":"import-statement","original":"./observable"}],"format":"esm"}},"outputs":{"dist/esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":27659},"dist/esm/index.mjs":{"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true}],"exports":["RxObservable","debounceTime","distinctUntilChanged","events$","filter","map","observable","state$","takeUntil"],"entryPoint":"src/index.ts","inputs":{"src/RxObservable.ts":{"bytesInOutput":3515},"src/index.ts":{"bytesInOutput":0},"src/operators/createOperator.ts":{"bytesInOutput":497},"src/operators/map.ts":{"bytesInOutput":216},"src/operators/index.ts":{"bytesInOutput":0},"src/operators/filter.ts":{"bytesInOutput":223},"src/operators/debounceTime.ts":{"bytesInOutput":1376},"src/operators/distinctUntilChanged.ts":{"bytesInOutput":775},"src/operators/takeUntil.ts":{"bytesInOutput":1369},"src/state$.ts":{"bytesInOutput":667},"src/events$.ts":{"bytesInOutput":1882},"src/observable.ts":{"bytesInOutput":57}},"bytes":10987}}}
1
+ {"inputs":{"src/RxObservable.ts":{"bytes":6310,"imports":[],"format":"esm"},"src/operators/createOperator.ts":{"bytes":1177,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"}],"format":"esm"},"src/operators/map.ts":{"bytes":364,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"}],"format":"esm"},"src/operators/filter.ts":{"bytes":550,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"}],"format":"esm"},"src/operators/debounceTime.ts":{"bytes":1803,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"}],"format":"esm"},"src/operators/distinctUntilChanged.ts":{"bytes":955,"imports":[{"path":"src/operators/createOperator.ts","kind":"import-statement","original":"./createOperator"}],"format":"esm"},"src/operators/takeUntil.ts":{"bytes":2959,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"}],"format":"esm"},"src/operators/index.ts":{"bytes":219,"imports":[{"path":"src/operators/map.ts","kind":"import-statement","original":"./map"},{"path":"src/operators/filter.ts","kind":"import-statement","original":"./filter"},{"path":"src/operators/debounceTime.ts","kind":"import-statement","original":"./debounceTime"},{"path":"src/operators/distinctUntilChanged.ts","kind":"import-statement","original":"./distinctUntilChanged"},{"path":"src/operators/takeUntil.ts","kind":"import-statement","original":"./takeUntil"}],"format":"esm"},"src/state$.ts":{"bytes":1012,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"}],"format":"esm"},"src/events$.ts":{"bytes":3217,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"}],"format":"esm"},"src/observable.ts":{"bytes":897,"imports":[{"path":"src/state$.ts","kind":"import-statement","original":"./state$"}],"format":"esm"},"src/index.ts":{"bytes":489,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"},{"path":"src/operators/index.ts","kind":"import-statement","original":"./operators"},{"path":"src/state$.ts","kind":"import-statement","original":"./state$"},{"path":"src/events$.ts","kind":"import-statement","original":"./events$"},{"path":"src/observable.ts","kind":"import-statement","original":"./observable"}],"format":"esm"}},"outputs":{"dist/esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":27767},"dist/esm/index.mjs":{"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true},{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"@real-router/core/api","kind":"import-statement","external":true}],"exports":["RxObservable","debounceTime","distinctUntilChanged","events$","filter","map","observable","state$","takeUntil"],"entryPoint":"src/index.ts","inputs":{"src/RxObservable.ts":{"bytesInOutput":3515},"src/index.ts":{"bytesInOutput":0},"src/operators/createOperator.ts":{"bytesInOutput":497},"src/operators/map.ts":{"bytesInOutput":216},"src/operators/index.ts":{"bytesInOutput":0},"src/operators/filter.ts":{"bytesInOutput":223},"src/operators/debounceTime.ts":{"bytesInOutput":1376},"src/operators/distinctUntilChanged.ts":{"bytesInOutput":775},"src/operators/takeUntil.ts":{"bytesInOutput":1369},"src/state$.ts":{"bytesInOutput":707},"src/events$.ts":{"bytesInOutput":1922},"src/observable.ts":{"bytesInOutput":57}},"bytes":11067}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@real-router/rx",
3
- "version": "0.1.26",
3
+ "version": "0.1.28",
4
4
  "type": "commonjs",
5
5
  "description": "Reactive Observable API for Real-Router — state$, events$, operators, and TC39 Observable support",
6
6
  "main": "./dist/cjs/index.js",
@@ -44,10 +44,12 @@
44
44
  "homepage": "https://github.com/greydragon888/real-router",
45
45
  "sideEffects": false,
46
46
  "dependencies": {
47
- "@real-router/core": "^0.34.0"
47
+ "@real-router/core": "^0.36.0"
48
48
  },
49
49
  "scripts": {
50
50
  "test": "vitest",
51
+ "test:stress": "vitest run --config vitest.config.stress.mts",
52
+ "test:properties": "vitest run --config vitest.config.properties.mts",
51
53
  "build": "tsup",
52
54
  "type-check": "tsc --noEmit",
53
55
  "lint": "eslint --cache --ext .ts src/ tests/ --fix --max-warnings 0",
package/src/events$.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { events, getPluginApi } from "@real-router/core";
1
+ import { events } from "@real-router/core";
2
+ import { getPluginApi } from "@real-router/core/api";
2
3
 
3
4
  import { RxObservable } from "./RxObservable";
4
5
 
package/src/state$.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { events, getPluginApi } from "@real-router/core";
1
+ import { events } from "@real-router/core";
2
+ import { getPluginApi } from "@real-router/core/api";
2
3
 
3
4
  import { RxObservable } from "./RxObservable";
4
5