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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/dist/cjs/cli/code.js +3 -1
  2. package/dist/cjs/cli/ssr/index.js +2 -74
  3. package/dist/cjs/core/browser/hydrate.js +6 -1
  4. package/dist/cjs/core/context/index.js +4 -43
  5. package/dist/cjs/core/context/public.js +4 -7
  6. package/dist/cjs/core/context/runtime.js +17 -5
  7. package/dist/cjs/core/react/wrapper.js +22 -65
  8. package/dist/cjs/core/server/helmet.js +5 -4
  9. package/dist/cjs/core/server/requestResponse.js +4 -4
  10. package/dist/cjs/core/server/routerCleanup.js +2 -2
  11. package/dist/cjs/core/server/shared.js +171 -4
  12. package/dist/cjs/core/server/stream/afterTemplate.js +21 -16
  13. package/dist/cjs/core/server/stream/beforeTemplate.js +34 -25
  14. package/dist/cjs/core/server/stream/beforeTemplate.worker.js +28 -21
  15. package/dist/cjs/core/server/stream/createReadableStream.js +208 -123
  16. package/dist/cjs/core/server/stream/createReadableStream.worker.js +159 -90
  17. package/dist/cjs/core/server/stream/deferredScript.js +3 -3
  18. package/dist/cjs/core/server/stream/shared.js +2 -2
  19. package/dist/cjs/core/server/string/index.js +100 -64
  20. package/dist/cjs/core/server/string/loadable.js +34 -19
  21. package/dist/cjs/core/server/string/ssrData.js +5 -12
  22. package/dist/cjs/core/server/utils.js +1 -2
  23. package/dist/cjs/document/cli/index.js +1 -2
  24. package/dist/cjs/exports/head.js +7 -14
  25. package/dist/cjs/router/runtime/PrefetchLink.js +67 -123
  26. package/dist/cjs/router/runtime/hooks.js +13 -2
  27. package/dist/cjs/router/runtime/internal.js +7 -45
  28. package/dist/cjs/router/runtime/plugin.js +2 -8
  29. package/dist/cjs/router/runtime/plugin.node.js +2 -30
  30. package/dist/cjs/router/runtime/redirect.js +1 -1
  31. package/dist/esm/cli/code.mjs +3 -1
  32. package/dist/esm/cli/ssr/index.mjs +3 -72
  33. package/dist/esm/core/browser/hydrate.mjs +7 -2
  34. package/dist/esm/core/context/index.mjs +2 -5
  35. package/dist/esm/core/context/public.mjs +1 -5
  36. package/dist/esm/core/context/runtime.mjs +13 -4
  37. package/dist/esm/core/react/wrapper.mjs +21 -67
  38. package/dist/esm/core/server/helmet.mjs +5 -4
  39. package/dist/esm/core/server/requestResponse.mjs +3 -3
  40. package/dist/esm/core/server/routerCleanup.mjs +1 -1
  41. package/dist/esm/core/server/shared.mjs +153 -1
  42. package/dist/esm/core/server/stream/afterTemplate.mjs +23 -18
  43. package/dist/esm/core/server/stream/beforeTemplate.mjs +37 -28
  44. package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +31 -24
  45. package/dist/esm/core/server/stream/createReadableStream.mjs +207 -122
  46. package/dist/esm/core/server/stream/createReadableStream.worker.mjs +149 -90
  47. package/dist/esm/core/server/stream/deferredScript.mjs +3 -3
  48. package/dist/esm/core/server/stream/shared.mjs +2 -2
  49. package/dist/esm/core/server/string/index.mjs +104 -68
  50. package/dist/esm/core/server/string/loadable.mjs +34 -19
  51. package/dist/esm/core/server/string/ssrData.mjs +5 -12
  52. package/dist/esm/core/server/utils.mjs +1 -2
  53. package/dist/esm/document/cli/index.mjs +2 -3
  54. package/dist/esm/exports/head.mjs +7 -14
  55. package/dist/esm/router/runtime/PrefetchLink.mjs +68 -124
  56. package/dist/esm/router/runtime/hooks.mjs +9 -1
  57. package/dist/esm/router/runtime/internal.mjs +2 -33
  58. package/dist/esm/router/runtime/plugin.mjs +1 -7
  59. package/dist/esm/router/runtime/plugin.node.mjs +1 -29
  60. package/dist/esm/router/runtime/redirect.mjs +1 -1
  61. package/dist/esm-node/cli/code.mjs +3 -1
  62. package/dist/esm-node/cli/ssr/index.mjs +3 -72
  63. package/dist/esm-node/core/browser/hydrate.mjs +7 -2
  64. package/dist/esm-node/core/context/index.mjs +2 -5
  65. package/dist/esm-node/core/context/public.mjs +1 -5
  66. package/dist/esm-node/core/context/runtime.mjs +13 -4
  67. package/dist/esm-node/core/react/wrapper.mjs +21 -67
  68. package/dist/esm-node/core/server/helmet.mjs +5 -4
  69. package/dist/esm-node/core/server/requestResponse.mjs +3 -3
  70. package/dist/esm-node/core/server/routerCleanup.mjs +1 -1
  71. package/dist/esm-node/core/server/shared.mjs +153 -1
  72. package/dist/esm-node/core/server/stream/afterTemplate.mjs +23 -18
  73. package/dist/esm-node/core/server/stream/beforeTemplate.mjs +37 -28
  74. package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +31 -24
  75. package/dist/esm-node/core/server/stream/createReadableStream.mjs +207 -122
  76. package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +149 -90
  77. package/dist/esm-node/core/server/stream/deferredScript.mjs +3 -3
  78. package/dist/esm-node/core/server/stream/shared.mjs +2 -2
  79. package/dist/esm-node/core/server/string/index.mjs +104 -68
  80. package/dist/esm-node/core/server/string/loadable.mjs +34 -19
  81. package/dist/esm-node/core/server/string/ssrData.mjs +5 -12
  82. package/dist/esm-node/core/server/utils.mjs +1 -2
  83. package/dist/esm-node/document/cli/index.mjs +2 -3
  84. package/dist/esm-node/exports/head.mjs +7 -14
  85. package/dist/esm-node/router/runtime/PrefetchLink.mjs +68 -124
  86. package/dist/esm-node/router/runtime/hooks.mjs +9 -1
  87. package/dist/esm-node/router/runtime/internal.mjs +2 -33
  88. package/dist/esm-node/router/runtime/plugin.mjs +1 -7
  89. package/dist/esm-node/router/runtime/plugin.node.mjs +1 -29
  90. package/dist/esm-node/router/runtime/redirect.mjs +1 -1
  91. package/dist/types/cli/index.d.ts +7 -7
  92. package/dist/types/cli/ssr/index.d.ts +0 -3
  93. package/dist/types/core/browser/hydrate.d.ts +1 -1
  94. package/dist/types/core/browser/index.d.ts +1 -1
  95. package/dist/types/core/compat/hooks.d.ts +1 -1
  96. package/dist/types/core/compat/index.d.ts +1 -1
  97. package/dist/types/core/compat/requestContext.d.ts +3 -3
  98. package/dist/types/core/config.d.ts +1 -1
  99. package/dist/types/core/context/index.d.ts +8 -10
  100. package/dist/types/core/context/monitors/index.d.ts +1 -1
  101. package/dist/types/core/context/monitors/index.server.d.ts +1 -1
  102. package/dist/types/core/context/public.d.ts +1 -23
  103. package/dist/types/core/context/runtime.d.ts +27 -3
  104. package/dist/types/core/context/serverPayload/index.d.ts +1 -1
  105. package/dist/types/core/index.d.ts +5 -5
  106. package/dist/types/core/plugin/index.d.ts +1 -1
  107. package/dist/types/core/plugin/types.d.ts +2 -2
  108. package/dist/types/core/react/wrapper.d.ts +7 -1
  109. package/dist/types/core/server/helmet.d.ts +4 -5
  110. package/dist/types/core/server/index.d.ts +2 -2
  111. package/dist/types/core/server/react/index.d.ts +2 -2
  112. package/dist/types/core/server/requestHandler.d.ts +3 -3
  113. package/dist/types/core/server/requestResponse.d.ts +3 -3
  114. package/dist/types/core/server/routerCleanup.d.ts +2 -2
  115. package/dist/types/core/server/server.d.ts +4 -4
  116. package/dist/types/core/server/shared.d.ts +25 -2
  117. package/dist/types/core/server/stream/afterTemplate.d.ts +5 -4
  118. package/dist/types/core/server/stream/beforeTemplate.d.ts +6 -3
  119. package/dist/types/core/server/stream/beforeTemplate.worker.d.ts +6 -3
  120. package/dist/types/core/server/stream/createReadableStream.d.ts +1 -1
  121. package/dist/types/core/server/stream/createReadableStream.worker.d.ts +1 -1
  122. package/dist/types/core/server/stream/index.d.ts +1 -1
  123. package/dist/types/core/server/stream/shared.d.ts +5 -5
  124. package/dist/types/core/server/stream/template.d.ts +2 -2
  125. package/dist/types/core/server/string/index.d.ts +1 -1
  126. package/dist/types/core/server/string/loadable.d.ts +7 -4
  127. package/dist/types/core/server/string/ssrData.d.ts +5 -4
  128. package/dist/types/core/server/string/types.d.ts +2 -6
  129. package/dist/types/core/server/tracer.d.ts +1 -1
  130. package/dist/types/core/server/utils.d.ts +2 -2
  131. package/dist/types/core/types.d.ts +2 -3
  132. package/dist/types/document/index.d.ts +12 -12
  133. package/dist/types/exports/config-routes.d.ts +1 -1
  134. package/dist/types/exports/head.d.ts +2 -2
  135. package/dist/types/index.d.ts +9 -9
  136. package/dist/types/internal.d.ts +1 -1
  137. package/dist/types/react-server.d.ts +3 -3
  138. package/dist/types/router/cli/code/getClientRoutes/index.d.ts +1 -1
  139. package/dist/types/router/cli/handler.d.ts +1 -1
  140. package/dist/types/router/cli/index.d.ts +3 -3
  141. package/dist/types/router/index.d.ts +1 -1
  142. package/dist/types/router/internal.d.ts +2 -2
  143. package/dist/types/router/runtime/PrefetchLink.d.ts +27 -2
  144. package/dist/types/router/runtime/hooks.d.ts +19 -2
  145. package/dist/types/router/runtime/index.d.ts +4 -4
  146. package/dist/types/router/runtime/internal.d.ts +5 -22
  147. package/dist/types/router/runtime/plugin.d.ts +3 -3
  148. package/dist/types/router/runtime/plugin.node.d.ts +3 -3
  149. package/dist/types/router/runtime/rsc-router.d.ts +3 -3
  150. package/dist/types/router/runtime/types.d.ts +2 -43
  151. package/dist/types/router/runtime/utils.d.ts +1 -1
  152. package/package.json +19 -47
  153. package/rstest.config.mts +32 -2
  154. package/dist/cjs/boundary-debugger/index.js +0 -317
  155. package/dist/cjs/core/context/extensions.js +0 -74
  156. package/dist/cjs/core/context/helmetContext.js +0 -54
  157. package/dist/cjs/core/server/federatedCss.js +0 -58
  158. package/dist/cjs/core/server/scriptOrder.js +0 -140
  159. package/dist/cjs/module-federation/consume-surface.js +0 -199
  160. package/dist/cjs/module-federation/distributed-ssr.js +0 -135
  161. package/dist/cjs/module-federation/index.js +0 -316
  162. package/dist/cjs/module-federation/last-known-good.js +0 -157
  163. package/dist/cjs/module-federation/manifest-recovery-runtime-plugin.js +0 -129
  164. package/dist/cjs/module-federation/surface-resolution-types.js +0 -61
  165. package/dist/cjs/router/runtime/lifecycle.js +0 -167
  166. package/dist/cjs/router/runtime/provider.js +0 -153
  167. package/dist/esm/boundary-debugger/index.mjs +0 -277
  168. package/dist/esm/core/context/extensions.mjs +0 -33
  169. package/dist/esm/core/context/helmetContext.mjs +0 -13
  170. package/dist/esm/core/server/federatedCss.mjs +0 -20
  171. package/dist/esm/core/server/scriptOrder.mjs +0 -90
  172. package/dist/esm/module-federation/consume-surface.mjs +0 -158
  173. package/dist/esm/module-federation/distributed-ssr.mjs +0 -82
  174. package/dist/esm/module-federation/index.mjs +0 -115
  175. package/dist/esm/module-federation/last-known-good.mjs +0 -113
  176. package/dist/esm/module-federation/manifest-recovery-runtime-plugin.mjs +0 -89
  177. package/dist/esm/module-federation/surface-resolution-types.mjs +0 -8
  178. package/dist/esm/router/runtime/lifecycle.mjs +0 -105
  179. package/dist/esm/router/runtime/provider.mjs +0 -100
  180. package/dist/esm-node/boundary-debugger/index.mjs +0 -278
  181. package/dist/esm-node/core/context/extensions.mjs +0 -34
  182. package/dist/esm-node/core/context/helmetContext.mjs +0 -14
  183. package/dist/esm-node/core/server/federatedCss.mjs +0 -21
  184. package/dist/esm-node/core/server/scriptOrder.mjs +0 -91
  185. package/dist/esm-node/module-federation/consume-surface.mjs +0 -159
  186. package/dist/esm-node/module-federation/distributed-ssr.mjs +0 -83
  187. package/dist/esm-node/module-federation/index.mjs +0 -116
  188. package/dist/esm-node/module-federation/last-known-good.mjs +0 -114
  189. package/dist/esm-node/module-federation/manifest-recovery-runtime-plugin.mjs +0 -90
  190. package/dist/esm-node/module-federation/surface-resolution-types.mjs +0 -9
  191. package/dist/esm-node/router/runtime/lifecycle.mjs +0 -106
  192. package/dist/esm-node/router/runtime/provider.mjs +0 -101
  193. package/dist/types/boundary-debugger/index.d.ts +0 -28
  194. package/dist/types/core/context/extensions.d.ts +0 -35
  195. package/dist/types/core/context/helmetContext.d.ts +0 -10
  196. package/dist/types/core/server/federatedCss.d.ts +0 -5
  197. package/dist/types/core/server/scriptOrder.d.ts +0 -25
  198. package/dist/types/module-federation/consume-surface.d.ts +0 -104
  199. package/dist/types/module-federation/distributed-ssr.d.ts +0 -61
  200. package/dist/types/module-federation/index.d.ts +0 -71
  201. package/dist/types/module-federation/last-known-good.d.ts +0 -52
  202. package/dist/types/module-federation/manifest-recovery-runtime-plugin.d.ts +0 -25
  203. package/dist/types/module-federation/surface-resolution-types.d.ts +0 -23
  204. package/dist/types/router/runtime/lifecycle.d.ts +0 -27
  205. package/dist/types/router/runtime/provider.d.ts +0 -78
  206. /package/dist/esm/{rslib-runtime.mjs → rslib-runtime~1.mjs} +0 -0
  207. /package/dist/esm-node/{rslib-runtime.mjs → rslib-runtime~0.mjs} +0 -0
