@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,23 @@
1
+ import type React from 'react';
2
+ export type SubmitTarget = HTMLFormElement | FormData | URLSearchParams | Record<string, string | number | boolean | null | undefined>;
3
+ export 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>;
@@ -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;
@@ -1,6 +1,8 @@
1
1
  import { type TInternalRuntimeContext } from '@modern-js/runtime/context';
2
+ import type { RouteObject } from '@modern-js/runtime-utils/router';
2
3
  import type { RouterExtendsHooks } from './hooks';
3
4
  import type { RouterConfig } from './types';
5
+ import { type SSRMode } from './utils';
4
6
  export type TanstackRouterRuntimeConfig = {
5
7
  plugins?: TanstackRouterRuntimePlugin[];
6
8
  router?: Partial<RouterConfig>;
@@ -20,6 +22,18 @@ export type TanstackRouterRuntimePlugin = {
20
22
  setup?: (api: TanstackRouterPluginAPI) => unknown;
21
23
  [key: string]: unknown;
22
24
  };
25
+ export type TanstackRouteConfig = {
26
+ mergedConfig: RouterConfig;
27
+ finalRouteConfig: RouterConfig['routesConfig'];
28
+ hasConfiguredRoutes: boolean;
29
+ };
23
30
  export declare function getMergedRouterConfig(api: TanstackRouterPluginAPI, userConfig: Partial<RouterConfig>): RouterConfig;
24
31
  export declare function getFinalRouteConfig(mergedConfig: RouterConfig): RouterConfig['routesConfig'];
32
+ export declare function getTanstackRouteConfig(api: TanstackRouterPluginAPI, userConfig: Partial<RouterConfig>): TanstackRouteConfig;
33
+ export declare function createTanstackRouteObjects({ hooks, routeConfig, ssrMode, }: {
34
+ hooks: RouterExtendsHooks;
35
+ routeConfig: TanstackRouteConfig;
36
+ ssrMode?: SSRMode;
37
+ }): RouteObject[];
38
+ export declare function joinBasename(baseUrl: string, basename: string): string;
25
39
  export {};
@@ -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;
@@ -0,0 +1,75 @@
1
+ import type { RouteObject } from '@modern-js/runtime-utils/router';
2
+ import type { AnyRoute, RootRoute as TanstackRootRoute } from '@tanstack/react-router';
3
+ export type RouteParams = Record<string, string>;
4
+ export type ModernLoader = (args: {
5
+ request: Request;
6
+ params: RouteParams;
7
+ context?: unknown;
8
+ }) => unknown | Promise<unknown>;
9
+ export type ModernShouldRevalidate = (args: {
10
+ currentParams: RouteParams;
11
+ currentUrl: URL;
12
+ nextParams: RouteParams;
13
+ nextUrl: URL;
14
+ defaultShouldRevalidate?: boolean;
15
+ }) => boolean | undefined;
16
+ export type TanstackLoaderContext = {
17
+ abortController?: AbortController;
18
+ cause?: string;
19
+ signal?: AbortSignal;
20
+ context?: {
21
+ request?: Request;
22
+ requestContext?: unknown;
23
+ };
24
+ location?: string | {
25
+ publicHref?: string;
26
+ href?: string;
27
+ url?: {
28
+ href?: string;
29
+ };
30
+ };
31
+ params?: RouteParams;
32
+ route?: {
33
+ id?: string;
34
+ };
35
+ };
36
+ export type RouteRevalidationState = {
37
+ currentParams?: RouteParams;
38
+ currentUrl?: URL;
39
+ };
40
+ export type ModernRouteObject = RouteObject & {
41
+ ErrorBoundary?: unknown;
42
+ HydrateFallback?: unknown;
43
+ action?: unknown;
44
+ clientData?: unknown;
45
+ component?: unknown;
46
+ config?: {
47
+ handle?: Record<string, unknown>;
48
+ } | unknown;
49
+ file?: string;
50
+ handle?: Record<string, unknown>;
51
+ hasAction?: boolean;
52
+ hasClientLoader?: boolean;
53
+ hasLoader?: boolean;
54
+ inValidSSRRoute?: boolean;
55
+ isClientComponent?: boolean;
56
+ lazyImport?: () => unknown;
57
+ loader?: ModernLoader;
58
+ loaderDeps?: unknown;
59
+ pendingComponent?: unknown;
60
+ shouldRevalidate?: ModernShouldRevalidate;
61
+ validateSearch?: unknown;
62
+ };
63
+ export type MutableTanstackRoute = AnyRoute & {
64
+ addChildren: (children: AnyRoute[]) => void;
65
+ id?: string;
66
+ options: {
67
+ component?: unknown;
68
+ };
69
+ };
70
+ export type TanstackRouteOptions = Record<string, unknown>;
71
+ export type TanstackRootRouteOptions = Record<string, unknown>;
72
+ export type ModernTanstackRootRoute = TanstackRootRoute;
73
+ export type RouteTreeOptions = {
74
+ rscPayloadRouter?: boolean;
75
+ };
@@ -1,9 +1 @@
1
- import type { RouteObject } from '@modern-js/runtime-utils/router';
2
- import type { AnyRouter, RootRoute as TanstackRootRoute } from '@tanstack/react-router';
3
- type ModernTanstackRootRoute = TanstackRootRoute;
4
- type RouteTreeOptions = {
5
- rscPayloadRouter?: boolean;
6
- };
7
- export declare function createRouteTreeFromRouteObjects(routes: RouteObject[], options?: RouteTreeOptions): ModernTanstackRootRoute;
8
- export declare function getModernRouteIdsFromMatches(router: AnyRouter): string[];
9
- export {};
1
+ export { createRouteTreeFromRouteObjects, getModernRouteIdsFromMatches, pickRouteModuleComponent, } from './routeTree/index';
@@ -1,3 +1,2 @@
1
- import type React from 'react';
2
1
  import { type AnyCompositeComponent, type CompositeComponentProps } from './symbols';
3
- export declare function CompositeComponent<TComp extends AnyCompositeComponent>(props: CompositeComponentProps<TComp>): React.JSX.Element;
2
+ export declare function CompositeComponent<TComp extends AnyCompositeComponent>(props: CompositeComponentProps<TComp>): import("react").JSX.Element;
@@ -1,5 +1,4 @@
1
- import type React from 'react';
2
- import { type AnyRenderableServerComponent } from './symbols';
1
+ import type { AnyRenderableServerComponent } from './symbols';
3
2
  export declare function RscNodeRenderer({ data, }: {
4
3
  data: AnyRenderableServerComponent;
5
- }): React.JSX.Element;
4
+ }): import("react").JSX.Element;
@@ -1,4 +1,5 @@
1
1
  import { CompositeComponent } from './CompositeComponent';
