@bleedingdev/modern-js-plugin-tanstack 3.5.0-ultramodern.9 → 3.5.0-ultramodern.91

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 (270) hide show
  1. package/dist/cjs/cli/artifacts.js +157 -0
  2. package/dist/cjs/cli/index.js +8 -79
  3. package/dist/cjs/cli/tanstackTypes/canonicalRoutes.js +113 -0
  4. package/dist/cjs/cli/tanstackTypes/shared.js +123 -0
  5. package/dist/cjs/cli/tanstackTypes/source.js +255 -0
  6. package/dist/cjs/cli/tanstackTypes.js +4 -350
  7. package/dist/cjs/runtime/blockingSubscribe.js +57 -0
  8. package/dist/cjs/runtime/{pluginCore.js → clientBasepath.js} +12 -19
  9. package/dist/cjs/runtime/clientHydration.js +118 -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 +7 -11
  13. package/dist/cjs/runtime/plugin.js +21 -125
  14. package/dist/cjs/runtime/plugin.node.js +45 -125
  15. package/dist/cjs/runtime/pluginShared.js +87 -0
  16. package/dist/cjs/runtime/prefetchLink.js +15 -2
  17. package/dist/cjs/runtime/register.js +3 -16
  18. package/dist/cjs/runtime/routeTree/components.js +102 -0
  19. package/dist/cjs/runtime/routeTree/construction.js +152 -0
  20. package/dist/cjs/runtime/routeTree/index.js +47 -0
  21. package/dist/cjs/runtime/routeTree/loaders.js +158 -0
  22. package/dist/cjs/runtime/routeTree/paths.js +57 -0
  23. package/dist/cjs/runtime/routeTree/staticData.js +63 -0
  24. package/dist/cjs/runtime/routeTree/tanstackRoutes.js +57 -0
  25. package/dist/cjs/runtime/routeTree/types.js +18 -0
  26. package/dist/cjs/runtime/routeTree.js +7 -320
  27. package/dist/cjs/runtime/router.js +15 -2
  28. package/dist/cjs/runtime/rsc/CompositeComponent.js +18 -13
  29. package/dist/cjs/runtime/rsc/ReplayableStream.js +0 -4
  30. package/dist/cjs/runtime/rsc/RscNodeRenderer.js +5 -16
  31. package/dist/cjs/runtime/rsc/client.js +8 -25
  32. package/dist/cjs/runtime/rsc/flightSerialization.js +132 -0
  33. package/dist/cjs/runtime/rsc/payloadErrors.js +99 -0
  34. package/dist/cjs/runtime/rsc/payloadFetch.js +105 -0
  35. package/dist/cjs/runtime/rsc/payloadRouter.js +21 -142
  36. package/dist/cjs/runtime/rsc/payloadRoutes.js +94 -0
  37. package/dist/cjs/runtime/rsc/payloadStorage.js +58 -0
  38. package/dist/cjs/runtime/rsc/server.js +14 -18
  39. package/dist/cjs/runtime/rsc/shared.js +68 -0
  40. package/dist/cjs/runtime/rsc/slotUsageSanitizer.js +1 -0
  41. package/dist/cjs/runtime/rsc/treeGetter.js +72 -0
  42. package/dist/cjs/runtime/shared/isAbsoluteUrl.js +47 -0
  43. package/dist/cjs/runtime/ssrManagedTags.js +103 -0
  44. package/dist/cjs/runtime/ssrPreload.js +89 -0
  45. package/dist/cjs/runtime/ssrTypes.js +18 -0
  46. package/dist/cjs/runtime/state.js +1 -1
  47. package/dist/cjs/runtime/submitAction.js +161 -0
  48. package/dist/cjs/runtime/utils.js +49 -86
  49. package/dist/esm/cli/artifacts.mjs +103 -0
  50. package/dist/esm/cli/index.mjs +8 -82
  51. package/dist/esm/cli/tanstackTypes/canonicalRoutes.mjs +75 -0
  52. package/dist/esm/cli/tanstackTypes/shared.mjs +61 -0
  53. package/dist/esm/cli/tanstackTypes/source.mjs +207 -0
  54. package/dist/esm/cli/tanstackTypes.mjs +2 -339
  55. package/dist/esm/runtime/blockingSubscribe.mjs +19 -0
  56. package/dist/esm/runtime/clientBasepath.mjs +10 -0
  57. package/dist/esm/runtime/clientHydration.mjs +71 -0
  58. package/dist/esm/runtime/dataMutation.mjs +2 -167
  59. package/dist/esm/runtime/formData.mjs +63 -0
  60. package/dist/esm/runtime/loaderBridge.mjs +5 -9
  61. package/dist/esm/runtime/plugin.mjs +14 -118
  62. package/dist/esm/runtime/plugin.node.mjs +41 -121
  63. package/dist/esm/runtime/pluginShared.mjs +40 -0
  64. package/dist/esm/runtime/prefetchLink.mjs +18 -5
  65. package/dist/esm/runtime/register.mjs +1 -14
  66. package/dist/esm/runtime/routeTree/components.mjs +55 -0
  67. package/dist/esm/runtime/routeTree/construction.mjs +111 -0
  68. package/dist/esm/runtime/routeTree/index.mjs +2 -0
  69. package/dist/esm/runtime/routeTree/loaders.mjs +117 -0
  70. package/dist/esm/runtime/routeTree/paths.mjs +16 -0
  71. package/dist/esm/runtime/routeTree/staticData.mjs +22 -0
  72. package/dist/esm/runtime/routeTree/tanstackRoutes.mjs +13 -0
  73. package/dist/esm/runtime/routeTree/types.mjs +0 -0
  74. package/dist/esm/runtime/routeTree.mjs +1 -318
  75. package/dist/esm/runtime/router.mjs +16 -2
  76. package/dist/esm/runtime/rsc/CompositeComponent.mjs +18 -13
  77. package/dist/esm/runtime/rsc/ReplayableStream.mjs +1 -1
  78. package/dist/esm/runtime/rsc/RscNodeRenderer.mjs +4 -15
  79. package/dist/esm/runtime/rsc/client.mjs +6 -26
  80. package/dist/esm/runtime/rsc/flightSerialization.mjs +88 -0
  81. package/dist/esm/runtime/rsc/payloadErrors.mjs +49 -0
  82. package/dist/esm/runtime/rsc/payloadFetch.mjs +55 -0
  83. package/dist/esm/runtime/rsc/payloadRouter.mjs +12 -133
  84. package/dist/esm/runtime/rsc/payloadRoutes.mjs +50 -0
  85. package/dist/esm/runtime/rsc/payloadStorage.mjs +14 -0
  86. package/dist/esm/runtime/rsc/server.mjs +17 -21
  87. package/dist/esm/runtime/rsc/shared.mjs +21 -0
  88. package/dist/esm/runtime/rsc/slotUsageSanitizer.mjs +1 -0
  89. package/dist/esm/runtime/rsc/treeGetter.mjs +34 -0
  90. package/dist/esm/runtime/shared/isAbsoluteUrl.mjs +9 -0
  91. package/dist/esm/runtime/ssrManagedTags.mjs +53 -0
  92. package/dist/esm/runtime/ssrPreload.mjs +51 -0
  93. package/dist/esm/runtime/ssrTypes.mjs +0 -0
  94. package/dist/esm/runtime/state.mjs +1 -1
  95. package/dist/esm/runtime/submitAction.mjs +120 -0
  96. package/dist/esm/runtime/utils.mjs +47 -75
  97. package/dist/esm-node/cli/artifacts.mjs +104 -0
  98. package/dist/esm-node/cli/index.mjs +8 -82
  99. package/dist/esm-node/cli/tanstackTypes/canonicalRoutes.mjs +76 -0
  100. package/dist/esm-node/cli/tanstackTypes/shared.mjs +62 -0
  101. package/dist/esm-node/cli/tanstackTypes/source.mjs +208 -0
  102. package/dist/esm-node/cli/tanstackTypes.mjs +2 -339
  103. package/dist/esm-node/runtime/blockingSubscribe.mjs +20 -0
  104. package/dist/esm-node/runtime/clientBasepath.mjs +11 -0
  105. package/dist/esm-node/runtime/clientHydration.mjs +72 -0
  106. package/dist/esm-node/runtime/dataMutation.mjs +2 -167
  107. package/dist/esm-node/runtime/formData.mjs +64 -0
  108. package/dist/esm-node/runtime/loaderBridge.mjs +5 -9
  109. package/dist/esm-node/runtime/plugin.mjs +14 -118
  110. package/dist/esm-node/runtime/plugin.node.mjs +41 -121
  111. package/dist/esm-node/runtime/pluginShared.mjs +41 -0
  112. package/dist/esm-node/runtime/prefetchLink.mjs +18 -5
  113. package/dist/esm-node/runtime/register.mjs +1 -14
  114. package/dist/esm-node/runtime/routeTree/components.mjs +56 -0
  115. package/dist/esm-node/runtime/routeTree/construction.mjs +112 -0
  116. package/dist/esm-node/runtime/routeTree/index.mjs +3 -0
  117. package/dist/esm-node/runtime/routeTree/loaders.mjs +118 -0
  118. package/dist/esm-node/runtime/routeTree/paths.mjs +17 -0
  119. package/dist/esm-node/runtime/routeTree/staticData.mjs +23 -0
  120. package/dist/esm-node/runtime/routeTree/tanstackRoutes.mjs +14 -0
  121. package/dist/esm-node/runtime/routeTree/types.mjs +1 -0
  122. package/dist/esm-node/runtime/routeTree.mjs +1 -318
  123. package/dist/esm-node/runtime/router.mjs +16 -2
  124. package/dist/esm-node/runtime/rsc/CompositeComponent.mjs +18 -13
  125. package/dist/esm-node/runtime/rsc/ReplayableStream.mjs +1 -1
  126. package/dist/esm-node/runtime/rsc/RscNodeRenderer.mjs +4 -15
  127. package/dist/esm-node/runtime/rsc/client.mjs +6 -26
  128. package/dist/esm-node/runtime/rsc/flightSerialization.mjs +89 -0
  129. package/dist/esm-node/runtime/rsc/payloadErrors.mjs +50 -0
  130. package/dist/esm-node/runtime/rsc/payloadFetch.mjs +56 -0
  131. package/dist/esm-node/runtime/rsc/payloadRouter.mjs +12 -133
  132. package/dist/esm-node/runtime/rsc/payloadRoutes.mjs +51 -0
  133. package/dist/esm-node/runtime/rsc/payloadStorage.mjs +15 -0
  134. package/dist/esm-node/runtime/rsc/server.mjs +17 -21
  135. package/dist/esm-node/runtime/rsc/shared.mjs +22 -0
  136. package/dist/esm-node/runtime/rsc/slotUsageSanitizer.mjs +1 -0
  137. package/dist/esm-node/runtime/rsc/treeGetter.mjs +35 -0
  138. package/dist/esm-node/runtime/shared/isAbsoluteUrl.mjs +10 -0
  139. package/dist/esm-node/runtime/ssrManagedTags.mjs +54 -0
  140. package/dist/esm-node/runtime/ssrPreload.mjs +52 -0
  141. package/dist/esm-node/runtime/ssrTypes.mjs +1 -0
  142. package/dist/esm-node/runtime/state.mjs +1 -1
  143. package/dist/esm-node/runtime/submitAction.mjs +121 -0
  144. package/dist/esm-node/runtime/utils.mjs +47 -75
  145. package/dist/types/cli/artifacts.d.ts +33 -0
  146. package/dist/types/cli/index.d.ts +2 -22
  147. package/dist/types/cli/tanstackTypes/canonicalRoutes.d.ts +22 -0
  148. package/dist/types/cli/tanstackTypes/shared.d.ts +20 -0
  149. package/dist/types/cli/tanstackTypes/source.d.ts +12 -0
  150. package/dist/types/cli/tanstackTypes.d.ts +3 -31
  151. package/dist/types/runtime/blockingSubscribe.d.ts +1 -0
  152. package/dist/types/runtime/clientBasepath.d.ts +1 -0
  153. package/dist/types/runtime/clientHydration.d.ts +10 -0
  154. package/dist/types/runtime/dataMutation.d.ts +3 -12
  155. package/dist/types/runtime/formData.d.ts +24 -0
  156. package/dist/types/runtime/loaderBridge.d.ts +2 -1
  157. package/dist/types/runtime/plugin.d.ts +1 -1
  158. package/dist/types/runtime/plugin.node.d.ts +1 -1
  159. package/dist/types/runtime/pluginShared.d.ts +38 -0
  160. package/dist/types/runtime/register.d.ts +10 -9
  161. package/dist/types/runtime/routeTree/components.d.ts +7 -0
  162. package/dist/types/runtime/routeTree/construction.d.ts +5 -0
  163. package/dist/types/runtime/routeTree/index.d.ts +2 -0
  164. package/dist/types/runtime/routeTree/loaders.d.ts +4 -0
  165. package/dist/types/runtime/routeTree/paths.d.ts +3 -0
  166. package/dist/types/runtime/routeTree/staticData.d.ts +19 -0
  167. package/dist/types/runtime/routeTree/tanstackRoutes.d.ts +4 -0
  168. package/dist/types/runtime/routeTree/types.d.ts +76 -0
  169. package/dist/types/runtime/routeTree.d.ts +1 -9
  170. package/dist/types/runtime/router.d.ts +6 -7
  171. package/dist/types/runtime/rsc/CompositeComponent.d.ts +1 -2
  172. package/dist/types/runtime/rsc/ReplayableStream.d.ts +3 -2
  173. package/dist/types/runtime/rsc/RscNodeRenderer.d.ts +2 -3
  174. package/dist/types/runtime/rsc/SlotContext.d.ts +2 -1
  175. package/dist/types/runtime/rsc/client.d.ts +2 -0
  176. package/dist/types/runtime/rsc/flightSerialization.d.ts +3 -0
  177. package/dist/types/runtime/rsc/payloadErrors.d.ts +6 -0
  178. package/dist/types/runtime/rsc/payloadFetch.d.ts +8 -0
  179. package/dist/types/runtime/rsc/payloadRouter.d.ts +2 -10
  180. package/dist/types/runtime/rsc/payloadRoutes.d.ts +40 -0
  181. package/dist/types/runtime/rsc/payloadStorage.d.ts +5 -0
  182. package/dist/types/runtime/rsc/shared.d.ts +18 -0
  183. package/dist/types/runtime/rsc/treeGetter.d.ts +1 -0
  184. package/dist/types/runtime/shared/isAbsoluteUrl.d.ts +1 -0
  185. package/dist/types/runtime/ssrManagedTags.d.ts +7 -0
  186. package/dist/types/runtime/ssrPreload.d.ts +2 -0
  187. package/dist/types/runtime/ssrTypes.d.ts +44 -0
  188. package/dist/types/runtime/state.d.ts +1 -1
  189. package/dist/types/runtime/submitAction.d.ts +14 -0
  190. package/dist/types/runtime/types.d.ts +4 -10
  191. package/dist/types/runtime/utils.d.ts +4 -24
  192. package/package.json +37 -17
  193. package/rstest.config.mts +23 -0
  194. package/src/cli/artifacts.ts +255 -0
  195. package/src/cli/index.ts +7 -185
  196. package/src/cli/tanstackTypes/canonicalRoutes.ts +157 -0
  197. package/src/cli/tanstackTypes/shared.ts +113 -0
  198. package/src/cli/tanstackTypes/source.ts +414 -0
  199. package/src/cli/tanstackTypes.ts +4 -647
  200. package/src/runtime/blockingSubscribe.ts +48 -0
  201. package/src/runtime/clientBasepath.ts +12 -0
  202. package/src/runtime/clientHydration.ts +149 -0
  203. package/src/runtime/dataMutation.tsx +9 -306
  204. package/src/runtime/formData.ts +153 -0
  205. package/src/runtime/loaderBridge.ts +11 -12
  206. package/src/runtime/plugin.node.tsx +76 -291
  207. package/src/runtime/plugin.tsx +21 -257
  208. package/src/runtime/pluginShared.ts +112 -0
  209. package/src/runtime/prefetchLink.tsx +78 -15
  210. package/src/runtime/register.ts +10 -42
  211. package/src/runtime/routeTree/components.ts +130 -0
  212. package/src/runtime/routeTree/construction.ts +238 -0
  213. package/src/runtime/routeTree/index.ts +7 -0
  214. package/src/runtime/routeTree/loaders.ts +232 -0
  215. package/src/runtime/routeTree/paths.ts +36 -0
  216. package/src/runtime/routeTree/staticData.ts +66 -0
  217. package/src/runtime/routeTree/tanstackRoutes.ts +36 -0
  218. package/src/runtime/routeTree/types.ts +87 -0
  219. package/src/runtime/routeTree.ts +5 -750
  220. package/src/runtime/router.ts +35 -7
  221. package/src/runtime/rsc/CompositeComponent.tsx +29 -20
  222. package/src/runtime/rsc/ReplayableStream.ts +2 -2
  223. package/src/runtime/rsc/RscNodeRenderer.tsx +9 -27
  224. package/src/runtime/rsc/SlotContext.tsx +1 -1
  225. package/src/runtime/rsc/client.tsx +12 -40
  226. package/src/runtime/rsc/flightSerialization.ts +158 -0
  227. package/src/runtime/rsc/payloadErrors.ts +73 -0
  228. package/src/runtime/rsc/payloadFetch.ts +92 -0
  229. package/src/runtime/rsc/payloadRouter.ts +29 -234
  230. package/src/runtime/rsc/payloadRoutes.ts +122 -0
  231. package/src/runtime/rsc/payloadStorage.ts +35 -0
  232. package/src/runtime/rsc/server.tsx +20 -29
  233. package/src/runtime/rsc/shared.ts +70 -0
  234. package/src/runtime/rsc/slotUsageSanitizer.ts +4 -0
  235. package/src/runtime/rsc/treeGetter.tsx +52 -0
  236. package/src/runtime/shared/isAbsoluteUrl.ts +8 -0
  237. package/src/runtime/ssrManagedTags.ts +107 -0
  238. package/src/runtime/ssrPreload.ts +125 -0
  239. package/src/runtime/ssrTypes.ts +51 -0
  240. package/src/runtime/state.ts +9 -3
  241. package/src/runtime/submitAction.ts +201 -0
  242. package/src/runtime/types.ts +4 -18
  243. package/src/runtime/utils.tsx +76 -110
  244. package/src/types/react-server-dom-rspack.d.ts +56 -0
  245. package/tests/castRatchet.test.ts +85 -0
  246. package/tests/realm-isolation.test.ts +114 -0
  247. package/tests/router/cli.test.ts +7 -0
  248. package/tests/router/clientHydration.test.tsx +61 -0
  249. package/tests/router/dataMutation.test.tsx +59 -0
  250. package/tests/router/fixtures/legacyRuntimeRouter.ts +10 -0
  251. package/tests/router/fixtures/router-gen.golden.txt +71 -0
  252. package/tests/router/fixtures/router-gen.oxlint.json +5 -0
  253. package/tests/router/flightSerialization.roundtrip.test.tsx +137 -0
  254. package/tests/router/generateRouteArtifacts.test.ts +106 -0
  255. package/tests/router/hooks.test.ts +14 -0
  256. package/tests/router/loaderBridge.test.ts +21 -0
  257. package/tests/router/prefetchLink.test.tsx +106 -59
  258. package/tests/router/prefetchLinkPreload.test.tsx +85 -0
  259. package/tests/router/register.test.ts +1 -39
  260. package/tests/router/routeTree.test.ts +51 -11
  261. package/tests/router/routerCompatibility.test.ts +245 -0
  262. package/tests/router/rsc.test.tsx +189 -0
  263. package/tests/router/rscPayloadRouterMatrix.test.ts +197 -0
  264. package/tests/router/slotUsageSanitizer.test.ts +23 -0
  265. package/tests/router/ssrPreload.test.ts +30 -0
  266. package/tests/router/tanstackTypes.test.ts +298 -1
  267. package/dist/esm/runtime/pluginCore.mjs +0 -14
  268. package/dist/esm-node/runtime/pluginCore.mjs +0 -15
  269. package/dist/types/runtime/pluginCore.d.ts +0 -21
  270. package/src/runtime/pluginCore.ts +0 -48
