@bleedingdev/modern-js-runtime 3.9.0-ultramodern.3 → 3.9.0-ultramodern.5

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 (160) hide show
  1. package/dist/cjs/cli/code.js +3 -1
  2. package/dist/cjs/cli/ssr/index.js +2 -74
  3. package/dist/cjs/core/browser/hydrate.js +6 -1
  4. package/dist/cjs/core/context/index.js +4 -43
  5. package/dist/cjs/core/context/public.js +4 -7
  6. package/dist/cjs/core/context/runtime.js +17 -5
  7. package/dist/cjs/core/react/wrapper.js +22 -65
  8. package/dist/cjs/core/server/helmet.js +5 -4
  9. package/dist/cjs/core/server/requestResponse.js +4 -4
  10. package/dist/cjs/core/server/routerCleanup.js +2 -2
  11. package/dist/cjs/core/server/shared.js +171 -4
  12. package/dist/cjs/core/server/stream/afterTemplate.js +21 -16
  13. package/dist/cjs/core/server/stream/beforeTemplate.js +34 -25
  14. package/dist/cjs/core/server/stream/beforeTemplate.worker.js +28 -21
  15. package/dist/cjs/core/server/stream/createReadableStream.js +208 -123
  16. package/dist/cjs/core/server/stream/createReadableStream.worker.js +159 -90
  17. package/dist/cjs/core/server/stream/deferredScript.js +3 -3
  18. package/dist/cjs/core/server/stream/shared.js +2 -2
  19. package/dist/cjs/core/server/string/index.js +100 -64
  20. package/dist/cjs/core/server/string/loadable.js +34 -19
  21. package/dist/cjs/core/server/string/ssrData.js +5 -12
  22. package/dist/cjs/core/server/utils.js +1 -2
  23. package/dist/cjs/exports/head.js +7 -14
  24. package/dist/cjs/router/runtime/PrefetchLink.js +67 -123
  25. package/dist/cjs/router/runtime/hooks.js +13 -2
  26. package/dist/cjs/router/runtime/internal.js +7 -45
  27. package/dist/cjs/router/runtime/plugin.js +2 -8
  28. package/dist/cjs/router/runtime/plugin.node.js +2 -30
  29. package/dist/cjs/router/runtime/redirect.js +1 -1
  30. package/dist/esm/cli/code.mjs +3 -1
  31. package/dist/esm/cli/ssr/index.mjs +3 -72
  32. package/dist/esm/core/browser/hydrate.mjs +7 -2
  33. package/dist/esm/core/context/index.mjs +2 -5
  34. package/dist/esm/core/context/public.mjs +1 -5
  35. package/dist/esm/core/context/runtime.mjs +13 -4
  36. package/dist/esm/core/react/wrapper.mjs +21 -67
  37. package/dist/esm/core/server/helmet.mjs +5 -4
  38. package/dist/esm/core/server/requestResponse.mjs +3 -3
  39. package/dist/esm/core/server/routerCleanup.mjs +1 -1
  40. package/dist/esm/core/server/shared.mjs +153 -1
  41. package/dist/esm/core/server/stream/afterTemplate.mjs +23 -18
  42. package/dist/esm/core/server/stream/beforeTemplate.mjs +37 -28
  43. package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +31 -24
  44. package/dist/esm/core/server/stream/createReadableStream.mjs +207 -122
  45. package/dist/esm/core/server/stream/createReadableStream.worker.mjs +149 -90
  46. package/dist/esm/core/server/stream/deferredScript.mjs +3 -3
  47. package/dist/esm/core/server/stream/shared.mjs +2 -2
  48. package/dist/esm/core/server/string/index.mjs +104 -68
  49. package/dist/esm/core/server/string/loadable.mjs +34 -19
  50. package/dist/esm/core/server/string/ssrData.mjs +5 -12
  51. package/dist/esm/core/server/utils.mjs +1 -2
  52. package/dist/esm/exports/head.mjs +7 -14
  53. package/dist/esm/router/runtime/PrefetchLink.mjs +67 -123
  54. package/dist/esm/router/runtime/hooks.mjs +9 -1
  55. package/dist/esm/router/runtime/internal.mjs +2 -33
  56. package/dist/esm/router/runtime/plugin.mjs +1 -7
  57. package/dist/esm/router/runtime/plugin.node.mjs +1 -29
  58. package/dist/esm/router/runtime/redirect.mjs +1 -1
  59. package/dist/esm-node/cli/code.mjs +3 -1
  60. package/dist/esm-node/cli/ssr/index.mjs +3 -72
  61. package/dist/esm-node/core/browser/hydrate.mjs +7 -2
  62. package/dist/esm-node/core/context/index.mjs +2 -5
  63. package/dist/esm-node/core/context/public.mjs +1 -5
  64. package/dist/esm-node/core/context/runtime.mjs +13 -4
  65. package/dist/esm-node/core/react/wrapper.mjs +21 -67
  66. package/dist/esm-node/core/server/helmet.mjs +5 -4
  67. package/dist/esm-node/core/server/requestResponse.mjs +3 -3
  68. package/dist/esm-node/core/server/routerCleanup.mjs +1 -1
  69. package/dist/esm-node/core/server/shared.mjs +153 -1
  70. package/dist/esm-node/core/server/stream/afterTemplate.mjs +23 -18
  71. package/dist/esm-node/core/server/stream/beforeTemplate.mjs +37 -28
  72. package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +31 -24
  73. package/dist/esm-node/core/server/stream/createReadableStream.mjs +207 -122
  74. package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +149 -90
  75. package/dist/esm-node/core/server/stream/deferredScript.mjs +3 -3
  76. package/dist/esm-node/core/server/stream/shared.mjs +2 -2
  77. package/dist/esm-node/core/server/string/index.mjs +104 -68
  78. package/dist/esm-node/core/server/string/loadable.mjs +34 -19
  79. package/dist/esm-node/core/server/string/ssrData.mjs +5 -12
  80. package/dist/esm-node/core/server/utils.mjs +1 -2
  81. package/dist/esm-node/exports/head.mjs +7 -14
  82. package/dist/esm-node/router/runtime/PrefetchLink.mjs +67 -123
  83. package/dist/esm-node/router/runtime/hooks.mjs +9 -1
  84. package/dist/esm-node/router/runtime/internal.mjs +2 -33
  85. package/dist/esm-node/router/runtime/plugin.mjs +1 -7
  86. package/dist/esm-node/router/runtime/plugin.node.mjs +1 -29
  87. package/dist/esm-node/router/runtime/redirect.mjs +1 -1
  88. package/dist/types/cli/ssr/index.d.ts +0 -3
  89. package/dist/types/core/context/index.d.ts +4 -6
  90. package/dist/types/core/context/public.d.ts +1 -23
  91. package/dist/types/core/context/runtime.d.ts +26 -2
  92. package/dist/types/core/react/wrapper.d.ts +6 -0
  93. package/dist/types/core/server/helmet.d.ts +4 -5
  94. package/dist/types/core/server/shared.d.ts +23 -0
  95. package/dist/types/core/server/stream/afterTemplate.d.ts +2 -1
  96. package/dist/types/core/server/stream/beforeTemplate.d.ts +4 -1
  97. package/dist/types/core/server/stream/beforeTemplate.worker.d.ts +4 -1
  98. package/dist/types/core/server/stream/shared.d.ts +1 -1
  99. package/dist/types/core/server/string/loadable.d.ts +6 -3
  100. package/dist/types/core/server/string/ssrData.d.ts +2 -1
  101. package/dist/types/core/server/string/types.d.ts +1 -5
  102. package/dist/types/exports/head.d.ts +2 -2
  103. package/dist/types/router/runtime/PrefetchLink.d.ts +27 -2
  104. package/dist/types/router/runtime/hooks.d.ts +19 -2
  105. package/dist/types/router/runtime/internal.d.ts +4 -21
  106. package/dist/types/router/runtime/types.d.ts +2 -43
  107. package/package.json +9 -38
  108. package/rstest.config.mts +32 -2
  109. package/dist/cjs/boundary-debugger/index.js +0 -317
  110. package/dist/cjs/core/context/extensions.js +0 -74
  111. package/dist/cjs/core/context/helmetContext.js +0 -54
  112. package/dist/cjs/core/server/federatedCss.js +0 -58
  113. package/dist/cjs/core/server/scriptOrder.js +0 -140
  114. package/dist/cjs/module-federation/consume-surface.js +0 -199
  115. package/dist/cjs/module-federation/distributed-ssr.js +0 -135
  116. package/dist/cjs/module-federation/index.js +0 -316
  117. package/dist/cjs/module-federation/last-known-good.js +0 -157
  118. package/dist/cjs/module-federation/manifest-recovery-runtime-plugin.js +0 -129
  119. package/dist/cjs/module-federation/surface-resolution-types.js +0 -61
  120. package/dist/cjs/router/runtime/lifecycle.js +0 -167
  121. package/dist/cjs/router/runtime/provider.js +0 -153
  122. package/dist/esm/boundary-debugger/index.mjs +0 -277
  123. package/dist/esm/core/context/extensions.mjs +0 -33
  124. package/dist/esm/core/context/helmetContext.mjs +0 -13
  125. package/dist/esm/core/server/federatedCss.mjs +0 -20
  126. package/dist/esm/core/server/scriptOrder.mjs +0 -90
  127. package/dist/esm/module-federation/consume-surface.mjs +0 -158
  128. package/dist/esm/module-federation/distributed-ssr.mjs +0 -82
  129. package/dist/esm/module-federation/index.mjs +0 -115
  130. package/dist/esm/module-federation/last-known-good.mjs +0 -113
  131. package/dist/esm/module-federation/manifest-recovery-runtime-plugin.mjs +0 -89
  132. package/dist/esm/module-federation/surface-resolution-types.mjs +0 -8
  133. package/dist/esm/router/runtime/lifecycle.mjs +0 -105
  134. package/dist/esm/router/runtime/provider.mjs +0 -100
  135. package/dist/esm-node/boundary-debugger/index.mjs +0 -278
  136. package/dist/esm-node/core/context/extensions.mjs +0 -34
  137. package/dist/esm-node/core/context/helmetContext.mjs +0 -14
  138. package/dist/esm-node/core/server/federatedCss.mjs +0 -21
  139. package/dist/esm-node/core/server/scriptOrder.mjs +0 -91
  140. package/dist/esm-node/module-federation/consume-surface.mjs +0 -159
  141. package/dist/esm-node/module-federation/distributed-ssr.mjs +0 -83
  142. package/dist/esm-node/module-federation/index.mjs +0 -116
  143. package/dist/esm-node/module-federation/last-known-good.mjs +0 -114
  144. package/dist/esm-node/module-federation/manifest-recovery-runtime-plugin.mjs +0 -90
  145. package/dist/esm-node/module-federation/surface-resolution-types.mjs +0 -9
  146. package/dist/esm-node/router/runtime/lifecycle.mjs +0 -106
  147. package/dist/esm-node/router/runtime/provider.mjs +0 -101
  148. package/dist/types/boundary-debugger/index.d.ts +0 -28
  149. package/dist/types/core/context/extensions.d.ts +0 -35
  150. package/dist/types/core/context/helmetContext.d.ts +0 -10
  151. package/dist/types/core/server/federatedCss.d.ts +0 -5
  152. package/dist/types/core/server/scriptOrder.d.ts +0 -25
  153. package/dist/types/module-federation/consume-surface.d.ts +0 -104
  154. package/dist/types/module-federation/distributed-ssr.d.ts +0 -61
  155. package/dist/types/module-federation/index.d.ts +0 -71
  156. package/dist/types/module-federation/last-known-good.d.ts +0 -52
  157. package/dist/types/module-federation/manifest-recovery-runtime-plugin.d.ts +0 -25
  158. package/dist/types/module-federation/surface-resolution-types.d.ts +0 -23
  159. package/dist/types/router/runtime/lifecycle.d.ts +0 -27
  160. package/dist/types/router/runtime/provider.d.ts +0 -78
