@real-router/core 0.50.2 → 0.51.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 (56) hide show
  1. package/dist/cjs/Router-CmI2Uw9u.js +6 -0
  2. package/dist/cjs/Router-CmI2Uw9u.js.map +1 -0
  3. package/dist/cjs/Router-DrBkBdZ5.d.ts.map +1 -1
  4. package/dist/{esm/RouterValidator-BLtjhvRo.d.mts → cjs/RouterValidator-DLy_W2du.d.ts} +2 -1
  5. package/dist/cjs/{RouterValidator-BL1Uq6Rq.d.ts.map → RouterValidator-DLy_W2du.d.ts.map} +1 -1
  6. package/dist/cjs/api.d.ts.map +1 -1
  7. package/dist/cjs/api.js +1 -1
  8. package/dist/cjs/getPluginApi-CUcFDzuA.js +2 -0
  9. package/dist/cjs/getPluginApi-CUcFDzuA.js.map +1 -0
  10. package/dist/cjs/index.d.ts +1 -1
  11. package/dist/cjs/index.js +1 -1
  12. package/dist/cjs/internals-na15rxo_.js.map +1 -1
  13. package/dist/cjs/utils.d.ts +49 -2
  14. package/dist/cjs/utils.d.ts.map +1 -1
  15. package/dist/cjs/utils.js +1 -1
  16. package/dist/cjs/utils.js.map +1 -1
  17. package/dist/cjs/validation.d.ts +9 -2
  18. package/dist/cjs/validation.d.ts.map +1 -1
  19. package/dist/esm/Router-BeXr2zW4.d.mts.map +1 -1
  20. package/dist/esm/Router-MsNZv4zY.mjs +6 -0
  21. package/dist/esm/Router-MsNZv4zY.mjs.map +1 -0
  22. package/dist/{cjs/RouterValidator-BL1Uq6Rq.d.ts → esm/RouterValidator-C-PvV00i.d.mts} +2 -1
  23. package/dist/esm/{RouterValidator-BLtjhvRo.d.mts.map → RouterValidator-C-PvV00i.d.mts.map} +1 -1
  24. package/dist/esm/api.d.mts.map +1 -1
  25. package/dist/esm/api.mjs +1 -1
  26. package/dist/esm/getPluginApi-CsTfDB-O.mjs +2 -0
  27. package/dist/esm/getPluginApi-CsTfDB-O.mjs.map +1 -0
  28. package/dist/esm/index.d.mts +1 -1
  29. package/dist/esm/index.mjs +1 -1
  30. package/dist/esm/internals-CCymabFj.mjs.map +1 -1
  31. package/dist/esm/utils.d.mts +49 -2
  32. package/dist/esm/utils.d.mts.map +1 -1
  33. package/dist/esm/utils.mjs +1 -1
  34. package/dist/esm/utils.mjs.map +1 -1
  35. package/dist/esm/validation.d.mts +9 -2
  36. package/dist/esm/validation.d.mts.map +1 -1
  37. package/package.json +2 -2
  38. package/src/Router.ts +20 -0
  39. package/src/api/getPluginApi.ts +33 -2
  40. package/src/internals.ts +12 -0
  41. package/src/namespaces/NavigationNamespace/NavigationNamespace.ts +164 -94
  42. package/src/namespaces/RouterLifecycleNamespace/RouterLifecycleNamespace.ts +5 -5
  43. package/src/namespaces/RouterLifecycleNamespace/types.ts +9 -5
  44. package/src/types/RouterValidator.ts +1 -0
  45. package/src/utils/hydrateRouter.ts +33 -0
  46. package/src/utils/index.ts +4 -0
  47. package/src/utils/serializeRouterState.ts +31 -0
  48. package/src/wiring/RouterWiringBuilder.ts +2 -2
  49. package/dist/cjs/Router--UAz5UnF.js +0 -6
  50. package/dist/cjs/Router--UAz5UnF.js.map +0 -1
  51. package/dist/cjs/getPluginApi-BBcZZXA5.js +0 -2
  52. package/dist/cjs/getPluginApi-BBcZZXA5.js.map +0 -1
  53. package/dist/esm/Router-C4grLNrL.mjs +0 -6
  54. package/dist/esm/Router-C4grLNrL.mjs.map +0 -1
  55. package/dist/esm/getPluginApi-DasnID2W.mjs +0 -2
  56. package/dist/esm/getPluginApi-DasnID2W.mjs.map +0 -1
@@ -98,24 +98,176 @@ export class NavigationNamespace {
98
98
  }
99
99
 
100
100
  let toState: State | undefined;
101
- let fromState: State | undefined;
102
- let transitionStarted = false;
103
- let controller: AbortController | null = null;
104
101
 
