@bleedingdev/modern-js-runtime 3.2.0-ultramodern.120 → 3.2.0-ultramodern.122

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 (203) hide show
  1. package/dist/cjs/boundary-debugger/index.js +4 -0
  2. package/dist/cjs/cli/index.js +11 -0
  3. package/dist/cjs/{router/runtime/tanstack/rsc/ClientSlot.js → core/context/extensions.js} +33 -21
  4. package/dist/cjs/{router/runtime/tanstack/rsc/SlotContext.js → core/context/helmetContext.js} +16 -20
  5. package/dist/cjs/core/context/index.js +65 -0
  6. package/dist/cjs/core/react/wrapper.js +6 -4
  7. package/dist/cjs/core/server/helmet.js +2 -1
  8. package/dist/cjs/core/server/requestHandler.js +42 -29
  9. package/dist/cjs/core/server/routerCleanup.js +110 -0
  10. package/dist/cjs/core/server/scriptOrder.js +75 -4
  11. package/dist/cjs/core/server/stream/afterTemplate.js +6 -18
  12. package/dist/cjs/core/server/stream/deferredScript.js +4 -1
  13. package/dist/cjs/core/server/string/index.js +1 -7
  14. package/dist/cjs/core/server/string/loadable.js +13 -40
  15. package/dist/cjs/core/server/string/ssrData.js +1 -1
  16. package/dist/cjs/core/server/utils.js +31 -8
  17. package/dist/cjs/exports/head.js +135 -74
  18. package/dist/cjs/exports/tanstack-router.js +36 -305
  19. package/dist/cjs/module-federation/index.js +178 -0
  20. package/dist/cjs/router/cli/code/index.js +1 -47
  21. package/dist/cjs/router/cli/code/templates.js +1 -14
  22. package/dist/cjs/router/cli/handler.js +1 -1
  23. package/dist/cjs/router/cli/index.js +2 -23
  24. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +16 -4
  25. package/dist/cjs/router/runtime/PrefetchLink.js +2 -3
  26. package/dist/cjs/router/runtime/internal.js +20 -13
  27. package/dist/cjs/router/runtime/lifecycle.js +37 -22
  28. package/dist/cjs/router/runtime/plugin.js +2 -9
  29. package/dist/cjs/router/runtime/plugin.node.js +2 -7
  30. package/dist/cjs/router/runtime/provider.js +107 -0
  31. package/dist/cjs/router/runtime/utils.js +35 -9
  32. package/dist/esm/boundary-debugger/index.mjs +4 -0
  33. package/dist/esm/cli/index.mjs +4 -2
  34. package/dist/esm/core/context/extensions.mjs +28 -0
  35. package/dist/esm/core/context/helmetContext.mjs +13 -0
  36. package/dist/esm/core/context/index.mjs +5 -0
  37. package/dist/esm/core/react/wrapper.mjs +6 -4
  38. package/dist/esm/core/server/helmet.mjs +2 -1
  39. package/dist/esm/core/server/requestHandler.mjs +43 -30
  40. package/dist/esm/core/server/routerCleanup.mjs +66 -0
  41. package/dist/esm/core/server/scriptOrder.mjs +60 -1
  42. package/dist/esm/core/server/stream/afterTemplate.mjs +8 -20
  43. package/dist/esm/core/server/stream/deferredScript.mjs +4 -1
  44. package/dist/esm/core/server/string/index.mjs +3 -9
  45. package/dist/esm/core/server/string/loadable.mjs +11 -38
  46. package/dist/esm/core/server/string/ssrData.mjs +2 -2
  47. package/dist/esm/core/server/utils.mjs +31 -8
  48. package/dist/esm/exports/head.mjs +135 -74
  49. package/dist/esm/exports/tanstack-router.mjs +30 -4
  50. package/dist/esm/module-federation/index.mjs +109 -0
  51. package/dist/esm/router/cli/code/index.mjs +1 -47
  52. package/dist/esm/router/cli/code/templates.mjs +1 -14
  53. package/dist/esm/router/cli/handler.mjs +1 -1
  54. package/dist/esm/router/cli/index.mjs +3 -24
  55. package/dist/esm/router/runtime/DeferredDataScripts.node.mjs +16 -4
  56. package/dist/esm/router/runtime/PrefetchLink.mjs +2 -3
  57. package/dist/esm/router/runtime/internal.mjs +16 -15
  58. package/dist/esm/router/runtime/lifecycle.mjs +22 -13
  59. package/dist/esm/router/runtime/plugin.mjs +4 -11
  60. package/dist/esm/router/runtime/plugin.node.mjs +4 -9
  61. package/dist/esm/router/runtime/provider.mjs +57 -0
  62. package/dist/esm/router/runtime/utils.mjs +35 -9
  63. package/dist/esm-node/boundary-debugger/index.mjs +4 -0
  64. package/dist/esm-node/cli/index.mjs +4 -2
  65. package/dist/esm-node/core/context/extensions.mjs +29 -0
  66. package/dist/esm-node/core/context/helmetContext.mjs +14 -0
  67. package/dist/esm-node/core/context/index.mjs +5 -0
  68. package/dist/esm-node/core/react/wrapper.mjs +6 -4
  69. package/dist/esm-node/core/server/helmet.mjs +2 -1
  70. package/dist/esm-node/core/server/requestHandler.mjs +43 -30
  71. package/dist/esm-node/core/server/routerCleanup.mjs +67 -0
  72. package/dist/esm-node/core/server/scriptOrder.mjs +60 -1
  73. package/dist/esm-node/core/server/stream/afterTemplate.mjs +8 -20
  74. package/dist/esm-node/core/server/stream/deferredScript.mjs +4 -1
  75. package/dist/esm-node/core/server/string/index.mjs +3 -9
  76. package/dist/esm-node/core/server/string/loadable.mjs +11 -38
  77. package/dist/esm-node/core/server/string/ssrData.mjs +2 -2
  78. package/dist/esm-node/core/server/utils.mjs +31 -8
  79. package/dist/esm-node/exports/head.mjs +135 -74
  80. package/dist/esm-node/exports/tanstack-router.mjs +30 -4
  81. package/dist/esm-node/module-federation/index.mjs +110 -0
  82. package/dist/esm-node/router/cli/code/index.mjs +1 -47
  83. package/dist/esm-node/router/cli/code/templates.mjs +1 -14
  84. package/dist/esm-node/router/cli/handler.mjs +1 -1
  85. package/dist/esm-node/router/cli/index.mjs +3 -24
  86. package/dist/esm-node/router/runtime/DeferredDataScripts.node.mjs +16 -4
  87. package/dist/esm-node/router/runtime/PrefetchLink.mjs +2 -3
  88. package/dist/esm-node/router/runtime/internal.mjs +16 -15
  89. package/dist/esm-node/router/runtime/lifecycle.mjs +22 -13
  90. package/dist/esm-node/router/runtime/plugin.mjs +4 -11
  91. package/dist/esm-node/router/runtime/plugin.node.mjs +4 -9
  92. package/dist/esm-node/router/runtime/provider.mjs +58 -0
  93. package/dist/esm-node/router/runtime/utils.mjs +35 -9
  94. package/dist/types/cli/index.d.ts +3 -1
  95. package/dist/types/core/context/extensions.d.ts +37 -0
  96. package/dist/types/core/context/helmetContext.d.ts +10 -0
  97. package/dist/types/core/context/index.d.ts +6 -0
  98. package/dist/types/core/context/runtime.d.ts +1 -11
  99. package/dist/types/core/server/routerCleanup.d.ts +28 -0
  100. package/dist/types/core/server/scriptOrder.d.ts +24 -0
  101. package/dist/types/core/server/string/loadable.d.ts +1 -7
  102. package/dist/types/core/server/utils.d.ts +1 -0
  103. package/dist/types/exports/tanstack-router.d.ts +88 -7
  104. package/dist/types/module-federation/index.d.ts +65 -0
  105. package/dist/types/router/cli/code/index.d.ts +1 -3
  106. package/dist/types/router/cli/handler.d.ts +0 -3
  107. package/dist/types/router/runtime/internal.d.ts +1 -0
  108. package/dist/types/router/runtime/lifecycle.d.ts +2 -0
  109. package/dist/types/router/runtime/plugin.d.ts +1 -1
  110. package/dist/types/router/runtime/plugin.node.d.ts +1 -1
  111. package/dist/types/router/runtime/provider.d.ts +61 -0
  112. package/package.json +16 -12
  113. package/rstest.config.mts +2 -4
  114. package/dist/cjs/router/cli/code/tanstackTypes.js +0 -447
  115. package/dist/cjs/router/runtime/tanstack/basepathRewrite.js +0 -66
  116. package/dist/cjs/router/runtime/tanstack/dataMutation.js +0 -349
  117. package/dist/cjs/router/runtime/tanstack/hydrationBoundary.js +0 -48
  118. package/dist/cjs/router/runtime/tanstack/outlet.js +0 -58
  119. package/dist/cjs/router/runtime/tanstack/plugin.js +0 -342
  120. package/dist/cjs/router/runtime/tanstack/plugin.node.js +0 -272
  121. package/dist/cjs/router/runtime/tanstack/prefetchLink.js +0 -59
  122. package/dist/cjs/router/runtime/tanstack/routeTree.js +0 -525
  123. package/dist/cjs/router/runtime/tanstack/rsc/CompositeComponent.js +0 -79
  124. package/dist/cjs/router/runtime/tanstack/rsc/ReplayableStream.js +0 -146
  125. package/dist/cjs/router/runtime/tanstack/rsc/RscNodeRenderer.js +0 -69
  126. package/dist/cjs/router/runtime/tanstack/rsc/client.js +0 -97
  127. package/dist/cjs/router/runtime/tanstack/rsc/createRscProxy.js +0 -145
  128. package/dist/cjs/router/runtime/tanstack/rsc/index.js +0 -46
  129. package/dist/cjs/router/runtime/tanstack/rsc/server.js +0 -250
  130. package/dist/cjs/router/runtime/tanstack/rsc/slotUsageSanitizer.js +0 -69
  131. package/dist/cjs/router/runtime/tanstack/rsc/symbols.js +0 -77
  132. package/dist/cjs/ssr/index.node.js +0 -125
  133. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -88
  134. package/dist/cjs/ssr/serverRender/renderToString/entry.js +0 -200
  135. package/dist/cjs/ssr/serverRender/types.js +0 -40
  136. package/dist/esm/router/cli/code/tanstackTypes.mjs +0 -396
  137. package/dist/esm/router/runtime/tanstack/basepathRewrite.mjs +0 -28
  138. package/dist/esm/router/runtime/tanstack/dataMutation.mjs +0 -305
  139. package/dist/esm/router/runtime/tanstack/hydrationBoundary.mjs +0 -10
  140. package/dist/esm/router/runtime/tanstack/outlet.mjs +0 -17
  141. package/dist/esm/router/runtime/tanstack/plugin.mjs +0 -304
  142. package/dist/esm/router/runtime/tanstack/plugin.node.mjs +0 -234
  143. package/dist/esm/router/runtime/tanstack/prefetchLink.mjs +0 -18
  144. package/dist/esm/router/runtime/tanstack/routeTree.mjs +0 -481
  145. package/dist/esm/router/runtime/tanstack/rsc/ClientSlot.mjs +0 -19
  146. package/dist/esm/router/runtime/tanstack/rsc/CompositeComponent.mjs +0 -41
  147. package/dist/esm/router/runtime/tanstack/rsc/ReplayableStream.mjs +0 -104
  148. package/dist/esm/router/runtime/tanstack/rsc/RscNodeRenderer.mjs +0 -31
  149. package/dist/esm/router/runtime/tanstack/rsc/SlotContext.mjs +0 -17
  150. package/dist/esm/router/runtime/tanstack/rsc/client.mjs +0 -53
  151. package/dist/esm/router/runtime/tanstack/rsc/createRscProxy.mjs +0 -107
  152. package/dist/esm/router/runtime/tanstack/rsc/index.mjs +0 -1
  153. package/dist/esm/router/runtime/tanstack/rsc/server.mjs +0 -200
  154. package/dist/esm/router/runtime/tanstack/rsc/slotUsageSanitizer.mjs +0 -31
  155. package/dist/esm/router/runtime/tanstack/rsc/symbols.mjs +0 -17
  156. package/dist/esm/ssr/index.node.mjs +0 -44
  157. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.mjs +0 -50
  158. package/dist/esm/ssr/serverRender/renderToString/entry.mjs +0 -151
  159. package/dist/esm/ssr/serverRender/types.mjs +0 -1
  160. package/dist/esm-node/router/cli/code/tanstackTypes.mjs +0 -397
  161. package/dist/esm-node/router/runtime/tanstack/basepathRewrite.mjs +0 -29
  162. package/dist/esm-node/router/runtime/tanstack/dataMutation.mjs +0 -306
  163. package/dist/esm-node/router/runtime/tanstack/hydrationBoundary.mjs +0 -11
  164. package/dist/esm-node/router/runtime/tanstack/outlet.mjs +0 -18
  165. package/dist/esm-node/router/runtime/tanstack/plugin.mjs +0 -305
  166. package/dist/esm-node/router/runtime/tanstack/plugin.node.mjs +0 -235
  167. package/dist/esm-node/router/runtime/tanstack/prefetchLink.mjs +0 -19
  168. package/dist/esm-node/router/runtime/tanstack/routeTree.mjs +0 -482
  169. package/dist/esm-node/router/runtime/tanstack/rsc/ClientSlot.mjs +0 -20
  170. package/dist/esm-node/router/runtime/tanstack/rsc/CompositeComponent.mjs +0 -42
  171. package/dist/esm-node/router/runtime/tanstack/rsc/ReplayableStream.mjs +0 -105
  172. package/dist/esm-node/router/runtime/tanstack/rsc/RscNodeRenderer.mjs +0 -32
  173. package/dist/esm-node/router/runtime/tanstack/rsc/SlotContext.mjs +0 -18
  174. package/dist/esm-node/router/runtime/tanstack/rsc/client.mjs +0 -54
  175. package/dist/esm-node/router/runtime/tanstack/rsc/createRscProxy.mjs +0 -108
  176. package/dist/esm-node/router/runtime/tanstack/rsc/index.mjs +0 -2
  177. package/dist/esm-node/router/runtime/tanstack/rsc/server.mjs +0 -201
  178. package/dist/esm-node/router/runtime/tanstack/rsc/slotUsageSanitizer.mjs +0 -32
  179. package/dist/esm-node/router/runtime/tanstack/rsc/symbols.mjs +0 -18
  180. package/dist/esm-node/ssr/index.node.mjs +0 -45
  181. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.mjs +0 -51
  182. package/dist/esm-node/ssr/serverRender/renderToString/entry.mjs +0 -152
  183. package/dist/esm-node/ssr/serverRender/types.mjs +0 -2
  184. package/dist/types/router/cli/code/tanstackTypes.d.ts +0 -10
  185. package/dist/types/router/runtime/tanstack/basepathRewrite.d.ts +0 -8
  186. package/dist/types/router/runtime/tanstack/dataMutation.d.ts +0 -29
  187. package/dist/types/router/runtime/tanstack/hydrationBoundary.d.ts +0 -2
  188. package/dist/types/router/runtime/tanstack/outlet.d.ts +0 -2
  189. package/dist/types/router/runtime/tanstack/plugin.d.ts +0 -6
  190. package/dist/types/router/runtime/tanstack/plugin.node.d.ts +0 -6
  191. package/dist/types/router/runtime/tanstack/prefetchLink.d.ts +0 -11
  192. package/dist/types/router/runtime/tanstack/routeTree.d.ts +0 -8
  193. package/dist/types/router/runtime/tanstack/rsc/ClientSlot.d.ts +0 -5
  194. package/dist/types/router/runtime/tanstack/rsc/CompositeComponent.d.ts +0 -3
  195. package/dist/types/router/runtime/tanstack/rsc/ReplayableStream.d.ts +0 -24
  196. package/dist/types/router/runtime/tanstack/rsc/RscNodeRenderer.d.ts +0 -5
  197. package/dist/types/router/runtime/tanstack/rsc/SlotContext.d.ts +0 -11
  198. package/dist/types/router/runtime/tanstack/rsc/client.d.ts +0 -11
  199. package/dist/types/router/runtime/tanstack/rsc/createRscProxy.d.ts +0 -7
  200. package/dist/types/router/runtime/tanstack/rsc/index.d.ts +0 -2
  201. package/dist/types/router/runtime/tanstack/rsc/server.d.ts +0 -14
  202. package/dist/types/router/runtime/tanstack/rsc/slotUsageSanitizer.d.ts +0 -2
  203. package/dist/types/router/runtime/tanstack/rsc/symbols.d.ts +0 -46
