@bleedingdev/modern-js-plugin-tanstack 3.9.0-ultramodern.9 → 3.9.3-ultramodern.1

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 (112) hide show
  1. package/dist/cjs/cli/artifacts.js +15 -1
  2. package/dist/cjs/cli/index.js +13 -2
  3. package/dist/cjs/cli/routeMetadata.js +131 -0
  4. package/dist/cjs/cli/rscRouteLayer.js +86 -0
  5. package/dist/cjs/cli/tanstackTypes/canonicalRoutes.js +7 -7
  6. package/dist/cjs/cli/tanstackTypes/shared.js +0 -14
  7. package/dist/cjs/cli/tanstackTypes/source.js +28 -63
  8. package/dist/cjs/runtime/lifecycle.js +0 -3
  9. package/dist/cjs/runtime/loaderBridge.js +10 -4
  10. package/dist/cjs/runtime/navigation.js +102 -0
  11. package/dist/cjs/runtime/plugin.js +10 -1
  12. package/dist/cjs/runtime/plugin.node.js +89 -64
  13. package/dist/cjs/runtime/routeTree/construction.js +19 -61
  14. package/dist/cjs/runtime/routeTree/loaders.js +1 -1
  15. package/dist/cjs/runtime/routeTree/paths.js +0 -6
  16. package/dist/cjs/runtime/ssrManagedTags.js +2 -12
  17. package/dist/cjs/runtime/utils.js +1 -0
  18. package/dist/cjs/shared/routeDescriptor.js +60 -0
  19. package/dist/esm/cli/artifacts.mjs +13 -2
  20. package/dist/esm/cli/index.mjs +13 -11
  21. package/dist/esm/cli/routeMetadata.mjs +71 -0
  22. package/dist/esm/cli/rscRouteLayer.mjs +35 -0
  23. package/dist/esm/cli/tanstackTypes/canonicalRoutes.mjs +7 -7
  24. package/dist/esm/cli/tanstackTypes/shared.mjs +1 -9
  25. package/dist/esm/cli/tanstackTypes/source.mjs +29 -64
  26. package/dist/esm/runtime/lifecycle.mjs +1 -1
  27. package/dist/esm/runtime/loaderBridge.mjs +8 -5
  28. package/dist/esm/runtime/navigation.mjs +64 -0
  29. package/dist/esm/runtime/plugin.mjs +10 -1
  30. package/dist/esm/runtime/plugin.node.mjs +91 -66
  31. package/dist/esm/runtime/routeTree/construction.mjs +19 -61
  32. package/dist/esm/runtime/routeTree/loaders.mjs +2 -2
  33. package/dist/esm/runtime/routeTree/paths.mjs +1 -4
  34. package/dist/esm/runtime/ssrManagedTags.mjs +1 -8
  35. package/dist/esm/runtime/utils.mjs +1 -0
  36. package/dist/esm/shared/routeDescriptor.mjs +22 -0
  37. package/dist/esm-node/cli/artifacts.mjs +13 -2
  38. package/dist/esm-node/cli/index.mjs +13 -11
  39. package/dist/esm-node/cli/routeMetadata.mjs +72 -0
  40. package/dist/esm-node/cli/rscRouteLayer.mjs +36 -0
  41. package/dist/esm-node/cli/tanstackTypes/canonicalRoutes.mjs +7 -7
  42. package/dist/esm-node/cli/tanstackTypes/shared.mjs +1 -9
  43. package/dist/esm-node/cli/tanstackTypes/source.mjs +29 -64
  44. package/dist/esm-node/runtime/lifecycle.mjs +1 -1
  45. package/dist/esm-node/runtime/loaderBridge.mjs +8 -5
  46. package/dist/esm-node/runtime/navigation.mjs +65 -0
  47. package/dist/esm-node/runtime/plugin.mjs +10 -1
  48. package/dist/esm-node/runtime/plugin.node.mjs +91 -66
  49. package/dist/esm-node/runtime/routeTree/construction.mjs +19 -61
  50. package/dist/esm-node/runtime/routeTree/loaders.mjs +2 -2
  51. package/dist/esm-node/runtime/routeTree/paths.mjs +1 -4
  52. package/dist/esm-node/runtime/ssrManagedTags.mjs +1 -8
  53. package/dist/esm-node/runtime/utils.mjs +1 -0
  54. package/dist/esm-node/shared/routeDescriptor.mjs +23 -0
  55. package/dist/types/cli/artifacts.d.ts +16 -7
  56. package/dist/types/cli/index.d.ts +1 -1
  57. package/dist/types/cli/routeMetadata.d.ts +18 -0
  58. package/dist/types/cli/rscRouteLayer.d.ts +11 -0
  59. package/dist/types/cli/tanstackTypes/shared.d.ts +0 -2
  60. package/dist/types/cli/tanstackTypes/source.d.ts +3 -2
  61. package/dist/types/runtime/lifecycle.d.ts +1 -1
  62. package/dist/types/runtime/loaderBridge.d.ts +1 -0
  63. package/dist/types/runtime/navigation.d.ts +4 -0
  64. package/dist/types/runtime/pluginShared.d.ts +5 -0
  65. package/dist/types/runtime/routeTree/paths.d.ts +0 -2
  66. package/dist/types/runtime/ssrManagedTags.d.ts +0 -1
  67. package/dist/types/runtime/ssrTypes.d.ts +0 -7
  68. package/dist/types/shared/routeDescriptor.d.ts +26 -0
  69. package/package.json +32 -26
  70. package/src/cli/artifacts.ts +59 -8
  71. package/src/cli/index.ts +17 -4
  72. package/src/cli/routeMetadata.ts +121 -0
  73. package/src/cli/rscRouteLayer.ts +93 -0
  74. package/src/cli/tanstackTypes/canonicalRoutes.ts +17 -12
  75. package/src/cli/tanstackTypes/shared.ts +0 -14
  76. package/src/cli/tanstackTypes/source.ts +48 -120
  77. package/src/runtime/lifecycle.ts +0 -1
  78. package/src/runtime/loaderBridge.ts +9 -9
  79. package/src/runtime/navigation.ts +78 -0
  80. package/src/runtime/plugin.node.tsx +121 -91
  81. package/src/runtime/plugin.tsx +10 -0
  82. package/src/runtime/pluginShared.ts +12 -0
  83. package/src/runtime/routeTree/construction.ts +32 -112
  84. package/src/runtime/routeTree/loaders.ts +2 -4
  85. package/src/runtime/routeTree/paths.ts +0 -6
  86. package/src/runtime/ssrManagedTags.ts +0 -17
  87. package/src/runtime/ssrTypes.ts +0 -7
  88. package/src/runtime/utils.tsx +1 -0
  89. package/src/shared/routeDescriptor.ts +46 -0
  90. package/dist/esm/rslib-runtime~1.mjs +0 -18
  91. package/dist/esm-node/rslib-runtime~0.mjs +0 -19
  92. package/rslib.config.mts +0 -4
  93. package/rstest.config.mts +0 -53
  94. package/tests/router/cli.test.ts +0 -420
  95. package/tests/router/clientHydration.test.tsx +0 -200
  96. package/tests/router/dataMutation.test.tsx +0 -428
  97. package/tests/router/fixtures/router-gen.oxlint.json +0 -5
  98. package/tests/router/flightSerialization.roundtrip.test.tsx +0 -140
  99. package/tests/router/generateRouteArtifacts.test.ts +0 -146
  100. package/tests/router/loaderBridge.test.ts +0 -207
  101. package/tests/router/localisedIdentity.test.tsx +0 -95
  102. package/tests/router/prefetchLink.test.tsx +0 -122
  103. package/tests/router/prefetchLinkPreload.test.tsx +0 -65
  104. package/tests/router/routeHooks.test.ts +0 -49
  105. package/tests/router/routeTree.test.ts +0 -240
  106. package/tests/router/rsc.test.tsx +0 -480
  107. package/tests/router/serverPlugin.test.ts +0 -157
  108. package/tests/router/slotUsageSanitizer.test.ts +0 -23
  109. package/tests/router/ssrPreload.test.ts +0 -30
  110. package/tests/router/tanstackTypes.test.ts +0 -384
  111. package/tsconfig.json +0 -12
  112. package/tsconfig.tsgo.json +0 -6
