@real-router/core 0.52.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 -91
  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 -91
  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 +17 -1
  64. package/src/utils/serializeRouterState.ts +50 -3
  65. package/src/utils/serializeState.ts +46 -5
  66. package/dist/cjs/Router-DrBkBdZ5.d.ts.map +0 -1
  67. package/dist/cjs/Router-Pztue5fk.js +0 -6
  68. package/dist/cjs/Router-Pztue5fk.js.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-CK8U23pP.mjs +0 -6
  79. package/dist/esm/Router-CK8U23pP.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,11 +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
 
7
- export type { SerializeRouterStateOptions } from "./serializeRouterState";
18
+ export type {
19
+ SerializedRouterState,
20
+ SerializeRouterStateOptions,
21
+ } from "./serializeRouterState";
8
22
 
9
23
  export { serializeState } from "./serializeState";
10
24
 
25
+ export type { Serialize, SerializeStateOptions } from "./serializeState";
26
+
11
27
  export type { StaticPathEntries } from "./getStaticPaths";
@@ -1,6 +1,20 @@
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
+ >;
4
18
 
5
19
  export interface SerializeRouterStateOptions {
6
20
  /**
@@ -11,6 +25,25 @@ export interface SerializeRouterStateOptions {
11
25
  * @default []
12
26
  */
13
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;
14
47
  }
15
48
 
16
49
  /**
@@ -42,6 +75,16 @@ export interface SerializeRouterStateOptions {
42
75
  * const state = await router.start(url);
43
76
  * const json = serializeRouterState(state, { excludeContext: ["rsc"] });
44
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
+ * ```
45
88
  */
