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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/cjs/cli/code.js +3 -1
  2. package/dist/cjs/cli/ssr/index.js +2 -74
  3. package/dist/cjs/core/browser/hydrate.js +6 -1
  4. package/dist/cjs/core/context/index.js +4 -43
  5. package/dist/cjs/core/context/public.js +4 -7
  6. package/dist/cjs/core/context/runtime.js +17 -5
  7. package/dist/cjs/core/react/wrapper.js +22 -65
  8. package/dist/cjs/core/server/helmet.js +5 -4
  9. package/dist/cjs/core/server/requestResponse.js +4 -4
  10. package/dist/cjs/core/server/routerCleanup.js +2 -2
  11. package/dist/cjs/core/server/shared.js +171 -4
  12. package/dist/cjs/core/server/stream/afterTemplate.js +21 -16
  13. package/dist/cjs/core/server/stream/beforeTemplate.js +34 -25
  14. package/dist/cjs/core/server/stream/beforeTemplate.worker.js +28 -21
  15. package/dist/cjs/core/server/stream/createReadableStream.js +208 -123
  16. package/dist/cjs/core/server/stream/createReadableStream.worker.js +159 -90
  17. package/dist/cjs/core/server/stream/deferredScript.js +3 -3
  18. package/dist/cjs/core/server/stream/shared.js +2 -2
  19. package/dist/cjs/core/server/string/index.js +100 -64
  20. package/dist/cjs/core/server/string/loadable.js +34 -19
  21. package/dist/cjs/core/server/string/ssrData.js +5 -12
  22. package/dist/cjs/core/server/utils.js +1 -2
  23. package/dist/cjs/exports/head.js +7 -14
  24. package/dist/cjs/router/runtime/PrefetchLink.js +67 -123
  25. package/dist/cjs/router/runtime/hooks.js +13 -2
  26. package/dist/cjs/router/runtime/internal.js +7 -45
  27. package/dist/cjs/router/runtime/plugin.js +2 -8
  28. package/dist/cjs/router/runtime/plugin.node.js +2 -30
  29. package/dist/cjs/router/runtime/redirect.js +1 -1
  30. package/dist/esm/cli/code.mjs +3 -1
  31. package/dist/esm/cli/ssr/index.mjs +3 -72
  32. package/dist/esm/core/browser/hydrate.mjs +7 -2
  33. package/dist/esm/core/context/index.mjs +2 -5
  34. package/dist/esm/core/context/public.mjs +1 -5
  35. package/dist/esm/core/context/runtime.mjs +13 -4
  36. package/dist/esm/core/react/wrapper.mjs +21 -67
  37. package/dist/esm/core/server/helmet.mjs +5 -4
  38. package/dist/esm/core/server/requestResponse.mjs +3 -3
  39. package/dist/esm/core/server/routerCleanup.mjs +1 -1
  40. package/dist/esm/core/server/shared.mjs +153 -1
  41. package/dist/esm/core/server/stream/afterTemplate.mjs +23 -18
  42. package/dist/esm/core/server/stream/beforeTemplate.mjs +37 -28
  43. package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +31 -24
  44. package/dist/esm/core/server/stream/createReadableStream.mjs +207 -122
  45. package/dist/esm/core/server/stream/createReadableStream.worker.mjs +149 -90
  46. package/dist/esm/core/server/stream/deferredScript.mjs +3 -3
  47. package/dist/esm/core/server/stream/shared.mjs +2 -2
  48. package/dist/esm/core/server/string/index.mjs +104 -68
  49. package/dist/esm/core/server/string/loadable.mjs +34 -19
  50. package/dist/esm/core/server/string/ssrData.mjs +5 -12
  51. package/dist/esm/core/server/utils.mjs +1 -2
  52. package/dist/esm/exports/head.mjs +7 -14
  53. package/dist/esm/router/runtime/PrefetchLink.mjs +67 -123
  54. package/dist/esm/router/runtime/hooks.mjs +9 -1
  55. package/dist/esm/router/runtime/internal.mjs +2 -33
  56. package/dist/esm/router/runtime/plugin.mjs +1 -7
  57. package/dist/esm/router/runtime/plugin.node.mjs +1 -29
  58. package/dist/esm/router/runtime/redirect.mjs +1 -1
  59. package/dist/esm-node/cli/code.mjs +3 -1
  60. package/dist/esm-node/cli/ssr/index.mjs +3 -72
  61. package/dist/esm-node/core/browser/hydrate.mjs +7 -2
  62. package/dist/esm-node/core/context/index.mjs +2 -5
  63. package/dist/esm-node/core/context/public.mjs +1 -5
  64. package/dist/esm-node/core/context/runtime.mjs +13 -4
  65. package/dist/esm-node/core/react/wrapper.mjs +21 -67
  66. package/dist/esm-node/core/server/helmet.mjs +5 -4
  67. package/dist/esm-node/core/server/requestResponse.mjs +3 -3
  68. package/dist/esm-node/core/server/routerCleanup.mjs +1 -1
  69. package/dist/esm-node/core/server/shared.mjs +153 -1
  70. package/dist/esm-node/core/server/stream/afterTemplate.mjs +23 -18
  71. package/dist/esm-node/core/server/stream/beforeTemplate.mjs +37 -28
  72. package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +31 -24
  73. package/dist/esm-node/core/server/stream/createReadableStream.mjs +207 -122
  74. package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +149 -90
  75. package/dist/esm-node/core/server/stream/deferredScript.mjs +3 -3
  76. package/dist/esm-node/core/server/stream/shared.mjs +2 -2
  77. package/dist/esm-node/core/server/string/index.mjs +104 -68
  78. package/dist/esm-node/core/server/string/loadable.mjs +34 -19
  79. package/dist/esm-node/core/server/string/ssrData.mjs +5 -12
  80. package/dist/esm-node/core/server/utils.mjs +1 -2
  81. package/dist/esm-node/exports/head.mjs +7 -14
  82. package/dist/esm-node/router/runtime/PrefetchLink.mjs +67 -123
  83. package/dist/esm-node/router/runtime/hooks.mjs +9 -1
  84. package/dist/esm-node/router/runtime/internal.mjs +2 -33
  85. package/dist/esm-node/router/runtime/plugin.mjs +1 -7
  86. package/dist/esm-node/router/runtime/plugin.node.mjs +1 -29
  87. package/dist/esm-node/router/runtime/redirect.mjs +1 -1
  88. package/dist/types/cli/ssr/index.d.ts +0 -3
  89. package/dist/types/core/context/index.d.ts +4 -6
  90. package/dist/types/core/context/public.d.ts +1 -23
  91. package/dist/types/core/context/runtime.d.ts +26 -2
  92. package/dist/types/core/react/wrapper.d.ts +6 -0
  93. package/dist/types/core/server/helmet.d.ts +4 -5
  94. package/dist/types/core/server/shared.d.ts +23 -0
  95. package/dist/types/core/server/stream/afterTemplate.d.ts +2 -1
  96. package/dist/types/core/server/stream/beforeTemplate.d.ts +4 -1
  97. package/dist/types/core/server/stream/beforeTemplate.worker.d.ts +4 -1
  98. package/dist/types/core/server/stream/shared.d.ts +1 -1
  99. package/dist/types/core/server/string/loadable.d.ts +6 -3
  100. package/dist/types/core/server/string/ssrData.d.ts +2 -1
  101. package/dist/types/core/server/string/types.d.ts +1 -5
  102. package/dist/types/exports/head.d.ts +2 -2
  103. package/dist/types/router/runtime/PrefetchLink.d.ts +27 -2
  104. package/dist/types/router/runtime/hooks.d.ts +19 -2
  105. package/dist/types/router/runtime/internal.d.ts +4 -21
  106. package/dist/types/router/runtime/types.d.ts +2 -43
  107. package/package.json +9 -38
  108. package/rstest.config.mts +32 -2
  109. package/dist/cjs/boundary-debugger/index.js +0 -317
  110. package/dist/cjs/core/context/extensions.js +0 -74
  111. package/dist/cjs/core/context/helmetContext.js +0 -54
  112. package/dist/cjs/core/server/federatedCss.js +0 -58
  113. package/dist/cjs/core/server/scriptOrder.js +0 -140
  114. package/dist/cjs/module-federation/consume-surface.js +0 -199
  115. package/dist/cjs/module-federation/distributed-ssr.js +0 -135
  116. package/dist/cjs/module-federation/index.js +0 -316
  117. package/dist/cjs/module-federation/last-known-good.js +0 -157
  118. package/dist/cjs/module-federation/manifest-recovery-runtime-plugin.js +0 -129
  119. package/dist/cjs/module-federation/surface-resolution-types.js +0 -61
  120. package/dist/cjs/router/runtime/lifecycle.js +0 -167
  121. package/dist/cjs/router/runtime/provider.js +0 -153
  122. package/dist/esm/boundary-debugger/index.mjs +0 -277
  123. package/dist/esm/core/context/extensions.mjs +0 -33
  124. package/dist/esm/core/context/helmetContext.mjs +0 -13
  125. package/dist/esm/core/server/federatedCss.mjs +0 -20
  126. package/dist/esm/core/server/scriptOrder.mjs +0 -90
  127. package/dist/esm/module-federation/consume-surface.mjs +0 -158
  128. package/dist/esm/module-federation/distributed-ssr.mjs +0 -82
  129. package/dist/esm/module-federation/index.mjs +0 -115
  130. package/dist/esm/module-federation/last-known-good.mjs +0 -113
  131. package/dist/esm/module-federation/manifest-recovery-runtime-plugin.mjs +0 -89
  132. package/dist/esm/module-federation/surface-resolution-types.mjs +0 -8
  133. package/dist/esm/router/runtime/lifecycle.mjs +0 -105
  134. package/dist/esm/router/runtime/provider.mjs +0 -100
  135. package/dist/esm-node/boundary-debugger/index.mjs +0 -278
  136. package/dist/esm-node/core/context/extensions.mjs +0 -34
  137. package/dist/esm-node/core/context/helmetContext.mjs +0 -14
  138. package/dist/esm-node/core/server/federatedCss.mjs +0 -21
  139. package/dist/esm-node/core/server/scriptOrder.mjs +0 -91
  140. package/dist/esm-node/module-federation/consume-surface.mjs +0 -159
  141. package/dist/esm-node/module-federation/distributed-ssr.mjs +0 -83
  142. package/dist/esm-node/module-federation/index.mjs +0 -116
  143. package/dist/esm-node/module-federation/last-known-good.mjs +0 -114
  144. package/dist/esm-node/module-federation/manifest-recovery-runtime-plugin.mjs +0 -90
  145. package/dist/esm-node/module-federation/surface-resolution-types.mjs +0 -9
  146. package/dist/esm-node/router/runtime/lifecycle.mjs +0 -106
  147. package/dist/esm-node/router/runtime/provider.mjs +0 -101
  148. package/dist/types/boundary-debugger/index.d.ts +0 -28
  149. package/dist/types/core/context/extensions.d.ts +0 -35
  150. package/dist/types/core/context/helmetContext.d.ts +0 -10
  151. package/dist/types/core/server/federatedCss.d.ts +0 -5
  152. package/dist/types/core/server/scriptOrder.d.ts +0 -25
  153. package/dist/types/module-federation/consume-surface.d.ts +0 -104
  154. package/dist/types/module-federation/distributed-ssr.d.ts +0 -61
  155. package/dist/types/module-federation/index.d.ts +0 -71
  156. package/dist/types/module-federation/last-known-good.d.ts +0 -52
  157. package/dist/types/module-federation/manifest-recovery-runtime-plugin.d.ts +0 -25
  158. package/dist/types/module-federation/surface-resolution-types.d.ts +0 -23
  159. package/dist/types/router/runtime/lifecycle.d.ts +0 -27
  160. package/dist/types/router/runtime/provider.d.ts +0 -78
