@real-router/core 0.55.0 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/cjs/Router-BSGzVINO.js +6 -0
  2. package/dist/cjs/Router-BSGzVINO.js.map +1 -0
  3. package/dist/{esm/Router-Dg-zk8AS.d.mts → cjs/Router-hW6ivqrX.d.ts} +2 -2
  4. package/dist/cjs/Router-hW6ivqrX.d.ts.map +1 -0
  5. package/dist/cjs/api.d.ts +2 -2
  6. package/dist/cjs/api.d.ts.map +1 -1
  7. package/dist/cjs/api.js +1 -1
  8. package/dist/cjs/api.js.map +1 -1
  9. package/dist/cjs/{cloneRouter-C9Rth_8U.js → cloneRouter-7z-60z_f.js} +2 -2
  10. package/dist/cjs/{cloneRouter-C9Rth_8U.js.map → cloneRouter-7z-60z_f.js.map} +1 -1
  11. package/dist/cjs/{index-C-i6vx5Y.d.ts → index-BWUmnecT.d.ts} +1 -2
  12. package/dist/cjs/index-BWUmnecT.d.ts.map +1 -0
  13. package/dist/cjs/{RouterError-WhCzIWuc.d.ts → index-CYpAZCoc.d.ts} +19 -2
  14. package/dist/cjs/index-CYpAZCoc.d.ts.map +1 -0
  15. package/dist/cjs/{index-K1U_fqfJ.d.ts → index-D2WRiyWS.d.ts} +2 -2
  16. package/dist/cjs/index-D2WRiyWS.d.ts.map +1 -0
  17. package/dist/cjs/index.d.ts +5 -5
  18. package/dist/cjs/index.js +1 -1
  19. package/dist/cjs/{internals-CWMOL1B8.js → internals-DJjgSePy.js} +2 -2
  20. package/dist/cjs/internals-DJjgSePy.js.map +1 -0
  21. package/dist/cjs/utils.d.ts +1 -1
  22. package/dist/cjs/utils.js +1 -1
  23. package/dist/cjs/utils.js.map +1 -1
  24. package/dist/cjs/validation.d.ts +17 -5
  25. package/dist/cjs/validation.d.ts.map +1 -1
  26. package/dist/cjs/validation.js +1 -1
  27. package/dist/esm/Router-B7txWo9N.mjs +6 -0
  28. package/dist/esm/Router-B7txWo9N.mjs.map +1 -0
  29. package/dist/{cjs/Router-Dg-zk8AS.d.ts → esm/Router-hW6ivqrX.d.mts} +2 -2
  30. package/dist/esm/Router-hW6ivqrX.d.mts.map +1 -0
  31. package/dist/esm/api.d.mts +2 -2
  32. package/dist/esm/api.d.mts.map +1 -1
  33. package/dist/esm/api.mjs +1 -1
  34. package/dist/esm/api.mjs.map +1 -1
  35. package/dist/esm/{cloneRouter-BYNiwchg.mjs → cloneRouter-BNCQ7tIa.mjs} +2 -2
  36. package/dist/esm/{cloneRouter-BYNiwchg.mjs.map → cloneRouter-BNCQ7tIa.mjs.map} +1 -1
  37. package/dist/esm/{index-C-i6vx5Y.d.mts → index-BWUmnecT.d.mts} +1 -2
  38. package/dist/esm/index-BWUmnecT.d.mts.map +1 -0
  39. package/dist/esm/{RouterError-WhCzIWuc.d.mts → index-CYpAZCoc.d.mts} +19 -2
  40. package/dist/esm/index-CYpAZCoc.d.mts.map +1 -0
  41. package/dist/esm/{index-DKzxav48.d.mts → index-CjWKWPY6.d.mts} +2 -2
  42. package/dist/esm/index-CjWKWPY6.d.mts.map +1 -0
  43. package/dist/esm/index.d.mts +5 -5
  44. package/dist/esm/index.mjs +1 -1
  45. package/dist/esm/index.mjs.map +1 -1
  46. package/dist/esm/{internals-DT4mneSz.mjs → internals-C8mRvTxc.mjs} +2 -2
  47. package/dist/esm/internals-C8mRvTxc.mjs.map +1 -0
  48. package/dist/esm/utils.d.mts +1 -1
  49. package/dist/esm/utils.mjs +1 -1
  50. package/dist/esm/utils.mjs.map +1 -1
  51. package/dist/esm/validation.d.mts +17 -5
  52. package/dist/esm/validation.d.mts.map +1 -1
  53. package/dist/esm/validation.mjs +1 -1
  54. package/package.json +3 -4
  55. package/dist/cjs/Router-C7eE1kIK.js +0 -6
  56. package/dist/cjs/Router-C7eE1kIK.js.map +0 -1
  57. package/dist/cjs/Router-Dg-zk8AS.d.ts.map +0 -1
  58. package/dist/cjs/RouterError-WhCzIWuc.d.ts.map +0 -1
  59. package/dist/cjs/index-C-i6vx5Y.d.ts.map +0 -1
  60. package/dist/cjs/index-K1U_fqfJ.d.ts.map +0 -1
  61. package/dist/cjs/internals-CWMOL1B8.js.map +0 -1
  62. package/dist/esm/Router-Dg-zk8AS.d.mts.map +0 -1
  63. package/dist/esm/Router-DiZbYMLx.mjs +0 -6
  64. package/dist/esm/Router-DiZbYMLx.mjs.map +0 -1
  65. package/dist/esm/RouterError-WhCzIWuc.d.mts.map +0 -1
  66. package/dist/esm/index-C-i6vx5Y.d.mts.map +0 -1
  67. package/dist/esm/index-DKzxav48.d.mts.map +0 -1
  68. package/dist/esm/internals-DT4mneSz.mjs.map +0 -1
  69. package/src/Router.ts +0 -725
  70. package/src/RouterError.ts +0 -324
  71. package/src/api/cloneRouter.ts +0 -159
  72. package/src/api/getDependenciesApi.ts +0 -160
  73. package/src/api/getLifecycleApi.ts +0 -65
  74. package/src/api/getPluginApi.ts +0 -228
  75. package/src/api/getRoutesApi.ts +0 -546
  76. package/src/api/helpers.ts +0 -10
  77. package/src/api/index.ts +0 -16
  78. package/src/api/types.ts +0 -12
  79. package/src/constants.ts +0 -101
  80. package/src/createRouter.ts +0 -32
  81. package/src/fsm/index.ts +0 -5
  82. package/src/fsm/routerFSM.ts +0 -130
  83. package/src/getNavigator.ts +0 -30
  84. package/src/guards.ts +0 -46
  85. package/src/helpers.ts +0 -197
  86. package/src/index.ts +0 -50
  87. package/src/internals.ts +0 -200
  88. package/src/namespaces/DependenciesNamespace/dependenciesStore.ts +0 -30
  89. package/src/namespaces/DependenciesNamespace/index.ts +0 -5
  90. package/src/namespaces/EventBusNamespace/EventBusNamespace.ts +0 -485
  91. package/src/namespaces/EventBusNamespace/index.ts +0 -5
  92. package/src/namespaces/EventBusNamespace/types.ts +0 -11
  93. package/src/namespaces/NavigationNamespace/NavigationNamespace.ts +0 -552
  94. package/src/namespaces/NavigationNamespace/constants.ts +0 -55
  95. package/src/namespaces/NavigationNamespace/index.ts +0 -5
  96. package/src/namespaces/NavigationNamespace/transition/completeTransition.ts +0 -108
  97. package/src/namespaces/NavigationNamespace/transition/errorHandling.ts +0 -124
  98. package/src/namespaces/NavigationNamespace/transition/guardPhase.ts +0 -283
  99. package/src/namespaces/NavigationNamespace/types.ts +0 -110
  100. package/src/namespaces/OptionsNamespace/OptionsNamespace.ts +0 -28
  101. package/src/namespaces/OptionsNamespace/constants.ts +0 -19
  102. package/src/namespaces/OptionsNamespace/helpers.ts +0 -50
  103. package/src/namespaces/OptionsNamespace/index.ts +0 -7
  104. package/src/namespaces/OptionsNamespace/validators.ts +0 -13
  105. package/src/namespaces/PluginsNamespace/PluginsNamespace.ts +0 -291
  106. package/src/namespaces/PluginsNamespace/constants.ts +0 -34
  107. package/src/namespaces/PluginsNamespace/index.ts +0 -7
  108. package/src/namespaces/PluginsNamespace/types.ts +0 -22
  109. package/src/namespaces/PluginsNamespace/validators.ts +0 -28
  110. package/src/namespaces/RouteLifecycleNamespace/RouteLifecycleNamespace.ts +0 -558
  111. package/src/namespaces/RouteLifecycleNamespace/index.ts +0 -5
  112. package/src/namespaces/RouteLifecycleNamespace/types.ts +0 -10
  113. package/src/namespaces/RouterLifecycleNamespace/RouterLifecycleNamespace.ts +0 -81
  114. package/src/namespaces/RouterLifecycleNamespace/constants.ts +0 -25
  115. package/src/namespaces/RouterLifecycleNamespace/index.ts +0 -5
  116. package/src/namespaces/RouterLifecycleNamespace/types.ts +0 -30
  117. package/src/namespaces/RoutesNamespace/RoutesNamespace.ts +0 -582
  118. package/src/namespaces/RoutesNamespace/constants.ts +0 -6
  119. package/src/namespaces/RoutesNamespace/forwardChain.ts +0 -34
  120. package/src/namespaces/RoutesNamespace/helpers.ts +0 -204
  121. package/src/namespaces/RoutesNamespace/index.ts +0 -11
  122. package/src/namespaces/RoutesNamespace/routeGuards.ts +0 -62
  123. package/src/namespaces/RoutesNamespace/routesStore.ts +0 -566
  124. package/src/namespaces/RoutesNamespace/types.ts +0 -81
  125. package/src/namespaces/StateNamespace/StateNamespace.ts +0 -224
  126. package/src/namespaces/StateNamespace/helpers.ts +0 -24
  127. package/src/namespaces/StateNamespace/index.ts +0 -5
  128. package/src/namespaces/StateNamespace/types.ts +0 -15
  129. package/src/namespaces/index.ts +0 -35
  130. package/src/stateMetaStore.ts +0 -15
  131. package/src/transitionPath.ts +0 -436
  132. package/src/typeGuards.ts +0 -59
  133. package/src/types/RouterValidator.ts +0 -156
  134. package/src/types.ts +0 -69
  135. package/src/utils/createRequestScope.ts +0 -174
  136. package/src/utils/getStaticPaths.ts +0 -50
  137. package/src/utils/hydrateRouter.ts +0 -89
  138. package/src/utils/index.ts +0 -27
  139. package/src/utils/serializeRouterState.ts +0 -120
  140. package/src/utils/serializeState.ts +0 -63
  141. package/src/validation.ts +0 -12
  142. package/src/wiring/RouterWiringBuilder.ts +0 -275
  143. package/src/wiring/index.ts +0 -7
  144. package/src/wiring/types.ts +0 -47
  145. package/src/wiring/wireRouter.ts +0 -26
