@real-router/core 0.51.0 → 0.53.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 (87) hide show
  1. package/README.md +22 -10
  2. package/dist/cjs/Router-CJihdrWA.d.ts +67 -0
  3. package/dist/cjs/Router-CJihdrWA.d.ts.map +1 -0
  4. package/dist/cjs/Router-DlmLM8Yo.js +6 -0
  5. package/dist/cjs/Router-DlmLM8Yo.js.map +1 -0
  6. package/dist/cjs/RouterError-Bm9YnZ6e.d.ts +310 -0
  7. package/dist/cjs/RouterError-Bm9YnZ6e.d.ts.map +1 -0
  8. package/dist/cjs/api.d.ts +2 -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/cloneRouter-jNfrYcI_.js +2 -0
  13. package/dist/cjs/cloneRouter-jNfrYcI_.js.map +1 -0
  14. package/dist/cjs/index-8oPDJBQc.d.ts +306 -0
  15. package/dist/cjs/index-8oPDJBQc.d.ts.map +1 -0
  16. package/dist/cjs/{Router-DrBkBdZ5.d.ts → index-EwbhzRQw.d.ts} +4 -69
  17. package/dist/cjs/index-EwbhzRQw.d.ts.map +1 -0
  18. package/dist/cjs/index.d.ts +4 -197
  19. package/dist/cjs/index.d.ts.map +1 -1
  20. package/dist/cjs/index.js +1 -1
  21. package/dist/cjs/index.js.map +1 -1
  22. package/dist/cjs/{internals-na15rxo_.js → internals-CM6oaz9n.js} +1 -1
  23. package/dist/cjs/internals-CM6oaz9n.js.map +1 -0
  24. package/dist/cjs/utils.d.ts +2 -70
  25. package/dist/cjs/utils.js +1 -1
  26. package/dist/cjs/utils.js.map +1 -1
  27. package/dist/cjs/validation.d.ts +55 -44
  28. package/dist/cjs/validation.d.ts.map +1 -1
  29. package/dist/cjs/validation.js +1 -1
  30. package/dist/esm/Router-BmhiDQUJ.d.mts +67 -0
  31. package/dist/esm/Router-BmhiDQUJ.d.mts.map +1 -0
  32. package/dist/esm/Router-DRM2Fd06.mjs +6 -0
  33. package/dist/esm/Router-DRM2Fd06.mjs.map +1 -0
  34. package/dist/esm/RouterError-hhfSVGtY.d.mts +310 -0
  35. package/dist/esm/RouterError-hhfSVGtY.d.mts.map +1 -0
  36. package/dist/esm/api.d.mts +2 -1
  37. package/dist/esm/api.d.mts.map +1 -1
  38. package/dist/esm/api.mjs +1 -1
  39. package/dist/esm/api.mjs.map +1 -1
  40. package/dist/esm/cloneRouter-DdGGwYdL.mjs +2 -0
  41. package/dist/esm/cloneRouter-DdGGwYdL.mjs.map +1 -0
  42. package/dist/esm/{Router-BeXr2zW4.d.mts → index-DNjaY7KH.d.mts} +4 -69
  43. package/dist/esm/index-DNjaY7KH.d.mts.map +1 -0
  44. package/dist/esm/index-r_JTvSBH.d.mts +306 -0
  45. package/dist/esm/index-r_JTvSBH.d.mts.map +1 -0
  46. package/dist/esm/index.d.mts +4 -197
  47. package/dist/esm/index.d.mts.map +1 -1
  48. package/dist/esm/index.mjs +1 -1
  49. package/dist/esm/index.mjs.map +1 -1
  50. package/dist/esm/{internals-CCymabFj.mjs → internals-C59msvHY.mjs} +1 -1
  51. package/dist/esm/internals-C59msvHY.mjs.map +1 -0
  52. package/dist/esm/utils.d.mts +2 -70
  53. package/dist/esm/utils.mjs +1 -1
  54. package/dist/esm/utils.mjs.map +1 -1
  55. package/dist/esm/validation.d.mts +56 -43
  56. package/dist/esm/validation.d.mts.map +1 -1
  57. package/dist/esm/validation.mjs +1 -1
  58. package/package.json +1 -1
  59. package/src/Router.ts +13 -16
  60. package/src/internals.ts +13 -1
  61. package/src/utils/createRequestScope.ts +174 -0
  62. package/src/utils/hydrateRouter.ts +68 -12
  63. package/src/utils/index.ts +18 -0
  64. package/src/utils/serializeRouterState.ts +94 -5
  65. package/src/utils/serializeState.ts +46 -5
  66. package/dist/cjs/Router-CmI2Uw9u.js +0 -6
  67. package/dist/cjs/Router-CmI2Uw9u.js.map +0 -1
  68. package/dist/cjs/Router-DrBkBdZ5.d.ts.map +0 -1
  69. package/dist/cjs/RouterError-BmvAyBlx.js +0 -2
  70. package/dist/cjs/RouterError-BmvAyBlx.js.map +0 -1
  71. package/dist/cjs/RouterValidator-DLy_W2du.d.ts +0 -114
  72. package/dist/cjs/RouterValidator-DLy_W2du.d.ts.map +0 -1
  73. package/dist/cjs/getPluginApi-CUcFDzuA.js +0 -2
  74. package/dist/cjs/getPluginApi-CUcFDzuA.js.map +0 -1
  75. package/dist/cjs/internals-na15rxo_.js.map +0 -1
  76. package/dist/cjs/utils.d.ts.map +0 -1
  77. package/dist/esm/Router-BeXr2zW4.d.mts.map +0 -1
  78. package/dist/esm/Router-MsNZv4zY.mjs +0 -6
  79. package/dist/esm/Router-MsNZv4zY.mjs.map +0 -1
  80. package/dist/esm/RouterError-D-Zjbdv9.mjs +0 -2
  81. package/dist/esm/RouterError-D-Zjbdv9.mjs.map +0 -1
  82. package/dist/esm/RouterValidator-C-PvV00i.d.mts +0 -114
  83. package/dist/esm/RouterValidator-C-PvV00i.d.mts.map +0 -1
  84. package/dist/esm/getPluginApi-CsTfDB-O.mjs +0 -2
  85. package/dist/esm/getPluginApi-CsTfDB-O.mjs.map +0 -1
  86. package/dist/esm/internals-CCymabFj.mjs.map +0 -1
  87. package/dist/esm/utils.d.mts.map +0 -1