46
89
  export function serializeRouterState(
47
90
  state: State,
@@ -64,10 +107,14 @@ export function serializeRouterState(
64
107
  context = filtered;
65
108
  }
66
109
 
67
- return serializeState({
110
+ const payload = {
68
111
  name: state.name,
69
112
  params: state.params,
70
113
  path: state.path,
71
114
  context,
72
- });
115
+ };
116
+
117
+ return options?.serialize
118
+ ? serializeState(payload, { serialize: options.serialize })
119
+ : serializeState(payload);
73
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 +0,0 @@
1
- {"version":3,"file":"Router-DrBkBdZ5.d.ts","names":["ConstraintPattern","RegExp","pattern","constraint","ParamMeta","Record","Readonly","ReadonlyMap","urlParams","queryParams","spatParams","paramTypeMap","constraintPatterns","pathPattern","URLParamsEncodingType","MatcherInputNode","name","path","fullName","absolute","children","nonAbsoluteChildren","paramMeta","staticPath","CompiledRoute","ReadonlySet","BuildParamSlot","MatchResult","parent","depth","matchSegments","meta","declaredQueryParams","declaredQueryParamsSet","hasTrailingSlash","hasConstraints","buildStaticParts","buildParamSlots","buildParamNamesSet","cachedResult","forwardTo","defaultParams","paramName","encoder","value","isOptional","BuildPathOptions","queryParamsMode","trailingSlash","SegmentNode","staticChildren","hasChildren","paramChild","node","splatChild","route","slashChildRoute","segments","params","SegmentMatcherOptions","caseSensitive","strictTrailingSlash","strictQueryParams","urlParamsEncoding","parseQueryString","queryString","buildQueryString","ResolvedMatcherOptions","buildParamMeta","validateConstraints","encodeURIComponentExcludingSubDelims","segment","ENCODING_METHODS","param","DECODING_METHODS","encodeParam","encoding","isSpatParam","createSegmentNode","SegmentMatcher","private","options","constructor","registerTree","match","buildPath","getSegmentsByName","getMetaByName","hasRoute","setRootPath","rootPath","ArrayFormat","BooleanFormat","NullFormat","NumberFormat","Options","arrayFormat","booleanFormat","nullFormat","numberFormat","FinalOptions","QueryParamPrimitive","QueryParamValue","SearchParams","Record","OmitResponse","querystring","removedParams","KeepResponse","keptParams","DecodeResult","parse","path","opts","parseInto","queryString","target","build","params","omit","paramsToOmit","keep","paramsToKeep","DEFAULT_QUERY_PARAMS","ParamMeta","SegmentMatcher","URLParamsEncodingType","DEFAULT_QUERY_PARAMS","Options","RouteDefinition","key","name","path","children","RouteTree","ReadonlyMap","Record","Readonly","absolute","paramMeta","parent","nonAbsoluteChildren","fullName","staticPath","paramTypeMap","TreeBuildOptions","skipFreeze","QueryParamsMode","TrailingSlashMode","BasePathOptions","trailingSlashMode","queryParamsMode","queryParams","urlParamsEncoding","BuildOptions","ignoreConstraints","MatchOptions","strictTrailingSlash","strongMatching","ParamSource","ParamTypeMap","RouteTreeStateMeta","MatchResult","P","RouteParams","segments","params","meta","RouteTreeState","createRouteTree","routes","options","getSegmentsByName","tree","routeName","nodeToDefinition","node","routeTreeToDefinitions","QueryParamsConfig","CreateMatcherOptions","caseSensitive","strictQueryParams","Matcher","createMatcher","validateRoute","Set","Map","route","methodName","rootNode","parentName","seenNames","seenPathsByParent"],"sources":["../../../path-matcher/dist/esm/index.d.mts","../../../search-params/dist/esm/index.d.mts","../../../route-tree/dist/esm/index.d.mts","../../src/types.ts","../../src/Router.ts"],"mappings":"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"}
@@ -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,_=/\?(.+)$/;function v(e){let t=[],n=[],r=[],i={},a=new Map,o=e.replaceAll(g,`$1`),s=_.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 ee=/[^\w!$'()*+,.:;|~-]/gu,te=/[^\w!$'()*+,.:;|~-]/u,ne={default:e=>te.test(e)?e.replaceAll(ee,e=>encodeURIComponent(e)):e,uri:encodeURI,uriComponent:encodeURIComponent,none:e=>e},re={default:decodeURIComponent,uri:decodeURI,uriComponent:decodeURIComponent,none:e=>e};function y(){return{staticChildren:Object.create(null),hasChildren:!1,paramChild:void 0,splatChild:void 0,route:void 0,slashChildRoute:void 0}}function b(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}function ie(e,t){return e===``?t:t===``?e:e+t}function ae(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function oe(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(!ae(n)||!ae(r))return!1;t+=3}else t++;return!0}const x=/<[^>]*>/g;function se(e,t,n,r,i){let a=t.fullName===``;a||r.push(t);let o=t.absolute,s=t.paramMeta.pathPattern,c=o&&s.startsWith(`~`)?s.slice(1):s,l=(o?c:s).replaceAll(x,``),u=o?l:ie(n,l),d=i;a||(d=ce(e,t,u,o?``:n,r,i));for(let n of t.children.values())se(e,n,u,r,d);a||r.pop()}function ce(e,t,n,r,i,a){let o=fe(n,r),s=Object.freeze([...i]),c=le(s),l=b(n),u=ye(e.rootQueryParams,i),d=be(i),{buildStaticParts:f,buildParamSlots:p}=ve(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?ue(e,m,r):de(e,m,n,l,t),m}function le(e){let t={};for(let n of e)t[n.fullName]=n.paramTypeMap;return Object.freeze(t)}function ue(e,t,n){me(e,t,n);let r=b(n),i=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.has(i)&&e.staticCache.set(i,t)}function de(e,t,n,r,i){if(pe(e,t,n),i.paramMeta.urlParams.length===0){let n=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.set(n,t)}}function fe(e,t){return b(e)===b(t)}function pe(e,t,n){let r=b(n);if(r===`/`){e.root.route=t;return}S(e,e.root,r,1,t)}function S(e,t,n,r,i){let a=n.length;for(;r<=a;){let o=n.indexOf(`/`,r),s=o===-1?a:o,c=n.slice(r,s);if(c.endsWith(`?`)){let r=c.slice(1).replaceAll(x,``).replace(/\?$/,``);t.paramChild??={node:y(),name:r},S(e,t.paramChild.node,n,s+1,i),s>=a?t.route??=i:S(e,t,n,s+1,i);return}t=_e(e,t,c),r=s+1}t.route=i}function me(e,t,n){let r=he(e,n);r.slashChildRoute=t}function he(e,t){return ge(e,e.root,t)}function ge(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=_e(e,i,s),a=n+1}return i}function _e(e,t,n){if(n.startsWith(`*`)){let e=n.slice(1);return t.splatChild??={node:y(),name:e},t.hasChildren=!0,t.splatChild.node}if(n.startsWith(`:`)){let e=n.slice(1).replaceAll(x,``).replace(/\?$/,``);return t.paramChild??={node:y(),name:e},t.hasChildren=!0,t.paramChild.node}let r=e.options.caseSensitive?n:n.toLowerCase();return r in t.staticChildren||(t.staticChildren[r]=y(),t.hasChildren=!0),t.staticChildren[r]}function 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=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 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=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,se({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(!oe(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={none:{encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:()=>null,decodeValue:e=>e},auto:{encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:e=>e===`true`?!0:e===`false`?!1:null,decodeValue:e=>e},"empty-true":{encode:(e,t)=>t?e:`${e}=false`,decodeUndefined:()=>!0,decodeRaw:()=>null,decodeValue:e=>e}},T={default:{encode:e=>e},hidden:{encode:()=>``}},E={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}},Te=(e,t,n,r)=>({boolean:we[t],null:T[n],number:E[r],array:Ce[e]}),Ee={boolean:we.auto,null:T.default,number:E.auto,array:Ce.none},D={arrayFormat:`none`,booleanFormat:`auto`,nullFormat:`default`,numberFormat:`auto`},De={...D,strategies:Ee},O=e=>{if(!e||e.arrayFormat===void 0&&e.booleanFormat===void 0&&e.nullFormat===void 0&&e.numberFormat===void 0)return De;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:Te(t,n,r,i)}},k=e=>encodeURIComponent(e),Oe=(e,t,n)=>{let r=k(e);switch(typeof t){case`string`:case`number`:return`${r}=${k(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}=${k(t)}`;default:return`${r}=${k(t)}`}},ke=e=>{let t=e.indexOf(`?`);return t===-1?e:e.slice(t+1)};function A(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 Ae(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 je(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)A(r,u,Se(e,i),!0);return}}A(r,u,Ae(e,a,n,o,i),l)}const Me=(e,t)=>{let n=ke(e);if(n===``||n===`?`)return{};if(!t)return Ne(n);let r=O(t),i={},a=0,o=n.length;for(;a<o;){let e=n.indexOf(`&`,a);e===-1&&(e=o),je(n,a,e,i,r.strategies),a=e+1}return i};function Ne(e){let t={};return Pe(e,t),t}function Pe(e,t){let n=0,r=e.length;for(;n<r;){let i=e.indexOf(`&`,n);i===-1&&(i=r),je(e,n,i,t),n=i+1}}const Fe=(e,t)=>{let n=Object.keys(e);if(n.length===0)return``;let r=O(t),i=[];for(let t of n){let n=e[t];if(n===void 0)continue;let a=Oe(t,n,r);a&&i.push(a)}return i.join(`&`)};function j(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=j(t,a);a.children.push(e)}return a}function Ie(e,t,n){let r=j({name:e,path:t},null);for(let e of n){let t=j(e,r);r.children.push(t)}return r}const Le=Object.freeze(new Map),Re=Object.freeze([]);function ze(e){return e.parent?.name?`${e.parent.fullName}.${e.name}`:e.name}function Be(e,t){return e.endsWith(`/`)&&t.startsWith(`/`)?e+t.slice(1):e+t}function Ve(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:Be(i.staticPath,e.path):e.path}function He(e){let t=new Map;for(let n of e)t.set(n.name,n);return t}function Ue(e,t,n){let r=[],i=[];for(let a of e){let e=We(a,t,n);r.push(e),e.absolute||i.push(e)}return{childrenMap:He(r),nonAbsoluteChildren:i}}function We(e,t,n){let r=v(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=ze(a),a.staticPath=Ve(a),e.children.length===0)a.children=Le,a.nonAbsoluteChildren=Re;else{let{childrenMap:t,nonAbsoluteChildren:r}=Ue(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 Ge(e,t=!0){return We(e,null,t)}function Ke(e,t){let n=[];return{add(e){return n.push(e),this},addMany(e){return n.push(...e),this},build(r){return Ge(Ie(e,t,n),!r?.skipFreeze)}}}function qe(e,t,n,r){return Ke(e,t).addMany(n).build(r)}function M(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(),M)),n}function Je(e){return Array.from(e.children.values(),M)}function Ye(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=>Me(e,t),buildQueryString:e=>Fe(e,t)})}const Xe={defaultRoute:``,defaultParams:{},trailingSlash:`preserve`,queryParamsMode:`loose`,queryParams:D,urlParamsEncoding:`default`,allowNotFound:!0,rewritePathOnMatch:!0};function Ze(e){Object.freeze(e);for(let t of Object.keys(e)){let n=e[t];n&&typeof n==`object`&&n.constructor===Object&&Ze(n)}return e}function Qe(e,t){return typeof e==`function`?e(t):e}function $e(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`[router.constructor] options must be a plain object`)}var et=class{#e;constructor(e={}){this.#e=Ze({...Xe,...e})}static validateOptionsIsObject(e){$e(e)}get(){return this.#e}};function N(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(!N(e[n],t[n]))return!1;return!0}return!1}const tt=new WeakMap;function nt(e){return tt.get(e)}function rt(e,t){tt.set(e,t)}var it=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&&rt(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(!N(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)||!N(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 at={[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},ot=Object.keys(at),P=`router.usePlugin`;function st(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 ct=class t{#e=new Set;#t=new Set;#n;#r=e.a;#i=null;static validatePlugin(e){st(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(P,`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(P,`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(P,`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 ot)e in n&&(typeof n[e]==`function`?(r.push(this.#n.addEventListener(at[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 lt(e){let t=()=>e;return()=>t}var ut=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`?lt(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 dt(){return{decoders:Object.create(null),encoders:Object.create(null),defaultParams:Object.create(null),forwardMap:Object.create(null),forwardFnMap:Object.create(null)}}function ft(e,t){for(let n in e)if(e[n]!==t[n])return!1;return!0}function pt(e,t,n){for(let r in e)if(!(r in n)&&e[r]!==t[r])return!1;return!0}function mt(e,t){if(!t||!ht(e,t))return e;let n={};for(let r in e)t[r]!==`query`&&(n[r]=e[r]);return n}function ht(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 gt(e,t,n=``){for(let r=0;r<e.length;r++){let i=e[r],a=n?`${n}.${i.name}`:i.name;if(a===t)return e.splice(r,1),!0;if(i.children&&t.startsWith(`${a}.`)&&gt(i.children,t,a))return!0}return!1}function _t(e,t){for(let n of Object.keys(e))t(n)&&delete e[n]}function vt(e,t){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 yt(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 bt(e,t,n){let r=qe(``,t,e),i=Ye(n);return i.registerTree(r),{tree:r,matcher:i}}function I(e){let t=bt(e.definitions,e.rootPath,e.matcherOptions);e.tree=t.tree,e.matcher=t.matcher}function xt(e){I(e),e.resolvedForwardMap=L(e.config)}function St(e){Ct(e),I(e)}function Ct(e){e.definitions.length=0,Object.assign(e.config,dt()),e.resolvedForwardMap=Object.create(null),e.routeCustomFields=Object.create(null)}function L(e){let t=Object.create(null);for(let n of Object.keys(e.forwardMap))t[n]=yt(n,e.forwardMap);return t}function wt(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 Tt(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&&wt(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 R(e,t,n,r,i,a,o=``){for(let s of e){let e=o?`${o}.${s.name}`:s.name;Tt(s,e,t,n,r,i,a),s.children&&R(s.children,t,n,r,i,a,e)}}function Et(e,t){let n=[],r=dt(),i=Object.create(null),a=new Map,o=new Map;for(let t of e)n.push(F(t));let{tree:s,matcher:c}=bt(n,``,t);return R(e,r,i,a,o,void 0,``),{definitions:n,config:r,tree:s,matcher:c,resolvedForwardMap:L(r),routeCustomFields:i,rootPath:``,matcherOptions:t,depsStore:void 0,lifecycleNamespace:void 0,pendingCanActivate:a,pendingCanDeactivate:o,treeOperations:{commitTreeChanges:xt,resetStore:St,nodeToDefinition:M}}}const z=[];Object.freeze(z);function Dt(e){let t=e.length,n=[];for(let r=t-1;r>=0;r--)n.push(e[r]);return n}function Ot(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 kt(e){let t=typeof e;return t===`string`||t===`number`||t===`boolean`}function At(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(kt(t)&&kt(i)&&String(t)!==String(i))return!1}return!0}function jt(e,t,n,r,i,a){for(let o=0;o<a;o++){let a=r[o];if(a!==i[o]||!At(a,e,t,n))return o}return a}const Mt=new Map;function B(e){let t=Mt.get(e);if(t)return t;let n=Nt(e);return Object.freeze(n),Mt.set(e,n),n}function Nt(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]:Ot(e)}let V,H,U=null,Pt,Ft,W=null;function It(e,t){if(!t)return{intersection:``,toActivate:B(e.name),toDeactivate:z};let n=nt(e),r=nt(t);if(!n&&!r)return{intersection:``,toActivate:B(e.name),toDeactivate:Dt(B(t.name))};let i=B(e.name),a=B(t.name),o=Math.min(a.length,i.length),s=jt(n??r,e,t,i,a,o),c;if(s>=a.length)c=z;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 G(e,t){if(U!==null&&e===V&&t===H)return U;if(W!==null&&e===Pt&&t===Ft)return W;let n=It(e,t);return Pt=V,Ft=H,W=U,V=e,H=t,U=n,n}function Lt(e){let t=[];for(let n of e)for(let e of n.paramMeta.urlParams)t.push(e);return t}function Rt(e){return e.at(-1)?.fullName??``}function zt(e,t){return{name:t??Rt(e.segments),params:e.params,meta:e.meta}}var Bt=class{#e;#t;get#n(){return this.#e.depsStore}constructor(e=[],t){this.#e=Et(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}=G(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,I(this.#e)}hasRoute(e){return this.#e.matcher.hasRoute(e)}clearRoutes(){St(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}=zt(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=vt(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 zt({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 ft(n,c)?s?pt(i?mt(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?Lt(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 Vt=new e.t(e.u.ROUTER_NOT_STARTED),Ht=new e.t(e.u.ROUTE_NOT_FOUND),Ut=new e.t(e.u.SAME_STATES),K=Promise.reject(Vt),Wt=Promise.reject(Ht),Gt=Promise.reject(Ut);K.catch(()=>{}),Wt.catch(()=>{}),Gt.catch(()=>{});function Kt(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 qt({signal:e,...t}){return t}function Jt(t,n){let{toState:r,fromState:i,opts:a,toDeactivate:o,toActivate:s,intersection:c}=n;if(r.name!==e.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=Kt(i,a,o,s,c);let l=Object.freeze(r);t.setState(l);let u=a.signal===void 0?a:qt(a);return t.sendTransitionDone(l,i,u),l}function Yt(t,n,r,i){let a=n;a.code===e.u.TRANSITION_CANCELLED||a.code===e.u.ROUTE_NOT_FOUND||t.sendTransitionFail(r,i,a)}function q(t,n,r){if(t instanceof DOMException&&t.name===`AbortError`)throw new e.t(e.u.TRANSITION_CANCELLED);Xt(t,n,r)}function Xt(t,n,r){throw t instanceof e.t?(t.setCode(n),t):new e.t(n,Qt(t,r))}const Zt=new Set([`code`,`segment`,`path`,`redirect`]);function Qt(e,t){let n={segment:t};if(e instanceof Error)return{...n,message:e.message,stack:e.stack,...`cause`in e&&e.cause!==void 0&&{cause:e.cause}};if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))Zt.has(n)||(t[n]=r);return{...n,...t}}return n}async function $t(t,n,r){let i;try{i=await t}catch(e){q(e,n,r);return}if(!i)throw new e.t(n,{segment:r})}async function en(t,n,r,i,a,o,s,c,l,u){await $t(l,r,u);for(let l=c;l<n.length;l++){if(!s())throw new e.t(e.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){q(e,r,c)}if(d instanceof Promise){await $t(d,r,c);continue}if(!d)throw new e.t(r,{segment:c})}}async function tn(t,n,r,i,a,o,s,c,l){if(await t,!c())throw new e.t(e.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=J(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 nn(t,n,r,i,a,o,s,c,l,u,d){if(a){let a=J(t,r,e.u.CANNOT_DEACTIVATE,s,c,l,u);if(a!==void 0)return tn(a,n,i,o,s,c,l,u,d)}if(!u())throw new e.t(e.u.TRANSITION_CANCELLED);let f=d();if(f!==void 0)return rn(f,o?n:void 0,i,s,c,l,u);if(o)return J(n,i,e.u.CANNOT_ACTIVATE,s,c,l,u)}async function rn(t,n,r,i,a,o,s){if(await t,!s())throw new e.t(e.u.TRANSITION_CANCELLED);if(n!==void 0){let t=J(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 J(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){q(e,r,l)}if(d instanceof Promise)return en(t,n,r,i,a,o,s,c+1,d,l);if(!d)throw new e.t(r,{segment:l})}}const an=[e.l.UNKNOWN_ROUTE];Object.freeze(an);const Y={replace:!0};Object.freeze(Y);function on(t,n){return n?.name===e.l.UNKNOWN_ROUTE&&!t.replace?{...t,replace:!0}:t}function sn(e,t,n){return!!e&&!t.reload&&!t.force&&e.path===n.path}var cn=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,K;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(),Ht),this.lastSyncRejected=!0,Wt)}navigateToState(t,n){this.lastSyncResolved=!1;let r=this.#e;if(!r.canNavigate())return this.lastSyncRejected=!0,K;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?B(n.name).toReversed():[];Object.freeze(r);let i={deactivated:r,activated:an,intersection:``};Object.freeze(i);let a={phase:`activating`,...n&&{from:n.name},reason:`success`,segments:i};Object.freeze(a);let o={name:e.l.UNKNOWN_ROUTE,params:e.s,path:t,transition:a,context:{}};return Object.freeze(o),this.#e.setState(o),this.#e.emitTransitionSuccess(o,n,Y),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=on(n,i),sn(i,n,t))return r.emitTransitionError(t,i,Ut),this.lastSyncRejected=!0,Gt;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=G(t,i),{toDeactivate:f,toActivate:p,intersection:m}=d,h=i&&!n.forceDeactivate&&f.length>0,g=!u&&p.length>0,_=c.size>0||l.size>0,v=t;if(!_){let e=this.#o(v,i,s,n,d,c);if(e!==void 0)return e}if(_){o=new AbortController,this.#t=o;let a=()=>this.#n===s&&r.isActive(),u=o.signal,d=nn(c,l,f,p,!!h,g,t,i,u,a,()=>{if(r.sendLeaveApprove(v,i),r.hasLeaveListeners())return r.awaitLeaveListeners(v,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(Jt(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 Jt(a,n)}catch(e){throw Yt(a,e,n.toState,n.fromState),e}finally{this.#s(r)}}#a(e,t,n,r,i){t&&this.#s(t),n&&r&&Yt(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 ln={replace:!0};Object.freeze(ln);var un=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,ln):n.navigateToNotFound(t)}stop(){this.#e.clearState()}};function X(e){return e instanceof Error?e:Error(String(e))}function dn(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 dn(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 fn=new e.t(e.u.ROUTER_ALREADY_STARTED),pn=new Set([`all`,`warn-error`,`error-only`]);function mn(e){return typeof e==`string`&&pn.has(e)}function hn(e){return typeof e==`string`?`"${e}"`:typeof e==`object`?JSON.stringify(e):String(e)}function gn(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&&!mn(t.level))throw TypeError(`Invalid logger level: ${hn(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 _n=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=Qe(e.defaultRoute,e=>this.dependenciesStore.dependencies[e]),i=Qe(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 vn(e){e.wireLimits(),e.wireRouteLifecycleDeps(),e.wireRoutesDeps(),e.wirePluginsDeps(),e.wireNavigationDeps(),e.wireLifecycleDeps(),e.wireStateDeps()}const Q=Object.freeze({});var yn=class r{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;constructor(i=[],a={},s={}){a.logger&&gn(a.logger)&&(n.logger.configure(a.logger),delete a.logger),et.validateOptionsIsObject(a),d(s),i.length>0&&f(i),this.#e=new et(a),this.#t=e.n(a.limits),this.#n=p(s),this.#r=new it,this.#i=new Bt(i,bn(this.#e.get())),this.#a=new ut,this.#o=new ct,this.#s=new cn,this.#c=new un;let c=u(),l=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`)}});this.#l=new Z({routerFSM:c,emitter:l}),vn(new _n({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 m=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),m),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()),m),emitTransitionError:e=>{this.#l.sendFailSafe(void 0,this.#r.get(),e)},start:t.t(`start`,e=>this.#c.start(e),m),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:m,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),Bt.shouldUpdateNode(e)}isActive(){return this.#l.isActive()}start(e){if(!this.#l.canStart())return Promise.reject(fn);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}=G(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 bn(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 yt}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return Je}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Ct}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return _t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return gt}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return yn}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return f}});
6
- //# sourceMappingURL=Router-Pztue5fk.js.map