@bleedingdev/modern-js-runtime 3.2.0-ultramodern.1 → 3.2.0-ultramodern.100

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 (233) hide show
  1. package/dist/cjs/boundary-debugger/index.js +299 -0
  2. package/dist/cjs/cli/ssr/index.js +5 -15
  3. package/dist/cjs/cli/template.server.js +1 -0
  4. package/dist/cjs/core/context/serverPayload/index.js +1 -1
  5. package/dist/cjs/core/plugin/index.js +3 -2
  6. package/dist/cjs/core/react/wrapper.js +9 -3
  7. package/dist/cjs/core/server/federatedCss.js +47 -0
  8. package/dist/cjs/core/server/helmet.js +8 -2
  9. package/dist/cjs/core/server/scriptOrder.js +59 -0
  10. package/dist/cjs/core/server/stream/afterTemplate.js +13 -5
  11. package/dist/cjs/core/server/stream/beforeTemplate.js +13 -20
  12. package/dist/cjs/core/server/stream/beforeTemplate.worker.js +98 -0
  13. package/dist/cjs/core/server/stream/createReadableStream.js +7 -2
  14. package/dist/cjs/core/server/stream/createReadableStream.worker.js +4 -2
  15. package/dist/cjs/core/server/stream/shared.js +3 -1
  16. package/dist/cjs/core/server/string/index.js +16 -9
  17. package/dist/cjs/core/server/string/loadable.js +74 -10
  18. package/dist/cjs/exports/head.js +196 -5
  19. package/dist/cjs/exports/loadable.js +34 -4
  20. package/dist/cjs/exports/tanstack-router.js +311 -54
  21. package/dist/cjs/router/cli/code/tanstackTypes.js +116 -51
  22. package/dist/cjs/router/cli/code/templates.js +15 -9
  23. package/dist/cjs/router/runtime/tanstack/hydrationBoundary.js +44 -0
  24. package/dist/cjs/router/runtime/tanstack/outlet.js +54 -0
  25. package/dist/cjs/router/runtime/tanstack/plugin.js +190 -88
  26. package/dist/cjs/router/runtime/tanstack/plugin.node.js +4 -14
  27. package/dist/cjs/router/runtime/tanstack/routeTree.js +64 -12
  28. package/dist/cjs/rsc/server.worker.js +58 -0
  29. package/dist/cjs/ssr/serverRender/renderToString/entry.js +9 -8
  30. package/dist/esm/boundary-debugger/index.mjs +263 -0
  31. package/dist/esm/cli/ssr/index.mjs +5 -15
  32. package/dist/esm/cli/template.server.mjs +1 -0
  33. package/dist/esm/core/context/serverPayload/index.mjs +1 -1
  34. package/dist/esm/core/plugin/index.mjs +3 -2
  35. package/dist/esm/core/react/wrapper.mjs +9 -3
  36. package/dist/esm/core/server/federatedCss.mjs +13 -0
  37. package/dist/esm/core/server/helmet.mjs +5 -2
  38. package/dist/esm/core/server/scriptOrder.mjs +25 -0
  39. package/dist/esm/core/server/stream/afterTemplate.mjs +14 -6
  40. package/dist/esm/core/server/stream/beforeTemplate.mjs +14 -11
  41. package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +64 -0
  42. package/dist/esm/core/server/stream/createReadableStream.mjs +7 -2
  43. package/dist/esm/core/server/stream/createReadableStream.worker.mjs +4 -2
  44. package/dist/esm/core/server/stream/shared.mjs +3 -1
  45. package/dist/esm/core/server/string/index.mjs +17 -9
  46. package/dist/esm/core/server/string/loadable.mjs +70 -9
  47. package/dist/esm/exports/head.mjs +189 -4
  48. package/dist/esm/exports/loadable.mjs +20 -3
  49. package/dist/esm/exports/tanstack-router.mjs +2 -1
  50. package/dist/esm/router/cli/code/tanstackTypes.mjs +116 -51
  51. package/dist/esm/router/cli/code/templates.mjs +15 -9
  52. package/dist/esm/router/runtime/tanstack/hydrationBoundary.mjs +10 -0
  53. package/dist/esm/router/runtime/tanstack/outlet.mjs +17 -0
  54. package/dist/esm/router/runtime/tanstack/plugin.mjs +193 -91
  55. package/dist/esm/router/runtime/tanstack/plugin.node.mjs +5 -15
  56. package/dist/esm/router/runtime/tanstack/routeTree.mjs +65 -13
  57. package/dist/esm/rsc/server.worker.mjs +1 -0
  58. package/dist/esm/ssr/serverRender/renderToString/entry.mjs +9 -6
  59. package/dist/esm-node/boundary-debugger/index.mjs +264 -0
  60. package/dist/esm-node/cli/ssr/index.mjs +5 -15
  61. package/dist/esm-node/cli/template.server.mjs +1 -0
  62. package/dist/esm-node/core/context/serverPayload/index.mjs +1 -1
  63. package/dist/esm-node/core/plugin/index.mjs +3 -2
  64. package/dist/esm-node/core/react/wrapper.mjs +9 -3
  65. package/dist/esm-node/core/server/federatedCss.mjs +14 -0
  66. package/dist/esm-node/core/server/helmet.mjs +5 -2
  67. package/dist/esm-node/core/server/scriptOrder.mjs +26 -0
  68. package/dist/esm-node/core/server/stream/afterTemplate.mjs +14 -6
  69. package/dist/esm-node/core/server/stream/beforeTemplate.mjs +14 -11
  70. package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +65 -0
  71. package/dist/esm-node/core/server/stream/createReadableStream.mjs +7 -2
  72. package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +4 -2
  73. package/dist/esm-node/core/server/stream/shared.mjs +3 -1
  74. package/dist/esm-node/core/server/string/index.mjs +17 -9
  75. package/dist/esm-node/core/server/string/loadable.mjs +70 -9
  76. package/dist/esm-node/exports/head.mjs +189 -4
  77. package/dist/esm-node/exports/loadable.mjs +20 -3
  78. package/dist/esm-node/exports/tanstack-router.mjs +2 -1
  79. package/dist/esm-node/router/cli/code/tanstackTypes.mjs +116 -51
  80. package/dist/esm-node/router/cli/code/templates.mjs +15 -9
  81. package/dist/esm-node/router/runtime/tanstack/hydrationBoundary.mjs +11 -0
  82. package/dist/esm-node/router/runtime/tanstack/outlet.mjs +18 -0
  83. package/dist/esm-node/router/runtime/tanstack/plugin.mjs +193 -91
  84. package/dist/esm-node/router/runtime/tanstack/plugin.node.mjs +5 -15
  85. package/dist/esm-node/router/runtime/tanstack/routeTree.mjs +65 -13
  86. package/dist/esm-node/rsc/server.worker.mjs +2 -0
  87. package/dist/esm-node/ssr/serverRender/renderToString/entry.mjs +9 -6
  88. package/dist/types/boundary-debugger/index.d.ts +28 -0
  89. package/dist/types/cache/index.d.ts +1 -0
  90. package/dist/types/cli/alias.d.ts +7 -0
  91. package/dist/types/cli/code.d.ts +3 -0
  92. package/dist/types/cli/constants.d.ts +9 -0
  93. package/dist/types/cli/entry.d.ts +2 -0
  94. package/dist/types/cli/index.d.ts +11 -0
  95. package/dist/types/cli/ssr/index.d.ts +6 -0
  96. package/dist/types/cli/ssr/loadable-bundler-plugin.d.ts +31 -0
  97. package/dist/types/cli/ssr/mode.d.ts +15 -0
  98. package/dist/types/cli/template.d.ts +50 -0
  99. package/dist/types/cli/template.server.d.ts +20 -0
  100. package/dist/types/common.d.ts +8 -0
  101. package/dist/types/core/browser/hydrate.d.ts +5 -0
  102. package/dist/types/core/browser/index.d.ts +9 -0
  103. package/dist/types/core/browser/withCallback.d.ts +5 -0
  104. package/dist/types/core/compat/hooks.d.ts +4 -0
  105. package/dist/types/core/compat/index.d.ts +2 -0
  106. package/dist/types/core/compat/requestContext.d.ts +5 -0
  107. package/dist/types/core/config.d.ts +6 -0
  108. package/dist/types/core/constants.d.ts +6 -0
  109. package/dist/types/core/context/index.d.ts +50 -0
  110. package/dist/types/core/context/monitors/default.d.ts +2 -0
  111. package/dist/types/core/context/monitors/index.d.ts +1 -0
  112. package/dist/types/core/context/monitors/index.server.d.ts +2 -0
  113. package/dist/types/core/context/request/index.d.ts +1 -0
  114. package/dist/types/core/context/request/index.server.d.ts +1 -0
  115. package/dist/types/core/context/response/index.d.ts +4 -0
  116. package/dist/types/core/context/response/index.server.d.ts +4 -0
  117. package/dist/types/core/context/runtime.d.ts +46 -0
  118. package/dist/types/core/context/serverPayload/index.d.ts +4 -0
  119. package/dist/types/core/context/serverPayload/index.server.d.ts +31 -0
  120. package/dist/types/core/index.d.ts +5 -0
  121. package/dist/types/core/plugin/index.d.ts +5 -0
  122. package/dist/types/core/plugin/types.d.ts +10 -0
  123. package/dist/types/core/react/index.d.ts +2 -0
  124. package/dist/types/core/react/wrapper.d.ts +3 -0
  125. package/dist/types/core/server/constants.d.ts +4 -0
  126. package/dist/types/core/server/federatedCss.d.ts +5 -0
  127. package/dist/types/core/server/helmet.d.ts +5 -0
  128. package/dist/types/core/server/index.d.ts +4 -0
  129. package/dist/types/core/server/react/index.d.ts +2 -0
  130. package/dist/types/core/server/react/no-ssr-cache/index.d.ts +2 -0
  131. package/dist/types/core/server/react/nossr/index.d.ts +4 -0
  132. package/dist/types/core/server/requestHandler.d.ts +13 -0
  133. package/dist/types/core/server/scriptOrder.d.ts +1 -0
  134. package/dist/types/core/server/server.d.ts +4 -0
  135. package/dist/types/core/server/shared.d.ts +8 -0
  136. package/dist/types/core/server/stream/afterTemplate.d.ts +13 -0
  137. package/dist/types/core/server/stream/beforeTemplate.d.ts +10 -0
  138. package/dist/types/core/server/stream/beforeTemplate.worker.d.ts +10 -0
  139. package/dist/types/core/server/stream/createReadableStream.d.ts +2 -0
  140. package/dist/types/core/server/stream/createReadableStream.worker.d.ts +2 -0
  141. package/dist/types/core/server/stream/deferredScript.d.ts +15 -0
  142. package/dist/types/core/server/stream/index.d.ts +1 -0
  143. package/dist/types/core/server/stream/shared.d.ts +41 -0
  144. package/dist/types/core/server/stream/template.d.ts +9 -0
  145. package/dist/types/core/server/string/index.d.ts +2 -0
  146. package/dist/types/core/server/string/loadable.d.ts +47 -0
  147. package/dist/types/core/server/string/ssrData.d.ts +20 -0
  148. package/dist/types/core/server/string/types.d.ts +12 -0
  149. package/dist/types/core/server/tracer.d.ts +17 -0
  150. package/dist/types/core/server/utils.d.ts +19 -0
  151. package/dist/types/core/types.d.ts +49 -0
  152. package/dist/types/document/Body.d.ts +2 -0
  153. package/dist/types/document/Comment.d.ts +5 -0
  154. package/dist/types/document/DocumentContext.d.ts +13 -0
  155. package/dist/types/document/DocumentStructureContext.d.ts +12 -0
  156. package/dist/types/document/Head.d.ts +5 -0
  157. package/dist/types/document/Html.d.ts +4 -0
  158. package/dist/types/document/Links.d.ts +2 -0
  159. package/dist/types/document/Root.d.ts +7 -0
  160. package/dist/types/document/Script.d.ts +4 -0
  161. package/dist/types/document/Scripts.d.ts +2 -0
  162. package/dist/types/document/Style.d.ts +5 -0
  163. package/dist/types/document/Title.d.ts +1 -0
  164. package/dist/types/document/cli/index.d.ts +5 -0
  165. package/dist/types/document/constants.d.ts +25 -0
  166. package/dist/types/document/index.d.ts +12 -0
  167. package/dist/types/exports/config-routes.d.ts +9 -0
  168. package/dist/types/exports/head.d.ts +11 -0
  169. package/dist/types/exports/loadable.d.ts +10 -0
  170. package/dist/types/exports/tanstack-router.d.ts +7 -0
  171. package/dist/types/index.d.ts +10 -0
  172. package/dist/types/internal.d.ts +2 -0
  173. package/dist/types/react-server.d.ts +3 -0
  174. package/dist/types/router/cli/code/getClientRoutes/getRoutes.d.ts +8 -0
  175. package/dist/types/router/cli/code/getClientRoutes/index.d.ts +1 -0
  176. package/dist/types/router/cli/code/getClientRoutes/utils.d.ts +4 -0
  177. package/dist/types/router/cli/code/index.d.ts +12 -0
  178. package/dist/types/router/cli/code/inspect.d.ts +22 -0
  179. package/dist/types/router/cli/code/makeLegalIdentifier.d.ts +1 -0
  180. package/dist/types/router/cli/code/nestedRoutes.d.ts +13 -0
  181. package/dist/types/router/cli/code/tanstackTypes.d.ts +10 -0
  182. package/dist/types/router/cli/code/templates.d.ts +28 -0
  183. package/dist/types/router/cli/code/utils.d.ts +12 -0
  184. package/dist/types/router/cli/config-routes/converter.d.ts +15 -0
  185. package/dist/types/router/cli/config-routes/parseRouteConfig.d.ts +32 -0
  186. package/dist/types/router/cli/constants.d.ts +31 -0
  187. package/dist/types/router/cli/entry.d.ts +18 -0
  188. package/dist/types/router/cli/handler.d.ts +28 -0
  189. package/dist/types/router/cli/index.d.ts +5 -0
  190. package/dist/types/router/index.d.ts +1 -0
  191. package/dist/types/router/internal.d.ts +2 -0
  192. package/dist/types/router/runtime/CSSLinks.d.ts +9 -0
  193. package/dist/types/router/runtime/DefaultNotFound.d.ts +2 -0
  194. package/dist/types/router/runtime/DeferredDataScripts.d.ts +2 -0
  195. package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +11 -0
  196. package/dist/types/router/runtime/PrefetchLink.d.ts +27 -0
  197. package/dist/types/router/runtime/constants.d.ts +146 -0
  198. package/dist/types/router/runtime/hooks.d.ts +18 -0
  199. package/dist/types/router/runtime/index.d.ts +7 -0
  200. package/dist/types/router/runtime/internal.d.ts +11 -0
  201. package/dist/types/router/runtime/lifecycle.d.ts +25 -0
  202. package/dist/types/router/runtime/plugin.d.ts +9 -0
  203. package/dist/types/router/runtime/plugin.node.d.ts +7 -0
  204. package/dist/types/router/runtime/routerHelper.d.ts +5 -0
  205. package/dist/types/router/runtime/rsc-router.d.ts +20 -0
  206. package/dist/types/router/runtime/rsc.d.ts +1 -0
  207. package/dist/types/router/runtime/server.d.ts +1 -0
  208. package/dist/types/router/runtime/tanstack/basepathRewrite.d.ts +8 -0
  209. package/dist/types/router/runtime/tanstack/dataMutation.d.ts +29 -0
  210. package/dist/types/router/runtime/tanstack/hydrationBoundary.d.ts +2 -0
  211. package/dist/types/router/runtime/tanstack/outlet.d.ts +2 -0
  212. package/dist/types/router/runtime/tanstack/plugin.d.ts +6 -0
  213. package/dist/types/router/runtime/tanstack/plugin.node.d.ts +6 -0
  214. package/dist/types/router/runtime/tanstack/prefetchLink.d.ts +11 -0
  215. package/dist/types/router/runtime/tanstack/routeTree.d.ts +8 -0
  216. package/dist/types/router/runtime/tanstack/rsc/ClientSlot.d.ts +5 -0
  217. package/dist/types/router/runtime/tanstack/rsc/CompositeComponent.d.ts +3 -0
  218. package/dist/types/router/runtime/tanstack/rsc/ReplayableStream.d.ts +24 -0
  219. package/dist/types/router/runtime/tanstack/rsc/RscNodeRenderer.d.ts +5 -0
  220. package/dist/types/router/runtime/tanstack/rsc/SlotContext.d.ts +11 -0
  221. package/dist/types/router/runtime/tanstack/rsc/client.d.ts +11 -0
  222. package/dist/types/router/runtime/tanstack/rsc/createRscProxy.d.ts +7 -0
  223. package/dist/types/router/runtime/tanstack/rsc/index.d.ts +2 -0
  224. package/dist/types/router/runtime/tanstack/rsc/server.d.ts +14 -0
  225. package/dist/types/router/runtime/tanstack/rsc/slotUsageSanitizer.d.ts +2 -0
  226. package/dist/types/router/runtime/tanstack/rsc/symbols.d.ts +46 -0
  227. package/dist/types/router/runtime/types.d.ts +119 -0
  228. package/dist/types/router/runtime/utils.d.ts +48 -0
  229. package/dist/types/router/runtime/withRouter.d.ts +10 -0
  230. package/dist/types/rsc/client.d.ts +2 -0
  231. package/dist/types/rsc/server.d.ts +1 -0
  232. package/dist/types/rsc/server.worker.d.ts +1 -0
  233. package/package.json +24 -18
