@real-router/rx 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,165 @@
1
+ # @real-router/rx
2
+
3
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue.svg)](https://www.typescriptlang.org/)
5
+
6
+ Reactive Observable API for Real-Router. Zero-cost opt-in for reactive programming patterns.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install @real-router/rx
12
+ # or
13
+ pnpm add @real-router/rx
14
+ # or
15
+ yarn add @real-router/rx
16
+ # or
17
+ bun add @real-router/rx
18
+ ```
19
+
20
+ ## Quick Start
21
+
22
+ ```typescript
23
+ import { createRouter } from "@real-router/core";
24
+ import { state$ } from "@real-router/rx";
25
+
26
+ const router = createRouter([
27
+ { name: "home", path: "/" },
28
+ { name: "users", path: "/users" },
29
+ { name: "users.profile", path: "/:id" },
30
+ ]);
31
+
32
+ router.start();
33
+
34
+ // Subscribe to state changes
35
+ state$(router).subscribe(({ route, previousRoute }) => {
36
+ console.log("Navigation:", previousRoute?.name, "→", route.name);
37
+ });
38
+ ```
39
+
40
+ ---
41
+
42
+ ## API
43
+
44
+ ### Streams
45
+
46
+ #### `state$(router, options?)`
47
+
48
+ Creates a reactive stream of router state changes.\
49
+ `router: Router` — router instance\
50
+ `options.signal?: AbortSignal` — for automatic unsubscription\
51
+ Returns: `RxObservable<{ route: State, previousRoute?: State }>`\
52
+ [Wiki](https://github.com/greydragon888/real-router/wiki/rx-package#state$router-options)
53
+
54
+ #### `events$(router)`
55
+
56
+ Creates a reactive stream of all router events.\
57
+ `router: Router` — router instance\
58
+ Returns: `RxObservable<RouterEvent>`\
59
+ [Wiki](https://github.com/greydragon888/real-router/wiki/rx-package#events$router)
60
+
61
+ #### `observable(router)`
62
+
63
+ Creates a TC39 Observable-compliant wrapper for RxJS interop.\
64
+ `router: Router` — router instance\
65
+ Returns: `RxObservable<SubscribeState>`\
66
+ [Wiki](https://github.com/greydragon888/real-router/wiki/rx-package#observablerouter)
67
+
68
+ ---
69
+
70
+ ### Operators
71
+
72
+ #### `map(project)`
73
+
74
+ Transforms emitted values.\
75
+ [Wiki](https://github.com/greydragon888/real-router/wiki/rx-package#mapt-rproject-value-t--r)
76
+
77
+ #### `filter(predicate)`
78
+
79
+ Filters values based on a predicate.\
80
+ [Wiki](https://github.com/greydragon888/real-router/wiki/rx-package#filtertpredicate-value-t--boolean)
81
+
82
+ #### `debounceTime(duration)`
83
+
84
+ Delays emissions, emitting only the last value.\
85
+ [Wiki](https://github.com/greydragon888/real-router/wiki/rx-package#debouncetimetduration-number)
86
+
87
+ #### `distinctUntilChanged(comparator?)`
88
+
89
+ Filters consecutive duplicate values.\
90
+ [Wiki](https://github.com/greydragon888/real-router/wiki/rx-package#distinctuntilchangedtcomparator-prev-t-curr-t--boolean)
91
+
92
+ #### `takeUntil(notifier)`
93
+
94
+ Completes stream when notifier emits.\
95
+ [Wiki](https://github.com/greydragon888/real-router/wiki/rx-package#takeuntiltnotifier-rxobservableany)
96
+
97
+ ---
98
+
99
+ ## Usage Examples
100
+
101
+ ### Operator Pipeline
102
+
103
+ ```typescript
104
+ import { state$, map, filter, distinctUntilChanged } from "@real-router/rx";
105
+
106
+ state$(router)
107
+ .pipe(
108
+ map(({ route }) => route.params.categoryId),
109
+ filter((id) => id !== undefined),
110
+ distinctUntilChanged(),
111
+ )
112
+ .subscribe((categoryId) => {
113
+ loadCategory(categoryId);
114
+ });
115
+ ```
116
+
117
+ ### Event Filtering
118
+
119
+ ```typescript
120
+ import { events$, filter } from "@real-router/rx";
121
+
122
+ // Track navigation errors
123
+ events$(router)
124
+ .pipe(filter((e) => e.type === "TRANSITION_ERROR"))
125
+ .subscribe(({ error }) => {
126
+ errorTracker.capture(error);
127
+ });
128
+ ```
129
+
130
+ ### RxJS Interop
131
+
132
+ ```typescript
133
+ import { from } from "rxjs";
134
+ import { debounceTime } from "rxjs/operators";
135
+ import { observable } from "@real-router/rx";
136
+
137
+ from(observable(router))
138
+ .pipe(debounceTime(100))
139
+ .subscribe(({ route }) => {
140
+ console.log("Route:", route.name);
141
+ });
142
+ ```
143
+
144
+ ---
145
+
146
+ ## Documentation
147
+
148
+ Full documentation available on the [Wiki](https://github.com/greydragon888/real-router/wiki/rx-package):
149
+
150
+ - [API Reference](https://github.com/greydragon888/real-router/wiki/rx-package#api-reference)
151
+ - [Operators](https://github.com/greydragon888/real-router/wiki/rx-package#operators)
152
+ - [Async Iteration](https://github.com/greydragon888/real-router/wiki/rx-package#async-iteration)
153
+ - [Migration Guide](https://github.com/greydragon888/real-router/wiki/rx-package#migration-guide)
154
+
155
+ ---
156
+
157
+ ## Related Packages
158
+
159
+ - [@real-router/core](https://www.npmjs.com/package/@real-router/core) — Core router
160
+ - [@real-router/react](https://www.npmjs.com/package/@real-router/react) — React integration
161
+ - [@real-router/browser-plugin](https://www.npmjs.com/package/@real-router/browser-plugin) — Browser history
162
+
163
+ ## License
164
+
165
+ MIT © [Oleg Ivanov](https://github.com/greydragon888)
@@ -0,0 +1,107 @@
1
+ import { Router, SubscribeState, State, NavigationOptions, RouterError } from '@real-router/core';
2
+ export { SubscribeState } from '@real-router/core';
3
+
4
+ interface Observer<T> {
5
+ next?: (value: T) => void;
6
+ error?: (err: unknown) => void;
7
+ complete?: () => void;
8
+ }
9
+ interface Subscription {
10
+ unsubscribe: () => void;
11
+ readonly closed: boolean;
12
+ }
13
+ interface ObservableOptions {
14
+ signal?: AbortSignal;
15
+ replay?: boolean;
16
+ }
17
+ type SubscribeFn<T> = (observer: Observer<T>) => void | (() => void);
18
+ type Operator<T, R> = (source: RxObservable<T>) => RxObservable<R>;
19
+ type UnaryFunction<T, R> = (source: T) => R;
20
+
21
+ declare global {
22
+ interface SymbolConstructor {
23
+ readonly observable: symbol;
24
+ }
25
+ }
26
+ declare class RxObservable<T> {
27
+ #private;
28
+ constructor(subscribeFn: SubscribeFn<T>);
29
+ subscribe(observerOrNext: Observer<T> | ((value: T) => void), options?: ObservableOptions): Subscription;
30
+ pipe(): this;
31
+ pipe<A>(op1: Operator<T, A>): RxObservable<A>;
32
+ pipe<A, B>(op1: Operator<T, A>, op2: Operator<A, B>): RxObservable<B>;
33
+ pipe<A, B, C>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>): RxObservable<C>;
34
+ pipe<A, B, C, D>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>): RxObservable<D>;
35
+ pipe<A, B, C, D, E>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>, op5: Operator<D, E>): RxObservable<E>;
36
+ pipe<A, B, C, D, E, F>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>, op5: Operator<D, E>, op6: Operator<E, F>): RxObservable<F>;
37
+ pipe<A, B, C, D, E, F, G>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>, op5: Operator<D, E>, op6: Operator<E, F>, op7: Operator<F, G>): RxObservable<G>;
38
+ pipe<A, B, C, D, E, F, G, H>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>, op5: Operator<D, E>, op6: Operator<E, F>, op7: Operator<F, G>, op8: Operator<G, H>): RxObservable<H>;
39
+ pipe<A, B, C, D, E, F, G, H, I>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>, op5: Operator<D, E>, op6: Operator<E, F>, op7: Operator<F, G>, op8: Operator<G, H>, op9: Operator<H, I>): RxObservable<I>;
40
+ [Symbol.observable](): this;
41
+ ["@@observable"](): this;
42
+ [Symbol.asyncIterator](): AsyncIterableIterator<T>;
43
+ }
44
+
45
+ declare function map<T, R>(project: (value: T) => R): Operator<T, R>;
46
+
47
+ declare function filter<T, S extends T>(predicate: (value: T) => value is S): Operator<T, S>;
48
+ declare function filter<T>(predicate: (value: T) => boolean): Operator<T, T>;
49
+
50
+ declare function debounceTime<T>(duration: number): Operator<T, T>;
51
+
52
+ declare function distinctUntilChanged<T>(comparator?: (a: T, b: T) => boolean): Operator<T, T>;
53
+
54
+ declare function takeUntil<T>(notifier: RxObservable<unknown>): Operator<T, T>;
55
+
56
+ declare function state$(router: Router, options?: {
57
+ replay?: boolean;
58
+ }): RxObservable<SubscribeState>;
59
+
60
+ type RouterEvent = {
61
+ type: "ROUTER_START";
62
+ } | {
63
+ type: "ROUTER_STOP";
64
+ } | {
65
+ type: "TRANSITION_START";
66
+ toState: State;
67
+ fromState: State | undefined;
68
+ } | {
69
+ type: "TRANSITION_SUCCESS";
70
+ toState: State;
71
+ fromState: State | undefined;
72
+ options: NavigationOptions;
73
+ } | {
74
+ type: "TRANSITION_ERROR";
75
+ toState: State | undefined;
76
+ fromState: State | undefined;
77
+ error: RouterError;
78
+ } | {
79
+ type: "TRANSITION_CANCEL";
80
+ toState: State;
81
+ fromState: State | undefined;
82
+ };
83
+ declare function events$(router: Router): RxObservable<RouterEvent>;
84
+
85
+ /**
86
+ * Creates a TC39-compliant Observable from a router instance.
87
+ *
88
+ * This is a semantic wrapper over `state$()` that provides TC39 Observable interop.
89
+ * Use this when you need RxJS compatibility via `from(observable(router))`.
90
+ *
91
+ * @param router - Router instance to observe
92
+ * @returns RxObservable that emits state changes
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * import { from } from 'rxjs';
97
+ * import { observable } from '@real-router/rx';
98
+ *
99
+ * const router$ = from(observable(router));
100
+ * router$.subscribe(({ route, previousRoute }) => {
101
+ * console.log('Navigation:', previousRoute?.name, '→', route.name);
102
+ * });
103
+ * ```
104
+ */
105
+ declare function observable(router: Router): RxObservable<SubscribeState>;
106
+
107
+ export { type ObservableOptions, type Observer, type Operator, type RouterEvent, RxObservable, type SubscribeFn, type Subscription, type UnaryFunction, debounceTime, distinctUntilChanged, events$, filter, map, observable, state$, takeUntil };
@@ -0,0 +1 @@
1
+ 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(r,n){const{replay:o=!0}=n??{};return new t(t=>{const n=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=>new t(t=>{let n,o=!1;const s=e??((e,t)=>e===t),i=r.subscribe({next:e=>{if(!o)return o=!0,n=e,void t.next?.(e);try{s(n,e)||(n=e,t.next?.(e))}catch(e){t.error?.(e)}},error:e=>t.error?.(e),complete:()=>t.complete?.()});return()=>{i.unsubscribe()}})},exports.events$=function(r){return new t(t=>{const n=[];try{n.push(r.addEventListener(e.events.ROUTER_START,()=>{t.next?.({type:"ROUTER_START"})})),n.push(r.addEventListener(e.events.ROUTER_STOP,()=>{t.next?.({type:"ROUTER_STOP"})})),n.push(r.addEventListener(e.events.TRANSITION_START,(e,r)=>{t.next?.({type:"TRANSITION_START",toState:e,fromState:r})})),n.push(r.addEventListener(e.events.TRANSITION_SUCCESS,(e,r,n)=>{t.next?.({type:"TRANSITION_SUCCESS",toState:e,fromState:r,options:n})})),n.push(r.addEventListener(e.events.TRANSITION_ERROR,(e,r,n)=>{t.next?.({type:"TRANSITION_ERROR",toState:e,fromState:r,error:n})})),n.push(r.addEventListener(e.events.TRANSITION_CANCEL,(e,r)=>{t.next?.({type:"TRANSITION_CANCEL",toState:e,fromState:r})}))}catch(e){for(const e of n)e();throw e}return()=>{for(const e of n)e()}})},exports.filter=function(e){return r=>new t(t=>{const n=r.subscribe({next:r=>{try{e(r)&&t.next?.(r)}catch(e){t.error?.(e)}},error:e=>t.error?.(e),complete:()=>t.complete?.()});return()=>{n.unsubscribe()}})},exports.map=function(e){return r=>new t(t=>{const n=r.subscribe({next:r=>{try{const n=e(r);t.next?.(n)}catch(e){t.error?.(e)}},error:e=>t.error?.(e),complete:()=>t.complete?.()});return()=>{n.unsubscribe()}})},exports.observable=function(e){return r(e)},exports.state$=r,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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/RxObservable.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":["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 { Operator } from \"../types\";\n\nexport function map<T, R>(project: (value: T) => R): Operator<T, R> {\n return (source: RxObservable<T>) =>\n new RxObservable<R>((observer) => {\n const subscription = source.subscribe({\n next: (value) => {\n try {\n const result = project(value);\n\n observer.next?.(result);\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 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 (source: RxObservable<T>) =>\n new RxObservable<T>((observer) => {\n const subscription = source.subscribe({\n next: (value) => {\n try {\n if (predicate(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 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 { RxObservable } from \"../RxObservable\";\n\nimport type { Operator } from \"../types\";\n\nexport function distinctUntilChanged<T>(\n comparator?: (a: T, b: T) => boolean,\n): Operator<T, T> {\n return (source: RxObservable<T>) =>\n new RxObservable<T>((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\";\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 unsubscribe = router.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\";\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 unsubscribes: (() => void)[] = [];\n\n /* eslint-disable unicorn/prefer-single-call -- individual pushes for partial registration safety */\n try {\n unsubscribes.push(\n router.addEventListener(events.ROUTER_START, () => {\n observer.next?.({ type: \"ROUTER_START\" });\n }),\n );\n unsubscribes.push(\n router.addEventListener(events.ROUTER_STOP, () => {\n observer.next?.({ type: \"ROUTER_STOP\" });\n }),\n );\n unsubscribes.push(\n router.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 router.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 router.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 router.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"]}
@@ -0,0 +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":"/Users/olegivanov/WebstormProjects/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":683,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"},{"path":"/Users/olegivanov/WebstormProjects/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":875,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"},{"path":"/Users/olegivanov/WebstormProjects/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":"/Users/olegivanov/WebstormProjects/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":1014,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"},{"path":"/Users/olegivanov/WebstormProjects/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":"/Users/olegivanov/WebstormProjects/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":"/Users/olegivanov/WebstormProjects/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":923,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"},{"path":"/Users/olegivanov/WebstormProjects/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":3143,"imports":[{"path":"@real-router/core","kind":"import-statement","external":true},{"path":"src/RxObservable.ts","kind":"import-statement","original":"./RxObservable"},{"path":"/Users/olegivanov/WebstormProjects/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":"/Users/olegivanov/WebstormProjects/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":"/Users/olegivanov/WebstormProjects/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":26956},"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/map.ts":{"bytesInOutput":486},"src/operators/index.ts":{"bytesInOutput":0},"src/operators/filter.ts":{"bytesInOutput":497},"src/operators/debounceTime.ts":{"bytesInOutput":1376},"src/operators/distinctUntilChanged.ts":{"bytesInOutput":773},"src/operators/takeUntil.ts":{"bytesInOutput":1369},"src/state$.ts":{"bytesInOutput":618},"src/events$.ts":{"bytesInOutput":1830},"src/observable.ts":{"bytesInOutput":57}},"bytes":10895}}}
@@ -0,0 +1,107 @@
1
+ import { Router, SubscribeState, State, NavigationOptions, RouterError } from '@real-router/core';
2
+ export { SubscribeState } from '@real-router/core';
3
+
4
+ interface Observer<T> {
5
+ next?: (value: T) => void;
6
+ error?: (err: unknown) => void;
7
+ complete?: () => void;
8
+ }
9
+ interface Subscription {
10
+ unsubscribe: () => void;
11
+ readonly closed: boolean;
12
+ }
13
+ interface ObservableOptions {
14
+ signal?: AbortSignal;
15
+ replay?: boolean;
16
+ }
17
+ type SubscribeFn<T> = (observer: Observer<T>) => void | (() => void);
18
+ type Operator<T, R> = (source: RxObservable<T>) => RxObservable<R>;
19
+ type UnaryFunction<T, R> = (source: T) => R;
20
+
21
+ declare global {
22
+ interface SymbolConstructor {
23
+ readonly observable: symbol;
24
+ }
25
+ }
26
+ declare class RxObservable<T> {
27
+ #private;
28
+ constructor(subscribeFn: SubscribeFn<T>);
29
+ subscribe(observerOrNext: Observer<T> | ((value: T) => void), options?: ObservableOptions): Subscription;
30
+ pipe(): this;
31
+ pipe<A>(op1: Operator<T, A>): RxObservable<A>;
32
+ pipe<A, B>(op1: Operator<T, A>, op2: Operator<A, B>): RxObservable<B>;
33
+ pipe<A, B, C>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>): RxObservable<C>;
34
+ pipe<A, B, C, D>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>): RxObservable<D>;
35
+ pipe<A, B, C, D, E>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>, op5: Operator<D, E>): RxObservable<E>;
36
+ pipe<A, B, C, D, E, F>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>, op5: Operator<D, E>, op6: Operator<E, F>): RxObservable<F>;
37
+ pipe<A, B, C, D, E, F, G>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>, op5: Operator<D, E>, op6: Operator<E, F>, op7: Operator<F, G>): RxObservable<G>;
38
+ pipe<A, B, C, D, E, F, G, H>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>, op5: Operator<D, E>, op6: Operator<E, F>, op7: Operator<F, G>, op8: Operator<G, H>): RxObservable<H>;
39
+ pipe<A, B, C, D, E, F, G, H, I>(op1: Operator<T, A>, op2: Operator<A, B>, op3: Operator<B, C>, op4: Operator<C, D>, op5: Operator<D, E>, op6: Operator<E, F>, op7: Operator<F, G>, op8: Operator<G, H>, op9: Operator<H, I>): RxObservable<I>;
40
+ [Symbol.observable](): this;
41
+ ["@@observable"](): this;
42
+ [Symbol.asyncIterator](): AsyncIterableIterator<T>;
43
+ }
44
+
45
+ declare function map<T, R>(project: (value: T) => R): Operator<T, R>;
46
+
47
+ declare function filter<T, S extends T>(predicate: (value: T) => value is S): Operator<T, S>;
48
+ declare function filter<T>(predicate: (value: T) => boolean): Operator<T, T>;
49
+
50
+ declare function debounceTime<T>(duration: number): Operator<T, T>;
51
+
52
+ declare function distinctUntilChanged<T>(comparator?: (a: T, b: T) => boolean): Operator<T, T>;
53
+
54
+ declare function takeUntil<T>(notifier: RxObservable<unknown>): Operator<T, T>;
55
+
56
+ declare function state$(router: Router, options?: {
57
+ replay?: boolean;
58
+ }): RxObservable<SubscribeState>;
59
+
60
+ type RouterEvent = {
61
+ type: "ROUTER_START";
62
+ } | {
63
+ type: "ROUTER_STOP";
64
+ } | {
65
+ type: "TRANSITION_START";
66
+ toState: State;
67
+ fromState: State | undefined;
68
+ } | {
69
+ type: "TRANSITION_SUCCESS";
70
+ toState: State;
71
+ fromState: State | undefined;
72
+ options: NavigationOptions;
73
+ } | {
74
+ type: "TRANSITION_ERROR";
75
+ toState: State | undefined;
76
+ fromState: State | undefined;
77
+ error: RouterError;
78
+ } | {
79
+ type: "TRANSITION_CANCEL";
80
+ toState: State;
81
+ fromState: State | undefined;
82
+ };
83
+ declare function events$(router: Router): RxObservable<RouterEvent>;
84
+
85
+ /**
86
+ * Creates a TC39-compliant Observable from a router instance.
87
+ *
88
+ * This is a semantic wrapper over `state$()` that provides TC39 Observable interop.
89
+ * Use this when you need RxJS compatibility via `from(observable(router))`.
90
+ *
91
+ * @param router - Router instance to observe
92
+ * @returns RxObservable that emits state changes
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * import { from } from 'rxjs';
97
+ * import { observable } from '@real-router/rx';
98
+ *
99
+ * const router$ = from(observable(router));
100
+ * router$.subscribe(({ route, previousRoute }) => {
101
+ * console.log('Navigation:', previousRoute?.name, '→', route.name);
102
+ * });
103
+ * ```
104
+ */
105
+ declare function observable(router: Router): RxObservable<SubscribeState>;
106
+
107
+ export { type ObservableOptions, type Observer, type Operator, type RouterEvent, RxObservable, type SubscribeFn, type Subscription, type UnaryFunction, debounceTime, distinctUntilChanged, events$, filter, map, observable, state$, takeUntil };
@@ -0,0 +1 @@
1
+ import{events as e}from"@real-router/core";var 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 u=e=>{if(!s)try{r.next?.(e)}catch(e){c(e)}},c=e=>{if(!s)try{r.error?r.error(e):console.error("Unhandled error in RxObservable:",e)}catch{}},i=()=>{if(!s){s=!0;try{r.complete?.()}catch{}}},b={unsubscribe:()=>{if(!s&&(s=!0,l&&n?.removeEventListener("abort",l),o))try{o()}catch{}},get closed(){return s}};let l;n&&(l=()=>{b.unsubscribe()},n.addEventListener("abort",l));try{o=this.#e({next:u,error:c,complete:i})}catch(e){c(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=>{try{const n=e(r);t.next?.(n)}catch(e){t.error?.(e)}},error:e=>t.error?.(e),complete:()=>t.complete?.()});return()=>{n.unsubscribe()}})}function n(e){return r=>new t(t=>{const n=r.subscribe({next:r=>{try{e(r)&&t.next?.(r)}catch(e){t.error?.(e)}},error:e=>t.error?.(e),complete:()=>t.complete?.()});return()=>{n.unsubscribe()}})}function o(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 u=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),u.unsubscribe()}})}function s(e){return r=>new t(t=>{let n,o=!1;const s=e??((e,t)=>e===t),u=r.subscribe({next:e=>{if(!o)return o=!0,n=e,void t.next?.(e);try{s(n,e)||(n=e,t.next?.(e))}catch(e){t.error?.(e)}},error:e=>t.error?.(e),complete:()=>t.complete?.()});return()=>{u.unsubscribe()}})}function u(e){return r=>new t(t=>{let n,o,s=!1;const u=()=>{s||(s=!0,n&&n.unsubscribe(),o&&o.unsubscribe(),t.complete?.())};if(o=e.subscribe({next:()=>{u()},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:()=>{u()}}),()=>{n.unsubscribe(),o.unsubscribe()}})}function c(r,n){const{replay:o=!0}=n??{};return new t(t=>{const n=r.addEventListener(e.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})}function i(r){return new t(t=>{const n=[];try{n.push(r.addEventListener(e.ROUTER_START,()=>{t.next?.({type:"ROUTER_START"})})),n.push(r.addEventListener(e.ROUTER_STOP,()=>{t.next?.({type:"ROUTER_STOP"})})),n.push(r.addEventListener(e.TRANSITION_START,(e,r)=>{t.next?.({type:"TRANSITION_START",toState:e,fromState:r})})),n.push(r.addEventListener(e.TRANSITION_SUCCESS,(e,r,n)=>{t.next?.({type:"TRANSITION_SUCCESS",toState:e,fromState:r,options:n})})),n.push(r.addEventListener(e.TRANSITION_ERROR,(e,r,n)=>{t.next?.({type:"TRANSITION_ERROR",toState:e,fromState:r,error:n})})),n.push(r.addEventListener(e.TRANSITION_CANCEL,(e,r)=>{t.next?.({type:"TRANSITION_CANCEL",toState:e,fromState:r})}))}catch(e){for(const e of n)e();throw e}return()=>{for(const e of n)e()}})}function b(e){return c(e)}export{t as RxObservable,o as debounceTime,s as distinctUntilChanged,i as events$,n as filter,r as map,b as observable,c as state$,u as takeUntil};//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/RxObservable.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":["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 { Operator } from \"../types\";\n\nexport function map<T, R>(project: (value: T) => R): Operator<T, R> {\n return (source: RxObservable<T>) =>\n new RxObservable<R>((observer) => {\n const subscription = source.subscribe({\n next: (value) => {\n try {\n const result = project(value);\n\n observer.next?.(result);\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 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 (source: RxObservable<T>) =>\n new RxObservable<T>((observer) => {\n const subscription = source.subscribe({\n next: (value) => {\n try {\n if (predicate(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 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 { RxObservable } from \"../RxObservable\";\n\nimport type { Operator } from \"../types\";\n\nexport function distinctUntilChanged<T>(\n comparator?: (a: T, b: T) => boolean,\n): Operator<T, T> {\n return (source: RxObservable<T>) =>\n new RxObservable<T>((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\";\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 unsubscribe = router.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\";\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 unsubscribes: (() => void)[] = [];\n\n /* eslint-disable unicorn/prefer-single-call -- individual pushes for partial registration safety */\n try {\n unsubscribes.push(\n router.addEventListener(events.ROUTER_START, () => {\n observer.next?.({ type: \"ROUTER_START\" });\n }),\n );\n unsubscribes.push(\n router.addEventListener(events.ROUTER_STOP, () => {\n observer.next?.({ type: \"ROUTER_STOP\" });\n }),\n );\n unsubscribes.push(\n router.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 router.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 router.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 router.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"]}
@@ -0,0 +1 @@
1
+ {"inputs":{"src/RxObservable.ts":{"bytes":6310,"imports":[],"format":"esm"},"src/operators/map.ts":{"bytes":683,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"}],"format":"esm"},"src/operators/filter.ts":{"bytes":875,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"}],"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":1014,"imports":[{"path":"src/RxObservable.ts","kind":"import-statement","original":"../RxObservable"}],"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":923,"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":3143,"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":26956},"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/map.ts":{"bytesInOutput":486},"src/operators/index.ts":{"bytesInOutput":0},"src/operators/filter.ts":{"bytesInOutput":497},"src/operators/debounceTime.ts":{"bytesInOutput":1376},"src/operators/distinctUntilChanged.ts":{"bytesInOutput":773},"src/operators/takeUntil.ts":{"bytesInOutput":1369},"src/state$.ts":{"bytesInOutput":618},"src/events$.ts":{"bytesInOutput":1830},"src/observable.ts":{"bytesInOutput":57}},"bytes":10895}}}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@real-router/rx",
3
+ "version": "0.1.0",
4
+ "type": "commonjs",
5
+ "description": "Reactive Observable API for Real-Router — state$, events$, operators, and TC39 Observable support",
6
+ "main": "./dist/cjs/index.js",
7
+ "module": "./dist/esm/index.mjs",
8
+ "types": "./dist/esm/index.d.mts",
9
+ "exports": {
10
+ ".": {
11
+ "types": {
12
+ "import": "./dist/esm/index.d.mts",
13
+ "require": "./dist/cjs/index.d.ts"
14
+ },
15
+ "import": "./dist/esm/index.mjs",
16
+ "require": "./dist/cjs/index.js"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/greydragon888/real-router.git"
25
+ },
26
+ "keywords": [
27
+ "real-router",
28
+ "observable",
29
+ "reactive",
30
+ "rx",
31
+ "state-stream"
32
+ ],
33
+ "author": {
34
+ "name": "Oleg Ivanov",
35
+ "email": "greydragon888@gmail.com",
36
+ "url": "https://github.com/greydragon888"
37
+ },
38
+ "license": "MIT",
39
+ "bugs": {
40
+ "url": "https://github.com/greydragon888/real-router/issues"
41
+ },
42
+ "homepage": "https://github.com/greydragon888/real-router",
43
+ "scripts": {
44
+ "test": "vitest",
45
+ "build": "tsup",
46
+ "type-check": "tsc --noEmit",
47
+ "lint": "eslint --cache --ext .ts src/ tests/ --fix --max-warnings 0",
48
+ "lint:package": "publint",
49
+ "lint:types": "attw --pack ."
50
+ },
51
+ "sideEffects": false,
52
+ "dependencies": {
53
+ "@real-router/core": "workspace:^"
54
+ }
55
+ }