105
102
  try {
106
103
  toState = deps.buildNavigateState(name, params);
104
+ } catch (error) {
105
+ /* v8 ignore next 3 -- @preserve: reachable only via validator-driven
106
+ throws from buildNavigateState (validateStateBuilderArgs) — covered
107
+ in @real-router/validation-plugin's suite, not in core. */
108
+ return Promise.reject(error as Error);
109
+ }
107
110
 
108
- if (!toState) {
109
- deps.emitTransitionError(
110
- undefined,
111
- deps.getState(),
112
- CACHED_ROUTE_NOT_FOUND_ERROR,
113
- );
114
- this.lastSyncRejected = true;
111
+ if (!toState) {
112
+ deps.emitTransitionError(
113
+ undefined,
114
+ deps.getState(),
115
+ CACHED_ROUTE_NOT_FOUND_ERROR,
116
+ );
117
+ this.lastSyncRejected = true;
115
118
 
116
- return CACHED_ROUTE_NOT_FOUND_REJECTION;
117
- }
119
+ return CACHED_ROUTE_NOT_FOUND_REJECTION;
120
+ }
121
+
122
+ return this.#executeNavigation(toState, opts);
123
+ }
124
+
125
+ /**
126
+ * Navigate to a fully-built `State` directly, skipping `buildNavigateState`
127
+ * (forwardState + buildPath + meta lookup). Used by URL plugins after they
128
+ * have already produced a `State` from a browser-initiated event via
129
+ * `api.matchPath(url)` — see issue #525.
130
+ *
131
+ * Semantics vs. `navigate(name, params, opts)`:
132
+ * - `forwardState` is NOT re-applied. matchPath already runs it; reapplying
133
+ * is redundant in the idempotent case and can race in the dynamic case.
134
+ * - `buildPath` is NOT re-run. The caller's `state.path` is used as-is —
135
+ * so `trailingSlash:"preserve"` matchedState paths flow through unchanged
136
+ * (closes #525 Q2). `buildPath` interceptors do NOT run; the URL the
137
+ * user navigated to is the source of truth for this code path.
138
+ * - All other pipeline steps run unchanged: SAME_STATES check, FSM
139
+ * transition, guards, `subscribeLeave`, `completeTransition`,
140
+ * plugin lifecycle hooks.
141
+ */
142
+ navigateToState(state: State, opts: NavigationOptions): Promise<State> {
143
+ this.lastSyncResolved = false;
144
+ const deps = this.#deps;
145
+
146
+ if (!deps.canNavigate()) {
147
+ this.lastSyncRejected = true;
118
148
 
149
+ return CACHED_NOT_STARTED_REJECTION;
150
+ }
151
+
152
+ // Reject states whose route no longer exists (e.g. the route tree was
153
+ // mutated between matchPath and navigateToState). UNKNOWN_ROUTE is
154
+ // structurally legal — it is the navigateToNotFound output shape.
155
+ if (state.name !== constants.UNKNOWN_ROUTE && !deps.hasRoute(state.name)) {
156
+ const err = new RouterError(errorCodes.ROUTE_NOT_FOUND, {
157
+ routeName: state.name,
158
+ });
159
+
160
+ deps.emitTransitionError(undefined, deps.getState(), err);
161
+ this.lastSyncRejected = true;
162
+
163
+ return Promise.reject(err);
164
+ }
165
+
166
+ // States from `matchPath` are deeply frozen (`freezeStateInPlace`).
167
+ // `completeTransition` mutates `toState.transition` and `context` is
168
+ // intentionally extensible for plugin claim writes, so we hand the
169
+ // pipeline a writable shell — same shape `makeState(skipFreeze=true)`
170
+ // produces. `params` stays referentially shared (already frozen).
171
+ // `transition` is omitted so completeTransition can assign it.
172
+ const writableState = {
173
+ name: state.name,
174
+ params: state.params,
175
+ path: state.path,
176
+ context: { ...state.context },
177
+ } as State;
178
+
179
+ return this.#executeNavigation(writableState, opts);
180
+ }
181
+
182
+ navigateToDefault(opts: NavigationOptions): Promise<State> {
183
+ const deps = this.#deps;
184
+ const options = deps.getOptions();
185
+
186
+ if (!options.defaultRoute) {
187
+ return Promise.reject(
188
+ new RouterError(errorCodes.ROUTE_NOT_FOUND, {
189
+ routeName: "defaultRoute not configured",
190
+ }),
191
+ );
192
+ }
193
+
194
+ let route: string;
195
+ let params: Params;
196
+
197
+ try {
198
+ ({ route, params } = deps.resolveDefault());
199
+ } catch (error) {
200
+ return Promise.reject(error as Error);
201
+ }
202
+
203
+ if (!route) {
204
+ return Promise.reject(
205
+ new RouterError(errorCodes.ROUTE_NOT_FOUND, {
206
+ routeName: "defaultRoute resolved to empty",
207
+ }),
208
+ );
209
+ }
210
+
211
+ return this.navigate(route, params, opts);
212
+ }
213
+
214
+ navigateToNotFound(path: string): State {
215
+ this.#abortPreviousNavigation();
216
+
217
+ const fromState = this.#deps.getState();
218
+ const deactivated: string[] = fromState
219
+ ? nameToIDs(fromState.name).toReversed()
220
+ : [];
221
+
222
+ Object.freeze(deactivated);
223
+
224
+ const segments: TransitionMeta["segments"] = {
225
+ deactivated,
226
+ activated: FROZEN_ACTIVATED,
227
+ intersection: "",
228
+ };
229
+
230
+ Object.freeze(segments);
231
+
232
+ const transitionMeta: TransitionMeta = {
233
+ phase: "activating",
234
+ ...(fromState && { from: fromState.name }),
235
+ reason: "success",
236
+ segments,
237
+ };
238
+
239
+ Object.freeze(transitionMeta);
240
+
241
+ const state: State = {
242
+ name: constants.UNKNOWN_ROUTE,
243
+ params: EMPTY_PARAMS as Params,
244
+ path,
245
+ transition: transitionMeta,
246
+ context: {},
247
+ };
248
+
249
+ Object.freeze(state);
250
+
251
+ this.#deps.setState(state);
252
+ this.#deps.emitTransitionSuccess(state, fromState, FROZEN_REPLACE_OPTS);
253
+
254
+ return state;
255
+ }
256
+
257
+ abortCurrentNavigation(): void {
258
+ this.#currentController?.abort(
259
+ new RouterError(errorCodes.TRANSITION_CANCELLED),
260
+ );
261
+ this.#currentController = null;
262
+ }
263
+
264
+ #executeNavigation(toState: State, opts: NavigationOptions): Promise<State> {
265
+ const deps = this.#deps;
266
+ let fromState: State | undefined;
267
+ let transitionStarted = false;
268
+ let controller: AbortController | null = null;
269
+
270
+ try {
119
271
  fromState = deps.getState();
120
272
  opts = forceReplaceFromUnknown(opts, fromState);
121
273
 
@@ -256,88 +408,6 @@ export class NavigationNamespace {
256
408
  }
257
409
  }