@@ -1,16 +1,51 @@
1
+ import { getInternals } from "../internals";
2
+
3
+ import type { SerializedRouterState } from "./serializeRouterState";
1
4
  import type { Router, State } from "@real-router/types";
2
5
 
3
6
  /**
4
- * Hydrate a fresh router from server-serialized State (#563).
7
+ * Custom deserializer signature for {@link hydrateRouter} (#606). Compatible
8
+ * with `JSON.parse` (default), `devalue.parse`, `superjson.parse`, or any
9
+ * user-supplied function.
10
+ */
11
+ export type Deserialize = (json: string) => unknown;
12
+
13
+ export interface HydrateRouterOptions {
14
+ /**
15
+ * Custom deserializer (e.g., `devalue.parse` / `superjson.parse`) for
16
+ * matching the `serialize` passed to {@link serializeRouterState}. Defaults
17
+ * to `JSON.parse`. Ignored when `source` is already an object.
18
+ *
19
+ * @default JSON.parse
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * import * as devalue from "devalue";
24
+ * await hydrateRouter(router, ssrJson, { deserialize: devalue.parse });
25
+ * ```
26
+ */
27
+ deserialize?: Deserialize;
28
+ }
29
+
30
+ /**
31
+ * Hydrate a fresh router from server-serialized State (#563, #596).
32
+ *
33
+ * Accepts either a JSON string (parsed via `JSON.parse` by default, or
34
+ * `options.deserialize` when provided) or a State-shaped object. Extracts
35
+ * `state.path` and delegates to `router.start(state.path)` — the canonical
36
+ * URL is the source of truth for the router on hydration.
5
37
  *
6
- * Accepts either a JSON string (parsed via `JSON.parse`) or a State-shaped
7
- * object. Extracts `state.path` and delegates to `router.start(state.path)`
8
- * the canonical URL is the source of truth for the router on hydration.
38
+ * The full parsed state (incl. `state.context.<namespace>` payloads) is
39
+ * deposited into a one-shot scratchpad on `RouterInternals.hydrationState`
40
+ * before `start()` is invoked and cleared in the matching `finally`. SSR
41
+ * loader plugins (`@real-router/ssr-data-plugin`,
42
+ * `@real-router/rsc-server-plugin`) read this scratchpad to skip their loader
43
+ * call when the server-resolved namespace value is already present — avoiding
44
+ * the post-hydration loader re-run on first paint.
9
45
  *
10
- * The serialized State (produced by `serializeRouterState`) is still useful
11
- * for application-level concerns: `state.context.<namespace>` payloads (e.g.
12
- * server-side data from `ssr-data-plugin`) can be read separately by app code
13
- * before or after `hydrateRouter` resolves.
46
+ * Single-shot semantics: the scratchpad is consumed during the first `start()`
47
+ * triggered by `hydrateRouter` regardless of route mismatch; subsequent
48
+ * `start()` calls run loaders normally.
14
49
  *
15
50
  * @example
16
51
  * ```typescript
@@ -19,15 +54,36 @@ import type { Router, State } from "@real-router/types";
19
54
  * router.usePlugin(browserPluginFactory());
20
55
  * await hydrateRouter(router, window.__SSR_STATE__);
21
56
  * ```
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * // With non-JSON types (Date / Map / Set / RegExp / BigInt) via devalue (#606)
61
+ * import * as devalue from "devalue";
62
+ *
63
+ * await hydrateRouter(router, window.__SSR_STATE__, {
64
+ * deserialize: devalue.parse,
65
+ * });
66
+ * ```
22
67
  */