@@ -53,26 +53,6 @@ const utils_namespaceObject = require("@modern-js/utils");
53
53
  const external_constants_js_namespaceObject = require("./constants.js");
54
54
  const external_entry_js_namespaceObject = require("./entry.js");
55
55
  const external_handler_js_namespaceObject = require("./handler.js");
56
- const JS_OR_TS_EXTS = [
57
- '.js',
58
- '.jsx',
59
- '.ts',
60
- '.tsx',
61
- '.mjs',
62
- '.mts',
63
- '.cjs',
64
- '.cts'
65
- ];
66
- function hasRouterConfigInRuntimeFile(runtimeConfigBase) {
67
- const runtimeConfigFile = (0, utils_namespaceObject.findExists)(JS_OR_TS_EXTS.map((ext)=>`${runtimeConfigBase}${ext}`));
68
- if (!runtimeConfigFile) return false;
69
- try {
70
- const content = utils_namespaceObject.fs.readFileSync(runtimeConfigFile, 'utf-8');
71
- return /router\s*:/.test(content);
72
- } catch {
73
- return false;
74
- }
75
- }
76
56
  function isBuiltInRouteEntrypoint(entrypoint) {
77
57
  const entrypointRoutesOwner = (0, external_entry_js_namespaceObject.getEntrypointRoutesOwner)(entrypoint);
78
58
  if (entrypointRoutesOwner) return entrypointRoutesOwner === external_entry_js_namespaceObject.BUILT_IN_ROUTES_OWNER;
@@ -102,12 +82,11 @@ const routerPlugin = ()=>({
102
82
  });
103
83
  });