2
+ import type { SerializedTanstackRscFlightValue } from './shared';
2
3
  import type { AnyCompositeComponent, RscSlotUsageEvent } from './symbols';
3
4
  export type { AnyCompositeComponent, AnyRenderableServerComponent, CompositeComponentProps, } from './symbols';
4
5
  export { CompositeComponent };
@@ -7,5 +8,6 @@ type SerializedRsc = {
7
8
  stream: ReadableStream<Uint8Array>;
8
9
  slotUsagesStream?: ReadableStream<RscSlotUsageEvent>;
9
10
  };
11
+ export declare function createTanstackRscValueFromFlight(serialized: SerializedTanstackRscFlightValue): AnyCompositeComponent;
10
12
  export declare function getTanstackRscSerializationAdapters(): import("@tanstack/router-core").SerializationAdapter<AnyCompositeComponent<Record<string, unknown>, import("react").ReactNode>, SerializedRsc, never>[];
11
13
  export declare const rscSerializationAdapter: typeof getTanstackRscSerializationAdapters;
@@ -0,0 +1,3 @@
1
+ export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
2
+ export declare function serializeTanstackRscFlightValues(value: unknown, seen?: WeakMap<object, unknown>): unknown;
3
+ export declare function reviveTanstackRscFlightValues(value: unknown, seen?: WeakMap<object, unknown>): Promise<unknown>;
@@ -0,0 +1,6 @@
1
+ import type { ServerPayload } from '@modern-js/runtime/context';
2
+ export declare function shouldRedactServerError(status?: number): boolean;
3
+ export declare function serializePayloadError(error: unknown): unknown;
4
+ export declare function isSerializedNotFound(value: unknown): boolean;
5
+ export declare function toRouteErrors(payload: ServerPayload): Record<string, unknown>;
6
+ export declare function toRouteLoaderData(payload: ServerPayload): Record<string, unknown>;
@@ -0,0 +1,10 @@
1
+ import type { ServerPayload } from '@modern-js/runtime/context';
2
+ type PayloadDecoder = (stream: ReadableStream<Uint8Array>) => Promise<unknown>;
3
+ export declare const payloadFetchCache: Map<string, Promise<ServerPayload>>;
4
+ export declare function decodePayload(stream: ReadableStream<Uint8Array>): Promise<unknown>;
5
+ export declare function isServerPayload(value: unknown): value is ServerPayload;
6
+ export declare function createPayloadFetchKey(request: Request): string;
7
+ export declare function isAbsoluteUrl(value: string): boolean;
8
+ export declare function fetchTanstackRscPayload(request: Request): Promise<ServerPayload>;
9
+ export declare function __setTanstackRscPayloadDecoderForTests(decoder?: PayloadDecoder): void;
10
+ export {};
@@ -1,12 +1,6 @@
1
1
  import type { ServerPayload } from '@modern-js/runtime/context';
