@real-router/core 0.43.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.
Files changed (50) hide show
  1. package/README.md +13 -4
  2. package/dist/cjs/Router-BAks0PFv.js +6 -0
  3. package/dist/cjs/Router-BAks0PFv.js.map +1 -0
  4. package/dist/cjs/{Router-73rMK2YI.d.ts → Router-Dh1xgFLI.d.ts} +4 -2
  5. package/dist/cjs/RouterError-AQUx-VLW.js +2 -0
  6. package/dist/cjs/RouterError-AQUx-VLW.js.map +1 -0
  7. package/dist/cjs/api.d.ts +1 -1
  8. package/dist/cjs/api.js +1 -1
  9. package/dist/cjs/{getPluginApi-BXrM_Nwv.js → getPluginApi-1VcDVGjf.js} +2 -2
  10. package/dist/cjs/{getPluginApi-BXrM_Nwv.js.map → getPluginApi-1VcDVGjf.js.map} +1 -1
  11. package/dist/cjs/index.d.ts +1 -1
  12. package/dist/cjs/index.js +1 -1
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/utils.js +1 -1
  15. package/dist/cjs/validation.d.ts +1 -1
  16. package/dist/esm/{Router-BhDMI4UX.d.mts → Router-BPkXwb1J.d.mts} +4 -2
  17. package/dist/esm/Router-C3BXH7z8.mjs +6 -0
  18. package/dist/esm/Router-C3BXH7z8.mjs.map +1 -0
  19. package/dist/esm/RouterError-BOUkCIgf.mjs +2 -0
  20. package/dist/esm/RouterError-BOUkCIgf.mjs.map +1 -0
  21. package/dist/esm/api.d.mts +1 -1
  22. package/dist/esm/api.mjs +1 -1
  23. package/dist/esm/{getPluginApi-D0bBPuLp.mjs → getPluginApi-BvOUPp3g.mjs} +2 -2
  24. package/dist/esm/{getPluginApi-D0bBPuLp.mjs.map → getPluginApi-BvOUPp3g.mjs.map} +1 -1
  25. package/dist/esm/index.d.mts +1 -1
  26. package/dist/esm/index.mjs +1 -1
  27. package/dist/esm/index.mjs.map +1 -1
  28. package/dist/esm/utils.mjs +1 -1
  29. package/dist/esm/validation.d.mts +1 -1
  30. package/package.json +2 -2
  31. package/src/Router.ts +16 -2
  32. package/src/constants.ts +2 -0
  33. package/src/fsm/routerFSM.ts +17 -7
  34. package/src/getNavigator.ts +3 -1
  35. package/src/namespaces/EventBusNamespace/EventBusNamespace.ts +61 -7
  36. package/src/namespaces/NavigationNamespace/NavigationNamespace.ts +28 -10
  37. package/src/namespaces/NavigationNamespace/transition/guardPhase.ts +7 -0
  38. package/src/namespaces/NavigationNamespace/types.ts +3 -0
  39. package/src/namespaces/PluginsNamespace/constants.ts +2 -0
  40. package/src/namespaces/RouterLifecycleNamespace/RouterLifecycleNamespace.ts +1 -1
  41. package/src/types.ts +2 -1
  42. package/src/wiring/RouterWiringBuilder.ts +4 -1
  43. package/dist/cjs/Router-NL2_9FQk.js +0 -6
  44. package/dist/cjs/Router-NL2_9FQk.js.map +0 -1
  45. package/dist/cjs/RouterError-BkgjTHQg.js +0 -2
  46. package/dist/cjs/RouterError-BkgjTHQg.js.map +0 -1
  47. package/dist/esm/Router-CUi2TqAr.mjs +0 -6
  48. package/dist/esm/Router-CUi2TqAr.mjs.map +0 -1
  49. package/dist/esm/RouterError-D0RlQE_5.mjs +0 -2
  50. 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
 