@@ -30,6 +30,7 @@ __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
31
  createRouteStaticData: ()=>routeStaticData_js_namespaceObject.createRouteStaticData,
32
32
  getLoaderHref: ()=>getLoaderHref,
33
+ getLoaderSignal: ()=>getLoaderSignal,
33
34
  handleModernLoaderError: ()=>handleModernLoaderError,
34
35
  handleModernLoaderResult: ()=>handleModernLoaderResult,
35
36
  isAbsoluteUrl: ()=>isAbsoluteUrl_js_namespaceObject.isAbsoluteUrl,
@@ -79,10 +80,13 @@ function mapSplatParamsForModernLoader(params, hasSplat) {
79
80
  return rest;
80
81
  }
81
82
  function getLoaderSignal(ctx) {
82
- const abortSignal = ctx?.abortController?.signal;
83
- if (abortSignal instanceof AbortSignal) return abortSignal;
84
- if (ctx?.signal instanceof AbortSignal) return ctx.signal;
85
- return new AbortController().signal;
83
+ const matchSignal = ctx?.abortController?.signal ?? ctx?.signal;
84
+ const requestSignal = ctx?.context?.request?.signal;
85
+ const signals = [
86
+ matchSignal,
87
+ requestSignal
88
+ ].filter((signal)=>signal instanceof AbortSignal);
89
+ return AbortSignal.any(signals);
86
90
  }