@@ -27,15 +27,182 @@ var __webpack_require__ = {};
27
27
  })();
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ buildHtml: ()=>buildHtml,
32
+ createSSRRenderLifecycle: ()=>createSSRRenderLifecycle,
33
+ createSSRStreamErrorReporter: ()=>createSSRStreamErrorReporter,
34
+ observeSSRStream: ()=>observeSSRStream,
35
+ orderSSRStreamTransforms: ()=>orderSSRStreamTransforms,
36
+ replaceSSRTemplateChunk: ()=>replaceSSRTemplateChunk
37
+ });
38
+ const external_utils_js_namespaceObject = require("./utils.js");
30
39
  function buildHtml(template, callbacks) {
31
40
  return callbacks.reduce((promise, buildHtmlCb)=>promise.then((template)=>buildHtmlCb(template)), Promise.resolve(template));
32
41
  }
33
- __webpack_require__.d(__webpack_exports__, {
34
- buildHtml: ()=>buildHtml
35
- });
42
+ function createSSRRenderLifecycle(observers) {
43
+ let terminal;
44
+ return {
45
+ transformAssets (groups, info) {
46
+ let assets = groups.flatMap((group)=>group.assets);
47
+ for (const observer of observers)assets = observer.transformAssets?.(assets, {
48
+ ...info,
49
+ groups
50
+ }) ?? assets;
51
+ return assets;
52
+ },
53
+ transformTemplateChunk (chunk) {
54
+ for (const observer of observers)chunk = observer.transformTemplateChunk?.(chunk, {
55
+ attributesToString: external_utils_js_namespaceObject.attributesToString,
56
+ hasStylesheetLink: external_utils_js_namespaceObject.hasStylesheetLink
57
+ }) ?? chunk;
58
+ return chunk;
59
+ },
60
+ getRouterData () {
61
+ let data;
62
+ for (const observer of observers)data = observer.getRouterData?.() ?? data;
63
+ return data;
64
+ },
65
+ get terminal () {
66
+ return terminal;
67
+ },
68
+ beforeReact () {
69
+ for (const observer of observers)observer.beforeReact?.();
70
+ },
71
+ completedBody (html, phase) {
72
+ for (const observer of observers)html = observer.completedBody?.(html, {
73
+ phase
74
+ }) ?? html;
75
+ return html;
76
+ },
77
+ finish (result) {
78
+ if (void 0 !== terminal) return;
79
+ terminal = result;
80
+ for (const observer of observers)try {
81
+ observer.onTerminal?.(result);
82
+ } catch {}
83
+ }
84
+ };
85
+ }
86
+ function replaceSSRTemplateChunk(chunk, lifecycle, options = {}) {
87
+ const result = lifecycle?.transformTemplateChunk(chunk) ?? chunk;
88
+ if (true === options.preserveEmpty && '' === result.content) return result.template;
89
+ return (0, external_utils_js_namespaceObject.safeReplace)(result.template, result.placeholder, result.content);
90
+ }
91
+ function orderSSRStreamTransforms(extenders) {
92
+ return [
93
+ ...extenders.filter((extender)=>'body' !== extender.streamPhase),
94
+ ...extenders.filter((extender)=>'body' === extender.streamPhase)
95
+ ];
96
+ }
97
+ function createSSRStreamErrorReporter(onError) {
98
+ let reported = false;
99
+ return (error)=>{
100
+ if (reported) return;
101
+ reported = true;
102
+ try {
103
+ onError(error);
104
+ } catch {}
105
+ };
106
+ }
107
+ function observeSSRStream(source, options) {
108
+ const reader = source.getReader();
109
+ let controller;
110
+ let ended = false;
111
+ let cancellation;
112
+ const cleanup = ()=>{
113
+ options.signal.removeEventListener('abort', onAbort);
114
+ reader.releaseLock();
115
+ };
116
+ const cancel = (reason)=>{
117
+ if (void 0 !== cancellation) return cancellation;
118
+ if (ended) return Promise.resolve();
119
+ ended = true;
120
+ options.lifecycle.finish({
121
+ status: 'cancelled',
122
+ reason
123
+ });
124
+ cancellation = (async ()=>{
125
+ try {
126
+ const observer = Promise.withResolvers();
127
+ try {
128
+ observer.resolve(options.onCancel?.(reason));
129
+ } catch (error) {
130
+ observer.reject(error);
131
+ }
132
+ const results = await Promise.allSettled([
133
+ observer.promise,
134
+ reader.cancel(reason)
135
+ ]);
136
+ const rejected = results.find((result)=>'rejected' === result.status);
137
+ if (rejected?.status === 'rejected') throw rejected.reason;
138
+ } finally{
139
+ cleanup();
140
+ }
141
+ })();
142
+ return cancellation;
143
+ };
144
+ const onAbort = ()=>{
145
+ if (ended) return;
146
+ const reason = options.signal.reason;
147
+ cancel(reason).then(()=>controller.error(reason), (error)=>{
148
+ controller.error(reason);
149
+ return options.onError(error);
150
+ });
151
+ };
152
+ return new ReadableStream({
153
+ start (value) {
154
+ controller = value;
155
+ options.signal.addEventListener('abort', onAbort, {
156
+ once: true
157
+ });
158
+ if (options.signal.aborted) onAbort();
159
+ },
160
+ async pull (value) {
161
+ if (ended) return void await cancellation;
162
+ try {
163
+ const result = await reader.read();
164
+ if (ended) return void await cancellation;
165
+ if (result.done) {
166
+ await options.onComplete?.();
167
+ if (ended) return void await cancellation;
168
+ ended = true;
169
+ options.lifecycle.finish({
170
+ status: 'complete'
171
+ });
172
+ cleanup();
173
+ value.close();
174
+ } else value.enqueue(result.value);
175
+ } catch (error) {
176
+ if (ended) return void await cancellation;
177
+ ended = true;
178
+ options.lifecycle.finish({
179
+ status: 'error',
180
+ error
181
+ });
182
+ try {
183
+ await options.onError(error);
184
+ } finally{
185
+ cleanup();
186
+ value.error(error);
187
+ }
188
+ }
189
+ },
190
+ cancel
191
+ });
192
+ }
36
193
  exports.buildHtml = __webpack_exports__.buildHtml;