@@ -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/TRANSITIONING states (facade handles STARTING/IDLE/DISPOSED).
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 6 events.
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 TRANSITIONING */
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}}function m(e){return`(${e.replaceAll(/(^<|>$)/g,``)})`}const h=/([:*])([^/?<]+)(<[^>]+>)?(\?)?/g,ee=/([:*][^/?<]+(?:<[^>]+>)?)\?(?=\/|$)/g,te=/\?(.+)$/;function ne(e){let t=[],n=[],r=[],i={},a=new Map,o=e.replaceAll(ee,`$1`),s=te.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=h.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=`^${m(o)}$`;a.set(n,{pattern:new RegExp(e),constraint:o})}}return{urlParams:t,queryParams:n,spatParams:r,paramTypeMap:i,constraintPatterns:a,pathPattern:e}}const re=/[^\w!$'()*+,.:;|~-]/gu,ie=/[^\w!$'()*+,.:;|~-]/u,ae={default:e=>ie.test(e)?e.replaceAll(re,e=>encodeURIComponent(e)):e,uri:encodeURI,uriComponent:encodeURIComponent,none:e=>e},oe={default:decodeURIComponent,uri:decodeURI,uriComponent:decodeURIComponent,none:e=>e};function g(){return{staticChildren:Object.create(null),paramChild:void 0,splatChild:void 0,route:void 0,slashChildRoute:void 0}}function _(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}function se(e,t){return e===``?t:t===``?e:e+t}function ce(e){let t={};if(e.length===0)return t;let n=0,r=e.length;for(;n<=r;){let i=e.indexOf(`&`,n);i===-1&&(i=r);let a=e.indexOf(`=`,n);a===-1||a>i?t[e.slice(n,i)]=``:t[e.slice(n,a)]=e.slice(a+1,i),n=i+1}return t}function le(e){let t=``;for(let n in e){t.length>0&&(t+=`&`);let r=e[n],i=encodeURIComponent(n);t+=r===``?i:`${i}=${encodeURIComponent(String(r))}`}return t}function v(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function ue(e){let t=0;for(;t<e.length;)if(e.codePointAt(t)===37){if(t+2>=e.length)return!1;let n=e.codePointAt(t+1)??0,r=e.codePointAt(t+2)??0;if(!v(n)||!v(r))return!1;t+=3}else t++;return!0}const y=/<[^>]*>/g;function de(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(y,``),u=o?l:se(n,l),d=i;a||(d=fe(e,t,u,o?``:n,r,i));for(let n of t.children.values())de(e,n,u,r,d);a||r.pop()}function fe(e,t,n,r,i,a){let o=ge(n,r),s=Object.freeze([...i]),c=pe(s),l=_(n),u=Ce(e.rootQueryParams,i),d=we(i),{buildStaticParts:f,buildParamSlots:p}=Se(o?_(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?me(e,m,r):he(e,m,n,l,t),m}function pe(e){let t={};for(let n of e)t[n.fullName]=n.paramTypeMap;return Object.freeze(t)}function me(e,t,n){ve(e,t,n);let r=_(n),i=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.has(i)&&e.staticCache.set(i,t)}function he(e,t,n,r,i){if(_e(e,t,n),i.paramMeta.urlParams.length===0){let n=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.set(n,t)}}function ge(e,t){return _(e)===_(t)}function _e(e,t,n){let r=_(n);if(r===`/`){e.root.route=t;return}b(e,e.root,r,1,t)}function b(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(y,``).replace(/\?$/,``);t.paramChild??={node:g(),name:r},b(e,t.paramChild.node,n,s+1,i),s>=a?t.route??=i:b(e,t,n,s+1,i);return}t=xe(e,t,c),r=s+1}t.route=i}function ve(e,t,n){let r=ye(e,n);r.slashChildRoute=t}function ye(e,t){return be(e,e.root,t)}function be(e,t,n){let r=_(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=xe(e,i,s),a=n+1}return i}function xe(e,t,n){if(n.startsWith(`*`)){let e=n.slice(1);return t.splatChild??={node:g(),name:e},t.splatChild.node}if(n.startsWith(`:`)){let e=n.slice(1).replaceAll(y,``).replace(/\?$/,``);return t.paramChild??={node:g(),name:e},t.paramChild.node}let r=e.options.caseSensitive?n:n.toLowerCase();return r in t.staticChildren||(t.staticChildren[r]=g()),t.staticChildren[r]}function Se(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=ae[n],r=e.split(`/`),i=t(r[0]);for(let e=1;e<r.length;e++)i+=`/${t(r[e])}`;return i}:ae[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 Ce(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 we(e){let t=new Map;for(let n of e)for(let[e,r]of n.paramMeta.constraintPatterns)t.set(e,r);return t}var Te=class{get options(){return this.#e}#e;#t=g();#n=new Map;#r=new Map;#i=new Map;#a=new Map;#o={cleanPath:``,normalized:``,queryString:void 0};#s=``;#c=[];#l=``;constructor(e){this.#e={caseSensitive:e?.caseSensitive??!0,strictTrailingSlash:e?.strictTrailingSlash??!1,strictQueryParams:e?.strictQueryParams??!1,urlParamsEncoding:e?.urlParamsEncoding??`default`,parseQueryString:e?.parseQueryString??ce,buildQueryString:e?.buildQueryString??le}}registerTree(e){this.#c=e.paramMeta.queryParams,de({root:this.#t,options:this.#e,routesByName:this.#n,segmentsByName:this.#r,metaByName:this.#i,staticCache:this.#a,rootQueryParams:this.#c},e,``,[],null)}match(e){if(!this.#m(e))return;let{cleanPath:t,normalized:n,queryString:r}=this.#o,i=this.#e.caseSensitive?n:n.toLowerCase(),a=this.#a.get(i);if(a)return this.#e.strictTrailingSlash&&!this.#_(t,a)?void 0:this.#g(a,{},r);let o={},s=this.#v(n,o);if(s&&!(this.#e.strictTrailingSlash&&!this.#_(t,s))&&!(s.hasConstraints&&!this.#x(o,s))&&this.#b(o))return this.#g(s,o,r)}buildPath(e,t,n){let r=this.#n.get(e);if(!r)throw Error(`[SegmentMatcher.buildPath] '${e}' is not defined`);r.hasConstraints&&t&&this.#u(r,e,t);let i=this.#d(r,t),a=this.#f(i,n?.trailingSlash),o=this.#p(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.#s=e}#u(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}'`)}}}#d(e,t){let n=e.buildStaticParts,r=e.buildParamSlots;if(r.length===0)return this.#s+n[0];let i=this.#s+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;o=typeof r==`string`?r:typeof r==`object`?JSON.stringify(r):String(r);let s=a.encoder(o);i+=s+n[e+1]}return i}#f(e,t){return t===`always`&&!e.endsWith(`/`)?`${e}/`:t===`never`&&e!==`/`&&e.endsWith(`/`)?e.slice(0,-1):e}#p(e,t,n){if(!t||e.declaredQueryParams.length===0&&n!==`loose`)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):``}#m(e){if(e===``&&(e=`/`),e.codePointAt(0)!==47)return!1;let t=this.#s.length;if(t>0){if(e.length<t||!e.startsWith(this.#s))return!1;e=e.length===t?`/`:e.slice(t)}let n=this.#h(e);if(n===-2)return!1;n===-3&&(e=this.#l);let r=n>=0?e.slice(0,n):e,i=n>=0?e.slice(n+1):void 0,a=_(r);return this.#o.cleanPath=r,this.#o.normalized=a,this.#o.queryString=i,!0}#h(e){let t=!1;for(let n=0;n<e.length;n++){let r=e.codePointAt(n);if(r===35)return this.#l=e.slice(0,n),-3;if(r===63)return n;if(r>=128)return-2;if(r===47){if(t)return-2;t=!0}else t=!1}return-1}#g(e,t,n){if(n!==void 0){let r=this.#e.parseQueryString(n);if(this.#e.strictQueryParams){let n=e.declaredQueryParamsSet;for(let e in r){if(!n.has(e))return;t[e]=r[e]}}else for(let e in r)t[e]=r[e]}return{segments:e.matchSegments,params:t,meta:e.meta}}#_(e,t){return(e.length>1&&e.endsWith(`/`))===t.hasTrailingSlash}#v(e,t){return e.length===1?this.#t.slashChildRoute??this.#t.route:this.#y(this.#t,e,1,t)}#y(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.#y(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}#b(e){let t=this.#e.urlParamsEncoding;if(t===`none`)return!0;let n=oe[t];for(let t in e){let r=e[t];if(r.includes(`%`)){if(!ue(r))return!1;e[t]=n(r)}}return!0}#x(e,t){for(let[n,r]of t.constraintPatterns)if(!r.pattern.test(e[n]))return!1;return!0}};const x=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)},Ee=(e,t)=>{if(e===void 0)return t.boolean.decodeUndefined();let n=t.boolean.decodeRaw(e);if(n!==null)return n;let r=x(e),i=t.number.decode(r);return i===null?t.boolean.decodeValue(r):i},S=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)},C={none:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${S(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}=${S(t[r])}`;return n}},brackets:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[]=${S(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[]=${S(t[r])}`;return n}},index:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[0]=${S(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[${r}]=${S(t[r])}`;return n}},comma:{encodeArray:(e,t)=>{if(t.length===0)return`${e}=`;let n=`${e}=${S(t[0])}`;for(let e=1;e<t.length;e++)n+=`,${S(t[e])}`;return n}}},De={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:()=>null,decodeValue:e=>e},Oe={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},w={none:De,auto:Oe,"empty-true":ke},T={default:{encode:e=>e},hidden:{encode:()=>``}},Ae={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}},je=(e,t,n,r)=>({boolean:w[t],null:T[n],number:Ae[r],array:C[e]}),Me={boolean:w.auto,null:T.default,number:Ae.auto,array:C.none},E={arrayFormat:`none`,booleanFormat:`auto`,nullFormat:`default`,numberFormat:`auto`},Ne={...E,strategies:Me},Pe=e=>{if(!e||e.arrayFormat===void 0&&e.booleanFormat===void 0&&e.nullFormat===void 0&&e.numberFormat===void 0)return Ne;let t=e.arrayFormat??E.arrayFormat,n=e.booleanFormat??E.booleanFormat,r=e.nullFormat??E.nullFormat,i=e.numberFormat??E.numberFormat;return{arrayFormat:t,booleanFormat:n,nullFormat:r,numberFormat:i,strategies:je(t,n,r,i)}},D=e=>encodeURIComponent(e),Fe=(e,t,n)=>{let r=D(e);switch(typeof t){case`string`:case`number`:return`${r}=${D(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}=${D(t)}`;default:return`${r}=${D(t)}`}},Ie=e=>{let t=e.indexOf(`?`);return t===-1?e:e.slice(t+1)};function Le(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 Re(e,t,n,r,i){return i?Ee(r?e.slice(t+1,n):void 0,i):r?x(e.slice(t+1,n)):null}function ze(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}Le(r,x(e.slice(t,c)),Re(e,a,n,o,i),l)}const Be=(e,t)=>{let n=Ie(e);if(n===``||n===`?`)return{};if(!t)return Ve(n);let r=Pe(t),i={},a=0,o=n.length;for(;a<o;){let e=n.indexOf(`&`,a);e===-1&&(e=o),ze(n,a,e,i,r.strategies),a=e+1}return i};function Ve(e){let t={};return He(e,t),t}function He(e,t){let n=0,r=e.length;for(;n<r;){let i=e.indexOf(`&`,n);i===-1&&(i=r),ze(e,n,i,t),n=i+1}}const Ue=(e,t)=>{let n=Object.keys(e);if(n.length===0)return``;let r=Pe(t),i=[];for(let t of n){let n=e[t];if(n===void 0)continue;let a=Fe(t,n,r);a&&i.push(a)}return i.join(`&`)};function O(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=O(t,a);a.children.push(e)}return a}function We(e,t,n){let r=O({name:e,path:t},null);for(let e of n){let t=O(e,r);r.children.push(t)}return r}const Ge=Object.freeze(new Map),Ke=Object.freeze([]);function qe(e){return e.parent?.name?`${e.parent.fullName}.${e.name}`:e.name}function Je(e,t){return e.endsWith(`/`)&&t.startsWith(`/`)?e+t.slice(1):e+t}function Ye(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;if(e.absolute)return e.path;let i=e.parent;return i?.path?i.staticPath===null?null:Je(i.staticPath,e.path):e.path}function Xe(e){let t=new Map;for(let n of e)t.set(n.name,n);return t}function Ze(e,t,n){let r=[],i=[];for(let a of e){let e=Qe(a,t,n);r.push(e),e.absolute||i.push(e)}return{childrenMap:Xe(r),nonAbsoluteChildren:i}}function Qe(e,t,n){let r=ne(e.path),i=r.paramTypeMap,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};if(a.fullName=qe(a),a.staticPath=Ye(a),e.children.length===0)a.children=Ge,a.nonAbsoluteChildren=Ke;else{let{childrenMap:t,nonAbsoluteChildren:r}=Ze(e.children,a,n);a.children=t,a.nonAbsoluteChildren=r}return n&&(e.children.length>0&&(Object.freeze(a.nonAbsoluteChildren),Object.freeze(a.children)),Object.freeze(i),Object.freeze(a)),a}function $e(e,t=!0){return Qe(e,null,t)}function et(e,t){let n=[];return{add(e){return n.push(e),this},addMany(e){return n.push(...e),this},build(r){return $e(We(e,t,n),!r?.skipFreeze)}}}function tt(e,t,n,r){return et(e,t).addMany(n).build(r)}function k(e){let t=e.absolute?`~${e.path}`:e.path,n={name:e.name,path:t};return e.children.size>0&&(n.children=Array.from(e.children.values(),k)),n}function nt(e){return Array.from(e.children.values(),k)}function rt(e){let t=e?.queryParams;return new Te({...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=>Be(e,t),buildQueryString:e=>Ue(e,t)})}const it={defaultRoute:``,defaultParams:{},trailingSlash:`preserve`,queryParamsMode:`loose`,queryParams:E,urlParamsEncoding:`default`,allowNotFound:!0,rewritePathOnMatch:!0};function at(e){Object.freeze(e);for(let t of Object.keys(e)){let n=e[t];n&&typeof n==`object`&&n.constructor===Object&&at(n)}return e}function ot(e,t){return typeof e==`function`?e(t):e}function st(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`[router.constructor] options must be a plain object`)}var ct=class{#e;constructor(e={}){this.#e=at({...it,...e})}static validateOptionsIsObject(e){st(e)}get(){return this.#e}};function A(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(!A(e[n],t[n]))return!1;return!0}return!1}const lt=new WeakMap;function ut(e){return lt.get(e)}function dt(e,t){lt.set(e,t)}var ft=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&&dt(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(!A(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)||!A(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 j={[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},pt=Object.keys(j),M=`router.usePlugin`;function mt(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 ht=class t{#e=new Set;#t=new Set;#n;#r=e.i;#i=null;static validatePlugin(e){mt(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(M,`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(M,`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(M,`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 pt)e in n&&(typeof n[e]==`function`?(r.push(this.#n.addEventListener(j[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 gt(e){let t=()=>e;return()=>t}var _t=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`?gt(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 N(){return{decoders:Object.create(null),encoders:Object.create(null),defaultParams:Object.create(null),forwardMap:Object.create(null),forwardFnMap:Object.create(null)}}function vt(e,t){for(let n in e)if(e[n]!==t[n])return!1;return!0}function yt(e,t,n){for(let r in e)if(!(r in n)&&e[r]!==t[r])return!1;return!0}function P(e){let t={name:e.name,path:e.path};return e.children&&(t.children=e.children.map(e=>P(e))),t}function F(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}.`)&&F(i.children,t,a))return!0}return!1}function bt(e,t){for(let n of Object.keys(e))t(n)&&delete e[n]}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=tt(``,t,e),i=rt(n);return i.registerTree(r),{tree:r,matcher:i}}function xt(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,N()),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 St(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 Ct(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&&St(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;Ct(s,e,t,n,r,i,a),s.children&&H(s.children,t,n,r,i,a,e)}}function wt(e,t){let n=[],r=N(),i=Object.create(null),a=new Map,o=new Map;for(let t of e)n.push(P(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:xt,resetStore:z,nodeToDefinition:k}}}const U=[];Object.freeze(U);function Tt(e){let t=e.length,n=[];for(let r=t-1;r>=0;r--)n.push(e[r]);return n}function Et(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 Dt(e){let t=typeof e;return t===`string`||t===`number`||t===`boolean`}function Ot(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(Dt(t)&&Dt(i)&&String(t)!==String(i))return!1}return!0}function kt(e,t,n,r,i,a){for(let o=0;o<a;o++){let a=r[o];if(a!==i[o]||!Ot(a,e,t,n))return o}return a}const At=new Map;function W(e){let t=At.get(e);if(t)return t;let n=jt(e);return Object.freeze(n),At.set(e,n),n}function jt(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]:Et(e)}let G,K,q=null,Mt,Nt,J=null;function Pt(e,t){if(!t)return{intersection:``,toActivate:W(e.name),toDeactivate:U};let n=ut(e),r=ut(t);if(!n&&!r)return{intersection:``,toActivate:W(e.name),toDeactivate:Tt(W(t.name))};let i=W(e.name),a=W(t.name),o=Math.min(a.length,i.length),s=kt(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===Mt&&t===Nt)return J;let n=Pt(e,t);return Mt=G,Nt=K,J=q,G=e,K=t,q=n,n}function Ft(e){let t=[];for(let n of e)for(let e of n.paramMeta.urlParams)t.push(e);return t}function It(e){return e.at(-1)?.fullName??``}function Lt(e,t){return{name:t??It(e.segments),params:e.params,meta:e.meta}}var Rt=class{#e;#t;get#n(){return this.#e.depsStore}constructor(e=[],t){this.#e=wt(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}=Lt(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 Lt({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 vt(t,s)?!o||yt(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?Ft(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 zt=new e.t(e.c.ROUTER_NOT_STARTED),Bt=new e.t(e.c.ROUTE_NOT_FOUND),Vt=new e.t(e.c.SAME_STATES),Ht=Promise.reject(zt),Ut=Promise.reject(Bt),Wt=Promise.reject(Vt);Ht.catch(()=>{}),Ut.catch(()=>{}),Wt.catch(()=>{});function Gt(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 Kt({signal:e,...t}){return t}function X(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=Gt(i,a,o,s,c);let l=e.r(r);t.setState(l);let u=a.signal===void 0?a:Kt(a);return t.sendTransitionDone(l,i,u),l}function qt(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 Z(t,n,r){if(t instanceof DOMException&&t.name===`AbortError`)throw new e.t(e.c.TRANSITION_CANCELLED);Jt(t,n,r)}function Jt(t,n,r){throw t instanceof e.t?(t.setCode(n),t):new e.t(n,Xt(t,r))}const Yt=new Set([`code`,`segment`,`path`,`redirect`]);function Xt(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))Yt.has(n)||(t[n]=r);return{...n,...t}}return n}async function Zt(t,n,r){let i;try{i=await t}catch(e){Z(e,n,r);return}if(!i)throw new e.t(n,{segment:r})}async function Qt(t,n,r,i,a,o,s,c,l,u){await Zt(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){Z(e,r,c)}if(d instanceof Promise){await Zt(d,r,c);continue}if(!d)throw new e.t(r,{segment:c})}}async function $t(t,n,r,i,a,o,s,c){if(await t,!c())throw new e.t(e.c.TRANSITION_CANCELLED);if(i){let t=Q(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 en(t,n,r,i,a,o,s,c,l,u){if(a){let a=Q(t,r,e.c.CANNOT_DEACTIVATE,s,c,l,u);if(a!==void 0)return $t(a,n,i,o,s,c,l,u)}if(!u())throw new e.t(e.c.TRANSITION_CANCELLED);if(o)return Q(n,i,e.c.CANNOT_ACTIVATE,s,c,l,u)}function Q(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){Z(e,r,l)}if(d instanceof Promise)return Qt(t,n,r,i,a,o,s,c+1,d,l);if(!d)throw new e.t(r,{segment:l})}}const tn=[e.s.UNKNOWN_ROUTE];Object.freeze(tn);const nn={replace:!0};Object.freeze(nn);function rn(t,n){return n?.name===e.s.UNKNOWN_ROUTE&&!t.replace?{...t,replace:!0}:t}function an(e,t,n){return!!e&&!t.reload&&!t.force&&e.path===n.path}var on=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,Ht;let a,o,s=!1,c=null;try{if(a=i.buildNavigateState(t,n),!a)return i.emitTransitionError(void 0,i.getState(),Bt),this.lastSyncRejected=!0,Ut;if(o=i.getState(),r=rn(r,o),an(o,r,a))return i.emitTransitionError(a,o,Vt),this.lastSyncRejected=!0,Wt;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),ee=o&&!r.forceDeactivate&&p.length>0,te=!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=en(u,d,p,m,!!ee,te,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(X(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:tn,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,nn),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 X(a,n)}catch(e){throw qt(a,e,n.toState,n.fromState),e}finally{this.#a(r)}}#i(e,t,n,r,i){t&&this.#a(t),n&&r&&qt(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 sn={replace:!0};Object.freeze(sn);var cn=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,sn):n.navigateToNotFound(t)}stop(){this.#e.clearState()}},ln=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 un=new e.t(e.c.ROUTER_ALREADY_STARTED),dn=new Set([`all`,`warn-error`,`error-only`]);function fn(e){return typeof e==`string`&&dn.has(e)}function pn(e){return typeof e==`string`?`"${e}"`:typeof e==`object`?JSON.stringify(e):String(e)}function mn(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&&!fn(t.level))throw TypeError(`Invalid logger level: ${pn(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 hn=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:ot(e.defaultRoute,e=>this.dependenciesStore.dependencies[e]),params:ot(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 gn(e){e.wireLimits(),e.wireRouteLifecycleDeps(),e.wireRoutesDeps(),e.wirePluginsDeps(),e.wireNavigationDeps(),e.wireLifecycleDeps(),e.wireStateDeps()}const _n=Object.freeze({});var vn=class r{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;constructor(r=[],i={},a={}){i.logger&&mn(i.logger)&&(n.logger.configure(i.logger),delete i.logger),ct.validateOptionsIsObject(i),d(a),r.length>0&&f(r),this.#e=new ct(i),this.#t=e.n(i.limits),this.#n=p(a),this.#r=new ft,this.#i=new Rt(r,yn(this.#e.get())),this.#a=new _t,this.#o=new ht,this.#s=new on,this.#c=new cn,this.#l=new ln({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`)}})}),gn(new hn({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),Rt.shouldUpdateNode(e)}isActive(){return this.#l.isActive()}start(e){if(!this.#l.canStart())return Promise.reject(un);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 ln.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??_n;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??_n;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 yn(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 P}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return nt}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return bt}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return vn}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return f}});
6
- //# sourceMappingURL=Router-NL2_9FQk.js.map