@@ -70,7 +70,6 @@ __webpack_require__.d(__webpack_exports__, {
70
70
  NavLink: ()=>NavLink
71
71
  });
72
72
  const jsx_runtime_namespaceObject = require("react/jsx-runtime");
73
- const runtime_extensions_namespaceObject = require("@modern-js/runtime-extensions");
74
73
  const router_namespaceObject = require("@modern-js/runtime-utils/router");
75
74
  const external_react_namespaceObject = require("react");
76
75
  var external_react_default = /*#__PURE__*/ __webpack_require__.n(external_react_namespaceObject);
@@ -90,62 +89,6 @@ function composeEventHandlers(theirHandler, ourHandler) {
90
89
  };
91
90
  }
92
91
  const ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
93
- const DEFAULT_PREFETCH_BEHAVIOR = 'render';
94
- const INTENT_DELAY = 100;
95
- const VIEWPORT_ROOT_MARGIN = '200px';
96
- const MAX_CONCURRENT_WARMUPS = 4;
97
- const WARMUP_TTL = 30000;
98
- const SLOW_EFFECTIVE_TYPES = new Set([
99
- 'slow-2g',
100
- '2g'
101
- ]);
102
- const warmupCache = new Map();
103
- const warmupQueue = [];
104
- let activeWarmups = 0;
105
- const getWarmupTimestamp = ()=>performance.now();
106
- const getConnection = ()=>{
107
- const nav = globalThis.navigator;
108
- return nav?.connection || nav?.mozConnection || nav?.webkitConnection;
109
- };
110
- const shouldWarmupOnCurrentNetwork = ()=>{
111
- const connection = getConnection();
112
- if (connection?.saveData) return false;
113
- if ('string' == typeof connection?.effectiveType && SLOW_EFFECTIVE_TYPES.has(connection.effectiveType)) return false;
114
- return true;
115
- };
116
- const pruneWarmupCache = (now = getWarmupTimestamp())=>{
117
- for (const [key, timestamp] of warmupCache)if (now - timestamp > WARMUP_TTL) warmupCache.delete(key);
118
- };
119
- const runNextWarmup = ()=>{
120
- while(activeWarmups < MAX_CONCURRENT_WARMUPS && warmupQueue.length > 0){
121
- const task = warmupQueue.shift();
122
- if (task.cancelled) continue;
123
- activeWarmups += 1;
124
- task.run().catch(()=>{
125
- warmupCache.delete(task.key);
126
- }).finally(()=>{
127
- activeWarmups -= 1;
128
- runNextWarmup();
129
- });
130
- }
131
- };
132
- const scheduleWarmup = (key, run)=>{
133
- if (!shouldWarmupOnCurrentNetwork()) return ()=>{};
134
- pruneWarmupCache();
135
- if (warmupCache.has(key)) return ()=>{};
136
- warmupCache.set(key, getWarmupTimestamp());
137
- const task = {
138
- key,
139
- run,
140
- cancelled: false
141
- };
142
- warmupQueue.push(task);
143
- runNextWarmup();
144
- return ()=>{
145
- task.cancelled = true;
146
- if (warmupQueue.includes(task)) warmupCache.delete(task.key);
147
- };
148
- };
149
92
  const setRef = (ref, value)=>{
150
93
  if (!ref) return;
151
94
  if ('function' == typeof ref) return void ref(value);
@@ -153,70 +96,65 @@ const setRef = (ref, value)=>{
153
96
  ref.current = value;
154
97
  } catch {}
155
98
  };
