@bleedingdev/modern-js-plugin-tanstack 3.5.0-ultramodern.30 → 3.5.0-ultramodern.31

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 (221) hide show
  1. package/dist/cjs/cli/artifacts.js +157 -0
  2. package/dist/cjs/cli/index.js +6 -103
  3. package/dist/cjs/cli/tanstackTypes/canonicalRoutes.js +113 -0
  4. package/dist/cjs/cli/tanstackTypes/shared.js +130 -0
  5. package/dist/cjs/cli/tanstackTypes/source.js +251 -0
  6. package/dist/cjs/cli/tanstackTypes.js +4 -350
  7. package/dist/cjs/runtime/blockingSubscribe.js +64 -0
  8. package/dist/cjs/runtime/{pluginCore.js → clientBasepath.js} +12 -19
  9. package/dist/cjs/runtime/clientHydration.js +129 -0
  10. package/dist/cjs/runtime/dataMutation.js +11 -176
  11. package/dist/cjs/runtime/formData.js +116 -0
  12. package/dist/cjs/runtime/loaderBridge.js +4 -1
  13. package/dist/cjs/runtime/plugin.js +21 -125
  14. package/dist/cjs/runtime/plugin.node.js +38 -119
  15. package/dist/cjs/runtime/pluginShared.js +90 -0
  16. package/dist/cjs/runtime/routeTree/components.js +102 -0
  17. package/dist/cjs/runtime/routeTree/construction.js +152 -0
  18. package/dist/cjs/runtime/routeTree/index.js +47 -0
  19. package/dist/cjs/runtime/routeTree/loaders.js +158 -0
  20. package/dist/cjs/runtime/routeTree/paths.js +57 -0
  21. package/dist/cjs/runtime/routeTree/staticData.js +63 -0
  22. package/dist/cjs/runtime/routeTree/tanstackRoutes.js +57 -0
  23. package/dist/cjs/runtime/routeTree/types.js +18 -0
  24. package/dist/cjs/runtime/routeTree.js +7 -320
  25. package/dist/cjs/runtime/rsc/CompositeComponent.js +18 -13
  26. package/dist/cjs/runtime/rsc/RscNodeRenderer.js +5 -16
  27. package/dist/cjs/runtime/rsc/client.js +8 -25
  28. package/dist/cjs/runtime/rsc/flightSerialization.js +132 -0
  29. package/dist/cjs/runtime/rsc/payloadErrors.js +99 -0
  30. package/dist/cjs/runtime/rsc/payloadFetch.js +117 -0
  31. package/dist/cjs/runtime/rsc/payloadRouter.js +21 -142
  32. package/dist/cjs/runtime/rsc/payloadRoutes.js +106 -0
  33. package/dist/cjs/runtime/rsc/payloadStorage.js +58 -0
  34. package/dist/cjs/runtime/rsc/server.js +14 -18
  35. package/dist/cjs/runtime/rsc/shared.js +71 -0
  36. package/dist/cjs/runtime/rsc/treeGetter.js +72 -0
  37. package/dist/cjs/runtime/ssrManagedTags.js +103 -0
  38. package/dist/cjs/runtime/ssrPreload.js +89 -0
  39. package/dist/cjs/runtime/ssrTypes.js +18 -0
  40. package/dist/cjs/runtime/submitAction.js +161 -0
  41. package/dist/cjs/runtime/utils.js +49 -86
  42. package/dist/esm/cli/artifacts.mjs +103 -0
  43. package/dist/esm/cli/index.mjs +4 -101
  44. package/dist/esm/cli/tanstackTypes/canonicalRoutes.mjs +75 -0
  45. package/dist/esm/cli/tanstackTypes/shared.mjs +68 -0
  46. package/dist/esm/cli/tanstackTypes/source.mjs +203 -0
  47. package/dist/esm/cli/tanstackTypes.mjs +2 -339
  48. package/dist/esm/runtime/blockingSubscribe.mjs +19 -0
  49. package/dist/esm/runtime/clientBasepath.mjs +10 -0
  50. package/dist/esm/runtime/clientHydration.mjs +70 -0
  51. package/dist/esm/runtime/dataMutation.mjs +2 -167
  52. package/dist/esm/runtime/formData.mjs +63 -0
  53. package/dist/esm/runtime/loaderBridge.mjs +4 -1
  54. package/dist/esm/runtime/plugin.mjs +14 -118
  55. package/dist/esm/runtime/plugin.node.mjs +33 -114
  56. package/dist/esm/runtime/pluginShared.mjs +40 -0
  57. package/dist/esm/runtime/routeTree/components.mjs +55 -0
  58. package/dist/esm/runtime/routeTree/construction.mjs +111 -0
  59. package/dist/esm/runtime/routeTree/index.mjs +2 -0
  60. package/dist/esm/runtime/routeTree/loaders.mjs +117 -0
  61. package/dist/esm/runtime/routeTree/paths.mjs +16 -0
  62. package/dist/esm/runtime/routeTree/staticData.mjs +22 -0
  63. package/dist/esm/runtime/routeTree/tanstackRoutes.mjs +13 -0
  64. package/dist/esm/runtime/routeTree/types.mjs +0 -0
  65. package/dist/esm/runtime/routeTree.mjs +1 -318
  66. package/dist/esm/runtime/rsc/CompositeComponent.mjs +18 -13
  67. package/dist/esm/runtime/rsc/RscNodeRenderer.mjs +4 -15
  68. package/dist/esm/runtime/rsc/client.mjs +6 -26
  69. package/dist/esm/runtime/rsc/flightSerialization.mjs +88 -0
  70. package/dist/esm/runtime/rsc/payloadErrors.mjs +49 -0
  71. package/dist/esm/runtime/rsc/payloadFetch.mjs +61 -0
  72. package/dist/esm/runtime/rsc/payloadRouter.mjs +12 -133
  73. package/dist/esm/runtime/rsc/payloadRoutes.mjs +50 -0
  74. package/dist/esm/runtime/rsc/payloadStorage.mjs +14 -0
  75. package/dist/esm/runtime/rsc/server.mjs +17 -21
  76. package/dist/esm/runtime/rsc/shared.mjs +21 -0
  77. package/dist/esm/runtime/rsc/treeGetter.mjs +34 -0
  78. package/dist/esm/runtime/ssrManagedTags.mjs +53 -0
  79. package/dist/esm/runtime/ssrPreload.mjs +51 -0
  80. package/dist/esm/runtime/ssrTypes.mjs +0 -0
  81. package/dist/esm/runtime/submitAction.mjs +120 -0
  82. package/dist/esm/runtime/utils.mjs +47 -75
  83. package/dist/esm-node/cli/artifacts.mjs +104 -0
  84. package/dist/esm-node/cli/index.mjs +4 -101
  85. package/dist/esm-node/cli/tanstackTypes/canonicalRoutes.mjs +76 -0
  86. package/dist/esm-node/cli/tanstackTypes/shared.mjs +69 -0
  87. package/dist/esm-node/cli/tanstackTypes/source.mjs +204 -0
  88. package/dist/esm-node/cli/tanstackTypes.mjs +2 -339
  89. package/dist/esm-node/runtime/blockingSubscribe.mjs +20 -0
  90. package/dist/esm-node/runtime/clientBasepath.mjs +11 -0
  91. package/dist/esm-node/runtime/clientHydration.mjs +71 -0
  92. package/dist/esm-node/runtime/dataMutation.mjs +2 -167
  93. package/dist/esm-node/runtime/formData.mjs +64 -0
  94. package/dist/esm-node/runtime/loaderBridge.mjs +4 -1
  95. package/dist/esm-node/runtime/plugin.mjs +14 -118
  96. package/dist/esm-node/runtime/plugin.node.mjs +33 -114
  97. package/dist/esm-node/runtime/pluginShared.mjs +41 -0
  98. package/dist/esm-node/runtime/routeTree/components.mjs +56 -0
  99. package/dist/esm-node/runtime/routeTree/construction.mjs +112 -0
  100. package/dist/esm-node/runtime/routeTree/index.mjs +3 -0
  101. package/dist/esm-node/runtime/routeTree/loaders.mjs +118 -0
  102. package/dist/esm-node/runtime/routeTree/paths.mjs +17 -0
  103. package/dist/esm-node/runtime/routeTree/staticData.mjs +23 -0
  104. package/dist/esm-node/runtime/routeTree/tanstackRoutes.mjs +14 -0
  105. package/dist/esm-node/runtime/routeTree/types.mjs +1 -0
  106. package/dist/esm-node/runtime/routeTree.mjs +1 -318
  107. package/dist/esm-node/runtime/rsc/CompositeComponent.mjs +18 -13
  108. package/dist/esm-node/runtime/rsc/RscNodeRenderer.mjs +4 -15
  109. package/dist/esm-node/runtime/rsc/client.mjs +6 -26
  110. package/dist/esm-node/runtime/rsc/flightSerialization.mjs +89 -0
  111. package/dist/esm-node/runtime/rsc/payloadErrors.mjs +50 -0
  112. package/dist/esm-node/runtime/rsc/payloadFetch.mjs +62 -0
  113. package/dist/esm-node/runtime/rsc/payloadRouter.mjs +12 -133
  114. package/dist/esm-node/runtime/rsc/payloadRoutes.mjs +51 -0
  115. package/dist/esm-node/runtime/rsc/payloadStorage.mjs +15 -0
  116. package/dist/esm-node/runtime/rsc/server.mjs +17 -21
  117. package/dist/esm-node/runtime/rsc/shared.mjs +22 -0
  118. package/dist/esm-node/runtime/rsc/treeGetter.mjs +35 -0
  119. package/dist/esm-node/runtime/ssrManagedTags.mjs +54 -0
  120. package/dist/esm-node/runtime/ssrPreload.mjs +52 -0
  121. package/dist/esm-node/runtime/ssrTypes.mjs +1 -0
  122. package/dist/esm-node/runtime/submitAction.mjs +121 -0
  123. package/dist/esm-node/runtime/utils.mjs +47 -75
  124. package/dist/types/cli/artifacts.d.ts +33 -0
  125. package/dist/types/cli/index.d.ts +2 -33
  126. package/dist/types/cli/tanstackTypes/canonicalRoutes.d.ts +22 -0
  127. package/dist/types/cli/tanstackTypes/shared.d.ts +20 -0
  128. package/dist/types/cli/tanstackTypes/source.d.ts +10 -0
  129. package/dist/types/cli/tanstackTypes.d.ts +3 -31
  130. package/dist/types/runtime/blockingSubscribe.d.ts +3 -0
  131. package/dist/types/runtime/clientBasepath.d.ts +1 -0
  132. package/dist/types/runtime/clientHydration.d.ts +19 -0
  133. package/dist/types/runtime/dataMutation.d.ts +3 -12
  134. package/dist/types/runtime/formData.d.ts +23 -0
  135. package/dist/types/runtime/plugin.d.ts +1 -1
  136. package/dist/types/runtime/plugin.node.d.ts +1 -1
  137. package/dist/types/runtime/{pluginCore.d.ts → pluginShared.d.ts} +14 -0
  138. package/dist/types/runtime/routeTree/components.d.ts +7 -0
  139. package/dist/types/runtime/routeTree/construction.d.ts +5 -0
  140. package/dist/types/runtime/routeTree/index.d.ts +2 -0
  141. package/dist/types/runtime/routeTree/loaders.d.ts +4 -0
  142. package/dist/types/runtime/routeTree/paths.d.ts +3 -0
  143. package/dist/types/runtime/routeTree/staticData.d.ts +19 -0
  144. package/dist/types/runtime/routeTree/tanstackRoutes.d.ts +4 -0
  145. package/dist/types/runtime/routeTree/types.d.ts +75 -0
  146. package/dist/types/runtime/routeTree.d.ts +1 -9
  147. package/dist/types/runtime/rsc/CompositeComponent.d.ts +1 -2
  148. package/dist/types/runtime/rsc/RscNodeRenderer.d.ts +2 -3
  149. package/dist/types/runtime/rsc/client.d.ts +2 -0
  150. package/dist/types/runtime/rsc/flightSerialization.d.ts +3 -0
  151. package/dist/types/runtime/rsc/payloadErrors.d.ts +6 -0
  152. package/dist/types/runtime/rsc/payloadFetch.d.ts +10 -0
  153. package/dist/types/runtime/rsc/payloadRouter.d.ts +2 -10
  154. package/dist/types/runtime/rsc/payloadRoutes.d.ts +43 -0
  155. package/dist/types/runtime/rsc/payloadStorage.d.ts +5 -0
  156. package/dist/types/runtime/rsc/shared.d.ts +19 -0
  157. package/dist/types/runtime/rsc/treeGetter.d.ts +1 -0
  158. package/dist/types/runtime/ssrManagedTags.d.ts +7 -0
  159. package/dist/types/runtime/ssrPreload.d.ts +2 -0
  160. package/dist/types/runtime/ssrTypes.d.ts +43 -0
  161. package/dist/types/runtime/state.d.ts +1 -1
  162. package/dist/types/runtime/submitAction.d.ts +14 -0
  163. package/dist/types/runtime/types.d.ts +3 -46
  164. package/dist/types/runtime/utils.d.ts +1 -22
  165. package/package.json +30 -9
  166. package/rstest.config.mts +1 -0
  167. package/src/cli/artifacts.ts +255 -0
  168. package/src/cli/index.ts +6 -246
  169. package/src/cli/tanstackTypes/canonicalRoutes.ts +157 -0
  170. package/src/cli/tanstackTypes/shared.ts +119 -0
  171. package/src/cli/tanstackTypes/source.ts +405 -0
  172. package/src/cli/tanstackTypes.ts +4 -647
  173. package/src/runtime/blockingSubscribe.ts +48 -0
  174. package/src/runtime/clientBasepath.ts +12 -0
  175. package/src/runtime/clientHydration.ts +151 -0
  176. package/src/runtime/dataMutation.tsx +9 -306
  177. package/src/runtime/formData.ts +153 -0
  178. package/src/runtime/loaderBridge.ts +8 -3
  179. package/src/runtime/plugin.node.tsx +60 -284
  180. package/src/runtime/plugin.tsx +21 -257
  181. package/src/runtime/pluginShared.ts +112 -0
  182. package/src/runtime/routeTree/components.ts +130 -0
  183. package/src/runtime/routeTree/construction.ts +238 -0
  184. package/src/runtime/routeTree/index.ts +7 -0
  185. package/src/runtime/routeTree/loaders.ts +232 -0
  186. package/src/runtime/routeTree/paths.ts +36 -0
  187. package/src/runtime/routeTree/staticData.ts +66 -0
  188. package/src/runtime/routeTree/tanstackRoutes.ts +36 -0
  189. package/src/runtime/routeTree/types.ts +87 -0
  190. package/src/runtime/routeTree.ts +5 -750
  191. package/src/runtime/rsc/CompositeComponent.tsx +29 -20
  192. package/src/runtime/rsc/RscNodeRenderer.tsx +9 -27
  193. package/src/runtime/rsc/client.tsx +12 -40
  194. package/src/runtime/rsc/flightSerialization.ts +158 -0
  195. package/src/runtime/rsc/payloadErrors.ts +73 -0
  196. package/src/runtime/rsc/payloadFetch.ts +97 -0
  197. package/src/runtime/rsc/payloadRouter.ts +29 -234
  198. package/src/runtime/rsc/payloadRoutes.ts +122 -0
  199. package/src/runtime/rsc/payloadStorage.ts +35 -0
  200. package/src/runtime/rsc/server.tsx +20 -29
  201. package/src/runtime/rsc/shared.ts +70 -0
  202. package/src/runtime/rsc/treeGetter.tsx +52 -0
  203. package/src/runtime/ssrManagedTags.ts +107 -0
  204. package/src/runtime/ssrPreload.ts +125 -0
  205. package/src/runtime/ssrTypes.ts +51 -0
  206. package/src/runtime/state.ts +4 -2
  207. package/src/runtime/submitAction.ts +194 -0
  208. package/src/runtime/types.ts +14 -51
  209. package/src/runtime/utils.tsx +72 -108
  210. package/src/types/react-server-dom-rspack.d.ts +56 -0
  211. package/tests/castRatchet.test.ts +85 -0
  212. package/tests/router/dataMutation.test.tsx +59 -0
  213. package/tests/router/fixtures/router-gen.golden.txt +72 -0
  214. package/tests/router/loaderBridge.test.ts +21 -0
  215. package/tests/router/routeTree.test.ts +46 -11
  216. package/tests/router/rsc.test.tsx +189 -0
  217. package/tests/router/ssrPreload.test.ts +30 -0
  218. package/tests/router/tanstackTypes.test.ts +254 -1
  219. package/dist/esm/runtime/pluginCore.mjs +0 -14
  220. package/dist/esm-node/runtime/pluginCore.mjs +0 -15
  221. package/src/runtime/pluginCore.ts +0 -56