@@ -1,224 +0,0 @@
1
- // packages/core/src/namespaces/StateNamespace/StateNamespace.ts
2
-
3
- import { areParamValuesEqual } from "./helpers";
4
- import { DEFAULT_TRANSITION, EMPTY_PARAMS } from "../../constants";
5
- import { freezeStateInPlace } from "../../helpers";
6
- import { setStateMetaParams } from "../../stateMetaStore";
7
-
8
- import type { StateNamespaceDependencies } from "./types";
9
- import type { Params, State } from "@real-router/types";
10
- import type { RouteTreeStateMeta } from "route-tree";
11
-
12
- /**
13
- * Independent namespace for managing router state storage and creation.
14
- *
15
- * Static methods handle validation (called by facade).
16
- * Instance methods handle state storage, freezing, and creation.
17
- */
18
- export class StateNamespace {
19
- /**
20
- * Cached frozen state - avoids structuredClone on every getState() call.
21
- */
22
- #frozenState: State | undefined = undefined;
23
-
24
- /**
25
- * Previous state before the last setState call.
26
- */
27
- #previousState: State | undefined = undefined;
28
-
29
- /**
30
- * Dependencies injected from Router.
31
- */
32
- #deps!: StateNamespaceDependencies;
33
-
34
- /**
35
- * Cache for URL params by route name.
36
- */
37
- readonly #urlParamsCache = new Map<string, string[]>();
38
-
39
- // =========================================================================
40
- // Instance methods (trust input - already validated by facade)
41
- // =========================================================================
42
-
43
- /**
44
- * Returns the current router state.
45
- *
46
- * The returned state is deeply frozen (immutable) for safety.
47
- * Returns `undefined` if the router has not been started or has been stopped.
48
- */
49
- get<P extends Params = Params>(): State<P> | undefined {
50
- return this.#frozenState as State<P> | undefined; // NOSONAR -- generic narrowing needed for public API
51
- }
52
-
53
- /**
54
- * Sets the current router state.
55
- *
56
- * The state is deeply frozen before storage to ensure immutability.
57
- * The previous state is preserved and accessible via `getPrevious()`.
58
- *
59
- * @param state - Already validated by facade, or undefined to clear
60
- */
61
- set(state: State | undefined): void {
62
- // Preserve current state as previous before updating
63
- this.#previousState = this.#frozenState;
64
-
65
- // If state is already frozen (from makeState()), use it directly.
66
- // For external states, freeze in place without cloning.
67
- this.#frozenState = state ? freezeStateInPlace(state) : undefined;
68
- }
69
-
70
- /**
71
- * Returns the previous router state (before the last navigation).
72
- */
73
- getPrevious(): State | undefined {
74
- return this.#previousState;
75
- }
76
-
77
- reset(): void {
78
- this.#frozenState = undefined;
79
- this.#previousState = undefined;
80
- this.#urlParamsCache.clear();
81
- }
82
-
83
- // =========================================================================
84
- // Dependency Injection
85
- // =========================================================================
86
-
87
- /**
88
- * Sets dependencies for state creation methods.
89
- * Must be called before using makeState, areStatesEqual, etc.
90
- */
91
- setDependencies(deps: StateNamespaceDependencies): void {
92
- this.#deps = deps;
93
- }
94
-
95
- // =========================================================================
96
- // State Creation Methods
97
- // =========================================================================
98
-
99
- /**
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.
109
- */
110
- makeState<P extends Params = Params>(
111
- name: string,
112
- params?: P,
113
- path?: string,
114
- meta?: RouteTreeStateMeta,
115
- skipFreeze?: boolean,
116
- ): State<P> {
117
- // Optimization: O(1) lookup instead of O(depth) ancestor iteration
118
- const defaultParamsConfig = this.#deps.getDefaultParams();
119
- const hasDefaultParams = Object.hasOwn(defaultParamsConfig, name);
120
-
121
- // Conditional allocation: avoid spreading when no defaultParams exist
122
- let mergedParams: P;
123
-
124
- if (hasDefaultParams) {
125
- mergedParams = Object.freeze({
126
- ...defaultParamsConfig[name],
127
- ...params,
128
- }) as P;
129
- } else if (!params || params === EMPTY_PARAMS) {
130
- mergedParams = EMPTY_PARAMS as P;
131
- } else {
132
- mergedParams = Object.freeze({ ...params });
133
- }
134
-
135
- const state = {
136
- name,
137
- params: mergedParams,
138
- path: path ?? this.#deps.buildPath(name, params),
139
- context: {},
140
- ...(!skipFreeze && { transition: DEFAULT_TRANSITION }),
141
- } as State<P>;
142
-
143
- if (meta) {
144
- setStateMetaParams(state, meta);
145
- }
146
-
147
- return skipFreeze ? state : freezeStateInPlace(state);
148
- }
149
-
150
- // =========================================================================
151
- // State Comparison Methods
152
- // =========================================================================
153
-
154
- /**
155
- * Compares two states for equality.
156
- * By default, ignores query params (only compares URL params).
157
- */
158
- areStatesEqual(
159
- state1: State | undefined,
160
- state2: State | undefined,
161
- ignoreQueryParams = true,
162
- ): boolean {
163
- if (!state1 || !state2) {
164
- return !!state1 === !!state2;
165
- }
166
-
167
- if (state1.name !== state2.name) {
168
- return false;
169
- }
170
-
171
- if (ignoreQueryParams) {
172
- const urlParams = this.#getUrlParams(state1.name);
173
-
174
- for (const urlParam of urlParams) {
175
- if (
176
- !areParamValuesEqual(state1.params[urlParam], state2.params[urlParam])
177
- ) {
178
- return false;
179
- }
180
- }
181
-
182
- return true;
183
- }
184
-
185
- const state1Keys = Object.keys(state1.params);
186
- const state2Keys = Object.keys(state2.params);
187
-
188
- if (state1Keys.length !== state2Keys.length) {
189
- return false;
190
- }
191
-
192
- for (const param of state1Keys) {
193
- if (
194
- !(param in state2.params) ||
195
- !areParamValuesEqual(state1.params[param], state2.params[param])
196
- ) {
197
- return false;
198
- }
199
- }
200
-
201
- return true;
202
- }
203
-
204
- // =========================================================================
205
- // Private Helpers
206
- // =========================================================================
207
-
208
- /**
209
- * Gets URL params for a route name, using cache for performance.
210
- */
211
- #getUrlParams(name: string): string[] {
212
- const cached = this.#urlParamsCache.get(name);
213
-
214
- if (cached !== undefined) {
215
- return cached;
216
- }
217
-
218
- const result = this.#deps.getUrlParams(name);
219
-
220
- this.#urlParamsCache.set(name, result);
221
-
222
- return result;
223
- }
224
- }
@@ -1,24 +0,0 @@
1
- // packages/core/src/namespaces/StateNamespace/helpers.ts
2
-
3
- export function areParamValuesEqual(val1: unknown, val2: unknown): boolean {
4
- if (val1 === val2) {
5
- return true;
6
- }
7
-
8
- if (Array.isArray(val1) && Array.isArray(val2)) {
9
- if (val1.length !== val2.length) {
10
- return false;
11
- }
12
-
13
- // eslint-disable-next-line unicorn/no-for-loop -- hot path: for-of entries() allocates iterator per recursive call
14
- for (let i = 0; i < val1.length; i++) {
15
- if (!areParamValuesEqual(val1[i], val2[i])) {
16
- return false;
17
- }
18
- }
19
-
20
- return true;
21
- }
22
-
23
- return false;
24
- }
@@ -1,5 +0,0 @@
1
- // packages/core/src/namespaces/StateNamespace/index.ts
2
-
3
- export { StateNamespace } from "./StateNamespace";
4
-
5
- export type { StateNamespaceDependencies } from "./types";
@@ -1,15 +0,0 @@
1
- // packages/core/src/namespaces/StateNamespace/types.ts
2
-
3
- import type { Params } from "@real-router/types";
4
-
5
- /**
6
- * Dependencies injected from Router for state creation.
7
- */
8
- export interface StateNamespaceDependencies {
9
- /** Get defaultParams config for a route */
10
- getDefaultParams: () => Record<string, Params>;
11
- /** Build URL path for a route */
12
- buildPath: (name: string, params?: Params) => string;
13
- /** Get URL params for a route (for areStatesEqual) */
14
- getUrlParams: (name: string) => string[];
15
- }
@@ -1,35 +0,0 @@
1
- // packages/core/src/namespaces/index.ts
2
-
3
- export { createDependenciesStore } from "./DependenciesNamespace";
4
-
5
- export type { DependenciesStore } from "./DependenciesNamespace";
6
-
7
- export {
8
- deepFreeze,
9
- defaultOptions,
10
- OptionsNamespace,
11
- } from "./OptionsNamespace";
12
-
13
- export { StateNamespace } from "./StateNamespace";
14
-
15
- export {
16
- PluginsNamespace,
17
- EVENTS_MAP,
18
- EVENT_METHOD_NAMES,
19
- } from "./PluginsNamespace";
20
-
21
- export { RouteLifecycleNamespace } from "./RouteLifecycleNamespace";
22
-
23
- export {
24
- RoutesNamespace,
25
- DEFAULT_ROUTE_NAME,
26
- createEmptyConfig,
27
- } from "./RoutesNamespace";
28
-
29
- export type { RouteConfig } from "./RoutesNamespace";
30
-
31
- export { NavigationNamespace } from "./NavigationNamespace";
32
-
33
- export { RouterLifecycleNamespace } from "./RouterLifecycleNamespace";
34
-
35
- export { EventBusNamespace } from "./EventBusNamespace";
@@ -1,15 +0,0 @@
1
- // packages/core/src/stateMetaStore.ts
2
-
3
- import type { Params, State } from "@real-router/types";
4
-
5
- const store = new WeakMap<State, Params>();
6
-
7
- /** @internal */
8
- export function getStateMetaParams(state: State): Params | undefined {
9
- return store.get(state);
10
- }
11
-
12
- /** @internal */
13
- export function setStateMetaParams(state: State, params: Params): void {
14
- store.set(state, params);
15
- }