@real-router/core 0.45.1 → 0.45.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/cjs/Router-Dh1xgFLI.d.ts.map +1 -0
  2. package/dist/cjs/RouterValidator-TUi8eT8Q.d.ts.map +1 -0
  3. package/dist/cjs/api.d.ts.map +1 -0
  4. package/dist/cjs/index.d.ts.map +1 -0
  5. package/dist/cjs/utils.d.ts.map +1 -0
  6. package/dist/cjs/validation.d.ts.map +1 -0
  7. package/dist/esm/Router-BPkXwb1J.d.mts.map +1 -0
  8. package/dist/esm/RouterValidator-DphcVMEp.d.mts.map +1 -0
  9. package/dist/esm/api.d.mts.map +1 -0
  10. package/dist/esm/index.d.mts.map +1 -0
  11. package/dist/esm/utils.d.mts.map +1 -0
  12. package/dist/esm/validation.d.mts.map +1 -0
  13. package/package.json +9 -12
  14. package/src/Router.ts +684 -0
  15. package/src/RouterError.ts +324 -0
  16. package/src/api/cloneRouter.ts +77 -0
  17. package/src/api/getDependenciesApi.ts +168 -0
  18. package/src/api/getLifecycleApi.ts +65 -0
  19. package/src/api/getPluginApi.ts +167 -0
  20. package/src/api/getRoutesApi.ts +573 -0
  21. package/src/api/helpers.ts +10 -0
  22. package/src/api/index.ts +16 -0
  23. package/src/api/types.ts +12 -0
  24. package/src/constants.ts +87 -0
  25. package/src/createRouter.ts +32 -0
  26. package/src/fsm/index.ts +5 -0
  27. package/src/fsm/routerFSM.ts +120 -0
  28. package/src/getNavigator.ts +30 -0
  29. package/src/guards.ts +46 -0
  30. package/src/helpers.ts +179 -0
  31. package/src/index.ts +50 -0
  32. package/src/internals.ts +173 -0
  33. package/src/namespaces/DependenciesNamespace/dependenciesStore.ts +30 -0
  34. package/src/namespaces/DependenciesNamespace/index.ts +5 -0
  35. package/src/namespaces/EventBusNamespace/EventBusNamespace.ts +311 -0
  36. package/src/namespaces/EventBusNamespace/index.ts +5 -0
  37. package/src/namespaces/EventBusNamespace/types.ts +11 -0
  38. package/src/namespaces/NavigationNamespace/NavigationNamespace.ts +405 -0
  39. package/src/namespaces/NavigationNamespace/constants.ts +55 -0
  40. package/src/namespaces/NavigationNamespace/index.ts +5 -0
  41. package/src/namespaces/NavigationNamespace/transition/completeTransition.ts +100 -0
  42. package/src/namespaces/NavigationNamespace/transition/errorHandling.ts +124 -0
  43. package/src/namespaces/NavigationNamespace/transition/guardPhase.ts +221 -0
  44. package/src/namespaces/NavigationNamespace/types.ts +100 -0
  45. package/src/namespaces/OptionsNamespace/OptionsNamespace.ts +28 -0
  46. package/src/namespaces/OptionsNamespace/constants.ts +19 -0
  47. package/src/namespaces/OptionsNamespace/helpers.ts +50 -0
  48. package/src/namespaces/OptionsNamespace/index.ts +7 -0
  49. package/src/namespaces/OptionsNamespace/validators.ts +13 -0
  50. package/src/namespaces/PluginsNamespace/PluginsNamespace.ts +291 -0
  51. package/src/namespaces/PluginsNamespace/constants.ts +34 -0
  52. package/src/namespaces/PluginsNamespace/index.ts +7 -0
  53. package/src/namespaces/PluginsNamespace/types.ts +22 -0
  54. package/src/namespaces/PluginsNamespace/validators.ts +28 -0
  55. package/src/namespaces/RouteLifecycleNamespace/RouteLifecycleNamespace.ts +377 -0
  56. package/src/namespaces/RouteLifecycleNamespace/index.ts +5 -0
  57. package/src/namespaces/RouteLifecycleNamespace/types.ts +10 -0
  58. package/src/namespaces/RouterLifecycleNamespace/RouterLifecycleNamespace.ts +81 -0
  59. package/src/namespaces/RouterLifecycleNamespace/constants.ts +25 -0
  60. package/src/namespaces/RouterLifecycleNamespace/index.ts +5 -0
  61. package/src/namespaces/RouterLifecycleNamespace/types.ts +26 -0
  62. package/src/namespaces/RoutesNamespace/RoutesNamespace.ts +535 -0
  63. package/src/namespaces/RoutesNamespace/constants.ts +6 -0
  64. package/src/namespaces/RoutesNamespace/forwardChain.ts +34 -0
  65. package/src/namespaces/RoutesNamespace/helpers.ts +126 -0
  66. package/src/namespaces/RoutesNamespace/index.ts +11 -0
  67. package/src/namespaces/RoutesNamespace/routeGuards.ts +62 -0
  68. package/src/namespaces/RoutesNamespace/routesStore.ts +346 -0
  69. package/src/namespaces/RoutesNamespace/types.ts +81 -0
  70. package/src/namespaces/StateNamespace/StateNamespace.ts +211 -0
  71. package/src/namespaces/StateNamespace/helpers.ts +24 -0
  72. package/src/namespaces/StateNamespace/index.ts +5 -0
  73. package/src/namespaces/StateNamespace/types.ts +15 -0
  74. package/src/namespaces/index.ts +35 -0
  75. package/src/stateMetaStore.ts +15 -0
  76. package/src/transitionPath.ts +436 -0
  77. package/src/typeGuards.ts +59 -0
  78. package/src/types/RouterValidator.ts +154 -0
  79. package/src/types.ts +69 -0
  80. package/src/utils/getStaticPaths.ts +50 -0
  81. package/src/utils/index.ts +5 -0
  82. package/src/utils/serializeState.ts +22 -0
  83. package/src/validation.ts +12 -0
  84. package/src/wiring/RouterWiringBuilder.ts +261 -0
  85. package/src/wiring/index.ts +7 -0
  86. package/src/wiring/types.ts +47 -0
  87. package/src/wiring/wireRouter.ts +26 -0
