@bleedingdev/modern-js-runtime 3.8.3-ultramodern.6 → 3.9.0-ultramodern.10

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 (207) 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/document/cli/index.js +1 -2
  24. package/dist/cjs/exports/head.js +7 -14
  25. package/dist/cjs/router/runtime/PrefetchLink.js +67 -123
  26. package/dist/cjs/router/runtime/hooks.js +13 -2
  27. package/dist/cjs/router/runtime/internal.js +7 -45
  28. package/dist/cjs/router/runtime/plugin.js +2 -8
  29. package/dist/cjs/router/runtime/plugin.node.js +2 -30
  30. package/dist/cjs/router/runtime/redirect.js +1 -1
  31. package/dist/esm/cli/code.mjs +3 -1
  32. package/dist/esm/cli/ssr/index.mjs +3 -72
  33. package/dist/esm/core/browser/hydrate.mjs +7 -2
  34. package/dist/esm/core/context/index.mjs +2 -5
  35. package/dist/esm/core/context/public.mjs +1 -5
  36. package/dist/esm/core/context/runtime.mjs +13 -4
  37. package/dist/esm/core/react/wrapper.mjs +21 -67
  38. package/dist/esm/core/server/helmet.mjs +5 -4
  39. package/dist/esm/core/server/requestResponse.mjs +3 -3
  40. package/dist/esm/core/server/routerCleanup.mjs +1 -1
  41. package/dist/esm/core/server/shared.mjs +153 -1
  42. package/dist/esm/core/server/stream/afterTemplate.mjs +23 -18
  43. package/dist/esm/core/server/stream/beforeTemplate.mjs +37 -28
  44. package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +31 -24
  45. package/dist/esm/core/server/stream/createReadableStream.mjs +207 -122
  46. package/dist/esm/core/server/stream/createReadableStream.worker.mjs +149 -90
  47. package/dist/esm/core/server/stream/deferredScript.mjs +3 -3
  48. package/dist/esm/core/server/stream/shared.mjs +2 -2
  49. package/dist/esm/core/server/string/index.mjs +104 -68
  50. package/dist/esm/core/server/string/loadable.mjs +34 -19
  51. package/dist/esm/core/server/string/ssrData.mjs +5 -12
  52. package/dist/esm/core/server/utils.mjs +1 -2
  53. package/dist/esm/document/cli/index.mjs +2 -3
  54. package/dist/esm/exports/head.mjs +7 -14
  55. package/dist/esm/router/runtime/PrefetchLink.mjs +68 -124
  56. package/dist/esm/router/runtime/hooks.mjs +9 -1
  57. package/dist/esm/router/runtime/internal.mjs +2 -33
  58. package/dist/esm/router/runtime/plugin.mjs +1 -7
  59. package/dist/esm/router/runtime/plugin.node.mjs +1 -29
  60. package/dist/esm/router/runtime/redirect.mjs +1 -1
  61. package/dist/esm-node/cli/code.mjs +3 -1
  62. package/dist/esm-node/cli/ssr/index.mjs +3 -72
  63. package/dist/esm-node/core/browser/hydrate.mjs +7 -2
  64. package/dist/esm-node/core/context/index.mjs +2 -5
  65. package/dist/esm-node/core/context/public.mjs +1 -5
  66. package/dist/esm-node/core/context/runtime.mjs +13 -4
  67. package/dist/esm-node/core/react/wrapper.mjs +21 -67
  68. package/dist/esm-node/core/server/helmet.mjs +5 -4
  69. package/dist/esm-node/core/server/requestResponse.mjs +3 -3
  70. package/dist/esm-node/core/server/routerCleanup.mjs +1 -1
  71. package/dist/esm-node/core/server/shared.mjs +153 -1
  72. package/dist/esm-node/core/server/stream/afterTemplate.mjs +23 -18
  73. package/dist/esm-node/core/server/stream/beforeTemplate.mjs +37 -28
  74. package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +31 -24
  75. package/dist/esm-node/core/server/stream/createReadableStream.mjs +207 -122
  76. package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +149 -90
  77. package/dist/esm-node/core/server/stream/deferredScript.mjs +3 -3
  78. package/dist/esm-node/core/server/stream/shared.mjs +2 -2
  79. package/dist/esm-node/core/server/string/index.mjs +104 -68
  80. package/dist/esm-node/core/server/string/loadable.mjs +34 -19
  81. package/dist/esm-node/core/server/string/ssrData.mjs +5 -12
  82. package/dist/esm-node/core/server/utils.mjs +1 -2
  83. package/dist/esm-node/document/cli/index.mjs +2 -3
  84. package/dist/esm-node/exports/head.mjs +7 -14
  85. package/dist/esm-node/router/runtime/PrefetchLink.mjs +68 -124
  86. package/dist/esm-node/router/runtime/hooks.mjs +9 -1
  87. package/dist/esm-node/router/runtime/internal.mjs +2 -33
  88. package/dist/esm-node/router/runtime/plugin.mjs +1 -7
  89. package/dist/esm-node/router/runtime/plugin.node.mjs +1 -29
  90. package/dist/esm-node/router/runtime/redirect.mjs +1 -1
  91. package/dist/types/cli/index.d.ts +7 -7
  92. package/dist/types/cli/ssr/index.d.ts +0 -3
  93. package/dist/types/core/browser/hydrate.d.ts +1 -1
  94. package/dist/types/core/browser/index.d.ts +1 -1
  95. package/dist/types/core/compat/hooks.d.ts +1 -1
  96. package/dist/types/core/compat/index.d.ts +1 -1
  97. package/dist/types/core/compat/requestContext.d.ts +3 -3
  98. package/dist/types/core/config.d.ts +1 -1
  99. package/dist/types/core/context/index.d.ts +8 -10
  100. package/dist/types/core/context/monitors/index.d.ts +1 -1
  101. package/dist/types/core/context/monitors/index.server.d.ts +1 -1
  102. package/dist/types/core/context/public.d.ts +1 -23
  103. package/dist/types/core/context/runtime.d.ts +27 -3
  104. package/dist/types/core/context/serverPayload/index.d.ts +1 -1
  105. package/dist/types/core/index.d.ts +5 -5
  106. package/dist/types/core/plugin/index.d.ts +1 -1
  107. package/dist/types/core/plugin/types.d.ts +2 -2
  108. package/dist/types/core/react/wrapper.d.ts +7 -1
  109. package/dist/types/core/server/helmet.d.ts +4 -5
  110. package/dist/types/core/server/index.d.ts +2 -2
  111. package/dist/types/core/server/react/index.d.ts +2 -2
  112. package/dist/types/core/server/requestHandler.d.ts +3 -3
  113. package/dist/types/core/server/requestResponse.d.ts +3 -3
  114. package/dist/types/core/server/routerCleanup.d.ts +2 -2
  115. package/dist/types/core/server/server.d.ts +4 -4
  116. package/dist/types/core/server/shared.d.ts +25 -2
  117. package/dist/types/core/server/stream/afterTemplate.d.ts +5 -4
  118. package/dist/types/core/server/stream/beforeTemplate.d.ts +6 -3
  119. package/dist/types/core/server/stream/beforeTemplate.worker.d.ts +6 -3
  120. package/dist/types/core/server/stream/createReadableStream.d.ts +1 -1
  121. package/dist/types/core/server/stream/createReadableStream.worker.d.ts +1 -1
  122. package/dist/types/core/server/stream/index.d.ts +1 -1
  123. package/dist/types/core/server/stream/shared.d.ts +5 -5
  124. package/dist/types/core/server/stream/template.d.ts +2 -2
  125. package/dist/types/core/server/string/index.d.ts +1 -1
  126. package/dist/types/core/server/string/loadable.d.ts +7 -4
  127. package/dist/types/core/server/string/ssrData.d.ts +5 -4
  128. package/dist/types/core/server/string/types.d.ts +2 -6
  129. package/dist/types/core/server/tracer.d.ts +1 -1
  130. package/dist/types/core/server/utils.d.ts +2 -2
  131. package/dist/types/core/types.d.ts +2 -3
  132. package/dist/types/document/index.d.ts +12 -12
  133. package/dist/types/exports/config-routes.d.ts +1 -1
  134. package/dist/types/exports/head.d.ts +2 -2
  135. package/dist/types/index.d.ts +9 -9
  136. package/dist/types/internal.d.ts +1 -1
  137. package/dist/types/react-server.d.ts +3 -3
  138. package/dist/types/router/cli/code/getClientRoutes/index.d.ts +1 -1
  139. package/dist/types/router/cli/handler.d.ts +1 -1
  140. package/dist/types/router/cli/index.d.ts +3 -3
  141. package/dist/types/router/index.d.ts +1 -1
  142. package/dist/types/router/internal.d.ts +2 -2
  143. package/dist/types/router/runtime/PrefetchLink.d.ts +27 -2
  144. package/dist/types/router/runtime/hooks.d.ts +19 -2
  145. package/dist/types/router/runtime/index.d.ts +4 -4
  146. package/dist/types/router/runtime/internal.d.ts +5 -22
  147. package/dist/types/router/runtime/plugin.d.ts +3 -3
  148. package/dist/types/router/runtime/plugin.node.d.ts +3 -3
  149. package/dist/types/router/runtime/rsc-router.d.ts +3 -3
  150. package/dist/types/router/runtime/types.d.ts +2 -43
  151. package/dist/types/router/runtime/utils.d.ts +1 -1
  152. package/package.json +19 -47
  153. package/rstest.config.mts +32 -2
  154. package/dist/cjs/boundary-debugger/index.js +0 -317
  155. package/dist/cjs/core/context/extensions.js +0 -74
  156. package/dist/cjs/core/context/helmetContext.js +0 -54
  157. package/dist/cjs/core/server/federatedCss.js +0 -58
  158. package/dist/cjs/core/server/scriptOrder.js +0 -140
  159. package/dist/cjs/module-federation/consume-surface.js +0 -199
  160. package/dist/cjs/module-federation/distributed-ssr.js +0 -135
  161. package/dist/cjs/module-federation/index.js +0 -316
  162. package/dist/cjs/module-federation/last-known-good.js +0 -157
  163. package/dist/cjs/module-federation/manifest-recovery-runtime-plugin.js +0 -129
  164. package/dist/cjs/module-federation/surface-resolution-types.js +0 -61
  165. package/dist/cjs/router/runtime/lifecycle.js +0 -167
  166. package/dist/cjs/router/runtime/provider.js +0 -153
  167. package/dist/esm/boundary-debugger/index.mjs +0 -277
  168. package/dist/esm/core/context/extensions.mjs +0 -33
  169. package/dist/esm/core/context/helmetContext.mjs +0 -13
  170. package/dist/esm/core/server/federatedCss.mjs +0 -20
  171. package/dist/esm/core/server/scriptOrder.mjs +0 -90
  172. package/dist/esm/module-federation/consume-surface.mjs +0 -158
  173. package/dist/esm/module-federation/distributed-ssr.mjs +0 -82
  174. package/dist/esm/module-federation/index.mjs +0 -115
  175. package/dist/esm/module-federation/last-known-good.mjs +0 -113
  176. package/dist/esm/module-federation/manifest-recovery-runtime-plugin.mjs +0 -89
  177. package/dist/esm/module-federation/surface-resolution-types.mjs +0 -8
  178. package/dist/esm/router/runtime/lifecycle.mjs +0 -105
  179. package/dist/esm/router/runtime/provider.mjs +0 -100
  180. package/dist/esm-node/boundary-debugger/index.mjs +0 -278
  181. package/dist/esm-node/core/context/extensions.mjs +0 -34
  182. package/dist/esm-node/core/context/helmetContext.mjs +0 -14
  183. package/dist/esm-node/core/server/federatedCss.mjs +0 -21
  184. package/dist/esm-node/core/server/scriptOrder.mjs +0 -91
  185. package/dist/esm-node/module-federation/consume-surface.mjs +0 -159
  186. package/dist/esm-node/module-federation/distributed-ssr.mjs +0 -83
  187. package/dist/esm-node/module-federation/index.mjs +0 -116
  188. package/dist/esm-node/module-federation/last-known-good.mjs +0 -114
  189. package/dist/esm-node/module-federation/manifest-recovery-runtime-plugin.mjs +0 -90
  190. package/dist/esm-node/module-federation/surface-resolution-types.mjs +0 -9
  191. package/dist/esm-node/router/runtime/lifecycle.mjs +0 -106
  192. package/dist/esm-node/router/runtime/provider.mjs +0 -101
  193. package/dist/types/boundary-debugger/index.d.ts +0 -28
  194. package/dist/types/core/context/extensions.d.ts +0 -35
  195. package/dist/types/core/context/helmetContext.d.ts +0 -10
  196. package/dist/types/core/server/federatedCss.d.ts +0 -5
  197. package/dist/types/core/server/scriptOrder.d.ts +0 -25
  198. package/dist/types/module-federation/consume-surface.d.ts +0 -104
  199. package/dist/types/module-federation/distributed-ssr.d.ts +0 -61
  200. package/dist/types/module-federation/index.d.ts +0 -71
  201. package/dist/types/module-federation/last-known-good.d.ts +0 -52
  202. package/dist/types/module-federation/manifest-recovery-runtime-plugin.d.ts +0 -25
  203. package/dist/types/module-federation/surface-resolution-types.d.ts +0 -23
  204. package/dist/types/router/runtime/lifecycle.d.ts +0 -27
  205. package/dist/types/router/runtime/provider.d.ts +0 -78
  206. /package/dist/esm/{rslib-runtime.mjs → rslib-runtime~1.mjs} +0 -0
  207. /package/dist/esm-node/{rslib-runtime.mjs → rslib-runtime~0.mjs} +0 -0