@@ -58,13 +58,13 @@ function isDeferredDataLike(v) {
58
58
  return hasPending && hasData;
59
59
  }
60
60
  function isPromiseLike(value) {
61
- return !!value && 'function' == typeof value.then;
61
+ return Boolean(value) && 'function' == typeof value.then;
62
62
  }
63
63
  function toErrorInfo(error) {
64
64
  if ((0, external_utils_js_namespaceObject.shouldRedactServerError)()) return {
65
65
  message: 'Unexpected Server Error'
66
66
  };
67
- if (error && 'object' == typeof error) {
67
+ if (null !== error && 'object' == typeof error) {
68
68
  const maybeMsg = error.message;
69
69
  const maybeStack = error.stack;
70
70
  return {
@@ -79,7 +79,7 @@ function toErrorInfo(error) {
79
79
  function buildDeferredDataScript(nonce, args) {
80
80
  const payload = JSON.stringify(args);
81
81
  const escaped = escapeAttr(payload);
82
- const nonceAttr = nonce ? ` nonce="${nonce}"` : '';
82
+ const nonceAttr = void 0 !== nonce && '' !== nonce ? ` nonce="${nonce}"` : '';
83
83
  return `<script async${nonceAttr} data-fn-name="r" data-script-src="modern-run-router-data-fn" data-fn-args='${escaped}' suppressHydrationWarning>${constants_js_namespaceObject.runRouterDataFnStr}</script>`;
84
84
  }
85
85
  function enqueueFromEntries(entries, nonce, emit) {
@@ -99,7 +99,7 @@ function createRenderStreaming(createReadableStreamPromise) {
99
99
  const end = (0, time_namespaceObject.time)();
100
100
  const { runtimeContext, config, resource } = options;
101
101
  const { onError, onTiming } = options;
102
- const { htmlTemplate, entryName, moduleFederationCssAssets } = resource;
102
+ const { htmlTemplate, entryName } = resource;
103
103
  const ssrConfig = (0, external_utils_js_namespaceObject.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
104
104
  const StreamServerRootWrapper = ({ children })=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment, {
105
105
  children: [
@@ -119,7 +119,7 @@ function createRenderStreaming(createReadableStreamPromise) {
119
119
  runtimeContext,
120
120
  ssrConfig,
121
121
  entryName,
122
- moduleFederationCssAssets,
122
+ resource,
123
123
  rscClientManifest: options.rscClientManifest,
124
124
  rscSSRManifest: options.rscSSRManifest,
125
125
  rscServerManifest: options.rscServerManifest,
@@ -39,7 +39,6 @@ __webpack_require__.r(__webpack_exports__);
39
39
  __webpack_require__.d(__webpack_exports__, {
40
40
  renderString: ()=>renderString
41
41
  });
42
- const runtime_extensions_namespaceObject = require("@modern-js/runtime-extensions");
43
42
  const time_namespaceObject = require("@modern-js/runtime-utils/time");
44
43
  const constants_namespaceObject = require("@modern-js/utils/universal/constants");
45
44
  const server_namespaceObject = require("react-dom/server");
@@ -49,7 +48,6 @@ const index_js_namespaceObject = require("../../context/index.js");
49
48
  const wrapper_js_namespaceObject = require("../../react/wrapper.js");
50
49
  const external_constants_js_namespaceObject_1 = require("../constants.js");
51
50
  const external_helmet_js_namespaceObject = require("../helmet.js");
52
- const external_scriptOrder_js_namespaceObject = require("../scriptOrder.js");
53
51
  const external_shared_js_namespaceObject = require("../shared.js");
54
52
  const external_tracer_js_namespaceObject = require("../tracer.js");
55
53
  const external_utils_js_namespaceObject = require("../utils.js");
@@ -62,7 +60,7 @@ const renderString = async (request, serverRoot, options)=>{
62
60
  onTiming
63
61
  };
64
62
  const routerContext = runtimeContext.routerContext;
65
- const { htmlTemplate, entryName, loadableStats, routeManifest, moduleFederationCssAssets } = resource;
63
+ const { htmlTemplate, entryName, loadableStats, routeManifest } = resource;
66
64
  const ssrConfig = (0, external_utils_js_namespaceObject.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
67
65
  const chunkSet = {
68
66
  renderLevel: external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER,
@@ -70,85 +68,123 @@ const renderString = async (request, serverRoot, options)=>{
70
68
  jsChunk: '',
71
69
  cssChunk: ''
72
70
  };
73
- const collectors = [
74
- new external_loadable_js_namespaceObject.LoadableCollector({
75
- stats: loadableStats,
76
- nonce: config.nonce,
77
- routeManifest,
78
- runtimeContext,
79
- template: htmlTemplate,
80
- entryName,
81
- moduleFederationCssAssets,
82
- chunkSet,
83
- config
84
- }),
85
- new external_ssrData_js_namespaceObject.SSRDataCollector({
86
- runtimeContext,
87
- request,
88
- ssrConfig,
89
- ssrContext: runtimeContext.ssrContext,
90
- chunkSet,
91
- routerContext,
92
- nonce: config.nonce,
93
- useJsonScript: config.useJsonScript
94
- })
95
- ];
71
+ const collectors = [];
72
+ const lifecycle = (0, external_shared_js_namespaceObject.createSSRRenderLifecycle)(collectors);
73
+ const loadableCollector = new external_loadable_js_namespaceObject.LoadableCollector({
74
+ stats: loadableStats,
75
+ nonce: config.nonce,
76
+ routeManifest,
77
+ template: htmlTemplate,
78
+ entryName,
79
+ chunkSet,
80
+ config,
81
+ lifecycle
82
+ });
83
+ collectors.push(loadableCollector, new external_ssrData_js_namespaceObject.SSRDataCollector({
84
+ runtimeContext,
85
+ request,
86
+ ssrConfig,
87
+ ssrContext: runtimeContext.ssrContext,
88
+ chunkSet,
89
+ routerContext,
90
+ nonce: config.nonce,
91
+ useJsonScript: config.useJsonScript,
92
+ lifecycle
93
+ }));
96
94
  const internalRuntimeContext = (0, index_js_namespaceObject.getGlobalInternalRuntimeContext)();
97
95
  const hooks = internalRuntimeContext.hooks;
98
96
  const extraCollectors = hooks.extendStringSSRCollectors.call({
99
- chunkSet
97
+ chunkSet,
98
+ render: {
99
+ runtimeContext,
100
+ request,
101
+ resource,
102
+ config,
103
+ platform: 'node',
104
+ mode: 'string',
105
+ isRsc: true === (0, index_js_namespaceObject.getGlobalEnableRsc)()
106
+ }
100
107
  });
101
108
  for (const c of extraCollectors)if (c) collectors.unshift(c);
102
- const rootElement = (0, wrapper_js_namespaceObject.wrapRuntimeContextProvider)(serverRoot, Object.assign(runtimeContext, {
109
+ let rootElement = (0, wrapper_js_namespaceObject.wrapRuntimeContextProvider)(serverRoot, Object.assign(runtimeContext, {
103
110
  ssr: true
104
111
  }));
105
- const html = await generateHtml(rootElement, htmlTemplate, chunkSet, collectors, runtimeContext.ssrContext?.htmlModifiers || [], runtimeContext, entryName, tracer);
112
+ if (true === (0, index_js_namespaceObject.getGlobalEnableRsc)() && false === runtimeContext.isBrowser) rootElement = (0, wrapper_js_namespaceObject.wrapRuntimeComponentResolver)(rootElement, hooks);
113
+ const html = await generateHtml(rootElement, htmlTemplate, chunkSet, collectors, runtimeContext.ssrContext?.htmlModifiers || [], tracer, request.signal, lifecycle, loadableCollector.stylesheetInfo);
106
114
  return html;
107
115
  };
108
- async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifiers, runtimeContext, entryName, { onError, onTiming }) {
116
+ async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifiers, { onError, onTiming }, signal, lifecycle, stylesheetInfo) {
109
117
  let html = '';
110
118
  let helmetData;
111
- const finalApp = collectors.reduce((pre, creator)=>creator.collect?.(pre) || pre, App);
112
- runtime_extensions_namespaceObject.beginHeadRender(runtimeContext);
113
119
  try {
114
- const end = (0, time_namespaceObject.time)();
115
- html = server_default().renderToString(finalApp, {
116
- identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX
120
+ signal.throwIfAborted();
121
+ try {
122
+ const finalApp = collectors.reduce((pre, creator)=>creator.collect?.(pre) || pre, App);
123
+ lifecycle.beforeReact();
124
+ const end = (0, time_namespaceObject.time)();
125
+ html = server_default().renderToString(finalApp, {
126
+ identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX
127
+ });
128
+ html = lifecycle.completedBody(html, 'complete');
129
+ chunkSet.renderLevel = external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER;
130
+ helmetData = (0, external_helmet_js_namespaceObject.getHelmetData)(collectors);
131
+ const cost = end();
132
+ onTiming(external_tracer_js_namespaceObject.SSRTimings.RENDER_HTML, cost);
133
+ } catch (error) {
134
+ lifecycle.finish({
135
+ status: 'fallback',
136
+ error
137
+ });
138
+ html = '';
139
+ chunkSet.renderLevel = external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER;
140
+ onError(error, external_tracer_js_namespaceObject.SSRErrors.RENDER_HTML);
141
+ }
142
+ await Promise.all(collectors.map((component)=>component.effect()));
143
+ signal.throwIfAborted();
144
+ const { ssrScripts, cssChunk, jsChunk } = chunkSet;
145
+ const finalHtml = await (0, external_shared_js_namespaceObject.buildHtml)(htmlTemplate, [
146
+ createReplaceHtml(html),
147
+ (template)=>(0, external_shared_js_namespaceObject.replaceSSRTemplateChunk)({
148
+ name: "scripts",
149
+ template,
150
+ placeholder: external_constants_js_namespaceObject_1.CHUNK_JS_PLACEHOLDER,
151
+ content: jsChunk
152
+ }, lifecycle),
153
+ (template)=>(0, external_shared_js_namespaceObject.replaceSSRTemplateChunk)({
154
+ name: 'styles',
155
+ template,
156
+ placeholder: external_constants_js_namespaceObject_1.CHUNK_CSS_PLACEHOLDER,
157
+ content: cssChunk,
158
+ ...stylesheetInfo
159
+ }, lifecycle),
160
+ (template)=>(0, external_shared_js_namespaceObject.replaceSSRTemplateChunk)({
161
+ name: 'data',
162
+ template,
163
+ placeholder: external_constants_js_namespaceObject_1.SSR_DATA_PLACEHOLDER,
164
+ content: ssrScripts
165
+ }, lifecycle),
166
+ (0, external_helmet_js_namespaceObject.createReplaceHelemt)(helmetData),
167
+ ...htmlModifiers
168
+ ]);
169
+ signal.throwIfAborted();
170
+ lifecycle.finish({
171
+ status: 'complete'
172
+ });
173
+ return finalHtml;
174
+ } catch (error) {
175
+ lifecycle.finish(signal.aborted ? {
176
+ status: 'cancelled',
177
+ reason: signal.reason
178
+ } : {
179
+ status: 'error',
180
+ error
117
181
  });
118
- html = runtime_extensions_namespaceObject.completeHeadRender(runtimeContext, html);
119
- chunkSet.renderLevel = external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER;
120
- helmetData = (0, external_helmet_js_namespaceObject.getHelmetData)(runtimeContext);
121
- const cost = end();
122
- onTiming(external_tracer_js_namespaceObject.SSRTimings.RENDER_HTML, cost);
123
- } catch (e) {
124
- runtime_extensions_namespaceObject.abortHeadRender(runtimeContext);
125
- chunkSet.renderLevel = external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER;
126
- onError(e, external_tracer_js_namespaceObject.SSRErrors.RENDER_HTML);
182
+ throw error;
127
183
  }
128
- await Promise.all(collectors.map((component)=>component.effect()));
129
- const { ssrScripts, cssChunk, jsChunk } = chunkSet;
130
- const finalHtml = await (0, external_shared_js_namespaceObject.buildHtml)(htmlTemplate, [
131
- createReplaceHtml(html),
132
- createReplaceChunkJs(jsChunk, entryName),
133
- createReplaceChunkCss(cssChunk),
134
- createReplaceSSRDataScript(ssrScripts, entryName),
135
- (0, external_helmet_js_namespaceObject.createReplaceHelemt)(helmetData),
136
- ...htmlModifiers
137
- ]);
138
- return finalHtml;
139
184
  }
140
185
  function createReplaceHtml(html) {
141
186
  return (template)=>(0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject_1.HTML_PLACEHOLDER, html);
142
187
  }
143
- function createReplaceSSRDataScript(data, entryName) {
144
- return (template)=>(0, external_scriptOrder_js_namespaceObject.replaceChunkJsPlaceholder)(template, data, entryName, external_constants_js_namespaceObject_1.SSR_DATA_PLACEHOLDER);
145
- }
146
- function createReplaceChunkJs(js, entryName) {
147
- return (template)=>(0, external_scriptOrder_js_namespaceObject.replaceChunkJsPlaceholder)(template, js, entryName);
148
- }
149
- function createReplaceChunkCss(css) {
150
- return (template)=>(0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject_1.CHUNK_CSS_PLACEHOLDER, css);
151
- }
152
188
  exports.renderString = __webpack_exports__.renderString;
153
189
  for(var __rspack_i in __webpack_exports__)if (-1 === [
154
190
  "renderString"
@@ -31,15 +31,13 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  LoadableCollector: ()=>LoadableCollector
32
32
  });
33
33
  const server_namespaceObject = require("@loadable/server");
34
- const external_federatedCss_js_namespaceObject = require("../federatedCss.js");
35
- const external_scriptOrder_js_namespaceObject = require("../scriptOrder.js");
36
34
  const external_utils_js_namespaceObject = require("../utils.js");
37
35
  const extname = (uri)=>{
38
36
  if ('string' != typeof uri || !uri.includes('.')) return '';
39
37
  return `.${uri?.split('.').pop()}` || '';
40
38
  };
41
39
  const generateChunks = (chunks, ext)=>chunks.filter((chunk)=>Boolean(chunk.url)).filter((chunk)=>extname(chunk.url).slice(1) === ext);
42
- const routeAssetToChunk = (asset)=>({
40
+ const assetToChunk = (asset)=>({
43
41
  chunk: asset,
44
42
  filename: asset.replace(/^\//, ''),
45
43
  linkType: 'preload',
@@ -85,16 +83,32 @@ class LoadableCollector {
85
83
  ]));
86
84
  } catch (e) {}
87
85
  const collectedChunks = extractor ? extractor.getChunkAssets(extractor.chunks) : [];
88
- const matchedRouteChunks = (0, external_scriptOrder_js_namespaceObject.getMatchedRouteChunks)(options.runtimeContext, options.routeManifest, routeAssetToChunk);
89
- const orderedScriptChunks = (0, external_scriptOrder_js_namespaceObject.orderHydrationScriptChunks)({
90
- asyncEntryChunks: asyncChunks,
91
- collectedChunks,
92
- matchedRouteChunks,
93
- entryName
94
- });
95
- const chunks = [].concat(asyncChunks).concat(collectedChunks).concat(matchedRouteChunks);
96
- const scriptChunks = generateChunks(orderedScriptChunks, 'js');
97
- const styleChunks = generateChunks(chunks, 'css');
86
+ const groups = [
87
+ {
88
+ name: 'async-entry',
89
+ assets: asyncChunks
90
+ },
91
+ {
92
+ name: 'loadable',
93
+ assets: collectedChunks
94
+ }
95
+ ];
96
+ const nativeChunks = [
97
+ ...asyncChunks,
98
+ ...collectedChunks
99
+ ];
100
+ const prepare = (kind)=>options.lifecycle?.transformAssets(groups, {
101
+ kind,
102
+ source: 'loadable',
103
+ template: options.template,
104
+ createAsset: assetToChunk
105
+ }) ?? nativeChunks;
106
+ const scriptChunks = generateChunks([
107
+ ...prepare("script")
108
+ ], 'js');
109
+ const styleChunks = generateChunks([
110
+ ...prepare('style')
111
+ ], 'css');
98
112
  if (extractor) {
99
113
  this.emitLoadableScripts(extractor);
100
114
  await this.emitScriptAssets(scriptChunks);
@@ -133,7 +147,7 @@ class LoadableCollector {
133
147
  chunkSet.jsChunk += scripts.filter((script)=>Boolean(script)).join('');
134
148
  }
135
149
  async emitStyleAssets(chunks) {
136
- const { template, chunkSet, config, moduleFederationCssAssets } = this.options;
150
+ const { template, chunkSet, config } = this.options;
137
151
  const { inlineStyles } = config;
138
152
  const atrributes = (0, external_utils_js_namespaceObject.attributesToString)(this.generateAttributes());
139
153
  const emittedAssetUrls = new Set();
@@ -148,11 +162,8 @@ class LoadableCollector {
148
162
  return link;
149
163
  }));
150
164
  chunkSet.cssChunk += css.filter((css)=>Boolean(css)).join('');
151
- chunkSet.cssChunk += (0, external_federatedCss_js_namespaceObject.createFederatedCssLinks)(moduleFederationCssAssets, {
152
- template,
153
- attributes: this.generateAttributes(),
154
- existingAssets: emittedChunks.map((chunk)=>chunk.url)
155
- });
165
+ this.stylesheetInfo.emittedAssets = emittedChunks.map((chunk)=>chunk.url);
166
+ this.stylesheetInfo.attributes = this.generateAttributes();
156
167
  }
157
168
  generateAttributes(extraAtr = {}) {
158
169
  const { config } = this.options;
@@ -165,6 +176,10 @@ class LoadableCollector {
165
176
  };
166
177
  }
167
178
  constructor(options){
179
+ this.stylesheetInfo = {
180
+ emittedAssets: [],
181
+ attributes: {}
182
+ };
168
183
  this.options = options;
169
184
  }
170
185
  }
@@ -31,7 +31,6 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  SSRDataCollector: ()=>SSRDataCollector
32
32
  });
33
33
  const node_namespaceObject = require("@modern-js/runtime-utils/node");
34
- const lifecycle_js_namespaceObject = require("../../../router/runtime/lifecycle.js");
35
34
  const external_constants_js_namespaceObject = require("../../constants.js");
36
35
  const external_utils_js_namespaceObject = require("../utils.js");
37
36
  function _check_private_redeclaration(obj, privateCollection) {
@@ -120,20 +119,15 @@ function getSSRData() {
120
119
  };
121
120
  }
122
121
  function getRouterData() {
123
- const { routerContext, runtimeContext } = _class_private_field_get(this, _options);
124
- const snapshotRouterData = (0, lifecycle_js_namespaceObject.getRouterServerSnapshot)(runtimeContext)?.routerData;
125
- if (snapshotRouterData) return {
126
- loaderData: snapshotRouterData.loaderData,
127
- errors: (0, external_utils_js_namespaceObject.serializeErrors)(snapshotRouterData.errors || null)
128
- };
129
- return routerContext ? {
130
- loaderData: routerContext.loaderData,
131
- errors: (0, external_utils_js_namespaceObject.serializeErrors)(routerContext.errors)
122
+ const { routerContext, lifecycle } = _class_private_field_get(this, _options);
123
+ const data = lifecycle?.getRouterData() ?? routerContext;
124
+ return data ? {
125
+ loaderData: data.loaderData,
126
+ errors: (0, external_utils_js_namespaceObject.serializeErrors)(data.errors || null)
132
127
  } : void 0;
133
128
  }
134
129
  function getSSRDataScripts(ssrData, routerData) {
135
130
  const { nonce, useJsonScript = false } = _class_private_field_get(this, _options);
136
- const hydrationScripts = (0, lifecycle_js_namespaceObject.getRouterHydrationScripts)(_class_private_field_get(this, _options).runtimeContext);
137
131
  const serializeSSRData = (0, node_namespaceObject.serializeJson)(ssrData);
138
132
  const attrsStr = (0, external_utils_js_namespaceObject.attributesToString)({
139
133
  nonce
@@ -143,7 +137,6 @@ function getSSRDataScripts(ssrData, routerData) {
143
137
  const serializedRouterData = (0, node_namespaceObject.serializeJson)(routerData);
144
138
  ssrDataScripts += useJsonScript ? `\n<script type="application/json" id="${external_constants_js_namespaceObject.ROUTER_DATA_JSON_ID}">${serializedRouterData}</script>` : `\n<script${attrsStr}>window._ROUTER_DATA = ${serializedRouterData}</script>`;
145
139
  }
146
- if (hydrationScripts.length) ssrDataScripts += `\n${hydrationScripts.join('\n')}`;
147
140
  return ssrDataScripts;
148
141
  }
149
142
  exports.SSRDataCollector = __webpack_exports__.SSRDataCollector;
@@ -37,10 +37,9 @@ __webpack_require__.d(__webpack_exports__, {
37
37
  serializeErrors: ()=>serializeErrors,
38
38
  shouldRedactServerError: ()=>shouldRedactServerError
39
39
  });
40
- const runtime_extensions_namespaceObject = require("@modern-js/runtime-extensions");
41
40
  const routerHelper_js_namespaceObject = require("../../router/runtime/routerHelper.js");
42
41
  function attributesToString(attributes) {
43
- return Object.entries(attributes).reduce((str, [key, value])=>void 0 !== value && (0, runtime_extensions_namespaceObject.isSafeHtmlAttributeName)(key) ? `${str} ${key}="${(0, runtime_extensions_namespaceObject.escapeHtmlAttribute)(value)}"` : str, '');
42
+ return Object.entries(attributes).reduce((str, [key, value])=>void 0 !== value && /^[^\u0000-\u0020"'<>/=]+$/u.test(key) ? `${str} ${key}="${String(value).replaceAll('&', '&amp;').replaceAll('"', '&quot;').replaceAll('<', '&lt;').replaceAll('>', '&gt;')}"` : str, '');
44
43
  }
45
44
  function safeReplace(source, searchValue, replaceValue) {
46
45
  return source.replace(searchValue, ()=>replaceValue);
@@ -41,24 +41,17 @@ __webpack_require__.d(__webpack_exports__, {
41
41
  Helmet: ()=>Helmet,
42
42
  default: ()=>exports_head
43
43
  });
44
- const runtime_extensions_namespaceObject = require("@modern-js/runtime-extensions");
45
44
  const external_react_namespaceObject = require("react");
46
45
  var external_react_default = /*#__PURE__*/ __webpack_require__.n(external_react_namespaceObject);
47
46
  const external_react_helmet_async_namespaceObject = require("react-helmet-async");
48
- const index_js_namespaceObject = require("../core/context/index.js");
49
- const helmetContext_js_namespaceObject = require("../core/context/helmetContext.js");
50
- const collectServerHelmet = (runtimeContext, props)=>{
51
- const helmetContext = (0, helmetContext_js_namespaceObject.ensureHelmetContext)(runtimeContext);
52
- const createRecord = ()=>runtime_extensions_namespaceObject.createHelmetRecord(external_react_default(), props);
53
- const deriveState = (records)=>runtime_extensions_namespaceObject.deriveHelmetServerState(external_react_default(), records);
54
- const marker = runtime_extensions_namespaceObject.collectHeadState(runtimeContext, createRecord, deriveState, helmetContext);
55
- if (void 0 !== marker) return marker;
56
- helmetContext.helmet = runtime_extensions_namespaceObject.collectImmediateHelmetState(external_react_default(), helmetContext, createRecord());
57
- };
47
+ const runtime_js_namespaceObject = require("../core/context/runtime.js");
58
48
  const Helmet = (props)=>{
59
- const runtimeContext = external_react_default().useContext(index_js_namespaceObject.InternalRuntimeContext);
60
- if (null !== runtimeContext && false === runtimeContext.isBrowser) return runtime_extensions_namespaceObject.renderHeadMarker(external_react_default(), collectServerHelmet(runtimeContext, props));
61
- return external_react_default().createElement(external_react_helmet_async_namespaceObject.Helmet, props);
49
+ const resolveComponent = external_react_default().useContext(runtime_js_namespaceObject.RuntimeComponentResolverContext);
50
+ const Component = resolveComponent?.(external_react_helmet_async_namespaceObject.Helmet, {
51
+ name: 'head.Helmet'
52
+ }) ?? external_react_helmet_async_namespaceObject.Helmet;
53
+ if (Component === Helmet) throw new Error('A component resolver cannot resolve head.Helmet to itself.');
54
+ return external_react_default().createElement(Component, props);
62
55
  };
63
56
  const head = {
64
57
  Helmet,