@@ -0,0 +1,167 @@
1
+ import { throwIfDisposed } from "./helpers";
2
+ import { errorCodes } from "../constants";
3
+ import { getInternals } from "../internals";
4
+ import { RouterError } from "../RouterError";
5
+
6
+ import type { PluginApi } from "./types";
7
+ import type { DefaultDependencies, Params, Router } from "@real-router/types";
8
+
9
+ export function getPluginApi<
10
+ Dependencies extends DefaultDependencies = DefaultDependencies,
11
+ >(router: Router<Dependencies>): PluginApi {
12
+ const ctx = getInternals(router);
13
+
14
+ return {
15
+ makeState: (name, params, path, meta) => {
16
+ ctx.validator?.state.validateMakeStateArgs(name, params, path);
17
+
18
+ return ctx.makeState(
19
+ name,
20
+ params,
21
+ path,
22
+ meta?.params as
23
+ | Record<string, Record<string, "url" | "query">>
24
+ | undefined,
25
+ );
26
+ },
27
+ buildState: (routeName, routeParams) => {
28
+ ctx.validator?.routes.validateStateBuilderArgs(
29
+ routeName,
30
+ routeParams,
31
+ "buildState",
32
+ );
33
+
34
+ const { name, params } = ctx.forwardState(routeName, routeParams);
35
+
36
+ return ctx.buildStateResolved(name, params);
37
+ },
38
+ forwardState: <P extends Params = Params>(
39
+ routeName: string,
40
+ routeParams: P,
41
+ ) => {
42
+ ctx.validator?.routes.validateStateBuilderArgs(
43
+ routeName,
44
+ routeParams,
45
+ "forwardState",
46
+ );
47
+
48
+ return ctx.forwardState(routeName, routeParams);
49
+ },
50
+ matchPath: (path) => {
51
+ ctx.validator?.routes.validateMatchPathArgs(path);
52
+
53
+ return ctx.matchPath(path, ctx.getOptions());
54
+ },
55
+ setRootPath: (rootPath) => {
56
+ throwIfDisposed(ctx.isDisposed);
57
+
58
+ ctx.validator?.routes.validateSetRootPathArgs(rootPath);
59
+
60
+ ctx.setRootPath(rootPath);
61
+ },
62
+ getRootPath: ctx.getRootPath,
63
+ addEventListener: (eventName, cb) => {
64
+ throwIfDisposed(ctx.isDisposed);
65
+
66
+ ctx.validator?.eventBus.validateListenerArgs(eventName, cb);
67
+
68
+ return ctx.addEventListener(eventName, cb);
69
+ },
70
+ buildNavigationState: (name, params = {}) => {
71
+ ctx.validator?.routes.validateStateBuilderArgs(
72
+ name,
73
+ params,
74
+ "buildNavigationState",
75
+ );
76
+
77
+ const { name: resolvedName, params: resolvedParams } = ctx.forwardState(
78
+ name,
79
+ params,
80
+ );
81
+ const routeInfo = ctx.buildStateResolved(resolvedName, resolvedParams);
82
+
83
+ if (!routeInfo) {
84
+ return;
85
+ }
86
+
87
+ return ctx.makeState(
88
+ routeInfo.name,
89
+ routeInfo.params,
90
+ ctx.buildPath(routeInfo.name, routeInfo.params),
91
+ routeInfo.meta,
92
+ );
93
+ },
94
+ getOptions: ctx.getOptions,
95
+ getTree: ctx.getTree,
96
+ addInterceptor: (method, fn) => {
97
+ throwIfDisposed(ctx.isDisposed);
98
+ ctx.validator?.plugins.validateAddInterceptorArgs(method, fn);
99
+ let list = ctx.interceptors.get(method);
100
+
101
+ if (!list) {
102
+ list = [];
103
+ ctx.interceptors.set(method, list);
104
+ }
105
+
106
+ list.push(fn);
107
+
108
+ return () => {
109
+ const index = list.indexOf(fn);
110
+
111
+ if (index !== -1) {
112
+ list.splice(index, 1);
113
+ }
114
+ };
115
+ },
116
+ getRouteConfig: (name) => {
117
+ const store = ctx.routeGetStore();
118
+
119
+ if (!store.matcher.hasRoute(name)) {
120
+ return;
121
+ }
122
+
123
+ return store.routeCustomFields[name];
124
+ },
125
+ extendRouter: (extensions: Record<string, unknown>) => {
126
+ throwIfDisposed(ctx.isDisposed);
127
+
128
+ const keys = Object.keys(extensions);
129
+
130
+ for (const key of keys) {
131
+ if (key in router) {
132
+ throw new RouterError(errorCodes.PLUGIN_CONFLICT, {
133
+ message: `Cannot extend router: property "${key}" already exists`,
134
+ });
135
+ }
136
+ }
137
+
138
+ for (const key of keys) {
139
+ (router as Record<string, unknown>)[key] = extensions[key];
140
+ }
141
+
142
+ const extensionRecord = { keys };
143
+
144
+ ctx.routerExtensions.push(extensionRecord);
145
+
146
+ let removed = false;
147
+
148
+ return () => {
149
+ if (removed) {
150
+ return;
151
+ }
152
+
153
+ removed = true;
154
+
155
+ for (const key of extensionRecord.keys) {
156
+ delete (router as Record<string, unknown>)[key];
157
+ }
158
+
159
+ const idx = ctx.routerExtensions.indexOf(extensionRecord);
160
+
161
+ if (idx !== -1) {
162
+ ctx.routerExtensions.splice(idx, 1);
163
+ }
164
+ };
165
+ },
166
+ };
167
+ }