104
84
  api._internalRuntimePlugins(({ entrypoint, plugins })=>{
105
- const { serverRoutes, metaName, srcDirectory, runtimeConfigFile } = api.getAppContext();
85
+ const { serverRoutes, metaName } = api.getAppContext();
106
86
  const normalizedConfig = api.getNormalizedConfig();
107
87
  const hasUserRouterConfig = normalizedConfig.router && Object.keys(normalizedConfig.router).length > 0;
108
- const hasRuntimeRouterConfig = hasRouterConfigInRuntimeFile(external_node_path_default().join(srcDirectory, runtimeConfigFile));
109
88
  const serverBase = serverRoutes.filter((route)=>route.entryName === entrypoint.entryName).map((route)=>route.urlPath).sort((a, b)=>a.length - b.length > 0 ? -1 : 1);
110
- const shouldInstallBuiltInRouter = isBuiltInRouteEntrypoint(entrypoint) || !isPluginOwnedRouteEntrypoint(entrypoint) && (hasUserRouterConfig || hasRuntimeRouterConfig);
89
+ const shouldInstallBuiltInRouter = isBuiltInRouteEntrypoint(entrypoint) || !isPluginOwnedRouteEntrypoint(entrypoint) && hasUserRouterConfig;
111
90
  if (shouldInstallBuiltInRouter) plugins.push({
112
91
  name: 'router',
113
92
  path: `@${metaName}/runtime/router/internal`,
@@ -36,6 +36,21 @@ const external_react_namespaceObject = require("react");
36
36
  const constants_js_namespaceObject = require("../../core/constants.js");
37
37
  const external_constants_js_namespaceObject = require("./constants.js");
38
38
  const external_utils_js_namespaceObject = require("./utils.js");
39
+ function toDeferredErrorInfo(error) {
40
+ if ('production' === process.env.NODE_ENV) return {
41
+ message: 'Unexpected Server Error'
42
+ };
43
+ if (error && 'object' == typeof error) {
44
+ const maybeMessage = error.message;
45
+ return {
46
+ message: 'string' == typeof maybeMessage ? maybeMessage : String(maybeMessage ?? error),
47
+ stack: error.stack
48
+ };
49
+ }
50
+ return {
51
+ message: String(error)
52
+ };
53
+ }
39
54
  const DeferredDataScripts = (props)=>{
40
55
  const staticContext = props?.context;
41
56
  const useJsonScript = props?.useJsonScript;
@@ -71,10 +86,7 @@ const DeferredDataScripts = (props)=>{
71
86
  {
72
87
  const trackedPromise = deferredData.data[key];
73
88
  if (void 0 !== trackedPromise._error) {
74
- const error = {
75
- message: trackedPromise._error.message,
76
- stack: 'production' !== process.env.NODE_ENV ? trackedPromise._error.stack : void 0
77
- };
89
+ const error = toDeferredErrorInfo(trackedPromise._error);
78
90
  return {
79
91
  key,
80
92
  routerDataFnName: 'p',
@@ -54,7 +54,6 @@ function composeEventHandlers(theirHandler, ourHandler) {
54
54
  }
55
55
  const ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
56
56
  const DEFAULT_PREFETCH_BEHAVIOR = 'render';
57
- const DEFAULT_PRELOAD_BEHAVIOR = 'viewport';
58
57
  const INTENT_DELAY = 100;
59
58
  const VIEWPORT_ROOT_MARGIN = '200px';
60
59
  const MAX_CONCURRENT_WARMUPS = 4;
@@ -119,7 +118,7 @@ const setRef = (ref, value)=>{
119
118
  };
120
119
  const isDataWarmupEnabled = (route)=>{
121
120
  const handle = route.handle;
122
- return handle?.navigationWarmup?.data === true;
121
+ return handle?.navigationWarmup?.data !== false;
123
122
  };
124
123
  function usePrefetchBehavior(prefetch, preload, theirElementProps) {
125
124
  const [maybeWarmup, setMaybeWarmup] = external_react_default().useState(false);
@@ -293,7 +292,7 @@ const normalizePreloadBehavior = (preload, prefetch)=>{
293
292
  if (false === preload || 'none' === preload) return 'none';
294
293
  if (void 0 !== preload) return preload;
295
294
  if ('none' === prefetch) return 'none';
296
- return DEFAULT_PRELOAD_BEHAVIOR;
295
+ return prefetch;
297
296
  };
298
297
  const createPrefetchLink = (Link)=>/*#__PURE__*/ external_react_default().forwardRef(({ to, prefetch = DEFAULT_PREFETCH_BEHAVIOR, preload, ...props }, forwardedRef)=>{
299
298
  const isAbsolute = 'string' == typeof to && ABSOLUTE_URL_REGEX.test(to);
@@ -30,40 +30,47 @@ __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
31
  default: ()=>internal,
32
32
  modifyRoutes: ()=>external_plugin_js_namespaceObject.modifyRoutes,
33
+ registerRouterProvider: ()=>external_provider_js_namespaceObject.registerRouterProvider,
33
34
  renderRoutes: ()=>external_utils_js_namespaceObject.renderRoutes,
35
+ resolveRouterProvider: ()=>external_provider_js_namespaceObject.resolveRouterProvider,
34
36
  routerPlugin: ()=>routerPlugin
35
37
  });
36
38
  const merge_namespaceObject = require("@modern-js/runtime-utils/merge");
37
- const external_hooks_js_namespaceObject = require("./hooks.js");
38
39
  const external_plugin_js_namespaceObject = require("./plugin.js");
39
- const plugin_js_namespaceObject = require("./tanstack/plugin.js");
40
+ const external_provider_js_namespaceObject = require("./provider.js");
40
41
  const external_utils_js_namespaceObject = require("./utils.js");
42
+ (0, external_provider_js_namespaceObject.registerRouterProvider)('react-router', external_plugin_js_namespaceObject.routerPlugin, {
43
+ isDefault: true
44
+ });
41
45
  const routerPlugin = (userConfig = {})=>({
42
46
  name: '@modern-js/plugin-router',
43
- registryHooks: {
44
- onAfterCreateRouter: external_hooks_js_namespaceObject.onAfterCreateRouter,
45
- onAfterHydrateRouter: external_hooks_js_namespaceObject.onAfterHydrateRouter,
46
- onBeforeCreateRouter: external_hooks_js_namespaceObject.onBeforeCreateRouter,
47
- modifyRoutes: external_hooks_js_namespaceObject.modifyRoutes,
48
- onBeforeCreateRoutes: external_hooks_js_namespaceObject.onBeforeCreateRoutes,
49
- onBeforeHydrateRouter: external_hooks_js_namespaceObject.onBeforeHydrateRouter
50
- },
47
+ registryHooks: external_provider_js_namespaceObject.routerProviderRegistryHooks,
51
48
  setup: (api)=>{
52
49
  const mergedConfig = (0, merge_namespaceObject.merge)(api.getRuntimeConfig().router || {}, userConfig);
53
- const framework = mergedConfig.framework || 'react-router';
54
- const pluginFactory = 'tanstack' === framework ? plugin_js_namespaceObject.tanstackRouterPlugin : external_plugin_js_namespaceObject.routerPlugin;
55
- pluginFactory(userConfig).setup?.(api);
50
+ const pluginFactory = (0, external_provider_js_namespaceObject.resolveRouterProvider)(mergedConfig.framework, {
51
+ localDefault: {
52
+ name: 'react-router',
53
+ factory: external_plugin_js_namespaceObject.routerPlugin
54
+ }
55
+ });
56
+ const providerPlugin = pluginFactory(userConfig);
57
+ (0, external_provider_js_namespaceObject.reportUnsupportedProviderRegistryHooks)(providerPlugin);
58
+ providerPlugin.setup?.(api);
56
59
  }
57
60
  });
58
61
  const internal = routerPlugin;
59
62
  exports["default"] = __webpack_exports__["default"];
60
63
  exports.modifyRoutes = __webpack_exports__.modifyRoutes;
64
+ exports.registerRouterProvider = __webpack_exports__.registerRouterProvider;
61
65
  exports.renderRoutes = __webpack_exports__.renderRoutes;
66
+ exports.resolveRouterProvider = __webpack_exports__.resolveRouterProvider;
62
67
  exports.routerPlugin = __webpack_exports__.routerPlugin;
63
68
  for(var __rspack_i in __webpack_exports__)if (-1 === [
64
69
  "default",
65
70
  "modifyRoutes",
71
+ "registerRouterProvider",
66
72
  "renderRoutes",
73
+ "resolveRouterProvider",
67
74
  "routerPlugin"
68
75
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
69
76
  Object.defineProperty(exports, '__esModule', {
@@ -27,6 +27,26 @@ var __webpack_require__ = {};
27
27
  })();
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ applyRouterRuntimeState: ()=>applyRouterRuntimeState,
32
+ applyRouterServerPrepareResult: ()=>applyRouterServerPrepareResult,
33
+ cleanupRouterRuntimeState: ()=>cleanupRouterRuntimeState,
34
+ createRouterRuntimeState: ()=>createRouterRuntimeState,
35
+ createRouterServerSnapshot: ()=>createRouterServerSnapshot,
36
+ getRouterHydrationScripts: ()=>getRouterHydrationScripts,
37
+ getRouterMatchedRouteIds: ()=>getRouterMatchedRouteIds,
38
+ getRouterRuntimeState: ()=>getRouterRuntimeState,
39
+ getRouterServerSnapshot: ()=>getRouterServerSnapshot
40
+ });
41
+ const extensions_js_namespaceObject = require("../../core/context/extensions.js");
42
+ const routerRuntimeStateExtension = (0, extensions_js_namespaceObject.createRuntimeContextExtension)('@modern-js/runtime:router-runtime-state');
43
+ const routerServerSnapshotExtension = (0, extensions_js_namespaceObject.createRuntimeContextExtension)('@modern-js/runtime:router-server-snapshot');
44
+ function getRouterRuntimeState(runtimeContext) {
45
+ return routerRuntimeStateExtension.get(runtimeContext);
46
+ }
47
+ function getRouterServerSnapshot(runtimeContext) {
48
+ return routerServerSnapshotExtension.get(runtimeContext);
49
+ }
30
50
  function toHydrationScripts(state) {
31
51
  if (state.hydrationScripts?.length) return state.hydrationScripts;
32
52
  return state.hydrationScript ? [
@@ -90,12 +110,8 @@ function createRouterRuntimeState(state) {
90
110
  }
91
111
  function applyRouterRuntimeState(runtimeContext, state) {
92
112
  const normalized = createRouterRuntimeState(state);
93
- runtimeContext.routerFramework = normalized.framework;
94
- runtimeContext.routerInstance = normalized.instance;
95
- runtimeContext.routerHydrationScript = normalized.hydrationScript;
96
- runtimeContext.routerMatchedRouteIds = normalized.matchedRouteIds;
97
- runtimeContext.routerRuntime = normalized;
98
- if (normalized.serverSnapshot) runtimeContext.routerServerSnapshot = normalized.serverSnapshot;
113
+ routerRuntimeStateExtension.set(runtimeContext, normalized);
114
+ if (normalized.serverSnapshot) routerServerSnapshotExtension.set(runtimeContext, normalized.serverSnapshot);
99
115
  return runtimeContext;
100
116
  }
101
117
  function applyRouterServerPrepareResult(runtimeContext, result) {
@@ -108,29 +124,24 @@ function applyRouterServerPrepareResult(runtimeContext, result) {
108
124
  return runtimeContext;
109
125
  }
110
126
  function getRouterHydrationScripts(runtimeContext) {
111
- return runtimeContext.routerServerSnapshot?.hydrationScripts ?? toHydrationScripts({
112
- hydrationScript: runtimeContext.routerServerSnapshot?.hydrationScript
113
- }) ?? runtimeContext.routerRuntime?.hydrationScripts ?? toHydrationScripts({
114
- hydrationScript: runtimeContext.routerRuntime?.hydrationScript ?? runtimeContext.routerHydrationScript
127
+ const serverSnapshot = getRouterServerSnapshot(runtimeContext);
128
+ const runtimeState = getRouterRuntimeState(runtimeContext);
129
+ return serverSnapshot?.hydrationScripts ?? toHydrationScripts({
130
+ hydrationScript: serverSnapshot?.hydrationScript
131
+ }) ?? runtimeState?.hydrationScripts ?? toHydrationScripts({
132
+ hydrationScript: runtimeState?.hydrationScript
115
133
  }) ?? [];
116
134
  }
117
135
  function getRouterMatchedRouteIds(runtimeContext) {
118
- return runtimeContext.routerServerSnapshot?.matchedRouteIds ?? getMatchedRouteIdsFromMatches(runtimeContext.routerServerSnapshot?.matches) ?? runtimeContext.routerRuntime?.matchedRouteIds ?? getMatchedRouteIdsFromMatches(runtimeContext.routerRuntime?.matches) ?? runtimeContext.routerMatchedRouteIds;
136
+ const serverSnapshot = getRouterServerSnapshot(runtimeContext);
137
+ const runtimeState = getRouterRuntimeState(runtimeContext);
138
+ return serverSnapshot?.matchedRouteIds ?? getMatchedRouteIdsFromMatches(serverSnapshot?.matches) ?? runtimeState?.matchedRouteIds ?? getMatchedRouteIdsFromMatches(runtimeState?.matches);
119
139
  }
120
140
  async function cleanupRouterRuntimeState(runtimeContext) {
121
141
  try {
122
- await runtimeContext.routerRuntime?.cleanup?.();
142
+ await getRouterRuntimeState(runtimeContext)?.cleanup?.();
123
143
  } catch {}
124
144
  }
125
- __webpack_require__.d(__webpack_exports__, {
126
- applyRouterRuntimeState: ()=>applyRouterRuntimeState,
127
- applyRouterServerPrepareResult: ()=>applyRouterServerPrepareResult,
128
- cleanupRouterRuntimeState: ()=>cleanupRouterRuntimeState,
129
- createRouterRuntimeState: ()=>createRouterRuntimeState,
130
- createRouterServerSnapshot: ()=>createRouterServerSnapshot,
131
- getRouterHydrationScripts: ()=>getRouterHydrationScripts,
132
- getRouterMatchedRouteIds: ()=>getRouterMatchedRouteIds
133
- });
134
145
  exports.applyRouterRuntimeState = __webpack_exports__.applyRouterRuntimeState;
135
146
  exports.applyRouterServerPrepareResult = __webpack_exports__.applyRouterServerPrepareResult;
136
147
  exports.cleanupRouterRuntimeState = __webpack_exports__.cleanupRouterRuntimeState;
@@ -138,6 +149,8 @@ exports.createRouterRuntimeState = __webpack_exports__.createRouterRuntimeState;
138
149
  exports.createRouterServerSnapshot = __webpack_exports__.createRouterServerSnapshot;
139
150
  exports.getRouterHydrationScripts = __webpack_exports__.getRouterHydrationScripts;
140
151
  exports.getRouterMatchedRouteIds = __webpack_exports__.getRouterMatchedRouteIds;
152
+ exports.getRouterRuntimeState = __webpack_exports__.getRouterRuntimeState;
153
+ exports.getRouterServerSnapshot = __webpack_exports__.getRouterServerSnapshot;
141
154
  for(var __rspack_i in __webpack_exports__)if (-1 === [
142
155
  "applyRouterRuntimeState",
143
156
  "applyRouterServerPrepareResult",
@@ -145,7 +158,9 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
145
158
  "createRouterRuntimeState",
146
159
  "createRouterServerSnapshot",
147
160
  "getRouterHydrationScripts",
148
- "getRouterMatchedRouteIds"
161
+ "getRouterMatchedRouteIds",
162
+ "getRouterRuntimeState",
163
+ "getRouterServerSnapshot"
149
164
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
150
165
  Object.defineProperty(exports, '__esModule', {
151
166
  value: true
@@ -39,8 +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_hooks_js_namespaceObject = require("./hooks.js");
43
42
  const external_lifecycle_js_namespaceObject = require("./lifecycle.js");
43
+ const external_provider_js_namespaceObject = require("./provider.js");
44
44
  const external_rsc_router_js_namespaceObject = require("./rsc-router.js");
45
45
  const external_utils_js_namespaceObject = require("./utils.js");
46
46
  let finalRouteConfig = {
@@ -56,14 +56,7 @@ function modifyRoutes(modifyFunction) {
56
56
  }
57
57
  const routerPlugin = (userConfig = {})=>({
58
58
  name: '@modern-js/plugin-router',
59
- registryHooks: {
60
- onAfterCreateRouter: external_hooks_js_namespaceObject.onAfterCreateRouter,
61
- onAfterHydrateRouter: external_hooks_js_namespaceObject.onAfterHydrateRouter,
62
- onBeforeCreateRouter: external_hooks_js_namespaceObject.onBeforeCreateRouter,
63
- modifyRoutes: external_hooks_js_namespaceObject.modifyRoutes,
64
- onBeforeCreateRoutes: external_hooks_js_namespaceObject.onBeforeCreateRoutes,
65
- onBeforeHydrateRouter: external_hooks_js_namespaceObject.onBeforeHydrateRouter
66
- },
59
+ registryHooks: external_provider_js_namespaceObject.routerProviderRegistryHooks,
67
60
  setup: (api)=>{
68
61
  const routesContainer = {
69
62
  current: []
@@ -51,8 +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_hooks_js_namespaceObject = require("./hooks.js");
55
54
  const external_lifecycle_js_namespaceObject = require("./lifecycle.js");
55
+ const external_provider_js_namespaceObject = require("./provider.js");
56
56
  const external_rsc_router_js_namespaceObject = require("./rsc-router.js");
57
57
  const external_utils_js_namespaceObject = require("./utils.js");
58
58
  function createRemixRequest(request) {
@@ -85,12 +85,7 @@ function createReactRouterServerSnapshot(routerContext, basename) {
85
85
  }
86
86
  const routerPlugin = (userConfig = {})=>({
87
87
  name: '@modern-js/plugin-router',
88
- registryHooks: {
89
- onAfterCreateRouter: external_hooks_js_namespaceObject.onAfterCreateRouter,
90
- onBeforeCreateRouter: external_hooks_js_namespaceObject.onBeforeCreateRouter,
91
- modifyRoutes: external_hooks_js_namespaceObject.modifyRoutes,
92
- onBeforeCreateRoutes: external_hooks_js_namespaceObject.onBeforeCreateRoutes
93
- },
88
+ registryHooks: external_provider_js_namespaceObject.routerProviderRegistryHooks,
94
89
  setup: (api)=>{
95
90
  let finalRouteConfig = {};
96
91
  api.onBeforeRender(async (context, interrupt)=>{
@@ -0,0 +1,107 @@
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
+ registerRouterProvider: ()=>registerRouterProvider,
32
+ reportUnsupportedProviderRegistryHooks: ()=>reportUnsupportedProviderRegistryHooks,
33
+ resolveRouterProvider: ()=>resolveRouterProvider,
34
+ routerProviderRegistryHooks: ()=>routerProviderRegistryHooks,
35
+ unsafe_resetRouterProvidersForTesting: ()=>unsafe_resetRouterProvidersForTesting
36
+ });
37
+ const external_hooks_js_namespaceObject = require("./hooks.js");
38
+ const routerProviderRegistryHooks = {
39
+ modifyRoutes: external_hooks_js_namespaceObject.modifyRoutes,
40
+ onBeforeCreateRoutes: external_hooks_js_namespaceObject.onBeforeCreateRoutes,
41
+ onBeforeCreateRouter: external_hooks_js_namespaceObject.onBeforeCreateRouter,
42
+ onAfterCreateRouter: external_hooks_js_namespaceObject.onAfterCreateRouter,
43
+ onBeforeHydrateRouter: external_hooks_js_namespaceObject.onBeforeHydrateRouter,
44
+ onAfterHydrateRouter: external_hooks_js_namespaceObject.onAfterHydrateRouter
45
+ };
46
+ function reportUnsupportedProviderRegistryHooks(providerPlugin) {
47
+ const unsupportedHookNames = Object.keys(providerPlugin.registryHooks ?? {}).filter((hookName)=>!(hookName in routerProviderRegistryHooks));
48
+ if (unsupportedHookNames.length > 0) console.warn(`[@modern-js/runtime] The router provider "${providerPlugin.name}" declares registry hooks outside the router hook contract: ${unsupportedHookNames.join(', ')}. These hooks are not registered when the provider is resolved through \`runtime.router.framework\` — declare them on a separate runtime plugin instead.`);
49
+ return unsupportedHookNames;
50
+ }
51
+ const REGISTRY_SLOT = Symbol.for('@modern-js/runtime:router-providers:v2');
52
+ function getRegistry() {
53
+ const host = globalThis;
54
+ host[REGISTRY_SLOT] ??= {
55
+ providers: new Map(),
56
+ warnedDuplicates: new Set()
57
+ };
58
+ host[REGISTRY_SLOT].warnedDuplicates ??= new Set();
59
+ return host[REGISTRY_SLOT];
60
+ }
61
+ function registerRouterProvider(name, factory, options = {}) {
62
+ const registry = getRegistry();
63
+ const existing = registry.providers.get(name);
64
+ if (void 0 !== existing) {
65
+ if (existing !== factory && !registry.warnedDuplicates.has(name)) {
66
+ registry.warnedDuplicates.add(name);
67
+ console.warn(`[@modern-js/runtime] The router provider "${name}" was registered more than once with different module instances; keeping the first registration. This usually means two copies of the providing plugin were bundled — for Module Federation, add the provider runtime (e.g. '@modern-js/plugin-tanstack/runtime') to the shared modules of both the host and the remote to deduplicate it.`);
68
+ }
69
+ return;
70
+ }
71
+ if (true !== options.isDefault) {
72
+ if (void 0 !== registry.nonDefaultProvider && registry.nonDefaultProvider !== name) throw new Error(`[@modern-js/runtime] Cannot register router provider "${name}": the competing router provider "${registry.nonDefaultProvider}" is already registered. Only one non-default router provider may be installed at a time — remove one of the router plugins.`);
73
+ registry.nonDefaultProvider = name;
74
+ } else registry.defaultProvider = name;
75
+ registry.providers.set(name, factory);
76
+ }
77
+ function resolveRouterProvider(framework, options = {}) {
78
+ const registry = getRegistry();
79
+ const name = framework || registry.defaultProvider || options.localDefault?.name;
80
+ if (void 0 === name) throw new Error('[@modern-js/runtime] No default router provider is registered. This is a bug in the runtime setup.');
81
+ if (void 0 !== options.localDefault && name === options.localDefault.name) return options.localDefault.factory;
82
+ const factory = registry.providers.get(name);
83
+ if (void 0 !== factory) return factory;
84
+ if ('tanstack' === name) throw new Error("[@modern-js/runtime] `runtime.router.framework` is set to \"tanstack\", but no TanStack router provider is registered. Install @modern-js/plugin-tanstack, add `tanstackRouterPlugin()` to the `plugins` array in modern.config.ts, and make sure '@modern-js/plugin-tanstack/runtime' is imported (e.g. in modern.runtime.ts).");
85
+ throw new Error(`[@modern-js/runtime] Unknown router framework "${name}". Registered providers: ${[
86
+ ...registry.providers.keys()
87
+ ].join(', ') || '(none)'}. Install and register the plugin that provides this router framework.`);
88
+ }
89
+ function unsafe_resetRouterProvidersForTesting() {
90
+ const host = globalThis;
91
+ delete host[REGISTRY_SLOT];
92
+ }
93
+ exports.registerRouterProvider = __webpack_exports__.registerRouterProvider;
94
+ exports.reportUnsupportedProviderRegistryHooks = __webpack_exports__.reportUnsupportedProviderRegistryHooks;
95
+ exports.resolveRouterProvider = __webpack_exports__.resolveRouterProvider;
96
+ exports.routerProviderRegistryHooks = __webpack_exports__.routerProviderRegistryHooks;
97
+ exports.unsafe_resetRouterProvidersForTesting = __webpack_exports__.unsafe_resetRouterProvidersForTesting;
98
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
99
+ "registerRouterProvider",
100
+ "reportUnsupportedProviderRegistryHooks",
101
+ "resolveRouterProvider",
102
+ "routerProviderRegistryHooks",
103
+ "unsafe_resetRouterProvidersForTesting"
104
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
105
+ Object.defineProperty(exports, '__esModule', {
106
+ value: true
107
+ });
@@ -149,7 +149,10 @@ function getRouteObjects(routes, { globalApp, ssrMode, props }) {
149
149
  }
150
150
  routeObjects.push({
151
151
  path: '*',
152
- element: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DefaultNotFound_js_namespaceObject.DefaultNotFound, {})
152
+ element: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DefaultNotFound_js_namespaceObject.DefaultNotFound, {}),
153
+ loader: ()=>new Response('404', {
154
+ status: 404
155
+ })
153
156
  });
154
157
  return routeObjects;
155
158
  }
@@ -198,17 +201,40 @@ function serializeErrors(errors) {
198
201
  if (!errors) return null;
199
202
  const entries = Object.entries(errors);
200
203
  const serialized = {};
201
- for (const [key, val] of entries)if ((0, router_namespaceObject.isRouteErrorResponse)(val)) serialized[key] = {
202
- ...val,
203
- __type: 'RouteErrorResponse'
204
+ for (const [key, val] of entries)if ((0, router_namespaceObject.isRouteErrorResponse)(val)) serialized[key] = serializeRouteErrorResponse(val);
205
+ else if (val instanceof Error) serialized[key] = serializeError(val);
206
+ else serialized[key] = val;
207
+ return serialized;
208
+ }
209
+ function shouldRedactServerError() {
210
+ return 'development' !== process.env.NODE_ENV && 'test' !== process.env.NODE_ENV;
211
+ }
212
+ function serializeError(error) {
213
+ if (shouldRedactServerError()) return {
214
+ message: 'Unexpected Server Error',
215
+ stack: void 0,
216
+ __type: 'Error'
204
217
  };
205
- else if (val instanceof Error) serialized[key] = {
206
- message: val.message,
207
- stack: val.stack,
218
+ return {
219
+ message: error.message,
220
+ stack: error.stack,
208
221
  __type: 'Error'
209
222
  };
210
- else serialized[key] = val;
211
- return serialized;
223
+ }
224
+ function serializeRouteErrorResponse(error) {
225
+ if (!(0, router_namespaceObject.isRouteErrorResponse)(error)) return error;
226
+ if (error.status >= 500 && shouldRedactServerError()) return {
227
+ status: error.status,
228
+ statusText: 'Internal Server Error',
229
+ data: 'Unexpected Server Error',
230
+ __type: 'RouteErrorResponse'
231
+ };
232
+ return {
233
+ status: error.status,
234
+ statusText: error.statusText,
235
+ data: error.data,
236
+ __type: 'RouteErrorResponse'
237
+ };
212
238
  }
213
239
  function deserializeErrors(errors) {
214
240
  if (!errors) return null;
@@ -196,9 +196,13 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
196
196
  enabled ? /*#__PURE__*/ jsx("div", {
197
197
  "aria-hidden": "true",
198
198
  children: boxes.map((box)=>/*#__PURE__*/ jsx("div", {
199
+ "data-modern-boundary-overlay": "",
200
+ "data-modern-boundary-overlay-id": box.id,
201
+ "data-modern-boundary-overlay-label": box.label,
199
202
  style: {
200
203
  border: `2px solid ${box.color}`,
201
204
  borderRadius: 8,
205
+ boxSizing: 'border-box',
202
206
  boxShadow: `0 0 0 1px rgba(255,255,255,.72), 0 6px 20px color-mix(in srgb, ${box.color} 20%, transparent)`,
203
207
  height: box.height,
204
208
  left: box.left,
@@ -1,7 +1,7 @@
1
1
  import { cleanRequireCache, isReact18 as utils_isReact18 } from "@modern-js/utils";
2
2
  import path_0 from "path";
3
3
  import { documentPlugin } from "../document/cli/index.mjs";
4
- import { getEntrypointRoutesDir, handleFileChange, handleGeneratorEntryCode, handleModifyEntrypoints, isRouteEntry, routerPlugin } from "../router/cli/index.mjs";
4
+ import { getEntrypointRoutesDir, getEntrypointRoutesOwner, handleFileChange, handleGeneratorEntryCode, handleModifyEntrypoints, isRouteEntry, routerPlugin } from "../router/cli/index.mjs";
5
5
  import { builderPluginAlias } from "./alias.mjs";
6
6
  import { generateCode } from "./code.mjs";
7
7
  import { ENTRY_BOOTSTRAP_FILE_NAME, ENTRY_POINT_FILE_NAME } from "./constants.mjs";
@@ -89,5 +89,7 @@ const runtimePlugin = (params)=>({
89
89
  }
90
90
  });
91
91
  const cli = runtimePlugin;
92
+ export { makeLegalIdentifier } from "../router/cli/code/makeLegalIdentifier.mjs";
93
+ export { getPathWithoutExt } from "../router/cli/code/utils.mjs";
92
94
  export default cli;
93
- export { documentPlugin, getEntrypointRoutesDir, handleFileChange, handleGeneratorEntryCode, handleModifyEntrypoints, isRouteEntry, isRuntimeEntry, routerPlugin, runtimePlugin, ssrPlugin };
95
+ export { documentPlugin, getEntrypointRoutesDir, getEntrypointRoutesOwner, handleFileChange, handleGeneratorEntryCode, handleModifyEntrypoints, isRouteEntry, isRuntimeEntry, routerPlugin, runtimePlugin, ssrPlugin };
@@ -0,0 +1,28 @@
1
+ const EXTENSIONS_SLOT = Symbol.for('@modern-js/runtime:context-extensions');
2
+ function getStore(context) {
3
+ return context[EXTENSIONS_SLOT];
4
+ }
5
+ function ensureStore(context) {
6
+ const target = context;
7
+ target[EXTENSIONS_SLOT] ??= new Map();
8
+ return target[EXTENSIONS_SLOT];
9
+ }
10
+ function stripRuntimeContextExtensions(context) {
11
+ delete context[EXTENSIONS_SLOT];
12
+ }
13
+ function createRuntimeContextExtension(id) {
14
+ const key = Symbol.for(`@modern-js/runtime:context-extension:${id}`);
15
+ return {
16
+ key,
17
+ get (context) {
18
+ return getStore(context)?.get(key);
19
+ },
20
+ set (context, value) {
21
+ ensureStore(context).set(key, value);
22
+ },
23
+ remove (context) {
24
+ getStore(context)?.delete(key);
25
+ }
26
+ };
27
+ }
28
+ export { createRuntimeContextExtension, stripRuntimeContextExtensions };
@@ -0,0 +1,13 @@
1
+ import { createRuntimeContextExtension } from "./extensions.mjs";
2
+ const helmetContextExtension = createRuntimeContextExtension('@modern-js/runtime:helmet-context');
3
+ function getHelmetContext(context) {
4
+ return helmetContextExtension.get(context);
5
+ }
6
+ function ensureHelmetContext(context) {
7
+ const existing = helmetContextExtension.get(context);
8
+ if (void 0 !== existing) return existing;
9
+ const created = {};
10
+ helmetContextExtension.set(context, created);
11
+ return created;
12
+ }
13
+ export { ensureHelmetContext, getHelmetContext };
@@ -40,6 +40,11 @@ function getGlobalLayoutApp() {
40
40
  function getGlobalBasename() {
41
41
  return globalContext.basename;
42
42
  }
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 { registerRouterProvider, resolveRouterProvider, routerProviderRegistryHooks } from "../../router/runtime/provider.mjs";
47
+ export { createRuntimeContextExtension } from "./extensions.mjs";
43
48
  export { InternalRuntimeContext, RuntimeContext, getInitialContext } from "./runtime.mjs";
44
49
  export { getServerPayload, setServerPayload } from "./serverPayload/index.mjs";
45
50
  export { getCurrentEntryName, getGlobalApp, getGlobalBasename, getGlobalEnableRsc, getGlobalInternalRuntimeContext, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRSCRoot, getGlobalRoutes, setGlobalContext, setGlobalInternalRuntimeContext };
@@ -1,24 +1,26 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { HelmetProvider } from "react-helmet-async";
3
3
  import { InternalRuntimeContext, RuntimeContext } from "../context/index.mjs";
4
+ import { stripRuntimeContextExtensions } from "../context/extensions.mjs";
5
+ import { ensureHelmetContext } from "../context/helmetContext.mjs";
4
6
  function wrapRuntimeContextProvider(App, contextValue) {
5
- const { isBrowser, initialData, routes, routerFramework, context, routeManifest, routerRuntime, routerInstance, routerHydrationScript, routerMatchedRouteIds, routerServerSnapshot, routerContext, unstable_getBlockNavState, ssrContext, _internalContext, _internalRouterBaseName, _helmetContext, ...rest } = contextValue;
7
+ const { isBrowser, initialData, routes, context, routeManifest, routerContext, unstable_getBlockNavState, ssrContext, _internalContext, _internalRouterBaseName, ...rest } = contextValue;
6
8
  const internalContextValue = contextValue;
7
- internalContextValue._helmetContext ??= {};
9
+ const helmetContext = ensureHelmetContext(internalContextValue);
8
10
  const runtimeContextValue = {
9
11
  isBrowser,
10
12
  initialData,
11
13
  routes,
12
- routerFramework,
13
14
  context,
14
15
  ...rest
15
16
  };
17
+ stripRuntimeContextExtensions(runtimeContextValue);
16
18
  return /*#__PURE__*/ jsx(InternalRuntimeContext.Provider, {
17
19
  value: internalContextValue,
18
20
  children: /*#__PURE__*/ jsx(RuntimeContext.Provider, {
19
21
  value: runtimeContextValue,
20
22
  children: /*#__PURE__*/ jsx(HelmetProvider, {
21
- context: internalContextValue._helmetContext,
23
+ context: helmetContext,
22
24
  children: App
23
25
  })
24
26
  })
@@ -1,3 +1,4 @@
1
+ import { getHelmetContext } from "../context/helmetContext.mjs";
1
2
  import { safeReplace } from "./utils.mjs";
2
3
  const EOL = '\n';
3
4
  const RE_HTML_ATTR = /<html[^>]*>/;
@@ -6,7 +7,7 @@ const RE_LAST_IN_HEAD = /<\/head>/;
6
7
  const RE_TITLE = /<title[^>]*>([\s\S\n\r]*?)<\/title>/;
7
8
  const TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/;
8
9
  function getHelmetData(runtimeContext) {
9
- return runtimeContext._helmetContext?.helmet ?? void 0;
10
+ return getHelmetContext(runtimeContext)?.helmet ?? void 0;
10
11
  }
11
12
  function createReplaceHelemt(helmetData) {
12
13
  return helmetData ? (template)=>helmetReplace(template, helmetData) : (tempalte)=>tempalte;