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