2
- type PayloadDecoder = (stream: ReadableStream<Uint8Array>) => Promise<unknown>;
3
- type TanstackPayloadRouterLike = {
4
- state?: {
5
- location?: unknown;
6
- matches?: unknown;
7
- statusCode?: unknown;
8
- };
9
- };
2
+ import type { TanstackPayloadRouterLike } from './payloadRoutes';
3
+ export { __setTanstackRscPayloadDecoderForTests } from './payloadFetch';
10
4
  type LoadRouteDataOptions = {
11
5
  hasClientLoader?: boolean;
12
6
  loadClientData: () => Promise<unknown>;
@@ -20,5 +14,3 @@ export declare function handleTanstackRscRedirect(headers: Headers, basename: st
20
14
  export declare function isTanstackRscPayloadNavigationEnabled(): boolean;
21
15
  export declare function loadTanstackRscPayload(request: Request): Promise<ServerPayload>;
22
16
  export declare function loadTanstackRscRouteData({ hasClientLoader, loadClientData, request, routeId, }: LoadRouteDataOptions): Promise<unknown>;
23
- export declare function __setTanstackRscPayloadDecoderForTests(decoder?: PayloadDecoder): void;
24
- export {};
@@ -0,0 +1,43 @@
1
+ import type { PayloadRoute, ServerPayload } from '@modern-js/runtime/context';
2
+ export type RouterStaticData = {
3
+ modernRouteAction?: unknown;
4
+ modernRouteHandle?: unknown;
5
+ modernRouteHasAction?: unknown;
6
+ modernRouteHasClientLoader?: unknown;
7
+ modernRouteHasLoader?: unknown;
8
+ modernRouteId?: unknown;
9
+ modernRouteIsClientComponent?: unknown;
10
+ };
11
+ export type RouterRouteLike = {
12
+ id?: unknown;
13
+ options?: {
14
+ index?: unknown;
15
+ path?: unknown;
16
+ staticData?: RouterStaticData;
17
+ };
18
+ parentRoute?: RouterRouteLike;
19
+ };
20
+ export type RouterMatchLike = {
21
+ error?: unknown;
22
+ id?: unknown;
23
+ loaderData?: unknown;
24
+ params?: unknown;
25
+ pathname?: unknown;
26
+ pathnameBase?: unknown;
27
+ route?: RouterRouteLike;
28
+ routeId?: unknown;
29
+ };
30
+ export type TanstackPayloadRouterLike = {
31
+ state?: {
32
+ location?: unknown;
33
+ matches?: unknown;
34
+ statusCode?: unknown;
35
+ };
36
+ };
37
+ export declare function toPlainRecord(value: unknown): Record<string, unknown>;
38
+ export declare function toPlainLocation(location: unknown): ServerPayload['location'];
39
+ export declare function getRouteId(match: RouterMatchLike): string | undefined;
40
+ export declare function getRouteStaticData(match: RouterMatchLike): RouterStaticData;
41
+ export declare function getRouteParentId(match: RouterMatchLike): string | undefined;
42
+ export declare function toRoutePath(match: RouterMatchLike): string | undefined;
43
+ export declare function toPayloadRoute(match: RouterMatchLike): PayloadRoute | undefined;
@@ -0,0 +1,5 @@
1
+ import type { ServerPayload } from '@modern-js/runtime/context';
2
+ import type { TanstackRouterWithServerSsr } from '../ssrTypes';
3
+ export declare const setTanstackRscServerPayload: (payload: ServerPayload) => void;
4
+ export declare const setTanstackRscRouter: (router: TanstackRouterWithServerSsr) => void;
5
+ export declare const getTanstackRscRouter: () => TanstackRouterWithServerSsr | undefined;
@@ -0,0 +1,19 @@
1
+ import type React from 'react';
2
+ import { type AnyCompositeComponent, type AnyRenderableServerComponent, type RscSlotUsageEvent } from './symbols';
3
+ export declare const TANSTACK_RSC_FLIGHT_VALUE = "__modernTanstackRsc";
4
+ export type SerializedTanstackRscFlightValue = {
5
+ [TANSTACK_RSC_FLIGHT_VALUE]: true;
6
+ kind: 'renderable' | 'composite';
7
+ slotUsagesStream?: ReadableStream<RscSlotUsageEvent>;
8
+ stream: ReadableStream<Uint8Array>;
9
+ };
10
+ export declare function isSerializedTanstackRscFlightValue(value: unknown): value is SerializedTanstackRscFlightValue;
11
+ export declare function EmptyFallback(): null;
12
+ export declare function selectTreePath(tree: unknown, path: string[]): React.ReactNode;
13
+ type RenderSelectedTreeSource = AnyRenderableServerComponent | AnyCompositeComponent;
14
+ type RenderSelectedTreeOptions = {
15
+ getTree?: (() => unknown) | undefined;
16
+ missingTreeError: string;
17
+ };
18
+ export declare function renderSelectedTree(src: RenderSelectedTreeSource, { getTree, missingTreeError, }: RenderSelectedTreeOptions): React.ReactNode;
19
+ export {};
@@ -0,0 +1 @@
1
+ export declare function createTreeGetterFromFlightStream(stream: ReadableStream<Uint8Array>): () => any;
@@ -0,0 +1,7 @@
1
+ import type { AnyRouter } from '@tanstack/react-router';
2
+ import type { TanstackRouterWithServerSsr } from './ssrTypes';
3
+ export declare function waitForRouterSerialization(tanstackRouter: TanstackRouterWithServerSsr): Promise<void>;
4
+ export declare function routerManagedTagsToHtml(tags: unknown): string[];
5
+ export declare function createGetSsrHref(request: Request): string;
6
+ export declare function collectRouterErrors(tanstackRouter: AnyRouter): Record<string, unknown> | undefined;
7
+ export declare function attachServerSsrUtils(router: TanstackRouterWithServerSsr): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { TanstackRouterWithServerSsr } from './ssrTypes';
2
+ export declare function preloadMatchedRouteComponents(tanstackRouter: TanstackRouterWithServerSsr): Promise<void>;
@@ -0,0 +1,43 @@
1
+ import type { RequestContext } from '@modern-js/runtime-utils/node';
2
+ import type { AnyRouter } from '@tanstack/react-router';
3
+ export type ModernTanstackRouterContext = {
4
+ request: Request;
5
+ requestContext: RequestContext<Record<string, unknown>>;
6
+ };
7
+ export type RouterManagedTag = {
8
+ attrs?: Record<string, unknown>;
9
+ children?: unknown;
10
+ tag?: unknown;
11
+ };
12
+ export type RouterMatchWithError = {
13
+ error?: unknown;
14
+ route?: {
15
+ id?: unknown;
16
+ options?: RouterRouteOptions;
17
+ };
18
+ routeId?: unknown;
19
+ };
20
+ export type RouterRouteOptions = {
21
+ component?: unknown;
22
+ errorComponent?: unknown;
23
+ notFoundComponent?: unknown;
24
+ pendingComponent?: unknown;
25
+ };
26
+ export type RouterRouteWithOptions = {
27
+ options?: RouterRouteOptions;
28
+ };
29
+ export type TanstackRouterWithServerSsr = AnyRouter & {
30
+ resolveRedirect?: (redirect: Response) => Response;
31
+ routesById?: Record<string, RouterRouteWithOptions>;
32
+ serverSsr?: {
33
+ cleanup?: () => void;
34
+ dehydrate?: () => Promise<void> | void;
35
+ isSerializationFinished?: () => boolean;
36
+ onSerializationFinished?: (listener: () => void) => void;
37
+ takeBufferedScripts?: () => unknown;
38
+ };
39
+ state: AnyRouter['state'] & {
40
+ matches?: unknown;
41
+ redirect?: Response;
42
+ };
43
+ };
@@ -1,5 +1,5 @@
1
+ import { type InternalRouterRuntimeState } from '@modern-js/runtime/context';
1
2
  import type { AnyRouter } from '@tanstack/react-router';
2
- import type { InternalRouterRuntimeState } from './types';
3
3
  /**
4
4
  * Router runtime state as published by the TanStack router provider into the
5
5
  * runtime-context extension slot.
@@ -0,0 +1,14 @@
1
+ import type { AnyRouter } from '@tanstack/react-router';
2
+ import type { SubmitOptions, SubmitTarget } from './formData';
3
+ export declare class RouteActionResponseError<TData = unknown> extends Error {
4
+ readonly response: Response;
5
+ readonly data: TData;
6
+ constructor(response: Response, data: TData);
7
+ }
8
+ export declare function submitRouteAction({ router, target, options, isFetcher, onInvalidateStart, }: {
9
+ router: AnyRouter;
10
+ target: SubmitTarget;
11
+ options?: SubmitOptions;
12
+ isFetcher?: boolean;
13
+ onInvalidateStart?: () => void;
14
+ }): Promise<any>;
@@ -1,51 +1,8 @@
1
+ import type { ModernRoute, RouterFramework } from '@modern-js/runtime/context';
1
2
  import type { RouteObject } from '@modern-js/runtime-utils/router';
2
3
  import type React from 'react';
3
- export type BuiltInRouterFramework = 'react-router' | 'tanstack';
4
- export type RouterFramework = BuiltInRouterFramework | (string & {});
5
- export type ModernRoute = {
6
- type: 'nested' | 'page';
7
- path?: string;
8
- id?: string;
9
- component?: React.ComponentType | string;
10
- children?: ModernRoute[];
11
- [key: string]: any;
12
- };
13
- export type RouterRouteMatchSnapshot = {
14
- routeId: string;
15
- assetRouteId?: string;
16
- pathname?: string;
17
- params?: Record<string, string>;
18
- };
19
- export type InternalRouterServerSnapshot = {
20
- framework?: RouterFramework;
21
- basename?: string;
22
- statusCode?: number;
23
- errors?: Record<string, unknown>;
24
- routerData?: {
25
- loaderData?: Record<string, unknown>;
26
- errors?: Record<string, unknown>;
27
- };
28
- hydrationScript?: string;
29
- hydrationScripts?: string[];
30
- matchedRouteIds?: string[];
31
- matches?: RouterRouteMatchSnapshot[];
32
- };
33
- export type InternalRouterRuntimeState = {
34
- framework: RouterFramework;
35
- basename?: string;
36
- instance?: unknown;
37
- hydrationScript?: string;
38
- hydrationScripts?: string[];
39
- matchedRouteIds?: string[];
40
- matches?: RouterRouteMatchSnapshot[];
41
- serverSnapshot?: InternalRouterServerSnapshot;
42
- cleanup?: () => void | Promise<void>;
43
- };
44
- /**
45
- * TanStack-specific router config. Unlike the react-router provider config,
46
- * this intentionally has no `oldVersion`/`future` fields — those are
47
- * react-router-only knobs with no meaning here.
48
- */
4
+ export type { BuiltInRouterFramework, InternalRouterRuntimeState, InternalRouterServerSnapshot, LoaderFunction, LoaderFunctionArgs, ModernRoute, RouterFramework, RouterRouteMatchSnapshot, RouterServerPrepareResult, } from '@modern-js/runtime/context';
5
+ /** TanStack-specific router config. */
49
6
  export type RouterConfig = {
50
7
  framework?: RouterFramework;
51
8
  routesConfig: {
@@ -8,30 +8,9 @@ type RouterConfig = {
8
8
  routes?: ModernRoute[];
9
9
  };
10
10
  };
11
- type GlobalAppProps = {
12
- Component: React.ComponentType;
13
- [key: string]: unknown;
14
- };
15
- export type ModernRouteObject = RouteObject & {
16
- isClientComponent?: boolean;
17
- hasClientLoader?: boolean;
18
- hasLoader?: boolean;
19
- hasAction?: boolean;
20
- inValidSSRRoute?: boolean;
21
- lazyImport?: () => Promise<{
22
- default: React.ComponentType;
23
- }>;
24
- };
25
- export declare function getRouteObjects(routes: ModernRoute[], { globalApp, ssrMode, props, }: {
26
- globalApp?: React.ComponentType<GlobalAppProps>;
27
- ssrMode?: SSRMode;
28
- props?: Record<string, unknown>;
29
- }): RouteObject[];
30
- export declare function createRouteObjectsFromConfig({ routesConfig, props, ssrMode, }: {
11
+ export declare function createTanstackRouteObjectsFromConfig({ routesConfig, }: {
31
12
  routesConfig: RouterConfig['routesConfig'];
32
13
  props?: Record<string, unknown>;
33
14
  ssrMode?: SSRMode;
34
15
  }): RouteObject[] | null;
35
- export declare const urlJoin: (...parts: string[]) => string;
36
- export declare function standardSlash(str: string): string;
37
16
  export {};
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  "modern.js",
19
19
  "tanstack-router"
20
20
  ],
21
- "version": "3.5.0-ultramodern.30",
21
+ "version": "3.5.0-ultramodern.31",
22
22
  "engines": {
23
23
  "node": ">=20"
24
24
  },
@@ -55,6 +55,20 @@
55
55
  "module": "./dist/esm/runtime/router.mjs"
56
56
  },
57
57
  "default": "./dist/esm/runtime/router.mjs"
58
+ },
59
+ "./runtime/rsc/client": {
60
+ "types": "./dist/types/runtime/rsc/client.d.ts",
61
+ "node": {
62
+ "module": "./dist/esm/runtime/rsc/client.mjs"
63
+ },
64
+ "default": "./dist/esm/runtime/rsc/client.mjs"
65
+ },
66
+ "./runtime/rsc/server": {
67
+ "types": "./dist/types/runtime/rsc/server.d.ts",
68
+ "node": {
69
+ "module": "./dist/esm/runtime/rsc/server.mjs"
70
+ },
71
+ "default": "./dist/esm/runtime/rsc/server.mjs"
58
72
  }
59
73
  },
60
74
  "typesVersions": {
@@ -70,6 +84,12 @@
70
84
  ],
71
85
  "runtime/router": [
72
86
  "./dist/types/runtime/router.d.ts"
87
+ ],
88
+ "runtime/rsc/client": [
89
+ "./dist/types/runtime/rsc/client.d.ts"
90
+ ],
91
+ "runtime/rsc/server": [
92
+ "./dist/types/runtime/rsc/server.d.ts"
73
93
  ]
74
94
  }
