@real-router/core 0.42.0 → 0.44.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 +13 -4
- package/dist/cjs/Router-BAks0PFv.js +6 -0
- package/dist/cjs/Router-BAks0PFv.js.map +1 -0
- package/dist/cjs/{Router-B2tmtNiM.d.ts → Router-Dh1xgFLI.d.ts} +67 -9
- package/dist/cjs/RouterError-AQUx-VLW.js +2 -0
- package/dist/cjs/RouterError-AQUx-VLW.js.map +1 -0
- package/dist/cjs/api.d.ts +1 -1
- package/dist/cjs/api.js +1 -1
- package/dist/cjs/{getPluginApi-BXrM_Nwv.js → getPluginApi-1VcDVGjf.js} +2 -2
- package/dist/cjs/{getPluginApi-BXrM_Nwv.js.map → getPluginApi-1VcDVGjf.js.map} +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils.js +1 -1
- package/dist/cjs/validation.d.ts +1 -1
- package/dist/esm/{Router-4JRfQLMM.d.mts → Router-BPkXwb1J.d.mts} +67 -9
- package/dist/esm/Router-C3BXH7z8.mjs +6 -0
- package/dist/esm/Router-C3BXH7z8.mjs.map +1 -0
- package/dist/esm/RouterError-BOUkCIgf.mjs +2 -0
- package/dist/esm/RouterError-BOUkCIgf.mjs.map +1 -0
- package/dist/esm/api.d.mts +1 -1
- package/dist/esm/api.mjs +1 -1
- package/dist/esm/{getPluginApi-D0bBPuLp.mjs → getPluginApi-BvOUPp3g.mjs} +2 -2
- package/dist/esm/{getPluginApi-D0bBPuLp.mjs.map → getPluginApi-BvOUPp3g.mjs.map} +1 -1
- package/dist/esm/index.d.mts +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/utils.mjs +1 -1
- package/dist/esm/validation.d.mts +1 -1
- package/package.json +2 -2
- package/src/Router.ts +16 -2
- package/src/constants.ts +2 -0
- package/src/fsm/routerFSM.ts +17 -7
- package/src/getNavigator.ts +3 -1
- package/src/namespaces/EventBusNamespace/EventBusNamespace.ts +61 -7
- package/src/namespaces/NavigationNamespace/NavigationNamespace.ts +28 -10
- package/src/namespaces/NavigationNamespace/transition/guardPhase.ts +7 -0
- package/src/namespaces/NavigationNamespace/types.ts +3 -0
- package/src/namespaces/OptionsNamespace/constants.ts +3 -6
- package/src/namespaces/PluginsNamespace/constants.ts +2 -0
- package/src/namespaces/RouterLifecycleNamespace/RouterLifecycleNamespace.ts +1 -1
- package/src/types.ts +2 -1
- package/src/wiring/RouterWiringBuilder.ts +4 -1
- package/dist/cjs/Router-CVNR-dug.js +0 -6
- package/dist/cjs/Router-CVNR-dug.js.map +0 -1
- package/dist/cjs/RouterError-BkgjTHQg.js +0 -2
- package/dist/cjs/RouterError-BkgjTHQg.js.map +0 -1
- package/dist/esm/Router-C_k70gHi.mjs +0 -6
- package/dist/esm/Router-C_k70gHi.mjs.map +0 -1
- package/dist/esm/RouterError-D0RlQE_5.mjs +0 -2
- package/dist/esm/RouterError-D0RlQE_5.mjs.map +0 -1
|
@@ -78,6 +78,7 @@ async function finishAsyncPipeline( // NOSONAR
|
|
|
78
78
|
fromState: State | undefined,
|
|
79
79
|
signal: AbortSignal,
|
|
80
80
|
isActive: () => boolean,
|
|
81
|
+
emitLeaveApprove: () => void,
|
|
81
82
|
): Promise<void> {
|
|
82
83
|
await deactivateCompletion;
|
|
83
84
|
|
|
@@ -85,6 +86,8 @@ async function finishAsyncPipeline( // NOSONAR
|
|
|
85
86
|
throw new RouterError(errorCodes.TRANSITION_CANCELLED);
|
|
86
87
|
}
|
|
87
88
|
|
|
89
|
+
emitLeaveApprove();
|
|
90
|
+
|
|
88
91
|
if (shouldActivate) {
|
|
89
92
|
const pending = runGuards(
|
|
90
93
|
activateGuards,
|
|
@@ -117,6 +120,7 @@ export function executeGuardPipeline( // NOSONAR
|
|
|
117
120
|
fromState: State | undefined,
|
|
118
121
|
signal: AbortSignal,
|
|
119
122
|
isActive: () => boolean,
|
|
123
|
+
emitLeaveApprove: () => void,
|
|
120
124
|
): Promise<void> | undefined {
|
|
121
125
|
if (shouldDeactivate) {
|
|
122
126
|
const pending = runGuards(
|
|
@@ -139,6 +143,7 @@ export function executeGuardPipeline( // NOSONAR
|
|
|
139
143
|
fromState,
|
|
140
144
|
signal,
|
|
141
145
|
isActive,
|
|
146
|
+
emitLeaveApprove,
|
|
142
147
|
);
|
|
143
148
|
}
|
|
144
149
|
}
|
|
@@ -147,6 +152,8 @@ export function executeGuardPipeline( // NOSONAR
|
|
|
147
152
|
throw new RouterError(errorCodes.TRANSITION_CANCELLED);
|
|
148
153
|
}
|
|
149
154
|
|
|
155
|
+
emitLeaveApprove();
|
|
156
|
+
|
|
150
157
|
if (shouldActivate) {
|
|
151
158
|
return runGuards(
|
|
152
159
|
activateGuards,
|
|
@@ -80,6 +80,9 @@ export interface NavigationDependencies {
|
|
|
80
80
|
opts?: NavigationOptions,
|
|
81
81
|
) => void;
|
|
82
82
|
|
|
83
|
+
/** Send LEAVE_APPROVE event to routerFSM and emit to listeners */
|
|
84
|
+
sendLeaveApprove: (toState: State, fromState: State | undefined) => void;
|
|
85
|
+
|
|
83
86
|
/** Check if navigation can begin (router is started) */
|
|
84
87
|
canNavigate: () => boolean;
|
|
85
88
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// packages/core/src/namespaces/OptionsNamespace/constants.ts
|
|
2
2
|
|
|
3
|
+
import { DEFAULT_QUERY_PARAMS } from "route-tree";
|
|
4
|
+
|
|
3
5
|
import type { Options } from "@real-router/types";
|
|
4
6
|
|
|
5
7
|
/**
|
|
@@ -10,12 +12,7 @@ export const defaultOptions: Options = {
|
|
|
10
12
|
defaultParams: {},
|
|
11
13
|
trailingSlash: "preserve",
|
|
12
14
|
queryParamsMode: "loose",
|
|
13
|
-
queryParams:
|
|
14
|
-
arrayFormat: "none",
|
|
15
|
-
booleanFormat: "none",
|
|
16
|
-
nullFormat: "default",
|
|
17
|
-
numberFormat: "none",
|
|
18
|
-
},
|
|
15
|
+
queryParams: DEFAULT_QUERY_PARAMS,
|
|
19
16
|
urlParamsEncoding: "default",
|
|
20
17
|
allowNotFound: true,
|
|
21
18
|
rewritePathOnMatch: true,
|
|
@@ -15,6 +15,8 @@ export const EVENTS_MAP = {
|
|
|
15
15
|
[PLUGINS_CONST.ROUTER_STOP]: EVENTS_CONST.ROUTER_STOP,
|
|
16
16
|
[PLUGINS_CONST.TRANSITION_SUCCESS]: EVENTS_CONST.TRANSITION_SUCCESS,
|
|
17
17
|
[PLUGINS_CONST.TRANSITION_START]: EVENTS_CONST.TRANSITION_START,
|
|
18
|
+
[PLUGINS_CONST.TRANSITION_LEAVE_APPROVE]:
|
|
19
|
+
EVENTS_CONST.TRANSITION_LEAVE_APPROVE,
|
|
18
20
|
[PLUGINS_CONST.TRANSITION_ERROR]: EVENTS_CONST.TRANSITION_ERROR,
|
|
19
21
|
[PLUGINS_CONST.TRANSITION_CANCEL]: EVENTS_CONST.TRANSITION_CANCEL,
|
|
20
22
|
} as const satisfies Record<
|
|
@@ -73,7 +73,7 @@ export class RouterLifecycleNamespace {
|
|
|
73
73
|
/**
|
|
74
74
|
* Stops the router and resets state.
|
|
75
75
|
*
|
|
76
|
-
* Called only for READY/
|
|
76
|
+
* Called only for READY/TRANSITION_STARTED states (facade handles STARTING/IDLE/DISPOSED).
|
|
77
77
|
*/
|
|
78
78
|
stop(): void {
|
|
79
79
|
this.#deps.clearState();
|
package/src/types.ts
CHANGED
|
@@ -27,7 +27,7 @@ export type {
|
|
|
27
27
|
} from "@real-router/types";
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
* Event argument tuples for the router's
|
|
30
|
+
* Event argument tuples for the router's 7 events.
|
|
31
31
|
*
|
|
32
32
|
* Uses explicit `| undefined` unions (not optional `?`) to satisfy
|
|
33
33
|
* `exactOptionalPropertyTypes` when passing undefined args from FSM payloads.
|
|
@@ -37,6 +37,7 @@ export type RouterEventMap = {
|
|
|
37
37
|
$start: [];
|
|
38
38
|
$stop: [];
|
|
39
39
|
$$start: [toState: State, fromState: State | undefined];
|
|
40
|
+
$$leaveApprove: [toState: State, fromState: State | undefined];
|
|
40
41
|
$$success: [
|
|
41
42
|
toState: State,
|
|
42
43
|
fromState: State | undefined,
|
|
@@ -174,7 +174,7 @@ export class RouterWiringBuilder<
|
|
|
174
174
|
cancelNavigation: () => {
|
|
175
175
|
const toState = this.eventBus.getCurrentToState();
|
|
176
176
|
|
|
177
|
-
/* v8 ignore next -- @preserve: getCurrentToState() guaranteed set before
|
|
177
|
+
/* v8 ignore next -- @preserve: getCurrentToState() guaranteed set before TRANSITION_STARTED */
|
|
178
178
|
if (toState === undefined) {
|
|
179
179
|
return;
|
|
180
180
|
}
|
|
@@ -193,6 +193,9 @@ export class RouterWiringBuilder<
|
|
|
193
193
|
emitTransitionSuccess: (toState, fromState, opts) => {
|
|
194
194
|
this.eventBus.emitTransitionSuccess(toState, fromState, opts);
|
|
195
195
|
},
|
|
196
|
+
sendLeaveApprove: (toState, fromState) => {
|
|
197
|
+
this.eventBus.sendLeaveApprove(toState, fromState);
|
|
198
|
+
},
|
|
196
199
|
canNavigate: () => this.eventBus.canBeginTransition(),
|
|
197
200
|
getLifecycleFunctions: () => this.routeLifecycle.getFunctions(),
|
|
198
201
|
isActive: () => this.router.isActive(),
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
const e=require(`./RouterError-BkgjTHQg.js`),t=require(`./internals-na15rxo_.js`);let n=require(`@real-router/logger`),r=require(`@real-router/fsm`);const i={maxListeners:0,warnListeners:0,maxEventDepth:0};var a=class extends Error{},o=class{#e=new Map;#t=null;#n=i;#r;#i;constructor(e){e?.limits&&(this.#n=e.limits),this.#r=e?.onListenerError??null,this.#i=e?.onListenerWarn??null}static validateCallback(e,t){if(typeof e!=`function`)throw TypeError(`Expected callback to be a function for event ${t}`)}setLimits(e){this.#n=e}on(e,t){let n=this.#c(e);if(n.has(t))throw Error(`Duplicate listener for "${e}"`);let{maxListeners:r,warnListeners:i}=this.#n;if(i!==0&&n.size===i&&this.#i?.(e,i),r!==0&&n.size>=r)throw Error(`Listener limit (${r}) reached for "${e}"`);return n.add(t),()=>{this.off(e,t)}}off(e,t){this.#e.get(e)?.delete(t)}emit(e,t,n,r,i){let a=this.#e.get(e);if(!a||a.size===0)return;let o=arguments.length-1;if(this.#n.maxEventDepth===0){this.#a(a,e,o,t,n,r,i);return}this.#s(a,e,o,t,n,r,i)}clearAll(){this.#e.clear(),this.#t=null}listenerCount(e){return this.#e.get(e)?.size??0}#a(e,t,n,r,i,a,o){if(e.size===1){let[s]=e;try{this.#o(s,n,r,i,a,o)}catch(e){this.#r?.(t,e)}return}let s=[...e];for(let e of s)try{this.#o(e,n,r,i,a,o)}catch(e){this.#r?.(t,e)}}#o(e,t,n,r,i,a){switch(t){case 0:e();break;case 1:e(n);break;case 2:e(n,r);break;case 3:e(n,r,i);break;default:e(n,r,i,a)}}#s(e,t,n,r,i,o,s){this.#t??=new Map;let c=this.#t,l=c.get(t)??0;if(l>=this.#n.maxEventDepth)throw new a(`Maximum recursion depth (${this.#n.maxEventDepth}) exceeded for event: ${t}`);try{c.set(t,l+1);let u=e.size===1?e:[...e];for(let e of u)try{this.#o(e,n,r,i,o,s)}catch(e){if(e instanceof a)throw e;this.#r?.(t,e)}}finally{c.set(t,c.get(t)-1)}}#c(e){let t=this.#e.get(e);if(t)return t;let n=new Set;return this.#e.set(e,n),n}};const s={IDLE:`IDLE`,STARTING:`STARTING`,READY:`READY`,TRANSITIONING:`TRANSITIONING`,DISPOSED:`DISPOSED`},c={START:`START`,STARTED:`STARTED`,NAVIGATE:`NAVIGATE`,COMPLETE:`COMPLETE`,FAIL:`FAIL`,CANCEL:`CANCEL`,STOP:`STOP`,DISPOSE:`DISPOSE`},l={initial:s.IDLE,context:null,transitions:{[s.IDLE]:{[c.START]:s.STARTING,[c.DISPOSE]:s.DISPOSED},[s.STARTING]:{[c.STARTED]:s.READY,[c.FAIL]:s.IDLE},[s.READY]:{[c.NAVIGATE]:s.TRANSITIONING,[c.FAIL]:s.READY,[c.STOP]:s.IDLE},[s.TRANSITIONING]:{[c.NAVIGATE]:s.TRANSITIONING,[c.COMPLETE]:s.READY,[c.CANCEL]:s.READY,[c.FAIL]:s.READY},[s.DISPOSED]:{}}};function u(){return new r.FSM(l)}function d(e){if(!e||typeof e!=`object`||e.constructor!==Object)throw TypeError(`dependencies must be a plain object`);for(let t in e)if(Object.getOwnPropertyDescriptor(e,t)?.get)throw TypeError(`dependencies cannot contain getters: "${t}"`)}function f(e,t){for(let n of e){let e=n;if(typeof e!=`object`||!e||Array.isArray(e))throw TypeError(`route must be a non-array object`);t?.routes.guardRouteCallbacks(n),t?.routes.guardNoAsyncCallbacks(n);let r=n.children;r&&f(r,t)}}function p(t={}){let n=Object.create(null);for(let e in t)t[e]!==void 0&&(n[e]=t[e]);return{dependencies:n,limits:e.i}}const m={defaultRoute:``,defaultParams:{},trailingSlash:`preserve`,queryParamsMode:`loose`,queryParams:{arrayFormat:`none`,booleanFormat:`none`,nullFormat:`default`,numberFormat:`none`},urlParamsEncoding:`default`,allowNotFound:!0,rewritePathOnMatch:!0};function h(e){Object.freeze(e);for(let t of Object.keys(e)){let n=e[t];n&&typeof n==`object`&&n.constructor===Object&&h(n)}return e}function g(e,t){return typeof e==`function`?e(t):e}function ee(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`[router.constructor] options must be a plain object`)}var te=class{#e;constructor(e={}){this.#e=h({...m,...e})}static validateOptionsIsObject(e){ee(e)}get(){return this.#e}};function _(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!_(e[n],t[n]))return!1;return!0}return!1}const v=new WeakMap;function y(e){return v.get(e)}function ne(e,t){v.set(e,t)}var re=class{#e=void 0;#t=void 0;#n;#r=new Map;get(){return this.#e}set(t){this.#t=this.#e,this.#e=t?e.r(t):void 0}getPrevious(){return this.#t}reset(){this.#e=void 0,this.#t=void 0,this.#r.clear()}setDependencies(e){this.#n=e}makeState(t,n,r,i,a){let o=this.#n.getDefaultParams(),s=Object.hasOwn(o,t),c;c=s?{...o[t],...n}:!n||n===e.a?e.a:{...n};let l={name:t,params:c,path:r??this.#n.buildPath(t,n)};return i&&ne(l,i),a?l:e.r(l)}areStatesEqual(e,t,n=!0){if(!e||!t)return!!e==!!t;if(e.name!==t.name)return!1;if(n){let n=this.#i(e.name);for(let r of n)if(!_(e.params[r],t.params[r]))return!1;return!0}let r=Object.keys(e.params),i=Object.keys(t.params);if(r.length!==i.length)return!1;for(let n of r)if(!(n in t.params)||!_(e.params[n],t.params[n]))return!1;return!0}#i(e){let t=this.#r.get(e);if(t!==void 0)return t;let n=this.#n.getUrlParams(e);return this.#r.set(e,n),n}};const b={[e.u.ROUTER_START]:e.l.ROUTER_START,[e.u.ROUTER_STOP]:e.l.ROUTER_STOP,[e.u.TRANSITION_SUCCESS]:e.l.TRANSITION_SUCCESS,[e.u.TRANSITION_START]:e.l.TRANSITION_START,[e.u.TRANSITION_ERROR]:e.l.TRANSITION_ERROR,[e.u.TRANSITION_CANCEL]:e.l.TRANSITION_CANCEL},ie=Object.keys(b),x=`router.usePlugin`;function ae(e){if(!(e&&typeof e==`object`)||Array.isArray(e))throw TypeError(`[router.usePlugin] Plugin factory must return an object, got ${typeof e}`);if(typeof e.then==`function`)throw TypeError(`[router.usePlugin] Async plugin factories are not supported. Factory returned a Promise instead of a plugin object.`)}var oe=class t{#e=new Set;#t=new Set;#n;#r=e.i;#i=null;static validatePlugin(e){ae(e)}static validateNoDuplicatePlugins(e,t){for(let n of e)if(t(n))throw Error(`[router.usePlugin] Plugin factory already registered. To re-register, first unsubscribe the existing plugin.`)}setDependencies(e){this.#n=e}setLimits(e){
|
|
2
|
-
// eslint-disable-next-line sonarjs/void-use -- @preserve: limits passed to validator via RouterInternals; void suppresses TS6133 until plugin implements validateCountThresholds
|
|
3
|
-
this.#r=e,this.#r}setValidatorGetter(e){this.#i=e}count(){return this.#e.size}use(...e){if(this.#i?.()?.plugins.validateCountThresholds(this.#e.size+e.length),e.length===1){let t=e[0],r=this.#o(t);this.#e.add(t);let i=!1,a=()=>{if(!i){i=!0,this.#e.delete(t),this.#t.delete(a);try{r()}catch(e){n.logger.error(x,`Error during cleanup:`,e)}}};return this.#t.add(a),a}let t=this.#a(e),r=[];try{for(let e of t){let t=this.#o(e);r.push({factory:e,cleanup:t})}}catch(e){for(let{cleanup:e}of r)try{e()}catch(e){n.logger.error(x,`Cleanup error:`,e)}throw e}for(let{factory:e}of r)this.#e.add(e);let i=!1,a=()=>{if(!i){i=!0,this.#t.delete(a);for(let{factory:e}of r)this.#e.delete(e);for(let{cleanup:e}of r)try{e()}catch(e){n.logger.error(x,`Error during cleanup:`,e)}}};return this.#t.add(a),a}getAll(){return[...this.#e]}has(e){return this.#e.has(e)}disposeAll(){for(let e of this.#t)e();this.#e.clear(),this.#t.clear()}#a(e){let t=new Set;for(let n of e)t.has(n)?this.#i?.()?.plugins.warnBatchDuplicates(e):t.add(n);return t}#o(e){let n=this.#n.compileFactory(e);t.validatePlugin(n),this.#i?.()?.plugins.validatePluginKeys(n),Object.freeze(n);let r=[];for(let e of ie)e in n&&(typeof n[e]==`function`?(r.push(this.#n.addEventListener(b[e],n[e])),e===`onStart`&&this.#n.canNavigate()&&this.#i?.()?.plugins.warnPluginAfterStart(e)):this.#i?.()?.plugins.warnPluginMethodType(e));return()=>{for(let e of r)e();typeof n.teardown==`function`&&n.teardown()}}};function se(e){let t=()=>e;return()=>t}var ce=class{#e=new Map;#t=new Map;#n=new Map;#r=new Map;#i=[this.#n,this.#r];#a=new Set;#o=new Set;#s=new Set;#c;#l=e.i;#u=null;setDependencies(e){this.#c=e}setLimits(e){
|
|
4
|
-
// eslint-disable-next-line sonarjs/void-use -- @preserve: Wave 3 validator reads limits via RouterInternals; void suppresses TS6133 until then
|
|
5
|
-
this.#l=e,this.#l}setValidatorGetter(e){this.#u=e}getHandlerCount(e){return e===`activate`?this.#t.size:this.#e.size}addCanActivate(e,t,n=!1){n?this.#o.add(e):this.#o.delete(e);let r=this.#t.has(e);this.#d(`activate`,e,t,this.#t,this.#r,`canActivate`,r)}addCanDeactivate(e,t,n=!1){n?this.#s.add(e):this.#s.delete(e);let r=this.#e.has(e);this.#d(`deactivate`,e,t,this.#e,this.#n,`canDeactivate`,r)}clearCanActivate(e){this.#t.delete(e),this.#r.delete(e),this.#o.delete(e)}clearCanDeactivate(e){this.#e.delete(e),this.#n.delete(e),this.#s.delete(e)}clearAll(){this.#t.clear(),this.#r.clear(),this.#e.clear(),this.#n.clear(),this.#o.clear(),this.#s.clear()}clearDefinitionGuards(){for(let e of this.#o)this.#t.delete(e),this.#r.delete(e);for(let e of this.#s)this.#e.delete(e),this.#n.delete(e);this.#o.clear(),this.#s.clear()}getFactories(){let e={},t={};for(let[t,n]of this.#e)e[t]=n;for(let[e,n]of this.#t)t[e]=n;return[e,t]}getFunctions(){return this.#i}canNavigateTo(e,t,n,r){for(let t of e)if(!this.#f(this.#n,t,n,r,`canNavigateTo`))return!1;for(let e of t)if(!this.#f(this.#r,e,n,r,`canNavigateTo`))return!1;return!0}#d(e,t,n,r,i,a,o){o?this.#u?.()?.lifecycle.warnOverwrite(t,e,a):this.#u?.()?.lifecycle.validateCountThresholds(r.size+1,a);let s=typeof n==`boolean`?se(n):n;r.set(t,s),this.#a.add(t);try{let e=this.#c.compileFactory(s);if(typeof e!=`function`)throw TypeError(`[router.${a}] Factory must return a function, got ${typeof e}`);i.set(t,e)}catch(e){throw r.delete(t),e}finally{this.#a.delete(t)}}#f(e,t,n,r,i){let a=e.get(t);if(!a)return!0;try{let e=a(n,r);return typeof e==`boolean`?e:(this.#u?.()?.lifecycle.warnAsyncGuardSync(t,i),!1)}catch{return!1}}};function le(){return{decoders:Object.create(null),encoders:Object.create(null),defaultParams:Object.create(null),forwardMap:Object.create(null),forwardFnMap:Object.create(null)}}function ue(e,t){for(let n in e)if(e[n]!==t[n])return!1;return!0}function de(e,t,n){for(let r in e)if(!(r in n)&&e[r]!==t[r])return!1;return!0}function S(e){let t={name:e.name,path:e.path};return e.children&&(t.children=e.children.map(e=>S(e))),t}function fe(e,t,n=``){for(let r=0;r<e.length;r++){let i=e[r],a=n?`${n}.${i.name}`:i.name;if(a===t)return e.splice(r,1),!0;if(i.children&&t.startsWith(`${a}.`)&&fe(i.children,t,a))return!0}return!1}function pe(e,t){for(let n of Object.keys(e))t(n)&&delete e[n]}function me(e){return`(${e.replaceAll(/(^<|>$)/g,``)})`}const he=/([:*])([^/?<]+)(<[^>]+>)?(\?)?/g,ge=/([:*][^/?<]+(?:<[^>]+>)?)\?(?=\/|$)/g,_e=/\?(.+)$/;function ve(e){let t=[],n=[],r=[],i={},a=new Map,o=e.replaceAll(ge,`$1`),s=_e.exec(o);if(s!==null){let t=s[1].split(`&`);for(let e of t){let t=e.trim();t.length>0&&(n.push(t),i[t]=`query`)}e=e.slice(0,s.index)}let c;for(;(c=he.exec(e))!==null;){let e=c[1],n=c[2],o=c[3];if(e===`*`)r.push(n),t.push(n),i[n]=`url`;else if(t.push(n),i[n]=`url`,o){let e=`^${me(o)}$`;a.set(n,{pattern:new RegExp(e),constraint:o})}}return{urlParams:t,queryParams:n,spatParams:r,paramTypeMap:i,constraintPatterns:a,pathPattern:e}}const ye=/[^\w!$'()*+,.:;|~-]/gu,be=/[^\w!$'()*+,.:;|~-]/u,xe={default:e=>be.test(e)?e.replaceAll(ye,e=>encodeURIComponent(e)):e,uri:encodeURI,uriComponent:encodeURIComponent,none:e=>e},Se={default:decodeURIComponent,uri:decodeURI,uriComponent:decodeURIComponent,none:e=>e};function C(){return{staticChildren:Object.create(null),paramChild:void 0,splatChild:void 0,route:void 0,slashChildRoute:void 0}}function w(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}function Ce(e,t){return e===``?t:t===``?e:e+t}function we(e){let t={};if(e.length===0)return t;let n=e.split(`&`);for(let e of n){let n=e.indexOf(`=`);n===-1?t[e]=``:t[e.slice(0,n)]=e.slice(n+1)}return t}function Te(e){let t=[];for(let n of Object.keys(e)){let r=e[n],i=encodeURIComponent(n);t.push(r===``?i:`${i}=${encodeURIComponent(String(r))}`)}return t.join(`&`)}function T(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function Ee(e){let t=0;for(;t<e.length;)if(e[t]===`%`){if(t+2>=e.length)return!1;let n=e.codePointAt(t+1)??0,r=e.codePointAt(t+2)??0;if(!T(n)||!T(r))return!1;t+=3}else t++;return!0}const E=/<[^>]*>/g;function D(e,t,n,r,i){let a=t.fullName===``;a||r.push(t);let o=t.absolute,s=t.paramMeta.pathPattern,c=o&&s.startsWith(`~`)?s.slice(1):s,l=(o?c:s).replaceAll(E,``),u=o?l:Ce(n,l),d=i;a||(d=De(e,t,u,o?``:n,r,i));for(let n of t.children.values())D(e,n,u,r,d);a||r.pop()}function De(e,t,n,r,i,a){let o=je(n,r),s=Object.freeze([...i]),c=Oe(s),l=w(n),u=Re(e.rootQueryParams,i),d=ze(i),{buildStaticParts:f,buildParamSlots:p}=Le(o?w(r):l,o?i.slice(0,-1):i,e.options.urlParamsEncoding),m={name:t.fullName,parent:a,depth:i.length-1,matchSegments:s,meta:c,declaredQueryParams:u,declaredQueryParamsSet:new Set(u),hasTrailingSlash:n.length>1&&n.endsWith(`/`),constraintPatterns:d,hasConstraints:d.size>0,buildStaticParts:f,buildParamSlots:p,buildParamNamesSet:new Set(p.map(e=>e.paramName))};return e.routesByName.set(t.fullName,m),e.segmentsByName.set(t.fullName,s),e.metaByName.set(t.fullName,c),o?ke(e,m,r):Ae(e,m,n,l,t),m}function Oe(e){let t={};for(let n of e)t[n.fullName]=n.paramTypeMap;return Object.freeze(t)}function ke(e,t,n){Ne(e,t,n);let r=w(n),i=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.has(i)&&e.staticCache.set(i,t)}function Ae(e,t,n,r,i){if(Me(e,t,n),i.paramMeta.urlParams.length===0){let n=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.set(n,t)}}function je(e,t){return w(e)===w(t)}function Me(e,t,n){let r=w(n);if(r===`/`){e.root.route=t;return}O(e,e.root,r,1,t)}function O(e,t,n,r,i){let a=n.length;for(;r<=a;){let o=n.indexOf(`/`,r),s=o===-1?a:o,c=n.slice(r,s);if(c.endsWith(`?`)){let r=c.slice(1).replaceAll(E,``).replace(/\?$/,``);t.paramChild??={node:C(),name:r},O(e,t.paramChild.node,n,s+1,i),s>=a?t.route??=i:O(e,t,n,s+1,i);return}t=Ie(e,t,c),r=s+1}t.route=i}function Ne(e,t,n){let r=Pe(e,n);r.slashChildRoute=t}function Pe(e,t){return Fe(e,e.root,t)}function Fe(e,t,n){let r=w(n);if(r===`/`||r===``)return t;let i=t,a=1,o=r.length;for(;a<=o;){let t=r.indexOf(`/`,a),n=t===-1?o:t;if(n<=a)break;let s=r.slice(a,n);i=Ie(e,i,s),a=n+1}return i}function Ie(e,t,n){if(n.startsWith(`*`)){let e=n.slice(1);return t.splatChild??={node:C(),name:e},t.splatChild.node}if(n.startsWith(`:`)){let e=n.slice(1).replaceAll(E,``).replace(/\?$/,``);return t.paramChild??={node:C(),name:e},t.paramChild.node}let r=e.options.caseSensitive?n:n.toLowerCase();return r in t.staticChildren||(t.staticChildren[r]=C()),t.staticChildren[r]}function Le(e,t,n){let r=new Set,i=new Set;for(let e of t){for(let t of e.paramMeta.urlParams)r.add(t);for(let t of e.paramMeta.spatParams)i.add(t)}if(r.size===0)return{buildStaticParts:[e],buildParamSlots:[]};let a=[],o=[],s=/[:*]([\w]+)(?:<[^>]*>)?(\?)?/gu,c=0,l;for(;(l=s.exec(e))!==null;){let t=l[1],r=l[2]===`?`;a.push(e.slice(c,l.index));let s=i.has(t)?e=>{let t=xe[n],r=e.split(`/`),i=t(r[0]);for(let e=1;e<r.length;e++)i+=`/${t(r[e])}`;return i}:xe[n];o.push({paramName:t,isOptional:r,encoder:s}),c=l.index+l[0].length}return a.push(e.slice(c)),{buildStaticParts:a,buildParamSlots:o}}function Re(e,t){let n=[];e.length>0&&n.push(...e);for(let e of t)e.paramMeta.queryParams.length>0&&n.push(...e.paramMeta.queryParams);return n}function ze(e){let t=new Map;for(let n of e)for(let[e,r]of n.paramMeta.constraintPatterns)t.set(e,r);return t}const Be=/[\u0080-\uFFFF]/;var Ve=class{get options(){return this.#e}#e;#t=C();#n=new Map;#r=new Map;#i=new Map;#a=new Map;#o=``;#s=[];constructor(e){this.#e={caseSensitive:e?.caseSensitive??!0,strictTrailingSlash:e?.strictTrailingSlash??!1,strictQueryParams:e?.strictQueryParams??!1,urlParamsEncoding:e?.urlParamsEncoding??`default`,parseQueryString:e?.parseQueryString??we,buildQueryString:e?.buildQueryString??Te}}registerTree(e){this.#s=e.paramMeta.queryParams,D({root:this.#t,options:this.#e,routesByName:this.#n,segmentsByName:this.#r,metaByName:this.#i,staticCache:this.#a,rootQueryParams:this.#s},e,``,[],null)}match(e){let t=this.#f(e);if(!t)return;let[n,r,i]=t,a=this.#e.caseSensitive?r:r.toLowerCase(),o=this.#a.get(a);if(o)return this.#e.strictTrailingSlash&&!this.#m(n,o)?void 0:this.#p(o,{},i);let s={},c=this.#h(r,s);if(c&&!(this.#e.strictTrailingSlash&&!this.#m(n,c))&&!(c.hasConstraints&&!this.#v(s,c))&&this.#_(s))return this.#p(c,s,i)}buildPath(e,t,n){let r=this.#n.get(e);if(!r)throw Error(`[SegmentMatcher.buildPath] '${e}' is not defined`);r.hasConstraints&&t&&this.#c(r,e,t);let i=this.#l(r,t),a=this.#u(i,n?.trailingSlash),o=this.#d(r,t,n?.queryParamsMode);return a+(o?`?${o}`:``)}getSegmentsByName(e){return this.#r.get(e)}getMetaByName(e){return this.#i.get(e)}hasRoute(e){return this.#n.has(e)}setRootPath(e){this.#o=e}#c(e,t,n){for(let[r,i]of e.constraintPatterns){let e=n[r];if(e!=null){let n=typeof e==`object`?JSON.stringify(e):String(e);if(!i.pattern.test(n))throw Error(`[SegmentMatcher.buildPath] '${t}' — param '${r}' value '${n}' does not match constraint '${i.constraint}'`)}}}#l(e,t){let n=e.buildStaticParts,r=e.buildParamSlots;if(r.length===0)return this.#o+n[0];let i=this.#o+n[0];for(let[e,a]of r.entries()){let r=t?.[a.paramName];if(r==null){if(!a.isOptional)throw Error(`[SegmentMatcher.buildPath] Missing required param '${a.paramName}'`);i.length>1&&i.endsWith(`/`)&&(i=i.slice(0,-1)),i+=n[e+1];continue}let o=typeof r==`object`?JSON.stringify(r):String(r),s=a.encoder(o);i+=s+n[e+1]}return i}#u(e,t){return t===`always`&&!e.endsWith(`/`)?`${e}/`:t===`never`&&e!==`/`&&e.endsWith(`/`)?e.slice(0,-1):e}#d(e,t,n){if(!t)return``;let r={},i=!1;for(let n of e.declaredQueryParams)n in t&&(r[n]=t[n],i=!0);if(n===`loose`)for(let n in t)Object.hasOwn(t,n)&&!e.declaredQueryParamsSet.has(n)&&!e.buildParamNamesSet.has(n)&&(r[n]=t[n],i=!0);return i?this.#e.buildQueryString(r):``}#f(e){if(e===``&&(e=`/`),!e.startsWith(`/`))return;let t=e.indexOf(`#`);if(t!==-1&&(e=e.slice(0,t)),Be.test(e))return;if(this.#o.length>0){if(!e.startsWith(this.#o))return;e=e.slice(this.#o.length)||`/`}let n=e.indexOf(`?`),r=n===-1?e:e.slice(0,n),i=n===-1?void 0:e.slice(n+1);if(r.includes(`//`))return;let a=r;return[a,w(a),i]}#p(e,t,n){if(n!==void 0){let r=this.#e.parseQueryString(n);if(this.#e.strictQueryParams){let t=e.declaredQueryParamsSet;for(let e of Object.keys(r))if(!t.has(e))return}for(let e of Object.keys(r))t[e]=r[e]}return{segments:e.matchSegments,params:t,meta:e.meta}}#m(e,t){return(e.length>1&&e.endsWith(`/`))===t.hasTrailingSlash}#h(e,t){return e.length===1?this.#t.slashChildRoute??this.#t.route:this.#g(this.#t,e,1,t)}#g(e,t,n,r){let i=e,a=t.length;for(;n<=a;){let e=t.indexOf(`/`,n),o=e===-1?a:e,s=t.slice(n,o),c=this.#e.caseSensitive?s:s.toLowerCase(),l;if(c in i.staticChildren)l=i.staticChildren[c];else if(i.paramChild)l=i.paramChild.node,r[i.paramChild.name]=s;else if(i.splatChild){let e={},a=this.#g(i.splatChild.node,t,n,e);return a?(Object.assign(r,e),a):(r[i.splatChild.name]=t.slice(n),i.splatChild.node.route)}else return;i=l,n=o+1}return i.slashChildRoute??i.route}#_(e){let t=this.#e.urlParamsEncoding;if(t===`none`)return!0;let n=Se[t];for(let t in e){let r=e[t];if(r.includes(`%`)){if(!Ee(r))return!1;e[t]=n(r)}}return!0}#v(e,t){for(let[n,r]of t.constraintPatterns)if(!r.pattern.test(e[n]))return!1;return!0}};const k=e=>{let t=e.indexOf(`%`),n=e.indexOf(`+`);if(t===-1&&n===-1)return e;let r=n===-1?e:e.replaceAll(`+`,` `);return t===-1?r:decodeURIComponent(r)},He=(e,t)=>{if(e===void 0)return t.boolean.decodeUndefined();let n=t.boolean.decodeRaw(e);if(n!==null)return n;let r=k(e),i=t.number.decode(r);return i===null?t.boolean.decodeValue(r):i},A=e=>{let t=typeof e;if(t!==`string`&&t!==`number`&&t!==`boolean`)throw TypeError(`[search-params] Array element must be a string, number, or boolean — received ${t===`object`&&e===null?`null`:t}`);return encodeURIComponent(e)},Ue={none:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${A(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}=${A(t[r])}`;return n}},brackets:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[]=${A(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[]=${A(t[r])}`;return n}},index:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[0]=${A(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[${r}]=${A(t[r])}`;return n}},comma:{encodeArray:(e,t)=>{if(t.length===0)return`${e}=`;let n=`${e}=${A(t[0])}`;for(let e=1;e<t.length;e++)n+=`,${A(t[e])}`;return n}}},We={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:()=>null,decodeValue:e=>e},Ge={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:e=>e===`true`?!0:e===`false`?!1:null,decodeValue:e=>e},Ke={encode:(e,t)=>t?e:`${e}=false`,decodeUndefined:()=>!0,decodeRaw:()=>null,decodeValue:e=>e},qe={none:We,string:Ge,"empty-true":Ke},Je={default:{encode:e=>e},hidden:{encode:()=>``}},Ye={auto:{decode:e=>{let t=e.length;if(t===0)return null;let n=!1;for(let r=0;r<t;r++){let i=e.codePointAt(r);if(!(i!==void 0&&i>=48&&i<=57)){if(i===46&&!n&&r!==0&&r!==t-1){n=!0;continue}return null}}return Number(e)}},none:{decode:()=>null}},Xe=(e,t,n,r)=>({boolean:qe[t],null:Je[n],number:Ye[r],array:Ue[e]}),Ze={arrayFormat:`none`,booleanFormat:`none`,nullFormat:`default`,numberFormat:`none`,strategies:{boolean:qe.none,null:Je.default,number:Ye.none,array:Ue.none}},Qe=e=>{if(!e||e.arrayFormat===void 0&&e.booleanFormat===void 0&&e.nullFormat===void 0&&e.numberFormat===void 0)return Ze;let t=e.arrayFormat??`none`,n=e.booleanFormat??`none`,r=e.nullFormat??`default`,i=e.numberFormat??`none`;return{arrayFormat:t,booleanFormat:n,nullFormat:r,numberFormat:i,strategies:Xe(t,n,r,i)}},j=e=>encodeURIComponent(e),$e=(e,t,n)=>{let r=j(e);switch(typeof t){case`string`:case`number`:return`${r}=${j(t)}`;case`boolean`:return n.strategies.boolean.encode(r,t);case`object`:return t===null?n.strategies.null.encode(r):Array.isArray(t)?n.strategies.array.encodeArray(r,t):`${r}=${j(t)}`;default:return`${r}=${j(t)}`}},et=e=>{let t=e.indexOf(`?`);return t===-1?e:e.slice(t+1)};function tt(e,t,n,r){let i=e[t];i===void 0?e[t]=r?[n]:n:Array.isArray(i)?i.push(n):e[t]=[i,n]}function nt(e,t,n,r,i){return i?He(r?e.slice(t+1,n):void 0,i):r?k(e.slice(t+1,n)):null}function rt(e,t,n,r,i){let a=e.indexOf(`=`,t),o=a!==-1&&a<n,s=o?a:n,c=s,l=!1;for(let n=t;n<s;n++)if(e.codePointAt(n)===91){c=n,l=!0;break}tt(r,k(e.slice(t,c)),nt(e,a,n,o,i),l)}const it=(e,t)=>{let n=et(e);if(n===``||n===`?`)return{};if(!t)return at(n);let r=Qe(t),i={},a=0,o=n.length;for(;a<o;){let e=n.indexOf(`&`,a);e===-1&&(e=o),rt(n,a,e,i,r.strategies),a=e+1}return i};function at(e){let t={};return ot(e,t),t}function ot(e,t){let n=0,r=e.length;for(;n<r;){let i=e.indexOf(`&`,n);i===-1&&(i=r),rt(e,n,i,t),n=i+1}}const st=(e,t)=>{let n=Object.keys(e);if(n.length===0)return``;let r=Qe(t),i=[];for(let t of n){let n=e[t];if(n===void 0)continue;let a=$e(t,n,r);a&&i.push(a)}return i.join(`&`)};function M(e,t){let n=e.path,r=n.startsWith(`~`),i=r?n.slice(1):n,a={name:e.name,path:i,absolute:r,children:[],parent:t,nonAbsoluteChildren:[],fullName:``};if(e.children)for(let t of e.children){let e=M(t,a);a.children.push(e)}return a}function ct(e,t,n){let r=M({name:e,path:t},null);for(let e of n){let t=M(e,r);r.children.push(t)}return r}function lt(e){return e.parent?.name?`${e.parent.fullName}.${e.name}`:e.name}function N(e,t){return e.endsWith(`/`)&&t.startsWith(`/`)?e+t.slice(1):e+t}function ut(e){if(!e.path)return null;let{urlParams:t,queryParams:n,spatParams:r}=e.paramMeta;if(t.length>0||n.length>0||r.length>0)return null;let i=[],a=e.parent;for(;a?.path;)i.unshift(a),a=a.parent;let o=``;for(let e of i){let{urlParams:t,queryParams:n,spatParams:r}=e.paramMeta;if(t.length>0||n.length>0||r.length>0)return null;o=e.absolute?e.path:N(o,e.path)}return e.absolute?e.path:N(o,e.path)}function dt(e){let t=new Map;for(let n of e)t.set(n.name,n);return t}function ft(e){let t={};for(let n of e.urlParams)t[n]=`url`;for(let n of e.queryParams)t[n]=`query`;return t}function pt(e,t,n){let r=[],i=[];for(let a of e){let e=P(a,t,n);r.push(e),e.absolute||i.push(e)}return{childrenMap:dt(r),nonAbsoluteChildren:i}}function P(e,t,n){let r=ve(e.path),i=ft(r),a={name:e.name,path:e.path,absolute:e.absolute,parent:t,children:void 0,paramMeta:r,nonAbsoluteChildren:void 0,fullName:``,staticPath:null,paramTypeMap:i};a.fullName=lt(a);let{childrenMap:o,nonAbsoluteChildren:s}=pt(e.children,a,n);return a.children=o,a.nonAbsoluteChildren=s,a.staticPath=ut(a),n&&(Object.freeze(s),Object.freeze(i),Object.freeze(a.children),Object.freeze(a)),a}function mt(e,t=!0){return P(e,null,t)}function ht(e,t){let n=[];return{add(e){return n.push(e),this},addMany(e){return n.push(...e),this},build(r){return mt(ct(e,t,n),!r?.skipFreeze)}}}function gt(e,t,n,r){return ht(e,t).addMany(n).build(r)}function F(e){let t=e.absolute?`~${e.path}`:e.path,n={name:e.name,path:t};return e.children.size>0&&(n.children=[...e.children.values()].map(e=>F(e))),n}function _t(e){return[...e.children.values()].map(e=>F(e))}function vt(e){let t=e?.queryParams;return new Ve({...e?.caseSensitive===void 0?void 0:{caseSensitive:e.caseSensitive},...e?.strictTrailingSlash===void 0?void 0:{strictTrailingSlash:e.strictTrailingSlash},...e?.strictQueryParams===void 0?void 0:{strictQueryParams:e.strictQueryParams},...e?.urlParamsEncoding===void 0?void 0:{urlParamsEncoding:e.urlParamsEncoding},parseQueryString:e=>it(e,t),buildQueryString:e=>st(e,t)})}function I(e,t,n=100){let r=new Set,i=[e],a=e;for(;t[a];){let e=t[a];if(r.has(e)){let t=i.indexOf(e),n=[...i.slice(t),e];throw Error(`Circular forwardTo: ${n.join(` → `)}`)}if(r.add(a),i.push(e),a=e,i.length>n)throw Error(`forwardTo chain exceeds maximum depth (${n}): ${i.join(` → `)}`)}return a}function L(e,t,n){let r=gt(``,t,e),i=vt(n);return i.registerTree(r),{tree:r,matcher:i}}function yt(e){let t=L(e.definitions,e.rootPath,e.matcherOptions);e.tree=t.tree,e.matcher=t.matcher,e.resolvedForwardMap=V(e.config)}function R(e){let t=L(e.definitions,e.rootPath,e.matcherOptions);e.tree=t.tree,e.matcher=t.matcher}function z(e){B(e),R(e)}function B(e){e.definitions.length=0,Object.assign(e.config,le()),e.resolvedForwardMap=Object.create(null),e.routeCustomFields=Object.create(null)}function V(e){let t=Object.create(null);for(let n of Object.keys(e.forwardMap))t[n]=I(n,e.forwardMap);return t}function bt(e,t,r){if(e.canActivate){let r=typeof e.forwardTo==`string`?e.forwardTo:`[dynamic]`;n.logger.warn(`real-router`,`Route "${t}" has both forwardTo and canActivate. canActivate will be ignored because forwardTo creates a redirect (industry standard). Move canActivate to the target route "${r}".`)}if(e.canDeactivate){let r=typeof e.forwardTo==`string`?e.forwardTo:`[dynamic]`;n.logger.warn(`real-router`,`Route "${t}" has both forwardTo and canDeactivate. canDeactivate will be ignored because forwardTo creates a redirect (industry standard). Move canDeactivate to the target route "${r}".`)}if(typeof e.forwardTo==`function`){let n=e.forwardTo.constructor.name===`AsyncFunction`,r=e.forwardTo.toString().includes(`__awaiter`);if(n||r)throw TypeError(`forwardTo callback cannot be async for route "${t}". Async functions break matchPath/buildPath.`)}typeof e.forwardTo==`string`?r.forwardMap[t]=e.forwardTo:r.forwardFnMap[t]=e.forwardTo}function xt(e,t,n,r,i,a,o){let s=new Set([`name`,`path`,`children`,`canActivate`,`canDeactivate`,`forwardTo`,`encodeParams`,`decodeParams`,`defaultParams`]),c=Object.fromEntries(Object.entries(e).filter(([e])=>!s.has(e)));Object.keys(c).length>0&&(r[t]=c),e.canActivate&&(o?o.addActivateGuard(t,e.canActivate):i.set(t,e.canActivate)),e.canDeactivate&&(o?o.addDeactivateGuard(t,e.canDeactivate):a.set(t,e.canDeactivate)),e.forwardTo&&bt(e,t,n),e.decodeParams&&(n.decoders[t]=t=>e.decodeParams?.(t)??t),e.encodeParams&&(n.encoders[t]=t=>e.encodeParams?.(t)??t),e.defaultParams&&(n.defaultParams[t]=e.defaultParams)}function H(e,t,n,r,i,a,o=``){for(let s of e){let e=o?`${o}.${s.name}`:s.name;xt(s,e,t,n,r,i,a),s.children&&H(s.children,t,n,r,i,a,e)}}function St(e,t){let n=[],r=le(),i=Object.create(null),a=new Map,o=new Map;for(let t of e)n.push(S(t));let{tree:s,matcher:c}=L(n,``,t);return H(e,r,i,a,o,void 0,``),{definitions:n,config:r,tree:s,matcher:c,resolvedForwardMap:V(r),routeCustomFields:i,rootPath:``,matcherOptions:t,depsStore:void 0,lifecycleNamespace:void 0,pendingCanActivate:a,pendingCanDeactivate:o,treeOperations:{commitTreeChanges:yt,resetStore:z,nodeToDefinition:F}}}const U=[];Object.freeze(U);function Ct(e){let t=e.length,n=[];for(let r=t-1;r>=0;r--)n.push(e[r]);return n}function wt(e){let t=e.split(`.`),n=t.length,r=[t[0]],i=t[0].length;for(let a=1;a<n-1;a++)i+=1+t[a].length,r.push(e.slice(0,i));return r.push(e),r}function Tt(e){let t=typeof e;return t===`string`||t===`number`||t===`boolean`}function Et(e,t,n,r){let i=t[e];if(!i||typeof i!=`object`)return!0;for(let e of Object.keys(i)){let t=n.params[e],i=r.params[e];if(Tt(t)&&Tt(i)&&String(t)!==String(i))return!1}return!0}function Dt(e,t,n,r,i,a){for(let o=0;o<a;o++){let a=r[o];if(a!==i[o]||!Et(a,e,t,n))return o}return a}const Ot=new Map;function W(e){let t=Ot.get(e);if(t)return t;let n=kt(e);return Object.freeze(n),Ot.set(e,n),n}function kt(e){if(!e)return[``];let t=e.indexOf(`.`);if(t===-1)return[e];let n=e.indexOf(`.`,t+1);if(n===-1)return[e.slice(0,t),e];let r=e.indexOf(`.`,n+1);return r===-1?[e.slice(0,t),e.slice(0,n),e]:e.indexOf(`.`,r+1)===-1?[e.slice(0,t),e.slice(0,n),e.slice(0,r),e]:wt(e)}let G,K,q=null,At,jt,J=null;function Mt(e,t){if(!t)return{intersection:``,toActivate:W(e.name),toDeactivate:U};let n=y(e),r=y(t);if(!n&&!r)return{intersection:``,toActivate:W(e.name),toDeactivate:Ct(W(t.name))};let i=W(e.name),a=W(t.name),o=Math.min(a.length,i.length),s=Dt(n??r,e,t,i,a,o),c;if(s>=a.length)c=U;else if(s===0&&a.length===1)c=a;else{c=[];for(let e=a.length-1;e>=s;e--)c.push(a[e])}let l=s===0?i:i.slice(s);return{intersection:s>0?a[s-1]:``,toDeactivate:c,toActivate:l}}function Y(e,t){if(q!==null&&e===G&&t===K)return q;if(J!==null&&e===At&&t===jt)return J;let n=Mt(e,t);return At=G,jt=K,J=q,G=e,K=t,q=n,n}function Nt(e){let t=[];for(let n of e)for(let e of n.paramMeta.urlParams)t.push(e);return t}function Pt(e){return e.at(-1)?.fullName??``}function Ft(e,t){return{name:t??Pt(e.segments),params:e.params,meta:e.meta}}var It=class{#e;#t;get#n(){return this.#e.depsStore}constructor(e=[],t){this.#e=St(e,t)}static shouldUpdateNode(e){return(t,n)=>{if(!(t&&typeof t==`object`&&`name`in t))throw TypeError(`[router.shouldUpdateNode] toState must be valid State object`);if(t.transition?.reload||e===``&&!n)return!0;let{intersection:r,toActivate:i,toDeactivate:a}=Y(t,n);return e===r||i.includes(e)?!0:a.includes(e)}}setDependencies(e){this.#e.depsStore=e;for(let[t,n]of this.#e.pendingCanActivate)e.addActivateGuard(t,n);this.#e.pendingCanActivate.clear();for(let[t,n]of this.#e.pendingCanDeactivate)e.addDeactivateGuard(t,n);this.#e.pendingCanDeactivate.clear()}setLifecycleNamespace(e){this.#e.lifecycleNamespace=e}setRootPath(e){this.#e.rootPath=e,R(this.#e)}hasRoute(e){return this.#e.matcher.hasRoute(e)}clearRoutes(){z(this.#e)}buildPath(t,n,r){if(t===e.s.UNKNOWN_ROUTE)return typeof n?.path==`string`?n.path:``;let i=Object.hasOwn(this.#e.config.defaultParams,t)?{...this.#e.config.defaultParams[t],...n}:n??{},a=typeof this.#e.config.encoders[t]==`function`?this.#e.config.encoders[t]({...i}):i;return this.#e.matcher.buildPath(t,a,this.#i(r))}matchPath(e,t){let n=t,r=this.#e.matcher.match(e);if(!r)return;let{name:i,params:a,meta:o}=Ft(r),s=typeof this.#e.config.decoders[i]==`function`?this.#e.config.decoders[i](a):a,{name:c,params:l}=this.#n.forwardState(i,s),u=e;if(n.rewritePathOnMatch){let e=typeof this.#e.config.encoders[c]==`function`?this.#e.config.encoders[c]({...l}):l,t=n.trailingSlash;u=this.#e.matcher.buildPath(c,e,{trailingSlash:t===`never`||t===`always`?t:void 0,queryParamsMode:n.queryParamsMode})}return this.#n.makeState(c,l,u,o)}forwardState(e,t){if(Object.hasOwn(this.#e.config.forwardFnMap,e)){let n=this.#r(e,t),r=this.#e.config.forwardFnMap[e],i=this.#a(e,r,t);return{name:i,params:this.#r(i,n)}}let n=this.#e.resolvedForwardMap[e]??e;if(n!==e&&Object.hasOwn(this.#e.config.forwardFnMap,n)){let r=this.#r(e,t),i=this.#e.config.forwardFnMap[n],a=this.#a(n,i,t);return{name:a,params:this.#r(a,r)}}if(n!==e){let r=this.#r(e,t);return{name:n,params:this.#r(n,r)}}return{name:e,params:this.#r(e,t)}}buildStateResolved(e,t){let n=this.#e.matcher.getSegmentsByName(e);if(n)return Ft({segments:n,params:t,meta:this.#e.matcher.getMetaByName(e)},e)}isActiveRoute(e,t={},n=!1,r=!0){let i=this.#n.getState();if(!i)return!1;let a=i.name;if(a!==e&&!a.startsWith(`${e}.`)&&!e.startsWith(`${a}.`))return!1;let o=this.#e.config.defaultParams[e];if(n||a===e){let n={name:e,params:o?{...o,...t}:t,path:``};return this.#n.areStatesEqual(n,i,r)}let s=i.params;return ue(t,s)?!o||de(o,s,t):!1}getMetaForState(e){return this.#e.matcher.hasRoute(e)?this.#e.matcher.getMetaByName(e):void 0}getUrlParams(e){let t=this.#e.matcher.getSegmentsByName(e);return t?Nt(t):[]}getStore(){return this.#e}#r(e,t){return Object.hasOwn(this.#e.config.defaultParams,e)?{...this.#e.config.defaultParams[e],...t}:t}#i(e){if(this.#t)return this.#t;let t=e?.trailingSlash;return this.#t=Object.freeze({trailingSlash:t===`never`||t===`always`?t:void 0,queryParamsMode:e?.queryParamsMode}),this.#t}#a(e,t,n){let r=new Set([e]),i=t(this.#n.getDependency,n),a=0;if(typeof i!=`string`)throw TypeError(`forwardTo callback must return a string, got ${typeof i}`);for(;a<100;){if(this.#e.matcher.getSegmentsByName(i)===void 0)throw Error(`Route "${i}" does not exist`);if(r.has(i)){let e=[...r,i].join(` → `);throw Error(`Circular forwardTo detected: ${e}`)}if(r.add(i),Object.hasOwn(this.#e.config.forwardFnMap,i)){let e=this.#e.config.forwardFnMap[i];i=e(this.#n.getDependency,n),a++;continue}let e=this.#e.config.forwardMap[i];if(e!==void 0){i=e,a++;continue}return i}throw Error(`forwardTo exceeds maximum depth of 100`)}};const Lt=new e.t(e.c.ROUTER_NOT_STARTED),Rt=new e.t(e.c.ROUTE_NOT_FOUND),zt=new e.t(e.c.SAME_STATES),Bt=Promise.reject(Lt),Vt=Promise.reject(Rt),Ht=Promise.reject(zt);Bt.catch(()=>{}),Vt.catch(()=>{}),Ht.catch(()=>{});function Ut(e,t,n,r,i){let a={phase:`activating`,reason:`success`,segments:{deactivated:n,activated:r,intersection:i}};return e?.name!==void 0&&(a.from=e.name),t.reload!==void 0&&(a.reload=t.reload),t.redirected!==void 0&&(a.redirected=t.redirected),a}function Wt({signal:e,...t}){return t}function Gt(t,n){let{toState:r,fromState:i,opts:a,toDeactivate:o,toActivate:s,intersection:c}=n;if(r.name!==e.s.UNKNOWN_ROUTE&&!t.hasRoute(r.name)){let n=new e.t(e.c.ROUTE_NOT_FOUND,{routeName:r.name});throw t.sendTransitionFail(r,i,n),n}if(i)for(let e of o)!s.includes(e)&&n.canDeactivateFunctions.has(e)&&t.clearCanDeactivate(e);r.transition=Ut(i,a,o,s,c);let l=e.r(r);t.setState(l);let u=a.signal===void 0?a:Wt(a);return t.sendTransitionDone(l,i,u),l}function Kt(t,n,r,i){let a=n;a.code===e.c.TRANSITION_CANCELLED||a.code===e.c.ROUTE_NOT_FOUND||t.sendTransitionFail(r,i,a)}function X(t,n,r){if(t instanceof DOMException&&t.name===`AbortError`)throw new e.t(e.c.TRANSITION_CANCELLED);qt(t,n,r)}function qt(t,n,r){throw t instanceof e.t?(t.setCode(n),t):new e.t(n,Yt(t,r))}const Jt=new Set([`code`,`segment`,`path`,`redirect`]);function Yt(e,t){let n={segment:t};if(e instanceof Error)return{...n,message:e.message,stack:e.stack,...`cause`in e&&e.cause!==void 0&&{cause:e.cause}};if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))Jt.has(n)||(t[n]=r);return{...n,...t}}return n}async function Xt(t,n,r){let i;try{i=await t}catch(e){X(e,n,r);return}if(!i)throw new e.t(n,{segment:r})}async function Zt(t,n,r,i,a,o,s,c,l,u){await Xt(l,r,u);for(let l=c;l<n.length;l++){if(!s())throw new e.t(e.c.TRANSITION_CANCELLED);let c=n[l],u=t.get(c);if(!u)continue;let d=!1;try{d=u(i,a,o)}catch(e){X(e,r,c)}if(d instanceof Promise){await Xt(d,r,c);continue}if(!d)throw new e.t(r,{segment:c})}}async function Qt(t,n,r,i,a,o,s,c){if(await t,!c())throw new e.t(e.c.TRANSITION_CANCELLED);if(i){let t=Z(n,r,e.c.CANNOT_ACTIVATE,a,o,s,c);if(t!==void 0&&await t,!c())throw new e.t(e.c.TRANSITION_CANCELLED)}}function $t(t,n,r,i,a,o,s,c,l,u){if(a){let a=Z(t,r,e.c.CANNOT_DEACTIVATE,s,c,l,u);if(a!==void 0)return Qt(a,n,i,o,s,c,l,u)}if(!u())throw new e.t(e.c.TRANSITION_CANCELLED);if(o)return Z(n,i,e.c.CANNOT_ACTIVATE,s,c,l,u)}function Z(t,n,r,i,a,o,s){for(let[c,l]of n.entries()){if(!s())throw new e.t(e.c.TRANSITION_CANCELLED);let u=t.get(l);if(!u)continue;let d=!1;try{d=u(i,a,o)}catch(e){X(e,r,l)}if(d instanceof Promise)return Zt(t,n,r,i,a,o,s,c+1,d,l);if(!d)throw new e.t(r,{segment:l})}}const Q=[e.s.UNKNOWN_ROUTE];Object.freeze(Q);const en={replace:!0};Object.freeze(en);function tn(t,n){return n?.name===e.s.UNKNOWN_ROUTE&&!t.replace?{...t,replace:!0}:t}function nn(e,t,n){return!!e&&!t.reload&&!t.force&&e.path===n.path}var rn=class{lastSyncResolved=!1;lastSyncRejected=!1;#e;#t=null;#n=0;setDependencies(e){this.#e=e}navigate(t,n,r){this.lastSyncResolved=!1;let i=this.#e;if(!i.canNavigate())return this.lastSyncRejected=!0,Bt;let a,o,s=!1,c=null;try{if(a=i.buildNavigateState(t,n),!a)return i.emitTransitionError(void 0,i.getState(),Rt),this.lastSyncRejected=!0,Vt;if(o=i.getState(),r=tn(r,o),nn(o,r,a))return i.emitTransitionError(a,o,zt),this.lastSyncRejected=!0,Ht;if(this.#o(),r.signal?.aborted)throw new e.t(e.c.TRANSITION_CANCELLED,{reason:r.signal.reason});let l=++this.#n;if(i.startTransition(a,o),s=!0,this.#n!==l)throw new e.t(e.c.TRANSITION_CANCELLED);let[u,d]=i.getLifecycleFunctions(),f=a.name===e.s.UNKNOWN_ROUTE,{toDeactivate:p,toActivate:m,intersection:h}=Y(a,o),g=o&&!r.forceDeactivate&&p.length>0,ee=!f&&m.length>0;if(u.size>0||d.size>0){c=new AbortController,this.#t=c;let t=c.signal,n=()=>this.#n===l&&i.isActive(),s=$t(u,d,p,m,!!g,ee,a,o,t,n);if(s!==void 0)return this.#r(s,{toState:a,fromState:o,opts:r,toDeactivate:p,toActivate:m,intersection:h,canDeactivateFunctions:u},c,l);if(!n())throw new e.t(e.c.TRANSITION_CANCELLED);this.#a(c)}return this.lastSyncResolved=!0,Promise.resolve(Gt(i,{toState:a,fromState:o,opts:r,toDeactivate:p,toActivate:m,intersection:h,canDeactivateFunctions:u}))}catch(e){return this.#i(e,c,s,a,o),Promise.reject(e)}}navigateToDefault(t){let n=this.#e;if(!n.getOptions().defaultRoute)return Promise.reject(new e.t(e.c.ROUTE_NOT_FOUND,{routeName:`defaultRoute not configured`}));let{route:r,params:i}=n.resolveDefault();return r?this.navigate(r,i,t):Promise.reject(new e.t(e.c.ROUTE_NOT_FOUND,{routeName:`defaultRoute resolved to empty`}))}navigateToNotFound(t){this.#o();let n=this.#e.getState(),r=n?W(n.name).toReversed():[];Object.freeze(r);let i={deactivated:r,activated:Q,intersection:``};Object.freeze(i);let a={phase:`activating`,...n&&{from:n.name},reason:`success`,segments:i};Object.freeze(a);let o={name:e.s.UNKNOWN_ROUTE,params:{},path:t,transition:a};return Object.freeze(o),this.#e.setState(o),this.#e.emitTransitionSuccess(o,n,en),o}abortCurrentNavigation(){this.#t?.abort(new e.t(e.c.TRANSITION_CANCELLED)),this.#t=null}async#r(t,n,r,i){let a=this.#e,o=()=>this.#n===i&&!r.signal.aborted&&a.isActive();try{if(n.opts.signal){if(n.opts.signal.aborted)throw new e.t(e.c.TRANSITION_CANCELLED,{reason:n.opts.signal.reason});n.opts.signal.addEventListener(`abort`,()=>{r.abort(n.opts.signal?.reason)},{once:!0,signal:r.signal})}if(await t,!o())throw new e.t(e.c.TRANSITION_CANCELLED);return Gt(a,n)}catch(e){throw Kt(a,e,n.toState,n.fromState),e}finally{this.#a(r)}}#i(e,t,n,r,i){t&&this.#a(t),n&&r&&Kt(this.#e,e,r,i)}#a(e){e.abort(),this.#t===e&&(this.#t=null)}#o(){this.#e.isTransitioning()&&(n.logger.warn(`router.navigate`,`Concurrent navigation detected on shared router instance. For SSR, use cloneRouter() to create isolated instance per request.`),this.#t?.abort(new e.t(e.c.TRANSITION_CANCELLED)),this.#e.cancelNavigation())}};const an={replace:!0};Object.freeze(an);var on=class{#e;setDependencies(e){this.#e=e}async start(t){let n=this.#e,r=n.getOptions(),i=n.matchPath(t);if(!i&&!r.allowNotFound){let r=new e.t(e.c.ROUTE_NOT_FOUND,{path:t});throw n.emitTransitionError(void 0,void 0,r),r}return n.completeStart(),i?n.navigate(i.name,i.params,an):n.navigateToNotFound(t)}stop(){this.#e.clearState()}},sn=class{#e;#t;#n;#r;#i;#a;constructor(e){this.#e=e.routerFSM,this.#t=e.emitter,this.#n=void 0,this.#s()}static validateSubscribeListener(e){if(typeof e!=`function`)throw TypeError(`[router.subscribe] Expected a function. For Observable pattern use @real-router/rx package`)}emitRouterStart(){this.#t.emit(e.l.ROUTER_START)}emitRouterStop(){this.#t.emit(e.l.ROUTER_STOP)}emitTransitionStart(t,n){this.#t.emit(e.l.TRANSITION_START,t,n)}emitTransitionSuccess(t,n,r){this.#t.emit(e.l.TRANSITION_SUCCESS,t,n,r)}emitTransitionError(t,n,r){this.#t.emit(e.l.TRANSITION_ERROR,t,n,r)}emitTransitionCancel(t,n){this.#t.emit(e.l.TRANSITION_CANCEL,t,n)}sendStart(){this.#e.send(c.START)}sendStop(){this.#e.send(c.STOP)}sendDispose(){this.#e.send(c.DISPOSE)}sendStarted(){this.#e.send(c.STARTED)}sendNavigate(e,t){this.#n=e,this.#e.forceState(s.TRANSITIONING),this.emitTransitionStart(e,t)}sendComplete(e,t,n={}){this.#e.forceState(s.READY),this.emitTransitionSuccess(e,t,n),this.#n===e&&(this.#n=void 0)}sendFail(e,t,n){let r=this.#n;this.#r=e,this.#i=t,this.#a=n,this.#e.send(c.FAIL),this.#n===r&&(this.#n=void 0)}sendFailSafe(e,t,n){this.isReady()?this.sendFail(e,t,n):this.emitTransitionError(e,t,n)}sendCancel(e,t){let n=this.#n;this.#r=e,this.#i=t,this.#e.send(c.CANCEL),this.#n===n&&(this.#n=void 0)}canBeginTransition(){return this.#e.canSend(c.NAVIGATE)}canStart(){return this.#e.canSend(c.START)}canCancel(){return this.#e.canSend(c.CANCEL)}isActive(){let e=this.#e.getState();return e!==s.IDLE&&e!==s.DISPOSED}isDisposed(){return this.#e.getState()===s.DISPOSED}isTransitioning(){return this.#e.getState()===s.TRANSITIONING}isReady(){return this.#e.getState()===s.READY}getCurrentToState(){return this.#n}addEventListener(e,t){return this.#t.on(e,t)}subscribe(t){return this.#t.on(e.l.TRANSITION_SUCCESS,(e,n)=>{t({route:e,previousRoute:n})})}clearAll(){this.#t.clearAll()}setLimits(e){this.#t.setLimits(e)}sendCancelIfTransitioning(e){this.canCancel()&&this.sendCancel(this.#n,e)}#o(){this.emitTransitionError(this.#r,this.#i,this.#a)}#s(){let e=this.#e;e.on(s.STARTING,c.STARTED,()=>{this.emitRouterStart()}),e.on(s.READY,c.STOP,()=>{this.emitRouterStop()}),e.on(s.TRANSITIONING,c.CANCEL,()=>{let e=this.#r;e!==void 0&&this.emitTransitionCancel(e,this.#i)}),e.on(s.STARTING,c.FAIL,()=>{this.#o()}),e.on(s.READY,c.FAIL,()=>{this.#o()}),e.on(s.TRANSITIONING,c.FAIL,()=>{this.#o()})}};const cn=new e.t(e.c.ROUTER_ALREADY_STARTED),ln=new Set([`all`,`warn-error`,`error-only`]);function un(e){return typeof e==`string`&&ln.has(e)}function dn(e){return typeof e==`string`?`"${e}"`:typeof e==`object`?JSON.stringify(e):String(e)}function fn(e){if(typeof e!=`object`||!e)throw TypeError(`Logger config must be an object`);let t=e;for(let e of Object.keys(t))if(e!==`level`&&e!==`callback`)throw TypeError(`Unknown logger config property: "${e}"`);if(`level`in t&&t.level!==void 0&&!un(t.level))throw TypeError(`Invalid logger level: ${dn(t.level)}. Expected: "all" | "warn-error" | "error-only"`);if(`callback`in t&&t.callback!==void 0&&typeof t.callback!=`function`)throw TypeError(`Logger callback must be a function, got ${typeof t.callback}`);return!0}var pn=class{router;options;limits;dependenciesStore;state;routes;routeLifecycle;plugins;navigation;lifecycle;eventBus;constructor(e){this.router=e.router,this.options=e.options,this.limits=e.limits,this.dependenciesStore=e.dependenciesStore,this.state=e.state,this.routes=e.routes,this.routeLifecycle=e.routeLifecycle,this.plugins=e.plugins,this.navigation=e.navigation,this.lifecycle=e.lifecycle,this.eventBus=e.eventBus}wireLimits(){this.dependenciesStore.limits=this.limits,this.plugins.setLimits(this.limits),this.eventBus.setLimits({maxListeners:this.limits.maxListeners,warnListeners:this.limits.warnListeners,maxEventDepth:this.limits.maxEventDepth}),this.routeLifecycle.setLimits(this.limits)}wireRouteLifecycleDeps(){let e={compileFactory:this.createCompileFactory()};this.routeLifecycle.setDependencies(e),this.routeLifecycle.setValidatorGetter(()=>{try{return t.r(this.router).validator}catch{return null}})}wireRoutesDeps(){this.routes.setDependencies({addActivateGuard:(e,t)=>{this.routeLifecycle.addCanActivate(e,t,!0)},addDeactivateGuard:(e,t)=>{this.routeLifecycle.addCanDeactivate(e,t,!0)},makeState:(e,t,n,r)=>this.state.makeState(e,t,n,r),getState:()=>this.state.get(),areStatesEqual:(e,t,n)=>this.state.areStatesEqual(e,t,n),getDependency:e=>this.dependenciesStore.dependencies[e],forwardState:(e,n)=>{let r=t.r(this.router);return r.validator?.routes.validateStateBuilderArgs(e,n,`forwardState`),r.forwardState(e,n)}}),this.routes.setLifecycleNamespace(this.routeLifecycle)}wirePluginsDeps(){let e={addEventListener:(e,t)=>this.eventBus.addEventListener(e,t),canNavigate:()=>this.eventBus.canBeginTransition(),compileFactory:this.createCompileFactory()};this.plugins.setDependencies(e),this.plugins.setValidatorGetter(()=>{try{return t.r(this.router).validator}catch{return null}})}wireNavigationDeps(){this.navigation.setDependencies({getOptions:()=>this.options.get(),hasRoute:e=>this.routes.hasRoute(e),getState:()=>this.state.get(),setState:e=>{this.state.set(e)},buildNavigateState:(e,n)=>{let r=t.r(this.router);r.validator?.routes.validateStateBuilderArgs(e,n,`navigate`);let{name:i,params:a}=r.forwardState(e,n),o=this.routes.getMetaForState(i);if(o===void 0)return;let s=r.buildPath(i,a);return this.state.makeState(i,a,s,o,!0)},resolveDefault:()=>{let e=this.options.get();return{route:g(e.defaultRoute,e=>this.dependenciesStore.dependencies[e]),params:g(e.defaultParams,e=>this.dependenciesStore.dependencies[e])}},startTransition:(e,t)=>{this.eventBus.sendNavigate(e,t)},cancelNavigation:()=>{let e=this.eventBus.getCurrentToState();e!==void 0&&this.eventBus.sendCancel(e,this.state.get())},sendTransitionDone:(e,t,n)=>{this.eventBus.sendComplete(e,t,n)},sendTransitionFail:(e,t,n)=>{this.eventBus.sendFail(e,t,n)},emitTransitionError:(e,t,n)=>{this.eventBus.sendFailSafe(e,t,n)},emitTransitionSuccess:(e,t,n)=>{this.eventBus.emitTransitionSuccess(e,t,n)},canNavigate:()=>this.eventBus.canBeginTransition(),getLifecycleFunctions:()=>this.routeLifecycle.getFunctions(),isActive:()=>this.router.isActive(),isTransitioning:()=>this.eventBus.isTransitioning(),clearCanDeactivate:e=>{this.routeLifecycle.clearCanDeactivate(e)}})}wireLifecycleDeps(){this.lifecycle.setDependencies({getOptions:()=>this.options.get(),navigate:(e,t,n)=>this.navigation.navigate(e,t,n),navigateToNotFound:e=>this.navigation.navigateToNotFound(e),clearState:()=>{this.state.set(void 0)},matchPath:e=>this.routes.matchPath(e,this.options.get()),completeStart:()=>{this.eventBus.sendStarted()},emitTransitionError:(e,t,n)=>{this.eventBus.sendFail(e,t,n)}})}wireStateDeps(){this.state.setDependencies({getDefaultParams:()=>this.routes.getStore().config.defaultParams,buildPath:(e,n)=>t.r(this.router).buildPath(e,n),getUrlParams:e=>this.routes.getUrlParams(e)})}createCompileFactory(){let{router:e,dependenciesStore:t}=this;return n=>n(e,e=>t.dependencies[e])}};function mn(e){e.wireLimits(),e.wireRouteLifecycleDeps(),e.wireRoutesDeps(),e.wirePluginsDeps(),e.wireNavigationDeps(),e.wireLifecycleDeps(),e.wireStateDeps()}const hn=Object.freeze({});var gn=class r{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;constructor(r=[],i={},a={}){i.logger&&fn(i.logger)&&(n.logger.configure(i.logger),delete i.logger),te.validateOptionsIsObject(i),d(a),r.length>0&&f(r),this.#e=new te(i),this.#t=e.n(i.limits),this.#n=p(a),this.#r=new re,this.#i=new It(r,_n(this.#e.get())),this.#a=new ce,this.#o=new oe,this.#s=new rn,this.#c=new on,this.#l=new sn({routerFSM:u(),emitter:new o({onListenerError:(e,t)=>{n.logger.error(`Router`,`Error in listener for ${e}:`,t)},onListenerWarn:(e,t)=>{n.logger.warn(`router.addEventListener`,`Event "${e}" has ${t} listeners — possible memory leak`)}})}),mn(new pn({router:this,options:this.#e,limits:this.#t,dependenciesStore:this.#n,state:this.#r,routes:this.#i,routeLifecycle:this.#a,plugins:this.#o,navigation:this.#s,lifecycle:this.#c,eventBus:this.#l}));let s=new Map;t.i(this,{makeState:(e,t,n,r)=>this.#r.makeState(e,t,n,r),forwardState:t.n(`forwardState`,(e,t)=>this.#i.forwardState(e,t),s),buildStateResolved:(e,t)=>this.#i.buildStateResolved(e,t),matchPath:(e,t)=>this.#i.matchPath(e,t),getOptions:()=>this.#e.get(),addEventListener:(e,t)=>this.#l.addEventListener(e,t),buildPath:t.n(`buildPath`,(t,n)=>this.#i.buildPath(t,n??e.a,this.#e.get()),s),start:t.t(`start`,e=>this.#c.start(e),s),interceptors:s,setRootPath:e=>{this.#i.setRootPath(e)},getRootPath:()=>this.#i.getStore().rootPath,getTree:()=>this.#i.getStore().tree,isDisposed:()=>this.#l.isDisposed(),validator:null,dependenciesGetStore:()=>this.#n,cloneOptions:()=>({...this.#e.get()}),cloneDependencies:()=>({...this.#n.dependencies}),getLifecycleFactories:()=>this.#a.getFactories(),getPluginFactories:()=>this.#o.getAll(),routeGetStore:()=>this.#i.getStore(),getStateName:()=>this.#r.get()?.name,isTransitioning:()=>this.#l.isTransitioning(),clearState:()=>{this.#r.set(void 0)},setState:e=>{this.#r.set(e)},routerExtensions:[]}),this.isActiveRoute=this.isActiveRoute.bind(this),this.buildPath=this.buildPath.bind(this),this.getState=this.getState.bind(this),this.getPreviousState=this.getPreviousState.bind(this),this.areStatesEqual=this.areStatesEqual.bind(this),this.shouldUpdateNode=this.shouldUpdateNode.bind(this),this.isActive=this.isActive.bind(this),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.dispose=this.dispose.bind(this),this.canNavigateTo=this.canNavigateTo.bind(this),this.usePlugin=this.usePlugin.bind(this),this.navigate=this.navigate.bind(this),this.navigateToDefault=this.navigateToDefault.bind(this),this.navigateToNotFound=this.navigateToNotFound.bind(this),this.subscribe=this.subscribe.bind(this)}isActiveRoute(e,r,i,a){return t.r(this).validator?.routes.validateIsActiveRouteArgs(e,r,i,a),t.r(this).validator?.routes.validateRouteName(e,`isActiveRoute`),e===``?(n.logger.warn(`real-router`,`isActiveRoute("") called with empty string. Root node is not considered a parent of any route.`),!1):this.#i.isActiveRoute(e,r,i,a)}buildPath(e,n){let r=t.r(this);return r.validator?.routes.validateBuildPathArgs(e),r.validator?.navigation.validateParams(n,`buildPath`),r.buildPath(e,n)}getState(){return this.#r.get()}getPreviousState(){return this.#r.getPrevious()}areStatesEqual(e,n,r=!0){return t.r(this).validator?.state.validateAreStatesEqualArgs(e,n,r),this.#r.areStatesEqual(e,n,r)}shouldUpdateNode(e){return t.r(this).validator?.routes.validateShouldUpdateNodeArgs(e),It.shouldUpdateNode(e)}isActive(){return this.#l.isActive()}start(e){if(!this.#l.canStart())return Promise.reject(cn);t.r(this).validator?.navigation.validateStartArgs(e),this.#l.sendStart();let n=t.r(this).start(e).catch(e=>{throw this.#l.isReady()&&(this.#c.stop(),this.#l.sendStop()),e});return r.#d(n),n}stop(){return this.#s.abortCurrentNavigation(),this.#l.sendCancelIfTransitioning(this.#r.get()),!this.#l.isReady()&&!this.#l.isTransitioning()?this:(this.#c.stop(),this.#l.sendStop(),this)}dispose(){if(this.#l.isDisposed())return;this.#s.abortCurrentNavigation(),this.#l.sendCancelIfTransitioning(this.#r.get()),(this.#l.isReady()||this.#l.isTransitioning())&&(this.#c.stop(),this.#l.sendStop()),this.#l.sendDispose(),this.#l.clearAll(),this.#o.disposeAll();let e=t.r(this);for(let t of e.routerExtensions)for(let e of t.keys)delete this[e];e.routerExtensions.length=0,this.#i.clearRoutes(),this.#a.clearAll(),this.#r.reset(),this.#n.dependencies=Object.create(null),this.#f()}canNavigateTo(e,n){let r=t.r(this);if(r.validator?.routes.validateRouteName(e,`canNavigateTo`),r.validator?.navigation.validateParams(n,`canNavigateTo`),!this.#i.hasRoute(e))return!1;let{name:i,params:a}=r.forwardState(e,n??{}),o=this.#r.makeState(i,a),s=this.#r.get(),{toDeactivate:c,toActivate:l}=Y(o,s);return this.#a.canNavigateTo(c,l,o,s)}usePlugin(...e){let n=e.filter(Boolean);if(n.length===0)return()=>{};let r=t.r(this);r.validator?.plugins.validatePluginLimit(this.#o.count(),this.#t);for(let e of n)r.validator?.plugins.validateNoDuplicatePlugins(e,this.#o.getAll());return this.#o.use(...n)}subscribe(e){return sn.validateSubscribeListener(e),this.#l.subscribe(e)}navigate(n,i,a){let o=t.r(this);o.validator?.navigation.validateNavigateArgs(n),o.validator?.navigation.validateParams(i,`navigate`);let s=a??hn;o.validator?.navigation.validateNavigationOptions(s,`navigate`);let c=this.#s.navigate(n,i??e.a,s);return this.#s.lastSyncResolved?this.#s.lastSyncResolved=!1:this.#s.lastSyncRejected?this.#s.lastSyncRejected=!1:r.#d(c),c}navigateToDefault(e){let n=t.r(this);n.validator?.navigation.validateNavigateToDefaultArgs(e);let i=e??hn;n.validator?.navigation.validateNavigationOptions(i,`navigateToDefault`);let a=this.#s.navigateToDefault(i);return this.#s.lastSyncResolved?this.#s.lastSyncResolved=!1:this.#s.lastSyncRejected?this.#s.lastSyncRejected=!1:r.#d(a),a}navigateToNotFound(t){if(!this.#l.isActive())throw new e.t(e.c.ROUTER_NOT_STARTED);if(t!==void 0&&typeof t!=`string`)throw TypeError(`[router.navigateToNotFound] path must be a string, got ${typeof t}`);let n=t??this.#r.get().path;return this.#s.navigateToNotFound(n)}static#u=t=>{t instanceof e.t&&(t.code===e.c.SAME_STATES||t.code===e.c.TRANSITION_CANCELLED||t.code===e.c.ROUTER_NOT_STARTED||t.code===e.c.ROUTE_NOT_FOUND)||n.logger.error(`router.navigate`,`Unexpected navigation error`,t)};static#d(e){e.catch(r.#u)}#f(){this.navigate=$,this.navigateToDefault=$,this.navigateToNotFound=$,this.start=$,this.stop=$,this.usePlugin=$,this.subscribe=$,this.canNavigateTo=$}};function $(){throw new e.t(e.c.ROUTER_DISPOSED)}function _n(e){return{strictTrailingSlash:e.trailingSlash===`strict`,strictQueryParams:e.queryParamsMode===`strict`,urlParamsEncoding:e.urlParamsEncoding,queryParams:e.queryParams}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return _t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return gn}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return f}});
|
|
6
|
-
//# sourceMappingURL=Router-CVNR-dug.js.map
|