@real-router/core 0.47.0 → 0.48.1

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 (62) hide show
  1. package/README.md +64 -0
  2. package/dist/cjs/{Router-Dh1xgFLI.d.ts → Router-DrBkBdZ5.d.ts} +4 -4
  3. package/dist/cjs/{Router-Dh1xgFLI.d.ts.map → Router-DrBkBdZ5.d.ts.map} +1 -1
  4. package/dist/cjs/Router-ct1eZOO8.js +6 -0
  5. package/dist/cjs/Router-ct1eZOO8.js.map +1 -0
  6. package/dist/cjs/RouterError-BmvAyBlx.js +2 -0
  7. package/dist/cjs/RouterError-BmvAyBlx.js.map +1 -0
  8. package/dist/cjs/api.d.ts +1 -1
  9. package/dist/cjs/api.d.ts.map +1 -1
  10. package/dist/cjs/api.js +1 -1
  11. package/dist/cjs/api.js.map +1 -1
  12. package/dist/cjs/{getPluginApi-1VcDVGjf.js → getPluginApi-B_dUJgg4.js} +2 -2
  13. package/dist/cjs/getPluginApi-B_dUJgg4.js.map +1 -0
  14. package/dist/cjs/index.d.ts +1 -1
  15. package/dist/cjs/index.d.ts.map +1 -1
  16. package/dist/cjs/index.js +1 -1
  17. package/dist/cjs/internals-na15rxo_.js.map +1 -1
  18. package/dist/cjs/utils.js +1 -1
  19. package/dist/cjs/validation.d.ts +2 -1
  20. package/dist/cjs/validation.d.ts.map +1 -1
  21. package/dist/esm/{Router-BPkXwb1J.d.mts → Router-BeXr2zW4.d.mts} +4 -4
  22. package/dist/esm/{Router-BPkXwb1J.d.mts.map → Router-BeXr2zW4.d.mts.map} +1 -1
  23. package/dist/esm/Router-DXGRP4Vr.mjs +6 -0
  24. package/dist/esm/Router-DXGRP4Vr.mjs.map +1 -0
  25. package/dist/esm/RouterError-D-Zjbdv9.mjs +2 -0
  26. package/dist/esm/RouterError-D-Zjbdv9.mjs.map +1 -0
  27. package/dist/esm/api.d.mts +1 -1
  28. package/dist/esm/api.d.mts.map +1 -1
  29. package/dist/esm/api.mjs +1 -1
  30. package/dist/esm/api.mjs.map +1 -1
  31. package/dist/esm/getPluginApi-BJAaa-tI.mjs +2 -0
  32. package/dist/esm/getPluginApi-BJAaa-tI.mjs.map +1 -0
  33. package/dist/esm/index.d.mts +1 -1
  34. package/dist/esm/index.d.mts.map +1 -1
  35. package/dist/esm/index.mjs +1 -1
  36. package/dist/esm/internals-CCymabFj.mjs.map +1 -1
  37. package/dist/esm/utils.mjs +1 -1
  38. package/dist/esm/validation.d.mts +2 -1
  39. package/dist/esm/validation.d.mts.map +1 -1
  40. package/package.json +4 -4
  41. package/src/Router.ts +6 -2
  42. package/src/api/getPluginApi.ts +27 -1
  43. package/src/api/getRoutesApi.ts +16 -4
  44. package/src/constants.ts +14 -0
  45. package/src/helpers.ts +68 -50
  46. package/src/internals.ts +1 -0
  47. package/src/namespaces/NavigationNamespace/NavigationNamespace.ts +3 -2
  48. package/src/namespaces/NavigationNamespace/transition/completeTransition.ts +12 -8
  49. package/src/namespaces/RoutesNamespace/RoutesNamespace.ts +4 -2
  50. package/src/namespaces/StateNamespace/StateNamespace.ts +19 -6
  51. package/src/wiring/RouterWiringBuilder.ts +4 -1
  52. package/dist/cjs/Router-BtWR1xO-.js +0 -6
  53. package/dist/cjs/Router-BtWR1xO-.js.map +0 -1
  54. package/dist/cjs/RouterError-AQUx-VLW.js +0 -2
  55. package/dist/cjs/RouterError-AQUx-VLW.js.map +0 -1
  56. package/dist/cjs/getPluginApi-1VcDVGjf.js.map +0 -1
  57. package/dist/esm/Router-DmPynezS.mjs +0 -6
  58. package/dist/esm/Router-DmPynezS.mjs.map +0 -1
  59. package/dist/esm/RouterError-BOUkCIgf.mjs +0 -2
  60. package/dist/esm/RouterError-BOUkCIgf.mjs.map +0 -1
  61. package/dist/esm/getPluginApi-BvOUPp3g.mjs +0 -2
  62. package/dist/esm/getPluginApi-BvOUPp3g.mjs.map +0 -1
@@ -28,6 +28,7 @@ import type {
28
28
  ForwardToCallback,
29
29
  Params,
30
30
  Router,
31
+ TransitionMeta,
31
32
  } from "@real-router/types";
32
33
  import type { RouteDefinition, RouteTree } from "route-tree";
33
34
 
@@ -250,6 +251,7 @@ function replaceRoutes<
250
251
  routes: Route<Dependencies>[],
251
252
  ctx: RouterInternals<Dependencies>,
252
253
  currentPath: string | undefined,
254
+ previousTransition: TransitionMeta | undefined,
253
255
  ): void {
254
256
  // Step 2: Clear route data (WITHOUT tree rebuild)
255
257
  clearRouteData(store);
@@ -276,12 +278,16 @@ function replaceRoutes<
276
278
  // Step 5: One tree rebuild
277
279
  store.treeOperations.commitTreeChanges(store);
278
280
 
279
- // Step 6: Revalidate state
281
+ // Step 6: Revalidate state (preserve transition from previous state)
280
282
  if (currentPath !== undefined) {
281
283
  const revalidated = ctx.matchPath(currentPath, ctx.getOptions());
282
284
 
283
285
  if (revalidated) {
284
- ctx.setState(revalidated);
286
+ ctx.setState({
287
+ ...revalidated,
288
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- previousTransition is guaranteed defined: currentPath is only set when getState() returned a state, which always has transition
289
+ transition: previousTransition!,
290
+ });
285
291
  } else {
286
292
  ctx.clearState();
287
293
  }
@@ -565,9 +571,15 @@ export function getRoutesApi<
565
571
  ctx.validator?.routes.validateAddRouteArgs(routeArray);
566
572
  ctx.validator?.routes.validateRoutes(routeArray, store);
567
573
 
568
- const currentPath = router.getState()?.path;
574
+ const currentState = router.getState();
569
575
 
570
- replaceRoutes(store, routeArray, ctx, currentPath);
576
+ replaceRoutes(
577
+ store,
578
+ routeArray,
579
+ ctx,
580
+ currentState?.path,
581
+ currentState?.transition,
582
+ );
571
583
  },
572
584
  };