@@ -1,14 +1,5 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
- (()=>{
4
- __webpack_require__.n = (module)=>{
5
- var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
- __webpack_require__.d(getter, {
7
- a: getter
8
- });
9
- return getter;
10
- };
11
- })();
12
3
  (()=>{
13
4
  __webpack_require__.d = (exports1, definition)=>{
14
5
  for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
@@ -36,10 +27,9 @@ __webpack_require__.d(__webpack_exports__, {
36
27
  buildShellBeforeTemplate: ()=>buildShellBeforeTemplate
37
28
  });
38
29
  const router_namespaceObject = require("@modern-js/runtime-utils/router");
39
- const external_react_helmet_namespaceObject = require("react-helmet");
40
- var external_react_helmet_default = /*#__PURE__*/ __webpack_require__.n(external_react_helmet_namespaceObject);
41
30
  const lifecycle_js_namespaceObject = require("../../../router/runtime/lifecycle.js");
42
31
  const external_constants_js_namespaceObject = require("../constants.js");
32
+ const external_federatedCss_js_namespaceObject = require("../federatedCss.js");
43
33
  const external_helmet_js_namespaceObject = require("../helmet.js");
44
34
  const external_shared_js_namespaceObject = require("../shared.js");
45
35
  const external_utils_js_namespaceObject = require("../utils.js");
@@ -55,8 +45,8 @@ const checkIsInline = (chunk, enableInline)=>{
55
45
  return Boolean(enableInline);
56
46
  };
57
47
  async function buildShellBeforeTemplate(beforeAppTemplate, options) {
58
- const { config, runtimeContext, styledComponentsStyleTags, entryName } = options;
59
- const helmetData = external_react_helmet_default().renderStatic();
48
+ const { config, runtimeContext, styledComponentsStyleTags, entryName, moduleFederationCssAssets } = options;
49
+ const helmetData = (0, external_helmet_js_namespaceObject.getHelmetData)(runtimeContext);
60
50
  const callbacks = [
61
51
  (0, external_helmet_js_namespaceObject.createReplaceHelemt)(helmetData),
62
52
  (template)=>injectCss(template, entryName, styledComponentsStyleTags)
@@ -65,33 +55,36 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
65
55
  async function injectCss(template, entryName, styledComponentsStyleTags) {
66
56
  let css = await getCssChunks();
67
57
  if (styledComponentsStyleTags) css += styledComponentsStyleTags;
58
+ css += (0, external_federatedCss_js_namespaceObject.createFederatedCssLinks)(moduleFederationCssAssets, {
59
+ template,
60
+ existingAssets: css.match(/href="([^"]+)"/g)?.map((item)=>item.replace(/^href="/, '').replace(/"$/, ''))
61
+ });
68
62
  return (0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject.CHUNK_CSS_PLACEHOLDER, css);
69
63
  async function getCssChunks() {
70
64
  const { routeManifest, routerContext, routes } = runtimeContext;
71
65
  if (!routeManifest) return '';
72
66
  const { routeAssets } = routeManifest;
73
- let matchedRouteManifests;
67
+ let matchedRouteManifests = [];
74
68
  const matchedRouteIds = (0, lifecycle_js_namespaceObject.getRouterMatchedRouteIds)(runtimeContext);
75
69
  if (matchedRouteIds?.length) matchedRouteManifests = matchedRouteIds.map((routeId)=>routeAssets[routeId]).filter(Boolean);
76
- else {
77
- if (!routerContext || !routes) return '';
70
+ else if (routerContext && routes) {
78
71
  const matches = (0, router_namespaceObject.matchRoutes)(routes, routerContext.location, routerContext.basename);
79
72
  matchedRouteManifests = matches?.map((match, index)=>{
80
73
  if (!index) return;
81
74
  const routeId = match.route.id;
82
75
  if (routeId) return routeAssets[routeId];
83
- }).filter(Boolean);
76
+ }).filter(Boolean) ?? [];
84
77
  }
85
78
  const asyncEntry = routeAssets[`async-${entryName}`];
86
- if (asyncEntry) matchedRouteManifests?.push(asyncEntry);
87
- const cssChunks = matchedRouteManifests ? matchedRouteManifests.reduce((chunks, routeManifest)=>{
79
+ if (asyncEntry) matchedRouteManifests.push(asyncEntry);
80
+ const cssChunks = matchedRouteManifests.reduce((chunks, routeManifest)=>{
88
81
  const { referenceCssAssets = [] } = routeManifest;
89
82
  const _cssChunks = referenceCssAssets.filter((asset)=>asset?.endsWith('.css') && !template.includes(asset));
90
83
  return [
91
84
  ...chunks,
92
85
  ..._cssChunks
93
86
  ];
94
- }, []) : [];
87
+ }, []);
95
88
  const { inlineStyles } = config;
96
89
  const styles = await Promise.all(cssChunks.map(async (chunk)=>{
97
90
  const link = `<link href="${chunk}" rel="stylesheet" />`;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ buildShellBeforeTemplate: ()=>buildShellBeforeTemplate
28
+ });
29
+ const router_namespaceObject = require("@modern-js/runtime-utils/router");
30
+ const lifecycle_js_namespaceObject = require("../../../router/runtime/lifecycle.js");
31
+ const external_constants_js_namespaceObject = require("../constants.js");
32
+ const external_federatedCss_js_namespaceObject = require("../federatedCss.js");
33
+ const external_helmet_js_namespaceObject = require("../helmet.js");
34
+ const external_shared_js_namespaceObject = require("../shared.js");
35
+ const external_utils_js_namespaceObject = require("../utils.js");
36
+ const checkIsInline = (chunk, enableInline)=>{
37
+ if ('production' !== process.env.NODE_ENV) return false;
38
+ if (enableInline instanceof RegExp) return enableInline.test(chunk);
39
+ return Boolean(enableInline);
40
+ };
41
+ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
42
+ const { config, runtimeContext, styledComponentsStyleTags, entryName, moduleFederationCssAssets } = options;
43
+ const helmetData = (0, external_helmet_js_namespaceObject.getHelmetData)(runtimeContext);
44
+ const callbacks = [
45
+ (0, external_helmet_js_namespaceObject.createReplaceHelemt)(helmetData),
46
+ (template)=>injectCss(template, entryName, styledComponentsStyleTags)
47
+ ];
48
+ return (0, external_shared_js_namespaceObject.buildHtml)(beforeAppTemplate, callbacks);
49
+ async function injectCss(template, entryName, styledComponentsStyleTags) {
50
+ let css = await getCssChunks();
51
+ if (styledComponentsStyleTags) css += styledComponentsStyleTags;
52
+ css += (0, external_federatedCss_js_namespaceObject.createFederatedCssLinks)(moduleFederationCssAssets, {
53
+ template,
54
+ existingAssets: css.match(/href="([^"]+)"/g)?.map((item)=>item.replace(/^href="/, '').replace(/"$/, ''))
55
+ });
56
+ return (0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject.CHUNK_CSS_PLACEHOLDER, css);
57
+ async function getCssChunks() {
58
+ const { routeManifest, routerContext, routes } = runtimeContext;
59
+ if (!routeManifest) return '';
60
+ const { routeAssets } = routeManifest;
61
+ let matchedRouteManifests = [];
62
+ const matchedRouteIds = (0, lifecycle_js_namespaceObject.getRouterMatchedRouteIds)(runtimeContext);
63
+ if (matchedRouteIds?.length) matchedRouteManifests = matchedRouteIds.map((routeId)=>routeAssets[routeId]).filter(Boolean);
64
+ else if (routerContext && routes) {
65
+ const matches = (0, router_namespaceObject.matchRoutes)(routes, routerContext.location, routerContext.basename);
66
+ matchedRouteManifests = matches?.map((match, index)=>{
67
+ if (!index) return;
68
+ const routeId = match.route.id;
69
+ if (routeId) return routeAssets[routeId];
70
+ }).filter(Boolean) ?? [];
71
+ }
72
+ const asyncEntry = routeAssets[`async-${entryName}`];
73
+ if (asyncEntry) matchedRouteManifests.push(asyncEntry);
74
+ const cssChunks = matchedRouteManifests.reduce((chunks, routeManifest)=>{
75
+ const { referenceCssAssets = [] } = routeManifest;
76
+ const _cssChunks = referenceCssAssets.filter((asset)=>asset?.endsWith('.css') && !template.includes(asset));
77
+ return [
78
+ ...chunks,
79
+ ..._cssChunks
80
+ ];
81
+ }, []);
82
+ const { inlineStyles } = config;
83
+ const styles = cssChunks.map((chunk)=>{
84
+ const link = `<link href="${chunk}" rel="stylesheet" />`;
85
+ checkIsInline(chunk, inlineStyles);
86
+ return link;
87
+ });
88
+ return `${styles.join('')}`;
89
+ }
90
+ }
91
+ }
92
+ exports.buildShellBeforeTemplate = __webpack_exports__.buildShellBeforeTemplate;
93
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
94
+ "buildShellBeforeTemplate"
95
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
96
+ Object.defineProperty(exports, '__esModule', {
97
+ value: true
98
+ });
@@ -43,7 +43,7 @@ const defaultExtender = {
43
43
  };
44
44
  const createReadableStreamFromElement = async (request, rootElement, options)=>{
45
45
  const { renderToPipeableStream } = await import("react-dom/server");
46
- const { runtimeContext, htmlTemplate, config, ssrConfig, entryName } = options;
46
+ const { runtimeContext, htmlTemplate, config, ssrConfig, entryName, moduleFederationCssAssets } = options;
47
47
  let shellChunkStatus = external_shared_js_namespaceObject.ShellChunkStatus.START;
48
48
  let renderLevel = external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER;
49
49
  const forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
@@ -63,11 +63,14 @@ const createReadableStreamFromElement = async (request, rootElement, options)=>{
63
63
  if (extender.modifyRootElement) processedRootElement = extender.modifyRootElement(processedRootElement);
64
64
  });
65
65
  const chunkVec = [];
66
+ let hasStartedPipe = false;
66
67
  return new Promise((resolve)=>{
67
68
  const { pipe: reactStreamingPipe } = renderToPipeableStream(processedRootElement, {
68
69
  nonce: config.nonce,
69
70
  identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX,
70
71
  [onReady] () {
72
+ if (hasStartedPipe) return;
73
+ hasStartedPipe = true;
71
74
  let styledComponentsStyleTags = '';
72
75
  extenders.forEach((extender)=>{
73
76
  if (extender.getStyleTags) styledComponentsStyleTags += extender.getStyleTags();
@@ -80,6 +83,7 @@ const createReadableStreamFromElement = async (request, rootElement, options)=>{
80
83
  runtimeContext,
81
84
  config,
82
85
  entryName,
86
+ moduleFederationCssAssets,
83
87
  styledComponentsStyleTags
84
88
  }).then(({ shellAfter, shellBefore })=>{
85
89
  const pendingScripts = [];
@@ -137,7 +141,8 @@ const createReadableStreamFromElement = async (request, rootElement, options)=>{
137
141
  renderLevel,
138
142
  runtimeContext,
139
143
  entryName,
140
- config
144
+ config,
145
+ moduleFederationCssAssets
141
146
  }).then(({ shellAfter, shellBefore })=>{
142
147
  const fallbackHtml = `${shellBefore}${shellAfter}`;
143
148
  const readableStream = (0, external_shared_js_namespaceObject.getReadableStreamFromString)(fallbackHtml);
@@ -36,19 +36,21 @@ const external_template_js_namespaceObject = require("./template.js");
36
36
  const createReadableStreamFromElement = async (request, rootElement, options)=>{
37
37
  let shellChunkStatus = external_shared_js_namespaceObject.ShellChunkStatus.START;
38
38
  const chunkVec = [];
39
- const { htmlTemplate, runtimeContext, config, ssrConfig, entryName, rscRoot } = options;
39
+ const { htmlTemplate, runtimeContext, config, ssrConfig, entryName, moduleFederationCssAssets, rscManifest, rscRoot } = options;
40
40
  const { shellBefore, shellAfter } = await (0, external_template_js_namespaceObject.getTemplates)(htmlTemplate, {
41
41
  renderLevel: external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER,
42
42
  runtimeContext,
43
43
  ssrConfig,
44
44
  request,
45
45
  config,
46
- entryName
46
+ entryName,
47
+ moduleFederationCssAssets
47
48
  });
48
49
  try {
49
50
  const readableOriginal = await (0, ssr_namespaceObject.renderSSRStream)(rootElement, {
50
51
  request,
51
52
  nonce: config.nonce,
53
+ rscManifest,
52
54
  rscRoot: rscRoot,
53
55
  routes: runtimeContext.routes,
54
56
  onError (error) {
@@ -95,7 +95,7 @@ function createRenderStreaming(createReadableStreamPromise) {
95
95
  const end = (0, time_namespaceObject.time)();
96
96
  const { runtimeContext, config, resource } = options;
97
97
  const { onError, onTiming } = options;
98
- const { htmlTemplate, entryName } = resource;
98
+ const { htmlTemplate, entryName, moduleFederationCssAssets } = resource;
99
99
  const ssrConfig = (0, external_utils_js_namespaceObject.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
100
100
  const StreamServerRootWrapper = ({ children })=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment, {
101
101
  children: [
@@ -115,9 +115,11 @@ function createRenderStreaming(createReadableStreamPromise) {
115
115
  runtimeContext,
116
116
  ssrConfig,
117
117
  entryName,
118
+ moduleFederationCssAssets,
118
119
  rscClientManifest: options.rscClientManifest,
119
120
  rscSSRManifest: options.rscSSRManifest,
120
121
  rscServerManifest: options.rscServerManifest,
122
+ rscManifest: options.rscManifest,
121
123
  rscRoot: options.rscRoot,
122
124
  onShellReady () {
123
125
  const cost = end();
@@ -39,13 +39,12 @@ const time_namespaceObject = require("@modern-js/runtime-utils/time");
39
39
  const constants_namespaceObject = require("@modern-js/utils/universal/constants");
40
40
  const server_namespaceObject = require("react-dom/server");
41
41
  var server_default = /*#__PURE__*/ __webpack_require__.n(server_namespaceObject);
42
- const external_react_helmet_namespaceObject = require("react-helmet");
43
- var external_react_helmet_default = /*#__PURE__*/ __webpack_require__.n(external_react_helmet_namespaceObject);
44
42
  const external_constants_js_namespaceObject = require("../../constants.js");
45
43
  const index_js_namespaceObject = require("../../context/index.js");
46
44
  const wrapper_js_namespaceObject = require("../../react/wrapper.js");
47
45
  const external_constants_js_namespaceObject_1 = require("../constants.js");
48
46
  const external_helmet_js_namespaceObject = require("../helmet.js");
47
+ const external_scriptOrder_js_namespaceObject = require("../scriptOrder.js");
49
48
  const external_shared_js_namespaceObject = require("../shared.js");
50
49
  const external_tracer_js_namespaceObject = require("../tracer.js");
51
50
  const external_utils_js_namespaceObject = require("../utils.js");
@@ -58,7 +57,7 @@ const renderString = async (request, serverRoot, options)=>{
58
57
  onTiming
59
58
  };
60
59
  const routerContext = runtimeContext.routerContext;
61
- const { htmlTemplate, entryName, loadableStats, routeManifest } = resource;
60
+ const { htmlTemplate, entryName, loadableStats, routeManifest, moduleFederationCssAssets } = resource;
62
61
  const ssrConfig = (0, external_utils_js_namespaceObject.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
63
62
  const chunkSet = {
64
63
  renderLevel: external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER,
@@ -71,8 +70,10 @@ const renderString = async (request, serverRoot, options)=>{
71
70
  stats: loadableStats,
72
71
  nonce: config.nonce,
73
72
  routeManifest,
73
+ runtimeContext,
74
74
  template: htmlTemplate,
75
75
  entryName,
76
+ moduleFederationCssAssets,
76
77
  chunkSet,
77
78
  config
78
79
  }),
@@ -96,10 +97,10 @@ const renderString = async (request, serverRoot, options)=>{
96
97
  const rootElement = (0, wrapper_js_namespaceObject.wrapRuntimeContextProvider)(serverRoot, Object.assign(runtimeContext, {
97
98
  ssr: true
98
99
  }));
99
- const html = await generateHtml(rootElement, htmlTemplate, chunkSet, collectors, runtimeContext.ssrContext?.htmlModifiers || [], tracer);
100
+ const html = await generateHtml(rootElement, htmlTemplate, chunkSet, collectors, runtimeContext.ssrContext?.htmlModifiers || [], runtimeContext, entryName, tracer);
100
101
  return html;
101
102
  };
102
- async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifiers, { onError, onTiming }) {
103
+ async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifiers, runtimeContext, entryName, { onError, onTiming }) {
103
104
  let html = '';
104
105
  let helmetData;
105
106
  const finalApp = collectors.reduce((pre, creator)=>creator.collect?.(pre) || pre, App);
@@ -109,7 +110,7 @@ async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifie
109
110
  identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX
110
111
  });
111
112
  chunkSet.renderLevel = external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER;
112
- helmetData = external_react_helmet_default().renderStatic();
113
+ helmetData = (0, external_helmet_js_namespaceObject.getHelmetData)(runtimeContext);
113
114
  const cost = end();
114
115
  onTiming(external_tracer_js_namespaceObject.SSRTimings.RENDER_HTML, cost);
115
116
  } catch (e) {
@@ -120,7 +121,7 @@ async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifie
120
121
  const { ssrScripts, cssChunk, jsChunk } = chunkSet;
121
122
  const finalHtml = await (0, external_shared_js_namespaceObject.buildHtml)(htmlTemplate, [
122
123
  createReplaceHtml(html),
123
- createReplaceChunkJs(jsChunk),
124
+ createReplaceChunkJs(jsChunk, entryName),
124
125
  createReplaceChunkCss(cssChunk),
125
126
  createReplaceSSRDataScript(ssrScripts),
126
127
  (0, external_helmet_js_namespaceObject.createReplaceHelemt)(helmetData),
@@ -134,8 +135,14 @@ function createReplaceHtml(html) {
134
135
  function createReplaceSSRDataScript(data) {
135
136
  return (template)=>(0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject_1.SSR_DATA_PLACEHOLDER, data);
136
137
  }
137
- function createReplaceChunkJs(js) {
138
- return (template)=>(0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject_1.CHUNK_JS_PLACEHOLDER, js);
138
+ function createReplaceChunkJs(js, entryName) {
139
+ return (template)=>{
140
+ if (!js) return (0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject_1.CHUNK_JS_PLACEHOLDER, '');
141
+ const withoutPlaceholder = (0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject_1.CHUNK_JS_PLACEHOLDER, '');
142
+ const withEarlyScripts = (0, external_scriptOrder_js_namespaceObject.injectBeforeHydrationEntryScript)(withoutPlaceholder, js, entryName);
143
+ if (withEarlyScripts !== withoutPlaceholder) return withEarlyScripts;
144
+ return (0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject_1.CHUNK_JS_PLACEHOLDER, js);
145
+ };
139
146
  }
140
147
  function createReplaceChunkCss(css) {
141
148
  return (template)=>(0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject_1.CHUNK_CSS_PLACEHOLDER, css);
@@ -24,15 +24,45 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- LoadableCollector: ()=>LoadableCollector
27
+ LoadableCollector: ()=>LoadableCollector,
28
+ orderHydrationScriptChunks: ()=>orderHydrationScriptChunks
28
29
  });
29
30
  const server_namespaceObject = require("@loadable/server");
31
+ const lifecycle_js_namespaceObject = require("../../../router/runtime/lifecycle.js");
32
+ const external_federatedCss_js_namespaceObject = require("../federatedCss.js");
30
33
  const external_utils_js_namespaceObject = require("../utils.js");
31
34
  const extname = (uri)=>{
32
35
  if ('string' != typeof uri || !uri.includes('.')) return '';
33
36
  return `.${uri?.split('.').pop()}` || '';
34
37
  };
35
38
  const generateChunks = (chunks, ext)=>chunks.filter((chunk)=>Boolean(chunk.url)).filter((chunk)=>extname(chunk.url).slice(1) === ext);
39
+ const dedupeChunksByUrl = (chunks)=>{
40
+ const seen = new Set();
41
+ return chunks.filter((chunk)=>{
42
+ if (!chunk.url || seen.has(chunk.url)) return false;
43
+ seen.add(chunk.url);
44
+ return true;
45
+ });
46
+ };
47
+ const isAsyncEntryScriptChunk = (chunk, entryName)=>{
48
+ if (!chunk.url?.endsWith('.js')) return false;
49
+ const asyncEntryName = `async-${entryName}`;
50
+ const filename = chunk.filename || chunk.url;
51
+ const basename = filename.split('/').pop() || filename;
52
+ return basename === `${asyncEntryName}.js` || basename.startsWith(`${asyncEntryName}.`) || basename.startsWith(`${asyncEntryName}-`);
53
+ };
54
+ const orderHydrationScriptChunks = ({ asyncEntryChunks, collectedChunks, matchedRouteChunks, entryName })=>{
55
+ const asyncEntryScriptChunks = [];
56
+ const asyncEntryDependencyChunks = [];
57
+ for (const chunk of asyncEntryChunks)if (isAsyncEntryScriptChunk(chunk, entryName)) asyncEntryScriptChunks.push(chunk);
58
+ else asyncEntryDependencyChunks.push(chunk);
59
+ return dedupeChunksByUrl([
60
+ ...asyncEntryDependencyChunks,
61
+ ...collectedChunks,
62
+ ...matchedRouteChunks,
63
+ ...asyncEntryScriptChunks
64
+ ]);
65
+ };
36
66
  const checkIsInline = (chunk, enableInline)=>{
37
67
  if ('production' !== process.env.NODE_ENV) return false;
38
68
  if (enableInline instanceof RegExp) return enableInline.test(chunk.url);
@@ -49,6 +79,20 @@ class LoadableCollector {
49
79
  const { routeManifest, entryName } = this.options;
50
80
  return routeManifest?.routeAssets?.[entryName]?.assets;
51
81
  }
82
+ getMatchedRouteChunks() {
83
+ const { routeManifest, runtimeContext } = this.options;
84
+ const routeAssets = routeManifest?.routeAssets;
85
+ if (!routeAssets) return [];
86
+ const matchedRouteIds = (0, lifecycle_js_namespaceObject.getRouterMatchedRouteIds)(runtimeContext) ?? [];
87
+ return matchedRouteIds.flatMap((routeId)=>{
88
+ const routeAsset = routeAssets[routeId];
89
+ return (routeAsset?.assets ?? []).map((asset)=>({
90
+ filename: asset.replace(/^\//, ''),
91
+ path: asset,
92
+ url: asset
93
+ }));
94
+ });
95
+ }
52
96
  collect(comopnent) {
53
97
  const { stats, entryName } = this.options;
54
98
  if (!stats) return comopnent;
@@ -61,20 +105,29 @@ class LoadableCollector {
61
105
  return this.extractor.collectChunks(comopnent);
62
106
  }
63
107
  async effect() {
64
- if (!this.extractor) return;
65
108
  const { extractor, options } = this;
66
109
  const { entryName, config } = options;
67
110
  const asyncChunks = [];
68
- if (config.enableAsyncEntry) try {
111
+ if (extractor && config.enableAsyncEntry) try {
69
112
  asyncChunks.push(...extractor.getChunkAssets([
70
113
  `async-${entryName}`
71
114
  ]));
72
115
  } catch (e) {}
73
- const chunks = [].concat(asyncChunks).concat(extractor.getChunkAssets(extractor.chunks));
74
- const scriptChunks = generateChunks(chunks, 'js');
116
+ const collectedChunks = extractor ? extractor.getChunkAssets(extractor.chunks) : [];
117
+ const matchedRouteChunks = this.getMatchedRouteChunks();
118
+ const orderedScriptChunks = orderHydrationScriptChunks({
119
+ asyncEntryChunks: asyncChunks,
120
+ collectedChunks,
121
+ matchedRouteChunks,
122
+ entryName
123
+ });
124
+ const chunks = [].concat(asyncChunks).concat(collectedChunks).concat(matchedRouteChunks);
125
+ const scriptChunks = generateChunks(orderedScriptChunks, 'js');
75
126
  const styleChunks = generateChunks(chunks, 'css');
76
- this.emitLoadableScripts(extractor);
77
- await this.emitScriptAssets(scriptChunks);
127
+ if (extractor) {
128
+ this.emitLoadableScripts(extractor);
129
+ await this.emitScriptAssets(scriptChunks);
130
+ }
78
131
  await this.emitStyleAssets(styleChunks);
79
132
  }
80
133
  emitLoadableScripts(extractor) {
@@ -109,19 +162,28 @@ class LoadableCollector {
109
162
  chunkSet.jsChunk += scripts.filter((script)=>Boolean(script)).join('');
110
163
  }
111
164
  async emitStyleAssets(chunks) {
112
- const { template, chunkSet, config, entryName } = this.options;
165
+ const { template, chunkSet, config, moduleFederationCssAssets } = this.options;
113
166
  const { inlineStyles } = config;
114
167
  const atrributes = (0, external_utils_js_namespaceObject.attributesToString)(this.generateAttributes());
115
168
  const linkRegExp = /<link .*?href="([^"]+)".*?>/g;
116
169
  const matchs = template.matchAll(linkRegExp);
117
170
  const existedLinks = [];
118
171
  for (const match of matchs)existedLinks.push(match[1]);
119
- const css = await Promise.all(chunks.filter((chunk)=>!existedLinks.includes(chunk.url) && !this.existsAssets?.includes(chunk.path)).map(async (chunk)=>{
172
+ const emittedChunks = chunks.filter((chunk)=>!existedLinks.includes(chunk.url) && !this.existsAssets?.includes(chunk.path));
173
+ const css = await Promise.all(emittedChunks.map(async (chunk)=>{
120
174
  const link = `<link${atrributes} href="${chunk.url}" rel="stylesheet" />`;
121
175
  if ((0, external_utils_js_namespaceObject.checkIsNode)() && checkIsInline(chunk, inlineStyles)) return readAsset(chunk).then((content)=>`<style>${content}</style>`).catch((_)=>link);
122
176
  return link;
123
177
  }));
124
178
  chunkSet.cssChunk += css.filter((css)=>Boolean(css)).join('');
179
+ chunkSet.cssChunk += (0, external_federatedCss_js_namespaceObject.createFederatedCssLinks)(moduleFederationCssAssets, {
180
+ template,
181
+ attributes: this.generateAttributes(),
182
+ existingAssets: [
183
+ ...existedLinks,
184
+ ...emittedChunks.map((chunk)=>chunk.url)
185
+ ]
186
+ });
125
187
  }
126
188
  generateAttributes(extraAtr = {}) {
127
189
  const { config } = this.options;
@@ -138,8 +200,10 @@ class LoadableCollector {
138
200
  }
139
201
  }
140
202
  exports.LoadableCollector = __webpack_exports__.LoadableCollector;
203
+ exports.orderHydrationScriptChunks = __webpack_exports__.orderHydrationScriptChunks;
141
204
  for(var __rspack_i in __webpack_exports__)if (-1 === [
142
- "LoadableCollector"
205
+ "LoadableCollector",
206
+ "orderHydrationScriptChunks"
143
207
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
144
208
  Object.defineProperty(exports, '__esModule', {
145
209
  value: true