75
95
  },
@@ -77,14 +97,15 @@
77
97
  "@swc/helpers": "^0.5.23",
78
98
  "@tanstack/react-router": "1.170.16",
79
99
  "@tanstack/router-core": "1.171.13",
80
- "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.5.0-ultramodern.30",
81
- "@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.5.0-ultramodern.30",
82
- "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.5.0-ultramodern.30",
83
- "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.5.0-ultramodern.30"
100
+ "react-server-dom-rspack": "0.0.2",
101
+ "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.5.0-ultramodern.31",
102
+ "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.5.0-ultramodern.31",
103
+ "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.5.0-ultramodern.31",
104
+ "@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.5.0-ultramodern.31"
84
105
  },
85
106
  "peerDependencies": {
86
- "@modern-js/app-tools": "3.5.0-ultramodern.30",
87
- "@modern-js/runtime": "3.5.0-ultramodern.30",
107
+ "@modern-js/app-tools": "3.5.0-ultramodern.31",
108
+ "@modern-js/runtime": "3.5.0-ultramodern.31",
88
109
  "react": "^19.2.7",
89
110
  "react-dom": "^19.2.7"
90
111
  },
@@ -99,8 +120,8 @@
99
120
  "@typescript/native-preview": "7.0.0-dev.20260628.1",
100
121
  "react": "^19.2.7",
101
122
  "react-dom": "^19.2.7",
102
- "@modern-js/app-tools": "npm:@bleedingdev/modern-js-app-tools@3.5.0-ultramodern.30",
103
- "@modern-js/runtime": "npm:@bleedingdev/modern-js-runtime@3.5.0-ultramodern.30",
123
+ "@modern-js/app-tools": "npm:@bleedingdev/modern-js-app-tools@3.5.0-ultramodern.31",
124
+ "@modern-js/runtime": "npm:@bleedingdev/modern-js-runtime@3.5.0-ultramodern.31",
104
125
  "@scripts/rstest-config": "2.66.0"
105
126
  },
106
127
  "sideEffects": [
package/rstest.config.mts CHANGED
@@ -33,6 +33,7 @@ export default {
33
33
  'tests/router/register.test.ts',
34
34
  'tests/router/routeHooks.test.ts',
35
35
  'tests/router/rsc.test.tsx',
36
+ 'tests/router/ssrPreload.test.ts',
36
37
  'tests/router/tanstackTypes.test.ts',
37
38
  'tests/router/routeTree.test.ts',
38
39
  ],