573
585
  }
package/src/constants.ts CHANGED
@@ -6,6 +6,7 @@ import type {
6
6
  ErrorCodeToValueMap,
7
7
  ErrorCodeKeys,
8
8
  ErrorCodeValues,
9
+ TransitionMeta,
9
10
  } from "@real-router/types";
10
11
 
11
12
  export type ConstantsKeys = "UNKNOWN_ROUTE";
@@ -35,6 +36,7 @@ export const errorCodes: ErrorCodeToValueMap = Object.freeze({
35
36
  TRANSITION_CANCELLED: "CANCELLED", // Navigation cancelled by user or new navigation
36
37
  ROUTER_DISPOSED: "DISPOSED", // Router has been disposed
37
38
  PLUGIN_CONFLICT: "PLUGIN_CONFLICT", // Plugin tried to extend router with already-existing property
39
+ CONTEXT_NAMESPACE_ALREADY_CLAIMED: "CONTEXT_NAMESPACE_ALREADY_CLAIMED", // Plugin tried to claim a context namespace already owned by another plugin
38
40
  });
39
41
 
40
42
  /**
@@ -85,3 +87,15 @@ export const DEFAULT_LIMITS = {
85
87
  } as const;
86
88
 
87
89
  export const EMPTY_PARAMS: Readonly<Record<string, never>> = Object.freeze({});
90
+
91
+ const FROZEN_EMPTY_SEGMENTS = Object.freeze({
92
+ deactivated: Object.freeze([]) as unknown as string[],
93
+ activated: Object.freeze([]) as unknown as string[],
94
+ intersection: "",
95
+ });
96
+
97
+ export const DEFAULT_TRANSITION = Object.freeze({
98
+ phase: "activating",
99
+ reason: "success",
100
+ segments: FROZEN_EMPTY_SEGMENTS,
101
+ }) as TransitionMeta;
package/src/helpers.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  import { DEFAULT_LIMITS } from "./constants";
4
4
 
5
5
  import type { Limits } from "./types";
6
- import type { State, LimitsConfig } from "@real-router/types";
6
+ import type { Params, State, LimitsConfig } from "@real-router/types";
7
7
 
8
8
  // =============================================================================
9
9
  // State Helpers
@@ -109,65 +109,30 @@ export function deepFreezeState<T extends State>(state: T): T {
109
109
  return clonedState;
110
110
  }
111
111
 
112
- // WeakSet to track already frozen root objects for O(1) re-freeze check
113
- const frozenRoots = new WeakSet<object>();
114
-
115
- // Module-scope recursive freeze function - better JIT optimization, no allocation per call
116
- function freezeRecursive(obj: unknown): void {
117
- // Skip primitives, null
118
- if (obj === null || typeof obj !== "object") {
119
- return;
120
- }
121
-
122
- // Skip already frozen objects (handles potential shared refs)
123
- if (Object.isFrozen(obj)) {
124
- return;
125
- }
126
-
127
- // Freeze the object/array
128
- Object.freeze(obj);
129
-
130
- // Iterate without Object.values() allocation
131
- if (Array.isArray(obj)) {
132
- for (const item of obj) {
133
- freezeRecursive(item);
134
- }
135
- } else {
136
- for (const key in obj) {
137
- freezeRecursive((obj as Record<string, unknown>)[key]);
138
- }
139
- }
140
- }
141
-
142
112
  /**
143
- * Freezes State object in-place without cloning.
144
- * Optimized for hot paths where state is known to be a fresh object.
113
+ * Shallow-freezes a State object in place.
114
+ *
115
+ * Freezes only the top-level State object (blocks reassignment of `name`,
116
+ * `params`, `path`, `transition`, `context`). Nested objects (`params`,
117
+ * `transition`, `transition.segments`, `transition.segments.{deactivated,activated}`)
118
+ * are expected to be **already frozen at creation time** by their producers:
119
+ *
120
+ * - `params` frozen in `makeState()` / `navigateToNotFound()`
121
+ * - `transition`, `segments`, `deactivated`, `activated` frozen in
122
+ * `buildTransitionMeta()` (or inline in `navigateToNotFound()`)
145
123
  *
146
- * IMPORTANT: Only use this when you know the state is a fresh object
147
- * that hasn't been exposed to external code yet (e.g., from makeState()).
124
+ * `state.context` is **intentionally not frozen** plugins write to it via
125
+ * `claim.write(state, value)` after state creation.
148
126
  *
149
- * @param state - The State object to freeze (must be a fresh object)
150
- * @returns The same state object, now frozen
151
127
  * @internal
152
128
  */
153
129
  export function freezeStateInPlace<T extends State>(state: T): T {
154
- // Early return for null/undefined - state from makeState() is never null
155
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
130
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive guard against external misuse
156
131
  if (!state) {
157
132
  return state;
158
133
  }
159
134
 
160
- // Fast path: already processed root object - O(1) check
161
- if (frozenRoots.has(state)) {
162
- return state;
163
- }
164
-
165
- freezeRecursive(state);
166
-
167
- // Mark root as processed for future calls
168
- frozenRoots.add(state);
169
-
170
- return state;
135
+ return Object.freeze(state);
171
136
  }
172
137
 
173
138
  /**
@@ -177,3 +142,56 @@ export function freezeStateInPlace<T extends State>(state: T): T {
177
142
  export function createLimits(userLimits: Partial<LimitsConfig> = {}): Limits {
178
143
  return { ...DEFAULT_LIMITS, ...userLimits };
179
144
  }
145
+
146
+ // =============================================================================
147
+ // Params Helpers
148
+ // =============================================================================
149
+
150
+ /**
151
+ * Strips `undefined` values from a params object before handoff to the query
152
+ * string engine and state storage.
153
+ *
154
+ * **Why this exists:** `router.navigate(name, { x: undefined })` must not put
155
+ * `x` into the resulting URL (publicly documented contract). The underlying
156
+ * query engine (`search-params`) already does this, but the contract belongs
157
+ * to `@real-router/core` — this function guarantees it at the core boundary
158
+ * so that:
159
+ * - Plugin interceptors on `forwardState` that inject `undefined` values are
160
+ * caught before they reach the engine
161
+ * - `state.params` never contains `undefined` values (roundtrip consistent
162
+ * with URL)
163
+ * - The contract is verifiable at core's own test surface (doesn't depend on
164
+ * engine behavior for regression detection)
165
+ *
166
+ * Single pass. Always returns a fresh object when input is defined
167
+ * (reference identity is not preserved — callers must not rely on it).
168
+ */
169
+ export function normalizeParams(params: Params): Params;
170
+
171
+ export function normalizeParams(params: undefined): undefined;
172
+
173
+ export function normalizeParams(params: Params | undefined): Params | undefined;
174
+
175
+ export function normalizeParams(
176
+ params: Params | undefined,
177
+ ): Params | undefined {
178
+ if (params === undefined) {
179
+ return params;
180
+ }
181
+
182
+ const normalized: Params = {};
183
+
184
+ for (const key in params) {
185
+ if (!Object.hasOwn(params, key)) {
186
+ continue;
187
+ }
188
+
189
+ const value = params[key];
190
+
191
+ if (value !== undefined) {
192
+ normalized[key] = value;
193
+ }
194
+ }
195
+
196
+ return normalized;
197
+ }
package/src/internals.ts CHANGED
@@ -90,6 +90,7 @@ export interface RouterInternals<
90
90
  readonly clearState: () => void;