@@ -0,0 +1,56 @@
1
+ import "node:module";
2
+ import { createElement } from "react";
3
+ function pickRouteModuleComponent(routeModule, seen = new Set()) {
4
+ if ('function' == typeof routeModule || routeModule && 'object' == typeof routeModule && '$$typeof' in routeModule) return routeModule;
5
+ if (!routeModule || 'object' != typeof routeModule) return;
6
+ if (seen.has(routeModule)) return;
7
+ seen.add(routeModule);
8
+ const module = routeModule;
9
+ for (const candidate of [
10
+ module.default,
11
+ module.Component
12
+ ]){
13
+ const component = pickRouteModuleComponent(candidate, seen);
14
+ if (component) return component;
15
+ }
16
+ }
17
+ function createServerLazyImportComponent(lazyImport, fallbackComponent) {
18
+ if ("u" > typeof document) return fallbackComponent;
19
+ let resolvedComponent;
20
+ let pendingLoad;
21
+ const load = async ()=>{
22
+ if (resolvedComponent) return resolvedComponent;
23
+ const routeModule = await lazyImport();
24
+ const component = pickRouteModuleComponent(routeModule);
25
+ if (component) resolvedComponent = component;
26
+ return resolvedComponent;
27
+ };
28
+ const Component = (props)=>{
29
+ if (resolvedComponent) return createElement(resolvedComponent, props);
30
+ pendingLoad ||= load();
31
+ throw pendingLoad;
32
+ };
33
+ Component.load = load;
34
+ Component.preload = load;
35
+ return Component;
36
+ }
37
+ function toRouteComponent(routeObject, options = {}) {
38
+ const route = routeObject;
39
+ const lazyImport = 'function' == typeof route.lazyImport ? route.lazyImport : void 0;
40
+ const routeComponent = route.Component || route.component;
41
+ const fallbackComponent = routeComponent ? routeComponent : route.element ? ()=>route.element : void 0;
42
+ if (lazyImport && fallbackComponent) return createServerLazyImportComponent(lazyImport, fallbackComponent);
43
+ if (routeComponent) return routeComponent;
44
+ const element = route.element;
45
+ if (element) return ()=>element;
46
+ }
47
+ function toErrorComponent(routeObject) {
48
+ const route = routeObject;
49
+ if (route.ErrorBoundary) return route.ErrorBoundary;
50
+ if (route.errorElement) return ()=>route.errorElement;
51
+ }
52
+ function toPendingComponent(routeObject) {
53
+ const route = routeObject;
54
+ return route.HydrateFallback || route.pendingComponent || void 0;
55
+ }
56
+ export { pickRouteModuleComponent, toErrorComponent, toPendingComponent, toRouteComponent };
@@ -0,0 +1,112 @@
1
+ import "node:module";
2
+ import { DefaultNotFound } from "@modern-js/runtime/context";
3
+ import { rootRouteId } from "@tanstack/react-router";
4
+ import { withModernRouteMatchContext } from "../outlet.mjs";
5
+ import { toErrorComponent, toPendingComponent, toRouteComponent } from "./components.mjs";
6
+ import { createModernShouldReload, wrapRouteObjectLoader } from "./loaders.mjs";
7
+ import { isRouteObjectPathlessLayout, toTanstackPath } from "./paths.mjs";
8
+ import { createRouteStaticData, mergeModernRouteHandle } from "./staticData.mjs";
9
+ import { createTanstackRootRoute, createTanstackRoute, wrapRouteComponentWithModernContext } from "./tanstackRoutes.mjs";
10
+ function createRouteFromRouteObject(opts) {
11
+ const { options = {}, parent, pathlessFallbackId = 'pathless', routeObject } = opts;
12
+ const modernRouteObject = routeObject;
13
+ const revalidationState = {};
14
+ const shouldRevalidate = modernRouteObject.shouldRevalidate;
15
+ const shouldReload = createModernShouldReload(shouldRevalidate, revalidationState);
16
+ const stableFallbackId = routeObject.id || modernRouteObject.file || pathlessFallbackId;
17
+ const component = toRouteComponent(routeObject, options);
18
+ const base = {
19
+ getParentRoute: ()=>parent,
20
+ component,
21
+ pendingComponent: toPendingComponent(routeObject),
22
+ errorComponent: toErrorComponent(routeObject),
23
+ validateSearch: modernRouteObject.validateSearch,
24
+ loaderDeps: modernRouteObject.loaderDeps,
25
+ staticData: createRouteStaticData({
26
+ modernRouteId: routeObject.id,
27
+ modernRouteAction: modernRouteObject.action,
28
+ modernRouteHandle: mergeModernRouteHandle(modernRouteObject),
29
+ modernRouteHasAction: modernRouteObject.hasAction || Boolean(modernRouteObject.action),
30
+ modernRouteHasClientLoader: modernRouteObject.hasClientLoader || void 0 !== modernRouteObject.clientData,
31
+ modernRouteHasLoader: modernRouteObject.hasLoader || 'function' == typeof modernRouteObject.loader,
32
+ modernRouteIsClientComponent: modernRouteObject.isClientComponent,
33
+ modernRouteLoader: modernRouteObject.loader,
34
+ modernRouteShouldRevalidate: shouldRevalidate
35
+ }),
36
+ loader: wrapRouteObjectLoader(routeObject, revalidationState, options)
37
+ };
38
+ if (modernRouteObject.inValidSSRRoute) base.ssr = false;
39
+ if (shouldReload) base.shouldReload = shouldReload;
40
+ if (isRouteObjectPathlessLayout(routeObject)) base.id = stableFallbackId;
41
+ else base.path = routeObject.index ? '/' : toTanstackPath(routeObject.path || '');
42
+ const route = createTanstackRoute(base);
43
+ wrapRouteComponentWithModernContext(route, component, routeObject.id);
44
+ const children = routeObject.children;
45
+ if (children && children.length > 0) {
46
+ const childRoutes = children.map((child, index)=>createRouteFromRouteObject({
47
+ options,
48
+ parent: route,
49
+ pathlessFallbackId: `pathless-${index}`,
50
+ routeObject: child
51
+ }));
52
+ route.addChildren(childRoutes);
53
+ }
54
+ return route;
55
+ }
56
+ function getRootLikeRouteObject(routes) {
57
+ return routes.find((route)=>'/' === route.path && !route.index);
58
+ }
59
+ function createRouteTreeFromRouteObjects(routes, options = {}) {
60
+ const rootLikeRoute = getRootLikeRouteObject(routes);
61
+ const rootRevalidationState = {};
62
+ const rootShouldRevalidate = rootLikeRoute?.shouldRevalidate;
63
+ const rootShouldReload = createModernShouldReload(rootShouldRevalidate, rootRevalidationState);
64
+ const rootComponent = rootLikeRoute ? toRouteComponent(rootLikeRoute) : void 0;
65
+ const rootRouteOptions = {
66
+ component: rootComponent,
67
+ pendingComponent: rootLikeRoute ? toPendingComponent(rootLikeRoute) : void 0,
68
+ errorComponent: rootLikeRoute ? toErrorComponent(rootLikeRoute) : void 0,
69
+ validateSearch: rootLikeRoute?.validateSearch,
70
+ loaderDeps: rootLikeRoute?.loaderDeps,
71
+ notFoundComponent: DefaultNotFound,
72
+ staticData: createRouteStaticData({
73
+ modernRouteId: rootLikeRoute?.id,
74
+ modernRouteAction: rootLikeRoute?.action,
75
+ modernRouteHandle: rootLikeRoute ? mergeModernRouteHandle(rootLikeRoute) : void 0,
76
+ modernRouteHasAction: rootLikeRoute?.hasAction || Boolean(rootLikeRoute?.action),
77
+ modernRouteHasClientLoader: rootLikeRoute?.hasClientLoader || void 0 !== rootLikeRoute?.clientData,
78
+ modernRouteHasLoader: rootLikeRoute?.hasLoader || 'function' == typeof rootLikeRoute?.loader,
79
+ modernRouteIsClientComponent: rootLikeRoute?.isClientComponent,
80
+ modernRouteLoader: rootLikeRoute?.loader,
81
+ modernRouteShouldRevalidate: rootShouldRevalidate
82
+ }),
83
+ loader: rootLikeRoute ? wrapRouteObjectLoader(rootLikeRoute, rootRevalidationState, options) : void 0
84
+ };
85
+ if (rootShouldReload) rootRouteOptions.shouldReload = rootShouldReload;
86
+ if (rootLikeRoute?.inValidSSRRoute) rootRouteOptions.ssr = false;
87
+ const rootRoute = createTanstackRootRoute(rootRouteOptions);
88
+ if (rootComponent) rootRoute.options.component = withModernRouteMatchContext(rootComponent, rootRouteId);
89
+ const topLevel = rootLikeRoute ? [
90
+ ...rootLikeRoute.children || [],
91
+ ...routes.filter((route)=>route !== rootLikeRoute)
92
+ ] : routes;
93
+ const childRoutes = topLevel.map((routeObject, index)=>createRouteFromRouteObject({
94
+ options,
95
+ parent: rootRoute,
96
+ pathlessFallbackId: `pathless-${index}`,
97
+ routeObject
98
+ }));
99
+ rootRoute.addChildren(childRoutes);
100
+ return rootRoute;
101
+ }
102
+ function getModernRouteIdsFromMatches(router) {
103
+ const matches = router.state.matches || [];
104
+ const routesById = router.routesById;
105
+ const ids = matches.map((match)=>{
106
+ const normalizedMatch = match;
107
+ const routeId = 'string' == typeof normalizedMatch.routeId ? normalizedMatch.routeId : void 0;
108
+ return normalizedMatch.route?.options?.staticData?.modernRouteId ?? (routeId ? routesById?.[routeId]?.options?.staticData?.modernRouteId : void 0);
109
+ }).filter((id)=>'string' == typeof id);
110
+ return Array.from(new Set(ids));
111
+ }
112
+ export { createRouteTreeFromRouteObjects, getModernRouteIdsFromMatches };
@@ -0,0 +1,3 @@
1
+ import "node:module";
2
+ export { pickRouteModuleComponent } from "./components.mjs";
3
+ export { createRouteTreeFromRouteObjects, getModernRouteIdsFromMatches } from "./construction.mjs";
@@ -0,0 +1,118 @@
1
+ import "node:module";
2
+ import { notFound } from "@tanstack/react-router";
3
+ import { isRedirectResponse, isResponse, isTanstackRedirect, throwTanstackRedirect } from "../loaderBridge.mjs";
4
+ import { isTanstackRscPayloadNavigationEnabled, loadTanstackRscRouteData } from "../rsc/payloadRouter.mjs";
5
+ function isModernDeferredData(value) {
6
+ if (!value || 'object' != typeof value) return false;
7
+ const deferred = value;
8
+ return true === deferred.__modern_deferred && Boolean(deferred.data) && 'object' == typeof deferred.data && !Array.isArray(deferred.data);
9
+ }
10
+ function normalizeModernLoaderResult(result) {
11
+ return isModernDeferredData(result) ? result.data : result;
12
+ }
13
+ function normalizeModernLoaderResponse(result) {
14
+ if (isResponse(result)) {
15
+ if (isRedirectResponse(result)) {
16
+ const location = result.headers.get('Location') || '/';
17
+ throwTanstackRedirect(location);
18
+ }
19
+ if (404 === result.status) throw notFound();
20
+ }
21
+ return normalizeModernLoaderResult(result);
22
+ }
23
+ function createModernRequest(input, signal) {
24
+ return new Request(input, {
25
+ signal
26
+ });
27
+ }
28
+ function getModernUrlFromLoaderContext(ctx) {
29
+ const href = 'string' == typeof ctx?.location ? ctx.location : ctx?.location?.publicHref || ctx?.location?.href || ctx?.location?.url?.href || '/';
30
+ const baseRequest = ctx?.context?.request instanceof Request ? ctx.context.request : void 0;
31
+ const baseUrl = baseRequest?.url || ("u" > typeof window ? window.origin : 'http://localhost');
32
+ return new URL(href || '/', baseUrl);
33
+ }
34
+ function rememberRouteLocation(state, ctx) {
35
+ state.currentUrl = getModernUrlFromLoaderContext(ctx);
36
+ state.currentParams = ctx?.params || {};
37
+ }
38
+ function createModernShouldReload(shouldRevalidate, state) {
39
+ if ('function' != typeof shouldRevalidate) return;
40
+ const revalidate = shouldRevalidate;
41
+ return (ctx)=>{
42
+ const nextUrl = getModernUrlFromLoaderContext(ctx);
43
+ const nextParams = ctx?.params || {};
44
+ const result = revalidate({
45
+ currentUrl: state.currentUrl || nextUrl,
46
+ currentParams: state.currentParams || nextParams,
47
+ nextUrl,
48
+ nextParams,
49
+ defaultShouldRevalidate: void 0
50
+ });
51
+ state.currentUrl = nextUrl;
52
+ state.currentParams = nextParams;
53
+ return 'boolean' == typeof result ? result : void 0;
54
+ };
55
+ }
56
+ function isRouteObjectSplatRoute(route) {
57
+ return 'string' == typeof route.path && route.path.includes('*');
58
+ }
59
+ function mapParamsForRouteObjectLoader({ route, params }) {
60
+ if (isRouteObjectSplatRoute(route)) {
61
+ const { _splat, ...rest } = params;
62
+ if (void 0 !== _splat) return {
63
+ ...rest,
64
+ '*': _splat
65
+ };
66
+ return rest;
67
+ }
68
+ return params;
69
+ }
70
+ function wrapRouteObjectLoader(route, revalidationState, options = {}) {
71
+ const modernRoute = route;
72
+ const routeLoader = modernRoute.loader;
73
+ if ('function' != typeof routeLoader) return;
74
+ return async (ctx)=>{
75
+ try {
76
+ if (revalidationState) rememberRouteLocation(revalidationState, ctx);
77
+ if ('function' == typeof modernRoute.lazyImport) try {
78
+ await modernRoute.lazyImport();
79
+ } catch {}
80
+ const signal = ctx?.abortController?.signal || ctx?.signal || new AbortController().signal;
81
+ const baseRequest = ctx?.context?.request instanceof Request ? ctx.context.request : void 0;
82
+ const href = 'string' == typeof ctx?.location ? ctx.location : ctx?.location?.publicHref || ctx?.location?.href || ctx?.location?.url?.href || '';
83
+ const request = void 0 !== baseRequest ? new Request(baseRequest, {
84
+ signal
85
+ }) : createModernRequest(href, signal);
86
+ const params = mapParamsForRouteObjectLoader({
87
+ route,
88
+ params: ctx.params || {}
89
+ });
90
+ const loadModernData = async ()=>{
91
+ const result = await routeLoader({
92
+ request,
93
+ params,
94
+ context: ctx?.context?.requestContext
95
+ });
96
+ return normalizeModernLoaderResponse(result);
97
+ };
98
+ if (options.rscPayloadRouter && isTanstackRscPayloadNavigationEnabled()) return loadTanstackRscRouteData({
99
+ hasClientLoader: modernRoute.hasClientLoader || void 0 !== modernRoute.clientData,
100
+ loadClientData: loadModernData,
101
+ request,
102
+ routeId: ctx.route?.id
103
+ });
104
+ return loadModernData();
105
+ } catch (err) {
106
+ if (isResponse(err)) {
107
+ if (isTanstackRedirect(err)) throw err;
108
+ if (isRedirectResponse(err)) {
109
+ const location = err.headers.get('Location') || '/';
110
+ throwTanstackRedirect(location);
111
+ }
112
+ if (404 === err.status) throw notFound();
113
+ }
114
+ throw err;
115
+ }
116
+ };
117
+ }
118
+ export { createModernShouldReload, wrapRouteObjectLoader };
@@ -0,0 +1,17 @@
1
+ import "node:module";
2
+ function toTanstackPath(pathname) {
3
+ return pathname.split('/').map((segment)=>{
4
+ if (!segment) return segment;
5
+ if ('*' === segment) return '$';
6
+ if (segment.startsWith(':')) {
7
+ const name = segment.slice(1);
8
+ if (name.endsWith('?')) return `{-$${name.slice(0, -1)}}`;
9
+ return `$${name}`;
10
+ }
11
+ return segment;
12
+ }).join('/');
13
+ }
14
+ function isRouteObjectPathlessLayout(route) {
15
+ return !route.path && !route.index;
16
+ }
17
+ export { isRouteObjectPathlessLayout, toTanstackPath };
@@ -0,0 +1,23 @@
1
+ import "node:module";
2
+ function mergeModernRouteHandle(route) {
3
+ const config = route.config;
4
+ const handle = {
5
+ ...route.handle,
6
+ ...config && 'object' == typeof config ? config.handle : {}
7
+ };
8
+ return Object.keys(handle).length > 0 ? handle : void 0;
9
+ }
10
+ function createRouteStaticData(opts) {
11
+ const staticData = {};
12
+ if (opts.modernRouteId) staticData.modernRouteId = opts.modernRouteId;
13
+ if (opts.modernRouteAction) staticData.modernRouteAction = opts.modernRouteAction;
14
+ if (opts.modernRouteHandle) staticData.modernRouteHandle = opts.modernRouteHandle;
15
+ if (opts.modernRouteHasAction) staticData.modernRouteHasAction = true;
16
+ if (opts.modernRouteHasClientLoader) staticData.modernRouteHasClientLoader = true;
17
+ if (opts.modernRouteHasLoader) staticData.modernRouteHasLoader = true;
18
+ if (opts.modernRouteIsClientComponent) staticData.modernRouteIsClientComponent = true;
19
+ if (opts.modernRouteLoader) staticData.modernRouteLoader = opts.modernRouteLoader;
20
+ if (opts.modernRouteShouldRevalidate) staticData.modernRouteShouldRevalidate = opts.modernRouteShouldRevalidate;
21
+ return Object.keys(staticData).length > 0 ? staticData : void 0;
22
+ }
23
+ export { createRouteStaticData, mergeModernRouteHandle };
@@ -0,0 +1,14 @@
1
+ import "node:module";
2
+ import { createRootRoute, createRoute } from "@tanstack/react-router";
3
+ import { withModernRouteMatchContext } from "../outlet.mjs";
4
+ function createTanstackRoute(options) {
5
+ return createRoute(options);
6
+ }
7
+ function createTanstackRootRoute(options) {
8
+ return createRootRoute(options);
9
+ }
10
+ function wrapRouteComponentWithModernContext(route, component, routeId) {
11
+ const routeMatchId = routeId || route.id;
12
+ if (component && routeMatchId) route.options.component = withModernRouteMatchContext(component, routeMatchId);
13
+ }
14
+ export { createTanstackRootRoute, createTanstackRoute, wrapRouteComponentWithModernContext };
@@ -0,0 +1 @@
1
+ import "node:module";
@@ -1,319 +1,2 @@
1
1
  import "node:module";
