@bleedingdev/modern-js-runtime 3.9.0-ultramodern.2 → 3.9.0-ultramodern.21

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 (213) 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/cli/ssr/loadable-bundler-plugin.js +2 -0
  4. package/dist/cjs/cli/template.server.js +1 -2
  5. package/dist/cjs/core/browser/hydrate.js +9 -10
  6. package/dist/cjs/core/browser/index.js +4 -5
  7. package/dist/cjs/core/context/index.js +12 -45
  8. package/dist/cjs/core/context/public.js +4 -7
  9. package/dist/cjs/core/context/runtime.js +10 -4
  10. package/dist/cjs/core/index.js +3 -3
  11. package/dist/cjs/core/plugin/index.js +2 -2
  12. package/dist/cjs/core/react/index.js +3 -3
  13. package/dist/cjs/core/react/wrapper.js +23 -67
  14. package/dist/cjs/core/server/helmet.js +5 -4
  15. package/dist/cjs/core/server/requestHandler.js +6 -7
  16. package/dist/cjs/core/server/requestResponse.js +4 -4
  17. package/dist/cjs/core/server/routerCleanup.js +2 -2
  18. package/dist/cjs/core/server/shared.js +171 -4
  19. package/dist/cjs/core/server/stream/afterTemplate.js +21 -16
  20. package/dist/cjs/core/server/stream/beforeTemplate.js +37 -28
  21. package/dist/cjs/core/server/stream/beforeTemplate.worker.js +30 -23
  22. package/dist/cjs/core/server/stream/createReadableStream.js +222 -125
  23. package/dist/cjs/core/server/stream/createReadableStream.worker.js +171 -90
  24. package/dist/cjs/core/server/stream/deferredScript.js +3 -3
  25. package/dist/cjs/core/server/stream/shared.js +6 -2
  26. package/dist/cjs/core/server/string/index.js +104 -66
  27. package/dist/cjs/core/server/string/loadable.js +38 -23
  28. package/dist/cjs/core/server/string/ssrData.js +5 -12
  29. package/dist/cjs/core/server/utils.js +1 -2
  30. package/dist/cjs/document/cli/index.js +14 -5
  31. package/dist/cjs/exports/head.js +7 -14
  32. package/dist/cjs/internal.js +2 -2
  33. package/dist/cjs/router/cli/code/nestedRoutes.js +1 -2
  34. package/dist/cjs/router/cli/code/templates.js +1 -1
  35. package/dist/cjs/router/cli/code/utils.js +2 -2
  36. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +10 -9
  37. package/dist/cjs/router/runtime/PrefetchLink.js +69 -125
  38. package/dist/cjs/router/runtime/hooks.js +13 -2
  39. package/dist/cjs/router/runtime/internal.js +7 -45
  40. package/dist/cjs/router/runtime/plugin.js +19 -34
  41. package/dist/cjs/router/runtime/plugin.node.js +9 -37
  42. package/dist/cjs/router/runtime/redirect.js +1 -1
  43. package/dist/esm/cli/code.mjs +3 -1
  44. package/dist/esm/cli/ssr/index.mjs +3 -72
  45. package/dist/esm/cli/ssr/loadable-bundler-plugin.mjs +2 -0
  46. package/dist/esm/cli/template.server.mjs +1 -2
  47. package/dist/esm/core/browser/hydrate.mjs +10 -11
  48. package/dist/esm/core/browser/index.mjs +1 -2
  49. package/dist/esm/core/context/index.mjs +2 -5
  50. package/dist/esm/core/context/public.mjs +1 -5
  51. package/dist/esm/core/context/runtime.mjs +6 -3
  52. package/dist/esm/core/index.mjs +1 -1
  53. package/dist/esm/core/plugin/index.mjs +1 -1
  54. package/dist/esm/core/react/index.mjs +1 -1
  55. package/dist/esm/core/react/wrapper.mjs +20 -67
  56. package/dist/esm/core/server/helmet.mjs +5 -4
  57. package/dist/esm/core/server/requestHandler.mjs +1 -2
  58. package/dist/esm/core/server/requestResponse.mjs +3 -3
  59. package/dist/esm/core/server/routerCleanup.mjs +1 -1
  60. package/dist/esm/core/server/shared.mjs +153 -1
  61. package/dist/esm/core/server/stream/afterTemplate.mjs +23 -18
  62. package/dist/esm/core/server/stream/beforeTemplate.mjs +40 -31
  63. package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +33 -26
  64. package/dist/esm/core/server/stream/createReadableStream.mjs +220 -123
  65. package/dist/esm/core/server/stream/createReadableStream.worker.mjs +161 -90
  66. package/dist/esm/core/server/stream/deferredScript.mjs +3 -3
  67. package/dist/esm/core/server/stream/shared.mjs +4 -3
  68. package/dist/esm/core/server/string/index.mjs +106 -68
  69. package/dist/esm/core/server/string/loadable.mjs +38 -23
  70. package/dist/esm/core/server/string/ssrData.mjs +5 -12
  71. package/dist/esm/core/server/utils.mjs +1 -2
  72. package/dist/esm/document/cli/index.mjs +12 -6
  73. package/dist/esm/exports/head.mjs +7 -14
  74. package/dist/esm/internal.mjs +1 -1
  75. package/dist/esm/router/cli/code/nestedRoutes.mjs +1 -2
  76. package/dist/esm/router/cli/code/templates.mjs +1 -1
  77. package/dist/esm/router/cli/code/utils.mjs +2 -2
  78. package/dist/esm/router/runtime/DeferredDataScripts.node.mjs +10 -9
  79. package/dist/esm/router/runtime/PrefetchLink.mjs +68 -124
  80. package/dist/esm/router/runtime/hooks.mjs +9 -1
  81. package/dist/esm/router/runtime/internal.mjs +2 -33
  82. package/dist/esm/router/runtime/plugin.mjs +10 -25
  83. package/dist/esm/router/runtime/plugin.node.mjs +3 -31
  84. package/dist/esm/router/runtime/redirect.mjs +1 -1
  85. package/dist/esm-node/cli/code.mjs +3 -1
  86. package/dist/esm-node/cli/ssr/index.mjs +3 -72
  87. package/dist/esm-node/cli/ssr/loadable-bundler-plugin.mjs +2 -0
  88. package/dist/esm-node/cli/template.server.mjs +1 -2
  89. package/dist/esm-node/core/browser/hydrate.mjs +10 -11
  90. package/dist/esm-node/core/browser/index.mjs +1 -2
  91. package/dist/esm-node/core/context/index.mjs +2 -5
  92. package/dist/esm-node/core/context/public.mjs +1 -5
  93. package/dist/esm-node/core/context/runtime.mjs +6 -3
  94. package/dist/esm-node/core/index.mjs +1 -1
  95. package/dist/esm-node/core/plugin/index.mjs +1 -1
  96. package/dist/esm-node/core/react/index.mjs +1 -1
  97. package/dist/esm-node/core/react/wrapper.mjs +20 -67
  98. package/dist/esm-node/core/server/helmet.mjs +5 -4
  99. package/dist/esm-node/core/server/requestHandler.mjs +1 -2
  100. package/dist/esm-node/core/server/requestResponse.mjs +3 -3
  101. package/dist/esm-node/core/server/routerCleanup.mjs +1 -1
  102. package/dist/esm-node/core/server/shared.mjs +153 -1
  103. package/dist/esm-node/core/server/stream/afterTemplate.mjs +23 -18
  104. package/dist/esm-node/core/server/stream/beforeTemplate.mjs +40 -31
  105. package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +33 -26
  106. package/dist/esm-node/core/server/stream/createReadableStream.mjs +220 -123
  107. package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +161 -90
  108. package/dist/esm-node/core/server/stream/deferredScript.mjs +3 -3
  109. package/dist/esm-node/core/server/stream/shared.mjs +4 -3
  110. package/dist/esm-node/core/server/string/index.mjs +106 -68
  111. package/dist/esm-node/core/server/string/loadable.mjs +38 -23
  112. package/dist/esm-node/core/server/string/ssrData.mjs +5 -12
  113. package/dist/esm-node/core/server/utils.mjs +1 -2
  114. package/dist/esm-node/document/cli/index.mjs +12 -6
  115. package/dist/esm-node/exports/head.mjs +7 -14
  116. package/dist/esm-node/internal.mjs +1 -1
  117. package/dist/esm-node/router/cli/code/nestedRoutes.mjs +1 -2
  118. package/dist/esm-node/router/cli/code/templates.mjs +1 -1
  119. package/dist/esm-node/router/cli/code/utils.mjs +2 -2
  120. package/dist/esm-node/router/runtime/DeferredDataScripts.node.mjs +10 -9
  121. package/dist/esm-node/router/runtime/PrefetchLink.mjs +68 -124
  122. package/dist/esm-node/router/runtime/hooks.mjs +9 -1
  123. package/dist/esm-node/router/runtime/internal.mjs +2 -33
  124. package/dist/esm-node/router/runtime/plugin.mjs +10 -25
  125. package/dist/esm-node/router/runtime/plugin.node.mjs +3 -31
  126. package/dist/esm-node/router/runtime/redirect.mjs +1 -1
  127. package/dist/types/cli/ssr/index.d.ts +0 -3
  128. package/dist/types/core/context/index.d.ts +4 -6
  129. package/dist/types/core/context/public.d.ts +1 -23
  130. package/dist/types/core/context/runtime.d.ts +26 -2
  131. package/dist/types/core/index.d.ts +1 -1
  132. package/dist/types/core/react/wrapper.d.ts +7 -1
  133. package/dist/types/core/server/helmet.d.ts +4 -5
  134. package/dist/types/core/server/requestHandler.d.ts +3 -3
  135. package/dist/types/core/server/requestResponse.d.ts +1 -1
  136. package/dist/types/core/server/routerCleanup.d.ts +1 -1
  137. package/dist/types/core/server/shared.d.ts +24 -1
  138. package/dist/types/core/server/stream/afterTemplate.d.ts +2 -1
  139. package/dist/types/core/server/stream/beforeTemplate.d.ts +4 -1
  140. package/dist/types/core/server/stream/beforeTemplate.worker.d.ts +4 -1
  141. package/dist/types/core/server/stream/shared.d.ts +16 -2
  142. package/dist/types/core/server/string/loadable.d.ts +6 -3
  143. package/dist/types/core/server/string/ssrData.d.ts +2 -1
  144. package/dist/types/core/server/string/types.d.ts +1 -5
  145. package/dist/types/core/server/tracer.d.ts +1 -1
  146. package/dist/types/core/server/utils.d.ts +1 -1
  147. package/dist/types/core/types.d.ts +1 -2
  148. package/dist/types/document/cli/index.d.ts +1 -0
  149. package/dist/types/exports/head.d.ts +2 -2
  150. package/dist/types/internal.d.ts +1 -1
  151. package/dist/types/router/runtime/PrefetchLink.d.ts +27 -2
  152. package/dist/types/router/runtime/hooks.d.ts +19 -2
  153. package/dist/types/router/runtime/internal.d.ts +4 -21
  154. package/dist/types/router/runtime/types.d.ts +2 -43
  155. package/package.json +18 -46
  156. package/rslib.config.mts +3 -0
  157. package/rstest.config.mts +28 -2
  158. package/dist/cjs/boundary-debugger/index.js +0 -317
  159. package/dist/cjs/core/context/extensions.js +0 -74
  160. package/dist/cjs/core/context/helmetContext.js +0 -54
  161. package/dist/cjs/core/server/federatedCss.js +0 -58
  162. package/dist/cjs/core/server/scriptOrder.js +0 -140
  163. package/dist/cjs/module-federation/consume-surface.js +0 -199
  164. package/dist/cjs/module-federation/distributed-ssr.js +0 -135
  165. package/dist/cjs/module-federation/index.js +0 -316
  166. package/dist/cjs/module-federation/last-known-good.js +0 -157
  167. package/dist/cjs/module-federation/manifest-recovery-runtime-plugin.js +0 -129
  168. package/dist/cjs/module-federation/surface-resolution-types.js +0 -61
  169. package/dist/cjs/router/runtime/lifecycle.js +0 -167
  170. package/dist/cjs/router/runtime/provider.js +0 -153
  171. package/dist/cjs/rsc/server.worker.js +0 -62
  172. package/dist/esm/boundary-debugger/index.mjs +0 -277
  173. package/dist/esm/core/context/extensions.mjs +0 -33
  174. package/dist/esm/core/context/helmetContext.mjs +0 -13
  175. package/dist/esm/core/server/federatedCss.mjs +0 -20
  176. package/dist/esm/core/server/scriptOrder.mjs +0 -90
  177. package/dist/esm/module-federation/consume-surface.mjs +0 -158
  178. package/dist/esm/module-federation/distributed-ssr.mjs +0 -82
  179. package/dist/esm/module-federation/index.mjs +0 -115
  180. package/dist/esm/module-federation/last-known-good.mjs +0 -113
  181. package/dist/esm/module-federation/manifest-recovery-runtime-plugin.mjs +0 -89
  182. package/dist/esm/module-federation/surface-resolution-types.mjs +0 -8
  183. package/dist/esm/router/runtime/lifecycle.mjs +0 -105
  184. package/dist/esm/router/runtime/provider.mjs +0 -100
  185. package/dist/esm/rsc/server.worker.mjs +0 -1
  186. package/dist/esm-node/boundary-debugger/index.mjs +0 -278
  187. package/dist/esm-node/core/context/extensions.mjs +0 -34
  188. package/dist/esm-node/core/context/helmetContext.mjs +0 -14
  189. package/dist/esm-node/core/server/federatedCss.mjs +0 -21
  190. package/dist/esm-node/core/server/scriptOrder.mjs +0 -91
  191. package/dist/esm-node/module-federation/consume-surface.mjs +0 -159
  192. package/dist/esm-node/module-federation/distributed-ssr.mjs +0 -83
  193. package/dist/esm-node/module-federation/index.mjs +0 -116
  194. package/dist/esm-node/module-federation/last-known-good.mjs +0 -114
  195. package/dist/esm-node/module-federation/manifest-recovery-runtime-plugin.mjs +0 -90
  196. package/dist/esm-node/module-federation/surface-resolution-types.mjs +0 -9
  197. package/dist/esm-node/router/runtime/lifecycle.mjs +0 -106
  198. package/dist/esm-node/router/runtime/provider.mjs +0 -101
  199. package/dist/esm-node/rsc/server.worker.mjs +0 -2
  200. package/dist/types/boundary-debugger/index.d.ts +0 -28
  201. package/dist/types/core/context/extensions.d.ts +0 -35
  202. package/dist/types/core/context/helmetContext.d.ts +0 -10
  203. package/dist/types/core/server/federatedCss.d.ts +0 -5
  204. package/dist/types/core/server/scriptOrder.d.ts +0 -25
  205. package/dist/types/module-federation/consume-surface.d.ts +0 -104
  206. package/dist/types/module-federation/distributed-ssr.d.ts +0 -61
  207. package/dist/types/module-federation/index.d.ts +0 -71
  208. package/dist/types/module-federation/last-known-good.d.ts +0 -52
  209. package/dist/types/module-federation/manifest-recovery-runtime-plugin.d.ts +0 -25
  210. package/dist/types/module-federation/surface-resolution-types.d.ts +0 -23
  211. package/dist/types/router/runtime/lifecycle.d.ts +0 -27
  212. package/dist/types/router/runtime/provider.d.ts +0 -78
  213. package/dist/types/rsc/server.worker.d.ts +0 -1