194
+ exports.createSSRRenderLifecycle = __webpack_exports__.createSSRRenderLifecycle;
195
+ exports.createSSRStreamErrorReporter = __webpack_exports__.createSSRStreamErrorReporter;
196
+ exports.observeSSRStream = __webpack_exports__.observeSSRStream;
197
+ exports.orderSSRStreamTransforms = __webpack_exports__.orderSSRStreamTransforms;
198
+ exports.replaceSSRTemplateChunk = __webpack_exports__.replaceSSRTemplateChunk;
37
199
  for(var __rspack_i in __webpack_exports__)if (-1 === [
38
- "buildHtml"
200
+ "buildHtml",
201
+ "createSSRRenderLifecycle",
202
+ "createSSRStreamErrorReporter",
203
+ "observeSSRStream",
204
+ "orderSSRStreamTransforms",
205
+ "replaceSSRTemplateChunk"
39
206
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
40
207
  Object.defineProperty(exports, '__esModule', {
41
208
  value: true
@@ -31,14 +31,12 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  buildShellAfterTemplate: ()=>buildShellAfterTemplate
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_constants_js_namespaceObject_1 = require("../constants.js");
37
- const external_scriptOrder_js_namespaceObject = require("../scriptOrder.js");
38
36
  const external_shared_js_namespaceObject = require("../shared.js");
39
37
  const external_utils_js_namespaceObject = require("../utils.js");
40
38
  function buildShellAfterTemplate(afterAppTemplate, options) {
41
- const { request, config, ssrConfig, runtimeContext, renderLevel, entryName } = options;
39
+ const { request, config, ssrConfig, runtimeContext, renderLevel, entryName, lifecycle } = options;
42
40
  const callbacks = [
43
41
  (template)=>injectJs(template, entryName, config.nonce),
44
42
  createReplaceSSRData({
@@ -48,21 +46,28 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
48
46
  useJsonScript: config.useJsonScript,
49
47
  runtimeContext,
50
48
  renderLevel,
51
- entryName
49
+ lifecycle
52
50
  })
53
51
  ];
54
52
  async function injectJs(template, entryName, nonce) {
55
- const jsChunkStr = (0, external_scriptOrder_js_namespaceObject.createRouteHydrationScriptTags)(runtimeContext, entryName, {
56
- nonce,
57
- template
53
+ const assets = runtimeContext.routeManifest?.routeAssets?.[`async-${entryName}`]?.assets ?? [];
54
+ const jsChunkStr = assets.filter((asset)=>asset.endsWith('.js')).map((asset)=>`<script${(0, external_utils_js_namespaceObject.attributesToString)({
55
+ src: asset,
56
+ nonce
57
+ })}></script>`).join(' ');
58
+ return (0, external_shared_js_namespaceObject.replaceSSRTemplateChunk)({
59
+ name: "scripts",
60
+ template,
61
+ placeholder: external_constants_js_namespaceObject_1.CHUNK_JS_PLACEHOLDER,
62
+ content: jsChunkStr
63
+ }, lifecycle, {
64
+ preserveEmpty: true
58
65
  });
59
- if (!jsChunkStr) return template;
60
- return (0, external_scriptOrder_js_namespaceObject.replaceChunkJsPlaceholder)(template, jsChunkStr, entryName);
61
66
  }
62
67
  return (0, external_shared_js_namespaceObject.buildHtml)(afterAppTemplate, callbacks);
63
68
  }
64
69
  function createReplaceSSRData(options) {
65
- const { runtimeContext, nonce, renderLevel, useJsonScript, ssrConfig, entryName } = options;
70
+ const { runtimeContext, nonce, renderLevel, useJsonScript, ssrConfig, lifecycle } = options;
66
71
  const { request, reporter } = runtimeContext.ssrContext;
67
72
  const headers = 'object' == typeof ssrConfig && ssrConfig.unsafeHeaders ? Object.fromEntries(Object.entries(request.headers).filter(([key, _])=>ssrConfig.unsafeHeaders?.map((header)=>header.toLowerCase())?.includes(key.toLowerCase()))) : void 0;
68
73
  const ssrData = {
@@ -91,12 +96,12 @@ function createReplaceSSRData(options) {
91
96
  });
92
97
  const serializeSSRData = (0, node_namespaceObject.serializeJson)(ssrData);
93
98
  const ssrDataScript = useJsonScript ? `<script type="application/json" id="${external_constants_js_namespaceObject.SSR_DATA_JSON_ID}">${serializeSSRData}</script>` : `<script${attrsStr}>window._SSR_DATA = ${serializeSSRData}</script>`;
94
- const hydrationScripts = (0, lifecycle_js_namespaceObject.getRouterHydrationScripts)(runtimeContext);
95
- const ssrScripts = hydrationScripts.length ? `${ssrDataScript}\n${hydrationScripts.join('\n')}` : ssrDataScript;
96
- return (template)=>{
97
- if (!template.includes(external_constants_js_namespaceObject_1.SSR_DATA_PLACEHOLDER)) return template;
98
- return (0, external_scriptOrder_js_namespaceObject.replaceChunkJsPlaceholder)(template, ssrScripts, entryName, external_constants_js_namespaceObject_1.SSR_DATA_PLACEHOLDER);
99
- };
99
+ return (template)=>(0, external_shared_js_namespaceObject.replaceSSRTemplateChunk)({
100
+ name: 'data',
101
+ template,
102
+ placeholder: external_constants_js_namespaceObject_1.SSR_DATA_PLACEHOLDER,
103
+ content: ssrDataScript
104
+ }, lifecycle);
100
105
  }
101
106
  exports.buildShellAfterTemplate = __webpack_exports__.buildShellAfterTemplate;
102
107
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -31,9 +31,7 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  buildShellBeforeTemplate: ()=>buildShellBeforeTemplate
32
32
  });
33
33
  const router_namespaceObject = require("@modern-js/runtime-utils/router");
34
- const lifecycle_js_namespaceObject = require("../../../router/runtime/lifecycle.js");
35
34
  const external_constants_js_namespaceObject = require("../constants.js");
36
- const external_federatedCss_js_namespaceObject = require("../federatedCss.js");
37
35
  const external_helmet_js_namespaceObject = require("../helmet.js");
38
36
  const external_shared_js_namespaceObject = require("../shared.js");
39
37
  const external_utils_js_namespaceObject = require("../utils.js");
@@ -49,8 +47,7 @@ const checkIsInline = (chunk, enableInline)=>{
49
47
  return Boolean(enableInline);
50
48
  };
51
49
  async function buildShellBeforeTemplate(beforeAppTemplate, options) {
52
- const { config, runtimeContext, styledComponentsStyleTags, entryName, moduleFederationCssAssets } = options;
53
- const helmetData = (0, external_helmet_js_namespaceObject.getHelmetData)(runtimeContext);
50
+ const { config, runtimeContext, styledComponentsStyleTags, entryName, lifecycle, helmetData } = options;
54
51
  const callbacks = [
55
52
  (0, external_helmet_js_namespaceObject.createReplaceHelemt)(helmetData),
56
53
  (template)=>injectCss(template, entryName, styledComponentsStyleTags)
@@ -59,36 +56,48 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
59
56
  async function injectCss(template, entryName, styledComponentsStyleTags) {
60
57
  let css = await getCssChunks();
61
58
  if (styledComponentsStyleTags) css += styledComponentsStyleTags;
62
- css += (0, external_federatedCss_js_namespaceObject.createFederatedCssLinks)(moduleFederationCssAssets, {
59
+ return (0, external_shared_js_namespaceObject.replaceSSRTemplateChunk)({
60
+ name: 'styles',
63
61
  template,
64
- existingAssets: css.match(/href="([^"]+)"/g)?.map((item)=>item.replace(/^href="/, '').replace(/"$/, ''))
65
- });
66
- return (0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject.CHUNK_CSS_PLACEHOLDER, css);
62
+ placeholder: external_constants_js_namespaceObject.CHUNK_CSS_PLACEHOLDER,
63
+ content: css,
64
+ emittedAssets: css.match(/href="([^"]+)"/g)?.map((item)=>item.replace(/^href="/, '').replace(/"$/, ''))
65
+ }, lifecycle);
67
66
  async function getCssChunks() {
68
67
  const { routeManifest, routerContext, routes } = runtimeContext;
69
68
  const routeAssets = routeManifest?.routeAssets;
70
69
  if (!routeAssets) return '';
71
70
  let matchedRouteManifests = [];
72
- const matchedRouteIds = (0, lifecycle_js_namespaceObject.getRouterMatchedRouteIds)(runtimeContext);
73
- if (matchedRouteIds?.length) matchedRouteManifests = matchedRouteIds.map((routeId)=>routeAssets[routeId]).filter(Boolean);
74
- else if (routerContext && routes) {
71
+ if (routerContext && routes) {
75
72
  const matches = (0, router_namespaceObject.matchRoutes)(routes, routerContext.location, routerContext.basename);
76
- matchedRouteManifests = matches?.map((match, index)=>{
77
- if (!index) return;
73
+ matchedRouteManifests = matches?.flatMap((match, index)=>{
78
74
  const routeId = match.route.id;
79
- if (routeId) return routeAssets[routeId];
80
- }).filter((routeManifest)=>void 0 !== routeManifest) ?? [];
75
+ const manifest = 0 !== index && routeId ? routeAssets[routeId] : void 0;
76
+ return void 0 === manifest ? [] : [
77
+ manifest
78
+ ];
79
+ }) ?? [];
81
80
  }
82
- const asyncEntry = routeAssets[`async-${entryName}`];
83
- if (asyncEntry) matchedRouteManifests.push(asyncEntry);
84
- const cssChunks = matchedRouteManifests.reduce((chunks, routeManifest)=>{
85
- const { referenceCssAssets = [] } = routeManifest;
86
- const _cssChunks = referenceCssAssets.filter((asset)=>asset?.endsWith('.css') && !(0, external_utils_js_namespaceObject.hasStylesheetLink)(template, asset));
87
- return [
88
- ...chunks,
89
- ..._cssChunks
90
- ];
91
- }, []);
81
+ const createAsset = (url)=>({
82
+ url
83
+ });
84
+ const groups = [
85
+ {
86
+ name: 'route',
87
+ assets: matchedRouteManifests.flatMap((manifest)=>manifest.referenceCssAssets ?? []).map(createAsset)
88
+ },
89
+ {
90
+ name: 'async-entry',
91
+ assets: (routeAssets[`async-${entryName}`]?.referenceCssAssets ?? []).map(createAsset)
92
+ }
93
+ ];
94
+ const assets = lifecycle?.transformAssets(groups, {
95
+ kind: 'style',
96
+ source: 'template',
97
+ template,
98
+ createAsset
99
+ }) ?? groups.flatMap((group)=>group.assets);
100
+ const cssChunks = assets.map((asset)=>asset.url).filter((asset)=>asset.endsWith('.css') && !(0, external_utils_js_namespaceObject.hasStylesheetLink)(template, asset));
92
101
  const { inlineStyles } = config;
93
102
  const styles = await Promise.all(cssChunks.map(async (chunk)=>{
94
103
  const link = `<link href="${chunk}" rel="stylesheet" />`;
@@ -30,9 +30,7 @@ __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
31
  buildShellBeforeTemplate: ()=>buildShellBeforeTemplate
32
32
  });
33
- const lifecycle_js_namespaceObject = require("../../../router/runtime/lifecycle.js");
34
33
  const external_constants_js_namespaceObject = require("../constants.js");
35
- const external_federatedCss_js_namespaceObject = require("../federatedCss.js");
36
34
  const external_helmet_js_namespaceObject = require("../helmet.js");
37
35
  const external_shared_js_namespaceObject = require("../shared.js");
38
36
  const external_utils_js_namespaceObject = require("../utils.js");
@@ -42,8 +40,7 @@ const checkIsInline = (chunk, enableInline)=>{
42
40
  return Boolean(enableInline);
43
41
  };
44
42
  async function buildShellBeforeTemplate(beforeAppTemplate, options) {
45
- const { config, runtimeContext, styledComponentsStyleTags, entryName, moduleFederationCssAssets } = options;
46
- const helmetData = (0, external_helmet_js_namespaceObject.getHelmetData)(runtimeContext);
43
+ const { config, runtimeContext, styledComponentsStyleTags, entryName, lifecycle, helmetData } = options;
47
44
  const callbacks = [
48
45
  (0, external_helmet_js_namespaceObject.createReplaceHelemt)(helmetData),
49
46
  (template)=>injectCss(template, entryName, styledComponentsStyleTags)
@@ -52,28 +49,38 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
52
49
  async function injectCss(template, entryName, styledComponentsStyleTags) {
53
50
  let css = await getCssChunks();
54
51
  if (styledComponentsStyleTags) css += styledComponentsStyleTags;
55
- css += (0, external_federatedCss_js_namespaceObject.createFederatedCssLinks)(moduleFederationCssAssets, {
52
+ return (0, external_shared_js_namespaceObject.replaceSSRTemplateChunk)({
53
+ name: 'styles',
56
54
  template,
57
- existingAssets: css.match(/href="([^"]+)"/g)?.map((item)=>item.replace(/^href="/, '').replace(/"$/, ''))
58
- });
59
- return (0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject.CHUNK_CSS_PLACEHOLDER, css);
55
+ placeholder: external_constants_js_namespaceObject.CHUNK_CSS_PLACEHOLDER,
56
+ content: css,
57
+ emittedAssets: css.match(/href="([^"]+)"/g)?.map((item)=>item.replace(/^href="/, '').replace(/"$/, ''))
58
+ }, lifecycle);
60
59
  async function getCssChunks() {
61
60
  const { routeManifest } = runtimeContext;
62
61
  const routeAssets = routeManifest?.routeAssets;
63
62
  if (!routeAssets) return '';
64
- let matchedRouteManifests = [];
65
- const matchedRouteIds = (0, lifecycle_js_namespaceObject.getRouterMatchedRouteIds)(runtimeContext);
66
- if (matchedRouteIds?.length) matchedRouteManifests = matchedRouteIds.map((routeId)=>routeAssets[routeId]).filter(Boolean);
67
- const asyncEntry = routeAssets[`async-${entryName}`];
68
- if (asyncEntry) matchedRouteManifests.push(asyncEntry);
69
- const cssChunks = matchedRouteManifests.reduce((chunks, routeManifest)=>{
70
- const { referenceCssAssets = [] } = routeManifest;
71
- const _cssChunks = referenceCssAssets.filter((asset)=>asset?.endsWith('.css') && !(0, external_utils_js_namespaceObject.hasStylesheetLink)(template, asset));
72
- return [
73
- ...chunks,
74
- ..._cssChunks
75
- ];
76
- }, []);
63
+ const matchedRouteManifests = [];
64
+ const createAsset = (url)=>({
65
+ url
66
+ });
67
+ const groups = [
68
+ {
69
+ name: 'route',
70
+ assets: matchedRouteManifests.flatMap((manifest)=>manifest.referenceCssAssets ?? []).map(createAsset)
71
+ },
72
+ {
73
+ name: 'async-entry',
74
+ assets: (routeAssets[`async-${entryName}`]?.referenceCssAssets ?? []).map(createAsset)
75
+ }
76
+ ];
77
+ const assets = lifecycle?.transformAssets(groups, {
78
+ kind: 'style',
79
+ source: 'template',
80
+ template,
81
+ createAsset
82
+ }) ?? groups.flatMap((group)=>group.assets);
83
+ const cssChunks = assets.map((asset)=>asset.url).filter((asset)=>asset.endsWith('.css') && !(0, external_utils_js_namespaceObject.hasStylesheetLink)(template, asset));
77
84
  const { inlineStyles } = config;
78
85
  const styles = cssChunks.map((chunk)=>{
79
86
  const link = `<link href="${chunk}" rel="stylesheet" />`;