2
- import { DefaultNotFound } from "@modern-js/runtime/context";
3
- import { createRootRoute, createRoute, notFound, rootRouteId } from "@tanstack/react-router";
4
- import { createElement } from "react";
5
- import { isRedirectResponse, isResponse, isTanstackRedirect, throwTanstackRedirect } from "./loaderBridge.mjs";
6
- import { withModernRouteMatchContext } from "./outlet.mjs";
7
- import { isTanstackRscPayloadNavigationEnabled, loadTanstackRscRouteData } from "./rsc/payloadRouter.mjs";
8
- function createTanstackRoute(options) {
9
- return createRoute(options);
10
- }
11
- function createTanstackRootRoute(options) {
12
- return createRootRoute(options);
13
- }
14
- function wrapRouteComponentWithModernContext(route, component, routeId) {
15
- const routeMatchId = routeId || route.id;
16
- if (component && routeMatchId) route.options.component = withModernRouteMatchContext(component, routeMatchId);
17
- }
18
- function toTanstackPath(pathname) {
19
- return pathname.split('/').map((segment)=>{
20
- if (!segment) return segment;
21
- if ('*' === segment) return '$';
22
- if (segment.startsWith(':')) {
23
- const name = segment.slice(1);
24
- if (name.endsWith('?')) return `{-$${name.slice(0, -1)}}`;
25
- return `$${name}`;
26
- }
27
- return segment;
28
- }).join('/');
29
- }
30
- function isModernDeferredData(value) {
31
- if (!value || 'object' != typeof value) return false;
32
- const deferred = value;
33
- return true === deferred.__modern_deferred && Boolean(deferred.data) && 'object' == typeof deferred.data && !Array.isArray(deferred.data);
34
- }
35
- function normalizeModernLoaderResult(result) {
36
- return isModernDeferredData(result) ? result.data : result;
37
- }
38
- function normalizeModernLoaderResponse(result) {
39
- if (isResponse(result)) {
40
- if (isRedirectResponse(result)) {
41
- const location = result.headers.get('Location') || '/';
42
- throwTanstackRedirect(location);
43
- }
44
- if (404 === result.status) throw notFound();
45
- }
46
- return normalizeModernLoaderResult(result);
47
- }
48
- function pickRouteModuleComponent(routeModule, seen = new Set()) {
49
- if ('function' == typeof routeModule || routeModule && 'object' == typeof routeModule && '$$typeof' in routeModule) return routeModule;
50
- if (!routeModule || 'object' != typeof routeModule) return;
51
- if (seen.has(routeModule)) return;
52
- seen.add(routeModule);
53
- const module = routeModule;
54
- for (const candidate of [
55
- module.default,
56
- module.Component
57
- ]){
58
- const component = pickRouteModuleComponent(candidate, seen);
59
- if (component) return component;
60
- }
61
- }
62
- function createServerLazyImportComponent(lazyImport, fallbackComponent) {
63
- if ("u" > typeof document) return fallbackComponent;
64
- let resolvedComponent;
65
- let pendingLoad;
66
- const load = async ()=>{
67
- if (resolvedComponent) return resolvedComponent;
68
- const routeModule = await lazyImport();
69
- const component = pickRouteModuleComponent(routeModule);
70
- if (component) resolvedComponent = component;
71
- return resolvedComponent;
72
- };
73
- const Component = (props)=>{
74
- if (resolvedComponent) return createElement(resolvedComponent, props);
75
- pendingLoad ||= load();
76
- throw pendingLoad;
77
- };
78
- Component.load = load;
79
- Component.preload = load;
80
- return Component;
81
- }
82
- function createModernRequest(input, signal) {
83
- return new Request(input, {
84
- signal
85
- });
86
- }
87
- function getModernUrlFromLoaderContext(ctx) {
88
- const href = 'string' == typeof ctx?.location ? ctx.location : ctx?.location?.publicHref || ctx?.location?.href || ctx?.location?.url?.href || '/';
89
- const baseRequest = ctx?.context?.request instanceof Request ? ctx.context.request : void 0;
90
- const baseUrl = baseRequest?.url || ("u" > typeof window ? window.origin : 'http://localhost');
91
- return new URL(href || '/', baseUrl);
92
- }
93
- function rememberRouteLocation(state, ctx) {
94
- state.currentUrl = getModernUrlFromLoaderContext(ctx);
95
- state.currentParams = ctx?.params || {};
96
- }
97
- function createModernShouldReload(shouldRevalidate, state) {
98
- if ('function' != typeof shouldRevalidate) return;
99
- const revalidate = shouldRevalidate;
100
- return (ctx)=>{
101
- const nextUrl = getModernUrlFromLoaderContext(ctx);
102
- const nextParams = ctx?.params || {};
103
- const result = revalidate({
104
- currentUrl: state.currentUrl || nextUrl,
105
- currentParams: state.currentParams || nextParams,
106
- nextUrl,
107
- nextParams,
108
- defaultShouldRevalidate: void 0
109
- });
110
- state.currentUrl = nextUrl;
111
- state.currentParams = nextParams;
112
- return 'boolean' == typeof result ? result : void 0;
113
- };
114
- }
115
- function isRouteObjectPathlessLayout(route) {
116
- return !route.path && !route.index;
117
- }
118
- function isRouteObjectSplatRoute(route) {
119
- return 'string' == typeof route.path && route.path.includes('*');
120
- }
121
- function mapParamsForRouteObjectLoader({ route, params }) {
122
- if (isRouteObjectSplatRoute(route)) {
123
- const { _splat, ...rest } = params;
124
- if (void 0 !== _splat) return {
125
- ...rest,
126
- '*': _splat
127
- };
128
- return rest;
129
- }
130
- return params;
131
- }
132
- function wrapRouteObjectLoader(route, revalidationState, options = {}) {
133
- const modernRoute = route;
134
- const routeLoader = modernRoute.loader;
135
- if ('function' != typeof routeLoader) return;
136
- return async (ctx)=>{
137
- try {
138
- if (revalidationState) rememberRouteLocation(revalidationState, ctx);
139
- if ('function' == typeof modernRoute.lazyImport) try {
140
- await modernRoute.lazyImport();
141
- } catch {}
142
- const signal = ctx?.abortController?.signal || ctx?.signal || new AbortController().signal;
143
- const baseRequest = ctx?.context?.request instanceof Request ? ctx.context.request : void 0;
144
- const href = 'string' == typeof ctx?.location ? ctx.location : ctx?.location?.publicHref || ctx?.location?.href || ctx?.location?.url?.href || '';
145
- const request = void 0 !== baseRequest ? new Request(baseRequest, {
146
- signal
147
- }) : createModernRequest(href, signal);
148
- const params = mapParamsForRouteObjectLoader({
149
- route,
150
- params: ctx.params || {}
151
- });
152
- const loadModernData = async ()=>{
153
- const result = await routeLoader({
154
- request,
155
- params,
156
- context: ctx?.context?.requestContext
157
- });
158
- return normalizeModernLoaderResponse(result);
159
- };
160
- if (options.rscPayloadRouter && isTanstackRscPayloadNavigationEnabled()) return loadTanstackRscRouteData({
161
- hasClientLoader: modernRoute.hasClientLoader || void 0 !== modernRoute.clientData,
162
- loadClientData: loadModernData,
163
- request,
164
- routeId: ctx.route?.id
165
- });
166
- return loadModernData();
167
- } catch (err) {
168
- if (isResponse(err)) {
169
- if (isTanstackRedirect(err)) throw err;
170
- if (isRedirectResponse(err)) {
171
- const location = err.headers.get('Location') || '/';
172
- throwTanstackRedirect(location);
173
- }
174
- if (404 === err.status) throw notFound();
175
- }
176
- throw err;
177
- }
178
- };
179
- }
180
- function toRouteComponent(routeObject) {
181
- const route = routeObject;
182
- const lazyImport = 'function' == typeof route.lazyImport ? route.lazyImport : void 0;
183
- const fallbackComponent = route.Component ? route.Component : route.element ? ()=>route.element : void 0;
184
- if (lazyImport && fallbackComponent) return createServerLazyImportComponent(lazyImport, fallbackComponent);
185
- if (route.Component) return route.Component;
186
- const element = route.element;
187
- if (element) return ()=>element;
188
- }
189
- function toErrorComponent(routeObject) {
190
- const route = routeObject;
191
- if (route.ErrorBoundary) return route.ErrorBoundary;
192
- if (route.errorElement) return ()=>route.errorElement;
193
- }
194
- function toPendingComponent(routeObject) {
195
- const route = routeObject;
196
- return route.HydrateFallback || route.pendingComponent || void 0;
197
- }
198
- function mergeModernRouteHandle(route) {
199
- const config = route.config;
200
- const handle = {
201
- ...route.handle,
202
- ...config && 'object' == typeof config ? config.handle : {}
203
- };
204
- return Object.keys(handle).length > 0 ? handle : void 0;
205
- }
206
- function createRouteStaticData(opts) {
207
- const staticData = {};
208
- if (opts.modernRouteId) staticData.modernRouteId = opts.modernRouteId;
209
- if (opts.modernRouteAction) staticData.modernRouteAction = opts.modernRouteAction;
210
- if (opts.modernRouteHandle) staticData.modernRouteHandle = opts.modernRouteHandle;
211
- if (opts.modernRouteHasAction) staticData.modernRouteHasAction = true;
212
- if (opts.modernRouteHasClientLoader) staticData.modernRouteHasClientLoader = true;
213
- if (opts.modernRouteHasLoader) staticData.modernRouteHasLoader = true;
214
- if (opts.modernRouteIsClientComponent) staticData.modernRouteIsClientComponent = true;
215
- if (opts.modernRouteLoader) staticData.modernRouteLoader = opts.modernRouteLoader;
216
- if (opts.modernRouteShouldRevalidate) staticData.modernRouteShouldRevalidate = opts.modernRouteShouldRevalidate;
217
- return Object.keys(staticData).length > 0 ? staticData : void 0;
218
- }
219
- function createRouteFromRouteObject(opts) {
220
- const { options = {}, parent, routeObject } = opts;
221
- const modernRouteObject = routeObject;
222
- const revalidationState = {};
223
- const shouldRevalidate = modernRouteObject.shouldRevalidate;
224
- const shouldReload = createModernShouldReload(shouldRevalidate, revalidationState);
225
- const stableFallbackId = routeObject.id || modernRouteObject.file || routeObject.path || 'pathless';
226
- const component = toRouteComponent(routeObject);
227
- const base = {
228
- getParentRoute: ()=>parent,
229
- component,
230
- pendingComponent: toPendingComponent(routeObject),
231
- errorComponent: toErrorComponent(routeObject),
232
- validateSearch: modernRouteObject.validateSearch,
233
- loaderDeps: modernRouteObject.loaderDeps,
234
- staticData: createRouteStaticData({
235
- modernRouteId: routeObject.id,
236
- modernRouteAction: modernRouteObject.action,
237
- modernRouteHandle: mergeModernRouteHandle(modernRouteObject),
238
- modernRouteHasAction: modernRouteObject.hasAction || Boolean(modernRouteObject.action),
239
- modernRouteHasClientLoader: modernRouteObject.hasClientLoader || void 0 !== modernRouteObject.clientData,
240
- modernRouteHasLoader: modernRouteObject.hasLoader || 'function' == typeof modernRouteObject.loader,
241
- modernRouteIsClientComponent: modernRouteObject.isClientComponent,
242
- modernRouteLoader: modernRouteObject.loader,
243
- modernRouteShouldRevalidate: shouldRevalidate
244
- }),
245
- loader: wrapRouteObjectLoader(routeObject, revalidationState, options)
246
- };
247
- if (modernRouteObject.inValidSSRRoute) base.ssr = false;
248
- if (shouldReload) base.shouldReload = shouldReload;
249
- if (isRouteObjectPathlessLayout(routeObject)) base.id = stableFallbackId;
250
- else base.path = routeObject.index ? '/' : toTanstackPath(routeObject.path || '');
251
- const route = createTanstackRoute(base);
252
- wrapRouteComponentWithModernContext(route, component, routeObject.id);
253
- const children = routeObject.children;
254
- if (children && children.length > 0) {
255
- const childRoutes = children.map((child)=>createRouteFromRouteObject({
256
- options,
257
- parent: route,
258
- routeObject: child
259
- }));
260
- route.addChildren(childRoutes);
261
- }
262
- return route;
263
- }
264
- function getRootLikeRouteObject(routes) {
265
- return routes.find((route)=>'/' === route.path && !route.index);
266
- }
267
- function createRouteTreeFromRouteObjects(routes, options = {}) {
268
- const rootLikeRoute = getRootLikeRouteObject(routes);
269
- const rootRevalidationState = {};
270
- const rootShouldRevalidate = rootLikeRoute?.shouldRevalidate;
271
- const rootShouldReload = createModernShouldReload(rootShouldRevalidate, rootRevalidationState);
272
- const rootComponent = rootLikeRoute ? toRouteComponent(rootLikeRoute) : void 0;
273
- const rootRouteOptions = {
274
- component: rootComponent,
275
- pendingComponent: rootLikeRoute ? toPendingComponent(rootLikeRoute) : void 0,
276
- errorComponent: rootLikeRoute ? toErrorComponent(rootLikeRoute) : void 0,
277
- validateSearch: rootLikeRoute?.validateSearch,
278
- loaderDeps: rootLikeRoute?.loaderDeps,
279
- notFoundComponent: DefaultNotFound,
280
- staticData: createRouteStaticData({
281
- modernRouteId: rootLikeRoute?.id,
282
- modernRouteAction: rootLikeRoute?.action,
283
- modernRouteHandle: rootLikeRoute ? mergeModernRouteHandle(rootLikeRoute) : void 0,
284
- modernRouteHasAction: rootLikeRoute?.hasAction || Boolean(rootLikeRoute?.action),
285
- modernRouteHasClientLoader: rootLikeRoute?.hasClientLoader || void 0 !== rootLikeRoute?.clientData,
286
- modernRouteHasLoader: rootLikeRoute?.hasLoader || 'function' == typeof rootLikeRoute?.loader,
287
- modernRouteIsClientComponent: rootLikeRoute?.isClientComponent,
288
- modernRouteLoader: rootLikeRoute?.loader,
289
- modernRouteShouldRevalidate: rootShouldRevalidate
290
- }),
291
- loader: rootLikeRoute ? wrapRouteObjectLoader(rootLikeRoute, rootRevalidationState, options) : void 0
292
- };
293
- if (rootShouldReload) rootRouteOptions.shouldReload = rootShouldReload;
294
- if (rootLikeRoute?.inValidSSRRoute) rootRouteOptions.ssr = false;
295
- const rootRoute = createTanstackRootRoute(rootRouteOptions);
296
- if (rootComponent) rootRoute.options.component = withModernRouteMatchContext(rootComponent, rootRouteId);
297
- const topLevel = rootLikeRoute ? [
298
- ...rootLikeRoute.children || [],
299
- ...routes.filter((route)=>route !== rootLikeRoute)
300
- ] : routes;
301
- const childRoutes = topLevel.map((routeObject)=>createRouteFromRouteObject({
302
- options,
303
- parent: rootRoute,
304
- routeObject
305
- }));
306
- rootRoute.addChildren(childRoutes);
307
- return rootRoute;
308
- }
309
- function getModernRouteIdsFromMatches(router) {
310
- const matches = router.state.matches || [];
311
- const routesById = router.routesById;
312
- const ids = matches.map((match)=>{
313
- const normalizedMatch = match;
314
- const routeId = 'string' == typeof normalizedMatch.routeId ? normalizedMatch.routeId : void 0;
315
- return normalizedMatch.route?.options?.staticData?.modernRouteId ?? (routeId ? routesById?.[routeId]?.options?.staticData?.modernRouteId : void 0);
316
- }).filter((id)=>'string' == typeof id);
317
- return Array.from(new Set(ids));
318
- }
319
- export { createRouteTreeFromRouteObjects, getModernRouteIdsFromMatches };
2
+ export { createRouteTreeFromRouteObjects, getModernRouteIdsFromMatches, pickRouteModuleComponent } from "./routeTree/index.mjs";