@@ -1,11 +1,10 @@
1
1
  import "node:module";
2
2
  "use client";
3
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
- import { getNavigationWarmupCacheKey } from "@modern-js/runtime-extensions";
5
4
  import { Link as router_Link, NavLink, matchRoutes, useHref, useMatches, useResolvedPath } from "@modern-js/runtime-utils/router";
6
5
  import react, { useContext, useMemo } from "react";
7
6
  import { InternalRuntimeContext } from "../../core/context/index.mjs";
8
- import { __webpack_require__ } from "../../rslib-runtime.mjs";
7
+ import { __webpack_require__ } from "../../rslib-runtime~0.mjs";
9
8
  const getWebpackChunkLoader = ()=>__webpack_chunk_load__;
10
9
  const getWebpackPublicPath = ()=>{
11
10
  try {
@@ -21,62 +20,6 @@ function composeEventHandlers(theirHandler, ourHandler) {
21
20
  };
22
21
  }
23
22
  const ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
24
- const DEFAULT_PREFETCH_BEHAVIOR = 'render';
25
- const INTENT_DELAY = 100;
26
- const VIEWPORT_ROOT_MARGIN = '200px';
27
- const MAX_CONCURRENT_WARMUPS = 4;
28
- const WARMUP_TTL = 30000;
29
- const SLOW_EFFECTIVE_TYPES = new Set([
30
- 'slow-2g',
31
- '2g'
32
- ]);
33
- const warmupCache = new Map();
34
- const warmupQueue = [];
35
- let activeWarmups = 0;
36
- const getWarmupTimestamp = ()=>performance.now();
37
- const getConnection = ()=>{
38
- const nav = globalThis.navigator;
39
- return nav?.connection || nav?.mozConnection || nav?.webkitConnection;
40
- };
41
- const shouldWarmupOnCurrentNetwork = ()=>{
42
- const connection = getConnection();
43
- if (connection?.saveData) return false;
44
- if ('string' == typeof connection?.effectiveType && SLOW_EFFECTIVE_TYPES.has(connection.effectiveType)) return false;
45
- return true;
46
- };
47
- const pruneWarmupCache = (now = getWarmupTimestamp())=>{
48
- for (const [key, timestamp] of warmupCache)if (now - timestamp > WARMUP_TTL) warmupCache.delete(key);
49
- };
50
- const runNextWarmup = ()=>{
51
- while(activeWarmups < MAX_CONCURRENT_WARMUPS && warmupQueue.length > 0){
52
- const task = warmupQueue.shift();
53
- if (task.cancelled) continue;
54
- activeWarmups += 1;
55
- task.run().catch(()=>{
56
- warmupCache.delete(task.key);
57
- }).finally(()=>{
58
- activeWarmups -= 1;
59
- runNextWarmup();
60
- });
61
- }
62
- };
63
- const scheduleWarmup = (key, run)=>{
64
- if (!shouldWarmupOnCurrentNetwork()) return ()=>{};
65
- pruneWarmupCache();
66
- if (warmupCache.has(key)) return ()=>{};
67
- warmupCache.set(key, getWarmupTimestamp());
68
- const task = {
69
- key,
70
- run,
71
- cancelled: false
72
- };
73
- warmupQueue.push(task);
74
- runNextWarmup();
75
- return ()=>{
76
- task.cancelled = true;
77
- if (warmupQueue.includes(task)) warmupCache.delete(task.key);
78
- };
79
- };
80
23
  const setRef = (ref, value)=>{
81
24
  if (!ref) return;
82
25
  if ('function' == typeof ref) return void ref(value);
@@ -84,70 +27,65 @@ const setRef = (ref, value)=>{
84
27
  ref.current = value;
85
28
  } catch {}
86
29
  };
87
- const isDataWarmupEnabled = (route)=>{
88
- const handle = route.handle;
89
- return handle?.navigationWarmup?.data !== false;
90
- };
91
- function usePrefetchBehavior(prefetch, preload, theirElementProps) {
92
- const [maybeWarmup, setMaybeWarmup] = react.useState(false);
93
- const [shouldPrefetch, setShouldPrefetch] = react.useState(false);
94
- const [shouldPreload, setShouldPreload] = react.useState(false);
95
- const [viewportElement, setViewportElement] = react.useState(null);
30
+ function usePrefetchBehavior(prefetch, preload, theirElementProps, policy) {
31
+ const [maybePrefetch, setMaybePrefetch] = react.useState(false);
32
+ const [state, setState] = react.useState({
33
+ code: false,
34
+ data: false
35
+ });
36
+ const [element, setElement] = react.useState(null);
37
+ const observerRef = react.useRef(void 0);
96
38
  const { onFocus, onBlur, onMouseEnter, onMouseLeave, onTouchStart } = theirElementProps;
97
39
  react.useEffect(()=>{
98
- if ('render' === prefetch) setShouldPrefetch(true);
99
- if ('render' === preload) setShouldPreload(true);
40
+ if (!policy) return void setState({
41
+ code: 'render' === prefetch,
42
+ data: 'render' === prefetch
43
+ });
44
+ const observer = policy.observe({
45
+ element,
46
+ prefetch,
47
+ preload,
48
+ notify: (next)=>setState((previous)=>previous.code === next.code && previous.data === next.data ? previous : next)
49
+ });
50
+ observerRef.current = observer;
51
+ return ()=>{
52
+ observerRef.current = void 0;
53
+ observer.dispose();
54
+ };
100
55
  }, [
56
+ policy,
101
57
  prefetch,
102
- preload
58
+ preload,
59
+ element
60
+ ]);
61
+ react.useEffect(()=>{
62
+ if (policy || !maybePrefetch) return;
63
+ const timer = setTimeout(()=>setState({
64
+ code: true,
65
+ data: true
66
+ }), 100);
67
+ return ()=>clearTimeout(timer);
68
+ }, [
69
+ policy,
70
+ maybePrefetch
103
71
  ]);
104
72
  const setIntent = ()=>{
105
- if ('intent' === prefetch || 'intent' === preload) setMaybeWarmup(true);
73
+ if (policy) observerRef.current?.onIntent();
74
+ else if ('intent' === prefetch) setMaybePrefetch(true);
106
75
  };
107
76
  const cancelIntent = ()=>{
108
- if ('intent' === prefetch || 'intent' === preload) {
109
- setMaybeWarmup(false);
110
- setShouldPrefetch(false);
111
- setShouldPreload(false);
77
+ if (policy) observerRef.current?.onCancel();
78
+ else if ('intent' === prefetch) {
79
+ setMaybePrefetch(false);
80
+ setState({
81
+ code: false,
82
+ data: false
83
+ });
112
84
  }
113
85
  };
114
- react.useEffect(()=>{
115
- if (maybeWarmup) {
116
- const id = setTimeout(()=>{
117
- if ('intent' === prefetch) setShouldPrefetch(true);
118
- if ('intent' === preload) setShouldPreload(true);
119
- }, INTENT_DELAY);
120
- return ()=>{
121
- clearTimeout(id);
122
- };
123
- }
124
- }, [
125
- maybeWarmup,
126
- prefetch,
127
- preload
128
- ]);
129
- react.useEffect(()=>{
130
- if (!viewportElement || 'viewport' !== prefetch && 'viewport' !== preload || "u" < typeof IntersectionObserver) return;
131
- const observer = new IntersectionObserver((entries)=>{
132
- if (!entries.some((entry)=>entry.isIntersecting)) return;
133
- if ('viewport' === prefetch) setShouldPrefetch(true);
134
- if ('viewport' === preload) setShouldPreload(true);
135
- observer.disconnect();
136
- }, {
137
- rootMargin: VIEWPORT_ROOT_MARGIN
138
- });
139
- observer.observe(viewportElement);
140
- return ()=>{
141
- observer.disconnect();
142
- };
143
- }, [
144
- prefetch,
145
- preload,
146
- viewportElement
147
- ]);
148
86
  return [
149
- shouldPrefetch,
150
- shouldPreload,
87
+ state.data,
88
+ state.code,
151
89
  {
152
90
  onFocus: composeEventHandlers(onFocus, setIntent),
153
91
  onBlur: composeEventHandlers(onBlur, cancelIntent),
@@ -155,7 +93,7 @@ function usePrefetchBehavior(prefetch, preload, theirElementProps) {
155
93
  onMouseLeave: composeEventHandlers(onMouseLeave, cancelIntent),
156
94
  onTouchStart: composeEventHandlers(onTouchStart, setIntent)
157
95
  },
158
- setViewportElement
96
+ setElement
159
97
  ];
160
98
  }
161
99
  async function loadRouteModule(route, routeAssets, chunkLoader) {
@@ -196,7 +134,8 @@ const PrefetchPageLinks = ({ path, includeData })=>{
196
134
  const context = useContext(InternalRuntimeContext);
197
135
  const { routeManifest, routes } = context;
198
136
  const { routeAssets } = routeManifest || {};
199
- const allowNetworkWarmup = shouldWarmupOnCurrentNetwork();
137
+ const policy = context.linkPrefetchPolicy;
138
+ const allowNetworkWarmup = policy?.canWarmup() ?? true;
200
139
  const matches = useMemo(()=>Array.isArray(routes) ? matchRoutes(routes, pathname) : [], [
201
140
  pathname,
202
141
  routes
@@ -216,7 +155,16 @@ const PrefetchPageLinks = ({ path, includeData })=>{
216
155
  const routeAsset = routeId ? routeAssets[routeId] : void 0;
217
156
  const chunkIds = routeAsset?.chunkIds;
218
157
  if (!routeId || !Array.isArray(chunkIds) || 0 === chunkIds.length) return ()=>{};
219
- return scheduleWarmup(getNavigationWarmupCacheKey(context, chunkLoader, getWebpackPublicPath(), `route-module:${routeId}:${chunkIds.join(',')}`), ()=>loadRouteModule(match.route, routeAssets, chunkLoader));
158
+ const run = ()=>loadRouteModule(match.route, routeAssets, chunkLoader);
159
+ if (policy) return policy.schedule({
160
+ runtimeContext: context,
161
+ chunkLoader,
162
+ publicPath: getWebpackPublicPath(),
163
+ key: `route-module:${routeId}:${chunkIds.join(',')}`,
164
+ run
165
+ });
166
+ run().catch(()=>{});
167
+ return ()=>{};
220
168
  });
221
169
  return ()=>{
222
170
  cancellations.forEach((cancel)=>cancel());
@@ -225,6 +173,7 @@ const PrefetchPageLinks = ({ path, includeData })=>{
225
173
  allowNetworkWarmup,
226
174
  chunkLoader,
227
175
  context,
176
+ policy,
228
177
  routeAssetGeneration
229
178
  ]);
230
179
  if (!allowNetworkWarmup || !includeData || !window._SSR_DATA) return null;
@@ -236,10 +185,11 @@ const PrefetchPageLinks = ({ path, includeData })=>{
236
185
  };
237
186
  const PrefetchDataLinks = ({ matches, path, routeManifest })=>{
238
187
  const { pathname, search, hash } = path;
188
+ const policy = useContext(InternalRuntimeContext).linkPrefetchPolicy;
239
189
  const currentMatches = useMatches();
240
190
  const basename = useHref('/');
241
191
  const dataHrefs = useMemo(()=>matches?.filter((match, index)=>{
242
- if (!isDataWarmupEnabled(match.route) || !match.route.loader || 'function' != typeof match.route.loader || 0 === match.route.loader.length) return false;
192
+ if (policy?.allowData(match.route) === false || !match.route.loader || 'function' != typeof match.route.loader || 0 === match.route.loader.length) return false;
243
193
  if (match.route.shouldRevalidate) {
244
194
  const currentUrl = new URL(location.pathname + location.search + location.hash, window.origin);
245
195
  const nextUrl = new URL(pathname + search + hash, window.origin);
@@ -266,16 +216,10 @@ const PrefetchDataLinks = ({ matches, path, routeManifest })=>{
266
216
  children: dataHrefs
267
217
  });
268
218
  };
269
- const normalizePreloadBehavior = (preload, prefetch)=>{
270
- if (false === preload || 'none' === preload) return 'none';
271
- if (void 0 !== preload) return preload;
272
- if ('none' === prefetch) return 'none';
273
- return prefetch;
274
- };
275
- const createPrefetchLink = (Link)=>/*#__PURE__*/ react.forwardRef(({ to, prefetch = DEFAULT_PREFETCH_BEHAVIOR, preload, ...props }, forwardedRef)=>{
219
+ const createPrefetchLink = (Link)=>/*#__PURE__*/ react.forwardRef(({ to, prefetch, preload, ...props }, forwardedRef)=>{
276
220
  const isAbsolute = 'string' == typeof to && ABSOLUTE_URL_REGEX.test(to);
277
- const resolvedPreload = normalizePreloadBehavior(preload, prefetch);
278
- const [shouldPrefetch, shouldPreload, prefetchHandlers, setViewportElement] = usePrefetchBehavior(prefetch, resolvedPreload, props);
221
+ const policy = useContext(InternalRuntimeContext).linkPrefetchPolicy;
222
+ const [shouldPrefetch, shouldPreload, prefetchHandlers, setViewportElement] = usePrefetchBehavior(prefetch, preload, props, policy);
279
223
  const setAnchorRef = react.useCallback((element)=>{
280
224
  setViewportElement(element);
281
225
  setRef(forwardedRef, element);
@@ -7,4 +7,12 @@ const onBeforeCreateRouter = createRouterSyncHook();
7
7
  const onAfterCreateRouter = createRouterSyncHook();
8
8
  const onBeforeHydrateRouter = createRouterSyncHook();
9
9
  const onAfterHydrateRouter = createRouterSyncHook();
10
- export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter };
10
+ const routerProviderRegistryHooks = {
11
+ modifyRoutes: modifyRoutes,
12
+ onBeforeCreateRoutes: onBeforeCreateRoutes,
13
+ onBeforeCreateRouter: onBeforeCreateRouter,
14
+ onAfterCreateRouter: onAfterCreateRouter,
15
+ onBeforeHydrateRouter: onBeforeHydrateRouter,
16
+ onAfterHydrateRouter: onAfterHydrateRouter
17
+ };
18
+ export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter, routerProviderRegistryHooks };
@@ -1,35 +1,4 @@
1
1
  import "node:module";
2
- import { merge } from "@modern-js/runtime-utils/merge";
3
- import { modifyRoutes, routerPlugin } from "./plugin.mjs";
4
- import { createRouterProviderRealm, registerRouterProvider, reportUnsupportedProviderRegistryHooks, resolveRouterProvider, routerProviderRegistryHooks } from "./provider.mjs";
5
- registerRouterProvider('react-router', routerPlugin, {
6
- isDefault: true
7
- });
8
- const createRouterPlugin = (localProviders = [])=>{
9
- const providerRealm = createRouterProviderRealm([
10
- {
11
- name: 'react-router',
12
- factory: routerPlugin,
13
- isDefault: true
14
- },
15
- ...localProviders
16
- ]);
17
- return (userConfig = {})=>({
18
- name: '@modern-js/plugin-router',
19
- registryHooks: routerProviderRegistryHooks,
20
- setup: (api)=>{
21
- const mergedConfig = merge(api.getRuntimeConfig().router || {}, userConfig);
22
- const pluginFactory = resolveRouterProvider(mergedConfig.framework, {
23
- realm: providerRealm
24
- });
25
- const providerPlugin = pluginFactory(userConfig);
26
- reportUnsupportedProviderRegistryHooks(providerPlugin);
27
- providerPlugin.setup?.(api);
28
- }
29
- });
30
- };
31
- const internal_routerPlugin = createRouterPlugin();
32
- const internal = internal_routerPlugin;
2
+ export { routerProviderRegistryHooks } from "./hooks.mjs";
3
+ export { modifyRoutes, routerPlugin as default, routerPlugin } from "./plugin.mjs";
33
4
  export { renderRoutes } from "./utils.mjs";
34
- export default internal;
35
- export { createRouterPlugin, createRouterProviderRealm, internal_routerPlugin as routerPlugin, modifyRoutes, registerRouterProvider, resolveRouterProvider };
@@ -5,9 +5,8 @@ import { RouterProvider, createBrowserRouter, createHashRouter, createRoutesFrom
5
5
  import { normalizePathname } from "@modern-js/runtime-utils/url";
6
6
  import * as __rspack_external_react from "react";
7
7
  import { InternalRuntimeContext, getGlobalEnableRsc, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRoutes } from "../../core/context/index.mjs";
8
- import { applyRouterRuntimeState } from "./lifecycle.mjs";
8
+ import { routerProviderRegistryHooks } from "./hooks.mjs";
9
9
  import { Link } from "./PrefetchLink.mjs";
10
- import { routerProviderRegistryHooks } from "./provider.mjs";
11
10
  import { createClientRouterFromPayload } from "./rsc-router.mjs";
12
11
  import { createRouteObjectsFromConfig, deserializeErrors, renderRoutes, urlJoin } from "./utils.mjs";
13
12
  let finalRouteConfig = {
@@ -169,11 +168,6 @@ function useRouterCreation(props, options) {
169
168
  basename: _basename,
170
169
  hydrationData
171
170
  });
172
- applyRouterRuntimeState(runtimeContext, {
173
- framework: 'react-router',
174
- basename: _basename,
175
- instance: router
176
- });
177
171
  hooks.onAfterCreateRouter.call({
178
172
  ...routerLifecycleContext,
179
173
  router,
@@ -9,9 +9,8 @@ import { useContext } from "react";
9
9
  import { InternalRuntimeContext, getGlobalEnableRsc, getGlobalLayoutApp, getGlobalRoutes } from "../../core/context/index.mjs";
10
10
  import { setServerPayload } from "../../core/context/serverPayload/index.server.mjs";
11
11
  import DeferredDataScripts_node from "./DeferredDataScripts.node.mjs";
12
- import { applyRouterRuntimeState, createRouterServerSnapshot } from "./lifecycle.mjs";
12
+ import { routerProviderRegistryHooks } from "./hooks.mjs";
13
13
  import { Link } from "./PrefetchLink.mjs";
14
- import { routerProviderRegistryHooks } from "./provider.mjs";
15
14
  import { RSCStaticRouter, createServerPayload, handleRSCRedirect, prepareRSCRoutes } from "./rsc-router.mjs";
16
15
  import { createRouteObjectsFromConfig, renderRoutes, urlJoin } from "./utils.mjs";
17
16
  function createRemixRequest(request) {
@@ -24,24 +23,6 @@ function createRemixRequest(request) {
24
23
  signal: controller.signal
25
24
  });
26
25
  }
27
- function createReactRouterServerSnapshot(routerContext, basename) {
28
- return createRouterServerSnapshot({
29
- framework: 'react-router',
30
- basename,
31
- statusCode: routerContext.statusCode,
32
- errors: routerContext.errors,
33
- routerData: {
34
- loaderData: routerContext.loaderData,
35
- errors: routerContext.errors
36
- },
37
- matches: routerContext.matches.map((match)=>{
38
- const routeId = match.route.id;
39
- return 'string' == typeof routeId ? {
40
- routeId
41
- } : void 0;
42
- }).filter((match)=>void 0 !== match)
43
- });
44
- }
45
26
  const routerPlugin = (userConfig = {})=>({
46
27
  name: '@modern-js/plugin-router',
47
28
  registryHooks: routerProviderRegistryHooks,
@@ -108,18 +89,9 @@ const routerPlugin = (userConfig = {})=>({
108
89
  throw errors[0];
109
90
  }
110
91
  context.routerContext = routerContext;
111
- const routerServerSnapshot = createReactRouterServerSnapshot(routerContext, _basename);
112
- applyRouterRuntimeState(context, {
113
- framework: 'react-router',
114
- basename: _basename,
115
- instance: routerContext,
116
- matchedRouteIds: routerServerSnapshot.matchedRouteIds,
117
- serverSnapshot: routerServerSnapshot
118
- });
119
92
  hooks.onAfterCreateRouter.call({
120
93
  ...routerLifecycleContext,
121
94
  router: routerContext,
122
- serverSnapshot: routerServerSnapshot,
123
95
  runtimeContext: context
124
96
  });
125
97
  let payload;
@@ -2,7 +2,7 @@ import "node:module";
2
2
  const handleRSCRedirect = (headers, basename, status)=>{
3
3
  const newHeaders = new Headers(headers);
4
4
  let redirectUrl = headers.get('Location');
5
- if (!redirectUrl || ![
5
+ if (null === redirectUrl || '' === redirectUrl || ![
6
6
  301,
7
7
  302,
8
8
  303,
@@ -1,11 +1,11 @@
1
1
  import type { AppTools, CliPlugin } from '@modern-js/app-tools';
2
- import { documentPlugin } from '../document/cli';
3
- import { routerPlugin } from '../router/cli';
4
- import { ssrPlugin } from './ssr';
5
- export { getEntrypointRoutesDir, getEntrypointRoutesOwner, handleFileChange, handleGeneratorEntryCode, handleModifyEntrypoints, isRouteEntry, updateNestedRoutesSpec, } from '../router/cli';
6
- export { makeLegalIdentifier } from '../router/cli/code/makeLegalIdentifier';
7
- export { getPathWithoutExt } from '../router/cli/code/utils';
8
- export { isRuntimeEntry } from './entry';
2
+ import { documentPlugin } from '../document/cli/index.js';
3
+ import { routerPlugin } from '../router/cli/index.js';
4
+ import { ssrPlugin } from './ssr/index.js';
5
+ export { getEntrypointRoutesDir, getEntrypointRoutesOwner, handleFileChange, handleGeneratorEntryCode, handleModifyEntrypoints, isRouteEntry, updateNestedRoutesSpec, } from '../router/cli/index.js';
6
+ export { makeLegalIdentifier } from '../router/cli/code/makeLegalIdentifier.js';
7
+ export { getPathWithoutExt } from '../router/cli/code/utils.js';
8
+ export { isRuntimeEntry } from './entry.js';
9
9
  export { documentPlugin, routerPlugin, ssrPlugin };
10
10
  export declare const runtimePlugin: (params?: {
11
11
  plugins?: CliPlugin<AppTools>[];
@@ -1,6 +1,3 @@
1
1
  import type { AppTools, CliPlugin } from '@modern-js/app-tools';
2
- import type { MergedEnvironmentConfig } from '@rsbuild/core';
3
- type EnvironmentConfigLike = Partial<Pick<MergedEnvironmentConfig, 'output' | 'source' | 'tools'>>;
4
- export declare const shouldUseModuleFederationNodeOutput: (config: EnvironmentConfigLike) => boolean;
5
2
  export declare const ssrPlugin: () => CliPlugin<AppTools>;
6
3
  export default ssrPlugin;
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
2
  import { type Root } from 'react-dom/client';
3
- import type { TRuntimeContext } from '../context/runtime';
3
+ import type { TRuntimeContext } from '../context/runtime.js';
4
4
  export declare function hydrateWithReact(App: React.ReactElement, rootElement: HTMLElement): Promise<Root>;
5
5
  export declare function hydrateRoot(App: React.ReactElement, context: TRuntimeContext, ModernRender: (App: React.ReactElement) => Promise<HTMLElement | Root>, ModernHydrate: (App: React.ReactElement, callback?: () => void) => Promise<HTMLElement | Root>): Promise<HTMLElement | Root>;
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
- import { hydrateWithReact } from './hydrate';
2
+ import { hydrateWithReact } from './hydrate.js';
3
3
  export { hydrateWithReact };
4
4
  export type RenderFunc = typeof render;
5
5
  export declare function render(App: React.ReactElement<{
@@ -1,4 +1,4 @@
1
- import type { TInternalRuntimeContext } from '../context';
1
+ import type { TInternalRuntimeContext } from '../context/index.js';
2
2
  export declare function transformHookRunner(hookRunnerName: string): string;
3
3
  export declare function handleSetupResult(setupResult: Record<string, (...args: any) => any>, api: Record<string, any>): void;
4
4
  export declare function getHookRunners(runtimeContext: TInternalRuntimeContext): Record<string, any>;
@@ -1,2 +1,2 @@
1
- import type { RuntimePlugin } from '../plugin/types';
1
+ import type { RuntimePlugin } from '../plugin/types.js';
2
2
  export declare const compatPlugin: () => RuntimePlugin;
@@ -1,5 +1,5 @@
1
- import type { TInternalRuntimeContext } from '../context';
2
- import type { RuntimePlugin } from '../plugin/types';
3
- import type { RequestContext } from '../types';
1
+ import type { TInternalRuntimeContext } from '../context/index.js';
2
+ import type { RuntimePlugin } from '../plugin/types.js';
3
+ import type { RequestContext } from '../types.js';
4
4
  export declare const makeRequestContext: (context: TInternalRuntimeContext) => RequestContext;
5
5
  export declare const requestContextPlugin: () => RuntimePlugin;
@@ -1,4 +1,4 @@
1
- import type { RuntimeConfig } from '../common';
1
+ import type { RuntimeConfig } from '../common.js';
2
2
  /**
3
3
  * This function helps you to autocomplete configuration types.
4
4
  * It accepts a direct config object, or a function that returns a config.
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
- import type { ServerPayload } from './serverPayload/index';
2
+ import type { ServerPayload } from './serverPayload/index.js';
3
3
  export type RuntimeRoute = {
4
4
  children?: RuntimeRoute[];
5
5
  routes?: RuntimeRoute[];
@@ -19,14 +19,12 @@ type InternalRuntimeContextLike = {
19
19
  pluginAPI?: RuntimePluginAPI;
20
20
  [key: string]: any;
21
21
  };
22
- export { DefaultNotFound } from '../../router/runtime/DefaultNotFound';
23
- export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter, type RouterExtendsHooks, } from '../../router/runtime/hooks';
24
- export { applyRouterRuntimeState, applyRouterServerPrepareResult, cleanupRouterRuntimeState, createRouterRuntimeState, createRouterServerSnapshot, getRouterHydrationScripts, getRouterMatchedRouteIds, getRouterRuntimeState, getRouterServerSnapshot, type RouterLifecycleContext, type RouterLifecyclePhase, } from '../../router/runtime/lifecycle';
25
- export { createRouterProviderRealm, type RouterProviderFactory, type RouterProviderPlugin, type RouterProviderRealm, type RouterProviderRegistration, registerRouterProvider, resolveRouterProvider, routerProviderRegistryHooks, } from '../../router/runtime/provider';
26
- export type { BuiltInRouterFramework, InternalRouterRuntimeState, InternalRouterServerSnapshot, LoaderFunction, LoaderFunctionArgs, ModernRoute, RouterFramework, RouterRouteMatchSnapshot, RouterServerPrepareResult, } from '../../router/runtime/types';
27
- export { createRuntimeContextExtension, type RuntimeContextExtension, } from './extensions';
28
- export { getInitialContext, InternalRuntimeContext, RuntimeContext, type TInternalRuntimeContext, type TRuntimeContext, } from './runtime';
29
- export type { PayloadRoute, ServerPayload } from './serverPayload/index';
22
+ export { DefaultNotFound } from '../../router/runtime/DefaultNotFound.js';
23
+ export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter, type RouterExtendsHooks, type RouterLifecycleContext, routerProviderRegistryHooks, } from '../../router/runtime/hooks.js';
24
+ export type { LinkPrefetchPolicy } from '../../router/runtime/PrefetchLink.js';
25
+ export type { LoaderFunction, LoaderFunctionArgs, ModernRoute, } from '../../router/runtime/types.js';
26
+ export { getInitialContext, InternalRuntimeContext, RuntimeComponentResolverContext, RuntimeContext, type TInternalRuntimeContext, type TRuntimeContext, } from './runtime.js';
27
+ export type { PayloadRoute, ServerPayload } from './serverPayload/index.js';
30
28
  interface GlobalContext {
31
29
  entryName?: string;
32
30
  /**
@@ -58,7 +56,7 @@ interface GlobalContext {
58
56
  serverPayload?: ServerPayload;
59
57
  enableRsc?: boolean;
60
58
  }
61
- export { getServerPayload, setServerPayload, } from './serverPayload/index';
59
+ export { getServerPayload, setServerPayload, } from './serverPayload/index.js';
62
60
  export declare function getGlobalIsRscClient(): boolean | undefined;
63
61
  export declare function getGlobalEnableRsc(): boolean | undefined;
64
62
  export declare function setGlobalContext(context: Omit<GlobalContext, 'internalRuntimeContext'>): void;
@@ -1 +1 @@
1
- export declare const getMonitors: () => import("./default").RuntimeMonitors;
1
+ export declare const getMonitors: () => import("./default.js").RuntimeMonitors;
@@ -1,2 +1,2 @@
1
- import { type RuntimeMonitors } from './default';
1
+ import { type RuntimeMonitors } from './default.js';
2
2
  export declare const getMonitors: () => RuntimeMonitors;
@@ -1,23 +1 @@
1
- import type { RouteObject } from '@modern-js/runtime-utils/router';
2
- import type { RequestContext } from '../types';
3
- export type { RequestContext };
4
- export interface TRuntimeContext {
5
- initialData?: Record<string, unknown>;
6
- isBrowser: boolean;
7
- routes?: RouteObject[];
8
- requestContext: RequestContext;
9
- /**
10
- * @deprecated Use `requestContext` instead
11
- */
12
- context: RequestContext;
13
- [key: string]: unknown;
14
- }
15
- export declare const RuntimeContext: import("react").Context<TRuntimeContext>;
16
- /**
17
- * deprecated, use RuntimeContext instead
18
- */
19
- export declare const ReactRuntimeContext: import("react").Context<TRuntimeContext>;
20
- /**
21
- * @deprecated use use(RuntimeContext) instead
22
- */
23
- export declare const useRuntimeContext: () => TRuntimeContext;
1
+ export { ReactRuntimeContext, type RequestContext, RuntimeContext, type TRuntimeContext, useRuntimeContext, } from './runtime.js';
@@ -1,7 +1,10 @@
1
+ import type { ResolveComponentFn } from '@modern-js/plugin/runtime';
1
2
  import type { RouteObject, StaticHandlerContext } from '@modern-js/runtime-utils/router';
2
3
  import type { BaseSSRServerContext } from '@modern-js/types';
3
- import type { RouteManifest } from '../../router/runtime/types';
4
- import { type TRuntimeContext } from './public';
4
+ import type { LinkPrefetchPolicy } from '../../router/runtime/PrefetchLink.js';
5
+ import type { RouteManifest } from '../../router/runtime/types.js';
6
+ import type { RequestContext } from '../types.js';
7
+ export type { RequestContext };
5
8
  export type InternalSSRContext = {
6
9
  request: BaseSSRServerContext['request'] & {
7
10
  raw?: Request;
@@ -9,12 +12,23 @@ export type InternalSSRContext = {
9
12
  response: BaseSSRServerContext['response'];
10
13
  [key: string]: any;
11
14
  };
12
- export { ReactRuntimeContext, RuntimeContext, type TRuntimeContext, useRuntimeContext, } from './public';
15
+ export interface TRuntimeContext {
16
+ initialData?: Record<string, unknown>;
17
+ isBrowser: boolean;
18
+ routes?: RouteObject[];
19
+ requestContext: RequestContext;
20
+ /**
21
+ * @deprecated Use `requestContext` instead
22
+ */
23
+ context: RequestContext;
24
+ [key: string]: unknown;
25
+ }
13
26
  /**
14
27
  * InternalRuntimeContext used internally and by plugins
15
28
  */
16
29
  export interface TInternalRuntimeContext extends TRuntimeContext {
17
30
  routeManifest?: RouteManifest;
31
+ linkPrefetchPolicy?: LinkPrefetchPolicy;
18
32
  routes?: RouteObject[];
19
33
  routerContext?: StaticHandlerContext;
20
34
  unstable_getBlockNavState?: () => boolean;
@@ -23,4 +37,14 @@ export interface TInternalRuntimeContext extends TRuntimeContext {
23
37
  _internalRouterBaseName?: any;
24
38
  }
25
39
  export declare const InternalRuntimeContext: import("react").Context<TInternalRuntimeContext>;
40
+ export declare const RuntimeContext: import("react").Context<TRuntimeContext>;
41
+ export declare const RuntimeComponentResolverContext: import("react").Context<ResolveComponentFn | undefined>;
42
+ /**
43
+ * deprecated, use RuntimeContext instead
44
+ */
45
+ export declare const ReactRuntimeContext: import("react").Context<TRuntimeContext>;
46
+ /**
47
+ * @deprecated use use(RuntimeContext) instead
48
+ */
49
+ export declare const useRuntimeContext: () => TRuntimeContext;
26
50
  export declare const getInitialContext: (isBrowser?: boolean, routeManifest?: RouteManifest) => TInternalRuntimeContext;
@@ -1,4 +1,4 @@
1
- import type { PayloadRoute, ServerPayload } from './index.server';
1
+ import type { PayloadRoute, ServerPayload } from './index.server.js';
2
2
  export type { PayloadRoute, ServerPayload };
3
3
  export declare const getServerPayload: () => ServerPayload | undefined;
4
4
  export declare const setServerPayload: (payload: ServerPayload) => void;
@@ -1,5 +1,5 @@
1
- export { defineRuntimeConfig } from './config';
2
- export type { TRuntimeContext } from './context/runtime';
3
- export { RuntimeContext, useRuntimeContext, } from './context/runtime';
4
- export type { RuntimePlugin } from './plugin';
5
- export type { SSRContainer, SSRData } from './types';
1
+ export { defineRuntimeConfig } from './config.js';
2
+ export type { TRuntimeContext } from './context/runtime.js';
3
+ export { RuntimeContext, useRuntimeContext, } from './context/runtime.js';
4
+ export type { RuntimePlugin } from './plugin/index.js';
5
+ export type { SSRContainer, SSRData } from './types.js';
@@ -1,5 +1,5 @@
1
1
  import type { InternalRuntimeContext } from '@modern-js/plugin/runtime';
2
- import type { RuntimeConfig, RuntimeExtends, RuntimePlugin } from './types';
2
+ import type { RuntimeConfig, RuntimeExtends, RuntimePlugin } from './types.js';
3
3
  export type { RuntimePlugin };
4
4
  export declare function registerPlugin(internalPlugins: RuntimePlugin[], runtimeConfig?: RuntimeConfig): InternalRuntimeContext<RuntimeExtends>;
5
5
  export declare function mergeConfig(config: Record<string, any>, ...otherConfig: Record<string, any>[]): Record<string, any>;