258
410
 
259
- navigateToDefault(opts: NavigationOptions): Promise<State> {
260
- const deps = this.#deps;
261
- const options = deps.getOptions();
262
-
263
- if (!options.defaultRoute) {
264
- return Promise.reject(
265
- new RouterError(errorCodes.ROUTE_NOT_FOUND, {
266
- routeName: "defaultRoute not configured",
267
- }),
268
- );
269
- }
270
-
271
- let route: string;
272
- let params: Params;
273
-
274
- try {
275
- ({ route, params } = deps.resolveDefault());
276
- } catch (error) {
277
- return Promise.reject(error as Error);
278
- }
279
-
280
- if (!route) {
281
- return Promise.reject(
282
- new RouterError(errorCodes.ROUTE_NOT_FOUND, {
283
- routeName: "defaultRoute resolved to empty",
284
- }),
285
- );
286
- }
287
-
288
- return this.navigate(route, params, opts);
289
- }
290
-
291
- navigateToNotFound(path: string): State {
292
- this.#abortPreviousNavigation();
293
-
294
- const fromState = this.#deps.getState();
295
- const deactivated: string[] = fromState
296
- ? nameToIDs(fromState.name).toReversed()
297
- : [];
298
-
299
- Object.freeze(deactivated);
300
-
301
- const segments: TransitionMeta["segments"] = {
302
- deactivated,
303
- activated: FROZEN_ACTIVATED,
304
- intersection: "",
305
- };
306
-
307
- Object.freeze(segments);
308
-
309
- const transitionMeta: TransitionMeta = {
310
- phase: "activating",
311
- ...(fromState && { from: fromState.name }),
312
- reason: "success",
313
- segments,
314
- };
315
-
316
- Object.freeze(transitionMeta);
317
-
318
- const state: State = {
319
- name: constants.UNKNOWN_ROUTE,
320
- params: EMPTY_PARAMS as Params,
321
- path,
322
- transition: transitionMeta,
323
- context: {},
324
- };
325
-
326
- Object.freeze(state);
327
-
328
- this.#deps.setState(state);
329
- this.#deps.emitTransitionSuccess(state, fromState, FROZEN_REPLACE_OPTS);
330
-
331
- return state;
332
- }
333
-
334
- abortCurrentNavigation(): void {
335
- this.#currentController?.abort(
336
- new RouterError(errorCodes.TRANSITION_CANCELLED),
337
- );
338
- this.#currentController = null;
339
- }
340
-
341
411
  async #finishAsyncNavigation(