91
91
  readonly setState: (state: State) => void;
92
92
  readonly routerExtensions: { keys: string[] }[];
93
+ readonly contextClaimRecords: Set<string>;
93
94
  }
94
95
 
95
96
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- existential type: stores RouterInternals for all Dependencies types
@@ -10,7 +10,7 @@ import {
10
10
  import { completeTransition } from "./transition/completeTransition";
11
11
  import { routeTransitionError } from "./transition/errorHandling";
12
12
  import { executeGuardPipeline } from "./transition/guardPhase";
13
- import { errorCodes, constants } from "../../constants";
13
+ import { EMPTY_PARAMS, errorCodes, constants } from "../../constants";
14
14
  import { RouterError } from "../../RouterError";
15
15
  import { getTransitionPath, nameToIDs } from "../../transitionPath";
16
16
 
@@ -310,9 +310,10 @@ export class NavigationNamespace {
310
310
 
311
311
  const state: State = {
312
312
  name: constants.UNKNOWN_ROUTE,
313
- params: {} as Params,
313
+ params: EMPTY_PARAMS as Params,
314
314
  path,
315
315
  transition: transitionMeta,
316
+ context: {},
316
317
  };
317
318
 
318
319
  Object.freeze(state);
@@ -1,5 +1,4 @@
1
1
  import { errorCodes, constants } from "../../../constants";
2
- import { freezeStateInPlace } from "../../../helpers";
3
2
  import { RouterError } from "../../../RouterError";
4
3
 
5
4
  import type { NavigationDependencies, NavigationContext } from "../types";
@@ -20,14 +19,19 @@ function buildTransitionMeta(
20
19
  toActivate: string[],
21
20
  intersection: string,
22
21
  ): TransitionMeta {
22
+ Object.freeze(toDeactivate);
23
+ Object.freeze(toActivate);
24
+
25
+ const segments = Object.freeze({
26
+ deactivated: toDeactivate,
27
+ activated: toActivate,
28
+ intersection,
29
+ });
30
+
23
31
  const meta: MutableTransitionMeta = {
24
32
  phase: "activating",
25
33
  reason: "success",
26
- segments: {
27
- deactivated: toDeactivate,
28
- activated: toActivate,
29
- intersection,
30
- },
34
+ segments,
31
35
  };
32
36
 
33
37
  if (fromState?.name !== undefined) {
@@ -42,7 +46,7 @@ function buildTransitionMeta(
42
46
  meta.redirected = opts.redirected;
43
47
  }
44
48
 
45
- return meta;
49
+ return Object.freeze(meta);
46
50
  }
47
51
 
48
52
  function stripSignal({
@@ -88,7 +92,7 @@ export function completeTransition(
88
92
  intersection,
89
93
  );
90
94
 
91
- const finalState = freezeStateInPlace(toState);
95
+ const finalState = Object.freeze(toState);
92
96
 
93
97
  deps.setState(finalState);
94
98
 
@@ -7,7 +7,7 @@ import {
7
7
  rebuildTreeInPlace,
8
8
  resetStore,
9
9
  } from "./routesStore";
10
- import { constants } from "../../constants";
10
+ import { constants, DEFAULT_TRANSITION } from "../../constants";
11
11
  import { getTransitionPath } from "../../transitionPath";
12
12
 
13
13
  import type { RoutesStore } from "./routesStore";
@@ -107,7 +107,7 @@ export class RoutesNamespace<
107
107
  );
108
108
  }
109
109
 
110
- if (toState.transition?.reload) {
110
+ if (toState.transition.reload) {
111
111
  return true;
112
112
  }
113
113
 
@@ -403,6 +403,8 @@ export class RoutesNamespace<
403
403
  name,
404
404
  params: effectiveParams,
405
405
  path: "",
406
+ transition: DEFAULT_TRANSITION,
407
+ context: {},
406
408
  };
407
409
 
408
410
  return this.#deps.areStatesEqual(
@@ -1,7 +1,7 @@
1
1
  // packages/core/src/namespaces/StateNamespace/StateNamespace.ts
2
2
 
3
3
  import { areParamValuesEqual } from "./helpers";
4
- import { EMPTY_PARAMS } from "../../constants";
4
+ import { DEFAULT_TRANSITION, EMPTY_PARAMS } from "../../constants";
5
5
  import { freezeStateInPlace } from "../../helpers";
6
6
  import { setStateMetaParams } from "../../stateMetaStore";
7
7
 
@@ -97,7 +97,15 @@ export class StateNamespace {
97
97
  // =========================================================================
98
98
 
99
99
  /**
100
- * Creates a frozen state object for a route.
100
+ * Creates a state object for a route.
101
+ *
102
+ * `params` is frozen at creation so it is always immutable, even when
103
+ * `skipFreeze=true` is passed to defer the outer `Object.freeze(state)` call.
104
+ * This keeps params-freezing invariants independent of transition-pipeline
105
+ * mutation (e.g. `completeTransition` attaching `state.transition`).
106
+ *
107
+ * `context` is initialized as a fresh empty object — intentionally NOT frozen
108
+ * so plugins can publish data via `claim.write(state, value)` after creation.
101
109
  */
102
110
  makeState<P extends Params = Params>(
103
111
  name: string,
@@ -114,18 +122,23 @@ export class StateNamespace {
114
122
  let mergedParams: P;
115
123
 
116
124
  if (hasDefaultParams) {
117
- mergedParams = { ...defaultParamsConfig[name], ...params } as P;
125
+ mergedParams = Object.freeze({
126
+ ...defaultParamsConfig[name],
127
+ ...params,
128
+ }) as P;
118
129
  } else if (!params || params === EMPTY_PARAMS) {
119
130
  mergedParams = EMPTY_PARAMS as P;
120
131
  } else {
121
- mergedParams = { ...params };
132
+ mergedParams = Object.freeze({ ...params }) as P;
122
133
  }
123
134
 
124
- const state: State<P> = {
135
+ const state = {
125
136
  name,
126
137
  params: mergedParams,
127
138
  path: path ?? this.#deps.buildPath(name, params),
128
- };
139
+ context: {},
140
+ ...(!skipFreeze && { transition: DEFAULT_TRANSITION }),
141
+ } as State<P>;
129
142
 
130
143
  if (meta) {
131
144
  setStateMetaParams(state, meta as unknown as Params);
@@ -1,5 +1,6 @@
1
1
  // packages/core/src/wiring/RouterWiringBuilder.ts
2
2
 
3
+ import { normalizeParams } from "../helpers";
3
4
  import { getInternals } from "../internals";
4
5
  import { resolveOption } from "../namespaces/OptionsNamespace";
5
6
 
@@ -140,7 +141,9 @@ export class RouterWiringBuilder<
140
141
  "navigate",
141
142
  );
142
143
 
143
- const { name, params } = ctx.forwardState(routeName, routeParams);
144
+ const forwarded = ctx.forwardState(routeName, routeParams);
145
+ const name = forwarded.name;
146
+ const params = normalizeParams(forwarded.params);
144
147
  const meta = this.routes.getMetaForState(name);
145
148
 
146
149
  if (meta === undefined) {
@@ -1,6 +0,0 @@
1
- const e=require(`./RouterError-AQUx-VLW.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`,TRANSITION_STARTED:`TRANSITION_STARTED`,LEAVE_APPROVED:`LEAVE_APPROVED`,DISPOSED:`DISPOSED`},c={START:`START`,STARTED:`STARTED`,NAVIGATE:`NAVIGATE`,LEAVE_APPROVE:`LEAVE_APPROVE`,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.TRANSITION_STARTED,[c.FAIL]:s.READY,[c.STOP]:s.IDLE},[s.TRANSITION_STARTED]:{[c.NAVIGATE]:s.TRANSITION_STARTED,[c.LEAVE_APPROVE]:s.LEAVE_APPROVED,[c.CANCEL]:s.READY,[c.FAIL]:s.READY},[s.LEAVE_APPROVED]:{[c.NAVIGATE]:s.TRANSITION_STARTED,[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,g=/([:*][^/?<]+(?:<[^>]+>)?)\?(?=\/|$)/g,ee=/\?(.+)$/;function te(e){let t=[],n=[],r=[],i={},a=new Map,o=e.replaceAll(g,`$1`),s=ee.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 _=/[^\w!$'()*+,.:;|~-]/gu,v=/[^\w!$'()*+,.:;|~-]/u,ne={default:e=>v.test(e)?e.replaceAll(_,e=>encodeURIComponent(e)):e,uri:encodeURI,uriComponent:encodeURIComponent,none:e=>e},re={default:decodeURIComponent,uri:decodeURI,uriComponent:decodeURIComponent,none:e=>e};function y(){return{staticChildren:Object.create(null),hasChildren:!1,paramChild:void 0,splatChild:void 0,route:void 0,slashChildRoute:void 0}}function b(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}function ie(e,t){return e===``?t:t===``?e:e+t}function ae(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[decodeURIComponent(e.slice(n,i))]=``:t[decodeURIComponent(e.slice(n,a))]=decodeURIComponent(e.slice(a+1,i)),n=i+1}return t}function oe(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 se(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function ce(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(!se(n)||!se(r))return!1;t+=3}else t++;return!0}const x=/<[^>]*>/g;function le(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(x,``),u=o?l:ie(n,l),d=i;a||(d=ue(e,t,u,o?``:n,r,i));for(let n of t.children.values())le(e,n,u,r,d);a||r.pop()}function ue(e,t,n,r,i,a){let o=me(n,r),s=Object.freeze([...i]),c=de(s),l=b(n),u=xe(e.rootQueryParams,i),d=Se(i),{buildStaticParts:f,buildParamSlots:p}=be(o?b(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 t.paramMeta.urlParams.length===0&&(m.cachedResult=Object.freeze({segments:m.matchSegments,params:Object.freeze({}),meta:m.meta})),e.routesByName.set(t.fullName,m),e.segmentsByName.set(t.fullName,s),e.metaByName.set(t.fullName,c),o?fe(e,m,r):pe(e,m,n,l,t),m}function de(e){let t={};for(let n of e)t[n.fullName]=n.paramTypeMap;return Object.freeze(t)}function fe(e,t,n){ge(e,t,n);let r=b(n),i=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.has(i)&&e.staticCache.set(i,t)}function pe(e,t,n,r,i){if(he(e,t,n),i.paramMeta.urlParams.length===0){let n=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.set(n,t)}}function me(e,t){return b(e)===b(t)}function he(e,t,n){let r=b(n);if(r===`/`){e.root.route=t;return}S(e,e.root,r,1,t)}function S(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(x,``).replace(/\?$/,``);t.paramChild??={node:y(),name:r},S(e,t.paramChild.node,n,s+1,i),s>=a?t.route??=i:S(e,t,n,s+1,i);return}t=ye(e,t,c),r=s+1}t.route=i}function ge(e,t,n){let r=_e(e,n);r.slashChildRoute=t}function _e(e,t){return ve(e,e.root,t)}function ve(e,t,n){let r=b(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=ye(e,i,s),a=n+1}return i}function ye(e,t,n){if(n.startsWith(`*`)){let e=n.slice(1);return t.splatChild??={node:y(),name:e},t.hasChildren=!0,t.splatChild.node}if(n.startsWith(`:`)){let e=n.slice(1).replaceAll(x,``).replace(/\?$/,``);return t.paramChild??={node:y(),name:e},t.hasChildren=!0,t.paramChild.node}let r=e.options.caseSensitive?n:n.toLowerCase();return r in t.staticChildren||(t.staticChildren[r]=y(),t.hasChildren=!0),t.staticChildren[r]}function be(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=ne[n],r=e.split(`/`),i=t(r[0]);for(let e=1;e<r.length;e++)i+=`/${t(r[e])}`;return i}:ne[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 xe(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 Se(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 Ce=class{get options(){return this.#e}#e;#t=y();#n=new Map;#r=new Map;#i=new Map;#a=new Map;#o={cleanPath:``,normalized:``,queryString:void 0};#s=``;#c=[];#l=``;#u;#d;constructor(e){this.#e={caseSensitive:e?.caseSensitive??!0,strictTrailingSlash:e?.strictTrailingSlash??!1,strictQueryParams:e?.strictQueryParams??!1,urlParamsEncoding:e?.urlParamsEncoding??`default`,parseQueryString:e?.parseQueryString??ae,buildQueryString:e?.buildQueryString??oe},this.#u=this.#e.caseSensitive,this.#d=this.#e.urlParamsEncoding===`none`?null:re[this.#e.urlParamsEncoding]}registerTree(e){this.#c=e.paramMeta.queryParams,le({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.#g(e))return;let{cleanPath:t,normalized:n,queryString:r}=this.#o,i=this.#u?n:n.toLowerCase(),a=this.#a.get(i);if(a)return this.#e.strictTrailingSlash&&!this.#y(t,a)?void 0:r===void 0&&a.cachedResult?a.cachedResult:this.#v(a,{},r);let o={},s=this.#b(n,o);if(s&&!(this.#e.strictTrailingSlash&&!this.#y(t,s))&&!(s.hasConstraints&&!this.#w(o,s))&&this.#C(o))return this.#v(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.#f(r,e,t);let i=this.#p(r,t),a=this.#m(i,n?.trailingSlash),o=this.#h(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}#f(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}'`)}}}#p(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}#m(e,t){return t===`always`&&!e.endsWith(`/`)?`${e}/`:t===`never`&&e!==`/`&&e.endsWith(`/`)?e.slice(0,-1):e}#h(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):``}#g(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.#_(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=b(r);return this.#o.cleanPath=r,this.#o.normalized=a,this.#o.queryString=i,!0}#_(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}#v(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}}#y(e,t){return(e.length>1&&e.endsWith(`/`))===t.hasTrailingSlash}#b(e,t){return e.length===1?this.#t.slashChildRoute??this.#t.route:this.#x(this.#t,e,1,t)}#x(e,t,n,r){let i=e,a=t.length,o=this.#u;for(;n<=a;){let e=t.indexOf(`/`,n),s=e===-1?a:e,c=t.slice(n,s),l=o?c:c.toLowerCase(),u;if(l in i.staticChildren)u=i.staticChildren[l];else if(i.paramChild)u=i.paramChild.node,r[i.paramChild.name]=c;else if(i.splatChild)return this.#S(i.splatChild,t,n,r);else return;i=u,n=s+1}return i.slashChildRoute??i.route}#S(e,t,n,r){let i=e.node;if(!i.hasChildren)return r[e.name]=t.slice(n),i.route;let a={},o=this.#x(i,t,n,a);return o?(Object.assign(r,a),o):(r[e.name]=t.slice(n),i.route)}#C(e){let t=this.#d;if(!t)return!0;for(let n in e){let r=e[n];if(r.includes(`%`)){if(!ce(r))return!1;e[n]=t(r)}}return!0}#w(e,t){for(let[n,r]of t.constraintPatterns)if(!r.pattern.test(e[n]))return!1;return!0}};const C=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)},we=(e,t)=>{if(e===void 0)return t.boolean.decodeUndefined();let n=t.boolean.decodeRaw(e);if(n!==null)return n;let r=C(e),i=t.number.decode(r);return i===null?t.boolean.decodeValue(r):i},w=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)},T={none:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${w(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}=${w(t[r])}`;return n}},brackets:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[]=${w(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[]=${w(t[r])}`;return n}},index:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[0]=${w(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[${r}]=${w(t[r])}`;return n}},comma:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${w(t[0])}`;for(let e=1;e<t.length;e++)n+=`,${w(t[e])}`;return n},decodeValue:e=>e.includes(`,`)?e.split(`,`):null}},Te={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:()=>null,decodeValue:e=>e},Ee={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:e=>e===`true`?!0:e===`false`?!1:null,decodeValue:e=>e},De={encode:(e,t)=>t?e:`${e}=false`,decodeUndefined:()=>!0,decodeRaw:()=>null,decodeValue:e=>e},E={none:Te,auto:Ee,"empty-true":De},D={default:{encode:e=>e},hidden:{encode:()=>``}},O={auto:{decode:e=>{let t=e.length;if(t===0||t>1&&e.codePointAt(0)===48&&e.codePointAt(1)!==46)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}}let r=Number(e);return!Number.isSafeInteger(r)&&!n?null:r}},none:{decode:()=>null}},Oe=(e,t,n,r)=>({boolean:E[t],null:D[n],number:O[r],array:T[e]}),ke={boolean:E.auto,null:D.default,number:O.auto,array:T.none},k={arrayFormat:`none`,booleanFormat:`auto`,nullFormat:`default`,numberFormat:`auto`},Ae={...k,strategies:ke},A=e=>{if(!e||e.arrayFormat===void 0&&e.booleanFormat===void 0&&e.nullFormat===void 0&&e.numberFormat===void 0)return Ae;let t=e.arrayFormat??k.arrayFormat,n=e.booleanFormat??k.booleanFormat,r=e.nullFormat??k.nullFormat,i=e.numberFormat??k.numberFormat;return{arrayFormat:t,booleanFormat:n,nullFormat:r,numberFormat:i,strategies:Oe(t,n,r,i)}},j=e=>encodeURIComponent(e),je=(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)}`}},Me=e=>{let t=e.indexOf(`?`);return t===-1?e:e.slice(t+1)};function M(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 Ne(e,t,n,r,i){return i?we(r?e.slice(t+1,n):void 0,i):r?C(e.slice(t+1,n)):null}function Pe(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}let u=C(e.slice(t,c));if(!l&&o&&i?.array.decodeValue){let t=e.slice(a+1,n),o=i.array.decodeValue(t);if(o){for(let e of o)M(r,u,we(e,i),!0);return}}M(r,u,Ne(e,a,n,o,i),l)}const Fe=(e,t)=>{let n=Me(e);if(n===``||n===`?`)return{};if(!t)return Ie(n);let r=A(t),i={},a=0,o=n.length;for(;a<o;){let e=n.indexOf(`&`,a);e===-1&&(e=o),Pe(n,a,e,i,r.strategies),a=e+1}return i};function Ie(e){let t={};return Le(e,t),t}function Le(e,t){let n=0,r=e.length;for(;n<r;){let i=e.indexOf(`&`,n);i===-1&&(i=r),Pe(e,n,i,t),n=i+1}}const Re=(e,t)=>{let n=Object.keys(e);if(n.length===0)return``;let r=A(t),i=[];for(let t of n){let n=e[t];if(n===void 0)continue;let a=je(t,n,r);a&&i.push(a)}return i.join(`&`)};function N(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=N(t,a);a.children.push(e)}return a}function ze(e,t,n){let r=N({name:e,path:t},null);for(let e of n){let t=N(e,r);r.children.push(t)}return r}const Be=Object.freeze(new Map),Ve=Object.freeze([]);function He(e){return e.parent?.name?`${e.parent.fullName}.${e.name}`:e.name}function Ue(e,t){return e.endsWith(`/`)&&t.startsWith(`/`)?e+t.slice(1):e+t}function We(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:Ue(i.staticPath,e.path):e.path}function Ge(e){let t=new Map;for(let n of e)t.set(n.name,n);return t}function Ke(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:Ge(r),nonAbsoluteChildren:i}}function qe(e,t,n){let r=te(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=He(a),a.staticPath=We(a),e.children.length===0)a.children=Be,a.nonAbsoluteChildren=Ve;else{let{childrenMap:t,nonAbsoluteChildren:r}=Ke(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 Je(e,t=!0){return qe(e,null,t)}function Ye(e,t){let n=[];return{add(e){return n.push(e),this},addMany(e){return n.push(...e),this},build(r){return Je(ze(e,t,n),!r?.skipFreeze)}}}function Xe(e,t,n,r){return Ye(e,t).addMany(n).build(r)}function P(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(),P)),n}function Ze(e){return Array.from(e.children.values(),P)}function Qe(e){let t=e?.queryParams;return new Ce({...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=>Fe(e,t),buildQueryString:e=>Re(e,t)})}const $e={defaultRoute:``,defaultParams:{},trailingSlash:`preserve`,queryParamsMode:`loose`,queryParams:k,urlParamsEncoding:`default`,allowNotFound:!0,rewritePathOnMatch:!0};function et(e){Object.freeze(e);for(let t of Object.keys(e)){let n=e[t];n&&typeof n==`object`&&n.constructor===Object&&et(n)}return e}function tt(e,t){return typeof e==`function`?e(t):e}function nt(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`[router.constructor] options must be a plain object`)}var F=class{#e;constructor(e={}){this.#e=et({...$e,...e})}static validateOptionsIsObject(e){nt(e)}get(){return this.#e}};function I(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(!I(e[n],t[n]))return!1;return!0}return!1}const rt=new WeakMap;function it(e){return rt.get(e)}function at(e,t){rt.set(e,t)}var ot=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&&at(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(!I(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)||!I(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 st={[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_LEAVE_APPROVE]:e.l.TRANSITION_LEAVE_APPROVE,[e.u.TRANSITION_ERROR]:e.l.TRANSITION_ERROR,[e.u.TRANSITION_CANCEL]:e.l.TRANSITION_CANCEL},ct=Object.keys(st),L=`router.usePlugin`;function lt(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 ut=class t{#e=new Set;#t=new Set;#n;#r=e.i;#i=null;static validatePlugin(e){lt(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(L,`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(L,`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(L,`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 ct)e in n&&(typeof n[e]==`function`?(r.push(this.#n.addEventListener(st[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 dt(e){let t=()=>e;return()=>t}var ft=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`?dt(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 pt(){return{decoders:Object.create(null),encoders:Object.create(null),defaultParams:Object.create(null),forwardMap:Object.create(null),forwardFnMap:Object.create(null)}}function mt(e,t){for(let n in e)if(e[n]!==t[n])return!1;return!0}function ht(e,t,n){for(let r in e)if(!(r in n)&&e[r]!==t[r])return!1;return!0}function R(e){let t={name:e.name,path:e.path};return e.children&&(t.children=e.children.map(e=>R(e))),t}function gt(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}.`)&&gt(i.children,t,a))return!0}return!1}function _t(e,t){for(let n of Object.keys(e))t(n)&&delete e[n]}function vt(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 yt(e,t,n){let r=Xe(``,t,e),i=Qe(n);return i.registerTree(r),{tree:r,matcher:i}}function z(e){let t=yt(e.definitions,e.rootPath,e.matcherOptions);e.tree=t.tree,e.matcher=t.matcher}function bt(e){z(e),e.resolvedForwardMap=B(e.config)}function xt(e){St(e),z(e)}function St(e){e.definitions.length=0,Object.assign(e.config,pt()),e.resolvedForwardMap=Object.create(null),e.routeCustomFields=Object.create(null)}function B(e){let t=Object.create(null);for(let n of Object.keys(e.forwardMap))t[n]=vt(n,e.forwardMap);return t}function Ct(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 wt(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&&Ct(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 V(e,t,n,r,i,a,o=``){for(let s of e){let e=o?`${o}.${s.name}`:s.name;wt(s,e,t,n,r,i,a),s.children&&V(s.children,t,n,r,i,a,e)}}function Tt(e,t){let n=[],r=pt(),i=Object.create(null),a=new Map,o=new Map;for(let t of e)n.push(R(t));let{tree:s,matcher:c}=yt(n,``,t);return V(e,r,i,a,o,void 0,``),{definitions:n,config:r,tree:s,matcher:c,resolvedForwardMap:B(r),routeCustomFields:i,rootPath:``,matcherOptions:t,depsStore:void 0,lifecycleNamespace:void 0,pendingCanActivate:a,pendingCanDeactivate:o,treeOperations:{commitTreeChanges:bt,resetStore:xt,nodeToDefinition:P}}}const H=[];Object.freeze(H);function Et(e){let t=e.length,n=[];for(let r=t-1;r>=0;r--)n.push(e[r]);return n}function Dt(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 Ot(e){let t=typeof e;return t===`string`||t===`number`||t===`boolean`}function kt(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(Ot(t)&&Ot(i)&&String(t)!==String(i))return!1}return!0}function At(e,t,n,r,i,a){for(let o=0;o<a;o++){let a=r[o];if(a!==i[o]||!kt(a,e,t,n))return o}return a}const jt=new Map;function U(e){let t=jt.get(e);if(t)return t;let n=Mt(e);return Object.freeze(n),jt.set(e,n),n}function Mt(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]:Dt(e)}let W,G,K=null,Nt,Pt,q=null;function Ft(e,t){if(!t)return{intersection:``,toActivate:U(e.name),toDeactivate:H};let n=it(e),r=it(t);if(!n&&!r)return{intersection:``,toActivate:U(e.name),toDeactivate:Et(U(t.name))};let i=U(e.name),a=U(t.name),o=Math.min(a.length,i.length),s=At(n??r,e,t,i,a,o),c;if(s>=a.length)c=H;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 J(e,t){if(K!==null&&e===W&&t===G)return K;if(q!==null&&e===Nt&&t===Pt)return q;let n=Ft(e,t);return Nt=W,Pt=G,q=K,W=e,G=t,K=n,n}function It(e){let t=[];for(let n of e)for(let e of n.paramMeta.urlParams)t.push(e);return t}function Lt(e){return e.at(-1)?.fullName??``}function Rt(e,t){return{name:t??Lt(e.segments),params:e.params,meta:e.meta}}var zt=class{#e;#t;get#n(){return this.#e.depsStore}constructor(e=[],t){this.#e=Tt(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}=J(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,z(this.#e)}hasRoute(e){return this.#e.matcher.hasRoute(e)}clearRoutes(){xt(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}=Rt(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 Rt({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 mt(t,s)?!o||ht(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?It(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 Bt=new e.t(e.c.ROUTER_NOT_STARTED),Vt=new e.t(e.c.ROUTE_NOT_FOUND),Ht=new e.t(e.c.SAME_STATES),Ut=Promise.reject(Bt),Wt=Promise.reject(Vt),Gt=Promise.reject(Ht);Ut.catch(()=>{}),Wt.catch(()=>{}),Gt.catch(()=>{});function Kt(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 qt({signal:e,...t}){return t}function Jt(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=Kt(i,a,o,s,c);let l=e.r(r);t.setState(l);let u=a.signal===void 0?a:qt(a);return t.sendTransitionDone(l,i,u),l}function Yt(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 Y(t,n,r){if(t instanceof DOMException&&t.name===`AbortError`)throw new e.t(e.c.TRANSITION_CANCELLED);Xt(t,n,r)}function Xt(t,n,r){throw t instanceof e.t?(t.setCode(n),t):new e.t(n,Qt(t,r))}const Zt=new Set([`code`,`segment`,`path`,`redirect`]);function Qt(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))Zt.has(n)||(t[n]=r);return{...n,...t}}return n}async function $t(t,n,r){let i;try{i=await t}catch(e){Y(e,n,r);return}if(!i)throw new e.t(n,{segment:r})}async function en(t,n,r,i,a,o,s,c,l,u){await $t(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){Y(e,r,c)}if(d instanceof Promise){await $t(d,r,c);continue}if(!d)throw new e.t(r,{segment:c})}}async function tn(t,n,r,i,a,o,s,c,l){if(await t,!c())throw new e.t(e.c.TRANSITION_CANCELLED);let u=l();if(u!==void 0&&(await u,!c()))throw new e.t(e.c.TRANSITION_CANCELLED);if(i){let t=X(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 nn(t,n,r,i,a,o,s,c,l,u,d){if(a){let a=X(t,r,e.c.CANNOT_DEACTIVATE,s,c,l,u);if(a!==void 0)return tn(a,n,i,o,s,c,l,u,d)}if(!u())throw new e.t(e.c.TRANSITION_CANCELLED);let f=d();if(f!==void 0)return rn(f,o?n:void 0,i,s,c,l,u);if(o)return X(n,i,e.c.CANNOT_ACTIVATE,s,c,l,u)}async function rn(t,n,r,i,a,o,s){if(await t,!s())throw new e.t(e.c.TRANSITION_CANCELLED);if(n!==void 0){let t=X(n,r,e.c.CANNOT_ACTIVATE,i,a,o,s);if(t!==void 0&&await t,!s())throw new e.t(e.c.TRANSITION_CANCELLED)}}function X(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){Y(e,r,l)}if(d instanceof Promise)return en(t,n,r,i,a,o,s,c+1,d,l);if(!d)throw new e.t(r,{segment:l})}}const an=[e.s.UNKNOWN_ROUTE];Object.freeze(an);const on={replace:!0};Object.freeze(on);function sn(t,n){return n?.name===e.s.UNKNOWN_ROUTE&&!t.replace?{...t,replace:!0}:t}function cn(e,t,n){return!!e&&!t.reload&&!t.force&&e.path===n.path}var ln=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,Ut;let a,o,s=!1,c=null;try{if(a=i.buildNavigateState(t,n),!a)return i.emitTransitionError(void 0,i.getState(),Vt),this.lastSyncRejected=!0,Wt;if(o=i.getState(),r=sn(r,o),cn(o,r,a))return i.emitTransitionError(a,o,Ht),this.lastSyncRejected=!0,Gt;this.#s(r.signal);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,p=J(a,o),{toDeactivate:m,toActivate:h,intersection:g}=p,ee=o&&!r.forceDeactivate&&m.length>0,te=!f&&h.length>0,_=u.size>0||d.size>0,v=a;if(!_){let e=this.#a(v,o,l,r,p,u);if(e!==void 0)return e}if(_){c=new AbortController,this.#t=c;let t=()=>this.#n===l&&i.isActive(),n=c.signal,s=nn(u,d,m,h,!!ee,te,a,o,n,t,()=>{if(i.sendLeaveApprove(v,o),i.hasLeaveListeners())return i.awaitLeaveListeners(v,o,n)});if(s!==void 0)return this.#r(s,{toState:a,fromState:o,opts:r,toDeactivate:m,toActivate:h,intersection:g,canDeactivateFunctions:u},c,l);if(!t())throw new e.t(e.c.TRANSITION_CANCELLED);this.#o(c)}return this.lastSyncResolved=!0,Promise.resolve(Jt(i,{toState:a,fromState:o,opts:r,toDeactivate:m,toActivate:h,intersection:g,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.#s();let n=this.#e.getState(),r=n?U(n.name).toReversed():[];Object.freeze(r);let i={deactivated:r,activated:an,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,on),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 Jt(a,n)}catch(e){throw Yt(a,e,n.toState,n.fromState),e}finally{this.#o(r)}}#i(e,t,n,r,i){t&&this.#o(t),n&&r&&Yt(this.#e,e,r,i)}#a(t,n,r,i,a,o){let s=this.#e;if(s.sendLeaveApprove(t,n),s.hasLeaveListeners()){let e=new AbortController,c=s.awaitLeaveListeners(t,n,e.signal);if(c!==void 0)return this.#t=e,this.#r(c,{toState:t,fromState:n,opts:i,toDeactivate:a.toDeactivate,toActivate:a.toActivate,intersection:a.intersection,canDeactivateFunctions:o},e,r)}if(this.#n!==r)throw new e.t(e.c.TRANSITION_CANCELLED)}#o(e){e.abort(),this.#t===e&&(this.#t=null)}#s(t){if(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()),t?.aborted)throw new e.t(e.c.TRANSITION_CANCELLED,{reason:t.reason})}};const un={replace:!0};Object.freeze(un);var dn=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,un):n.navigateToNotFound(t)}stop(){this.#e.clearState()}};function Z(e){return e instanceof Error?e:Error(String(e))}function fn(e,t){return Promise.allSettled(e).then(e=>{if(t!==void 0)throw Z(t);let n=e.find(e=>e.status===`rejected`);if(n!==void 0)throw Z(n.reason)})}var Q=class{#e;#t;#n=[];#r;#i;#a;#o;constructor(e){this.#e=e.routerFSM,this.#t=e.emitter,this.#r=void 0,this.#c()}static validateSubscribeListener(e){if(typeof e!=`function`)throw TypeError(`[router.subscribe] Expected a function. For Observable pattern use @real-router/rx package`)}static validateSubscribeLeaveListener(e){if(typeof e!=`function`)throw TypeError(`[router.subscribeLeave] Expected a function`)}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)}emitTransitionLeaveApprove(t,n){this.#t.emit(e.l.TRANSITION_LEAVE_APPROVE,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.#r=e,this.#e.forceState(s.TRANSITION_STARTED),this.emitTransitionStart(e,t)}sendComplete(e,t,n={}){this.#e.forceState(s.READY),this.emitTransitionSuccess(e,t,n),this.#r===e&&(this.#r=void 0)}sendLeaveApprove(e,t){this.#e.forceState(s.LEAVE_APPROVED),this.emitTransitionLeaveApprove(e,t)}sendFail(e,t,n){let r=this.#r;this.#i=e,this.#a=t,this.#o=n,this.#e.send(c.FAIL),this.#r===r&&(this.#r=void 0)}sendFailSafe(e,t,n){this.isReady()?this.sendFail(e,t,n):this.emitTransitionError(e,t,n)}sendCancel(e,t){let n=this.#r;this.#i=e,this.#a=t,this.#e.send(c.CANCEL),this.#r===n&&(this.#r=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(){let e=this.#e.getState();return e===s.TRANSITION_STARTED||e===s.LEAVE_APPROVED}isLeaveApproved(){return this.#e.getState()===s.LEAVE_APPROVED}isReady(){return this.#e.getState()===s.READY}getCurrentToState(){return this.#r}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})})}subscribeLeave(e){return this.#n.push(e),()=>{let t=this.#n.indexOf(e);t!==-1&&this.#n.splice(t,1)}}hasLeaveListeners(){return this.#n.length>0}awaitLeaveListeners(e,t,n){if(t===void 0)return;let r={route:t,nextRoute:e,signal:n},i,a;for(let e of this.#n)try{let t=e(r);t!==void 0&&typeof t.then==`function`&&(i??=[],i.push(t))}catch(e){a===void 0&&(a=e)}if(i===void 0){if(a!==void 0)throw Z(a);return}return fn(i,a)}clearAll(){this.#t.clearAll(),this.#n.length=0}setLimits(e){this.#t.setLimits(e)}sendCancelIfPossible(e){let t=this.#r;!this.canCancel()||t===void 0||this.sendCancel(t,e)}#s(){this.emitTransitionError(this.#i,this.#a,this.#o)}#c(){let e=this.#e;e.on(s.STARTING,c.STARTED,()=>{this.emitRouterStart()}),e.on(s.READY,c.STOP,()=>{this.emitRouterStop()});let t=()=>{let e=this.#i;e!==void 0&&this.emitTransitionCancel(e,this.#a)};e.on(s.TRANSITION_STARTED,c.CANCEL,t),e.on(s.LEAVE_APPROVED,c.CANCEL,t),e.on(s.LEAVE_APPROVED,c.FAIL,()=>{this.#s()}),e.on(s.STARTING,c.FAIL,()=>{this.#s()}),e.on(s.READY,c.FAIL,()=>{this.#s()}),e.on(s.TRANSITION_STARTED,c.FAIL,()=>{this.#s()})}};const pn=new e.t(e.c.ROUTER_ALREADY_STARTED),mn=new Set([`all`,`warn-error`,`error-only`]);function hn(e){return typeof e==`string`&&mn.has(e)}function gn(e){return typeof e==`string`?`"${e}"`:typeof e==`object`?JSON.stringify(e):String(e)}function _n(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&&!hn(t.level))throw TypeError(`Invalid logger level: ${gn(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 vn=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:tt(e.defaultRoute,e=>this.dependenciesStore.dependencies[e]),params:tt(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)},sendLeaveApprove:(e,t)=>{this.eventBus.sendLeaveApprove(e,t)},canNavigate:()=>this.eventBus.canBeginTransition(),getLifecycleFunctions:()=>this.routeLifecycle.getFunctions(),isActive:()=>this.router.isActive(),isTransitioning:()=>this.eventBus.isTransitioning(),clearCanDeactivate:e=>{this.routeLifecycle.clearCanDeactivate(e)},hasLeaveListeners:()=>this.eventBus.hasLeaveListeners(),awaitLeaveListeners:(e,t,n)=>this.eventBus.awaitLeaveListeners(e,t,n)})}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 yn(e){e.wireLimits(),e.wireRouteLifecycleDeps(),e.wireRoutesDeps(),e.wirePluginsDeps(),e.wireNavigationDeps(),e.wireLifecycleDeps(),e.wireStateDeps()}const bn=Object.freeze({});var xn=class r{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;constructor(r=[],i={},a={}){i.logger&&_n(i.logger)&&(n.logger.configure(i.logger),delete i.logger),F.validateOptionsIsObject(i),d(a),r.length>0&&f(r),this.#e=new F(i),this.#t=e.n(i.limits),this.#n=p(a),this.#r=new ot,this.#i=new zt(r,Sn(this.#e.get())),this.#a=new ft,this.#o=new ut,this.#s=new ln,this.#c=new dn,this.#l=new Q({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`)}})}),yn(new vn({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),this.subscribeLeave=this.subscribeLeave.bind(this),this.isLeaveApproved=this.isLeaveApproved.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),zt.shouldUpdateNode(e)}isActive(){return this.#l.isActive()}start(e){if(!this.#l.canStart())return Promise.reject(pn);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.sendCancelIfPossible(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.sendCancelIfPossible(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}=J(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 Q.validateSubscribeListener(e),this.#l.subscribe(e)}subscribeLeave(e){return Q.validateSubscribeLeaveListener(e),this.#l.subscribeLeave(e)}isLeaveApproved(){return this.#l.isLeaveApproved()}navigate(n,i,a){let o=t.r(this);o.validator?.navigation.validateNavigateArgs(n),o.validator?.navigation.validateParams(i,`navigate`);let s=a??bn;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??bn;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.subscribeLeave=$,this.canNavigateTo=$}};function $(){throw new e.t(e.c.ROUTER_DISPOSED)}function Sn(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 vt}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return Ze}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return St}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return _t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return gt}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return xn}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return f}});
6
- //# sourceMappingURL=Router-BtWR1xO-.js.map