@@ -0,0 +1,121 @@
1
+ import "node:module";
2
+ import { formDataToTextPlain, formDataToUrlSearchParams, toFormData } from "./formData.mjs";
3
+ class RouteActionResponseError extends Error {
4
+ constructor(response, data){
5
+ super(`Route action failed with status ${response.status}`);
6
+ this.name = 'RouteActionResponseError';
7
+ this.response = response;
8
+ this.data = data;
9
+ }
10
+ }
11
+ function resolveRouteHandlers(router, actionTo) {
12
+ const builtLocation = router.buildLocation({
13
+ to: actionTo
14
+ });
15
+ const href = router.getParsedLocationHref(builtLocation);
16
+ const matchedRoutes = router.getMatchedRoutes(builtLocation.pathname);
17
+ const routeStaticData = matchedRoutes.foundRoute?.options?.staticData;
18
+ const action = routeStaticData?.modernRouteAction;
19
+ const loader = routeStaticData?.modernRouteLoader;
20
+ return {
21
+ action,
22
+ loader,
23
+ href,
24
+ params: matchedRoutes.routeParams || {}
25
+ };
26
+ }
27
+ function isRedirectResponse(value) {
28
+ if (!(value instanceof Response)) return false;
29
+ return [
30
+ 301,
31
+ 302,
32
+ 303,
33
+ 307,
34
+ 308
35
+ ].includes(value.status);
36
+ }
37
+ async function parseResponseData(response) {
38
+ if (204 === response.status) return null;
39
+ const contentType = response.headers.get('Content-Type') || '';
40
+ if (contentType.includes('application/json')) return response.json();
41
+ return response.text();
42
+ }
43
+ async function parseResponseResultOrThrow(response) {
44
+ const parsed = await parseResponseData(response);
45
+ if (!response.ok) throw new RouteActionResponseError(response, parsed);
46
+ return parsed;
47
+ }
48
+ async function submitRouteAction({ router, target, options = {}, isFetcher = false, onInvalidateStart }) {
49
+ const method = (options.method || 'post').toLowerCase();
50
+ const encType = options.encType || 'application/x-www-form-urlencoded';
51
+ const actionTo = options.action || '.';
52
+ const formData = toFormData(target);
53
+ const resolved = resolveRouteHandlers(router, actionTo);
54
+ if ('get' === method) {
55
+ const search = formDataToUrlSearchParams(formData).toString();
56
+ const requestUrl = new URL(resolved.href, window.location.origin);
57
+ requestUrl.search = search;
58
+ if (isFetcher && resolved.loader) {
59
+ const result = await resolved.loader({
60
+ request: new Request(requestUrl, {
61
+ method: 'GET'
62
+ }),
63
+ params: resolved.params
64
+ });
65
+ if (result instanceof Response) {
66
+ const redirectTo = result.headers.get('X-Modernjs-Redirect') || result.headers.get('Location');
67
+ if (redirectTo || isRedirectResponse(result)) {
68
+ await router.navigate({
69
+ to: redirectTo || '/'
70
+ });
71
+ return parseResponseData(result);
72
+ }
73
+ return parseResponseResultOrThrow(result);
74
+ }
75
+ return result;
76
+ }
77
+ await router.navigate({
78
+ href: `${requestUrl.pathname}${requestUrl.search}${requestUrl.hash}`
79
+ });
80
+ return;
81
+ }
82
+ if (!resolved.action) throw new Error(`No route action found for "${actionTo}"`);
83
+ const headers = new Headers();
84
+ let body = null;
85
+ if (encType.includes('application/json')) {
86
+ headers.set('Content-Type', 'application/json');
87
+ body = JSON.stringify(Object.fromEntries(formDataToUrlSearchParams(formData).entries()));
88
+ } else if (encType.includes('text/plain')) {
89
+ headers.set('Content-Type', 'text/plain;charset=UTF-8');
90
+ body = formDataToTextPlain(formData);
91
+ } else if (encType.includes('application/x-www-form-urlencoded')) {
92
+ headers.set('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
93
+ body = formDataToUrlSearchParams(formData);
94
+ } else body = formData;
95
+ const request = new Request(new URL(resolved.href, window.location.origin), {
96
+ method: method.toUpperCase(),
97
+ headers,
98
+ body
99
+ });
100
+ const result = await resolved.action({
101
+ request,
102
+ params: resolved.params
103
+ });
104
+ if (result instanceof Response) {
105
+ const redirectTo = result.headers.get('X-Modernjs-Redirect') || result.headers.get('Location');
106
+ if (redirectTo || isRedirectResponse(result)) {
107
+ await router.navigate({
108
+ to: redirectTo || '/'
109
+ });
110
+ return parseResponseData(result);
111
+ }
112
+ const parsed = isFetcher ? await parseResponseResultOrThrow(result) : await parseResponseData(result);
113
+ onInvalidateStart?.();
114
+ await router.invalidate();
115
+ return parsed;
116
+ }
117
+ onInvalidateStart?.();
118
+ await router.invalidate();
119
+ return result;
120
+ }
121
+ export { RouteActionResponseError, submitRouteAction };
@@ -1,84 +1,56 @@
1
1
  import "node:module";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import react from "react";
4
- function getRouteObjects(routes, { globalApp, ssrMode, props }) {
5
- const createLayoutElement = (Component)=>{
6
- const GlobalLayout = globalApp;
7
- if (!GlobalLayout) return Component;
8
- const LayoutWrapper = (props)=>{
9
- const LayoutComponent = GlobalLayout;
10
- return /*#__PURE__*/ jsx(LayoutComponent, {
11
- Component: Component,
12
- ...props
13
- });
14
- };
15
- return LayoutWrapper;
4
+ function withGlobalLayout(Component, globalApp) {
5
+ if (!globalApp) return Component;
6
+ const GlobalLayout = globalApp;
7
+ return function(props) {
8
+ return /*#__PURE__*/ jsx(GlobalLayout, {
9
+ Component: Component,
10
+ ...props
11
+ });
16
12
  };
17
- const routeObjects = [];
18
- for (const route of routes)if ('nested' === route.type) {
19
- const nestedRouteObject = {
20
- path: route.path,
21
- id: route.id,
22
- loader: route.loader,
23
- action: route.action,
24
- shouldRevalidate: route.shouldRevalidate,
25
- handle: {
26
- ...route.handle,
27
- ...'object' == typeof route.config ? route.config?.handle : {}
28
- },
29
- index: route.index,
30
- hasLoader: Boolean(route.loader),
31
- hasClientLoader: Boolean(route.clientData),
32
- hasAction: Boolean(route.action),
33
- ...route.isClientComponent ? {
34
- isClientComponent: true
35
- } : {},
36
- ...route.inValidSSRRoute ? {
37
- inValidSSRRoute: true
38
- } : {},
39
- lazyImport: route.lazyImport,
40
- Component: route.component ? route.component : void 0,
41
- errorElement: route.error ? /*#__PURE__*/ jsx(route.error, {}) : void 0,
42
- children: route.children ? route.children.map((child)=>getRouteObjects([
43
- child
44
- ], {
45
- globalApp,
46
- ssrMode,
47
- props
48
- })[0]) : void 0
49
- };
50
- routeObjects.push(nestedRouteObject);
51
- } else if ('function' == typeof route.component || 'object' == typeof route.component) {
52
- const LayoutComponent = createLayoutElement(route.component);
53
- const routeObject = {
54
- path: route.path,
55
- element: /*#__PURE__*/ react.createElement(LayoutComponent)
56
- };
57
- routeObjects.push(routeObject);
58
- }
59
- return routeObjects;
60
13
  }
61
- function createRouteObjectsFromConfig({ routesConfig, props, ssrMode }) {
14
+ function getRouteHandle(route) {
15
+ return {
16
+ ...route.handle,
17
+ ...'object' == typeof route.config ? route.config?.handle : {}
18
+ };
19
+ }
20
+ function toTanstackRouteObject(route, globalApp) {
21
+ if ('nested' === route.type) return {
22
+ path: route.path,
23
+ id: route.id,
24
+ loader: route.loader,
25
+ action: route.action,
26
+ shouldRevalidate: route.shouldRevalidate,
27
+ handle: getRouteHandle(route),
28
+ index: route.index,
29
+ hasLoader: route.hasLoader || Boolean(route.loader),
30
+ hasClientLoader: route.hasClientLoader || Boolean(route.clientData),
31
+ hasAction: route.hasAction || Boolean(route.action),
32
+ ...route.isClientComponent ? {
33
+ isClientComponent: true
34
+ } : {},
35
+ ...route.inValidSSRRoute ? {
36
+ inValidSSRRoute: true
37
+ } : {},
38
+ lazyImport: route.lazyImport,
39
+ Component: route.component ? route.component : void 0,
40
+ errorElement: route.error ? /*#__PURE__*/ react.createElement(route.error) : void 0,
41
+ children: route.children ? route.children.map((child)=>toTanstackRouteObject(child, globalApp)).filter((child)=>null !== child) : void 0
42
+ };
43
+ if ('function' != typeof route.component && 'object' != typeof route.component) return null;
44
+ const LayoutComponent = withGlobalLayout(route.component, globalApp);
45
+ return {
46
+ path: route.path,
47
+ element: /*#__PURE__*/ react.createElement(LayoutComponent)
48
+ };
49
+ }
50
+ function createTanstackRouteObjectsFromConfig({ routesConfig }) {
62
51
  if (!routesConfig) return null;
63
52
  const { routes, globalApp } = routesConfig;
64
53
  if (!routes) return null;
65
- return getRouteObjects(routes, {
66
- globalApp,
67
- ssrMode,
68
- props
69
- });
70
- }
71
- const urlJoin = (...parts)=>{
72
- const separator = '/';
73
- const replace = new RegExp(`${separator}{1,}`, 'g');
74
- return standardSlash(parts.join(separator).replace(replace, separator));
75
- };
76
- function standardSlash(str) {
77
- let addr = str;
78
- if (!addr || 'string' != typeof addr) return addr;
79
- if (addr.startsWith('.')) addr = addr.slice(1);
80
- if (!addr.startsWith('/')) addr = `/${addr}`;
81
- if (addr.endsWith('/') && '/' !== addr) addr = addr.slice(0, addr.length - 1);
82
- return addr;
54
+ return routes.map((route)=>toTanstackRouteObject(route, globalApp)).filter((route)=>null !== route);
83
55
  }
84
- export { createRouteObjectsFromConfig, getRouteObjects, standardSlash, urlJoin };
56
+ export { createTanstackRouteObjectsFromConfig };
@@ -0,0 +1,33 @@
1
+ import type { AppToolsContext } from '@modern-js/app-tools';
2
+ import type { NestedRouteForCli, PageRoute } from '@modern-js/types';
3
+ export declare function writeTanstackRegisterFile(opts: {
4
+ entries: string[];
5
+ generatedDirName?: string;
6
+ runtimeModule?: string;
7
+ srcDirectory: string;
8
+ canonicalRoutes?: Record<string, string> | null;
9
+ i18nRuntimeModule?: string;
10
+ }): Promise<void>;
11
+ export declare function writeTanstackRouterTypesForEntries(opts: {
12
+ appContext: AppToolsContext;
13
+ generatedDirName?: string;
14
+ routesByEntry: Record<string, (NestedRouteForCli | PageRoute)[]>;
15
+ /**
16
+ * Whether `@modern-js/plugin-i18n` is actually installed in the app. The
17
+ * `register.gen.d.ts` augmentation of '@modern-js/plugin-i18n/runtime' is
18
+ * only emitted when this is true — otherwise apps with a hand-rolled
19
+ * `/:lang/` param would fail typechecking on an unresolvable module.
20
+ */
21
+ i18nPluginInstalled?: boolean;
22
+ }): Promise<void>;
23
+ /**
24
+ * Headless regeneration of `router.gen.ts` / `register.gen.d.ts` for a generated
25
+ * app, without running a full dev/build. Drives the app-tools analyze `onPrepare`
26
+ * (which fires `generateEntryCode`) and returns before any bundling — the app's
27
+ * own registered plugin-tanstack writes the artifacts via its `generateEntryCode`
28
+ * subscriber. Reuses the exact hook dev/build use, so there is no scanning drift.
29
+ */
30
+ export declare function generateTanstackRouteArtifacts(opts: {
31
+ appDirectory: string;
32
+ version?: string;
33
+ }): Promise<void>;
@@ -1,6 +1,6 @@
1
- import type { AppTools, AppToolsContext, CliPlugin } from '@modern-js/app-tools';
2
- import type { NestedRouteForCli, PageRoute } from '@modern-js/types';
1
+ import type { AppTools, CliPlugin } from '@modern-js/app-tools';
3
2
  import { type TanstackRouteCodeSplittingOption } from './routeSplitting';
3
+ export { generateTanstackRouteArtifacts, writeTanstackRegisterFile, writeTanstackRouterTypesForEntries, } from './artifacts';
4
4
  export type { TanstackRouteCodeSplittingOption, TanstackRsbuildRouteSplittingProfile, } from './routeSplitting';
5
5
  export { createTanstackRsbuildRouteSplittingProfile, resolveTanstackRouteCodeSplittingEnabled, } from './routeSplitting';
6
6
  export { type CollectCanonicalRoutesOptions, collectCanonicalRoutesForEntry, generateTanstackRouterTypesSourceForEntry, } from './tanstackTypes';
@@ -9,25 +9,5 @@ export type TanstackRouterPluginOptions = {
9
9
  generatedDirName?: string;
10
10
  routeCodeSplitting?: TanstackRouteCodeSplittingOption;
11
11
  };
12
- export declare function writeTanstackRegisterFile(opts: {
13
- entries: string[];
14
- generatedDirName?: string;
15
- runtimeModule?: string;
16
- srcDirectory: string;
17
- canonicalRoutes?: Record<string, string> | null;
18
- i18nRuntimeModule?: string;
19
- }): Promise<void>;
20
- export declare function writeTanstackRouterTypesForEntries(opts: {
21
- appContext: AppToolsContext;
22
- generatedDirName?: string;
23
- routesByEntry: Record<string, (NestedRouteForCli | PageRoute)[]>;
24
- /**
25
- * Whether `@modern-js/plugin-i18n` is actually installed in the app. The
26
- * `register.gen.d.ts` augmentation of '@modern-js/plugin-i18n/runtime' is
27
- * only emitted when this is true — otherwise apps with a hand-rolled
28
- * `/:lang/` param would fail typechecking on an unresolvable module.
29
- */
30
- i18nPluginInstalled?: boolean;
31
- }): Promise<void>;
32
12
  export declare function tanstackRouterPlugin(options?: TanstackRouterPluginOptions): CliPlugin<AppTools>;
33
13
  export default tanstackRouterPlugin;
@@ -0,0 +1,22 @@
1
+ import type { NestedRouteForCli, PageRoute } from '@modern-js/types';
2
+ export type CollectCanonicalRoutesOptions = {
3
+ /**
4
+ * Whether a leading `:lang`/`:locale`/`:language` route param may be
5
+ * treated as an i18n locale prefix. This MUST only be enabled when
6
+ * `@modern-js/plugin-i18n` is actually installed: the emitted
7
+ * `declare module '@modern-js/plugin-i18n/runtime'` augmentation breaks
8
+ * typechecking (TS2664) for apps that hand-roll a `/:lang/` param without
9
+ * the plugin. Routes carrying `modernCanonicalPath` metadata are always
10
+ * honored — only plugin-i18n produces them.
11
+ */
12
+ localeParamHeuristic?: boolean;
13
+ };
14
+ /**
15
+ * Derive the canonical (language-agnostic) route map for an entry: the
16
+ * leading locale param is stripped and localized physical variants (routes
17
+ * carrying `modernCanonicalPath` metadata from `@modern-js/plugin-i18n`)
18
+ * collapse to their canonical pattern. Returns `null` when the entry has no
19
+ * i18n routing surface (no locale param and no localized variants), so plain
20
+ * TanStack apps never get a `@modern-js/plugin-i18n` module augmentation.
21
+ */
22
+ export declare function collectCanonicalRoutesForEntry(routes: (NestedRouteForCli | PageRoute)[], options?: CollectCanonicalRoutesOptions): Record<string, string> | null;
@@ -0,0 +1,20 @@
1
+ import type { NestedRouteForCli, PageRoute } from '@modern-js/types';
2
+ export { toTanstackPath } from '../../runtime/routeTree/paths';
3
+ export declare function resolveFileNoExt(inputNoExtPath: string): Promise<string | null>;
4
+ export declare function quote(str: string): string;
5
+ export declare function normalizeRelativeImport(p: string): string;
6
+ export declare function pickModernLoaderModule(route: NestedRouteForCli | PageRoute): {
7
+ loaderPath: string;
8
+ inline: boolean;
9
+ } | null;
10
+ export declare function pickRouteSearchContractModules(route: NestedRouteForCli | PageRoute): {
11
+ validateSearchPath: string | null;
12
+ loaderDepsPath: string | null;
13
+ };
14
+ export declare function isPathlessLayout(route: NestedRouteForCli | PageRoute): boolean;
15
+ export declare function isIndexRoute(route: NestedRouteForCli | PageRoute): boolean;
16
+ export declare function createRouteStaticDataSnippet(opts: {
17
+ modernRouteId?: string;
18
+ loaderName?: string | null;
19
+ actionName?: string | null;
20
+ }): string | null;
@@ -0,0 +1,12 @@
1
+ import type { AppToolsContext } from '@modern-js/app-tools';
2
+ import type { NestedRouteForCli, PageRoute } from '@modern-js/types';
3
+ type RouteForCli = NestedRouteForCli | PageRoute;
4
+ export declare function generateTanstackRouterTypesSourceForEntry(opts: {
5
+ appContext: AppToolsContext;
6
+ entryName: string;
7
+ generatedDirName?: string;
8
+ routes: RouteForCli[];
9
+ }): Promise<{
10
+ routerGenTs: string;
11
+ }>;
12
+ export {};
@@ -1,31 +1,3 @@
1
- import type { AppToolsContext } from '@modern-js/app-tools';
2
- import type { NestedRouteForCli, PageRoute } from '@modern-js/types';
3
- export type CollectCanonicalRoutesOptions = {
4
- /**
5
- * Whether a leading `:lang`/`:locale`/`:language` route param may be
6
- * treated as an i18n locale prefix. This MUST only be enabled when
7
- * `@modern-js/plugin-i18n` is actually installed: the emitted
8
- * `declare module '@modern-js/plugin-i18n/runtime'` augmentation breaks
9
- * typechecking (TS2664) for apps that hand-roll a `/:lang/` param without
10
- * the plugin. Routes carrying `modernCanonicalPath` metadata are always
11
- * honored — only plugin-i18n produces them.
12
- */
13
- localeParamHeuristic?: boolean;
14
- };
15
- /**
16
- * Derive the canonical (language-agnostic) route map for an entry: the
17
- * leading locale param is stripped and localized physical variants (routes
18
- * carrying `modernCanonicalPath` metadata from `@modern-js/plugin-i18n`)
19
- * collapse to their canonical pattern. Returns `null` when the entry has no
20
- * i18n routing surface (no locale param and no localized variants), so plain
21
- * TanStack apps never get a `@modern-js/plugin-i18n` module augmentation.
22
- */
23
- export declare function collectCanonicalRoutesForEntry(routes: (NestedRouteForCli | PageRoute)[], options?: CollectCanonicalRoutesOptions): Record<string, string> | null;
24
- export declare function generateTanstackRouterTypesSourceForEntry(opts: {
25
- appContext: AppToolsContext;
26
- entryName: string;
27
- generatedDirName?: string;
28
- routes: (NestedRouteForCli | PageRoute)[];
29
- }): Promise<{
30
- routerGenTs: string;
31
- }>;
1
+ export type { CollectCanonicalRoutesOptions } from './tanstackTypes/canonicalRoutes';
2
+ export { collectCanonicalRoutesForEntry } from './tanstackTypes/canonicalRoutes';
3
+ export { generateTanstackRouterTypesSourceForEntry } from './tanstackTypes/source';
@@ -0,0 +1 @@
1
+ export declare function wrapRouterSubscribeWithBlockState(router: unknown, getBlockNavState?: () => boolean): void;
@@ -0,0 +1 @@
1
+ export declare function isSegmentPrefix(pathname: string, base: string): boolean;
@@ -0,0 +1,10 @@
1
+ import { type AnyRouter } from '@tanstack/react-router';
2
+ export type WindowWithTanstackSsr = Window & {
3
+ $_TSR?: unknown;
4
+ };
5
+ export declare function hydrateTanstackRouter(router: AnyRouter): Promise<unknown>;
6
+ export declare function getTanstackSsrHydrationPromise(router: AnyRouter): Promise<unknown>;
7
+ export declare function hasTanstackSsrHydrationRecord(router: AnyRouter): boolean;
8
+ export declare function ModernRouterClient({ router }: {
9
+ router: AnyRouter;
10
+ }): import("react").FunctionComponentElement<import("@tanstack/react-router").RouterProps<AnyRouter, Record<string, any>>>;
@@ -1,16 +1,8 @@
1
1
  import type React from 'react';
2
- type SubmitTarget = HTMLFormElement | FormData | URLSearchParams | Record<string, string | number | boolean | null | undefined>;
3
- export type SubmitOptions = {
4
- action?: string;
5
- method?: string;
6
- encType?: string;
7
- };
2
+ import type { SubmitOptions, SubmitTarget } from './formData';
3
+ export type { SubmitOptions } from './formData';
4
+ export { RouteActionResponseError } from './submitAction';
8
5
  export type FetcherState = 'idle' | 'submitting' | 'loading';
9
- export declare class RouteActionResponseError<TData = unknown> extends Error {
10
- readonly response: Response;
11
- readonly data: TData;
12
- constructor(response: Response, data: TData);
13
- }
14
6
  export type FormProps = Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit' | 'action'> & {
15
7
  action?: string;
16
8
  onSubmit?: React.FormEventHandler<HTMLFormElement>;
@@ -26,4 +18,3 @@ export type Fetcher = {
26
18
  submit: (target: SubmitTarget, options?: FetcherSubmitOptions) => Promise<void>;
27
19
  };
28
20
  export declare function useFetcher(): Fetcher;
29
- export {};
@@ -0,0 +1,24 @@
1
+ import type React from 'react';
2
+ export type SubmitTarget = HTMLFormElement | FormData | URLSearchParams | Record<string, string | number | boolean | null | undefined>;
3
+ type SubmitterElement = HTMLButtonElement | HTMLInputElement;
4
+ export type SubmitOptions = {
5
+ action?: string;
6
+ method?: string;
7
+ encType?: string;
8
+ };
9
+ export declare function formDataToUrlSearchParams(formData: FormData): URLSearchParams;
10
+ export declare function formDataToTextPlain(formData: FormData): string;
11
+ export declare function toFormData(target: SubmitTarget): FormData;
12
+ export declare function getSubmitter(event: React.FormEvent<HTMLFormElement>): HTMLButtonElement | HTMLInputElement | null;
13
+ export declare function createFormDataFromSubmit({ form, submitter, }: {
14
+ form: HTMLFormElement;
15
+ submitter: SubmitterElement | null;
16
+ }): FormData;
17
+ export declare function resolveSubmitOptionsFromForm({ form, submitter, action, method, encType, }: {
18
+ form: HTMLFormElement;
19
+ submitter: SubmitterElement | null;
20
+ action?: string;
21
+ method?: string;
22
+ encType?: string;
23
+ }): Required<SubmitOptions>;
24
+ export {};
@@ -1,3 +1,5 @@
1
+ import { isAbsoluteUrl } from './shared/isAbsoluteUrl';
2
+ export { isAbsoluteUrl };
1
3
  /** Router context shape used by the generated TanStack router types. */
2
4
  export type ModernRouterContext = {
3
5
  request?: Request;
@@ -11,7 +13,6 @@ export declare function isRedirectResponse(res: Response): boolean;
11
13
  * the Modern Response handling would lose `to`-based (internal) targets.
12
14
  */
13
15
  export declare function isTanstackRedirect(value: unknown): boolean;
14
- export declare function isAbsoluteUrl(value: string): boolean;
15
16
  /**
16
17
  * Re-throw a Modern.js `Location` redirect as a TanStack redirect.
17
18
  *
@@ -1,4 +1,4 @@
1
- import { type TanstackRouterRuntimePlugin } from './pluginCore';
1
+ import { type TanstackRouterRuntimePlugin } from './pluginShared';
2
2
  import { type RouterConfig } from './types';
3
3
  export declare const tanstackRouterPlugin: (userConfig?: Partial<RouterConfig>) => TanstackRouterRuntimePlugin;
4
4
  export default tanstackRouterPlugin;
@@ -1,4 +1,4 @@
1
- import { type TanstackRouterRuntimePlugin } from './pluginCore';
1
+ import { type TanstackRouterRuntimePlugin } from './pluginShared';
2
2
  import { type RouterConfig } from './types';
3
3
  export declare const tanstackRouterPlugin: (userConfig?: Partial<RouterConfig>) => TanstackRouterRuntimePlugin;
4
4
  export default tanstackRouterPlugin;
@@ -0,0 +1,38 @@
1
+ import { type TInternalRuntimeContext } from '@modern-js/runtime/context';
2
+ import type { RouteObject } from '@modern-js/runtime-utils/router';
3
+ import type { RouterExtendsHooks } from './hooks';
4
+ import type { RouterConfig } from './types';
5
+ import { type SSRMode } from './utils';
6
+ type TanstackRouterRuntimeConfig = {
7
+ plugins?: TanstackRouterRuntimePlugin[];
8
+ router?: Partial<RouterConfig>;
9
+ [key: string]: unknown;
10
+ };
11
+ type RuntimeInterrupt = (value?: unknown) => unknown;
12
+ export type TanstackRouterPluginAPI = {
13
+ getRuntimeConfig: () => TanstackRouterRuntimeConfig;
14
+ getHooks: () => RouterExtendsHooks;
15
+ onBeforeRender: (listener: (context: TInternalRuntimeContext, interrupt: RuntimeInterrupt) => unknown) => void;
16
+ wrapRoot: (listener: (App: any) => any) => void;
17
+ [key: string]: any;
18
+ };
19
+ export type TanstackRouterRuntimePlugin = {
20
+ name?: string;
21
+ registryHooks?: RouterExtendsHooks;
22
+ setup?: (api: TanstackRouterPluginAPI) => unknown;
23
+ [key: string]: unknown;
24
+ };
25
+ type TanstackRouteConfig = {
26
+ mergedConfig: RouterConfig;
27
+ finalRouteConfig: RouterConfig['routesConfig'];
28
+ hasConfiguredRoutes: boolean;
29
+ };
30
+ export declare function getMergedRouterConfig(api: TanstackRouterPluginAPI, userConfig: Partial<RouterConfig>): RouterConfig;
31
+ export declare function getTanstackRouteConfig(api: TanstackRouterPluginAPI, userConfig: Partial<RouterConfig>): TanstackRouteConfig;
32
+ export declare function createTanstackRouteObjects({ hooks, routeConfig, ssrMode, }: {
33
+ hooks: RouterExtendsHooks;
34
+ routeConfig: TanstackRouteConfig;
35
+ ssrMode?: SSRMode;
36
+ }): RouteObject[];
37
+ export declare function joinBasename(baseUrl: string, basename: string): string;
38
+ export {};
@@ -1,9 +1,10 @@
1
- import { Form, RouteActionResponseError, useFetcher } from './dataMutation';
2
- export declare const tanstackRouterCompatBindings: {
3
- Form: typeof Form;
4
- Link: <TRouter extends import("@tanstack/router-core").AnyRouter = import("@tanstack/router-core").AnyRouter, const TFrom extends string = string, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = "">(props: import("./prefetchLink").LinkProps<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>) => import("react").ReactElement;
5
- NavLink: <TRouter extends import("@tanstack/router-core").AnyRouter = import("@tanstack/router-core").AnyRouter, const TFrom extends string = string, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = "">(props: import("./prefetchLink").LinkProps<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>) => import("react").ReactElement;
6
- Outlet: import("react").MemoExoticComponent<() => import("react").JSX.Element>;
7
- RouteActionResponseError: typeof RouteActionResponseError;
8
- useFetcher: typeof useFetcher;
9
- };
1
+ /**
2
+ * Registers TanStack in the @modern-js/runtime compatibility registry.
3
+ * Runtime entries bind the exported local factory into their own provider
4
+ * realm; registration remains for older runtime wrappers and mixed cohorts.
5
+ *
6
+ * This module is intentionally side-effectful (see `sideEffects` in
7
+ * package.json).
8
+ */
9
+ import { type RouterProviderFactory } from '@modern-js/runtime/context';
10
+ export declare const tanstackRouterProviderFactory: RouterProviderFactory;
@@ -0,0 +1,7 @@
1
+ import type { RouteObject } from '@modern-js/runtime-utils/router';
2
+ import { type ElementType } from 'react';
3
+ import type { RouteTreeOptions } from './types';
4
+ export declare function pickRouteModuleComponent(routeModule: unknown, seen?: Set<unknown>): ElementType<Record<string, unknown>> | undefined;
5
+ export declare function toRouteComponent(routeObject: RouteObject, options?: RouteTreeOptions): unknown;
6
+ export declare function toErrorComponent(routeObject: RouteObject): unknown;
7
+ export declare function toPendingComponent(routeObject: RouteObject): unknown;
@@ -0,0 +1,5 @@
1
+ import type { RouteObject } from '@modern-js/runtime-utils/router';
2
+ import type { AnyRouter } from '@tanstack/react-router';
3
+ import type { ModernTanstackRootRoute, RouteTreeOptions } from './types';
4
+ export declare function createRouteTreeFromRouteObjects(routes: RouteObject[], options?: RouteTreeOptions): ModernTanstackRootRoute;
5
+ export declare function getModernRouteIdsFromMatches(router: AnyRouter): string[];
@@ -0,0 +1,2 @@
1
+ export { pickRouteModuleComponent } from './components';
2
+ export { createRouteTreeFromRouteObjects, getModernRouteIdsFromMatches, } from './construction';
@@ -0,0 +1,4 @@
1
+ import type { RouteObject } from '@modern-js/runtime-utils/router';
2
+ import type { RouteRevalidationState, RouteTreeOptions, TanstackLoaderContext } from './types';
3
+ export declare function createModernShouldReload(shouldRevalidate: unknown, state: RouteRevalidationState): ((ctx: TanstackLoaderContext) => boolean | undefined) | undefined;
4
+ export declare function wrapRouteObjectLoader(route: RouteObject, revalidationState?: RouteRevalidationState, options?: RouteTreeOptions): ((ctx: TanstackLoaderContext) => Promise<unknown>) | undefined;
@@ -0,0 +1,3 @@
1
+ import type { RouteObject } from '@modern-js/runtime-utils/router';
2
+ export declare function toTanstackPath(pathname: string): string;
3
+ export declare function isRouteObjectPathlessLayout(route: RouteObject): boolean;
@@ -0,0 +1,19 @@
1
+ export declare function mergeModernRouteHandle(route: {
2
+ config?: {
3
+ handle?: Record<string, unknown>;
4
+ } | unknown;
5
+ handle?: Record<string, unknown>;
6
+ }): {
7
+ [x: string]: unknown;
8
+ } | undefined;
9
+ export declare function createRouteStaticData(opts: {
10
+ modernRouteId?: string;
11
+ modernRouteAction?: unknown;
12
+ modernRouteHandle?: unknown;
13
+ modernRouteHasAction?: boolean;
14
+ modernRouteHasClientLoader?: boolean;
15
+ modernRouteHasLoader?: boolean;
16
+ modernRouteIsClientComponent?: boolean;
17
+ modernRouteLoader?: unknown;
18
+ modernRouteShouldRevalidate?: unknown;
19
+ }): Record<string, unknown> | undefined;
@@ -0,0 +1,4 @@
1
+ import type { MutableTanstackRoute, TanstackRootRouteOptions, TanstackRouteOptions } from './types';
2
+ export declare function createTanstackRoute(options: TanstackRouteOptions): MutableTanstackRoute;
3
+ export declare function createTanstackRootRoute(options: TanstackRootRouteOptions): MutableTanstackRoute;
4
+ export declare function wrapRouteComponentWithModernContext(route: MutableTanstackRoute, component: unknown, routeId?: string): void;