87
91
  function getLoaderHref(ctx) {
88
92
  if ('string' == typeof ctx?.location) return ctx.location;
@@ -145,6 +149,7 @@ function modernLoaderToTanstack(opts, modernLoader) {
145
149
  }
146
150
  exports.createRouteStaticData = __webpack_exports__.createRouteStaticData;
147
151
  exports.getLoaderHref = __webpack_exports__.getLoaderHref;
152
+ exports.getLoaderSignal = __webpack_exports__.getLoaderSignal;
148
153
  exports.handleModernLoaderError = __webpack_exports__.handleModernLoaderError;
149
154
  exports.handleModernLoaderResult = __webpack_exports__.handleModernLoaderResult;
150
155
  exports.isAbsoluteUrl = __webpack_exports__.isAbsoluteUrl;
@@ -157,6 +162,7 @@ exports.throwTanstackRedirect = __webpack_exports__.throwTanstackRedirect;
157
162
  for(var __rspack_i in __webpack_exports__)if (-1 === [
158
163
  "createRouteStaticData",
159
164
  "getLoaderHref",
165
+ "getLoaderSignal",
160
166
  "handleModernLoaderError",
161
167
  "handleModernLoaderResult",
162
168
  "isAbsoluteUrl",
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ createTanstackNavigation: ()=>createTanstackNavigation
32
+ });
33
+ const external_prefetchLink_js_namespaceObject = require("./prefetchLink.js");
34
+ function createTanstackNavigation(router) {
35
+ let location;
36
+ let matches;
37
+ let snapshot;
38
+ return {
39
+ Link: external_prefetchLink_js_namespaceObject.Link,
40
+ getSnapshot () {
41
+ const state = router.state;
42
+ if (location !== state.location || void 0 === matches || matches.length !== state.matches.length || matches.some((match, index)=>match.params !== state.matches[index]?.params)) {
43
+ location = state.location;
44
+ matches = state.matches;
45
+ snapshot = {
46
+ location: {
47
+ pathname: location.pathname,
48
+ search: location.searchStr,
49
+ hash: '' !== location.hash ? `#${location.hash.replace(/^#/, '')}` : ''
50
+ },
51
+ params: Object.assign({}, ...matches.map((match)=>match.params))
52
+ };
53
+ }
54
+ return snapshot;
55
+ },
56
+ subscribe (listener) {
57
+ const stops = [
58
+ 'onBeforeNavigate',
59
+ 'onBeforeLoad',
60
+ 'onLoad',
61
+ 'onResolved'
62
+ ].map((event)=>router.subscribe(event, listener));
63
+ return ()=>{
64
+ for (const stop of stops)stop();
65
+ };
66
+ },
67
+ navigate (href, options) {
68
+ return router.navigate({
69
+ to: href,
70
+ replace: options?.replace,
71
+ ...options?.state === void 0 ? {} : {
72
+ state: options.state
73
+ }
74
+ });
75
+ },
76
+ createLinkProps (target) {
77
+ const preload = void 0 !== target.preload ? target.preload : 'none' === target.prefetch ? false : target.prefetch;
78
+ return {
79
+ to: target.pathname,
80
+ ...void 0 !== target.search ? {
81
+ search: target.search
82
+ } : {},
83
+ ...void 0 !== target.hash && '' !== target.hash ? {
84
+ hash: target.hash
85
+ } : {},
86
+ ...void 0 === target.hashScrollIntoView ? {} : {
87
+ hashScrollIntoView: target.hashScrollIntoView
88
+ },
89
+ ...void 0 === preload ? {} : {
90
+ preload
91
+ }
92
+ };
93
+ }
94
+ };
95
+ }
96
+ exports.createTanstackNavigation = __webpack_exports__.createTanstackNavigation;
97
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
98
+ "createTanstackNavigation"
99
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
100
+ Object.defineProperty(exports, '__esModule', {
101
+ value: true
102
+ });
@@ -33,6 +33,7 @@ __webpack_require__.d(__webpack_exports__, {
33
33
  });
34
34
  const jsx_runtime_namespaceObject = require("react/jsx-runtime");
35
35
  const context_namespaceObject = require("@modern-js/runtime/context");
36
+ const router_state_plugin_namespaceObject = require("@modern-js/runtime-extensions/router-state-plugin");
36
37
  const url_namespaceObject = require("@modern-js/runtime-utils/url");
37
38
  const react_router_namespaceObject = require("@tanstack/react-router");
38
39
  const external_react_namespaceObject = require("react");
@@ -43,6 +44,7 @@ const external_clientHydration_js_namespaceObject = require("./clientHydration.j
43
44
  const external_hooks_js_namespaceObject = require("./hooks.js");
44
45
  const external_hydrationBoundary_js_namespaceObject = require("./hydrationBoundary.js");
45
46
  const external_lifecycle_js_namespaceObject = require("./lifecycle.js");
47
+ const external_navigation_js_namespaceObject = require("./navigation.js");
46
48
  const external_pluginShared_js_namespaceObject = require("./pluginShared.js");
47
49
  const external_prefetchLink_js_namespaceObject = require("./prefetchLink.js");
48
50
  const external_routeHooks_js_namespaceObject = require("./routeHooks.js");
@@ -54,6 +56,9 @@ const tanstackRouterPlugin = (userConfig = {})=>{
54
56
  name: '@modern-js/plugin-router-tanstack',
55
57
  registryHooks: external_hooks_js_namespaceObject.routerProviderRegistryHooks,
56
58
  setup: (api)=>{
59
+ (0, router_state_plugin_namespaceObject.createRouterStatePlugin)({
60
+ registryHooks: external_hooks_js_namespaceObject.routerProviderRegistryHooks
61
+ }).setup(api);
57
62
  const hooks = api.getHooks();
58
63
  let cachedRouteObjects;
59
64
  let cachedRouteTree = null;
@@ -175,10 +180,14 @@ const tanstackRouterPlugin = (userConfig = {})=>{
175
180
  runtimeContext
176
181
  ]);
177
182
  if (!router) return App ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(App, {}) : null;
183
+ const navigation = (0, external_react_namespaceObject.useMemo)(()=>(0, external_navigation_js_namespaceObject.createTanstackNavigation)(router), [
184
+ router
185
+ ]);
178
186
  const runtimeState = (0, external_lifecycle_js_namespaceObject.applyRouterRuntimeState)(runtimeContext, {
179
187
  framework: 'tanstack',
180
188
  basename: _basename,
181
- instance: router
189
+ instance: router,
190
+ navigation
182
191
  });
183
192
  const lifecycleContext = {
184
193
  framework: 'tanstack',
@@ -33,6 +33,7 @@ __webpack_require__.d(__webpack_exports__, {
33
33
  });
34
34
  const jsx_runtime_namespaceObject = require("react/jsx-runtime");
35
35
  const context_namespaceObject = require("@modern-js/runtime/context");
36
+ const router_state_plugin_namespaceObject = require("@modern-js/runtime-extensions/router-state-plugin");
36
37
  const node_namespaceObject = require("@modern-js/runtime-utils/node");
37
38
  const time_namespaceObject = require("@modern-js/runtime-utils/time");
38
39
  const constants_namespaceObject = require("@modern-js/utils/universal/constants");
@@ -42,6 +43,7 @@ const external_basepathRewrite_js_namespaceObject = require("./basepathRewrite.j
42
43
  const external_hooks_js_namespaceObject = require("./hooks.js");
43
44
  const external_hydrationBoundary_js_namespaceObject = require("./hydrationBoundary.js");
44
45
  const external_lifecycle_js_namespaceObject = require("./lifecycle.js");
46
+ const external_navigation_js_namespaceObject = require("./navigation.js");
45
47
  const external_pluginShared_js_namespaceObject = require("./pluginShared.js");
46
48
  const external_prefetchLink_js_namespaceObject = require("./prefetchLink.js");
47
49
  const index_js_namespaceObject = require("./routeTree/index.js");
@@ -55,6 +57,9 @@ const tanstackRouterPlugin = (userConfig = {})=>{
55
57
  name: '@modern-js/plugin-router-tanstack',
56
58
  registryHooks: external_hooks_js_namespaceObject.routerProviderRegistryHooks,
57
59
  setup: (api)=>{
60
+ (0, router_state_plugin_namespaceObject.createRouterStatePlugin)({
61
+ registryHooks: external_hooks_js_namespaceObject.routerProviderRegistryHooks
62
+ }).setup(api);
58
63
  api.onBeforeRender(async (context, interrupt)=>{
59
64
  const routeConfig = (0, external_pluginShared_js_namespaceObject.getTanstackRouteConfig)(api, userConfig);
60
65
  const { mergedConfig } = routeConfig;
@@ -120,76 +125,96 @@ const tanstackRouterPlugin = (userConfig = {})=>{
120
125
  });
121
126
  const serverRouter = tanstackRouter;
122
127
  if (enableRsc) (0, payloadStorage_js_namespaceObject.setTanstackRscRouter)(serverRouter);
123
- await (0, external_ssrManagedTags_js_namespaceObject.attachServerSsrUtils)(serverRouter);
124
- const end = (0, time_namespaceObject.time)();
125
- try {
126
- await tanstackRouter.load({
127
- sync: true
128
- });
129
- } finally{
130
- const cost = end();
131
- context.ssrContext?.onTiming?.(constants_namespaceObject.LOADER_REPORTER_NAME, cost);
132
- }
133
- const serverLoadResult = serverRouter._serverResult;
134
- if (!serverLoadResult) {
135
- try {
136
- serverRouter.serverSsr?.cleanup?.();
137
- } catch {}
138
- throw new Error('TanStack Router completed an SSR load without a server result.');
139
- }
140
- if ('redirect' === serverLoadResult.type) {
141
- const { redirect } = serverLoadResult;
142
- try {
143
- serverRouter.serverSsr?.cleanup?.();
144
- } catch {}
145
- return interrupt(isRSCNavigation ? (0, payloadRouter_js_namespaceObject.handleTanstackRscRedirect)(redirect.headers, _basename, redirect.status) : redirect);
146
- }
147
- const routerErrors = (0, external_ssrManagedTags_js_namespaceObject.collectRouterErrors)(tanstackRouter);
148
- if (routerErrors && 'clientRender' === loaderFailureMode) {
149
- context.ssrContext?.response?.status(200);
150
- try {
151
- serverRouter.serverSsr?.cleanup?.();
152
- } catch {}
153
- throw Object.values(routerErrors)[0];
154
- }
155
- await (0, external_ssrPreload_js_namespaceObject.preloadMatchedRouteComponents)(serverRouter);
156
- context.ssrContext?.response?.status(serverLoadResult.status);
157
- await serverRouter.serverSsr?.dehydrate?.();
158
- if (enableRsc) {
159
- if (isRSCNavigation) await (0, external_ssrManagedTags_js_namespaceObject.waitForRouterSerialization)(serverRouter);
160
- (0, payloadStorage_js_namespaceObject.setTanstackRscServerPayload)((0, payloadRouter_js_namespaceObject.createTanstackRscServerPayload)(serverRouter, {
161
- omitClientLoaderData: isRSCNavigation
162
- }));
163
- }
164
- const ssrScriptTags = serverRouter.serverSsr?.takeBufferedScripts?.();
165
- const hydrationScripts = (0, external_ssrManagedTags_js_namespaceObject.routerManagedTagsToHtml)(ssrScriptTags);
166
- const matchedRouteIds = (0, index_js_namespaceObject.getModernRouteIdsFromMatches)(serverRouter);
167
- const routerServerSnapshot = (0, external_lifecycle_js_namespaceObject.createRouterServerSnapshot)({
128
+ let disposed = false;
129
+ let prepared = false;
130
+ const onAbort = ()=>controller.abort(rawRequest.signal.reason);
131
+ const cleanup = ()=>{
132
+ if (disposed) return;
133
+ disposed = true;
134
+ rawRequest.signal.removeEventListener('abort', onAbort);
135
+ controller.abort();
136
+ serverRouter.serverSsr?.cleanup();
137
+ };
138
+ (0, external_lifecycle_js_namespaceObject.applyRouterRuntimeState)(context, {
168
139
  framework: 'tanstack',
169
140
  basename: _basename,
170
- statusCode: serverLoadResult.status,
171
- errors: routerErrors,
172
- matchedRouteIds,
173
- hydrationScripts
141
+ instance: serverRouter,
142
+ cleanup
143
+ });
144
+ rawRequest.signal.addEventListener('abort', onAbort, {
145
+ once: true
174
146
  });
175
- const runtimeContext = (0, external_lifecycle_js_namespaceObject.applyRouterServerPrepareResult)(context, {
176
- snapshot: routerServerSnapshot,
177
- cleanup: ()=>serverRouter.serverSsr?.cleanup?.(),
178
- state: {
147
+ try {
148
+ rawRequest.signal.throwIfAborted();
149
+ await (0, external_ssrManagedTags_js_namespaceObject.attachServerSsrUtils)(serverRouter);
150
+ rawRequest.signal.throwIfAborted();
151
+ const end = (0, time_namespaceObject.time)();
152
+ try {
153
+ await tanstackRouter.load({
154
+ sync: true
155
+ });
156
+ } finally{
157
+ const cost = end();
158
+ context.ssrContext?.onTiming?.(constants_namespaceObject.LOADER_REPORTER_NAME, cost);
159
+ }
160
+ rawRequest.signal.throwIfAborted();
161
+ const serverLoadResult = serverRouter._serverResult;
162
+ if (!serverLoadResult) throw new Error('TanStack Router completed an SSR load without a server result.');
163
+ if ('redirect' === serverLoadResult.type) {
164
+ const { redirect } = serverLoadResult;
165
+ return interrupt(isRSCNavigation ? (0, payloadRouter_js_namespaceObject.handleTanstackRscRedirect)(redirect.headers, _basename, redirect.status) : redirect);
166
+ }
167
+ const routerErrors = (0, external_ssrManagedTags_js_namespaceObject.collectRouterErrors)(tanstackRouter);
168
+ if (routerErrors && 'clientRender' === loaderFailureMode) {
169
+ context.ssrContext?.response?.status(200);
170
+ throw Object.values(routerErrors)[0];
171
+ }
172
+ await (0, external_ssrPreload_js_namespaceObject.preloadMatchedRouteComponents)(serverRouter);
173
+ context.ssrContext?.response?.status(serverLoadResult.status);
174
+ await serverRouter.serverSsr?.dehydrate();
175
+ if (enableRsc) {
176
+ (0, payloadStorage_js_namespaceObject.setTanstackRscServerPayload)((0, payloadRouter_js_namespaceObject.createTanstackRscServerPayload)(serverRouter, {
177
+ omitClientLoaderData: isRSCNavigation
178
+ }));
179
+ if (isRSCNavigation) context.ssrContext.response.setHeader('Content-Type', 'text/x-component');
180
+ }
181
+ const initialScriptTags = serverRouter.serverSsr?.takeInitialHydrationScriptTags();
182
+ const hydrationScripts = initialScriptTags ? (0, external_ssrManagedTags_js_namespaceObject.routerManagedTagsToHtml)([
183
+ ...initialScriptTags.before,
184
+ initialScriptTags.boundary
185
+ ]) : [];
186
+ const matchedRouteIds = (0, index_js_namespaceObject.getModernRouteIdsFromMatches)(serverRouter);
187
+ const routerServerSnapshot = {
179
188
  framework: 'tanstack',
180
189
  basename: _basename,
181
- instance: serverRouter,
182
- hydrationScripts,
190
+ statusCode: serverLoadResult.status,
191
+ errors: routerErrors,
183
192
  matchedRouteIds,
184
- serverSnapshot: routerServerSnapshot
185
- }
186
- });
187
- hooks.onAfterCreateRouter.call({
188
- ...routerLifecycleContext,
189
- router: serverRouter,
190
- serverSnapshot: routerServerSnapshot,
191
- runtimeContext
192
- });
193
+ hydrationScripts
194
+ };
195
+ const runtimeContext = (0, external_lifecycle_js_namespaceObject.applyRouterServerPrepareResult)(context, {
196
+ snapshot: routerServerSnapshot,
197
+ cleanup,
198
+ state: {
199
+ framework: 'tanstack',
200
+ basename: _basename,
201
+ instance: serverRouter,
202
+ navigation: (0, external_navigation_js_namespaceObject.createTanstackNavigation)(tanstackRouter)
203
+ }
204
+ });
205
+ rawRequest.signal.throwIfAborted();
206
+ hooks.onAfterCreateRouter.call({
207
+ ...routerLifecycleContext,
208
+ router: serverRouter,
209
+ serverSnapshot: (0, external_lifecycle_js_namespaceObject.getRouterServerSnapshot)(runtimeContext),
210
+ runtimeContext
211
+ });
212
+ prepared = true;
213
+ } finally{
214
+ if (!prepared) try {
215
+ cleanup();
216
+ } catch {}
217
+ }
193
218
  });
194
219
  api.wrapRoot((App)=>{
195
220
  const getRouteApp = ()=>{
@@ -31,26 +31,22 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  createRouteTreeFromRouteObjects: ()=>createRouteTreeFromRouteObjects,
32
32
  getModernRouteIdsFromMatches: ()=>getModernRouteIdsFromMatches
33
33
  });
34
- const i18n_runtime_extensions_namespaceObject = require("@modern-js/i18n-runtime-extensions");
35
34
  const context_namespaceObject = require("@modern-js/runtime/context");
36
35
  const react_router_namespaceObject = require("@tanstack/react-router");
36
+ const routeDescriptor_js_namespaceObject = require("../../shared/routeDescriptor.js");
37
37
  const routeStaticData_js_namespaceObject = require("../../shared/routeStaticData.js");
38
38
  const external_outlet_js_namespaceObject = require("../outlet.js");
39
39
  const external_components_js_namespaceObject = require("./components.js");
40
40
  const external_loaders_js_namespaceObject = require("./loaders.js");
41
- const external_paths_js_namespaceObject = require("./paths.js");
42
41
  const external_staticData_js_namespaceObject = require("./staticData.js");
43
42
  const external_tanstackRoutes_js_namespaceObject = require("./tanstackRoutes.js");
44
- function createRouteFromRouteObject(opts) {
45
- const { options = {}, parent, pathlessFallbackId = 'pathless', routeObject } = opts;
43
+ function createRouteOptions(routeObject, options) {
46
44
  const modernRouteObject = routeObject;
47
45
  const revalidationState = {};
48
46
  const shouldRevalidate = modernRouteObject.shouldRevalidate;
49
47
  const shouldReload = (0, external_loaders_js_namespaceObject.createModernShouldReload)(shouldRevalidate, revalidationState);
50
- const stableFallbackId = routeObject.id || modernRouteObject.file || pathlessFallbackId;
51
48
  const component = (0, external_components_js_namespaceObject.toRouteComponent)(routeObject);
52
49
  const base = {
53
- getParentRoute: ()=>parent,
54
50
  component,
55
51
  pendingComponent: (0, external_components_js_namespaceObject.toPendingComponent)(routeObject),
56
52
  errorComponent: (0, external_components_js_namespaceObject.toErrorComponent)(routeObject),
@@ -71,67 +67,29 @@ function createRouteFromRouteObject(opts) {
71
67
  };
72
68
  if (modernRouteObject.inValidSSRRoute) base.ssr = false;
73
69
  if (shouldReload) base.shouldReload = shouldReload;
74
- if ((0, external_paths_js_namespaceObject.isRouteObjectPathlessLayout)(routeObject)) base.id = stableFallbackId;
75
- else base.path = routeObject.index ? '/' : (0, external_paths_js_namespaceObject.toTanstackPath)(routeObject.path || '');
76
- const route = (0, external_tanstackRoutes_js_namespaceObject.createTanstackRoute)(base);
77
- (0, external_tanstackRoutes_js_namespaceObject.wrapRouteComponentWithModernContext)(route, component, routeObject.id);
78
- const children = routeObject.children;
79
- if (children && children.length > 0) {
80
- const childRoutes = children.map((child, index)=>createRouteFromRouteObject({
81
- options,
82
- parent: route,
83
- pathlessFallbackId: `pathless-${index}`,
84
- routeObject: child
85
- }));
86
- route.addChildren(childRoutes);
87
- }
88
- return route;
70
+ return base;
89
71
  }
90
- function getRootLikeRouteObject(routes) {
91
- return routes.find((route)=>'/' === route.path && !route.index);
72
+ function createRouteFromDescriptor(descriptor, parent, options) {
73
+ const { source, location, children } = descriptor;
74
+ const routeOptions = createRouteOptions(source, options);
75
+ const route = (0, external_tanstackRoutes_js_namespaceObject.createTanstackRoute)({
76
+ ...routeOptions,
77
+ ...location,
78
+ getParentRoute: ()=>parent
79
+ });
80
+ (0, external_tanstackRoutes_js_namespaceObject.wrapRouteComponentWithModernContext)(route, routeOptions.component, source.id);
81
+ if (children.length) route.addChildren(children.map((child)=>createRouteFromDescriptor(child, route, options)));
82
+ return route;
92
83
  }
93
84
  function createRouteTreeFromRouteObjects(routes, options = {}) {
94
- routes = (0, i18n_runtime_extensions_namespaceObject.canonicaliseLocalisedRoutes)(routes);
95
- const rootLikeRoute = getRootLikeRouteObject(routes);
96
- const rootRevalidationState = {};
97
- const rootShouldRevalidate = rootLikeRoute?.shouldRevalidate;
98
- const rootShouldReload = (0, external_loaders_js_namespaceObject.createModernShouldReload)(rootShouldRevalidate, rootRevalidationState);
99
- const rootComponent = rootLikeRoute ? (0, external_components_js_namespaceObject.toRouteComponent)(rootLikeRoute) : void 0;
85
+ const { root, children } = (0, routeDescriptor_js_namespaceObject.describeRouteTree)(routes);
100
86
  const rootRouteOptions = {
101
- component: rootComponent,
102
- pendingComponent: rootLikeRoute ? (0, external_components_js_namespaceObject.toPendingComponent)(rootLikeRoute) : void 0,
103
- errorComponent: rootLikeRoute ? (0, external_components_js_namespaceObject.toErrorComponent)(rootLikeRoute) : void 0,
104
- validateSearch: rootLikeRoute?.validateSearch,
105
- loaderDeps: rootLikeRoute?.loaderDeps,
106
- notFoundComponent: context_namespaceObject.DefaultNotFound,
107
- staticData: (0, routeStaticData_js_namespaceObject.createRouteStaticData)({
108
- modernRouteId: rootLikeRoute?.id,
109
- modernRouteAction: rootLikeRoute?.action,
110
- modernRouteHandle: rootLikeRoute ? (0, external_staticData_js_namespaceObject.mergeModernRouteHandle)(rootLikeRoute) : void 0,
111
- modernRouteHasAction: rootLikeRoute?.hasAction || Boolean(rootLikeRoute?.action),
112
- modernRouteHasClientLoader: rootLikeRoute?.hasClientLoader || void 0 !== rootLikeRoute?.clientData,
113
- modernRouteHasLoader: rootLikeRoute?.hasLoader || 'function' == typeof rootLikeRoute?.loader,
114
- modernRouteIsClientComponent: rootLikeRoute?.isClientComponent,
115
- modernRouteLoader: rootLikeRoute?.loader,
116
- modernRouteShouldRevalidate: rootShouldRevalidate
117
- }),
118
- loader: rootLikeRoute ? (0, external_loaders_js_namespaceObject.wrapRouteObjectLoader)(rootLikeRoute, rootRevalidationState, options) : void 0
87
+ ...root ? createRouteOptions(root, options) : {},
88
+ notFoundComponent: context_namespaceObject.DefaultNotFound
119
89
  };
120
- if (rootShouldReload) rootRouteOptions.shouldReload = rootShouldReload;
121
- if (rootLikeRoute?.inValidSSRRoute) rootRouteOptions.ssr = false;
122
90
  const rootRoute = (0, external_tanstackRoutes_js_namespaceObject.createTanstackRootRoute)(rootRouteOptions);
123
- if (rootComponent) rootRoute.options.component = (0, external_outlet_js_namespaceObject.withModernRouteMatchContext)(rootComponent, react_router_namespaceObject.rootRouteId);
124
- const topLevel = rootLikeRoute ? [
125
- ...rootLikeRoute.children || [],
126
- ...routes.filter((route)=>route !== rootLikeRoute)
127
- ] : routes;
128
- const childRoutes = topLevel.map((routeObject, index)=>createRouteFromRouteObject({
129
- options,
130
- parent: rootRoute,
131
- pathlessFallbackId: `pathless-${index}`,
132
- routeObject
133
- }));
134
- rootRoute.addChildren(childRoutes);
91
+ if (rootRouteOptions.component) rootRoute.options.component = (0, external_outlet_js_namespaceObject.withModernRouteMatchContext)(rootRouteOptions.component, react_router_namespaceObject.rootRouteId);
92
+ rootRoute.addChildren(children.map((child)=>createRouteFromDescriptor(child, rootRoute, options)));
135
93
  return rootRoute;
136
94
  }
137
95
  function getModernRouteIdsFromMatches(router) {
@@ -82,7 +82,7 @@ function wrapRouteObjectLoader(route, revalidationState, options = {}) {
82
82
  if ('function' == typeof modernRoute.lazyImport) try {
83
83
  await modernRoute.lazyImport();
84
84
  } catch {}
85
- const signal = ctx?.abortController?.signal || ctx?.signal || new AbortController().signal;
85
+ const signal = (0, external_loaderBridge_js_namespaceObject.getLoaderSignal)(ctx);
86
86
  const baseRequest = ctx?.context?.request instanceof Request ? ctx.context.request : void 0;
87
87
  const href = (0, external_loaderBridge_js_namespaceObject.getLoaderHref)(ctx);
88
88
  const request = void 0 !== baseRequest ? new Request(baseRequest, {
@@ -39,17 +39,11 @@ function toTanstackPath(pathname) {
39
39
  return segment;
40
40
  }).join('/');
41
41
  }
42
- function isRouteObjectPathlessLayout(route) {
43
- return !route.path && !route.index;
44
- }
45
42
  __webpack_require__.d(__webpack_exports__, {
46
- isRouteObjectPathlessLayout: ()=>isRouteObjectPathlessLayout,
47
43
  toTanstackPath: ()=>toTanstackPath
48
44
  });
49
- exports.isRouteObjectPathlessLayout = __webpack_exports__.isRouteObjectPathlessLayout;
50
45
  exports.toTanstackPath = __webpack_exports__.toTanstackPath;
51
46
  for(var __rspack_i in __webpack_exports__)if (-1 === [
52
- "isRouteObjectPathlessLayout",
53
47
  "toTanstackPath"
54
48
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
55
49
  Object.defineProperty(exports, '__esModule', {
@@ -27,13 +27,6 @@ var __webpack_require__ = {};
27
27
  })();
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
- async function waitForRouterSerialization(tanstackRouter) {
31
- const serverSsr = tanstackRouter.serverSsr;
32
- if (!serverSsr || 'function' != typeof serverSsr.onSerializationFinished || serverSsr.isSerializationFinished?.()) return;
33
- await new Promise((resolve)=>{
34
- serverSsr.onSerializationFinished?.(resolve);
35
- });
36
- }
37
30
  function htmlEscapeAttr(value) {
38
31
  return value.replace(/&/g, '&').replace(/"/g, '"');
39
32
  }
@@ -83,20 +76,17 @@ __webpack_require__.d(__webpack_exports__, {
83
76
  attachServerSsrUtils: ()=>attachServerSsrUtils,
84
77
  collectRouterErrors: ()=>collectRouterErrors,
85
78
  createGetSsrHref: ()=>createGetSsrHref,
86
- routerManagedTagsToHtml: ()=>routerManagedTagsToHtml,
87
- waitForRouterSerialization: ()=>waitForRouterSerialization
79
+ routerManagedTagsToHtml: ()=>routerManagedTagsToHtml
88
80
  });
89
81
  exports.attachServerSsrUtils = __webpack_exports__.attachServerSsrUtils;
90
82
  exports.collectRouterErrors = __webpack_exports__.collectRouterErrors;
91
83
  exports.createGetSsrHref = __webpack_exports__.createGetSsrHref;
92
84
  exports.routerManagedTagsToHtml = __webpack_exports__.routerManagedTagsToHtml;
93
- exports.waitForRouterSerialization = __webpack_exports__.waitForRouterSerialization;
94
85
  for(var __rspack_i in __webpack_exports__)if (-1 === [
95
86
  "attachServerSsrUtils",
96
87
  "collectRouterErrors",
97
88
  "createGetSsrHref",
98
- "routerManagedTagsToHtml",
99
- "waitForRouterSerialization"
89
+ "routerManagedTagsToHtml"
100
90
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
101
91
  Object.defineProperty(exports, '__esModule', {
102
92
  value: true
@@ -56,6 +56,7 @@ function withGlobalLayout(Component, globalApp) {
56
56
  function toTanstackRouteObject(route, globalApp) {
57
57
  if ('nested' === route.type) return {
58
58
  modernLocalisedRoute: Reflect.get(route, 'modernLocalisedRoute'),
59
+ isRoot: Reflect.get(route, 'isRoot'),
59
60
  path: route.path,
60
61
  id: route.id,
61
62
  loader: route.loader,
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ describeRouteTree: ()=>describeRouteTree
32
+ });
33
+ const paths_js_namespaceObject = require("../runtime/routeTree/paths.js");
34
+ function describeRouteTree(routes) {
35
+ const root = routes.find((route)=>true === route.isRoot || '/' === route.path && true !== route.index);
36
+ const describe = (route, index)=>({
37
+ source: route,
38
+ location: 0 === (route.path ?? '').length && true !== route.index ? {
39
+ id: route.id || route.file || `pathless-${index}`
40
+ } : {
41
+ path: true === route.index ? '/' : (0, paths_js_namespaceObject.toTanstackPath)(route.path || '')
42
+ },
43
+ hasSplat: Boolean(route.path?.includes('*')),
44
+ children: (route.children ?? []).map(describe)
45
+ });
46
+ return {
47
+ root,
48
+ children: (void 0 !== root ? [
49
+ ...root.children ?? [],
50
+ ...routes.filter((route)=>route !== root)
51
+ ] : routes).map(describe)
52
+ };
53
+ }
54
+ exports.describeRouteTree = __webpack_exports__.describeRouteTree;
55
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
56
+ "describeRouteTree"
57
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
58
+ Object.defineProperty(exports, '__esModule', {
59
+ value: true
60
+ });