23
- export function hydrateRouter(
68
+ export async function hydrateRouter(
24
69
  router: Router,
25
70
  source: string | { path: string },
71
+ options?: HydrateRouterOptions,
26
72
  ): Promise<State> {
73
+ const deserialize: Deserialize = options?.deserialize ?? JSON.parse;
27
74
  const parsed =
28
75
  typeof source === "string"
29
- ? (JSON.parse(source) as { path: string })
30
- : source;
76
+ ? (deserialize(source) as SerializedRouterState)
77
+ : (source as SerializedRouterState);
78
+
79
+ const ctx = getInternals(router);
80
+ const previous = ctx.hydrationState;
81
+
82
+ ctx.hydrationState = parsed;
31
83
 
32
- return router.start(parsed.path);
84
+ try {
85
+ return await router.start(parsed.path);
86
+ } finally {
87
+ ctx.hydrationState = previous;
88
+ }
33
89
  }
@@ -1,9 +1,27 @@
1
+ export { createRequestScope } from "./createRequestScope";
2
+
3
+ export type {
4
+ IncomingMessageLike,
5
+ RequestLike,
6
+ RequestScope,
7
+ RequestScopeSource,
8
+ } from "./createRequestScope";
9
+
1
10
  export { getStaticPaths } from "./getStaticPaths";
2
11
 
3
12
  export { hydrateRouter } from "./hydrateRouter";
4
13
 
14
+ export type { Deserialize, HydrateRouterOptions } from "./hydrateRouter";
15
+
5
16
  export { serializeRouterState } from "./serializeRouterState";
6
17
 
18
+ export type {
19
+ SerializedRouterState,
20
+ SerializeRouterStateOptions,
21
+ } from "./serializeRouterState";
22
+
7
23
  export { serializeState } from "./serializeState";
8
24
 
25
+ export type { Serialize, SerializeStateOptions } from "./serializeState";
26
+
9
27
  export type { StaticPathEntries } from "./getStaticPaths";
@@ -1,6 +1,50 @@
1
1
  import { serializeState } from "./serializeState";
2
2
 
3
- import type { State } from "@real-router/types";
3
+ import type { Serialize } from "./serializeState";
4
+ import type { Params, State } from "@real-router/types";
5
+
6
+ /**
7
+ * Parsed shape produced by {@link serializeRouterState} (after `JSON.parse`).
8
+ *
9
+ * Identical to {@link State} minus `transition` (per-navigation `TransitionMeta`
10
+ * is meaningless after hydration; the client builds its own on commit). Used as
11
+ * the input shape for {@link hydrateRouter} and as the type of the one-shot
12
+ * hydration scratchpad consumed by SSR loader plugins.
13
+ */
14
+ export type SerializedRouterState<P extends Params = Params> = Omit<
15
+ State<P>,
16
+ "transition"
17
+ >;
18
+
19
+ export interface SerializeRouterStateOptions {
20
+ /**
21
+ * Plugin context namespaces to strip from the serialized output.
22
+ * Use when a plugin populates `state.context.<ns>` with non-JSON-serializable
23
+ * values (e.g., RSC payload: ReactNode trees containing functions/symbols).
24
+ *
25
+ * @default []
26
+ */
27
+ excludeContext?: readonly string[];
28
+
29
+ /**
30
+ * Custom serializer (e.g., `devalue.stringify` / `superjson.stringify`) to
31
+ * support non-JSON types in `state.params` and `state.context.<ns>` payloads
32
+ * (Date / Map / Set / RegExp / BigInt). Defaults to `JSON.stringify`.
33
+ *
34
+ * Pair with the matching `deserialize` on `hydrateRouter` to round-trip the
35
+ * extended types on the client.
36
+ *
37
+ * @default JSON.stringify
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * import * as devalue from "devalue";
42
+ *
43
+ * const json = serializeRouterState(state, { serialize: devalue.stringify });
44
+ * ```
45
+ */
46
+ serialize?: Serialize;
47
+ }
4
48
 
5
49
  /**
6
50
  * XSS-safe JSON serialization of router State for SSR → client transport (#563).
@@ -11,6 +55,10 @@ import type { State } from "@real-router/types";
11
55
  * preserved as-is — server's `state.context.data` from `ssr-data-plugin` and
12
56
  * any other plugin claims travel to the client untouched).
13
57
  *
58
+ * Pass `options.excludeContext` to strip specific namespaces from the output —
59
+ * required for plugins that publish non-JSON-serializable values (e.g., RSC
60
+ * `ReactNode` trees from `@real-router/rsc-server-plugin`).
61
+ *
14
62
  * @example
15
63
  * ```typescript
16
64
  * // Server
@@ -20,12 +68,53 @@ import type { State } from "@real-router/types";
20
68
  * // Client
21
69
  * await hydrateRouter(router, window.__SSR_STATE__);
22
70
  * ```
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // With RSC plugin: strip the "rsc" namespace before transport
75
+ * const state = await router.start(url);
76
+ * const json = serializeRouterState(state, { excludeContext: ["rsc"] });
77
+ * ```
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * // Non-JSON types (Date / Map / Set / RegExp / BigInt) via devalue (#606)
82
+ * import * as devalue from "devalue";
83
+ *
84
+ * const json = serializeRouterState(state, { serialize: devalue.stringify });
85
+ * // On the client:
86
+ * await hydrateRouter(router, json, { deserialize: devalue.parse });
87
+ * ```
23
88
  */
24
- export function serializeRouterState(state: State): string {
25
- return serializeState({
89
+ export function serializeRouterState(
90
+ state: State,
91
+ options?: SerializeRouterStateOptions,
92
+ ): string {
93
+ const exclude = options?.excludeContext;
94
+
95
+ let context = state.context;
96
+
97
+ if (exclude?.length) {
98
+ const filtered: Record<string, unknown> = {};
99
+ const source = state.context as Record<string, unknown>;
100
+
101
+ for (const key of Object.keys(source)) {
102
+ if (!exclude.includes(key)) {
103
+ filtered[key] = source[key];
104
+ }
105
+ }
106
+
107
+ context = filtered;
108
+ }
109
+
110
+ const payload = {
26
111
  name: state.name,
27
112
  params: state.params,
28
113
  path: state.path,
29
- context: state.context,
30
- });
114
+ context,
115
+ };
116
+
117
+ return options?.serialize
118
+ ? serializeState(payload, { serialize: options.serialize })
119
+ : serializeState(payload);
31
120
  }
@@ -1,21 +1,62 @@
1
+ /**
2
+ * Custom serializer signature for {@link serializeState} (#606).
3
+ *
4
+ * Compatible with `JSON.stringify` (default) as well as `devalue.stringify`,
5
+ * `superjson.stringify`, or any user-supplied function that returns a JSON
6
+ * string. The output is run through XSS-safe character escapes regardless
7
+ * of which serializer produced it.
8
+ */
9
+ export type Serialize = (data: unknown) => string;
10
+
11
+ export interface SerializeStateOptions {
12
+ /**
13
+ * Custom serializer (e.g., `devalue.stringify` / `superjson.stringify`) to
14
+ * support non-JSON types (Date / Map / Set / RegExp / BigInt). Defaults to
15
+ * `JSON.stringify`. Output is still XSS-escaped.
16
+ *
17
+ * @default JSON.stringify
18
+ */
19
+ serialize?: Serialize;
20
+ }
21
+
1
22
  /**
2
23
  * XSS-safe JSON serialization for embedding data in HTML `<script>` tags.
3
24
  *
4
25
  * Escapes `<`, `>`, and `&` to their Unicode equivalents to prevent
5
26
  * injection via `</script>` or HTML entities inside inline scripts.
6
27
  *
28
+ * Pass `options.serialize` to use a custom serializer such as `devalue` or
29
+ * `superjson` for non-JSON types (Date/Map/Set/RegExp/BigInt). The serializer
30
+ * must return a string; XSS-escape is applied to its output.
31
+ *
7
32
  * @example
8
33
  * ```typescript
9
34
  * const json = serializeState({ name: "home", path: "/" });
10
35
  * const html = `<script>window.__STATE__=${json}</script>`;
11
36
  * ```
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * import * as devalue from "devalue";
41
+ *
42
+ * const json = serializeState(
43
+ * { date: new Date(), tags: new Set(["a", "b"]) },
44
+ * { serialize: devalue.stringify },
45
+ * );
46
+ * ```
12
47
  */
13
- export function serializeState(data: unknown): string {
14
- if (data === undefined) {
15
- return "null";
16
- }
48
+ export function serializeState(
49
+ data: unknown,
50
+ options?: SerializeStateOptions,
51
+ ): string {
52
+ const serialize = options?.serialize ?? JSON.stringify;
53
+ // JSON.stringify returns undefined for top-level `undefined`, Symbol,
54
+ // function, and other non-serializable values (lib.d.ts types it as
55
+ // `string` but the runtime can return undefined). A custom serializer
56
+ // that returns undefined for unsupported input is normalized the same way.
57
+ const serialized = (serialize(data) as string | undefined) ?? "null";
17
58
 
18
- return JSON.stringify(data)
59
+ return serialized
19
60
  .replaceAll("<", String.raw`\u003c`)
20
61
  .replaceAll(">", String.raw`\u003e`)
21
62
  .replaceAll("&", String.raw`\u0026`);
@@ -1,6 +0,0 @@
1
- const e=require(`./RouterError-BmvAyBlx.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.a}}function m(e){return`(${e.replaceAll(/(^<|>$)/g,``)})`}const ee=/([:*])([^/?<]+)(<[^>]+>)?(\?)?/g,te=/([:*][^/?<]+(?:<[^>]+>)?)\?(?=\/|$)/g,h=/\?(.+)$/;function g(e){let t=[],n=[],r=[],i={},a=new Map,o=e.replaceAll(te,`$1`),s=h.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=ee.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 ne=/[^\w!$'()*+,.:;|~-]/gu,re=/[^\w!$'()*+,.:;|~-]/u,_={default:e=>re.test(e)?e.replaceAll(ne,e=>encodeURIComponent(e)):e,uri:encodeURI,uriComponent:encodeURIComponent,none:e=>e},ie={default:decodeURIComponent,uri:decodeURI,uriComponent:decodeURIComponent,none:e=>e};function v(){return{staticChildren:Object.create(null),hasChildren:!1,paramChild:void 0,splatChild:void 0,route:void 0,slashChildRoute:void 0}}function y(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}function ae(e,t){return e===``?t:t===``?e:e+t}function oe(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function se(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(!oe(n)||!oe(r))return!1;t+=3}else t++;return!0}const b=/<[^>]*>/g;function ce(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(b,``),u=o?l:ae(n,l),d=i;a||(d=le(e,t,u,o?``:n,r,i));for(let n of t.children.values())ce(e,n,u,r,d);a||r.pop()}function le(e,t,n,r,i,a){let o=pe(n,r),s=Object.freeze([...i]),c=ue(s),l=y(n),u=ye(e.rootQueryParams,i),d=be(i),{buildStaticParts:f,buildParamSlots:p}=ve(o?y(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?de(e,m,r):fe(e,m,n,l,t),m}function ue(e){let t={};for(let n of e)t[n.fullName]=n.paramTypeMap;return Object.freeze(t)}function de(e,t,n){he(e,t,n);let r=y(n),i=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.has(i)&&e.staticCache.set(i,t)}function fe(e,t,n,r,i){if(me(e,t,n),i.paramMeta.urlParams.length===0){let n=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.set(n,t)}}function pe(e,t){return y(e)===y(t)}function me(e,t,n){let r=y(n);if(r===`/`){e.root.route=t;return}x(e,e.root,r,1,t)}function x(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(b,``).replace(/\?$/,``);t.paramChild??={node:v(),name:r},x(e,t.paramChild.node,n,s+1,i),s>=a?t.route??=i:x(e,t,n,s+1,i);return}t=S(e,t,c),r=s+1}t.route=i}function he(e,t,n){let r=ge(e,n);r.slashChildRoute=t}function ge(e,t){return _e(e,e.root,t)}function _e(e,t,n){let r=y(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=S(e,i,s),a=n+1}return i}function S(e,t,n){if(n.startsWith(`*`)){let e=n.slice(1);return t.splatChild??={node:v(),name:e},t.hasChildren=!0,t.splatChild.node}if(n.startsWith(`:`)){let e=n.slice(1).replaceAll(b,``).replace(/\?$/,``);return t.paramChild??={node:v(),name:e},t.hasChildren=!0,t.paramChild.node}let r=e.options.caseSensitive?n:n.toLowerCase();return r in t.staticChildren||(t.staticChildren[r]=v(),t.hasChildren=!0),t.staticChildren[r]}function ve(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=_[n],r=e.split(`/`),i=t(r[0]);for(let e=1;e<r.length;e++)i+=`/${t(r[e])}`;return i}:_[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 ye(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 be(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 xe=class{get options(){return this.#e}#e;#t=v();#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,buildQueryString:e.buildQueryString},this.#u=this.#e.caseSensitive,this.#d=this.#e.urlParamsEncoding===`none`?null:ie[this.#e.urlParamsEncoding]}registerTree(e){this.#c=e.paramMeta.queryParams,ce({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=y(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(!se(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)},Se=(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)},Ce={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}},we={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:()=>null,decodeValue:e=>e},Te={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:e=>e===`true`?!0:e===`false`?!1:null,decodeValue:e=>e},Ee={encode:(e,t)=>t?e:`${e}=false`,decodeUndefined:()=>!0,decodeRaw:()=>null,decodeValue:e=>e},De={none:we,auto:Te,"empty-true":Ee},Oe={default:{encode:e=>e},hidden:{encode:()=>``}},T={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}},ke=(e,t,n,r)=>({boolean:De[t],null:Oe[n],number:T[r],array:Ce[e]}),Ae={boolean:De.auto,null:Oe.default,number:T.auto,array:Ce.none},E={arrayFormat:`none`,booleanFormat:`auto`,nullFormat:`default`,numberFormat:`auto`},je={...E,strategies:Ae},Me=e=>{if(!e||e.arrayFormat===void 0&&e.booleanFormat===void 0&&e.nullFormat===void 0&&e.numberFormat===void 0)return je;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:ke(t,n,r,i)}},D=e=>encodeURIComponent(e),Ne=(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)}`}},Pe=e=>{let t=e.indexOf(`?`);return t===-1?e:e.slice(t+1)};function Fe(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 Ie(e,t,n,r,i){return i?Se(r?e.slice(t+1,n):void 0,i):r?C(e.slice(t+1,n)):null}function Le(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)Fe(r,u,Se(e,i),!0);return}}Fe(r,u,Ie(e,a,n,o,i),l)}const Re=(e,t)=>{let n=Pe(e);if(n===``||n===`?`)return{};if(!t)return ze(n);let r=Me(t),i={},a=0,o=n.length;for(;a<o;){let e=n.indexOf(`&`,a);e===-1&&(e=o),Le(n,a,e,i,r.strategies),a=e+1}return i};function ze(e){let t={};return Be(e,t),t}function Be(e,t){let n=0,r=e.length;for(;n<r;){let i=e.indexOf(`&`,n);i===-1&&(i=r),Le(e,n,i,t),n=i+1}}const Ve=(e,t)=>{let n=Object.keys(e);if(n.length===0)return``;let r=Me(t),i=[];for(let t of n){let n=e[t];if(n===void 0)continue;let a=Ne(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 He(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 Ue=Object.freeze(new Map),We=Object.freeze([]);function Ge(e){return e.parent?.name?`${e.parent.fullName}.${e.name}`:e.name}function Ke(e,t){return e.endsWith(`/`)&&t.startsWith(`/`)?e+t.slice(1):e+t}function qe(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:Ke(i.staticPath,e.path):e.path}function Je(e){let t=new Map;for(let n of e)t.set(n.name,n);return t}function Ye(e,t,n){let r=[],i=[];for(let a of e){let e=Xe(a,t,n);r.push(e),e.absolute||i.push(e)}return{childrenMap:Je(r),nonAbsoluteChildren:i}}function Xe(e,t,n){let r=g(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=Ge(a),a.staticPath=qe(a),e.children.length===0)a.children=Ue,a.nonAbsoluteChildren=We;else{let{childrenMap:t,nonAbsoluteChildren:r}=Ye(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 Ze(e,t=!0){return Xe(e,null,t)}function Qe(e,t){let n=[];return{add(e){return n.push(e),this},addMany(e){return n.push(...e),this},build(r){return Ze(He(e,t,n),!r?.skipFreeze)}}}function $e(e,t,n,r){return Qe(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 et(e){return Array.from(e.children.values(),k)}function tt(e){let t=e?.queryParams;return new xe({...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=>Re(e,t),buildQueryString:e=>Ve(e,t)})}const nt={defaultRoute:``,defaultParams:{},trailingSlash:`preserve`,queryParamsMode:`loose`,queryParams:E,urlParamsEncoding:`default`,allowNotFound:!0,rewritePathOnMatch:!0};function rt(e){Object.freeze(e);for(let t of Object.keys(e)){let n=e[t];n&&typeof n==`object`&&n.constructor===Object&&rt(n)}return e}function it(e,t){return typeof e==`function`?e(t):e}function at(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`[router.constructor] options must be a plain object`)}var ot=class{#e;constructor(e={}){this.#e=rt({...nt,...e})}static validateOptionsIsObject(e){at(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 st=new WeakMap;function ct(e){return st.get(e)}function lt(e,t){st.set(e,t)}var ut=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?Object.freeze({...o[t],...n}):!n||n===e.s?e.s:Object.freeze({...n});let l={name:t,params:c,path:r??this.#n.buildPath(t,n),context:{},...!a&&{transition:e.o}};return i&&lt(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 dt={[e.f.ROUTER_START]:e.d.ROUTER_START,[e.f.ROUTER_STOP]:e.d.ROUTER_STOP,[e.f.TRANSITION_SUCCESS]:e.d.TRANSITION_SUCCESS,[e.f.TRANSITION_START]:e.d.TRANSITION_START,[e.f.TRANSITION_LEAVE_APPROVE]:e.d.TRANSITION_LEAVE_APPROVE,[e.f.TRANSITION_ERROR]:e.d.TRANSITION_ERROR,[e.f.TRANSITION_CANCEL]:e.d.TRANSITION_CANCEL},ft=Object.keys(dt),j=`router.usePlugin`;function pt(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 mt=class t{#e=new Set;#t=new Set;#n;#r=e.a;#i=null;static validatePlugin(e){pt(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(j,`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(j,`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(j,`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 ft)e in n&&(typeof n[e]==`function`?(r.push(this.#n.addEventListener(dt[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 ht(e){let t=()=>e;return()=>t}var gt=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.a;#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`?ht(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 M(){return{decoders:Object.create(null),encoders:Object.create(null),defaultParams:Object.create(null),forwardMap:Object.create(null),forwardFnMap:Object.create(null)}}function _t(e,t){for(let n in e)if(e[n]!==t[n])return!1;return!0}function vt(e,t,n){for(let r in e)if(!(r in n)&&e[r]!==t[r])return!1;return!0}function yt(e,t){if(!t||!bt(e,t))return e;let n={};for(let r in e)t[r]!==`query`&&(n[r]=e[r]);return n}function bt(e,t){for(let n in e)if(t[n]===`query`)return!0;return!1}function N(e){let t={name:e.name,path:e.path};return e.children&&(t.children=e.children.map(e=>N(e))),t}function P(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}.`)&&P(i.children,t,a))return!0}return!1}function xt(e,t){for(let n of Object.keys(e))t(n)&&delete e[n]}function St(e,t){let n=t.search(/[?#]/),r=n===-1?t:t.slice(0,n);if(r===`/`||r.endsWith(`/`))return t;let i=e.search(/[?#]/),a=i===-1?e:e.slice(0,i);return a.length>1&&a.endsWith(`/`)?`${r}/${n===-1?``:t.slice(n)}`:t}function F(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 I(e,t,n){let r=$e(``,t,e),i=tt(n);return i.registerTree(r),{tree:r,matcher:i}}function L(e){let t=I(e.definitions,e.rootPath,e.matcherOptions);e.tree=t.tree,e.matcher=t.matcher}function Ct(e){L(e),e.resolvedForwardMap=R(e.config)}function wt(e){Tt(e),L(e)}function Tt(e){e.definitions.length=0,Object.assign(e.config,M()),e.resolvedForwardMap=Object.create(null),e.routeCustomFields=Object.create(null)}function R(e){let t=Object.create(null);for(let n of Object.keys(e.forwardMap))t[n]=F(n,e.forwardMap);return t}function Et(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 Dt(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&&Et(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 z(e,t,n,r,i,a,o=``){for(let s of e){let e=o?`${o}.${s.name}`:s.name;Dt(s,e,t,n,r,i,a),s.children&&z(s.children,t,n,r,i,a,e)}}function Ot(e,t){let n=[],r=M(),i=Object.create(null),a=new Map,o=new Map;for(let t of e)n.push(N(t));let{tree:s,matcher:c}=I(n,``,t);return z(e,r,i,a,o,void 0,``),{definitions:n,config:r,tree:s,matcher:c,resolvedForwardMap:R(r),routeCustomFields:i,rootPath:``,matcherOptions:t,depsStore:void 0,lifecycleNamespace:void 0,pendingCanActivate:a,pendingCanDeactivate:o,treeOperations:{commitTreeChanges:Ct,resetStore:wt,nodeToDefinition:k}}}const B=[];Object.freeze(B);function kt(e){let t=e.length,n=[];for(let r=t-1;r>=0;r--)n.push(e[r]);return n}function At(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 jt(e){let t=typeof e;return t===`string`||t===`number`||t===`boolean`}function Mt(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(jt(t)&&jt(i)&&String(t)!==String(i))return!1}return!0}function Nt(e,t,n,r,i,a){for(let o=0;o<a;o++){let a=r[o];if(a!==i[o]||!Mt(a,e,t,n))return o}return a}const Pt=new Map;function V(e){let t=Pt.get(e);if(t)return t;let n=Ft(e);return Object.freeze(n),Pt.set(e,n),n}function Ft(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]:At(e)}let H,U,W=null,It,Lt,G=null;function Rt(e,t){if(!t)return{intersection:``,toActivate:V(e.name),toDeactivate:B};let n=ct(e),r=ct(t);if(!n&&!r)return{intersection:``,toActivate:V(e.name),toDeactivate:kt(V(t.name))};let i=V(e.name),a=V(t.name),o=Math.min(a.length,i.length),s=Nt(n??r,e,t,i,a,o),c;if(s>=a.length)c=B;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 K(e,t){if(W!==null&&e===H&&t===U)return W;if(G!==null&&e===It&&t===Lt)return G;let n=Rt(e,t);return It=H,Lt=U,G=W,H=e,U=t,W=n,n}function zt(e){let t=[];for(let n of e)for(let e of n.paramMeta.urlParams)t.push(e);return t}function Bt(e){return e.at(-1)?.fullName??``}function Vt(e,t){return{name:t??Bt(e.segments),params:e.params,meta:e.meta}}var Ht=class{#e;#t;get#n(){return this.#e.depsStore}constructor(e=[],t){this.#e=Ot(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===``)return!0;let{intersection:r,toActivate:i,toDeactivate:a}=K(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,L(this.#e)}hasRoute(e){return this.#e.matcher.hasRoute(e)}clearRoutes(){wt(this.#e)}buildPath(t,n,r){if(t===e.l.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}=Vt(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 t=typeof this.#e.config.encoders[c]==`function`?this.#e.config.encoders[c]({...l}):l,r=n.trailingSlash;u=this.#e.matcher.buildPath(c,t,{trailingSlash:r===`never`||r===`always`?r:void 0,queryParamsMode:n.queryParamsMode}),r===`preserve`&&(u=St(e,u))}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 Vt({segments:n,params:t,meta:this.#e.matcher.getMetaByName(e)},e)}isActiveRoute(t,n={},r=!1,i=!0){let a=this.#n.getState();if(!a)return!1;let o=a.name;if(o!==t&&!o.startsWith(`${t}.`)&&!t.startsWith(`${o}.`))return!1;let s=this.#e.config.defaultParams[t];if(r||o===t){let r={name:t,params:s?{...s,...n}:n,path:``,transition:e.o,context:{}};return this.#n.areStatesEqual(r,a,i)}if(!o.startsWith(`${t}.`))return!1;let c=a.params;return _t(n,c)?s?vt(i?yt(s,this.#e.matcher.getMetaByName(t)?.[t]):s,c,n):!0:!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?zt(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 Ut=new e.t(e.u.ROUTER_NOT_STARTED),Wt=new e.t(e.u.ROUTE_NOT_FOUND),Gt=new e.t(e.u.SAME_STATES),q=Promise.reject(Ut),Kt=Promise.reject(Wt),qt=Promise.reject(Gt);q.catch(()=>{}),Kt.catch(()=>{}),qt.catch(()=>{});function Jt(e,t,n,r,i){Object.freeze(n),Object.freeze(r);let a={phase:`activating`,reason:`success`,segments:Object.freeze({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),Object.freeze(a)}function Yt({signal:e,...t}){return t}function Xt(t,n){let{toState:r,fromState:i,opts:a,toDeactivate:o,toActivate:s,intersection:c}=n;if(r.name!==e.l.UNKNOWN_ROUTE&&!t.hasRoute(r.name)){let n=new e.t(e.u.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=Jt(i,a,o,s,c);let l=Object.freeze(r);t.setState(l);let u=a.signal===void 0?a:Yt(a);return t.sendTransitionDone(l,i,u),l}function Zt(t,n,r,i){let a=n;a.code===e.u.TRANSITION_CANCELLED||a.code===e.u.ROUTE_NOT_FOUND||t.sendTransitionFail(r,i,a)}function J(t,n,r){if(t instanceof DOMException&&t.name===`AbortError`)throw new e.t(e.u.TRANSITION_CANCELLED);Qt(t,n,r)}function Qt(t,n,r){throw t instanceof e.t?(t.setCode(n),t):new e.t(n,en(t,r))}const $t=new Set([`code`,`segment`,`path`,`redirect`]);function en(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))$t.has(n)||(t[n]=r);return{...n,...t}}return n}async function tn(t,n,r){let i;try{i=await t}catch(e){J(e,n,r);return}if(!i)throw new e.t(n,{segment:r})}async function nn(t,n,r,i,a,o,s,c,l,u){await tn(l,r,u);for(let l=c;l<n.length;l++){if(!s())throw new e.t(e.u.TRANSITION_CANCELLED);let c=n[l],u=t.get(c);if(!u)continue;let d=!1;try{d=u(i,a,o)}catch(e){J(e,r,c)}if(d instanceof Promise){await tn(d,r,c);continue}if(!d)throw new e.t(r,{segment:c})}}async function rn(t,n,r,i,a,o,s,c,l){if(await t,!c())throw new e.t(e.u.TRANSITION_CANCELLED);let u=l();if(u!==void 0&&(await u,!c()))throw new e.t(e.u.TRANSITION_CANCELLED);if(i){let t=Y(n,r,e.u.CANNOT_ACTIVATE,a,o,s,c);if(t!==void 0&&await t,!c())throw new e.t(e.u.TRANSITION_CANCELLED)}}function an(t,n,r,i,a,o,s,c,l,u,d){if(a){let a=Y(t,r,e.u.CANNOT_DEACTIVATE,s,c,l,u);if(a!==void 0)return rn(a,n,i,o,s,c,l,u,d)}if(!u())throw new e.t(e.u.TRANSITION_CANCELLED);let f=d();if(f!==void 0)return on(f,o?n:void 0,i,s,c,l,u);if(o)return Y(n,i,e.u.CANNOT_ACTIVATE,s,c,l,u)}async function on(t,n,r,i,a,o,s){if(await t,!s())throw new e.t(e.u.TRANSITION_CANCELLED);if(n!==void 0){let t=Y(n,r,e.u.CANNOT_ACTIVATE,i,a,o,s);if(t!==void 0&&await t,!s())throw new e.t(e.u.TRANSITION_CANCELLED)}}function Y(t,n,r,i,a,o,s){for(let[c,l]of n.entries()){if(!s())throw new e.t(e.u.TRANSITION_CANCELLED);let u=t.get(l);if(!u)continue;let d=!1;try{d=u(i,a,o)}catch(e){J(e,r,l)}if(d instanceof Promise)return nn(t,n,r,i,a,o,s,c+1,d,l);if(!d)throw new e.t(r,{segment:l})}}const sn=[e.l.UNKNOWN_ROUTE];Object.freeze(sn);const cn={replace:!0};Object.freeze(cn);function ln(t,n){return n?.name===e.l.UNKNOWN_ROUTE&&!t.replace?{...t,replace:!0}:t}function un(e,t,n){return!!e&&!t.reload&&!t.force&&e.path===n.path}var dn=class{lastSyncResolved=!1;lastSyncRejected=!1;#e;#t=null;#n=0;setDependencies(e){this.#e=e}navigate(e,t,n){this.lastSyncResolved=!1;let r=this.#e;if(!r.canNavigate())return this.lastSyncRejected=!0,q;let i;try{i=r.buildNavigateState(e,t)}catch(e){return Promise.reject(e)}return i?this.#r(i,n):(r.emitTransitionError(void 0,r.getState(),Wt),this.lastSyncRejected=!0,Kt)}navigateToState(t,n){this.lastSyncResolved=!1;let r=this.#e;if(!r.canNavigate())return this.lastSyncRejected=!0,q;if(t.name!==e.l.UNKNOWN_ROUTE&&!r.hasRoute(t.name)){let n=new e.t(e.u.ROUTE_NOT_FOUND,{routeName:t.name});return r.emitTransitionError(void 0,r.getState(),n),this.lastSyncRejected=!0,Promise.reject(n)}let i={name:t.name,params:t.params,path:t.path,context:{...t.context}};return this.#r(i,n)}navigateToDefault(t){let n=this.#e;if(!n.getOptions().defaultRoute)return Promise.reject(new e.t(e.u.ROUTE_NOT_FOUND,{routeName:`defaultRoute not configured`}));let r,i;try{({route:r,params:i}=n.resolveDefault())}catch(e){return Promise.reject(e)}return r?this.navigate(r,i,t):Promise.reject(new e.t(e.u.ROUTE_NOT_FOUND,{routeName:`defaultRoute resolved to empty`}))}navigateToNotFound(t){this.#c();let n=this.#e.getState(),r=n?V(n.name).toReversed():[];Object.freeze(r);let i={deactivated:r,activated:sn,intersection:``};Object.freeze(i);let a={phase:`activating`,...n&&{from:n.name},reason:`success`,segments:i};Object.freeze(a);let o={name:e.l.UNKNOWN_ROUTE,params:e.s,path:t,transition:a,context:{}};return Object.freeze(o),this.#e.setState(o),this.#e.emitTransitionSuccess(o,n,cn),o}abortCurrentNavigation(){this.#t?.abort(new e.t(e.u.TRANSITION_CANCELLED)),this.#t=null}#r(t,n){let r=this.#e,i,a=!1,o=null;try{if(i=r.getState(),n=ln(n,i),un(i,n,t))return r.emitTransitionError(t,i,Gt),this.lastSyncRejected=!0,qt;this.#c(n.signal);let s=++this.#n;if(r.startTransition(t,i),a=!0,this.#n!==s)throw new e.t(e.u.TRANSITION_CANCELLED);let[c,l]=r.getLifecycleFunctions(),u=t.name===e.l.UNKNOWN_ROUTE,d=K(t,i),{toDeactivate:f,toActivate:p,intersection:m}=d,ee=i&&!n.forceDeactivate&&f.length>0,te=!u&&p.length>0,h=c.size>0||l.size>0,g=t;if(!h){let e=this.#o(g,i,s,n,d,c);if(e!==void 0)return e}if(h){o=new AbortController,this.#t=o;let a=()=>this.#n===s&&r.isActive(),u=o.signal,d=an(c,l,f,p,!!ee,te,t,i,u,a,()=>{if(r.sendLeaveApprove(g,i),r.hasLeaveListeners())return r.awaitLeaveListeners(g,i,u)});if(d!==void 0)return this.#i(d,{toState:t,fromState:i,opts:n,toDeactivate:f,toActivate:p,intersection:m,canDeactivateFunctions:c},o,s);if(!a())throw new e.t(e.u.TRANSITION_CANCELLED);this.#s(o)}return this.lastSyncResolved=!0,Promise.resolve(Xt(r,{toState:t,fromState:i,opts:n,toDeactivate:f,toActivate:p,intersection:m,canDeactivateFunctions:c}))}catch(e){return this.#a(e,o,a,t,i),Promise.reject(e)}}async#i(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.u.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.u.TRANSITION_CANCELLED);return Xt(a,n)}catch(e){throw Zt(a,e,n.toState,n.fromState),e}finally{this.#s(r)}}#a(e,t,n,r,i){t&&this.#s(t),n&&r&&Zt(this.#e,e,r,i)}#o(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.#i(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.u.TRANSITION_CANCELLED)}#s(e){e.abort(),this.#t===e&&(this.#t=null)}#c(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.u.TRANSITION_CANCELLED)),this.#e.cancelNavigation()),t?.aborted)throw new e.t(e.u.TRANSITION_CANCELLED,{reason:t.reason})}};const fn={replace:!0};Object.freeze(fn);var pn=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.u.ROUTE_NOT_FOUND,{path:t});throw n.emitTransitionError(void 0,void 0,r),r}return n.completeStart(),i?n.navigateToState(i,fn):n.navigateToNotFound(t)}stop(){this.#e.clearState()}};function X(e){return e instanceof Error?e:Error(String(e))}function mn(e,t){return Promise.allSettled(e).then(e=>{if(t!==void 0)throw X(t);let n=e.find(e=>e.status===`rejected`);if(n!==void 0)throw X(n.reason)})}var Z=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.d.ROUTER_START)}emitRouterStop(){this.#t.emit(e.d.ROUTER_STOP)}emitTransitionStart(t,n){this.#t.emit(e.d.TRANSITION_START,t,n)}emitTransitionSuccess(t,n,r){this.#t.emit(e.d.TRANSITION_SUCCESS,t,n,r)}emitTransitionError(t,n,r){this.#t.emit(e.d.TRANSITION_ERROR,t,n,r)}emitTransitionCancel(t,n){this.#t.emit(e.d.TRANSITION_CANCEL,t,n)}emitTransitionLeaveApprove(t,n){this.#t.emit(e.d.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.d.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 X(a);return}return mn(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 hn=new e.t(e.u.ROUTER_ALREADY_STARTED),gn=new Set([`all`,`warn-error`,`error-only`]);function _n(e){return typeof e==`string`&&gn.has(e)}function vn(e){return typeof e==`string`?`"${e}"`:typeof e==`object`?JSON.stringify(e):String(e)}function yn(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&&!_n(t.level))throw TypeError(`Invalid logger level: ${vn(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 bn=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:(n,r)=>{let i=t.r(this.router);i.validator?.routes.validateStateBuilderArgs(n,r,`navigate`);let a=i.forwardState(n,r),o=a.name,s=e.i(a.params),c=this.routes.getMetaForState(o);if(c===void 0)return;let l=i.buildPath(o,s);return this.state.makeState(o,s,l,c,!0)},resolveDefault:()=>{let e=this.options.get(),n=t.r(this.router),r=it(e.defaultRoute,e=>this.dependenciesStore.dependencies[e]),i=it(e.defaultParams,e=>this.dependenciesStore.dependencies[e]);return typeof e.defaultRoute==`function`&&n.validator?.options.validateResolvedDefaultRoute(r,n.routeGetStore()),{route:r,params:i}},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(),navigateToState:(e,t)=>this.navigation.navigateToState(e,t),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 xn(e){e.wireLimits(),e.wireRouteLifecycleDeps(),e.wireRoutesDeps(),e.wirePluginsDeps(),e.wireNavigationDeps(),e.wireLifecycleDeps(),e.wireStateDeps()}const Q=Object.freeze({});var Sn=class r{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;constructor(i=[],a={},s={}){a.logger&&yn(a.logger)&&(n.logger.configure(a.logger),delete a.logger),ot.validateOptionsIsObject(a),d(s),i.length>0&&f(i),this.#e=new ot(a),this.#t=e.n(a.limits),this.#n=p(s),this.#r=new ut,this.#i=new Ht(i,Cn(this.#e.get())),this.#a=new gt,this.#o=new mt,this.#s=new dn,this.#c=new pn,this.#l=new Z({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`)}})}),xn(new bn({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 c=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),c),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.s,this.#e.get()),c),emitTransitionError:e=>{this.#l.sendFailSafe(void 0,this.#r.get(),e)},start:t.t(`start`,e=>this.#c.start(e),c),navigateToState:(e,t)=>{let n=this.#s.navigateToState(e,t??Q);return this.#s.lastSyncResolved?this.#s.lastSyncResolved=!1:this.#s.lastSyncRejected?this.#s.lastSyncRejected=!1:r.#d(n),n},interceptors:c,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:[],contextClaimRecords:new Set}),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(n,r){let i=t.r(this);return i.validator?.routes.validateBuildPathArgs(n),i.validator?.navigation.validateParams(r,`buildPath`),i.buildPath(n,e.i(r))}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),Ht.shouldUpdateNode(e)}isActive(){return this.#l.isActive()}start(e){if(!this.#l.canStart())return Promise.reject(hn);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,e.contextClaimRecords.clear(),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}=K(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 Z.validateSubscribeListener(e),this.#l.subscribe(e)}subscribeLeave(e){return Z.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??Q;o.validator?.navigation.validateNavigationOptions(s,`navigate`);let c=this.#s.navigate(n,i??e.s,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??Q;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.u.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.u.SAME_STATES||t.code===e.u.TRANSITION_CANCELLED||t.code===e.u.ROUTER_NOT_STARTED||t.code===e.u.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.u.ROUTER_DISPOSED)}function Cn(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 F}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Tt}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return xt}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Sn}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return f}});
6
- //# sourceMappingURL=Router-CmI2Uw9u.js.map