156
- const isDataWarmupEnabled = (route)=>{
157
- const handle = route.handle;
158
- return handle?.navigationWarmup?.data !== false;
159
- };
160
- function usePrefetchBehavior(prefetch, preload, theirElementProps) {
161
- const [maybeWarmup, setMaybeWarmup] = external_react_default().useState(false);
162
- const [shouldPrefetch, setShouldPrefetch] = external_react_default().useState(false);
163
- const [shouldPreload, setShouldPreload] = external_react_default().useState(false);
164
- const [viewportElement, setViewportElement] = external_react_default().useState(null);
99
+ function usePrefetchBehavior(prefetch, preload, theirElementProps, policy) {
100
+ const [maybePrefetch, setMaybePrefetch] = external_react_default().useState(false);
101
+ const [state, setState] = external_react_default().useState({
102
+ code: false,
103
+ data: false
104
+ });
105
+ const [element, setElement] = external_react_default().useState(null);
106
+ const observerRef = external_react_default().useRef(void 0);
165
107
  const { onFocus, onBlur, onMouseEnter, onMouseLeave, onTouchStart } = theirElementProps;
166
108
  external_react_default().useEffect(()=>{
167
- if ('render' === prefetch) setShouldPrefetch(true);
168
- if ('render' === preload) setShouldPreload(true);
109
+ if (!policy) return void setState({
110
+ code: 'render' === prefetch,
111
+ data: 'render' === prefetch
112
+ });
113
+ const observer = policy.observe({
114
+ element,
115
+ prefetch,
116
+ preload,
117
+ notify: (next)=>setState((previous)=>previous.code === next.code && previous.data === next.data ? previous : next)
118
+ });
119
+ observerRef.current = observer;
120
+ return ()=>{
121
+ observerRef.current = void 0;
122
+ observer.dispose();
123
+ };
169
124
  }, [
125
+ policy,
170
126
  prefetch,
171
- preload
127
+ preload,
128
+ element
129
+ ]);
130
+ external_react_default().useEffect(()=>{
131
+ if (policy || !maybePrefetch) return;
132
+ const timer = setTimeout(()=>setState({
133
+ code: true,
134
+ data: true
135
+ }), 100);
136
+ return ()=>clearTimeout(timer);
137
+ }, [
138
+ policy,
139
+ maybePrefetch
172
140
  ]);
173
141
  const setIntent = ()=>{
174
- if ('intent' === prefetch || 'intent' === preload) setMaybeWarmup(true);
142
+ if (policy) observerRef.current?.onIntent();
143
+ else if ('intent' === prefetch) setMaybePrefetch(true);
175
144
  };
176
145
  const cancelIntent = ()=>{
177
- if ('intent' === prefetch || 'intent' === preload) {
178
- setMaybeWarmup(false);
179
- setShouldPrefetch(false);
180
- setShouldPreload(false);
146
+ if (policy) observerRef.current?.onCancel();
147
+ else if ('intent' === prefetch) {
148
+ setMaybePrefetch(false);
149
+ setState({
150
+ code: false,
151
+ data: false
152
+ });
181
153
  }
182
154
  };
183
- external_react_default().useEffect(()=>{
184
- if (maybeWarmup) {
185
- const id = setTimeout(()=>{
186
- if ('intent' === prefetch) setShouldPrefetch(true);
187
- if ('intent' === preload) setShouldPreload(true);
188
- }, INTENT_DELAY);
189
- return ()=>{
190
- clearTimeout(id);
191
- };
192
- }
193
- }, [
194
- maybeWarmup,
195
- prefetch,
196
- preload
197
- ]);
198
- external_react_default().useEffect(()=>{
199
- if (!viewportElement || 'viewport' !== prefetch && 'viewport' !== preload || "u" < typeof IntersectionObserver) return;
200
- const observer = new IntersectionObserver((entries)=>{
201
- if (!entries.some((entry)=>entry.isIntersecting)) return;
202
- if ('viewport' === prefetch) setShouldPrefetch(true);
203
- if ('viewport' === preload) setShouldPreload(true);
204
- observer.disconnect();
205
- }, {
206
- rootMargin: VIEWPORT_ROOT_MARGIN
207
- });
208
- observer.observe(viewportElement);
209
- return ()=>{
210
- observer.disconnect();
211
- };
212
- }, [
213
- prefetch,
214
- preload,
215
- viewportElement
216
- ]);
217
155
  return [
218
- shouldPrefetch,
219
- shouldPreload,
156
+ state.data,
157
+ state.code,
220
158
  {
221
159
  onFocus: composeEventHandlers(onFocus, setIntent),
222
160
  onBlur: composeEventHandlers(onBlur, cancelIntent),
@@ -224,7 +162,7 @@ function usePrefetchBehavior(prefetch, preload, theirElementProps) {
224
162
  onMouseLeave: composeEventHandlers(onMouseLeave, cancelIntent),
225
163
  onTouchStart: composeEventHandlers(onTouchStart, setIntent)
226
164
  },
227
- setViewportElement
165
+ setElement
228
166
  ];
229
167
  }
230
168
  async function loadRouteModule(route, routeAssets, chunkLoader) {
@@ -265,7 +203,8 @@ const PrefetchPageLinks = ({ path, includeData })=>{
265
203
  const context = (0, external_react_namespaceObject.useContext)(index_js_namespaceObject.InternalRuntimeContext);
266
204
  const { routeManifest, routes } = context;
267
205
  const { routeAssets } = routeManifest || {};
268
- const allowNetworkWarmup = shouldWarmupOnCurrentNetwork();
206
+ const policy = context.linkPrefetchPolicy;
207
+ const allowNetworkWarmup = policy?.canWarmup() ?? true;
269
208
  const matches = (0, external_react_namespaceObject.useMemo)(()=>Array.isArray(routes) ? (0, router_namespaceObject.matchRoutes)(routes, pathname) : [], [
270
209
  pathname,
271
210
  routes
@@ -285,7 +224,16 @@ const PrefetchPageLinks = ({ path, includeData })=>{
285
224
  const routeAsset = routeId ? routeAssets[routeId] : void 0;
286
225
  const chunkIds = routeAsset?.chunkIds;
287
226
  if (!routeId || !Array.isArray(chunkIds) || 0 === chunkIds.length) return ()=>{};
288
- return scheduleWarmup((0, runtime_extensions_namespaceObject.getNavigationWarmupCacheKey)(context, chunkLoader, getWebpackPublicPath(), `route-module:${routeId}:${chunkIds.join(',')}`), ()=>loadRouteModule(match.route, routeAssets, chunkLoader));
227
+ const run = ()=>loadRouteModule(match.route, routeAssets, chunkLoader);
228
+ if (policy) return policy.schedule({
229
+ runtimeContext: context,
230
+ chunkLoader,
231
+ publicPath: getWebpackPublicPath(),
232
+ key: `route-module:${routeId}:${chunkIds.join(',')}`,
233
+ run
234
+ });
235
+ run().catch(()=>{});
236
+ return ()=>{};
289
237
  });
290
238
  return ()=>{
291
239
  cancellations.forEach((cancel)=>cancel());
@@ -294,6 +242,7 @@ const PrefetchPageLinks = ({ path, includeData })=>{
294
242
  allowNetworkWarmup,
295
243
  chunkLoader,
296
244
  context,
245
+ policy,
297
246
  routeAssetGeneration
298
247
  ]);
299
248
  if (!allowNetworkWarmup || !includeData || !window._SSR_DATA) return null;
@@ -305,10 +254,11 @@ const PrefetchPageLinks = ({ path, includeData })=>{
305
254
  };
306
255
  const PrefetchDataLinks = ({ matches, path, routeManifest })=>{
307
256
  const { pathname, search, hash } = path;
257
+ const policy = (0, external_react_namespaceObject.useContext)(index_js_namespaceObject.InternalRuntimeContext).linkPrefetchPolicy;
308
258
  const currentMatches = (0, router_namespaceObject.useMatches)();
309
259
  const basename = (0, router_namespaceObject.useHref)('/');
310
260
  const dataHrefs = (0, external_react_namespaceObject.useMemo)(()=>matches?.filter((match, index)=>{
311
- if (!isDataWarmupEnabled(match.route) || !match.route.loader || 'function' != typeof match.route.loader || 0 === match.route.loader.length) return false;
261
+ if (policy?.allowData(match.route) === false || !match.route.loader || 'function' != typeof match.route.loader || 0 === match.route.loader.length) return false;
312
262
  if (match.route.shouldRevalidate) {
313
263
  const currentUrl = new URL(location.pathname + location.search + location.hash, window.origin);
314
264
  const nextUrl = new URL(pathname + search + hash, window.origin);
@@ -335,16 +285,10 @@ const PrefetchDataLinks = ({ matches, path, routeManifest })=>{
335
285
  children: dataHrefs
336
286
  });
337
287
  };
338
- const normalizePreloadBehavior = (preload, prefetch)=>{
339
- if (false === preload || 'none' === preload) return 'none';
340
- if (void 0 !== preload) return preload;
341
- if ('none' === prefetch) return 'none';
342
- return prefetch;
343
- };
344
- const createPrefetchLink = (Link)=>/*#__PURE__*/ (external_react_default()).forwardRef(({ to, prefetch = DEFAULT_PREFETCH_BEHAVIOR, preload, ...props }, forwardedRef)=>{
288
+ const createPrefetchLink = (Link)=>/*#__PURE__*/ (external_react_default()).forwardRef(({ to, prefetch, preload, ...props }, forwardedRef)=>{
345
289
  const isAbsolute = 'string' == typeof to && ABSOLUTE_URL_REGEX.test(to);
346
- const resolvedPreload = normalizePreloadBehavior(preload, prefetch);
347
- const [shouldPrefetch, shouldPreload, prefetchHandlers, setViewportElement] = usePrefetchBehavior(prefetch, resolvedPreload, props);
290
+ const policy = (0, external_react_namespaceObject.useContext)(index_js_namespaceObject.InternalRuntimeContext).linkPrefetchPolicy;
291
+ const [shouldPrefetch, shouldPreload, prefetchHandlers, setViewportElement] = usePrefetchBehavior(prefetch, preload, props, policy);
348
292
  const setAnchorRef = external_react_default().useCallback((element)=>{
349
293
  setViewportElement(element);
350
294
  setRef(forwardedRef, element);
@@ -33,7 +33,8 @@ __webpack_require__.d(__webpack_exports__, {
33
33
  onAfterHydrateRouter: ()=>onAfterHydrateRouter,
34
34
  onBeforeCreateRouter: ()=>onBeforeCreateRouter,
35
35
  onBeforeCreateRoutes: ()=>onBeforeCreateRoutes,
36
- onBeforeHydrateRouter: ()=>onBeforeHydrateRouter
36
+ onBeforeHydrateRouter: ()=>onBeforeHydrateRouter,
37
+ routerProviderRegistryHooks: ()=>routerProviderRegistryHooks
37
38
  });
38
39
  const plugin_namespaceObject = require("@modern-js/plugin");
39
40
  const createRouterSyncHook = ()=>(0, plugin_namespaceObject.createSyncHook)();
@@ -43,19 +44,29 @@ const onBeforeCreateRouter = createRouterSyncHook();
43
44
  const onAfterCreateRouter = createRouterSyncHook();
44
45
  const onBeforeHydrateRouter = createRouterSyncHook();
45
46
  const onAfterHydrateRouter = createRouterSyncHook();
47
+ const routerProviderRegistryHooks = {
48
+ modifyRoutes,
49
+ onBeforeCreateRoutes,
50
+ onBeforeCreateRouter,
51
+ onAfterCreateRouter,
52
+ onBeforeHydrateRouter,
53
+ onAfterHydrateRouter
54
+ };
46
55
  exports.modifyRoutes = __webpack_exports__.modifyRoutes;
47
56
  exports.onAfterCreateRouter = __webpack_exports__.onAfterCreateRouter;
48
57
  exports.onAfterHydrateRouter = __webpack_exports__.onAfterHydrateRouter;
49
58
  exports.onBeforeCreateRouter = __webpack_exports__.onBeforeCreateRouter;
50
59
  exports.onBeforeCreateRoutes = __webpack_exports__.onBeforeCreateRoutes;
51
60
  exports.onBeforeHydrateRouter = __webpack_exports__.onBeforeHydrateRouter;
61
+ exports.routerProviderRegistryHooks = __webpack_exports__.routerProviderRegistryHooks;
52
62
  for(var __rspack_i in __webpack_exports__)if (-1 === [
53
63
  "modifyRoutes",
54
64
  "onAfterCreateRouter",
55
65
  "onAfterHydrateRouter",
56
66
  "onBeforeCreateRouter",
57
67
  "onBeforeCreateRoutes",
58
- "onBeforeHydrateRouter"
68
+ "onBeforeHydrateRouter",
69
+ "routerProviderRegistryHooks"
59
70
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
60
71
  Object.defineProperty(exports, '__esModule', {
61
72
  value: true
@@ -28,64 +28,26 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
- createRouterPlugin: ()=>createRouterPlugin,
32
- createRouterProviderRealm: ()=>external_provider_js_namespaceObject.createRouterProviderRealm,
33
- default: ()=>internal,
31
+ default: ()=>external_plugin_js_namespaceObject.routerPlugin,
34
32
  modifyRoutes: ()=>external_plugin_js_namespaceObject.modifyRoutes,
35
- registerRouterProvider: ()=>external_provider_js_namespaceObject.registerRouterProvider,
36
33
  renderRoutes: ()=>external_utils_js_namespaceObject.renderRoutes,
37
- resolveRouterProvider: ()=>external_provider_js_namespaceObject.resolveRouterProvider,
38
- routerPlugin: ()=>routerPlugin
34
+ routerPlugin: ()=>external_plugin_js_namespaceObject.routerPlugin,
35
+ routerProviderRegistryHooks: ()=>external_hooks_js_namespaceObject.routerProviderRegistryHooks
39
36
  });
40
- const merge_namespaceObject = require("@modern-js/runtime-utils/merge");
37
+ const external_hooks_js_namespaceObject = require("./hooks.js");
41
38
  const external_plugin_js_namespaceObject = require("./plugin.js");
42
- const external_provider_js_namespaceObject = require("./provider.js");
43
39
  const external_utils_js_namespaceObject = require("./utils.js");
44
- (0, external_provider_js_namespaceObject.registerRouterProvider)('react-router', external_plugin_js_namespaceObject.routerPlugin, {
45
- isDefault: true
46
- });
47
- const createRouterPlugin = (localProviders = [])=>{
48
- const providerRealm = (0, external_provider_js_namespaceObject.createRouterProviderRealm)([
49
- {
50
- name: 'react-router',
51
- factory: external_plugin_js_namespaceObject.routerPlugin,
52
- isDefault: true
53
- },
54
- ...localProviders
55
- ]);
56
- return (userConfig = {})=>({
57
- name: '@modern-js/plugin-router',
58
- registryHooks: external_provider_js_namespaceObject.routerProviderRegistryHooks,
59
- setup: (api)=>{
60
- const mergedConfig = (0, merge_namespaceObject.merge)(api.getRuntimeConfig().router || {}, userConfig);
61
- const pluginFactory = (0, external_provider_js_namespaceObject.resolveRouterProvider)(mergedConfig.framework, {
62
- realm: providerRealm
63
- });
64
- const providerPlugin = pluginFactory(userConfig);
65
- (0, external_provider_js_namespaceObject.reportUnsupportedProviderRegistryHooks)(providerPlugin);
66
- providerPlugin.setup?.(api);
67
- }
68
- });
69
- };
70
- const routerPlugin = createRouterPlugin();
71
- const internal = routerPlugin;
72
- exports.createRouterPlugin = __webpack_exports__.createRouterPlugin;
73
- exports.createRouterProviderRealm = __webpack_exports__.createRouterProviderRealm;
74
40
  exports["default"] = __webpack_exports__["default"];
75
41
  exports.modifyRoutes = __webpack_exports__.modifyRoutes;
76
- exports.registerRouterProvider = __webpack_exports__.registerRouterProvider;
77
42
  exports.renderRoutes = __webpack_exports__.renderRoutes;
78
- exports.resolveRouterProvider = __webpack_exports__.resolveRouterProvider;
79
43
  exports.routerPlugin = __webpack_exports__.routerPlugin;
44
+ exports.routerProviderRegistryHooks = __webpack_exports__.routerProviderRegistryHooks;
80
45
  for(var __rspack_i in __webpack_exports__)if (-1 === [
81
- "createRouterPlugin",
82
- "createRouterProviderRealm",
83
46
  "default",
84
47
  "modifyRoutes",
85
- "registerRouterProvider",
86
48
  "renderRoutes",
87
- "resolveRouterProvider",
88
- "routerPlugin"
49
+ "routerPlugin",
50
+ "routerProviderRegistryHooks"
89
51
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
90
52
  Object.defineProperty(exports, '__esModule', {
91
53
  value: true
@@ -39,9 +39,8 @@ const router_namespaceObject = require("@modern-js/runtime-utils/router");
39
39
  const url_namespaceObject = require("@modern-js/runtime-utils/url");
40
40
  const external_react_namespaceObject = require("react");
41
41
  const index_js_namespaceObject = require("../../core/context/index.js");
42
- const external_lifecycle_js_namespaceObject = require("./lifecycle.js");
42
+ const external_hooks_js_namespaceObject = require("./hooks.js");
43
43
  const external_PrefetchLink_js_namespaceObject = require("./PrefetchLink.js");
44
- const external_provider_js_namespaceObject = require("./provider.js");
45
44
  const external_rsc_router_js_namespaceObject = require("./rsc-router.js");
46
45
  const external_utils_js_namespaceObject = require("./utils.js");
47
46
  let finalRouteConfig = {
@@ -57,7 +56,7 @@ function modifyRoutes(modifyFunction) {
57
56
  }
58
57
  const routerPlugin = (userConfig = {})=>({
59
58
  name: '@modern-js/plugin-router',
60
- registryHooks: external_provider_js_namespaceObject.routerProviderRegistryHooks,
59
+ registryHooks: external_hooks_js_namespaceObject.routerProviderRegistryHooks,
61
60
  setup: (api)=>{
62
61
  const routesContainer = {
63
62
  current: []
@@ -203,11 +202,6 @@ function useRouterCreation(props, options) {
203
202
  basename: _basename,
204
203
  hydrationData
205
204
  });
206
- (0, external_lifecycle_js_namespaceObject.applyRouterRuntimeState)(runtimeContext, {
207
- framework: 'react-router',
208
- basename: _basename,
209
- instance: router
210
- });
211
205
  hooks.onAfterCreateRouter.call({
212
206
  ...routerLifecycleContext,
213
207
  router,
@@ -51,9 +51,8 @@ const index_js_namespaceObject = require("../../core/context/index.js");
51
51
  const index_server_js_namespaceObject = require("../../core/context/serverPayload/index.server.js");
52
52
  const external_DeferredDataScripts_node_js_namespaceObject = require("./DeferredDataScripts.node.js");
53
53
  var external_DeferredDataScripts_node_js_default = /*#__PURE__*/ __webpack_require__.n(external_DeferredDataScripts_node_js_namespaceObject);
54
- const external_lifecycle_js_namespaceObject = require("./lifecycle.js");
54
+ const external_hooks_js_namespaceObject = require("./hooks.js");
55
55
  const external_PrefetchLink_js_namespaceObject = require("./PrefetchLink.js");
56
- const external_provider_js_namespaceObject = require("./provider.js");
57
56
  const external_rsc_router_js_namespaceObject = require("./rsc-router.js");
58
57
  const external_utils_js_namespaceObject = require("./utils.js");
59
58
  function createRemixRequest(request) {
@@ -66,27 +65,9 @@ function createRemixRequest(request) {
66
65
  signal: controller.signal
67
66
  });
68
67
  }
69
- function createReactRouterServerSnapshot(routerContext, basename) {
70
- return (0, external_lifecycle_js_namespaceObject.createRouterServerSnapshot)({
71
- framework: 'react-router',
72
- basename,
73
- statusCode: routerContext.statusCode,
74
- errors: routerContext.errors,
75
- routerData: {
76
- loaderData: routerContext.loaderData,
77
- errors: routerContext.errors
78
- },
79
- matches: routerContext.matches.map((match)=>{
80
- const routeId = match.route.id;
81
- return 'string' == typeof routeId ? {
82
- routeId
83
- } : void 0;
84
- }).filter((match)=>void 0 !== match)
85
- });
86
- }
87
68
  const routerPlugin = (userConfig = {})=>({
88
69
  name: '@modern-js/plugin-router',
89
- registryHooks: external_provider_js_namespaceObject.routerProviderRegistryHooks,
70
+ registryHooks: external_hooks_js_namespaceObject.routerProviderRegistryHooks,
90
71
  setup: (api)=>{
91
72
  let finalRouteConfig = {};
92
73
  api.onBeforeRender(async (context, interrupt)=>{
@@ -150,18 +131,9 @@ const routerPlugin = (userConfig = {})=>({
150
131
  throw errors[0];
151
132
  }
152
133
  context.routerContext = routerContext;
153
- const routerServerSnapshot = createReactRouterServerSnapshot(routerContext, _basename);
154
- (0, external_lifecycle_js_namespaceObject.applyRouterRuntimeState)(context, {
155
- framework: 'react-router',
156
- basename: _basename,
157
- instance: routerContext,
158
- matchedRouteIds: routerServerSnapshot.matchedRouteIds,
159
- serverSnapshot: routerServerSnapshot
160
- });
161
134
  hooks.onAfterCreateRouter.call({
162
135
  ...routerLifecycleContext,
163
136
  router: routerContext,
164
- serverSnapshot: routerServerSnapshot,
165
137
  runtimeContext: context
166
138
  });
167
139
  let payload;
@@ -30,7 +30,7 @@ __webpack_require__.r(__webpack_exports__);
30
30
  const handleRSCRedirect = (headers, basename, status)=>{
31
31
  const newHeaders = new Headers(headers);
32
32
  let redirectUrl = headers.get('Location');
33
- if (!redirectUrl || ![
33
+ if (null === redirectUrl || '' === redirectUrl || ![
34
34
  301,
35
35
  302,
36
36
  303,
@@ -73,7 +73,9 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
73
73
  const bootstrapFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_BOOTSTRAP_FILE_NAME}`);
74
74
  await fs.outputFile(bootstrapFile, `import(/* webpackChunkName: "async-${entryName}" */ './${INDEX_FILE_NAME}');`, 'utf8');
75
75
  const bootstrapServerFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_SERVER_BOOTSTRAP_FILE_NAME}`);
76
- if (ssrMode) await fs.outputFile(bootstrapServerFile, `export const requestHandler = import('./${SERVER_ENTRY_POINT_FILE_NAME}').then((m) => m.requestHandler)`, 'utf8');
76
+ if (ssrMode) await fs.outputFile(bootstrapServerFile, `export const requestHandler = import('./${SERVER_ENTRY_POINT_FILE_NAME}').then((m) => m.requestHandler);
77
+ // The renderer awaits this promise later; retain its rejection without an early unhandled rejection.
78
+ requestHandler.catch(() => {});`, 'utf8');
77
79
  }
78
80
  if (ssrMode) {
79
81
  const indexServerCode = __rspack_external__template_server_mjs_f98cfe58.serverIndex({
@@ -2,51 +2,6 @@ import { LOADABLE_STATS_FILE, isUseSSRBundle } from "@modern-js/utils";
2
2
  import path from "path";
3
3
  import loadable_bundler_plugin from "./loadable-bundler-plugin.mjs";
4
4
  import { resolveSSRMode } from "./mode.mjs";
5
- const getRspackPlugins = (rspackConfig)=>{
6
- if (!rspackConfig) return [];
7
- const rspackEntries = Array.isArray(rspackConfig) ? rspackConfig : [
8
- rspackConfig
9
- ];
10
- const plugins = [];
11
- for (const entry of rspackEntries){
12
- if (!entry || 'function' == typeof entry || 'object' != typeof entry) continue;
13
- const maybePlugins = entry.plugins;
14
- if (Array.isArray(maybePlugins)) {
15
- for (const plugin of maybePlugins)if (plugin) plugins.push(plugin);
16
- }
17
- }
18
- return plugins;
19
- };
20
- const getRspackPluginName = (plugin)=>{
21
- if ('string' == typeof plugin) return plugin;
22
- if ('function' == typeof plugin) return plugin.name;
23
- if (Array.isArray(plugin)) {
24
- const [first] = plugin;
25
- if (!first) return;
26
- if ('string' == typeof first) return first;
27
- if ('function' == typeof first) return first.name;
28
- if ('object' == typeof first) return first.name || first.constructor?.name;
29
- return;
30
- }
31
- return plugin.name || plugin.constructor?.name;
32
- };
33
- const hasServerRenderingConfig = (userConfig)=>{
34
- const { output, server } = userConfig;
35
- if (output?.ssg) return true;
36
- if (output?.ssgByEntries && Object.keys(output.ssgByEntries).length > 0) return true;
37
- if (server?.ssr) return true;
38
- if (server?.ssrByEntries && Object.keys(server.ssrByEntries).length > 0) return true;
39
- return false;
40
- };
41
- const isModuleFederationAppSSREnabledInConfig = (ssr)=>{
42
- if (!ssr || 'object' != typeof ssr) return false;
43
- return true === ssr.moduleFederationAppSSR;
44
- };
45
- const isModuleFederationAppSSREnabled = (userConfig)=>{
46
- if (isModuleFederationAppSSREnabledInConfig(userConfig.server?.ssr)) return true;
47
- if (userConfig.server?.ssrByEntries && 'object' == typeof userConfig.server.ssrByEntries) return Object.values(userConfig.server.ssrByEntries).some(isModuleFederationAppSSREnabledInConfig);
48
- return false;
49
- };
50
5
  const checkUseStringSSR = (config, appDirectory, entrypoints)=>{
51
6
  if (entrypoints && entrypoints.length > 0) {
52
7
  for (const entrypoint of entrypoints){
@@ -62,41 +17,19 @@ const checkUseStringSSR = (config, appDirectory, entrypoints)=>{
62
17
  }
63
18
  return true;
64
19
  };
65
- const isModuleFederationRspackPlugin = (plugin)=>{
66
- const candidate = getRspackPluginName(plugin);
67
- return 'string' == typeof candidate && /modulefederation/i.test(candidate);
68
- };
69
- const hasModuleFederationMarker = (config)=>{
70
- if ('true' === process.env.MF_SSR_PRJ) return true;
71
- const define = config.source?.define || {};
72
- if ('REMOTE_IP_STRATEGY' in define || 'FEDERATION_IPV4' in define) return true;
73
- const plugins = getRspackPlugins(config.tools?.rspack);
74
- return plugins.some(isModuleFederationRspackPlugin);
75
- };
76
20
  const isNodeEnvironmentTarget = (target)=>'string' == typeof target && ('node' === target || 'async-node' === target || target.startsWith('node'));
77
- const shouldUseModuleFederationNodeOutput = (config)=>isNodeEnvironmentTarget(config.output?.target) && hasModuleFederationMarker(config);
78
21
  const ssrBuilderPlugin = (modernAPI, outputModule, exportLoadablePath)=>({
79
22
  name: '@modern-js/builder-plugin-ssr',
80
23
  setup (api) {
81
24
  api.modifyEnvironmentConfig((config, { name, mergeEnvironmentConfig })=>{
82
25
  const isServerEnvironment = isNodeEnvironmentTarget(config.output.target) || 'workerSSR' === name;
83
26
  const userConfig = modernAPI.getNormalizedConfig();
84
- const hasServerRendering = hasServerRenderingConfig(userConfig);
85
- const hasModuleFederationRuntimeMarker = hasServerRendering && shouldUseModuleFederationNodeOutput(config);
86
- const hasExplicitMfSsrFlag = isModuleFederationAppSSREnabled(userConfig);
87
- const requireExplicitMfSsrFlag = 'true' === process.env.MODERN_MF_APP_SSR_REQUIRE_EXPLICIT;
88
- if (hasServerRendering && hasModuleFederationRuntimeMarker && !hasExplicitMfSsrFlag) {
89
- const warningMessage = '[modernjs][mf-ssr] Module Federation SSR was auto-detected from runtime markers. Set server.ssr.moduleFederationAppSSR=true explicitly in host and remotes to avoid heuristic drift.';
90
- if (requireExplicitMfSsrFlag) throw new Error(`${warningMessage} (enforced by MODERN_MF_APP_SSR_REQUIRE_EXPLICIT=true)`);
91
- console.warn(warningMessage);
92
- }
93
- const isModuleFederationAppSSR = hasServerRendering && hasExplicitMfSsrFlag;
94
27
  const ssrEnv = userConfig.deploy?.worker?.ssr || userConfig.server?.rsc ? 'edge' : 'node';
95
28
  const appContext = modernAPI.getAppContext();
96
29
  const { appDirectory, entrypoints } = appContext;
97
30
  const useLoadablePlugin = isUseSSRBundle(userConfig) && !isServerEnvironment && checkUseStringSSR(userConfig, appDirectory, entrypoints);
98
31
  const outputConfig = {
99
- module: isServerEnvironment && (outputModule || 'workerSSR' === name && userConfig.deploy?.target === 'cloudflare')
32
+ module: isServerEnvironment && outputModule
100
33
  };
101
34
  const useLoadableComponents = isUseSSRBundle(userConfig) && checkUseStringSSR(userConfig, appDirectory, entrypoints);
102
35
  return mergeEnvironmentConfig(config, {
@@ -106,12 +39,10 @@ const ssrBuilderPlugin = (modernAPI, outputModule, exportLoadablePath)=>({
106
39
  'process.env.MODERN_SSR_ENV': JSON.stringify(ssrEnv),
107
40
  'process.env.MODERN_ENABLE_HYDRATION': JSON.stringify(isUseSSRBundle(userConfig)),
108
41
  'process.env.MODERN_ENABLE_RSC': JSON.stringify(Boolean(userConfig.server?.rsc)),
109
- __MODERN_ENABLE_RSC__: JSON.stringify(Boolean(userConfig.server?.rsc)),
110
- 'process.env.MODERN_MF_APP_SSR': JSON.stringify(String(isModuleFederationAppSSR))
42
+ __MODERN_ENABLE_RSC__: JSON.stringify(Boolean(userConfig.server?.rsc))
111
43
  }
112
44
  },
113
45
  output: outputConfig,
114
- splitChunks: isServerEnvironment && (hasModuleFederationRuntimeMarker || hasExplicitMfSsrFlag) ? false : void 0,
115
46
  tools: {
116
47
  bundlerChain: useLoadablePlugin ? (chain)=>{
117
48
  chain.plugin('loadable').use(loadable_bundler_plugin, [
@@ -180,4 +111,4 @@ const ssrPlugin = ()=>({
180
111
  });
181
112
  const cli_ssr = ssrPlugin;
182
113
  export default cli_ssr;
183
- export { shouldUseModuleFederationNodeOutput, ssrPlugin };
114
+ export { ssrPlugin };
@@ -1,4 +1,4 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import { loadableReady } from "@loadable/component";
3
3
  import { SSR_HYDRATION_ID_PREFIX } from "@modern-js/utils/universal/constants";
4
4
  import { hydrateRoot } from "react-dom/client";
@@ -34,7 +34,12 @@ function hydrate_hydrateRoot(App, context, ModernRender, ModernHydrate) {
34
34
  callback: callback,
35
35
  children: App
36
36
  });
37
- return ModernHydrate(wrapRuntimeContextProvider(/*#__PURE__*/ jsx(SSRApp, {}), hydrateContext));
37
+ return ModernHydrate(/*#__PURE__*/ jsxs(Fragment, {
38
+ children: [
39
+ wrapRuntimeContextProvider(/*#__PURE__*/ jsx(SSRApp, {}), hydrateContext),
40
+ null
41
+ ]
42
+ }));
38
43
  }
39
44
  }
40
45
  return stringSSRHydrate();
@@ -41,10 +41,7 @@ function getGlobalBasename() {
41
41
  return globalContext.basename;
42
42
  }
43
43
  export { DefaultNotFound } from "../../router/runtime/DefaultNotFound.mjs";
44
- export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter } from "../../router/runtime/hooks.mjs";
45
- export { applyRouterRuntimeState, applyRouterServerPrepareResult, cleanupRouterRuntimeState, createRouterRuntimeState, createRouterServerSnapshot, getRouterHydrationScripts, getRouterMatchedRouteIds, getRouterRuntimeState, getRouterServerSnapshot } from "../../router/runtime/lifecycle.mjs";
46
- export { createRouterProviderRealm, registerRouterProvider, resolveRouterProvider, routerProviderRegistryHooks } from "../../router/runtime/provider.mjs";
47
- export { createRuntimeContextExtension } from "./extensions.mjs";
48
- export { InternalRuntimeContext, RuntimeContext, getInitialContext } from "./runtime.mjs";
44
+ export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter, routerProviderRegistryHooks } from "../../router/runtime/hooks.mjs";
45
+ export { InternalRuntimeContext, RuntimeComponentResolverContext, RuntimeContext, getInitialContext } from "./runtime.mjs";
49
46
  export { getServerPayload, setServerPayload } from "./serverPayload/index.mjs";
50
47
  export { getCurrentEntryName, getGlobalApp, getGlobalBasename, getGlobalEnableRsc, getGlobalInternalRuntimeContext, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRSCRoot, getGlobalRoutes, setGlobalContext, setGlobalInternalRuntimeContext };
@@ -1,5 +1 @@
1
- import { createContext, useContext } from "react";
2
- const RuntimeContext = createContext({});
3
- const ReactRuntimeContext = RuntimeContext;
4
- const useRuntimeContext = ()=>useContext(RuntimeContext);
5
- export { ReactRuntimeContext, RuntimeContext, useRuntimeContext };
1
+ export { ReactRuntimeContext, RuntimeContext, useRuntimeContext } from "./runtime.mjs";