@bleedingdev/modern-js-plugin-tanstack 3.2.0-ultramodern.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/cli/index.js +268 -0
  3. package/dist/cjs/cli/tanstackTypes.js +388 -0
  4. package/dist/cjs/cli.js +65 -0
  5. package/dist/cjs/runtime/DefaultNotFound.js +47 -0
  6. package/dist/cjs/runtime/basepathRewrite.js +62 -0
  7. package/dist/cjs/runtime/dataMutation.js +345 -0
  8. package/dist/cjs/runtime/hooks.js +57 -0
  9. package/dist/cjs/runtime/index.js +114 -0
  10. package/dist/cjs/runtime/lifecycle.js +125 -0
  11. package/dist/cjs/runtime/plugin.js +250 -0
  12. package/dist/cjs/runtime/plugin.node.js +304 -0
  13. package/dist/cjs/runtime/prefetchLink.js +55 -0
  14. package/dist/cjs/runtime/routeTree.js +492 -0
  15. package/dist/cjs/runtime/rsc/ClientSlot.js +53 -0
  16. package/dist/cjs/runtime/rsc/CompositeComponent.js +75 -0
  17. package/dist/cjs/runtime/rsc/ReplayableStream.js +141 -0
  18. package/dist/cjs/runtime/rsc/RscNodeRenderer.js +65 -0
  19. package/dist/cjs/runtime/rsc/SlotContext.js +54 -0
  20. package/dist/cjs/runtime/rsc/client.js +93 -0
  21. package/dist/cjs/runtime/rsc/createRscProxy.js +141 -0
  22. package/dist/cjs/runtime/rsc/index.js +42 -0
  23. package/dist/cjs/runtime/rsc/payloadRouter.js +211 -0
  24. package/dist/cjs/runtime/rsc/server.js +246 -0
  25. package/dist/cjs/runtime/rsc/slotUsageSanitizer.js +65 -0
  26. package/dist/cjs/runtime/rsc/symbols.js +72 -0
  27. package/dist/cjs/runtime/types.js +18 -0
  28. package/dist/cjs/runtime/utils.js +142 -0
  29. package/dist/cjs/runtime.js +58 -0
  30. package/dist/esm/cli/index.mjs +201 -0
  31. package/dist/esm/cli/tanstackTypes.mjs +341 -0
  32. package/dist/esm/cli.mjs +2 -0
  33. package/dist/esm/rslib-runtime.mjs +18 -0
  34. package/dist/esm/runtime/DefaultNotFound.mjs +13 -0
  35. package/dist/esm/runtime/basepathRewrite.mjs +28 -0
  36. package/dist/esm/runtime/dataMutation.mjs +305 -0
  37. package/dist/esm/runtime/hooks.mjs +8 -0
  38. package/dist/esm/runtime/index.mjs +6 -0
  39. package/dist/esm/runtime/lifecycle.mjs +82 -0
  40. package/dist/esm/runtime/plugin.mjs +214 -0
  41. package/dist/esm/runtime/plugin.node.mjs +268 -0
  42. package/dist/esm/runtime/prefetchLink.mjs +18 -0
  43. package/dist/esm/runtime/routeTree.mjs +452 -0
  44. package/dist/esm/runtime/rsc/ClientSlot.mjs +19 -0
  45. package/dist/esm/runtime/rsc/CompositeComponent.mjs +41 -0
  46. package/dist/esm/runtime/rsc/ReplayableStream.mjs +104 -0
  47. package/dist/esm/runtime/rsc/RscNodeRenderer.mjs +31 -0
  48. package/dist/esm/runtime/rsc/SlotContext.mjs +17 -0
  49. package/dist/esm/runtime/rsc/client.mjs +53 -0
  50. package/dist/esm/runtime/rsc/createRscProxy.mjs +107 -0
  51. package/dist/esm/runtime/rsc/index.mjs +1 -0
  52. package/dist/esm/runtime/rsc/payloadRouter.mjs +162 -0
  53. package/dist/esm/runtime/rsc/server.mjs +200 -0
  54. package/dist/esm/runtime/rsc/slotUsageSanitizer.mjs +31 -0
  55. package/dist/esm/runtime/rsc/symbols.mjs +17 -0
  56. package/dist/esm/runtime/types.mjs +0 -0
  57. package/dist/esm/runtime/utils.mjs +89 -0
  58. package/dist/esm/runtime.mjs +1 -0
  59. package/dist/esm-node/cli/index.mjs +205 -0
  60. package/dist/esm-node/cli/tanstackTypes.mjs +342 -0
  61. package/dist/esm-node/cli.mjs +3 -0
  62. package/dist/esm-node/rslib-runtime.mjs +19 -0
  63. package/dist/esm-node/runtime/DefaultNotFound.mjs +14 -0
  64. package/dist/esm-node/runtime/basepathRewrite.mjs +29 -0
  65. package/dist/esm-node/runtime/dataMutation.mjs +306 -0
  66. package/dist/esm-node/runtime/hooks.mjs +9 -0
  67. package/dist/esm-node/runtime/index.mjs +7 -0
  68. package/dist/esm-node/runtime/lifecycle.mjs +83 -0
  69. package/dist/esm-node/runtime/plugin.mjs +215 -0
  70. package/dist/esm-node/runtime/plugin.node.mjs +269 -0
  71. package/dist/esm-node/runtime/prefetchLink.mjs +19 -0
  72. package/dist/esm-node/runtime/routeTree.mjs +453 -0
  73. package/dist/esm-node/runtime/rsc/ClientSlot.mjs +20 -0
  74. package/dist/esm-node/runtime/rsc/CompositeComponent.mjs +42 -0
  75. package/dist/esm-node/runtime/rsc/ReplayableStream.mjs +105 -0
  76. package/dist/esm-node/runtime/rsc/RscNodeRenderer.mjs +32 -0
  77. package/dist/esm-node/runtime/rsc/SlotContext.mjs +18 -0
  78. package/dist/esm-node/runtime/rsc/client.mjs +54 -0
  79. package/dist/esm-node/runtime/rsc/createRscProxy.mjs +108 -0
  80. package/dist/esm-node/runtime/rsc/index.mjs +2 -0
  81. package/dist/esm-node/runtime/rsc/payloadRouter.mjs +163 -0
  82. package/dist/esm-node/runtime/rsc/server.mjs +201 -0
  83. package/dist/esm-node/runtime/rsc/slotUsageSanitizer.mjs +32 -0
  84. package/dist/esm-node/runtime/rsc/symbols.mjs +18 -0
  85. package/dist/esm-node/runtime/types.mjs +1 -0
  86. package/dist/esm-node/runtime/utils.mjs +90 -0
  87. package/dist/esm-node/runtime.mjs +2 -0
  88. package/dist/types/cli/index.d.ts +20 -0
  89. package/dist/types/cli/tanstackTypes.d.ts +11 -0
  90. package/dist/types/cli.d.ts +2 -0
  91. package/dist/types/runtime/DefaultNotFound.d.ts +2 -0
  92. package/dist/types/runtime/basepathRewrite.d.ts +8 -0
  93. package/dist/types/runtime/dataMutation.d.ts +29 -0
  94. package/dist/types/runtime/hooks.d.ts +18 -0
  95. package/dist/types/runtime/index.d.ts +9 -0
  96. package/dist/types/runtime/lifecycle.d.ts +22 -0
  97. package/dist/types/runtime/plugin.d.ts +17 -0
  98. package/dist/types/runtime/plugin.node.d.ts +17 -0
  99. package/dist/types/runtime/prefetchLink.d.ts +11 -0
  100. package/dist/types/runtime/routeTree.d.ts +11 -0
  101. package/dist/types/runtime/rsc/ClientSlot.d.ts +5 -0
  102. package/dist/types/runtime/rsc/CompositeComponent.d.ts +3 -0
  103. package/dist/types/runtime/rsc/ReplayableStream.d.ts +24 -0
  104. package/dist/types/runtime/rsc/RscNodeRenderer.d.ts +5 -0
  105. package/dist/types/runtime/rsc/SlotContext.d.ts +11 -0
  106. package/dist/types/runtime/rsc/client.d.ts +11 -0
  107. package/dist/types/runtime/rsc/createRscProxy.d.ts +7 -0
  108. package/dist/types/runtime/rsc/index.d.ts +2 -0
  109. package/dist/types/runtime/rsc/payloadRouter.d.ts +24 -0
  110. package/dist/types/runtime/rsc/server.d.ts +14 -0
  111. package/dist/types/runtime/rsc/slotUsageSanitizer.d.ts +2 -0
  112. package/dist/types/runtime/rsc/symbols.d.ts +46 -0
  113. package/dist/types/runtime/types.d.ts +68 -0
  114. package/dist/types/runtime/utils.d.ts +36 -0
  115. package/dist/types/runtime.d.ts +1 -0
  116. package/dist/types-direct/cli/index.d.ts +20 -0
  117. package/dist/types-direct/cli/tanstackTypes.d.ts +11 -0
  118. package/dist/types-direct/cli.d.ts +2 -0
  119. package/dist/types-direct/runtime/DefaultNotFound.d.ts +2 -0
  120. package/dist/types-direct/runtime/basepathRewrite.d.ts +8 -0
  121. package/dist/types-direct/runtime/dataMutation.d.ts +29 -0
  122. package/dist/types-direct/runtime/hooks.d.ts +18 -0
  123. package/dist/types-direct/runtime/index.d.ts +9 -0
  124. package/dist/types-direct/runtime/lifecycle.d.ts +22 -0
  125. package/dist/types-direct/runtime/plugin.d.ts +17 -0
  126. package/dist/types-direct/runtime/plugin.node.d.ts +17 -0
  127. package/dist/types-direct/runtime/prefetchLink.d.ts +11 -0
  128. package/dist/types-direct/runtime/routeTree.d.ts +11 -0
  129. package/dist/types-direct/runtime/rsc/ClientSlot.d.ts +5 -0
  130. package/dist/types-direct/runtime/rsc/CompositeComponent.d.ts +3 -0
  131. package/dist/types-direct/runtime/rsc/ReplayableStream.d.ts +24 -0
  132. package/dist/types-direct/runtime/rsc/RscNodeRenderer.d.ts +5 -0
  133. package/dist/types-direct/runtime/rsc/SlotContext.d.ts +11 -0
  134. package/dist/types-direct/runtime/rsc/client.d.ts +11 -0
  135. package/dist/types-direct/runtime/rsc/createRscProxy.d.ts +7 -0
  136. package/dist/types-direct/runtime/rsc/index.d.ts +2 -0
  137. package/dist/types-direct/runtime/rsc/payloadRouter.d.ts +24 -0
  138. package/dist/types-direct/runtime/rsc/server.d.ts +14 -0
  139. package/dist/types-direct/runtime/rsc/slotUsageSanitizer.d.ts +2 -0
  140. package/dist/types-direct/runtime/rsc/symbols.d.ts +46 -0
  141. package/dist/types-direct/runtime/types.d.ts +68 -0
  142. package/dist/types-direct/runtime/utils.d.ts +36 -0
  143. package/dist/types-direct/runtime.d.ts +1 -0
  144. package/package.json +126 -0
  145. package/rslib.config.mts +4 -0
  146. package/rstest.config.mts +43 -0
  147. package/src/cli/index.ts +388 -0
  148. package/src/cli/tanstackTypes.ts +503 -0
  149. package/src/cli.ts +2 -0
  150. package/src/runtime/DefaultNotFound.tsx +15 -0
  151. package/src/runtime/basepathRewrite.ts +59 -0
  152. package/src/runtime/dataMutation.tsx +517 -0
  153. package/src/runtime/hooks.ts +34 -0
  154. package/src/runtime/index.tsx +30 -0
  155. package/src/runtime/lifecycle.ts +150 -0
  156. package/src/runtime/plugin.node.tsx +534 -0
  157. package/src/runtime/plugin.tsx +395 -0
  158. package/src/runtime/prefetchLink.tsx +87 -0
  159. package/src/runtime/routeTree.ts +942 -0
  160. package/src/runtime/rsc/ClientSlot.tsx +25 -0
  161. package/src/runtime/rsc/CompositeComponent.tsx +65 -0
  162. package/src/runtime/rsc/ReplayableStream.ts +155 -0
  163. package/src/runtime/rsc/RscNodeRenderer.tsx +45 -0
  164. package/src/runtime/rsc/SlotContext.tsx +31 -0
  165. package/src/runtime/rsc/client.tsx +90 -0
  166. package/src/runtime/rsc/createRscProxy.tsx +189 -0
  167. package/src/runtime/rsc/index.ts +10 -0
  168. package/src/runtime/rsc/payloadRouter.ts +318 -0
  169. package/src/runtime/rsc/server.tsx +303 -0
  170. package/src/runtime/rsc/slotUsageSanitizer.ts +76 -0
  171. package/src/runtime/rsc/symbols.ts +106 -0
  172. package/src/runtime/ssr-shim.d.ts +12 -0
  173. package/src/runtime/types.ts +83 -0
  174. package/src/runtime/utils.tsx +161 -0
  175. package/src/runtime.ts +1 -0
  176. package/tests/router/cli.test.ts +386 -0
  177. package/tests/router/dataMutation.test.tsx +396 -0
  178. package/tests/router/prefetchLink.test.tsx +43 -0
  179. package/tests/router/routeTree.test.ts +502 -0
  180. package/tests/router/rsc.test.tsx +256 -0
  181. package/tests/router/tanstackTypes.test.ts +62 -0
  182. package/tsconfig.json +12 -0
  183. package/tsconfig.tsgo.json +6 -0