342
412
  guardCompletion: Promise<void>,
343
413
  nav: NavigationContext,
@@ -60,11 +60,11 @@ export class RouterLifecycleNamespace {
60
60
  deps.completeStart();
61
61
 
62
62
  if (matchedState) {
63
- return deps.navigate(
64
- matchedState.name,
65
- matchedState.params,
66
- REPLACE_OPTS,
67
- );
63
+ // navigateToState commits matchedState verbatim — same primitive URL
64
+ // plugins use on popstate / navigate-event (#525). Keeps trailing-slash
65
+ // and any other source-URL flavor that matchPath produced; skips the
66
+ // redundant forwardState+buildPath round-trip in buildNavigateState.
67
+ return deps.navigateToState(matchedState, REPLACE_OPTS);
68
68
  }
69
69
 
70
70
  return deps.navigateToNotFound(startPath);
@@ -9,11 +9,15 @@ import type {
9
9
 
10
10
  export interface RouterLifecycleDependencies {
11
11
  getOptions: () => Options;
12
- navigate: (
13
- name: string,
14
- params: Params,
15
- opts: NavigationOptions,
16
- ) => Promise<State>;
12
+ /**
13
+ * Commit a fully-resolved State without re-running `forwardState`/`buildPath`.
14
+ * `start(path)` uses this to commit `matchPath(path)` directly — the same
15
+ * primitive URL plugins use on popstate / navigate-event (#525). Keeps
16
+ * `state.path` identical to the source URL (preserves trailing slash in
17
+ * `trailingSlash:"preserve"` mode) and avoids the redundant
18
+ * forwardState+buildPath round-trip in `buildNavigateState`.
19
+ */
20
+ navigateToState: (state: State, opts: NavigationOptions) => Promise<State>;
17
21
  navigateToNotFound: (path: string) => State;
18
22
  clearState: () => void;
19
23
  matchPath: <P extends Params = Params>(path: string) => State<P> | undefined;
@@ -124,6 +124,7 @@ export interface RouterValidator {
124
124
  navigation: {
125
125
  validateNavigateArgs: (name: unknown) => void;
126
126
  validateNavigateToDefaultArgs: (options: unknown) => void;
127
+ validateNavigateToStateArgs: (state: unknown) => void;
127
128
  validateNavigationOptions: (options: unknown, caller: string) => void;
128
129
  validateParams: (params: unknown, methodName: string) => void;
129
130
  validateStartArgs: (path: unknown) => void;
@@ -0,0 +1,33 @@
1
+ import type { Router, State } from "@real-router/types";
2
+
3
+ /**
4
+ * Hydrate a fresh router from server-serialized State (#563).
5
+ *
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.
9
+ *
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.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // Client
18
+ * const router = createAppRouter();
19
+ * router.usePlugin(browserPluginFactory());
20
+ * await hydrateRouter(router, window.__SSR_STATE__);
21
+ * ```
22
+ */
23
+ export function hydrateRouter(
24
+ router: Router,
25
+ source: string | { path: string },
26
+ ): Promise<State> {
27
+ const parsed =
28
+ typeof source === "string"
29
+ ? (JSON.parse(source) as { path: string })
30
+ : source;
31
+
32
+ return router.start(parsed.path);
33
+ }
@@ -1,5 +1,9 @@
1
1
  export { getStaticPaths } from "./getStaticPaths";
2
2
 
3
+ export { hydrateRouter } from "./hydrateRouter";
4
+
5
+ export { serializeRouterState } from "./serializeRouterState";
6
+
3
7
  export { serializeState } from "./serializeState";
4
8
 
5
9
  export type { StaticPathEntries } from "./getStaticPaths";
@@ -0,0 +1,31 @@
1
+ import { serializeState } from "./serializeState";
2
+
3
+ import type { State } from "@real-router/types";
4
+
5
+ /**
6
+ * XSS-safe JSON serialization of router State for SSR → client transport (#563).
7
+ *
8
+ * Strips `state.transition` (per-navigation `TransitionMeta` — meaningless after
9
+ * hydration; the client's hydration commit produces its own `transition`).
10
+ * Keeps `name`, `params`, `path`, and `context` (plugin context namespaces are
11
+ * preserved as-is — server's `state.context.data` from `ssr-data-plugin` and
12
+ * any other plugin claims travel to the client untouched).
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // Server
17
+ * const state = await router.start(req.url);
18
+ * const html = `<script>window.__SSR_STATE__=${serializeRouterState(state)}</script>`;
19
+ *
20
+ * // Client
21
+ * await hydrateRouter(router, window.__SSR_STATE__);
22
+ * ```
23
+ */
24
+ export function serializeRouterState(state: State): string {
25
+ return serializeState({
26
+ name: state.name,
27
+ params: state.params,
28
+ path: state.path,
29
+ context: state.context,
30
+ });
31
+ }
@@ -225,8 +225,8 @@ export class RouterWiringBuilder<
225
225
  wireLifecycleDeps(): void {
226
226
  const lifecycleDeps: RouterLifecycleDependencies = {
227
227
  getOptions: () => this.options.get(),
228
- navigate: (name, params, opts) =>
229
- this.navigation.navigate(name, params, opts),
228
+ navigateToState: (state, opts) =>
229
+ this.navigation.navigateToState(state, opts),
230
230
  navigateToNotFound: (path) => this.navigation.navigateToNotFound(path),
231
231
  clearState: () => {
232
232
  this.state.set(undefined);
@@ -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 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 x(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function ae(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(!x(n)||!x(r))return!1;t+=3}else t++;return!0}const S=/<[^>]*>/g;function oe(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(S,``),u=o?l:ie(n,l),d=i;a||(d=se(e,t,u,o?``:n,r,i));for(let n of t.children.values())oe(e,n,u,r,d);a||r.pop()}function se(e,t,n,r,i,a){let o=de(n,r),s=Object.freeze([...i]),c=ce(s),l=b(n),u=ve(e.rootQueryParams,i),d=ye(i),{buildStaticParts:f,buildParamSlots:p}=_e(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?le(e,m,r):ue(e,m,n,l,t),m}function ce(e){let t={};for(let n of e)t[n.fullName]=n.paramTypeMap;return Object.freeze(t)}function le(e,t,n){pe(e,t,n);let r=b(n),i=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.has(i)&&e.staticCache.set(i,t)}function ue(e,t,n,r,i){if(fe(e,t,n),i.paramMeta.urlParams.length===0){let n=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.set(n,t)}}function de(e,t){return b(e)===b(t)}function fe(e,t,n){let r=b(n);if(r===`/`){e.root.route=t;return}C(e,e.root,r,1,t)}function C(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(S,``).replace(/\?$/,``);t.paramChild??={node:y(),name:r},C(e,t.paramChild.node,n,s+1,i),s>=a?t.route??=i:C(e,t,n,s+1,i);return}t=ge(e,t,c),r=s+1}t.route=i}function pe(e,t,n){let r=me(e,n);r.slashChildRoute=t}function me(e,t){return he(e,e.root,t)}function he(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=ge(e,i,s),a=n+1}return i}function ge(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(S,``).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 _e(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 ve(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 ye(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 be=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,buildQueryString:e.buildQueryString},this.#u=this.#e.caseSensitive,this.#d=this.#e.urlParamsEncoding===`none`?null:re[this.#e.urlParamsEncoding]}registerTree(e){this.#c=e.paramMeta.queryParams,oe({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(!ae(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 w=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)},T=(e,t)=>{if(e===void 0)return t.boolean.decodeUndefined();let n=t.boolean.decodeRaw(e);if(n!==null)return n;let r=w(e),i=t.number.decode(r);return i===null?t.boolean.decodeValue(r):i},E=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)},xe={none:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${E(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}=${E(t[r])}`;return n}},brackets:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[]=${E(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[]=${E(t[r])}`;return n}},index:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[0]=${E(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[${r}]=${E(t[r])}`;return n}},comma:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${E(t[0])}`;for(let e=1;e<t.length;e++)n+=`,${E(t[e])}`;return n},decodeValue:e=>e.includes(`,`)?e.split(`,`):null}},Se={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:()=>null,decodeValue:e=>e},Ce={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:e=>e===`true`?!0:e===`false`?!1:null,decodeValue:e=>e},we={encode:(e,t)=>t?e:`${e}=false`,decodeUndefined:()=>!0,decodeRaw:()=>null,decodeValue:e=>e},Te={none:Se,auto:Ce,"empty-true":we},Ee={default:{encode:e=>e},hidden:{encode:()=>``}},De={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:Te[t],null:Ee[n],number:De[r],array:xe[e]}),ke={boolean:Te.auto,null:Ee.default,number:De.auto,array:xe.none},D={arrayFormat:`none`,booleanFormat:`auto`,nullFormat:`default`,numberFormat:`auto`},Ae={...D,strategies:ke},je=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??D.arrayFormat,n=e.booleanFormat??D.booleanFormat,r=e.nullFormat??D.nullFormat,i=e.numberFormat??D.numberFormat;return{arrayFormat:t,booleanFormat:n,nullFormat:r,numberFormat:i,strategies:Oe(t,n,r,i)}},O=e=>encodeURIComponent(e),Me=(e,t,n)=>{let r=O(e);switch(typeof t){case`string`:case`number`:return`${r}=${O(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}=${O(t)}`;default:return`${r}=${O(t)}`}},Ne=e=>{let t=e.indexOf(`?`);return t===-1?e:e.slice(t+1)};function Pe(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 Fe(e,t,n,r,i){return i?T(r?e.slice(t+1,n):void 0,i):r?w(e.slice(t+1,n)):null}function Ie(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=w(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)Pe(r,u,T(e,i),!0);return}}Pe(r,u,Fe(e,a,n,o,i),l)}const Le=(e,t)=>{let n=Ne(e);if(n===``||n===`?`)return{};if(!t)return Re(n);let r=je(t),i={},a=0,o=n.length;for(;a<o;){let e=n.indexOf(`&`,a);e===-1&&(e=o),Ie(n,a,e,i,r.strategies),a=e+1}return i};function Re(e){let t={};return ze(e,t),t}function ze(e,t){let n=0,r=e.length;for(;n<r;){let i=e.indexOf(`&`,n);i===-1&&(i=r),Ie(e,n,i,t),n=i+1}}const Be=(e,t)=>{let n=Object.keys(e);if(n.length===0)return``;let r=je(t),i=[];for(let t of n){let n=e[t];if(n===void 0)continue;let a=Me(t,n,r);a&&i.push(a)}return i.join(`&`)};function k(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=k(t,a);a.children.push(e)}return a}function Ve(e,t,n){let r=k({name:e,path:t},null);for(let e of n){let t=k(e,r);r.children.push(t)}return r}const He=Object.freeze(new Map),Ue=Object.freeze([]);function We(e){return e.parent?.name?`${e.parent.fullName}.${e.name}`:e.name}function Ge(e,t){return e.endsWith(`/`)&&t.startsWith(`/`)?e+t.slice(1):e+t}function Ke(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:Ge(i.staticPath,e.path):e.path}function qe(e){let t=new Map;for(let n of e)t.set(n.name,n);return t}function Je(e,t,n){let r=[],i=[];for(let a of e){let e=Ye(a,t,n);r.push(e),e.absolute||i.push(e)}return{childrenMap:qe(r),nonAbsoluteChildren:i}}function Ye(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=We(a),a.staticPath=Ke(a),e.children.length===0)a.children=He,a.nonAbsoluteChildren=Ue;else{let{childrenMap:t,nonAbsoluteChildren:r}=Je(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 Xe(e,t=!0){return Ye(e,null,t)}function Ze(e,t){let n=[];return{add(e){return n.push(e),this},addMany(e){return n.push(...e),this},build(r){return Xe(Ve(e,t,n),!r?.skipFreeze)}}}function Qe(e,t,n,r){return Ze(e,t).addMany(n).build(r)}function A(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(),A)),n}function $e(e){return Array.from(e.children.values(),A)}function et(e){let t=e?.queryParams;return new be({...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=>Le(e,t),buildQueryString:e=>Be(e,t)})}const tt={defaultRoute:``,defaultParams:{},trailingSlash:`preserve`,queryParamsMode:`loose`,queryParams:D,urlParamsEncoding:`default`,allowNotFound:!0,rewritePathOnMatch:!0};function nt(e){Object.freeze(e);for(let t of Object.keys(e)){let n=e[t];n&&typeof n==`object`&&n.constructor===Object&&nt(n)}return e}function rt(e,t){return typeof e==`function`?e(t):e}function it(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`[router.constructor] options must be a plain object`)}var at=class{#e;constructor(e={}){this.#e=nt({...tt,...e})}static validateOptionsIsObject(e){it(e)}get(){return this.#e}};function j(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(!j(e[n],t[n]))return!1;return!0}return!1}const ot=new WeakMap;function st(e){return ot.get(e)}function ct(e,t){ot.set(e,t)}var lt=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&&ct(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(!j(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)||!j(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 M={[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},ut=Object.keys(M),N=`router.usePlugin`;function dt(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 ft=class t{#e=new Set;#t=new Set;#n;#r=e.a;#i=null;static validatePlugin(e){dt(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(N,`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(N,`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(N,`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 ut)e in n&&(typeof n[e]==`function`?(r.push(this.#n.addEventListener(M[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 pt(e){let t=()=>e;return()=>t}var mt=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`?pt(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 P(){return{decoders:Object.create(null),encoders:Object.create(null),defaultParams:Object.create(null),forwardMap:Object.create(null),forwardFnMap:Object.create(null)}}function ht(e,t){for(let n in e)if(e[n]!==t[n])return!1;return!0}function gt(e,t,n){for(let r in e)if(!(r in n)&&e[r]!==t[r])return!1;return!0}function _t(e,t){if(!t||!vt(e,t))return e;let n={};for(let r in e)t[r]!==`query`&&(n[r]=e[r]);return n}function vt(e,t){for(let n in e)if(t[n]===`query`)return!0;return!1}function F(e){let t={name:e.name,path:e.path};return e.children&&(t.children=e.children.map(e=>F(e))),t}function I(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}.`)&&I(i.children,t,a))return!0}return!1}function yt(e,t){for(let n of Object.keys(e))t(n)&&delete e[n]}function bt(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 L(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 xt(e,t,n){let r=Qe(``,t,e),i=et(n);return i.registerTree(r),{tree:r,matcher:i}}function R(e){let t=xt(e.definitions,e.rootPath,e.matcherOptions);e.tree=t.tree,e.matcher=t.matcher}function St(e){R(e),e.resolvedForwardMap=z(e.config)}function Ct(e){wt(e),R(e)}function wt(e){e.definitions.length=0,Object.assign(e.config,P()),e.resolvedForwardMap=Object.create(null),e.routeCustomFields=Object.create(null)}function z(e){let t=Object.create(null);for(let n of Object.keys(e.forwardMap))t[n]=L(n,e.forwardMap);return t}function Tt(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 Et(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&&Tt(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 B(e,t,n,r,i,a,o=``){for(let s of e){let e=o?`${o}.${s.name}`:s.name;Et(s,e,t,n,r,i,a),s.children&&B(s.children,t,n,r,i,a,e)}}function Dt(e,t){let n=[],r=P(),i=Object.create(null),a=new Map,o=new Map;for(let t of e)n.push(F(t));let{tree:s,matcher:c}=xt(n,``,t);return B(e,r,i,a,o,void 0,``),{definitions:n,config:r,tree:s,matcher:c,resolvedForwardMap:z(r),routeCustomFields:i,rootPath:``,matcherOptions:t,depsStore:void 0,lifecycleNamespace:void 0,pendingCanActivate:a,pendingCanDeactivate:o,treeOperations:{commitTreeChanges:St,resetStore:Ct,nodeToDefinition:A}}}const V=[];Object.freeze(V);function Ot(e){let t=e.length,n=[];for(let r=t-1;r>=0;r--)n.push(e[r]);return n}function kt(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 At(e){let t=typeof e;return t===`string`||t===`number`||t===`boolean`}function jt(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(At(t)&&At(i)&&String(t)!==String(i))return!1}return!0}function Mt(e,t,n,r,i,a){for(let o=0;o<a;o++){let a=r[o];if(a!==i[o]||!jt(a,e,t,n))return o}return a}const Nt=new Map;function H(e){let t=Nt.get(e);if(t)return t;let n=Pt(e);return Object.freeze(n),Nt.set(e,n),n}function Pt(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]:kt(e)}let U,W,G=null,Ft,It,K=null;function Lt(e,t){if(!t)return{intersection:``,toActivate:H(e.name),toDeactivate:V};let n=st(e),r=st(t);if(!n&&!r)return{intersection:``,toActivate:H(e.name),toDeactivate:Ot(H(t.name))};let i=H(e.name),a=H(t.name),o=Math.min(a.length,i.length),s=Mt(n??r,e,t,i,a,o),c;if(s>=a.length)c=V;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 q(e,t){if(G!==null&&e===U&&t===W)return G;if(K!==null&&e===Ft&&t===It)return K;let n=Lt(e,t);return Ft=U,It=W,K=G,U=e,W=t,G=n,n}function Rt(e){let t=[];for(let n of e)for(let e of n.paramMeta.urlParams)t.push(e);return t}function zt(e){return e.at(-1)?.fullName??``}function Bt(e,t){return{name:t??zt(e.segments),params:e.params,meta:e.meta}}var Vt=class{#e;#t;get#n(){return this.#e.depsStore}constructor(e=[],t){this.#e=Dt(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}=q(t,n);return e===r||i.includes(e)?!0:a.includes(e)}}setDependencies(e){this.#e.depsStore=e;for(let[t,n]of this.#e.pendingCanActivate)e.addActivateGuard(t,n);this.#e.pendingCanActivate.clear();for(let[t,n]of this.#e.pendingCanDeactivate)e.addDeactivateGuard(t,n);this.#e.pendingCanDeactivate.clear()}setLifecycleNamespace(e){this.#e.lifecycleNamespace=e}setRootPath(e){this.#e.rootPath=e,R(this.#e)}hasRoute(e){return this.#e.matcher.hasRoute(e)}clearRoutes(){Ct(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}=Bt(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=bt(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 Bt({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 ht(n,c)?s?gt(i?_t(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?Rt(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 Ht=new e.t(e.u.ROUTER_NOT_STARTED),Ut=new e.t(e.u.ROUTE_NOT_FOUND),Wt=new e.t(e.u.SAME_STATES),Gt=Promise.reject(Ht),Kt=Promise.reject(Ut),qt=Promise.reject(Wt);Gt.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 X=[e.l.UNKNOWN_ROUTE];Object.freeze(X);const sn={replace:!0};Object.freeze(sn);function cn(t,n){return n?.name===e.l.UNKNOWN_ROUTE&&!t.replace?{...t,replace:!0}:t}function ln(e,t,n){return!!e&&!t.reload&&!t.force&&e.path===n.path}var un=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,Gt;let a,o,s=!1,c=null;try{if(a=i.buildNavigateState(t,n),!a)return i.emitTransitionError(void 0,i.getState(),Ut),this.lastSyncRejected=!0,Kt;if(o=i.getState(),r=cn(r,o),ln(o,r,a))return i.emitTransitionError(a,o,Wt),this.lastSyncRejected=!0,qt;this.#s(r.signal);let l=++this.#n;if(i.startTransition(a,o),s=!0,this.#n!==l)throw new e.t(e.u.TRANSITION_CANCELLED);let[u,d]=i.getLifecycleFunctions(),f=a.name===e.l.UNKNOWN_ROUTE,p=q(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=an(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.u.TRANSITION_CANCELLED);this.#o(c)}return this.lastSyncResolved=!0,Promise.resolve(Xt(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.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.#s();let n=this.#e.getState(),r=n?H(n.name).toReversed():[];Object.freeze(r);let i={deactivated:r,activated:X,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,sn),o}abortCurrentNavigation(){this.#t?.abort(new e.t(e.u.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.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.#o(r)}}#i(e,t,n,r,i){t&&this.#o(t),n&&r&&Zt(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.u.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.u.TRANSITION_CANCELLED)),this.#e.cancelNavigation()),t?.aborted)throw new e.t(e.u.TRANSITION_CANCELLED,{reason:t.reason})}};const dn={replace:!0};Object.freeze(dn);var fn=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.navigate(i.name,i.params,dn):n.navigateToNotFound(t)}stop(){this.#e.clearState()}};function Z(e){return e instanceof Error?e:Error(String(e))}function pn(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.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 Z(a);return}return pn(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 mn=new e.t(e.u.ROUTER_ALREADY_STARTED),hn=new Set([`all`,`warn-error`,`error-only`]);function gn(e){return typeof e==`string`&&hn.has(e)}function _n(e){return typeof e==`string`?`"${e}"`:typeof e==`object`?JSON.stringify(e):String(e)}function vn(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&&!gn(t.level))throw TypeError(`Invalid logger level: ${_n(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 yn=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=rt(e.defaultRoute,e=>this.dependenciesStore.dependencies[e]),i=rt(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(),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 bn(e){e.wireLimits(),e.wireRouteLifecycleDeps(),e.wireRoutesDeps(),e.wirePluginsDeps(),e.wireNavigationDeps(),e.wireLifecycleDeps(),e.wireStateDeps()}const xn=Object.freeze({});var Sn=class r{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;constructor(r=[],i={},a={}){i.logger&&vn(i.logger)&&(n.logger.configure(i.logger),delete i.logger),at.validateOptionsIsObject(i),d(a),r.length>0&&f(r),this.#e=new at(i),this.#t=e.n(i.limits),this.#n=p(a),this.#r=new lt,this.#i=new Vt(r,Cn(this.#e.get())),this.#a=new mt,this.#o=new ft,this.#s=new un,this.#c=new fn,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`)}})}),bn(new yn({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.s,this.#e.get()),s),emitTransitionError:e=>{this.#l.sendFailSafe(void 0,this.#r.get(),e)},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:[],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),Vt.shouldUpdateNode(e)}isActive(){return this.#l.isActive()}start(e){if(!this.#l.canStart())return Promise.reject(mn);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}=q(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??xn;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??xn;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 L}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return $e}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return wt}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return yt}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Sn}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return f}});
6
- //# sourceMappingURL=Router--UAz5UnF.js.map