@real-router/core 0.51.0 → 0.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -10
- package/dist/cjs/Router-CJihdrWA.d.ts +67 -0
- package/dist/cjs/Router-CJihdrWA.d.ts.map +1 -0
- package/dist/cjs/Router-DlmLM8Yo.js +6 -0
- package/dist/cjs/Router-DlmLM8Yo.js.map +1 -0
- package/dist/cjs/RouterError-Bm9YnZ6e.d.ts +310 -0
- package/dist/cjs/RouterError-Bm9YnZ6e.d.ts.map +1 -0
- package/dist/cjs/api.d.ts +2 -1
- package/dist/cjs/api.d.ts.map +1 -1
- package/dist/cjs/api.js +1 -1
- package/dist/cjs/api.js.map +1 -1
- package/dist/cjs/cloneRouter-jNfrYcI_.js +2 -0
- package/dist/cjs/cloneRouter-jNfrYcI_.js.map +1 -0
- package/dist/cjs/index-8oPDJBQc.d.ts +306 -0
- package/dist/cjs/index-8oPDJBQc.d.ts.map +1 -0
- package/dist/cjs/{Router-DrBkBdZ5.d.ts → index-EwbhzRQw.d.ts} +4 -69
- package/dist/cjs/index-EwbhzRQw.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +4 -197
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/{internals-na15rxo_.js → internals-CM6oaz9n.js} +1 -1
- package/dist/cjs/internals-CM6oaz9n.js.map +1 -0
- package/dist/cjs/utils.d.ts +2 -70
- package/dist/cjs/utils.js +1 -1
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/validation.d.ts +55 -44
- package/dist/cjs/validation.d.ts.map +1 -1
- package/dist/cjs/validation.js +1 -1
- package/dist/esm/Router-BmhiDQUJ.d.mts +67 -0
- package/dist/esm/Router-BmhiDQUJ.d.mts.map +1 -0
- package/dist/esm/Router-DRM2Fd06.mjs +6 -0
- package/dist/esm/Router-DRM2Fd06.mjs.map +1 -0
- package/dist/esm/RouterError-hhfSVGtY.d.mts +310 -0
- package/dist/esm/RouterError-hhfSVGtY.d.mts.map +1 -0
- package/dist/esm/api.d.mts +2 -1
- package/dist/esm/api.d.mts.map +1 -1
- package/dist/esm/api.mjs +1 -1
- package/dist/esm/api.mjs.map +1 -1
- package/dist/esm/cloneRouter-DdGGwYdL.mjs +2 -0
- package/dist/esm/cloneRouter-DdGGwYdL.mjs.map +1 -0
- package/dist/esm/{Router-BeXr2zW4.d.mts → index-DNjaY7KH.d.mts} +4 -69
- package/dist/esm/index-DNjaY7KH.d.mts.map +1 -0
- package/dist/esm/index-r_JTvSBH.d.mts +306 -0
- package/dist/esm/index-r_JTvSBH.d.mts.map +1 -0
- package/dist/esm/index.d.mts +4 -197
- package/dist/esm/index.d.mts.map +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/{internals-CCymabFj.mjs → internals-C59msvHY.mjs} +1 -1
- package/dist/esm/internals-C59msvHY.mjs.map +1 -0
- package/dist/esm/utils.d.mts +2 -70
- package/dist/esm/utils.mjs +1 -1
- package/dist/esm/utils.mjs.map +1 -1
- package/dist/esm/validation.d.mts +56 -43
- package/dist/esm/validation.d.mts.map +1 -1
- package/dist/esm/validation.mjs +1 -1
- package/package.json +1 -1
- package/src/Router.ts +13 -16
- package/src/internals.ts +13 -1
- package/src/utils/createRequestScope.ts +174 -0
- package/src/utils/hydrateRouter.ts +68 -12
- package/src/utils/index.ts +18 -0
- package/src/utils/serializeRouterState.ts +94 -5
- package/src/utils/serializeState.ts +46 -5
- package/dist/cjs/Router-CmI2Uw9u.js +0 -6
- package/dist/cjs/Router-CmI2Uw9u.js.map +0 -1
- package/dist/cjs/Router-DrBkBdZ5.d.ts.map +0 -1
- package/dist/cjs/RouterError-BmvAyBlx.js +0 -2
- package/dist/cjs/RouterError-BmvAyBlx.js.map +0 -1
- package/dist/cjs/RouterValidator-DLy_W2du.d.ts +0 -114
- package/dist/cjs/RouterValidator-DLy_W2du.d.ts.map +0 -1
- package/dist/cjs/getPluginApi-CUcFDzuA.js +0 -2
- package/dist/cjs/getPluginApi-CUcFDzuA.js.map +0 -1
- package/dist/cjs/internals-na15rxo_.js.map +0 -1
- package/dist/cjs/utils.d.ts.map +0 -1
- package/dist/esm/Router-BeXr2zW4.d.mts.map +0 -1
- package/dist/esm/Router-MsNZv4zY.mjs +0 -6
- package/dist/esm/Router-MsNZv4zY.mjs.map +0 -1
- package/dist/esm/RouterError-D-Zjbdv9.mjs +0 -2
- package/dist/esm/RouterError-D-Zjbdv9.mjs.map +0 -1
- package/dist/esm/RouterValidator-C-PvV00i.d.mts +0 -114
- package/dist/esm/RouterValidator-C-PvV00i.d.mts.map +0 -1
- package/dist/esm/getPluginApi-CsTfDB-O.mjs +0 -2
- package/dist/esm/getPluginApi-CsTfDB-O.mjs.map +0 -1
- package/dist/esm/internals-CCymabFj.mjs.map +0 -1
- 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
|
-
*
|
|
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
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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
|
-
? (
|
|
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
|
-
|
|
84
|
+
try {
|
|
85
|
+
return await router.start(parsed.path);
|
|
86
|
+
} finally {
|
|
87
|
+
ctx.hydrationState = previous;
|
|
88
|
+
}
|
|
33
89
|
}
|
package/src/utils/index.ts
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
+
export { createRequestScope } from "./createRequestScope";
|
|
2
|
+
|
|
3
|
+
export type {
|
|
4
|
+
IncomingMessageLike,
|
|
5
|
+
RequestLike,
|
|
6
|
+
RequestScope,
|
|
7
|
+
RequestScopeSource,
|
|
8
|
+
} from "./createRequestScope";
|
|
9
|
+
|
|
1
10
|
export { getStaticPaths } from "./getStaticPaths";
|
|
2
11
|
|
|
3
12
|
export { hydrateRouter } from "./hydrateRouter";
|
|
4
13
|
|
|
14
|
+
export type { Deserialize, HydrateRouterOptions } from "./hydrateRouter";
|
|
15
|
+
|
|
5
16
|
export { serializeRouterState } from "./serializeRouterState";
|
|
6
17
|
|
|
18
|
+
export type {
|
|
19
|
+
SerializedRouterState,
|
|
20
|
+
SerializeRouterStateOptions,
|
|
21
|
+
} from "./serializeRouterState";
|
|
22
|
+
|
|
7
23
|
export { serializeState } from "./serializeState";
|
|
8
24
|
|
|
25
|
+
export type { Serialize, SerializeStateOptions } from "./serializeState";
|
|
26
|
+
|
|
9
27
|
export type { StaticPathEntries } from "./getStaticPaths";
|
|
@@ -1,6 +1,50 @@
|
|
|
1
1
|
import { serializeState } from "./serializeState";
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type { Serialize } from "./serializeState";
|
|
4
|
+
import type { Params, State } from "@real-router/types";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Parsed shape produced by {@link serializeRouterState} (after `JSON.parse`).
|
|
8
|
+
*
|
|
9
|
+
* Identical to {@link State} minus `transition` (per-navigation `TransitionMeta`
|
|
10
|
+
* is meaningless after hydration; the client builds its own on commit). Used as
|
|
11
|
+
* the input shape for {@link hydrateRouter} and as the type of the one-shot
|
|
12
|
+
* hydration scratchpad consumed by SSR loader plugins.
|
|
13
|
+
*/
|
|
14
|
+
export type SerializedRouterState<P extends Params = Params> = Omit<
|
|
15
|
+
State<P>,
|
|
16
|
+
"transition"
|
|
17
|
+
>;
|
|
18
|
+
|
|
19
|
+
export interface SerializeRouterStateOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Plugin context namespaces to strip from the serialized output.
|
|
22
|
+
* Use when a plugin populates `state.context.<ns>` with non-JSON-serializable
|
|
23
|
+
* values (e.g., RSC payload: ReactNode trees containing functions/symbols).
|
|
24
|
+
*
|
|
25
|
+
* @default []
|
|
26
|
+
*/
|
|
27
|
+
excludeContext?: readonly string[];
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Custom serializer (e.g., `devalue.stringify` / `superjson.stringify`) to
|
|
31
|
+
* support non-JSON types in `state.params` and `state.context.<ns>` payloads
|
|
32
|
+
* (Date / Map / Set / RegExp / BigInt). Defaults to `JSON.stringify`.
|
|
33
|
+
*
|
|
34
|
+
* Pair with the matching `deserialize` on `hydrateRouter` to round-trip the
|
|
35
|
+
* extended types on the client.
|
|
36
|
+
*
|
|
37
|
+
* @default JSON.stringify
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* import * as devalue from "devalue";
|
|
42
|
+
*
|
|
43
|
+
* const json = serializeRouterState(state, { serialize: devalue.stringify });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
serialize?: Serialize;
|
|
47
|
+
}
|
|
4
48
|
|
|
5
49
|
/**
|
|
6
50
|
* XSS-safe JSON serialization of router State for SSR → client transport (#563).
|
|
@@ -11,6 +55,10 @@ import type { State } from "@real-router/types";
|
|
|
11
55
|
* preserved as-is — server's `state.context.data` from `ssr-data-plugin` and
|
|
12
56
|
* any other plugin claims travel to the client untouched).
|
|
13
57
|
*
|
|
58
|
+
* Pass `options.excludeContext` to strip specific namespaces from the output —
|
|
59
|
+
* required for plugins that publish non-JSON-serializable values (e.g., RSC
|
|
60
|
+
* `ReactNode` trees from `@real-router/rsc-server-plugin`).
|
|
61
|
+
*
|
|
14
62
|
* @example
|
|
15
63
|
* ```typescript
|
|
16
64
|
* // Server
|
|
@@ -20,12 +68,53 @@ import type { State } from "@real-router/types";
|
|
|
20
68
|
* // Client
|
|
21
69
|
* await hydrateRouter(router, window.__SSR_STATE__);
|
|
22
70
|
* ```
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* // With RSC plugin: strip the "rsc" namespace before transport
|
|
75
|
+
* const state = await router.start(url);
|
|
76
|
+
* const json = serializeRouterState(state, { excludeContext: ["rsc"] });
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* // Non-JSON types (Date / Map / Set / RegExp / BigInt) via devalue (#606)
|
|
82
|
+
* import * as devalue from "devalue";
|
|
83
|
+
*
|
|
84
|
+
* const json = serializeRouterState(state, { serialize: devalue.stringify });
|
|
85
|
+
* // On the client:
|
|
86
|
+
* await hydrateRouter(router, json, { deserialize: devalue.parse });
|
|
87
|
+
* ```
|
|
23
88
|
*/
|
|
24
|
-
export function serializeRouterState(
|
|
25
|
-
|
|
89
|
+
export function serializeRouterState(
|
|
90
|
+
state: State,
|
|
91
|
+
options?: SerializeRouterStateOptions,
|
|
92
|
+
): string {
|
|
93
|
+
const exclude = options?.excludeContext;
|
|
94
|
+
|
|
95
|
+
let context = state.context;
|
|
96
|
+
|
|
97
|
+
if (exclude?.length) {
|
|
98
|
+
const filtered: Record<string, unknown> = {};
|
|
99
|
+
const source = state.context as Record<string, unknown>;
|
|
100
|
+
|
|
101
|
+
for (const key of Object.keys(source)) {
|
|
102
|
+
if (!exclude.includes(key)) {
|
|
103
|
+
filtered[key] = source[key];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
context = filtered;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const payload = {
|
|
26
111
|
name: state.name,
|
|
27
112
|
params: state.params,
|
|
28
113
|
path: state.path,
|
|
29
|
-
context
|
|
30
|
-
}
|
|
114
|
+
context,
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
return options?.serialize
|
|
118
|
+
? serializeState(payload, { serialize: options.serialize })
|
|
119
|
+
: serializeState(payload);
|
|
31
120
|
}
|
|
@@ -1,21 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom serializer signature for {@link serializeState} (#606).
|
|
3
|
+
*
|
|
4
|
+
* Compatible with `JSON.stringify` (default) as well as `devalue.stringify`,
|
|
5
|
+
* `superjson.stringify`, or any user-supplied function that returns a JSON
|
|
6
|
+
* string. The output is run through XSS-safe character escapes regardless
|
|
7
|
+
* of which serializer produced it.
|
|
8
|
+
*/
|
|
9
|
+
export type Serialize = (data: unknown) => string;
|
|
10
|
+
|
|
11
|
+
export interface SerializeStateOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Custom serializer (e.g., `devalue.stringify` / `superjson.stringify`) to
|
|
14
|
+
* support non-JSON types (Date / Map / Set / RegExp / BigInt). Defaults to
|
|
15
|
+
* `JSON.stringify`. Output is still XSS-escaped.
|
|
16
|
+
*
|
|
17
|
+
* @default JSON.stringify
|
|
18
|
+
*/
|
|
19
|
+
serialize?: Serialize;
|
|
20
|
+
}
|
|
21
|
+
|
|
1
22
|
/**
|
|
2
23
|
* XSS-safe JSON serialization for embedding data in HTML `<script>` tags.
|
|
3
24
|
*
|
|
4
25
|
* Escapes `<`, `>`, and `&` to their Unicode equivalents to prevent
|
|
5
26
|
* injection via `</script>` or HTML entities inside inline scripts.
|
|
6
27
|
*
|
|
28
|
+
* Pass `options.serialize` to use a custom serializer such as `devalue` or
|
|
29
|
+
* `superjson` for non-JSON types (Date/Map/Set/RegExp/BigInt). The serializer
|
|
30
|
+
* must return a string; XSS-escape is applied to its output.
|
|
31
|
+
*
|
|
7
32
|
* @example
|
|
8
33
|
* ```typescript
|
|
9
34
|
* const json = serializeState({ name: "home", path: "/" });
|
|
10
35
|
* const html = `<script>window.__STATE__=${json}</script>`;
|
|
11
36
|
* ```
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* import * as devalue from "devalue";
|
|
41
|
+
*
|
|
42
|
+
* const json = serializeState(
|
|
43
|
+
* { date: new Date(), tags: new Set(["a", "b"]) },
|
|
44
|
+
* { serialize: devalue.stringify },
|
|
45
|
+
* );
|
|
46
|
+
* ```
|
|
12
47
|
*/
|
|
13
|
-
export function serializeState(
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
59
|
+
return serialized
|
|
19
60
|
.replaceAll("<", String.raw`\u003c`)
|
|
20
61
|
.replaceAll(">", String.raw`\u003e`)
|
|
21
62
|
.replaceAll("&", String.raw`\u0026`);
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
const e=require(`./RouterError-BmvAyBlx.js`),t=require(`./internals-na15rxo_.js`);let n=require(`@real-router/logger`),r=require(`@real-router/fsm`);const i={maxListeners:0,warnListeners:0,maxEventDepth:0};var a=class extends Error{},o=class{#e=new Map;#t=null;#n=i;#r;#i;constructor(e){e?.limits&&(this.#n=e.limits),this.#r=e?.onListenerError??null,this.#i=e?.onListenerWarn??null}static validateCallback(e,t){if(typeof e!=`function`)throw TypeError(`Expected callback to be a function for event ${t}`)}setLimits(e){this.#n=e}on(e,t){let n=this.#c(e);if(n.has(t))throw Error(`Duplicate listener for "${e}"`);let{maxListeners:r,warnListeners:i}=this.#n;if(i!==0&&n.size===i&&this.#i?.(e,i),r!==0&&n.size>=r)throw Error(`Listener limit (${r}) reached for "${e}"`);return n.add(t),()=>{this.off(e,t)}}off(e,t){this.#e.get(e)?.delete(t)}emit(e,t,n,r,i){let a=this.#e.get(e);if(!a||a.size===0)return;let o=arguments.length-1;if(this.#n.maxEventDepth===0){this.#a(a,e,o,t,n,r,i);return}this.#s(a,e,o,t,n,r,i)}clearAll(){this.#e.clear(),this.#t=null}listenerCount(e){return this.#e.get(e)?.size??0}#a(e,t,n,r,i,a,o){if(e.size===1){let[s]=e;try{this.#o(s,n,r,i,a,o)}catch(e){this.#r?.(t,e)}return}let s=[...e];for(let e of s)try{this.#o(e,n,r,i,a,o)}catch(e){this.#r?.(t,e)}}#o(e,t,n,r,i,a){switch(t){case 0:e();break;case 1:e(n);break;case 2:e(n,r);break;case 3:e(n,r,i);break;default:e(n,r,i,a)}}#s(e,t,n,r,i,o,s){this.#t??=new Map;let c=this.#t,l=c.get(t)??0;if(l>=this.#n.maxEventDepth)throw new a(`Maximum recursion depth (${this.#n.maxEventDepth}) exceeded for event: ${t}`);try{c.set(t,l+1);let u=e.size===1?e:[...e];for(let e of u)try{this.#o(e,n,r,i,o,s)}catch(e){if(e instanceof a)throw e;this.#r?.(t,e)}}finally{c.set(t,c.get(t)-1)}}#c(e){let t=this.#e.get(e);if(t)return t;let n=new Set;return this.#e.set(e,n),n}};const s={IDLE:`IDLE`,STARTING:`STARTING`,READY:`READY`,TRANSITION_STARTED:`TRANSITION_STARTED`,LEAVE_APPROVED:`LEAVE_APPROVED`,DISPOSED:`DISPOSED`},c={START:`START`,STARTED:`STARTED`,NAVIGATE:`NAVIGATE`,LEAVE_APPROVE:`LEAVE_APPROVE`,COMPLETE:`COMPLETE`,FAIL:`FAIL`,CANCEL:`CANCEL`,STOP:`STOP`,DISPOSE:`DISPOSE`},l={initial:s.IDLE,context:null,transitions:{[s.IDLE]:{[c.START]:s.STARTING,[c.DISPOSE]:s.DISPOSED},[s.STARTING]:{[c.STARTED]:s.READY,[c.FAIL]:s.IDLE},[s.READY]:{[c.NAVIGATE]:s.TRANSITION_STARTED,[c.FAIL]:s.READY,[c.STOP]:s.IDLE},[s.TRANSITION_STARTED]:{[c.NAVIGATE]:s.TRANSITION_STARTED,[c.LEAVE_APPROVE]:s.LEAVE_APPROVED,[c.CANCEL]:s.READY,[c.FAIL]:s.READY},[s.LEAVE_APPROVED]:{[c.NAVIGATE]:s.TRANSITION_STARTED,[c.COMPLETE]:s.READY,[c.CANCEL]:s.READY,[c.FAIL]:s.READY},[s.DISPOSED]:{}}};function u(){return new r.FSM(l)}function d(e){if(!e||typeof e!=`object`||e.constructor!==Object)throw TypeError(`dependencies must be a plain object`);for(let t in e)if(Object.getOwnPropertyDescriptor(e,t)?.get)throw TypeError(`dependencies cannot contain getters: "${t}"`)}function f(e,t){for(let n of e){let e=n;if(typeof e!=`object`||!e||Array.isArray(e))throw TypeError(`route must be a non-array object`);t?.routes.guardRouteCallbacks(n),t?.routes.guardNoAsyncCallbacks(n);let r=n.children;r&&f(r,t)}}function p(t={}){let n=Object.create(null);for(let e in t)t[e]!==void 0&&(n[e]=t[e]);return{dependencies:n,limits:e.a}}function m(e){return`(${e.replaceAll(/(^<|>$)/g,``)})`}const ee=/([:*])([^/?<]+)(<[^>]+>)?(\?)?/g,te=/([:*][^/?<]+(?:<[^>]+>)?)\?(?=\/|$)/g,h=/\?(.+)$/;function g(e){let t=[],n=[],r=[],i={},a=new Map,o=e.replaceAll(te,`$1`),s=h.exec(o);if(s!==null){let t=s[1].split(`&`);for(let e of t){let t=e.trim();t.length>0&&(n.push(t),i[t]=`query`)}e=e.slice(0,s.index)}let c;for(;(c=ee.exec(e))!==null;){let e=c[1],n=c[2],o=c[3];if(e===`*`)r.push(n),t.push(n),i[n]=`url`;else if(t.push(n),i[n]=`url`,o){let e=`^${m(o)}$`;a.set(n,{pattern:new RegExp(e),constraint:o})}}return{urlParams:t,queryParams:n,spatParams:r,paramTypeMap:i,constraintPatterns:a,pathPattern:e}}const ne=/[^\w!$'()*+,.:;|~-]/gu,re=/[^\w!$'()*+,.:;|~-]/u,_={default:e=>re.test(e)?e.replaceAll(ne,e=>encodeURIComponent(e)):e,uri:encodeURI,uriComponent:encodeURIComponent,none:e=>e},ie={default:decodeURIComponent,uri:decodeURI,uriComponent:decodeURIComponent,none:e=>e};function v(){return{staticChildren:Object.create(null),hasChildren:!1,paramChild:void 0,splatChild:void 0,route:void 0,slashChildRoute:void 0}}function y(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}function ae(e,t){return e===``?t:t===``?e:e+t}function oe(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function se(e){let t=0;for(;t<e.length;)if(e.codePointAt(t)===37){if(t+2>=e.length)return!1;let n=e.codePointAt(t+1)??0,r=e.codePointAt(t+2)??0;if(!oe(n)||!oe(r))return!1;t+=3}else t++;return!0}const b=/<[^>]*>/g;function ce(e,t,n,r,i){let a=t.fullName===``;a||r.push(t);let o=t.absolute,s=t.paramMeta.pathPattern,c=o&&s.startsWith(`~`)?s.slice(1):s,l=(o?c:s).replaceAll(b,``),u=o?l:ae(n,l),d=i;a||(d=le(e,t,u,o?``:n,r,i));for(let n of t.children.values())ce(e,n,u,r,d);a||r.pop()}function le(e,t,n,r,i,a){let o=pe(n,r),s=Object.freeze([...i]),c=ue(s),l=y(n),u=ye(e.rootQueryParams,i),d=be(i),{buildStaticParts:f,buildParamSlots:p}=ve(o?y(r):l,o?i.slice(0,-1):i,e.options.urlParamsEncoding),m={name:t.fullName,parent:a,depth:i.length-1,matchSegments:s,meta:c,declaredQueryParams:u,declaredQueryParamsSet:new Set(u),hasTrailingSlash:n.length>1&&n.endsWith(`/`),constraintPatterns:d,hasConstraints:d.size>0,buildStaticParts:f,buildParamSlots:p,buildParamNamesSet:new Set(p.map(e=>e.paramName))};return t.paramMeta.urlParams.length===0&&(m.cachedResult=Object.freeze({segments:m.matchSegments,params:Object.freeze({}),meta:m.meta})),e.routesByName.set(t.fullName,m),e.segmentsByName.set(t.fullName,s),e.metaByName.set(t.fullName,c),o?de(e,m,r):fe(e,m,n,l,t),m}function ue(e){let t={};for(let n of e)t[n.fullName]=n.paramTypeMap;return Object.freeze(t)}function de(e,t,n){he(e,t,n);let r=y(n),i=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.has(i)&&e.staticCache.set(i,t)}function fe(e,t,n,r,i){if(me(e,t,n),i.paramMeta.urlParams.length===0){let n=e.options.caseSensitive?r:r.toLowerCase();e.staticCache.set(n,t)}}function pe(e,t){return y(e)===y(t)}function me(e,t,n){let r=y(n);if(r===`/`){e.root.route=t;return}x(e,e.root,r,1,t)}function x(e,t,n,r,i){let a=n.length;for(;r<=a;){let o=n.indexOf(`/`,r),s=o===-1?a:o,c=n.slice(r,s);if(c.endsWith(`?`)){let r=c.slice(1).replaceAll(b,``).replace(/\?$/,``);t.paramChild??={node:v(),name:r},x(e,t.paramChild.node,n,s+1,i),s>=a?t.route??=i:x(e,t,n,s+1,i);return}t=S(e,t,c),r=s+1}t.route=i}function he(e,t,n){let r=ge(e,n);r.slashChildRoute=t}function ge(e,t){return _e(e,e.root,t)}function _e(e,t,n){let r=y(n);if(r===`/`||r===``)return t;let i=t,a=1,o=r.length;for(;a<=o;){let t=r.indexOf(`/`,a),n=t===-1?o:t;if(n<=a)break;let s=r.slice(a,n);i=S(e,i,s),a=n+1}return i}function S(e,t,n){if(n.startsWith(`*`)){let e=n.slice(1);return t.splatChild??={node:v(),name:e},t.hasChildren=!0,t.splatChild.node}if(n.startsWith(`:`)){let e=n.slice(1).replaceAll(b,``).replace(/\?$/,``);return t.paramChild??={node:v(),name:e},t.hasChildren=!0,t.paramChild.node}let r=e.options.caseSensitive?n:n.toLowerCase();return r in t.staticChildren||(t.staticChildren[r]=v(),t.hasChildren=!0),t.staticChildren[r]}function ve(e,t,n){let r=new Set,i=new Set;for(let e of t){for(let t of e.paramMeta.urlParams)r.add(t);for(let t of e.paramMeta.spatParams)i.add(t)}if(r.size===0)return{buildStaticParts:[e],buildParamSlots:[]};let a=[],o=[],s=/[:*]([\w]+)(?:<[^>]*>)?(\?)?/gu,c=0,l;for(;(l=s.exec(e))!==null;){let t=l[1],r=l[2]===`?`;a.push(e.slice(c,l.index));let s=i.has(t)?e=>{let t=_[n],r=e.split(`/`),i=t(r[0]);for(let e=1;e<r.length;e++)i+=`/${t(r[e])}`;return i}:_[n];o.push({paramName:t,isOptional:r,encoder:s}),c=l.index+l[0].length}return a.push(e.slice(c)),{buildStaticParts:a,buildParamSlots:o}}function ye(e,t){let n=[];e.length>0&&n.push(...e);for(let e of t)e.paramMeta.queryParams.length>0&&n.push(...e.paramMeta.queryParams);return n}function be(e){let t=new Map;for(let n of e)for(let[e,r]of n.paramMeta.constraintPatterns)t.set(e,r);return t}var xe=class{get options(){return this.#e}#e;#t=v();#n=new Map;#r=new Map;#i=new Map;#a=new Map;#o={cleanPath:``,normalized:``,queryString:void 0};#s=``;#c=[];#l=``;#u;#d;constructor(e){this.#e={caseSensitive:e.caseSensitive??!0,strictTrailingSlash:e.strictTrailingSlash??!1,strictQueryParams:e.strictQueryParams??!1,urlParamsEncoding:e.urlParamsEncoding??`default`,parseQueryString:e.parseQueryString,buildQueryString:e.buildQueryString},this.#u=this.#e.caseSensitive,this.#d=this.#e.urlParamsEncoding===`none`?null:ie[this.#e.urlParamsEncoding]}registerTree(e){this.#c=e.paramMeta.queryParams,ce({root:this.#t,options:this.#e,routesByName:this.#n,segmentsByName:this.#r,metaByName:this.#i,staticCache:this.#a,rootQueryParams:this.#c},e,``,[],null)}match(e){if(!this.#g(e))return;let{cleanPath:t,normalized:n,queryString:r}=this.#o,i=this.#u?n:n.toLowerCase(),a=this.#a.get(i);if(a)return this.#e.strictTrailingSlash&&!this.#y(t,a)?void 0:r===void 0&&a.cachedResult?a.cachedResult:this.#v(a,{},r);let o={},s=this.#b(n,o);if(s&&!(this.#e.strictTrailingSlash&&!this.#y(t,s))&&!(s.hasConstraints&&!this.#w(o,s))&&this.#C(o))return this.#v(s,o,r)}buildPath(e,t,n){let r=this.#n.get(e);if(!r)throw Error(`[SegmentMatcher.buildPath] '${e}' is not defined`);r.hasConstraints&&t&&this.#f(r,e,t);let i=this.#p(r,t),a=this.#m(i,n?.trailingSlash),o=this.#h(r,t,n?.queryParamsMode);return a+(o?`?${o}`:``)}getSegmentsByName(e){return this.#r.get(e)}getMetaByName(e){return this.#i.get(e)}hasRoute(e){return this.#n.has(e)}setRootPath(e){this.#s=e}#f(e,t,n){for(let[r,i]of e.constraintPatterns){let e=n[r];if(e!=null){let n=typeof e==`object`?JSON.stringify(e):String(e);if(!i.pattern.test(n))throw Error(`[SegmentMatcher.buildPath] '${t}' — param '${r}' value '${n}' does not match constraint '${i.constraint}'`)}}}#p(e,t){let n=e.buildStaticParts,r=e.buildParamSlots;if(r.length===0)return this.#s+n[0];let i=this.#s+n[0];for(let[e,a]of r.entries()){let r=t?.[a.paramName];if(r==null){if(!a.isOptional)throw Error(`[SegmentMatcher.buildPath] Missing required param '${a.paramName}'`);i.length>1&&i.endsWith(`/`)&&(i=i.slice(0,-1)),i+=n[e+1];continue}let o;o=typeof r==`string`?r:typeof r==`object`?JSON.stringify(r):String(r);let s=a.encoder(o);i+=s+n[e+1]}return i}#m(e,t){return t===`always`&&!e.endsWith(`/`)?`${e}/`:t===`never`&&e!==`/`&&e.endsWith(`/`)?e.slice(0,-1):e}#h(e,t,n){if(!t||e.declaredQueryParams.length===0&&n!==`loose`)return``;let r={},i=!1;for(let n of e.declaredQueryParams)n in t&&(r[n]=t[n],i=!0);if(n===`loose`)for(let n in t)Object.hasOwn(t,n)&&!e.declaredQueryParamsSet.has(n)&&!e.buildParamNamesSet.has(n)&&(r[n]=t[n],i=!0);return i?this.#e.buildQueryString(r):``}#g(e){if(e===``&&(e=`/`),e.codePointAt(0)!==47)return!1;let t=this.#s.length;if(t>0){if(e.length<t||!e.startsWith(this.#s))return!1;e=e.length===t?`/`:e.slice(t)}let n=this.#_(e);if(n===-2)return!1;n===-3&&(e=this.#l);let r=n>=0?e.slice(0,n):e,i=n>=0?e.slice(n+1):void 0,a=y(r);return this.#o.cleanPath=r,this.#o.normalized=a,this.#o.queryString=i,!0}#_(e){let t=!1;for(let n=0;n<e.length;n++){let r=e.codePointAt(n);if(r===35)return this.#l=e.slice(0,n),-3;if(r===63)return n;if(r>=128)return-2;if(r===47){if(t)return-2;t=!0}else t=!1}return-1}#v(e,t,n){if(n!==void 0){let r=this.#e.parseQueryString(n);if(this.#e.strictQueryParams){let n=e.declaredQueryParamsSet;for(let e in r){if(!n.has(e))return;t[e]=r[e]}}else for(let e in r)t[e]=r[e]}return{segments:e.matchSegments,params:t,meta:e.meta}}#y(e,t){return(e.length>1&&e.endsWith(`/`))===t.hasTrailingSlash}#b(e,t){return e.length===1?this.#t.slashChildRoute??this.#t.route:this.#x(this.#t,e,1,t)}#x(e,t,n,r){let i=e,a=t.length,o=this.#u;for(;n<=a;){let e=t.indexOf(`/`,n),s=e===-1?a:e,c=t.slice(n,s),l=o?c:c.toLowerCase(),u;if(l in i.staticChildren)u=i.staticChildren[l];else if(i.paramChild)u=i.paramChild.node,r[i.paramChild.name]=c;else if(i.splatChild)return this.#S(i.splatChild,t,n,r);else return;i=u,n=s+1}return i.slashChildRoute??i.route}#S(e,t,n,r){let i=e.node;if(!i.hasChildren)return r[e.name]=t.slice(n),i.route;let a={},o=this.#x(i,t,n,a);return o?(Object.assign(r,a),o):(r[e.name]=t.slice(n),i.route)}#C(e){let t=this.#d;if(!t)return!0;for(let n in e){let r=e[n];if(r.includes(`%`)){if(!se(r))return!1;e[n]=t(r)}}return!0}#w(e,t){for(let[n,r]of t.constraintPatterns)if(!r.pattern.test(e[n]))return!1;return!0}};const C=e=>{let t=e.indexOf(`%`),n=e.indexOf(`+`);if(t===-1&&n===-1)return e;let r=n===-1?e:e.replaceAll(`+`,` `);return t===-1?r:decodeURIComponent(r)},Se=(e,t)=>{if(e===void 0)return t.boolean.decodeUndefined();let n=t.boolean.decodeRaw(e);if(n!==null)return n;let r=C(e),i=t.number.decode(r);return i===null?t.boolean.decodeValue(r):i},w=e=>{let t=typeof e;if(t!==`string`&&t!==`number`&&t!==`boolean`)throw TypeError(`[search-params] Array element must be a string, number, or boolean — received ${t===`object`&&e===null?`null`:t}`);return encodeURIComponent(e)},Ce={none:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${w(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}=${w(t[r])}`;return n}},brackets:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[]=${w(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[]=${w(t[r])}`;return n}},index:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}[0]=${w(t[0])}`;for(let r=1;r<t.length;r++)n+=`&${e}[${r}]=${w(t[r])}`;return n}},comma:{encodeArray:(e,t)=>{if(t.length===0)return``;let n=`${e}=${w(t[0])}`;for(let e=1;e<t.length;e++)n+=`,${w(t[e])}`;return n},decodeValue:e=>e.includes(`,`)?e.split(`,`):null}},we={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:()=>null,decodeValue:e=>e},Te={encode:(e,t)=>`${e}=${t}`,decodeUndefined:()=>null,decodeRaw:e=>e===`true`?!0:e===`false`?!1:null,decodeValue:e=>e},Ee={encode:(e,t)=>t?e:`${e}=false`,decodeUndefined:()=>!0,decodeRaw:()=>null,decodeValue:e=>e},De={none:we,auto:Te,"empty-true":Ee},Oe={default:{encode:e=>e},hidden:{encode:()=>``}},T={auto:{decode:e=>{let t=e.length;if(t===0||t>1&&e.codePointAt(0)===48&&e.codePointAt(1)!==46)return null;let n=!1;for(let r=0;r<t;r++){let i=e.codePointAt(r);if(!(i!==void 0&&i>=48&&i<=57)){if(i===46&&!n&&r!==0&&r!==t-1){n=!0;continue}return null}}let r=Number(e);return!Number.isSafeInteger(r)&&!n?null:r}},none:{decode:()=>null}},ke=(e,t,n,r)=>({boolean:De[t],null:Oe[n],number:T[r],array:Ce[e]}),Ae={boolean:De.auto,null:Oe.default,number:T.auto,array:Ce.none},E={arrayFormat:`none`,booleanFormat:`auto`,nullFormat:`default`,numberFormat:`auto`},je={...E,strategies:Ae},Me=e=>{if(!e||e.arrayFormat===void 0&&e.booleanFormat===void 0&&e.nullFormat===void 0&&e.numberFormat===void 0)return je;let t=e.arrayFormat??E.arrayFormat,n=e.booleanFormat??E.booleanFormat,r=e.nullFormat??E.nullFormat,i=e.numberFormat??E.numberFormat;return{arrayFormat:t,booleanFormat:n,nullFormat:r,numberFormat:i,strategies:ke(t,n,r,i)}},D=e=>encodeURIComponent(e),Ne=(e,t,n)=>{let r=D(e);switch(typeof t){case`string`:case`number`:return`${r}=${D(t)}`;case`boolean`:return n.strategies.boolean.encode(r,t);case`object`:return t===null?n.strategies.null.encode(r):Array.isArray(t)?n.strategies.array.encodeArray(r,t):`${r}=${D(t)}`;default:return`${r}=${D(t)}`}},Pe=e=>{let t=e.indexOf(`?`);return t===-1?e:e.slice(t+1)};function Fe(e,t,n,r){let i=e[t];i===void 0?e[t]=r?[n]:n:Array.isArray(i)?i.push(n):e[t]=[i,n]}function Ie(e,t,n,r,i){return i?Se(r?e.slice(t+1,n):void 0,i):r?C(e.slice(t+1,n)):null}function Le(e,t,n,r,i){let a=e.indexOf(`=`,t),o=a!==-1&&a<n,s=o?a:n,c=s,l=!1;for(let n=t;n<s;n++)if(e.codePointAt(n)===91){c=n,l=!0;break}let u=C(e.slice(t,c));if(!l&&o&&i?.array.decodeValue){let t=e.slice(a+1,n),o=i.array.decodeValue(t);if(o){for(let e of o)Fe(r,u,Se(e,i),!0);return}}Fe(r,u,Ie(e,a,n,o,i),l)}const Re=(e,t)=>{let n=Pe(e);if(n===``||n===`?`)return{};if(!t)return ze(n);let r=Me(t),i={},a=0,o=n.length;for(;a<o;){let e=n.indexOf(`&`,a);e===-1&&(e=o),Le(n,a,e,i,r.strategies),a=e+1}return i};function ze(e){let t={};return Be(e,t),t}function Be(e,t){let n=0,r=e.length;for(;n<r;){let i=e.indexOf(`&`,n);i===-1&&(i=r),Le(e,n,i,t),n=i+1}}const Ve=(e,t)=>{let n=Object.keys(e);if(n.length===0)return``;let r=Me(t),i=[];for(let t of n){let n=e[t];if(n===void 0)continue;let a=Ne(t,n,r);a&&i.push(a)}return i.join(`&`)};function O(e,t){let n=e.path,r=n.startsWith(`~`),i=r?n.slice(1):n,a={name:e.name,path:i,absolute:r,children:[],parent:t,nonAbsoluteChildren:[],fullName:``};if(e.children)for(let t of e.children){let e=O(t,a);a.children.push(e)}return a}function He(e,t,n){let r=O({name:e,path:t},null);for(let e of n){let t=O(e,r);r.children.push(t)}return r}const Ue=Object.freeze(new Map),We=Object.freeze([]);function Ge(e){return e.parent?.name?`${e.parent.fullName}.${e.name}`:e.name}function Ke(e,t){return e.endsWith(`/`)&&t.startsWith(`/`)?e+t.slice(1):e+t}function qe(e){if(!e.path)return null;let{urlParams:t,queryParams:n,spatParams:r}=e.paramMeta;if(t.length>0||n.length>0||r.length>0)return null;if(e.absolute)return e.path;let i=e.parent;return i?.path?i.staticPath===null?null:Ke(i.staticPath,e.path):e.path}function Je(e){let t=new Map;for(let n of e)t.set(n.name,n);return t}function Ye(e,t,n){let r=[],i=[];for(let a of e){let e=Xe(a,t,n);r.push(e),e.absolute||i.push(e)}return{childrenMap:Je(r),nonAbsoluteChildren:i}}function Xe(e,t,n){let r=g(e.path),i=r.paramTypeMap,a={name:e.name,path:e.path,absolute:e.absolute,parent:t,children:void 0,paramMeta:r,nonAbsoluteChildren:void 0,fullName:``,staticPath:null,paramTypeMap:i};if(a.fullName=Ge(a),a.staticPath=qe(a),e.children.length===0)a.children=Ue,a.nonAbsoluteChildren=We;else{let{childrenMap:t,nonAbsoluteChildren:r}=Ye(e.children,a,n);a.children=t,a.nonAbsoluteChildren=r}return n&&(e.children.length>0&&(Object.freeze(a.nonAbsoluteChildren),Object.freeze(a.children)),Object.freeze(i),Object.freeze(a)),a}function Ze(e,t=!0){return Xe(e,null,t)}function Qe(e,t){let n=[];return{add(e){return n.push(e),this},addMany(e){return n.push(...e),this},build(r){return Ze(He(e,t,n),!r?.skipFreeze)}}}function $e(e,t,n,r){return Qe(e,t).addMany(n).build(r)}function k(e){let t=e.absolute?`~${e.path}`:e.path,n={name:e.name,path:t};return e.children.size>0&&(n.children=Array.from(e.children.values(),k)),n}function et(e){return Array.from(e.children.values(),k)}function tt(e){let t=e?.queryParams;return new xe({...e?.caseSensitive===void 0?void 0:{caseSensitive:e.caseSensitive},...e?.strictTrailingSlash===void 0?void 0:{strictTrailingSlash:e.strictTrailingSlash},...e?.strictQueryParams===void 0?void 0:{strictQueryParams:e.strictQueryParams},...e?.urlParamsEncoding===void 0?void 0:{urlParamsEncoding:e.urlParamsEncoding},parseQueryString:e=>Re(e,t),buildQueryString:e=>Ve(e,t)})}const nt={defaultRoute:``,defaultParams:{},trailingSlash:`preserve`,queryParamsMode:`loose`,queryParams:E,urlParamsEncoding:`default`,allowNotFound:!0,rewritePathOnMatch:!0};function rt(e){Object.freeze(e);for(let t of Object.keys(e)){let n=e[t];n&&typeof n==`object`&&n.constructor===Object&&rt(n)}return e}function it(e,t){return typeof e==`function`?e(t):e}function at(e){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`[router.constructor] options must be a plain object`)}var ot=class{#e;constructor(e={}){this.#e=rt({...nt,...e})}static validateOptionsIsObject(e){at(e)}get(){return this.#e}};function A(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!A(e[n],t[n]))return!1;return!0}return!1}const st=new WeakMap;function ct(e){return st.get(e)}function lt(e,t){st.set(e,t)}var ut=class{#e=void 0;#t=void 0;#n;#r=new Map;get(){return this.#e}set(t){this.#t=this.#e,this.#e=t?e.r(t):void 0}getPrevious(){return this.#t}reset(){this.#e=void 0,this.#t=void 0,this.#r.clear()}setDependencies(e){this.#n=e}makeState(t,n,r,i,a){let o=this.#n.getDefaultParams(),s=Object.hasOwn(o,t),c;c=s?Object.freeze({...o[t],...n}):!n||n===e.s?e.s:Object.freeze({...n});let l={name:t,params:c,path:r??this.#n.buildPath(t,n),context:{},...!a&&{transition:e.o}};return i&<(l,i),a?l:e.r(l)}areStatesEqual(e,t,n=!0){if(!e||!t)return!!e==!!t;if(e.name!==t.name)return!1;if(n){let n=this.#i(e.name);for(let r of n)if(!A(e.params[r],t.params[r]))return!1;return!0}let r=Object.keys(e.params),i=Object.keys(t.params);if(r.length!==i.length)return!1;for(let n of r)if(!(n in t.params)||!A(e.params[n],t.params[n]))return!1;return!0}#i(e){let t=this.#r.get(e);if(t!==void 0)return t;let n=this.#n.getUrlParams(e);return this.#r.set(e,n),n}};const dt={[e.f.ROUTER_START]:e.d.ROUTER_START,[e.f.ROUTER_STOP]:e.d.ROUTER_STOP,[e.f.TRANSITION_SUCCESS]:e.d.TRANSITION_SUCCESS,[e.f.TRANSITION_START]:e.d.TRANSITION_START,[e.f.TRANSITION_LEAVE_APPROVE]:e.d.TRANSITION_LEAVE_APPROVE,[e.f.TRANSITION_ERROR]:e.d.TRANSITION_ERROR,[e.f.TRANSITION_CANCEL]:e.d.TRANSITION_CANCEL},ft=Object.keys(dt),j=`router.usePlugin`;function pt(e){if(!(e&&typeof e==`object`)||Array.isArray(e))throw TypeError(`[router.usePlugin] Plugin factory must return an object, got ${typeof e}`);if(typeof e.then==`function`)throw TypeError(`[router.usePlugin] Async plugin factories are not supported. Factory returned a Promise instead of a plugin object.`)}var mt=class t{#e=new Set;#t=new Set;#n;#r=e.a;#i=null;static validatePlugin(e){pt(e)}static validateNoDuplicatePlugins(e,t){for(let n of e)if(t(n))throw Error(`[router.usePlugin] Plugin factory already registered. To re-register, first unsubscribe the existing plugin.`)}setDependencies(e){this.#n=e}setLimits(e){
|
|
2
|
-
// eslint-disable-next-line sonarjs/void-use -- @preserve: limits passed to validator via RouterInternals; void suppresses TS6133 until plugin implements validateCountThresholds
|
|
3
|
-
this.#r=e,this.#r}setValidatorGetter(e){this.#i=e}count(){return this.#e.size}use(...e){if(this.#i?.()?.plugins.validateCountThresholds(this.#e.size+e.length),e.length===1){let t=e[0],r=this.#o(t);this.#e.add(t);let i=!1,a=()=>{if(!i){i=!0,this.#e.delete(t),this.#t.delete(a);try{r()}catch(e){n.logger.error(j,`Error during cleanup:`,e)}}};return this.#t.add(a),a}let t=this.#a(e),r=[];try{for(let e of t){let t=this.#o(e);r.push({factory:e,cleanup:t})}}catch(e){for(let{cleanup:e}of r)try{e()}catch(e){n.logger.error(j,`Cleanup error:`,e)}throw e}for(let{factory:e}of r)this.#e.add(e);let i=!1,a=()=>{if(!i){i=!0,this.#t.delete(a);for(let{factory:e}of r)this.#e.delete(e);for(let{cleanup:e}of r)try{e()}catch(e){n.logger.error(j,`Error during cleanup:`,e)}}};return this.#t.add(a),a}getAll(){return[...this.#e]}has(e){return this.#e.has(e)}disposeAll(){for(let e of this.#t)e();this.#e.clear(),this.#t.clear()}#a(e){let t=new Set;for(let n of e)t.has(n)?this.#i?.()?.plugins.warnBatchDuplicates(e):t.add(n);return t}#o(e){let n=this.#n.compileFactory(e);t.validatePlugin(n),this.#i?.()?.plugins.validatePluginKeys(n),Object.freeze(n);let r=[];for(let e of ft)e in n&&(typeof n[e]==`function`?(r.push(this.#n.addEventListener(dt[e],n[e])),e===`onStart`&&this.#n.canNavigate()&&this.#i?.()?.plugins.warnPluginAfterStart(e)):this.#i?.()?.plugins.warnPluginMethodType(e));return()=>{for(let e of r)e();typeof n.teardown==`function`&&n.teardown()}}};function ht(e){let t=()=>e;return()=>t}var gt=class{#e=new Map;#t=new Map;#n=new Map;#r=new Map;#i=[this.#n,this.#r];#a=new Set;#o=new Set;#s=new Set;#c;#l=e.a;#u=null;setDependencies(e){this.#c=e}setLimits(e){
|
|
4
|
-
// eslint-disable-next-line sonarjs/void-use -- @preserve: Wave 3 validator reads limits via RouterInternals; void suppresses TS6133 until then
|
|
5
|
-
this.#l=e,this.#l}setValidatorGetter(e){this.#u=e}getHandlerCount(e){return e===`activate`?this.#t.size:this.#e.size}addCanActivate(e,t,n=!1){n?this.#o.add(e):this.#o.delete(e);let r=this.#t.has(e);this.#d(`activate`,e,t,this.#t,this.#r,`canActivate`,r)}addCanDeactivate(e,t,n=!1){n?this.#s.add(e):this.#s.delete(e);let r=this.#e.has(e);this.#d(`deactivate`,e,t,this.#e,this.#n,`canDeactivate`,r)}clearCanActivate(e){this.#t.delete(e),this.#r.delete(e),this.#o.delete(e)}clearCanDeactivate(e){this.#e.delete(e),this.#n.delete(e),this.#s.delete(e)}clearAll(){this.#t.clear(),this.#r.clear(),this.#e.clear(),this.#n.clear(),this.#o.clear(),this.#s.clear()}clearDefinitionGuards(){for(let e of this.#o)this.#t.delete(e),this.#r.delete(e);for(let e of this.#s)this.#e.delete(e),this.#n.delete(e);this.#o.clear(),this.#s.clear()}getFactories(){let e={},t={};for(let[t,n]of this.#e)e[t]=n;for(let[e,n]of this.#t)t[e]=n;return[e,t]}getFunctions(){return this.#i}canNavigateTo(e,t,n,r){for(let t of e)if(!this.#f(this.#n,t,n,r,`canNavigateTo`))return!1;for(let e of t)if(!this.#f(this.#r,e,n,r,`canNavigateTo`))return!1;return!0}#d(e,t,n,r,i,a,o){o?this.#u?.()?.lifecycle.warnOverwrite(t,e,a):this.#u?.()?.lifecycle.validateCountThresholds(r.size+1,a);let s=typeof n==`boolean`?ht(n):n;r.set(t,s),this.#a.add(t);try{let e=this.#c.compileFactory(s);if(typeof e!=`function`)throw TypeError(`[router.${a}] Factory must return a function, got ${typeof e}`);i.set(t,e)}catch(e){throw r.delete(t),e}finally{this.#a.delete(t)}}#f(e,t,n,r,i){let a=e.get(t);if(!a)return!0;try{let e=a(n,r);return typeof e==`boolean`?e:(this.#u?.()?.lifecycle.warnAsyncGuardSync(t,i),!1)}catch{return!1}}};function M(){return{decoders:Object.create(null),encoders:Object.create(null),defaultParams:Object.create(null),forwardMap:Object.create(null),forwardFnMap:Object.create(null)}}function _t(e,t){for(let n in e)if(e[n]!==t[n])return!1;return!0}function vt(e,t,n){for(let r in e)if(!(r in n)&&e[r]!==t[r])return!1;return!0}function yt(e,t){if(!t||!bt(e,t))return e;let n={};for(let r in e)t[r]!==`query`&&(n[r]=e[r]);return n}function bt(e,t){for(let n in e)if(t[n]===`query`)return!0;return!1}function N(e){let t={name:e.name,path:e.path};return e.children&&(t.children=e.children.map(e=>N(e))),t}function P(e,t,n=``){for(let r=0;r<e.length;r++){let i=e[r],a=n?`${n}.${i.name}`:i.name;if(a===t)return e.splice(r,1),!0;if(i.children&&t.startsWith(`${a}.`)&&P(i.children,t,a))return!0}return!1}function xt(e,t){for(let n of Object.keys(e))t(n)&&delete e[n]}function St(e,t){let n=t.search(/[?#]/),r=n===-1?t:t.slice(0,n);if(r===`/`||r.endsWith(`/`))return t;let i=e.search(/[?#]/),a=i===-1?e:e.slice(0,i);return a.length>1&&a.endsWith(`/`)?`${r}/${n===-1?``:t.slice(n)}`:t}function F(e,t,n=100){let r=new Set,i=[e],a=e;for(;t[a];){let e=t[a];if(r.has(e)){let t=i.indexOf(e),n=[...i.slice(t),e];throw Error(`Circular forwardTo: ${n.join(` → `)}`)}if(r.add(a),i.push(e),a=e,i.length>n)throw Error(`forwardTo chain exceeds maximum depth (${n}): ${i.join(` → `)}`)}return a}function I(e,t,n){let r=$e(``,t,e),i=tt(n);return i.registerTree(r),{tree:r,matcher:i}}function L(e){let t=I(e.definitions,e.rootPath,e.matcherOptions);e.tree=t.tree,e.matcher=t.matcher}function Ct(e){L(e),e.resolvedForwardMap=R(e.config)}function wt(e){Tt(e),L(e)}function Tt(e){e.definitions.length=0,Object.assign(e.config,M()),e.resolvedForwardMap=Object.create(null),e.routeCustomFields=Object.create(null)}function R(e){let t=Object.create(null);for(let n of Object.keys(e.forwardMap))t[n]=F(n,e.forwardMap);return t}function Et(e,t,r){if(e.canActivate){let r=typeof e.forwardTo==`string`?e.forwardTo:`[dynamic]`;n.logger.warn(`real-router`,`Route "${t}" has both forwardTo and canActivate. canActivate will be ignored because forwardTo creates a redirect (industry standard). Move canActivate to the target route "${r}".`)}if(e.canDeactivate){let r=typeof e.forwardTo==`string`?e.forwardTo:`[dynamic]`;n.logger.warn(`real-router`,`Route "${t}" has both forwardTo and canDeactivate. canDeactivate will be ignored because forwardTo creates a redirect (industry standard). Move canDeactivate to the target route "${r}".`)}if(typeof e.forwardTo==`function`){let n=e.forwardTo.constructor.name===`AsyncFunction`,r=e.forwardTo.toString().includes(`__awaiter`);if(n||r)throw TypeError(`forwardTo callback cannot be async for route "${t}". Async functions break matchPath/buildPath.`)}typeof e.forwardTo==`string`?r.forwardMap[t]=e.forwardTo:r.forwardFnMap[t]=e.forwardTo}function Dt(e,t,n,r,i,a,o){let s=new Set([`name`,`path`,`children`,`canActivate`,`canDeactivate`,`forwardTo`,`encodeParams`,`decodeParams`,`defaultParams`]),c=Object.fromEntries(Object.entries(e).filter(([e])=>!s.has(e)));Object.keys(c).length>0&&(r[t]=c),e.canActivate&&(o?o.addActivateGuard(t,e.canActivate):i.set(t,e.canActivate)),e.canDeactivate&&(o?o.addDeactivateGuard(t,e.canDeactivate):a.set(t,e.canDeactivate)),e.forwardTo&&Et(e,t,n),e.decodeParams&&(n.decoders[t]=t=>e.decodeParams?.(t)??t),e.encodeParams&&(n.encoders[t]=t=>e.encodeParams?.(t)??t),e.defaultParams&&(n.defaultParams[t]=e.defaultParams)}function z(e,t,n,r,i,a,o=``){for(let s of e){let e=o?`${o}.${s.name}`:s.name;Dt(s,e,t,n,r,i,a),s.children&&z(s.children,t,n,r,i,a,e)}}function Ot(e,t){let n=[],r=M(),i=Object.create(null),a=new Map,o=new Map;for(let t of e)n.push(N(t));let{tree:s,matcher:c}=I(n,``,t);return z(e,r,i,a,o,void 0,``),{definitions:n,config:r,tree:s,matcher:c,resolvedForwardMap:R(r),routeCustomFields:i,rootPath:``,matcherOptions:t,depsStore:void 0,lifecycleNamespace:void 0,pendingCanActivate:a,pendingCanDeactivate:o,treeOperations:{commitTreeChanges:Ct,resetStore:wt,nodeToDefinition:k}}}const B=[];Object.freeze(B);function kt(e){let t=e.length,n=[];for(let r=t-1;r>=0;r--)n.push(e[r]);return n}function At(e){let t=e.split(`.`),n=t.length,r=[t[0]],i=t[0].length;for(let a=1;a<n-1;a++)i+=1+t[a].length,r.push(e.slice(0,i));return r.push(e),r}function jt(e){let t=typeof e;return t===`string`||t===`number`||t===`boolean`}function Mt(e,t,n,r){let i=t[e];if(!i||typeof i!=`object`)return!0;for(let e of Object.keys(i)){let t=n.params[e],i=r.params[e];if(jt(t)&&jt(i)&&String(t)!==String(i))return!1}return!0}function Nt(e,t,n,r,i,a){for(let o=0;o<a;o++){let a=r[o];if(a!==i[o]||!Mt(a,e,t,n))return o}return a}const Pt=new Map;function V(e){let t=Pt.get(e);if(t)return t;let n=Ft(e);return Object.freeze(n),Pt.set(e,n),n}function Ft(e){if(!e)return[``];let t=e.indexOf(`.`);if(t===-1)return[e];let n=e.indexOf(`.`,t+1);if(n===-1)return[e.slice(0,t),e];let r=e.indexOf(`.`,n+1);return r===-1?[e.slice(0,t),e.slice(0,n),e]:e.indexOf(`.`,r+1)===-1?[e.slice(0,t),e.slice(0,n),e.slice(0,r),e]:At(e)}let H,U,W=null,It,Lt,G=null;function Rt(e,t){if(!t)return{intersection:``,toActivate:V(e.name),toDeactivate:B};let n=ct(e),r=ct(t);if(!n&&!r)return{intersection:``,toActivate:V(e.name),toDeactivate:kt(V(t.name))};let i=V(e.name),a=V(t.name),o=Math.min(a.length,i.length),s=Nt(n??r,e,t,i,a,o),c;if(s>=a.length)c=B;else if(s===0&&a.length===1)c=a;else{c=[];for(let e=a.length-1;e>=s;e--)c.push(a[e])}let l=s===0?i:i.slice(s);return{intersection:s>0?a[s-1]:``,toDeactivate:c,toActivate:l}}function K(e,t){if(W!==null&&e===H&&t===U)return W;if(G!==null&&e===It&&t===Lt)return G;let n=Rt(e,t);return It=H,Lt=U,G=W,H=e,U=t,W=n,n}function zt(e){let t=[];for(let n of e)for(let e of n.paramMeta.urlParams)t.push(e);return t}function Bt(e){return e.at(-1)?.fullName??``}function Vt(e,t){return{name:t??Bt(e.segments),params:e.params,meta:e.meta}}var Ht=class{#e;#t;get#n(){return this.#e.depsStore}constructor(e=[],t){this.#e=Ot(e,t)}static shouldUpdateNode(e){return(t,n)=>{if(!(t&&typeof t==`object`&&`name`in t))throw TypeError(`[router.shouldUpdateNode] toState must be valid State object`);if(t.transition.reload||e===``)return!0;let{intersection:r,toActivate:i,toDeactivate:a}=K(t,n);return e===r||i.includes(e)?!0:a.includes(e)}}setDependencies(e){this.#e.depsStore=e;for(let[t,n]of this.#e.pendingCanActivate)e.addActivateGuard(t,n);this.#e.pendingCanActivate.clear();for(let[t,n]of this.#e.pendingCanDeactivate)e.addDeactivateGuard(t,n);this.#e.pendingCanDeactivate.clear()}setLifecycleNamespace(e){this.#e.lifecycleNamespace=e}setRootPath(e){this.#e.rootPath=e,L(this.#e)}hasRoute(e){return this.#e.matcher.hasRoute(e)}clearRoutes(){wt(this.#e)}buildPath(t,n,r){if(t===e.l.UNKNOWN_ROUTE)return typeof n?.path==`string`?n.path:``;let i=Object.hasOwn(this.#e.config.defaultParams,t)?{...this.#e.config.defaultParams[t],...n}:n??{},a=typeof this.#e.config.encoders[t]==`function`?this.#e.config.encoders[t]({...i}):i;return this.#e.matcher.buildPath(t,a,this.#i(r))}matchPath(e,t){let n=t,r=this.#e.matcher.match(e);if(!r)return;let{name:i,params:a,meta:o}=Vt(r),s=typeof this.#e.config.decoders[i]==`function`?this.#e.config.decoders[i](a):a,{name:c,params:l}=this.#n.forwardState(i,s),u=e;if(n.rewritePathOnMatch){let t=typeof this.#e.config.encoders[c]==`function`?this.#e.config.encoders[c]({...l}):l,r=n.trailingSlash;u=this.#e.matcher.buildPath(c,t,{trailingSlash:r===`never`||r===`always`?r:void 0,queryParamsMode:n.queryParamsMode}),r===`preserve`&&(u=St(e,u))}return this.#n.makeState(c,l,u,o)}forwardState(e,t){if(Object.hasOwn(this.#e.config.forwardFnMap,e)){let n=this.#r(e,t),r=this.#e.config.forwardFnMap[e],i=this.#a(e,r,t);return{name:i,params:this.#r(i,n)}}let n=this.#e.resolvedForwardMap[e]??e;if(n!==e&&Object.hasOwn(this.#e.config.forwardFnMap,n)){let r=this.#r(e,t),i=this.#e.config.forwardFnMap[n],a=this.#a(n,i,t);return{name:a,params:this.#r(a,r)}}if(n!==e){let r=this.#r(e,t);return{name:n,params:this.#r(n,r)}}return{name:e,params:this.#r(e,t)}}buildStateResolved(e,t){let n=this.#e.matcher.getSegmentsByName(e);if(n)return Vt({segments:n,params:t,meta:this.#e.matcher.getMetaByName(e)},e)}isActiveRoute(t,n={},r=!1,i=!0){let a=this.#n.getState();if(!a)return!1;let o=a.name;if(o!==t&&!o.startsWith(`${t}.`)&&!t.startsWith(`${o}.`))return!1;let s=this.#e.config.defaultParams[t];if(r||o===t){let r={name:t,params:s?{...s,...n}:n,path:``,transition:e.o,context:{}};return this.#n.areStatesEqual(r,a,i)}if(!o.startsWith(`${t}.`))return!1;let c=a.params;return _t(n,c)?s?vt(i?yt(s,this.#e.matcher.getMetaByName(t)?.[t]):s,c,n):!0:!1}getMetaForState(e){return this.#e.matcher.hasRoute(e)?this.#e.matcher.getMetaByName(e):void 0}getUrlParams(e){let t=this.#e.matcher.getSegmentsByName(e);return t?zt(t):[]}getStore(){return this.#e}#r(e,t){return Object.hasOwn(this.#e.config.defaultParams,e)?{...this.#e.config.defaultParams[e],...t}:t}#i(e){if(this.#t)return this.#t;let t=e?.trailingSlash;return this.#t=Object.freeze({trailingSlash:t===`never`||t===`always`?t:void 0,queryParamsMode:e?.queryParamsMode}),this.#t}#a(e,t,n){let r=new Set([e]),i=t(this.#n.getDependency,n),a=0;if(typeof i!=`string`)throw TypeError(`forwardTo callback must return a string, got ${typeof i}`);for(;a<100;){if(this.#e.matcher.getSegmentsByName(i)===void 0)throw Error(`Route "${i}" does not exist`);if(r.has(i)){let e=[...r,i].join(` → `);throw Error(`Circular forwardTo detected: ${e}`)}if(r.add(i),Object.hasOwn(this.#e.config.forwardFnMap,i)){let e=this.#e.config.forwardFnMap[i];i=e(this.#n.getDependency,n),a++;continue}let e=this.#e.config.forwardMap[i];if(e!==void 0){i=e,a++;continue}return i}throw Error(`forwardTo exceeds maximum depth of 100`)}};const Ut=new e.t(e.u.ROUTER_NOT_STARTED),Wt=new e.t(e.u.ROUTE_NOT_FOUND),Gt=new e.t(e.u.SAME_STATES),q=Promise.reject(Ut),Kt=Promise.reject(Wt),qt=Promise.reject(Gt);q.catch(()=>{}),Kt.catch(()=>{}),qt.catch(()=>{});function Jt(e,t,n,r,i){Object.freeze(n),Object.freeze(r);let a={phase:`activating`,reason:`success`,segments:Object.freeze({deactivated:n,activated:r,intersection:i})};return e?.name!==void 0&&(a.from=e.name),t.reload!==void 0&&(a.reload=t.reload),t.redirected!==void 0&&(a.redirected=t.redirected),Object.freeze(a)}function Yt({signal:e,...t}){return t}function Xt(t,n){let{toState:r,fromState:i,opts:a,toDeactivate:o,toActivate:s,intersection:c}=n;if(r.name!==e.l.UNKNOWN_ROUTE&&!t.hasRoute(r.name)){let n=new e.t(e.u.ROUTE_NOT_FOUND,{routeName:r.name});throw t.sendTransitionFail(r,i,n),n}if(i)for(let e of o)!s.includes(e)&&n.canDeactivateFunctions.has(e)&&t.clearCanDeactivate(e);r.transition=Jt(i,a,o,s,c);let l=Object.freeze(r);t.setState(l);let u=a.signal===void 0?a:Yt(a);return t.sendTransitionDone(l,i,u),l}function Zt(t,n,r,i){let a=n;a.code===e.u.TRANSITION_CANCELLED||a.code===e.u.ROUTE_NOT_FOUND||t.sendTransitionFail(r,i,a)}function J(t,n,r){if(t instanceof DOMException&&t.name===`AbortError`)throw new e.t(e.u.TRANSITION_CANCELLED);Qt(t,n,r)}function Qt(t,n,r){throw t instanceof e.t?(t.setCode(n),t):new e.t(n,en(t,r))}const $t=new Set([`code`,`segment`,`path`,`redirect`]);function en(e,t){let n={segment:t};if(e instanceof Error)return{...n,message:e.message,stack:e.stack,...`cause`in e&&e.cause!==void 0&&{cause:e.cause}};if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))$t.has(n)||(t[n]=r);return{...n,...t}}return n}async function tn(t,n,r){let i;try{i=await t}catch(e){J(e,n,r);return}if(!i)throw new e.t(n,{segment:r})}async function nn(t,n,r,i,a,o,s,c,l,u){await tn(l,r,u);for(let l=c;l<n.length;l++){if(!s())throw new e.t(e.u.TRANSITION_CANCELLED);let c=n[l],u=t.get(c);if(!u)continue;let d=!1;try{d=u(i,a,o)}catch(e){J(e,r,c)}if(d instanceof Promise){await tn(d,r,c);continue}if(!d)throw new e.t(r,{segment:c})}}async function rn(t,n,r,i,a,o,s,c,l){if(await t,!c())throw new e.t(e.u.TRANSITION_CANCELLED);let u=l();if(u!==void 0&&(await u,!c()))throw new e.t(e.u.TRANSITION_CANCELLED);if(i){let t=Y(n,r,e.u.CANNOT_ACTIVATE,a,o,s,c);if(t!==void 0&&await t,!c())throw new e.t(e.u.TRANSITION_CANCELLED)}}function an(t,n,r,i,a,o,s,c,l,u,d){if(a){let a=Y(t,r,e.u.CANNOT_DEACTIVATE,s,c,l,u);if(a!==void 0)return rn(a,n,i,o,s,c,l,u,d)}if(!u())throw new e.t(e.u.TRANSITION_CANCELLED);let f=d();if(f!==void 0)return on(f,o?n:void 0,i,s,c,l,u);if(o)return Y(n,i,e.u.CANNOT_ACTIVATE,s,c,l,u)}async function on(t,n,r,i,a,o,s){if(await t,!s())throw new e.t(e.u.TRANSITION_CANCELLED);if(n!==void 0){let t=Y(n,r,e.u.CANNOT_ACTIVATE,i,a,o,s);if(t!==void 0&&await t,!s())throw new e.t(e.u.TRANSITION_CANCELLED)}}function Y(t,n,r,i,a,o,s){for(let[c,l]of n.entries()){if(!s())throw new e.t(e.u.TRANSITION_CANCELLED);let u=t.get(l);if(!u)continue;let d=!1;try{d=u(i,a,o)}catch(e){J(e,r,l)}if(d instanceof Promise)return nn(t,n,r,i,a,o,s,c+1,d,l);if(!d)throw new e.t(r,{segment:l})}}const sn=[e.l.UNKNOWN_ROUTE];Object.freeze(sn);const cn={replace:!0};Object.freeze(cn);function ln(t,n){return n?.name===e.l.UNKNOWN_ROUTE&&!t.replace?{...t,replace:!0}:t}function un(e,t,n){return!!e&&!t.reload&&!t.force&&e.path===n.path}var dn=class{lastSyncResolved=!1;lastSyncRejected=!1;#e;#t=null;#n=0;setDependencies(e){this.#e=e}navigate(e,t,n){this.lastSyncResolved=!1;let r=this.#e;if(!r.canNavigate())return this.lastSyncRejected=!0,q;let i;try{i=r.buildNavigateState(e,t)}catch(e){return Promise.reject(e)}return i?this.#r(i,n):(r.emitTransitionError(void 0,r.getState(),Wt),this.lastSyncRejected=!0,Kt)}navigateToState(t,n){this.lastSyncResolved=!1;let r=this.#e;if(!r.canNavigate())return this.lastSyncRejected=!0,q;if(t.name!==e.l.UNKNOWN_ROUTE&&!r.hasRoute(t.name)){let n=new e.t(e.u.ROUTE_NOT_FOUND,{routeName:t.name});return r.emitTransitionError(void 0,r.getState(),n),this.lastSyncRejected=!0,Promise.reject(n)}let i={name:t.name,params:t.params,path:t.path,context:{...t.context}};return this.#r(i,n)}navigateToDefault(t){let n=this.#e;if(!n.getOptions().defaultRoute)return Promise.reject(new e.t(e.u.ROUTE_NOT_FOUND,{routeName:`defaultRoute not configured`}));let r,i;try{({route:r,params:i}=n.resolveDefault())}catch(e){return Promise.reject(e)}return r?this.navigate(r,i,t):Promise.reject(new e.t(e.u.ROUTE_NOT_FOUND,{routeName:`defaultRoute resolved to empty`}))}navigateToNotFound(t){this.#c();let n=this.#e.getState(),r=n?V(n.name).toReversed():[];Object.freeze(r);let i={deactivated:r,activated:sn,intersection:``};Object.freeze(i);let a={phase:`activating`,...n&&{from:n.name},reason:`success`,segments:i};Object.freeze(a);let o={name:e.l.UNKNOWN_ROUTE,params:e.s,path:t,transition:a,context:{}};return Object.freeze(o),this.#e.setState(o),this.#e.emitTransitionSuccess(o,n,cn),o}abortCurrentNavigation(){this.#t?.abort(new e.t(e.u.TRANSITION_CANCELLED)),this.#t=null}#r(t,n){let r=this.#e,i,a=!1,o=null;try{if(i=r.getState(),n=ln(n,i),un(i,n,t))return r.emitTransitionError(t,i,Gt),this.lastSyncRejected=!0,qt;this.#c(n.signal);let s=++this.#n;if(r.startTransition(t,i),a=!0,this.#n!==s)throw new e.t(e.u.TRANSITION_CANCELLED);let[c,l]=r.getLifecycleFunctions(),u=t.name===e.l.UNKNOWN_ROUTE,d=K(t,i),{toDeactivate:f,toActivate:p,intersection:m}=d,ee=i&&!n.forceDeactivate&&f.length>0,te=!u&&p.length>0,h=c.size>0||l.size>0,g=t;if(!h){let e=this.#o(g,i,s,n,d,c);if(e!==void 0)return e}if(h){o=new AbortController,this.#t=o;let a=()=>this.#n===s&&r.isActive(),u=o.signal,d=an(c,l,f,p,!!ee,te,t,i,u,a,()=>{if(r.sendLeaveApprove(g,i),r.hasLeaveListeners())return r.awaitLeaveListeners(g,i,u)});if(d!==void 0)return this.#i(d,{toState:t,fromState:i,opts:n,toDeactivate:f,toActivate:p,intersection:m,canDeactivateFunctions:c},o,s);if(!a())throw new e.t(e.u.TRANSITION_CANCELLED);this.#s(o)}return this.lastSyncResolved=!0,Promise.resolve(Xt(r,{toState:t,fromState:i,opts:n,toDeactivate:f,toActivate:p,intersection:m,canDeactivateFunctions:c}))}catch(e){return this.#a(e,o,a,t,i),Promise.reject(e)}}async#i(t,n,r,i){let a=this.#e,o=()=>this.#n===i&&!r.signal.aborted&&a.isActive();try{if(n.opts.signal){if(n.opts.signal.aborted)throw new e.t(e.u.TRANSITION_CANCELLED,{reason:n.opts.signal.reason});n.opts.signal.addEventListener(`abort`,()=>{r.abort(n.opts.signal?.reason)},{once:!0,signal:r.signal})}if(await t,!o())throw new e.t(e.u.TRANSITION_CANCELLED);return Xt(a,n)}catch(e){throw Zt(a,e,n.toState,n.fromState),e}finally{this.#s(r)}}#a(e,t,n,r,i){t&&this.#s(t),n&&r&&Zt(this.#e,e,r,i)}#o(t,n,r,i,a,o){let s=this.#e;if(s.sendLeaveApprove(t,n),s.hasLeaveListeners()){let e=new AbortController,c=s.awaitLeaveListeners(t,n,e.signal);if(c!==void 0)return this.#t=e,this.#i(c,{toState:t,fromState:n,opts:i,toDeactivate:a.toDeactivate,toActivate:a.toActivate,intersection:a.intersection,canDeactivateFunctions:o},e,r)}if(this.#n!==r)throw new e.t(e.u.TRANSITION_CANCELLED)}#s(e){e.abort(),this.#t===e&&(this.#t=null)}#c(t){if(this.#e.isTransitioning()&&(n.logger.warn(`router.navigate`,`Concurrent navigation detected on shared router instance. For SSR, use cloneRouter() to create isolated instance per request.`),this.#t?.abort(new e.t(e.u.TRANSITION_CANCELLED)),this.#e.cancelNavigation()),t?.aborted)throw new e.t(e.u.TRANSITION_CANCELLED,{reason:t.reason})}};const fn={replace:!0};Object.freeze(fn);var pn=class{#e;setDependencies(e){this.#e=e}async start(t){let n=this.#e,r=n.getOptions(),i=n.matchPath(t);if(!i&&!r.allowNotFound){let r=new e.t(e.u.ROUTE_NOT_FOUND,{path:t});throw n.emitTransitionError(void 0,void 0,r),r}return n.completeStart(),i?n.navigateToState(i,fn):n.navigateToNotFound(t)}stop(){this.#e.clearState()}};function X(e){return e instanceof Error?e:Error(String(e))}function mn(e,t){return Promise.allSettled(e).then(e=>{if(t!==void 0)throw X(t);let n=e.find(e=>e.status===`rejected`);if(n!==void 0)throw X(n.reason)})}var Z=class{#e;#t;#n=[];#r;#i;#a;#o;constructor(e){this.#e=e.routerFSM,this.#t=e.emitter,this.#r=void 0,this.#c()}static validateSubscribeListener(e){if(typeof e!=`function`)throw TypeError(`[router.subscribe] Expected a function. For Observable pattern use @real-router/rx package`)}static validateSubscribeLeaveListener(e){if(typeof e!=`function`)throw TypeError(`[router.subscribeLeave] Expected a function`)}emitRouterStart(){this.#t.emit(e.d.ROUTER_START)}emitRouterStop(){this.#t.emit(e.d.ROUTER_STOP)}emitTransitionStart(t,n){this.#t.emit(e.d.TRANSITION_START,t,n)}emitTransitionSuccess(t,n,r){this.#t.emit(e.d.TRANSITION_SUCCESS,t,n,r)}emitTransitionError(t,n,r){this.#t.emit(e.d.TRANSITION_ERROR,t,n,r)}emitTransitionCancel(t,n){this.#t.emit(e.d.TRANSITION_CANCEL,t,n)}emitTransitionLeaveApprove(t,n){this.#t.emit(e.d.TRANSITION_LEAVE_APPROVE,t,n)}sendStart(){this.#e.send(c.START)}sendStop(){this.#e.send(c.STOP)}sendDispose(){this.#e.send(c.DISPOSE)}sendStarted(){this.#e.send(c.STARTED)}sendNavigate(e,t){this.#r=e,this.#e.forceState(s.TRANSITION_STARTED),this.emitTransitionStart(e,t)}sendComplete(e,t,n={}){this.#e.forceState(s.READY),this.emitTransitionSuccess(e,t,n),this.#r===e&&(this.#r=void 0)}sendLeaveApprove(e,t){this.#e.forceState(s.LEAVE_APPROVED),this.emitTransitionLeaveApprove(e,t)}sendFail(e,t,n){let r=this.#r;this.#i=e,this.#a=t,this.#o=n,this.#e.send(c.FAIL),this.#r===r&&(this.#r=void 0)}sendFailSafe(e,t,n){this.isReady()?this.sendFail(e,t,n):this.emitTransitionError(e,t,n)}sendCancel(e,t){let n=this.#r;this.#i=e,this.#a=t,this.#e.send(c.CANCEL),this.#r===n&&(this.#r=void 0)}canBeginTransition(){return this.#e.canSend(c.NAVIGATE)}canStart(){return this.#e.canSend(c.START)}canCancel(){return this.#e.canSend(c.CANCEL)}isActive(){let e=this.#e.getState();return e!==s.IDLE&&e!==s.DISPOSED}isDisposed(){return this.#e.getState()===s.DISPOSED}isTransitioning(){let e=this.#e.getState();return e===s.TRANSITION_STARTED||e===s.LEAVE_APPROVED}isLeaveApproved(){return this.#e.getState()===s.LEAVE_APPROVED}isReady(){return this.#e.getState()===s.READY}getCurrentToState(){return this.#r}addEventListener(e,t){return this.#t.on(e,t)}subscribe(t){return this.#t.on(e.d.TRANSITION_SUCCESS,(e,n)=>{t({route:e,previousRoute:n})})}subscribeLeave(e){return this.#n.push(e),()=>{let t=this.#n.indexOf(e);t!==-1&&this.#n.splice(t,1)}}hasLeaveListeners(){return this.#n.length>0}awaitLeaveListeners(e,t,n){if(t===void 0)return;let r={route:t,nextRoute:e,signal:n},i,a;for(let e of this.#n)try{let t=e(r);t!==void 0&&typeof t.then==`function`&&(i??=[],i.push(t))}catch(e){a===void 0&&(a=e)}if(i===void 0){if(a!==void 0)throw X(a);return}return mn(i,a)}clearAll(){this.#t.clearAll(),this.#n.length=0}setLimits(e){this.#t.setLimits(e)}sendCancelIfPossible(e){let t=this.#r;!this.canCancel()||t===void 0||this.sendCancel(t,e)}#s(){this.emitTransitionError(this.#i,this.#a,this.#o)}#c(){let e=this.#e;e.on(s.STARTING,c.STARTED,()=>{this.emitRouterStart()}),e.on(s.READY,c.STOP,()=>{this.emitRouterStop()});let t=()=>{let e=this.#i;e!==void 0&&this.emitTransitionCancel(e,this.#a)};e.on(s.TRANSITION_STARTED,c.CANCEL,t),e.on(s.LEAVE_APPROVED,c.CANCEL,t),e.on(s.LEAVE_APPROVED,c.FAIL,()=>{this.#s()}),e.on(s.STARTING,c.FAIL,()=>{this.#s()}),e.on(s.READY,c.FAIL,()=>{this.#s()}),e.on(s.TRANSITION_STARTED,c.FAIL,()=>{this.#s()})}};const hn=new e.t(e.u.ROUTER_ALREADY_STARTED),gn=new Set([`all`,`warn-error`,`error-only`]);function _n(e){return typeof e==`string`&&gn.has(e)}function vn(e){return typeof e==`string`?`"${e}"`:typeof e==`object`?JSON.stringify(e):String(e)}function yn(e){if(typeof e!=`object`||!e)throw TypeError(`Logger config must be an object`);let t=e;for(let e of Object.keys(t))if(e!==`level`&&e!==`callback`)throw TypeError(`Unknown logger config property: "${e}"`);if(`level`in t&&t.level!==void 0&&!_n(t.level))throw TypeError(`Invalid logger level: ${vn(t.level)}. Expected: "all" | "warn-error" | "error-only"`);if(`callback`in t&&t.callback!==void 0&&typeof t.callback!=`function`)throw TypeError(`Logger callback must be a function, got ${typeof t.callback}`);return!0}var bn=class{router;options;limits;dependenciesStore;state;routes;routeLifecycle;plugins;navigation;lifecycle;eventBus;constructor(e){this.router=e.router,this.options=e.options,this.limits=e.limits,this.dependenciesStore=e.dependenciesStore,this.state=e.state,this.routes=e.routes,this.routeLifecycle=e.routeLifecycle,this.plugins=e.plugins,this.navigation=e.navigation,this.lifecycle=e.lifecycle,this.eventBus=e.eventBus}wireLimits(){this.dependenciesStore.limits=this.limits,this.plugins.setLimits(this.limits),this.eventBus.setLimits({maxListeners:this.limits.maxListeners,warnListeners:this.limits.warnListeners,maxEventDepth:this.limits.maxEventDepth}),this.routeLifecycle.setLimits(this.limits)}wireRouteLifecycleDeps(){let e={compileFactory:this.createCompileFactory()};this.routeLifecycle.setDependencies(e),this.routeLifecycle.setValidatorGetter(()=>{try{return t.r(this.router).validator}catch{return null}})}wireRoutesDeps(){this.routes.setDependencies({addActivateGuard:(e,t)=>{this.routeLifecycle.addCanActivate(e,t,!0)},addDeactivateGuard:(e,t)=>{this.routeLifecycle.addCanDeactivate(e,t,!0)},makeState:(e,t,n,r)=>this.state.makeState(e,t,n,r),getState:()=>this.state.get(),areStatesEqual:(e,t,n)=>this.state.areStatesEqual(e,t,n),getDependency:e=>this.dependenciesStore.dependencies[e],forwardState:(e,n)=>{let r=t.r(this.router);return r.validator?.routes.validateStateBuilderArgs(e,n,`forwardState`),r.forwardState(e,n)}}),this.routes.setLifecycleNamespace(this.routeLifecycle)}wirePluginsDeps(){let e={addEventListener:(e,t)=>this.eventBus.addEventListener(e,t),canNavigate:()=>this.eventBus.canBeginTransition(),compileFactory:this.createCompileFactory()};this.plugins.setDependencies(e),this.plugins.setValidatorGetter(()=>{try{return t.r(this.router).validator}catch{return null}})}wireNavigationDeps(){this.navigation.setDependencies({getOptions:()=>this.options.get(),hasRoute:e=>this.routes.hasRoute(e),getState:()=>this.state.get(),setState:e=>{this.state.set(e)},buildNavigateState:(n,r)=>{let i=t.r(this.router);i.validator?.routes.validateStateBuilderArgs(n,r,`navigate`);let a=i.forwardState(n,r),o=a.name,s=e.i(a.params),c=this.routes.getMetaForState(o);if(c===void 0)return;let l=i.buildPath(o,s);return this.state.makeState(o,s,l,c,!0)},resolveDefault:()=>{let e=this.options.get(),n=t.r(this.router),r=it(e.defaultRoute,e=>this.dependenciesStore.dependencies[e]),i=it(e.defaultParams,e=>this.dependenciesStore.dependencies[e]);return typeof e.defaultRoute==`function`&&n.validator?.options.validateResolvedDefaultRoute(r,n.routeGetStore()),{route:r,params:i}},startTransition:(e,t)=>{this.eventBus.sendNavigate(e,t)},cancelNavigation:()=>{let e=this.eventBus.getCurrentToState();e!==void 0&&this.eventBus.sendCancel(e,this.state.get())},sendTransitionDone:(e,t,n)=>{this.eventBus.sendComplete(e,t,n)},sendTransitionFail:(e,t,n)=>{this.eventBus.sendFail(e,t,n)},emitTransitionError:(e,t,n)=>{this.eventBus.sendFailSafe(e,t,n)},emitTransitionSuccess:(e,t,n)=>{this.eventBus.emitTransitionSuccess(e,t,n)},sendLeaveApprove:(e,t)=>{this.eventBus.sendLeaveApprove(e,t)},canNavigate:()=>this.eventBus.canBeginTransition(),getLifecycleFunctions:()=>this.routeLifecycle.getFunctions(),isActive:()=>this.router.isActive(),isTransitioning:()=>this.eventBus.isTransitioning(),clearCanDeactivate:e=>{this.routeLifecycle.clearCanDeactivate(e)},hasLeaveListeners:()=>this.eventBus.hasLeaveListeners(),awaitLeaveListeners:(e,t,n)=>this.eventBus.awaitLeaveListeners(e,t,n)})}wireLifecycleDeps(){this.lifecycle.setDependencies({getOptions:()=>this.options.get(),navigateToState:(e,t)=>this.navigation.navigateToState(e,t),navigateToNotFound:e=>this.navigation.navigateToNotFound(e),clearState:()=>{this.state.set(void 0)},matchPath:e=>this.routes.matchPath(e,this.options.get()),completeStart:()=>{this.eventBus.sendStarted()},emitTransitionError:(e,t,n)=>{this.eventBus.sendFail(e,t,n)}})}wireStateDeps(){this.state.setDependencies({getDefaultParams:()=>this.routes.getStore().config.defaultParams,buildPath:(e,n)=>t.r(this.router).buildPath(e,n),getUrlParams:e=>this.routes.getUrlParams(e)})}createCompileFactory(){let{router:e,dependenciesStore:t}=this;return n=>n(e,e=>t.dependencies[e])}};function xn(e){e.wireLimits(),e.wireRouteLifecycleDeps(),e.wireRoutesDeps(),e.wirePluginsDeps(),e.wireNavigationDeps(),e.wireLifecycleDeps(),e.wireStateDeps()}const Q=Object.freeze({});var Sn=class r{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;constructor(i=[],a={},s={}){a.logger&&yn(a.logger)&&(n.logger.configure(a.logger),delete a.logger),ot.validateOptionsIsObject(a),d(s),i.length>0&&f(i),this.#e=new ot(a),this.#t=e.n(a.limits),this.#n=p(s),this.#r=new ut,this.#i=new Ht(i,Cn(this.#e.get())),this.#a=new gt,this.#o=new mt,this.#s=new dn,this.#c=new pn,this.#l=new Z({routerFSM:u(),emitter:new o({onListenerError:(e,t)=>{n.logger.error(`Router`,`Error in listener for ${e}:`,t)},onListenerWarn:(e,t)=>{n.logger.warn(`router.addEventListener`,`Event "${e}" has ${t} listeners — possible memory leak`)}})}),xn(new bn({router:this,options:this.#e,limits:this.#t,dependenciesStore:this.#n,state:this.#r,routes:this.#i,routeLifecycle:this.#a,plugins:this.#o,navigation:this.#s,lifecycle:this.#c,eventBus:this.#l}));let c=new Map;t.i(this,{makeState:(e,t,n,r)=>this.#r.makeState(e,t,n,r),forwardState:t.n(`forwardState`,(e,t)=>this.#i.forwardState(e,t),c),buildStateResolved:(e,t)=>this.#i.buildStateResolved(e,t),matchPath:(e,t)=>this.#i.matchPath(e,t),getOptions:()=>this.#e.get(),addEventListener:(e,t)=>this.#l.addEventListener(e,t),buildPath:t.n(`buildPath`,(t,n)=>this.#i.buildPath(t,n??e.s,this.#e.get()),c),emitTransitionError:e=>{this.#l.sendFailSafe(void 0,this.#r.get(),e)},start:t.t(`start`,e=>this.#c.start(e),c),navigateToState:(e,t)=>{let n=this.#s.navigateToState(e,t??Q);return this.#s.lastSyncResolved?this.#s.lastSyncResolved=!1:this.#s.lastSyncRejected?this.#s.lastSyncRejected=!1:r.#d(n),n},interceptors:c,setRootPath:e=>{this.#i.setRootPath(e)},getRootPath:()=>this.#i.getStore().rootPath,getTree:()=>this.#i.getStore().tree,isDisposed:()=>this.#l.isDisposed(),validator:null,dependenciesGetStore:()=>this.#n,cloneOptions:()=>({...this.#e.get()}),cloneDependencies:()=>({...this.#n.dependencies}),getLifecycleFactories:()=>this.#a.getFactories(),getPluginFactories:()=>this.#o.getAll(),routeGetStore:()=>this.#i.getStore(),getStateName:()=>this.#r.get()?.name,isTransitioning:()=>this.#l.isTransitioning(),clearState:()=>{this.#r.set(void 0)},setState:e=>{this.#r.set(e)},routerExtensions:[],contextClaimRecords:new Set}),this.isActiveRoute=this.isActiveRoute.bind(this),this.buildPath=this.buildPath.bind(this),this.getState=this.getState.bind(this),this.getPreviousState=this.getPreviousState.bind(this),this.areStatesEqual=this.areStatesEqual.bind(this),this.shouldUpdateNode=this.shouldUpdateNode.bind(this),this.isActive=this.isActive.bind(this),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this.dispose=this.dispose.bind(this),this.canNavigateTo=this.canNavigateTo.bind(this),this.usePlugin=this.usePlugin.bind(this),this.navigate=this.navigate.bind(this),this.navigateToDefault=this.navigateToDefault.bind(this),this.navigateToNotFound=this.navigateToNotFound.bind(this),this.subscribe=this.subscribe.bind(this),this.subscribeLeave=this.subscribeLeave.bind(this),this.isLeaveApproved=this.isLeaveApproved.bind(this)}isActiveRoute(e,r,i,a){return t.r(this).validator?.routes.validateIsActiveRouteArgs(e,r,i,a),t.r(this).validator?.routes.validateRouteName(e,`isActiveRoute`),e===``?(n.logger.warn(`real-router`,`isActiveRoute("") called with empty string. Root node is not considered a parent of any route.`),!1):this.#i.isActiveRoute(e,r,i,a)}buildPath(n,r){let i=t.r(this);return i.validator?.routes.validateBuildPathArgs(n),i.validator?.navigation.validateParams(r,`buildPath`),i.buildPath(n,e.i(r))}getState(){return this.#r.get()}getPreviousState(){return this.#r.getPrevious()}areStatesEqual(e,n,r=!0){return t.r(this).validator?.state.validateAreStatesEqualArgs(e,n,r),this.#r.areStatesEqual(e,n,r)}shouldUpdateNode(e){return t.r(this).validator?.routes.validateShouldUpdateNodeArgs(e),Ht.shouldUpdateNode(e)}isActive(){return this.#l.isActive()}start(e){if(!this.#l.canStart())return Promise.reject(hn);t.r(this).validator?.navigation.validateStartArgs(e),this.#l.sendStart();let n=t.r(this).start(e).catch(e=>{throw this.#l.isReady()&&(this.#c.stop(),this.#l.sendStop()),e});return r.#d(n),n}stop(){return this.#s.abortCurrentNavigation(),this.#l.sendCancelIfPossible(this.#r.get()),!this.#l.isReady()&&!this.#l.isTransitioning()?this:(this.#c.stop(),this.#l.sendStop(),this)}dispose(){if(this.#l.isDisposed())return;this.#s.abortCurrentNavigation(),this.#l.sendCancelIfPossible(this.#r.get()),(this.#l.isReady()||this.#l.isTransitioning())&&(this.#c.stop(),this.#l.sendStop()),this.#l.sendDispose(),this.#l.clearAll(),this.#o.disposeAll();let e=t.r(this);for(let t of e.routerExtensions)for(let e of t.keys)delete this[e];e.routerExtensions.length=0,e.contextClaimRecords.clear(),this.#i.clearRoutes(),this.#a.clearAll(),this.#r.reset(),this.#n.dependencies=Object.create(null),this.#f()}canNavigateTo(e,n){let r=t.r(this);if(r.validator?.routes.validateRouteName(e,`canNavigateTo`),r.validator?.navigation.validateParams(n,`canNavigateTo`),!this.#i.hasRoute(e))return!1;let{name:i,params:a}=r.forwardState(e,n??{}),o=this.#r.makeState(i,a),s=this.#r.get(),{toDeactivate:c,toActivate:l}=K(o,s);return this.#a.canNavigateTo(c,l,o,s)}usePlugin(...e){let n=e.filter(Boolean);if(n.length===0)return()=>{};let r=t.r(this);r.validator?.plugins.validatePluginLimit(this.#o.count(),this.#t);for(let e of n)r.validator?.plugins.validateNoDuplicatePlugins(e,this.#o.getAll());return this.#o.use(...n)}subscribe(e){return Z.validateSubscribeListener(e),this.#l.subscribe(e)}subscribeLeave(e){return Z.validateSubscribeLeaveListener(e),this.#l.subscribeLeave(e)}isLeaveApproved(){return this.#l.isLeaveApproved()}navigate(n,i,a){let o=t.r(this);o.validator?.navigation.validateNavigateArgs(n),o.validator?.navigation.validateParams(i,`navigate`);let s=a??Q;o.validator?.navigation.validateNavigationOptions(s,`navigate`);let c=this.#s.navigate(n,i??e.s,s);return this.#s.lastSyncResolved?this.#s.lastSyncResolved=!1:this.#s.lastSyncRejected?this.#s.lastSyncRejected=!1:r.#d(c),c}navigateToDefault(e){let n=t.r(this);n.validator?.navigation.validateNavigateToDefaultArgs(e);let i=e??Q;n.validator?.navigation.validateNavigationOptions(i,`navigateToDefault`);let a=this.#s.navigateToDefault(i);return this.#s.lastSyncResolved?this.#s.lastSyncResolved=!1:this.#s.lastSyncRejected?this.#s.lastSyncRejected=!1:r.#d(a),a}navigateToNotFound(t){if(!this.#l.isActive())throw new e.t(e.u.ROUTER_NOT_STARTED);if(t!==void 0&&typeof t!=`string`)throw TypeError(`[router.navigateToNotFound] path must be a string, got ${typeof t}`);let n=t??this.#r.get().path;return this.#s.navigateToNotFound(n)}static#u=t=>{t instanceof e.t&&(t.code===e.u.SAME_STATES||t.code===e.u.TRANSITION_CANCELLED||t.code===e.u.ROUTER_NOT_STARTED||t.code===e.u.ROUTE_NOT_FOUND)||n.logger.error(`router.navigate`,`Unexpected navigation error`,t)};static#d(e){e.catch(r.#u)}#f(){this.navigate=$,this.navigateToDefault=$,this.navigateToNotFound=$,this.start=$,this.stop=$,this.usePlugin=$,this.subscribe=$,this.subscribeLeave=$,this.canNavigateTo=$}};function $(){throw new e.t(e.u.ROUTER_DISPOSED)}function Cn(e){return{strictTrailingSlash:e.trailingSlash===`strict`,strictQueryParams:e.queryParamsMode===`strict`,urlParamsEncoding:e.urlParamsEncoding,queryParams:e.queryParams}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Tt}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return xt}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Sn}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return f}});
|
|
6
|
-
//# sourceMappingURL=Router-CmI2Uw9u.js.map
|