@@ -0,0 +1,268 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { InternalRuntimeContext, getGlobalEnableRsc, getGlobalLayoutApp, getGlobalRoutes } from "@modern-js/runtime/context";
3
+ import { merge } from "@modern-js/runtime-utils/merge";
4
+ import { createRequestContext, storage } from "@modern-js/runtime-utils/node";
5
+ import { time } from "@modern-js/runtime-utils/time";
6
+ import { LOADER_REPORTER_NAME } from "@modern-js/utils/universal/constants";
7
+ import { RouterProvider, createMemoryHistory, createRouter } from "@tanstack/react-router";
8
+ import { attachRouterServerSsrUtils } from "@tanstack/react-router/ssr/server";
9
+ import { Suspense, useContext } from "react";
10
+ import { createModernBasepathRewrite } from "./basepathRewrite.mjs";
11
+ import { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter } from "./hooks.mjs";
12
+ import { applyRouterServerPrepareResult, createRouterServerSnapshot } from "./lifecycle.mjs";
13
+ import { createRouteTreeFromRouteObjects, getModernRouteIdsFromMatches } from "./routeTree.mjs";
14
+ import { createTanstackRscServerPayload, handleTanstackRscRedirect } from "./rsc/payloadRouter.mjs";
15
+ import { createRouteObjectsFromConfig, urlJoin } from "./utils.mjs";
16
+ const setTanstackRscServerPayload = (payload)=>{
17
+ const storageContext = storage.useContext?.();
18
+ if (storageContext) storageContext.serverPayload = payload;
19
+ };
20
+ function isPreloadableRouteComponent(component) {
21
+ if (!component || 'function' != typeof component) return false;
22
+ const preloadable = component;
23
+ return 'function' == typeof preloadable.load || 'function' == typeof preloadable.preload;
24
+ }
25
+ async function preloadRouteComponent(component) {
26
+ if (!isPreloadableRouteComponent(component)) return;
27
+ if ('function' == typeof component.load) return void await component.load({});
28
+ await component.preload?.({});
29
+ }
30
+ async function preloadMatchedRouteComponents(tanstackRouter) {
31
+ const matches = Array.isArray(tanstackRouter.state.matches) ? tanstackRouter.state.matches : [];
32
+ const routesById = tanstackRouter.routesById || {};
33
+ await Promise.all(matches.map(async (match)=>{
34
+ const routeId = 'string' == typeof match.routeId ? match.routeId : 'string' == typeof match.route?.id ? match.route.id : void 0;
35
+ const route = routeId ? routesById[routeId] : match.route;
36
+ const options = route?.options;
37
+ if (!options) return;
38
+ await Promise.all([
39
+ preloadRouteComponent(options.component),
40
+ preloadRouteComponent(options.pendingComponent),
41
+ preloadRouteComponent(options.errorComponent),
42
+ preloadRouteComponent(options.notFoundComponent)
43
+ ]);
44
+ }));
45
+ }
46
+ async function waitForRouterSerialization(tanstackRouter) {
47
+ const serverSsr = tanstackRouter.serverSsr;
48
+ if (!serverSsr || 'function' != typeof serverSsr.onSerializationFinished || serverSsr.isSerializationFinished?.()) return;
49
+ await new Promise((resolve)=>{
50
+ serverSsr.onSerializationFinished?.(resolve);
51
+ });
52
+ }
53
+ function htmlEscapeAttr(value) {
54
+ return value.replace(/&/g, '&').replace(/"/g, '"');
55
+ }
56
+ function routerManagedTagToHtml(tag) {
57
+ if (!tag || 'object' != typeof tag) return '';
58
+ const managedTag = tag;
59
+ if (!managedTag || "script" !== managedTag.tag) return '';
60
+ const attrs = managedTag.attrs || {};
61
+ const attrsStr = Object.entries(attrs).filter(([, v])=>null != v && false !== v).map(([k, v])=>{
62
+ const name = 'className' === k ? 'class' : k;
63
+ if (true === v) return name;
64
+ return `${name}="${htmlEscapeAttr(String(v))}"`;
65
+ }).join(' ');
66
+ const open = attrsStr.length ? `<script ${attrsStr}>` : "<script>";
67
+ const children = 'string' == typeof managedTag.children ? managedTag.children : '';
68
+ return `${open}${children}</script>`;
69
+ }
70
+ function routerManagedTagsToHtml(tags) {
71
+ const normalizedTags = Array.isArray(tags) ? tags : [
72
+ tags
73
+ ];
74
+ return normalizedTags.map(routerManagedTagToHtml).filter(Boolean);
75
+ }
76
+ function createGetSsrHref(request) {
77
+ const url = new URL(request.url);
78
+ return `${url.pathname}${url.search}${url.hash}`;
79
+ }
80
+ function stripSyntheticNotFoundRoute(routes) {
81
+ return routes.filter((route)=>!('*' === route.path && !route.id && !route.loader)).map((route)=>{
82
+ if (!route.children?.length) return route;
83
+ return {
84
+ ...route,
85
+ children: stripSyntheticNotFoundRoute(route.children)
86
+ };
87
+ });
88
+ }
89
+ function collectRouterErrors(tanstackRouter) {
90
+ const state = tanstackRouter.state;
91
+ const matches = Array.isArray(state.matches) ? state.matches : [];
92
+ const errors = matches.reduce((acc, match)=>{
93
+ if (!match.error) return acc;
94
+ const routeId = 'string' == typeof match.routeId ? match.routeId : 'string' == typeof match.route?.id ? match.route.id : `match-${Object.keys(acc).length}`;
95
+ acc[routeId] = match.error;
96
+ return acc;
97
+ }, {});
98
+ return Object.keys(errors).length > 0 ? errors : void 0;
99
+ }
100
+ const tanstackRouterPlugin = (userConfig = {})=>{
101
+ const plugin = {
102
+ name: '@modern-js/plugin-router-tanstack',
103
+ registryHooks: {
104
+ modifyRoutes: modifyRoutes,
105
+ onAfterCreateRouter: onAfterCreateRouter,
106
+ onAfterHydrateRouter: onAfterHydrateRouter,
107
+ onBeforeCreateRouter: onBeforeCreateRouter,
108
+ onBeforeCreateRoutes: onBeforeCreateRoutes,
109
+ onBeforeHydrateRouter: onBeforeHydrateRouter
110
+ },
111
+ setup: (api)=>{
112
+ api.onBeforeRender(async (context, interrupt)=>{
113
+ const pluginConfig = api.getRuntimeConfig();
114
+ const mergedConfig = merge(pluginConfig.router || {}, userConfig);
115
+ const serializationAdapters = getGlobalEnableRsc() ? (await import("./rsc/server.mjs")).getTanstackRscSerializationAdapters() : void 0;
116
+ const enableRsc = getGlobalEnableRsc();
117
+ const { basename = '', routesConfig, createRoutes } = mergedConfig;
118
+ const finalRouteConfig = {
119
+ routes: getGlobalRoutes(),
120
+ globalApp: getGlobalLayoutApp(),
121
+ ...routesConfig
122
+ };
123
+ if (!finalRouteConfig.routes && !createRoutes) return;
124
+ const hooks = api.getHooks();
125
+ await hooks.onBeforeCreateRoutes.call(context);
126
+ const routeObjects = createRoutes ? createRoutes() : createRouteObjectsFromConfig({
127
+ routesConfig: finalRouteConfig,
128
+ ssrMode: context.ssrContext?.mode
129
+ }) || [];
130
+ const normalizedRouteObjects = createRoutes ? routeObjects : stripSyntheticNotFoundRoute(routeObjects);
131
+ const modifiedRouteObjects = hooks.modifyRoutes.call(normalizedRouteObjects);
132
+ if (!modifiedRouteObjects.length) return;
133
+ const { request, nonce, baseUrl, loaderFailureMode = 'errorBoundary' } = context.ssrContext;
134
+ const _basename = '/' === baseUrl ? urlJoin(baseUrl, basename || '') : baseUrl;
135
+ const initialHref = createGetSsrHref(request.raw);
136
+ const isRSCNavigation = enableRsc && 'true' === request.raw.headers.get('x-rsc-tree');
137
+ const requestContext = createRequestContext(context.ssrContext?.loaderContext);
138
+ const controller = new AbortController();
139
+ const ssrRequest = new Request(request.raw.url, {
140
+ method: 'GET',
141
+ headers: request.raw.headers,
142
+ signal: controller.signal
143
+ });
144
+ const routerContext = {
145
+ request: ssrRequest,
146
+ requestContext
147
+ };
148
+ const routeTree = createRouteTreeFromRouteObjects(modifiedRouteObjects);
149
+ const history = createMemoryHistory({
150
+ initialEntries: [
151
+ initialHref
152
+ ]
153
+ });
154
+ const rewrite = createModernBasepathRewrite(_basename);
155
+ const routerLifecycleContext = {
156
+ framework: 'tanstack',
157
+ phase: 'ssr-prepare',
158
+ routes: modifiedRouteObjects,
159
+ runtimeContext: context,
160
+ basename: _basename
161
+ };
162
+ hooks.onBeforeCreateRouter.call(routerLifecycleContext);
163
+ const tanstackRouter = createRouter({
164
+ routeTree,
165
+ history,
166
+ basepath: '/',
167
+ rewrite,
168
+ origin: new URL(request.raw.url).origin,
169
+ ssr: {
170
+ nonce
171
+ },
172
+ context: routerContext,
173
+ ...serializationAdapters ? {
174
+ serializationAdapters
175
+ } : {}
176
+ });
177
+ const serverRouter = tanstackRouter;
178
+ attachRouterServerSsrUtils({
179
+ router: serverRouter,
180
+ manifest: void 0
181
+ });
182
+ const end = time();
183
+ try {
184
+ await tanstackRouter.load({
185
+ sync: true
186
+ });
187
+ } finally{
188
+ const cost = end();
189
+ context.ssrContext?.onTiming?.(LOADER_REPORTER_NAME, cost);
190
+ }
191
+ if (serverRouter.state.redirect) {
192
+ const resolved = serverRouter.resolveRedirect ? serverRouter.resolveRedirect(serverRouter.state.redirect) : serverRouter.state.redirect;
193
+ try {
194
+ serverRouter.serverSsr?.cleanup?.();
195
+ } catch {}
196
+ return interrupt(isRSCNavigation ? handleTanstackRscRedirect(resolved.headers, _basename, resolved.status) : resolved);
197
+ }
198
+ const routerErrors = collectRouterErrors(tanstackRouter);
199
+ if (routerErrors && 'clientRender' === loaderFailureMode) {
200
+ context.ssrContext?.response.status(200);
201
+ try {
202
+ serverRouter.serverSsr?.cleanup?.();
203
+ } catch {}
204
+ throw Object.values(routerErrors)[0];
205
+ }
206
+ await preloadMatchedRouteComponents(serverRouter);
207
+ context.ssrContext?.response.status(tanstackRouter.state.statusCode);
208
+ await serverRouter.serverSsr?.dehydrate?.();
209
+ await waitForRouterSerialization(serverRouter);
210
+ if (isRSCNavigation) setTanstackRscServerPayload(createTanstackRscServerPayload(serverRouter, {
211
+ omitClientLoaderData: true
212
+ }));
213
+ const ssrScriptTags = serverRouter.serverSsr?.takeBufferedScripts?.();
214
+ const hydrationScripts = routerManagedTagsToHtml(ssrScriptTags);
215
+ const matchedRouteIds = getModernRouteIdsFromMatches(serverRouter);
216
+ const routerServerSnapshot = createRouterServerSnapshot({
217
+ framework: 'tanstack',
218
+ basename: _basename,
219
+ statusCode: tanstackRouter.state.statusCode,
220
+ errors: routerErrors,
221
+ matchedRouteIds,
222
+ hydrationScripts
223
+ });
224
+ const runtimeContext = applyRouterServerPrepareResult(context, {
225
+ snapshot: routerServerSnapshot,
226
+ cleanup: ()=>serverRouter.serverSsr?.cleanup?.(),
227
+ state: {
228
+ framework: 'tanstack',
229
+ basename: _basename,
230
+ instance: serverRouter,
231
+ hydrationScripts,
232
+ matchedRouteIds,
233
+ serverSnapshot: routerServerSnapshot
234
+ }
235
+ });
236
+ hooks.onAfterCreateRouter.call({
237
+ ...routerLifecycleContext,
238
+ router: serverRouter,
239
+ serverSnapshot: routerServerSnapshot,
240
+ runtimeContext
241
+ });
242
+ });
243
+ api.wrapRoot((App)=>{
244
+ const getRouteApp = ()=>(props)=>{
245
+ const context = useContext(InternalRuntimeContext);
246
+ const router = context.routerInstance ?? context.routerRuntime?.instance;
247
+ if (!router) return App ? /*#__PURE__*/ jsx(App, {
248
+ ...props
249
+ }) : null;
250
+ const routerWrapper = /*#__PURE__*/ jsx(Suspense, {
251
+ fallback: null,
252
+ children: /*#__PURE__*/ jsx(RouterProvider, {
253
+ router: router
254
+ })
255
+ });
256
+ return App ? /*#__PURE__*/ jsx(App, {
257
+ children: routerWrapper
258
+ }) : routerWrapper;
259
+ };
260
+ return getRouteApp();
261
+ });
262
+ }
263
+ };
264
+ return plugin;
265
+ };
266
+ const plugin_node = tanstackRouterPlugin;
267
+ export default plugin_node;
268
+ export { tanstackRouterPlugin };
@@ -0,0 +1,18 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Link } from "@tanstack/react-router";
3
+ function resolvePreloadFromPrefetch(prefetch, preload) {
4
+ if (void 0 !== preload) return preload;
5
+ if ('none' === prefetch) return false;
6
+ if ('intent' === prefetch || 'render' === prefetch || 'viewport' === prefetch) return prefetch;
7
+ return preload;
8
+ }
9
+ const LinkComponentImpl = (props)=>{
10
+ const { prefetch, preload, ...rest } = props;
11
+ return /*#__PURE__*/ jsx(Link, {
12
+ ...rest,
13
+ preload: resolvePreloadFromPrefetch(prefetch, preload)
14
+ });
15
+ };
16
+ const prefetchLink_Link = LinkComponentImpl;
17
+ const NavLink = LinkComponentImpl;
18
+ export { NavLink, prefetchLink_Link as Link };