@@ -1,5 +1,14 @@
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
+ })();
3
12
  (()=>{
4
13
  __webpack_require__.d = (exports1, getters, values)=>{
5
14
  var define = (defs, kind)=>{
@@ -31,123 +40,195 @@ __webpack_require__.d(__webpack_exports__, {
31
40
  createReadableStreamFromElement: ()=>createReadableStreamFromElement
32
41
  });
33
42
  const ssr_namespaceObject = require("@modern-js/render/ssr");
34
- const runtime_extensions_namespaceObject = require("@modern-js/runtime-extensions");
43
+ const context_namespaceObject = require("@modern-js/runtime/context");
35
44
  const node_namespaceObject = require("@modern-js/runtime-utils/node");
45
+ const external_react_namespaceObject = require("react");
46
+ var external_react_default = /*#__PURE__*/ __webpack_require__.n(external_react_namespaceObject);
36
47
  const external_common_js_namespaceObject = require("../../../common.js");
37
48
  const external_constants_js_namespaceObject = require("../../constants.js");
49
+ const index_js_namespaceObject = require("../../context/monitors/index.js");
50
+ const wrapper_js_namespaceObject = require("../../react/wrapper.js");
38
51
  const external_helmet_js_namespaceObject = require("../helmet.js");
52
+ const external_shared_js_namespaceObject = require("../shared.js");
39
53
  const external_deferredScript_js_namespaceObject = require("./deferredScript.js");
40
- const external_shared_js_namespaceObject = require("./shared.js");
54
+ const external_shared_js_namespaceObject_1 = require("./shared.js");
41
55
  const external_template_js_namespaceObject = require("./template.js");
42
56
  const createReadableStreamFromElement = async (request, rootElement, options)=>{
43
- let shellChunkStatus = external_shared_js_namespaceObject.ShellChunkStatus.START;
44
- const chunkVec = [];
45
- const { htmlTemplate, runtimeContext, config, ssrConfig, entryName, moduleFederationCssAssets, rscManifest, rscRoot } = options;
46
- runtime_extensions_namespaceObject.beginHeadRender(runtimeContext);
47
- const { shellBefore, shellAfter } = await (0, external_template_js_namespaceObject.getTemplates)(htmlTemplate, {
48
- renderLevel: external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER,
57
+ const { htmlTemplate, runtimeContext, config, ssrConfig, entryName, resource, rscManifest, rscRoot } = options;
58
+ const hooks = (0, context_namespaceObject.getGlobalInternalRuntimeContext)().hooks;
59
+ const isRsc = true === (0, context_namespaceObject.getGlobalEnableRsc)();
60
+ const extenders = hooks.extendStreamSSR.call({
61
+ runtimeContext,
62
+ request,
63
+ resource,
64
+ config,
65
+ platform: 'web',
66
+ mode: 'stream',
67
+ monitors: (0, index_js_namespaceObject.getMonitors)(),
68
+ isRsc,
69
+ terminalMarker: external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK
70
+ }) || [];
71
+ const lifecycle = (0, external_shared_js_namespaceObject.createSSRRenderLifecycle)(extenders);
72
+ const reportOnce = (0, external_shared_js_namespaceObject.createSSRStreamErrorReporter)(options.onError);
73
+ const reportError = (error)=>{
74
+ if (!request.signal.aborted && lifecycle.terminal?.status !== 'cancelled') reportOnce(error);
75
+ };
76
+ const forceStream2String = Boolean("u" > typeof process && process.env?.MODERN_JS_STREAM_TO_STRING);
77
+ let pendingSource;
78
+ let bodyOpen = true;
79
+ let bodyPipe;
80
+ const templateOptions = {
49
81
  runtimeContext,
50
82
  ssrConfig,
51
83
  request,
52
84
  config,
53
85
  entryName,
54
- moduleFederationCssAssets
55
- });
86
+ lifecycle
87
+ };
56
88
  try {
89
+ request.signal.throwIfAborted();
90
+ for (const extender of extenders)extender.init?.({
91
+ rootElement,
92
+ forceStream2String
93
+ });
57
94
  const readableOriginal = await (0, ssr_namespaceObject.renderSSRStream)(rootElement, {
58
95
  request,
96
+ signal: request.signal,
59
97
  nonce: config.nonce,
98
+ progressiveChunkSize: external_shared_js_namespaceObject_1.SHELL_PROGRESSIVE_CHUNK_SIZE,
60
99
  rscManifest,
61
100
  rscRoot: rscRoot,
62
101
  routes: runtimeContext.routes,
63
- onError (error) {
64
- options.onError?.(error);
102
+ onError: reportError,
103
+ wrapHtmlRoot (root) {
104
+ let element = external_react_default().isValidElement(root) ? root : external_react_default().createElement(external_react_default().Fragment, null, root);
105
+ if (isRsc && false === runtimeContext.isBrowser) element = (0, wrapper_js_namespaceObject.wrapRuntimeComponentResolver)(element, hooks);
106
+ for (const extender of extenders)element = extender.modifyRootElement?.(element) ?? element;
107
+ lifecycle.beforeReact();
108
+ return element;
65
109
  }
66
110
  });
111
+ pendingSource = readableOriginal;
67
112
  options.onShellReady?.();
68
- readableOriginal.allReady.then(()=>{
69
- options?.onAllReady?.();
70
- });
71
- const forceStreamToString = Boolean("u" > typeof process && process.env?.MODERN_JS_STREAM_TO_STRING);
72
- const { waitForAllReady } = (0, external_shared_js_namespaceObject.resolveStreamingMode)(request, forceStreamToString);
113
+ readableOriginal.allReady.then(()=>options.onAllReady?.()).catch(reportError);
114
+ const { waitForAllReady } = (0, external_shared_js_namespaceObject_1.resolveStreamingMode)(request, forceStream2String);
73
115
  if (waitForAllReady) await readableOriginal.allReady;
74
- const reader = runtime_extensions_namespaceObject.createConservingWebShellStream(readableOriginal, runtimeContext, external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK, options.onError).getReader();
75
- const stream = new ReadableStream({
116
+ request.signal.throwIfAborted();
117
+ const styledComponentsStyleTags = extenders.map((extender)=>extender.getStyleTags?.() ?? '').join('');
118
+ const { shellBefore, shellAfter } = await (0, external_template_js_namespaceObject.getTemplates)(htmlTemplate, {
119
+ ...templateOptions,
120
+ renderLevel: external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER,
121
+ styledComponentsStyleTags
122
+ });
123
+ for (const extender of (0, external_shared_js_namespaceObject.orderSSRStreamTransforms)(extenders))if (void 0 !== extender.processReadableStream) pendingSource = extender.processReadableStream(pendingSource);
124
+ const decoder = new TextDecoder();
125
+ const encoder = new TextEncoder();
126
+ const pendingScripts = [];
127
+ const buffered = [];
128
+ let bufferedLength = 0;
129
+ let markerTail = '';
130
+ let shellChunkStatus = external_shared_js_namespaceObject_1.ShellChunkStatus.START;
131
+ let bodyController;
132
+ const emit = (chunk, controller)=>{
133
+ if (shellChunkStatus === external_shared_js_namespaceObject_1.ShellChunkStatus.FINISH) {
134
+ if (chunk.length > 0) controller.enqueue(encoder.encode(chunk));
135
+ return;
136
+ }
137
+ const window = markerTail + chunk;
138
+ const windowIndex = window.indexOf(external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK);
139
+ const markerIndex = bufferedLength - markerTail.length + windowIndex;
140
+ buffered.push(chunk);
141
+ bufferedLength += chunk.length;
142
+ if (-1 === windowIndex) {
143
+ markerTail = window.slice(Math.max(0, window.length - external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK.length + 1));
144
+ return;
145
+ }
146
+ const shell = buffered.join('');
147
+ const beforeMark = lifecycle.completedBody(shell.slice(0, markerIndex), 'shell');
148
+ const afterMark = shell.slice(markerIndex + external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK.length);
149
+ const completedShellBefore = (0, external_helmet_js_namespaceObject.createReplaceHelemt)((0, external_helmet_js_namespaceObject.getHelmetData)(extenders))(shellBefore);
150
+ shellChunkStatus = external_shared_js_namespaceObject_1.ShellChunkStatus.FINISH;
151
+ buffered.length = 0;
152
+ controller.enqueue(encoder.encode(`${completedShellBefore}${beforeMark}${shellAfter}`));
153
+ if (afterMark.length > 0) controller.enqueue(encoder.encode(afterMark));
154
+ for (const script of pendingScripts)controller.enqueue(encoder.encode(script));
155
+ pendingScripts.length = 0;
156
+ };
157
+ const body = new TransformStream({
76
158
  start (controller) {
77
- const pendingScripts = [];
78
- let isClosed = false;
79
- const safeEnqueue = (chunk)=>{
80
- if (isClosed) return;
81
- try {
82
- controller.enqueue(chunk);
83
- } catch {
84
- isClosed = true;
85
- }
86
- };
87
- const closeController = ()=>{
88
- if (!isClosed) {
89
- isClosed = true;
90
- try {
91
- controller.close();
92
- } catch {}
93
- }
94
- };
95
- const flushPendingScripts = ()=>{
96
- for (const s of pendingScripts)safeEnqueue((0, external_shared_js_namespaceObject.encodeForWebStream)(s));
97
- pendingScripts.length = 0;
98
- };
99
- const enqueueScript = (script)=>{
100
- if (shellChunkStatus === external_shared_js_namespaceObject.ShellChunkStatus.FINISH) safeEnqueue((0, external_shared_js_namespaceObject.encodeForWebStream)(script));
101
- else pendingScripts.push(script);
102
- };
103
- const storageContext = node_namespaceObject.storage.useContext?.();
104
- const activeDeferreds = storageContext?.activeDeferreds;
105
- const entries = activeDeferreds instanceof Map ? Array.from(activeDeferreds.entries()) : [];
106
- if (entries.length > 0) (0, external_deferredScript_js_namespaceObject.enqueueFromEntries)(entries, config.nonce, enqueueScript);
107
- async function push() {
108
- try {
109
- const { done, value } = await reader.read();
110
- if (done) return void closeController();
111
- if (isClosed) return;
112
- if (shellChunkStatus !== external_shared_js_namespaceObject.ShellChunkStatus.FINISH) {
113
- chunkVec.push(new TextDecoder().decode(value));
114
- const concatedChunk = chunkVec.join('');
115
- const markerIndex = concatedChunk.indexOf(external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK);
116
- if (-1 !== markerIndex) {
117
- const beforeMark = concatedChunk.slice(0, markerIndex);
118
- const afterMark = concatedChunk.slice(markerIndex + external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK.length);
119
- runtime_extensions_namespaceObject.publishHeadRender(runtimeContext);
120
- const completedShellBefore = (0, external_helmet_js_namespaceObject.createReplaceHelemt)((0, external_helmet_js_namespaceObject.getHelmetData)(runtimeContext))(shellBefore);
121
- shellChunkStatus = external_shared_js_namespaceObject.ShellChunkStatus.FINISH;
122
- safeEnqueue((0, external_shared_js_namespaceObject.encodeForWebStream)(`${completedShellBefore}${beforeMark}${shellAfter}`));
123
- if (afterMark.length > 0) safeEnqueue((0, external_shared_js_namespaceObject.encodeForWebStream)(afterMark));
124
- flushPendingScripts();
125
- }
126
- } else safeEnqueue(value);
127
- if (!isClosed) push();
128
- } catch (error) {
129
- runtime_extensions_namespaceObject.abortHeadRender(runtimeContext);
130
- if (!isClosed) {
131
- isClosed = true;
132
- try {
133
- controller.error(error);
134
- } catch {}
135
- }
136
- }
137
- }
138
- push();
159
+ bodyController = controller;
160
+ },
161
+ transform (chunk, controller) {
162
+ emit(decoder.decode(chunk, {
163
+ stream: true
164
+ }), controller);
139
165
  },
140
- cancel (reason) {
141
- runtime_extensions_namespaceObject.abortHeadRender(runtimeContext);
142
- reader.cancel(reason).catch(()=>{});
166
+ flush (controller) {
167
+ bodyOpen = false;
168
+ emit(decoder.decode(), controller);
169
+ if (shellChunkStatus !== external_shared_js_namespaceObject_1.ShellChunkStatus.FINISH) throw new Error('React SSR stream ended before the shell marker');
143
170
  }
144
171
  });
145
- return stream;
146
- } catch (e) {
147
- runtime_extensions_namespaceObject.abortHeadRender(runtimeContext);
148
- const fallbackHtml = `${shellBefore}${shellAfter}`;
149
- const stream = (0, external_shared_js_namespaceObject.getReadableStreamFromString)(fallbackHtml);
150
- return stream;
172
+ bodyPipe = pendingSource.pipeTo(body.writable);
173
+ bodyPipe.catch(()=>{});
174
+ pendingSource = body.readable;
175
+ const activeDeferreds = node_namespaceObject.storage.useContext?.()?.activeDeferreds;
176
+ const entries = activeDeferreds instanceof Map ? Array.from(activeDeferreds.entries()) : [];
177
+ (0, external_deferredScript_js_namespaceObject.enqueueFromEntries)(entries, config.nonce, (script)=>{
178
+ if (!bodyOpen) return;
179
+ if (shellChunkStatus === external_shared_js_namespaceObject_1.ShellChunkStatus.FINISH) try {
180
+ bodyController.enqueue(encoder.encode(script));
181
+ } catch {
182
+ bodyOpen = false;
183
+ }
184
+ else pendingScripts.push(script);
185
+ });
186
+ return (0, external_shared_js_namespaceObject.observeSSRStream)(pendingSource, {
187
+ lifecycle,
188
+ async onError (error) {
189
+ bodyOpen = false;
190
+ await bodyPipe?.catch(()=>{});
191
+ reportError(error);
192
+ },
193
+ signal: request.signal,
194
+ async onCancel (reason) {
195
+ bodyOpen = false;
196
+ await bodyPipe?.catch((error)=>{
197
+ if (error !== reason) throw error;
198
+ });
199
+ },
200
+ onComplete: ()=>bodyPipe
201
+ });
202
+ } catch (error) {
203
+ bodyOpen = false;
204
+ if (void 0 !== pendingSource) try {
205
+ await pendingSource.cancel(error);
206
+ await bodyPipe?.catch(()=>{});
207
+ } catch (cancelError) {
208
+ if (!request.signal.aborted) reportError(cancelError);
209
+ }
210
+ if (request.signal.aborted) {
211
+ lifecycle.finish({
212
+ status: 'cancelled',
213
+ reason: request.signal.reason
214
+ });
215
+ throw request.signal.reason;
216
+ }
217
+ lifecycle.finish({
218
+ status: 'fallback',
219
+ error
220
+ });
221
+ reportError(error);
222
+ const { shellBefore, shellAfter } = await (0, external_template_js_namespaceObject.getTemplates)(htmlTemplate, {
223
+ ...templateOptions,
224
+ renderLevel: external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER,
225
+ helmetData: (0, external_helmet_js_namespaceObject.getHelmetData)(extenders)
226
+ });
227
+ return (0, external_shared_js_namespaceObject.observeSSRStream)((0, external_shared_js_namespaceObject_1.getReadableStreamFromString)(`${shellBefore}${shellAfter}`), {
228
+ lifecycle,
229
+ onError: reportError,
230
+ signal: request.signal
231
+ });
151
232
  }
152
233
  };
153
234
  exports.createReadableStreamFromElement = __webpack_exports__.createReadableStreamFromElement;
@@ -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) {
@@ -28,6 +28,7 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
+ SHELL_PROGRESSIVE_CHUNK_SIZE: ()=>SHELL_PROGRESSIVE_CHUNK_SIZE,
31
32
  ShellChunkStatus: ()=>shared_ShellChunkStatus,
32
33
  createRenderStreaming: ()=>createRenderStreaming,
33
34
  encodeForWebStream: ()=>encodeForWebStream,
@@ -46,6 +47,7 @@ var shared_ShellChunkStatus = /*#__PURE__*/ function(ShellChunkStatus) {
46
47
  ShellChunkStatus[ShellChunkStatus["FINISH"] = 1] = "FINISH";
47
48
  return ShellChunkStatus;
48
49
  }({});
50
+ const SHELL_PROGRESSIVE_CHUNK_SIZE = Number.MAX_SAFE_INTEGER;
49
51
  const SHOULD_STREAM_ALL_HEADER = 'x-should-stream-all';
50
52
  function parseShouldStreamAllFlag(value) {
51
53
  if (!value) return;
@@ -99,7 +101,7 @@ function createRenderStreaming(createReadableStreamPromise) {
99
101
  const end = (0, time_namespaceObject.time)();
100
102
  const { runtimeContext, config, resource } = options;
101
103
  const { onError, onTiming } = options;
102
- const { htmlTemplate, entryName, moduleFederationCssAssets } = resource;
104
+ const { htmlTemplate, entryName } = resource;
103
105
  const ssrConfig = (0, external_utils_js_namespaceObject.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
104
106
  const StreamServerRootWrapper = ({ children })=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(jsx_runtime_namespaceObject.Fragment, {
105
107
  children: [
@@ -119,7 +121,7 @@ function createRenderStreaming(createReadableStreamPromise) {
119
121
  runtimeContext,
120
122
  ssrConfig,
121
123
  entryName,
122
- moduleFederationCssAssets,
124
+ resource,
123
125
  rscClientManifest: options.rscClientManifest,
124
126
  rscSSRManifest: options.rscSSRManifest,
125
127
  rscServerManifest: options.rscServerManifest,
@@ -143,12 +145,14 @@ function createRenderStreaming(createReadableStreamPromise) {
143
145
  return stream;
144
146
  };
145
147
  }
148
+ exports.SHELL_PROGRESSIVE_CHUNK_SIZE = __webpack_exports__.SHELL_PROGRESSIVE_CHUNK_SIZE;
146
149
  exports.ShellChunkStatus = __webpack_exports__.ShellChunkStatus;
147
150
  exports.createRenderStreaming = __webpack_exports__.createRenderStreaming;
148
151
  exports.encodeForWebStream = __webpack_exports__.encodeForWebStream;
149
152
  exports.getReadableStreamFromString = __webpack_exports__.getReadableStreamFromString;
150
153
  exports.resolveStreamingMode = __webpack_exports__.resolveStreamingMode;
151
154
  for(var __rspack_i in __webpack_exports__)if (-1 === [
155
+ "SHELL_PROGRESSIVE_CHUNK_SIZE",
152
156
  "ShellChunkStatus",
153
157
  "createRenderStreaming",
154
158
  "encodeForWebStream",
@@ -39,17 +39,16 @@ __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");
42
+ const context_namespaceObject = require("@modern-js/runtime/context");
43
43
  const time_namespaceObject = require("@modern-js/runtime-utils/time");
44
44
  const constants_namespaceObject = require("@modern-js/utils/universal/constants");
45
45
  const server_namespaceObject = require("react-dom/server");
46
46
  var server_default = /*#__PURE__*/ __webpack_require__.n(server_namespaceObject);
47
47
  const external_constants_js_namespaceObject = require("../../constants.js");
48
- const index_js_namespaceObject = require("../../context/index.js");
48
+ const index_js_namespaceObject = require("../../context/monitors/index.js");
49
49
  const wrapper_js_namespaceObject = require("../../react/wrapper.js");
50
50
  const external_constants_js_namespaceObject_1 = require("../constants.js");
51
51
  const external_helmet_js_namespaceObject = require("../helmet.js");
52
- const external_scriptOrder_js_namespaceObject = require("../scriptOrder.js");
53
52
  const external_shared_js_namespaceObject = require("../shared.js");
54
53
  const external_tracer_js_namespaceObject = require("../tracer.js");
55
54
  const external_utils_js_namespaceObject = require("../utils.js");
@@ -62,7 +61,7 @@ const renderString = async (request, serverRoot, options)=>{
62
61
  onTiming
63
62
  };
64
63
  const routerContext = runtimeContext.routerContext;
65
- const { htmlTemplate, entryName, loadableStats, routeManifest, moduleFederationCssAssets } = resource;
64
+ const { htmlTemplate, entryName, loadableStats, routeManifest } = resource;
66
65
  const ssrConfig = (0, external_utils_js_namespaceObject.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
67
66
  const chunkSet = {
68
67
  renderLevel: external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER,
@@ -70,85 +69,124 @@ const renderString = async (request, serverRoot, options)=>{
70
69
  jsChunk: '',
71
70
  cssChunk: ''
72
71
  };
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
- ];
96
- const internalRuntimeContext = (0, index_js_namespaceObject.getGlobalInternalRuntimeContext)();
72
+ const collectors = [];
73
+ const lifecycle = (0, external_shared_js_namespaceObject.createSSRRenderLifecycle)(collectors);
74
+ const loadableCollector = new external_loadable_js_namespaceObject.LoadableCollector({
75
+ stats: loadableStats,
76
+ nonce: config.nonce,
77
+ routeManifest,
78
+ template: htmlTemplate,
79
+ entryName,
80
+ chunkSet,
81
+ config,
82
+ lifecycle
83
+ });
84
+ collectors.push(loadableCollector, new external_ssrData_js_namespaceObject.SSRDataCollector({
85
+ runtimeContext,
86
+ request,
87
+ ssrConfig,
88
+ ssrContext: runtimeContext.ssrContext,
89
+ chunkSet,
90
+ routerContext,
91
+ nonce: config.nonce,
92
+ useJsonScript: config.useJsonScript,
93
+ lifecycle
94
+ }));
95
+ const internalRuntimeContext = (0, context_namespaceObject.getGlobalInternalRuntimeContext)();
97
96
  const hooks = internalRuntimeContext.hooks;
98
97
  const extraCollectors = hooks.extendStringSSRCollectors.call({
99
- chunkSet
98
+ chunkSet,
99
+ render: {
100
+ runtimeContext,
101
+ request,
102
+ resource,
103
+ config,
104
+ platform: 'node',
105
+ mode: 'string',
106
+ monitors: (0, index_js_namespaceObject.getMonitors)(),
107
+ isRsc: true === (0, context_namespaceObject.getGlobalEnableRsc)()
108
+ }
100
109
  });
101
110
  for (const c of extraCollectors)if (c) collectors.unshift(c);
102
- const rootElement = (0, wrapper_js_namespaceObject.wrapRuntimeContextProvider)(serverRoot, Object.assign(runtimeContext, {
111
+ let rootElement = (0, wrapper_js_namespaceObject.wrapRuntimeContextProvider)(serverRoot, Object.assign(runtimeContext, {
103
112
  ssr: true
104
113
  }));
105
- const html = await generateHtml(rootElement, htmlTemplate, chunkSet, collectors, runtimeContext.ssrContext?.htmlModifiers || [], runtimeContext, entryName, tracer);
114
+ if (true === (0, context_namespaceObject.getGlobalEnableRsc)() && false === runtimeContext.isBrowser) rootElement = (0, wrapper_js_namespaceObject.wrapRuntimeComponentResolver)(rootElement, hooks);
115
+ const html = await generateHtml(rootElement, htmlTemplate, chunkSet, collectors, runtimeContext.ssrContext?.htmlModifiers || [], tracer, request.signal, lifecycle, loadableCollector.stylesheetInfo);
106
116
  return html;
107
117
  };
108
- async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifiers, runtimeContext, entryName, { onError, onTiming }) {
118
+ async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifiers, { onError, onTiming }, signal, lifecycle, stylesheetInfo) {
109
119
  let html = '';
110
120
  let helmetData;
111
- const finalApp = collectors.reduce((pre, creator)=>creator.collect?.(pre) || pre, App);
112
- runtime_extensions_namespaceObject.beginHeadRender(runtimeContext);
113
121
  try {
114
- const end = (0, time_namespaceObject.time)();
115
- html = server_default().renderToString(finalApp, {
116
- identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX
122
+ signal.throwIfAborted();
123
+ try {
124
+ const finalApp = collectors.reduce((pre, creator)=>creator.collect?.(pre) || pre, App);
125
+ lifecycle.beforeReact();
126
+ const end = (0, time_namespaceObject.time)();
127
+ html = server_default().renderToString(finalApp, {
128
+ identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX
129
+ });
130
+ html = lifecycle.completedBody(html, 'complete');
131
+ chunkSet.renderLevel = external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER;
132
+ helmetData = (0, external_helmet_js_namespaceObject.getHelmetData)(collectors);
133
+ const cost = end();
134
+ onTiming(external_tracer_js_namespaceObject.SSRTimings.RENDER_HTML, cost);
135
+ } catch (error) {
136
+ lifecycle.finish({
137
+ status: 'fallback',
138
+ error
139
+ });
140
+ html = '';
141
+ chunkSet.renderLevel = external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER;
142
+ onError(error, external_tracer_js_namespaceObject.SSRErrors.RENDER_HTML);
143
+ }
144
+ await Promise.all(collectors.map((component)=>component.effect()));
145
+ signal.throwIfAborted();
146
+ const { ssrScripts, cssChunk, jsChunk } = chunkSet;
147
+ const finalHtml = await (0, external_shared_js_namespaceObject.buildHtml)(htmlTemplate, [
148
+ createReplaceHtml(html),
149
+ (template)=>(0, external_shared_js_namespaceObject.replaceSSRTemplateChunk)({
150
+ name: "scripts",
151
+ template,
152
+ placeholder: external_constants_js_namespaceObject_1.CHUNK_JS_PLACEHOLDER,
153
+ content: jsChunk
154
+ }, lifecycle),
155
+ (template)=>(0, external_shared_js_namespaceObject.replaceSSRTemplateChunk)({
156
+ name: 'styles',
157
+ template,
158
+ placeholder: external_constants_js_namespaceObject_1.CHUNK_CSS_PLACEHOLDER,
159
+ content: cssChunk,
160
+ ...stylesheetInfo
161
+ }, lifecycle),
162
+ (template)=>(0, external_shared_js_namespaceObject.replaceSSRTemplateChunk)({
163
+ name: 'data',
164
+ template,
165
+ placeholder: external_constants_js_namespaceObject_1.SSR_DATA_PLACEHOLDER,
166
+ content: ssrScripts
167
+ }, lifecycle),
168
+ (0, external_helmet_js_namespaceObject.createReplaceHelemt)(helmetData),
169
+ ...htmlModifiers
170
+ ]);
171
+ signal.throwIfAborted();
172
+ lifecycle.finish({
173
+ status: 'complete'
174
+ });
175
+ return finalHtml;
176
+ } catch (error) {
177
+ lifecycle.finish(signal.aborted ? {
178
+ status: 'cancelled',
179
+ reason: signal.reason
180
+ } : {
181
+ status: 'error',
182
+ error
117
183
  });
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);
184
+ throw error;
127
185
  }
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
186
  }
140
187
  function createReplaceHtml(html) {
141
188
  return (template)=>(0, external_utils_js_namespaceObject.safeReplace)(template, external_constants_js_namespaceObject_1.HTML_PLACEHOLDER, html);
142
189
  }
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
190
  exports.renderString = __webpack_exports__.renderString;
153
191
  for(var __rspack_i in __webpack_exports__)if (-1 === [
154
192
  "renderString"