@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
@@ -30,150 +30,247 @@ __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
31
  createReadableStreamFromElement: ()=>createReadableStreamFromElement
32
32
  });
33
- const node_namespaceObject = require("@modern-js/runtime-extensions/node");
34
- const runtime_utils_node_namespaceObject = require("@modern-js/runtime-utils/node");
33
+ const context_namespaceObject = require("@modern-js/runtime/context");
34
+ const node_namespaceObject = require("@modern-js/runtime-utils/node");
35
35
  const constants_namespaceObject = require("@modern-js/utils/universal/constants");
36
36
  const external_stream_namespaceObject = require("stream");
37
37
  const external_common_js_namespaceObject = require("../../../common.js");
38
38
  const external_constants_js_namespaceObject = require("../../constants.js");
39
- const index_js_namespaceObject = require("../../context/index.js");
40
- const monitors_index_js_namespaceObject = require("../../context/monitors/index.js");
39
+ const index_js_namespaceObject = require("../../context/monitors/index.js");
40
+ const wrapper_js_namespaceObject = require("../../react/wrapper.js");
41
41
  const external_helmet_js_namespaceObject = require("../helmet.js");
42
+ const external_shared_js_namespaceObject = require("../shared.js");
42
43
  const external_deferredScript_js_namespaceObject = require("./deferredScript.js");
43
- const external_shared_js_namespaceObject = require("./shared.js");
44
+ const external_shared_js_namespaceObject_1 = require("./shared.js");
44
45
  const external_template_js_namespaceObject = require("./template.js");
45
- const defaultExtender = {
46
- modifyRootElement: (rootElement)=>rootElement,
47
- getStyleTags: ()=>'',
48
- processStream: (stream)=>stream
49
- };
50
46
  const createReadableStreamFromElement = async (request, rootElement, options)=>{
51
47
  const { renderToPipeableStream } = await import("react-dom/server");
52
- const { runtimeContext, htmlTemplate, config, ssrConfig, entryName, moduleFederationCssAssets } = options;
53
- let shellChunkStatus = external_shared_js_namespaceObject.ShellChunkStatus.START;
54
- let renderLevel = external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER;
48
+ const { runtimeContext, htmlTemplate, config, ssrConfig, entryName, resource } = options;
49
+ const hooks = (0, context_namespaceObject.getGlobalInternalRuntimeContext)().hooks;
50
+ const isRsc = true === (0, context_namespaceObject.getGlobalEnableRsc)();
51
+ const extenders = hooks.extendStreamSSR.call({
52
+ runtimeContext,
53
+ request,
54
+ resource,
55
+ config,
56
+ platform: 'node',
57
+ mode: 'stream',
58
+ monitors: (0, index_js_namespaceObject.getMonitors)(),
59
+ isRsc,
60
+ terminalMarker: external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK
61
+ }) || [];
62
+ const lifecycle = (0, external_shared_js_namespaceObject.createSSRRenderLifecycle)(extenders);
63
+ const reportError = (0, external_shared_js_namespaceObject.createSSRStreamErrorReporter)(options.onError);
55
64
  const forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
56
- const { onReady } = (0, external_shared_js_namespaceObject.resolveStreamingMode)(request, forceStream2String);
57
- const internalRuntimeContext = (0, index_js_namespaceObject.getGlobalInternalRuntimeContext)();
58
- const hooks = internalRuntimeContext.hooks;
59
- const extenders = hooks.extendStreamSSR.call() || [];
60
- if (0 === extenders.length) extenders.push(defaultExtender);
61
- extenders.forEach((extender)=>{
62
- if (extender.init) extender.init({
63
- rootElement,
64
- forceStream2String
65
- });
66
- });
67
- let processedRootElement = rootElement;
68
- extenders.forEach((extender)=>{
69
- if (extender.modifyRootElement) processedRootElement = extender.modifyRootElement(processedRootElement);
70
- });
71
- const chunkVec = [];
65
+ const { onReady } = (0, external_shared_js_namespaceObject_1.resolveStreamingMode)(request, forceStream2String);
66
+ let renderLevel = external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER;
72
67
  let hasStartedPipe = false;
73
- node_namespaceObject.beginHeadRender(runtimeContext);
74
- const reportError = node_namespaceObject.createOnceErrorReporter(options.onError);
75
- return new Promise((resolve)=>{
76
- const { pipe: reactStreamingPipe } = renderToPipeableStream(processedRootElement, {
77
- nonce: config.nonce,
78
- identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX,
79
- [onReady] () {
80
- if (hasStartedPipe) return;
81
- hasStartedPipe = true;
82
- let styledComponentsStyleTags = '';
83
- extenders.forEach((extender)=>{
84
- if (extender.getStyleTags) styledComponentsStyleTags += extender.getStyleTags();
68
+ let failed = false;
69
+ let reactStream;
70
+ const ownedStreams = new Set();
71
+ const streamCompletions = [];
72
+ let teardown;
73
+ return new Promise((resolve, reject)=>{
74
+ const destroyOwnedStreams = (reason)=>{
75
+ if (teardown) return teardown;
76
+ const error = void 0 === reason ? void 0 : reason instanceof Error ? reason : new Error(String(reason));
77
+ for (const stream of ownedStreams){
78
+ const destroyable = stream;
79
+ destroyable.destroy?.(error);
80
+ }
81
+ teardown = Promise.all(streamCompletions).then((errors)=>{
82
+ const cleanupError = errors.find((value)=>void 0 !== value && value !== error && 'ERR_STREAM_PREMATURE_CLOSE' !== value.code);
83
+ if (cleanupError) throw cleanupError;
84
+ });
85
+ return teardown;
86
+ };
87
+ const abortReact = (reason)=>reactStream?.abort(reason);
88
+ const fail = (error)=>{
89
+ if (failed) return;
90
+ failed = true;
91
+ request.signal.removeEventListener('abort', onStartupAbort);
92
+ if (request.signal.aborted) lifecycle.finish({
93
+ status: 'cancelled',
94
+ reason: request.signal.reason
95
+ });
96
+ else {
97
+ lifecycle.finish({
98
+ status: 'error',
99
+ error
85
100
  });
86
- options[onReady]?.();
87
- (0, external_template_js_namespaceObject.getTemplates)(htmlTemplate, {
88
- request,
89
- ssrConfig,
90
- renderLevel,
91
- runtimeContext,
92
- config,
93
- entryName,
94
- moduleFederationCssAssets,
95
- styledComponentsStyleTags
96
- }).then(({ shellAfter, shellBefore })=>{
97
- const pendingScripts = [];
98
- const body = new external_stream_namespaceObject.Transform({
99
- transform (chunk, _encoding, callback) {
100
- try {
101
- if (shellChunkStatus !== external_shared_js_namespaceObject.ShellChunkStatus.FINISH) {
102
- chunkVec.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
103
- const concatedChunk = Buffer.concat(chunkVec).toString('utf-8');
104
- const markerIndex = concatedChunk.indexOf(external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK);
105
- if (-1 !== markerIndex) {
106
- const beforeMark = concatedChunk.slice(0, markerIndex);
107
- const afterMark = concatedChunk.slice(markerIndex + external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK.length);
108
- node_namespaceObject.publishHeadRender(runtimeContext);
109
- const completedShellBefore = (0, external_helmet_js_namespaceObject.createReplaceHelemt)((0, external_helmet_js_namespaceObject.getHelmetData)(runtimeContext))(shellBefore);
110
- shellChunkStatus = external_shared_js_namespaceObject.ShellChunkStatus.FINISH;
111
- this.push(`${completedShellBefore}${beforeMark}${shellAfter}`);
112
- if (afterMark) this.push(afterMark);
113
- if (pendingScripts.length > 0) for (const s of pendingScripts)this.push(s);
114
- }
115
- } else this.push(chunk);
116
- callback();
117
- } catch (e) {
118
- e instanceof Error ? callback(e) : callback(new Error('Received unknown error when streaming'));
119
- }
101
+ reportError(error);
102
+ }
103
+ abortReact(error);
104
+ destroyOwnedStreams(error).then(()=>reject(error), ()=>reject(error));
105
+ };
106
+ const own = (stream)=>{
107
+ if (!ownedStreams.has(stream)) {
108
+ ownedStreams.add(stream);
109
+ streamCompletions.push(new Promise((done)=>{
110
+ (0, external_stream_namespaceObject.finished)(stream, (error)=>done(error ?? void 0));
111
+ }));
112
+ stream.on('error', fail);
113
+ }
114
+ return stream;
115
+ };
116
+ const onStartupAbort = ()=>fail(request.signal.reason);
117
+ const deliver = (source)=>{
118
+ const stream = (0, external_shared_js_namespaceObject.observeSSRStream)(source, {
119
+ lifecycle,
120
+ signal: request.signal,
121
+ async onError (error) {
122
+ failed = true;
123
+ abortReact(error);
124
+ await destroyOwnedStreams(error);
125
+ reportError(error);
126
+ },
127
+ onCancel (reason) {
128
+ failed = true;
129
+ const cleanup = destroyOwnedStreams();
130
+ abortReact(reason);
131
+ return cleanup;
132
+ }
133
+ });
134
+ request.signal.removeEventListener('abort', onStartupAbort);
135
+ resolve(stream);
136
+ };
137
+ const templateOptions = ()=>({
138
+ request,
139
+ ssrConfig,
140
+ renderLevel,
141
+ runtimeContext,
142
+ config,
143
+ entryName,
144
+ lifecycle
145
+ });
146
+ const startOutput = async ()=>{
147
+ if (hasStartedPipe || failed) return;
148
+ hasStartedPipe = true;
149
+ const styledComponentsStyleTags = extenders.map((extender)=>extender.getStyleTags?.() ?? '').join('');
150
+ options[onReady]?.();
151
+ const { shellBefore, shellAfter } = await (0, external_template_js_namespaceObject.getTemplates)(htmlTemplate, {
152
+ ...templateOptions(),
153
+ styledComponentsStyleTags
154
+ });
155
+ if (failed) return;
156
+ const chunks = [];
157
+ let bufferedLength = 0;
158
+ const marker = Buffer.from(external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK);
159
+ let markerTail = Buffer.alloc(0);
160
+ const pendingScripts = [];
161
+ let shellChunkStatus = external_shared_js_namespaceObject_1.ShellChunkStatus.START;
162
+ const emitShell = (destination, buffered, markerIndex)=>{
163
+ const beforeMark = lifecycle.completedBody(buffered.subarray(0, markerIndex).toString('utf8'), 'shell');
164
+ const completedShellBefore = (0, external_helmet_js_namespaceObject.createReplaceHelemt)((0, external_helmet_js_namespaceObject.getHelmetData)(extenders))(shellBefore);
165
+ shellChunkStatus = external_shared_js_namespaceObject_1.ShellChunkStatus.FINISH;
166
+ chunks.length = 0;
167
+ bufferedLength = 0;
168
+ destination.push(`${completedShellBefore}${beforeMark}${shellAfter}`);
169
+ const afterMark = buffered.subarray(markerIndex + marker.length);
170
+ if (afterMark.length > 0) destination.push(afterMark);
171
+ for (const script of pendingScripts)destination.push(script);
172
+ pendingScripts.length = 0;
173
+ };
174
+ const body = new external_stream_namespaceObject.Transform({
175
+ transform (chunk, _encoding, callback) {
176
+ try {
177
+ if (shellChunkStatus === external_shared_js_namespaceObject_1.ShellChunkStatus.FINISH) this.push(chunk);
178
+ else {
179
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
180
+ const window = Buffer.concat([
181
+ markerTail,
182
+ bytes
183
+ ]);
184
+ const windowIndex = window.indexOf(marker);
185
+ const windowStart = bufferedLength - markerTail.length;
186
+ chunks.push(bytes);
187
+ bufferedLength += bytes.length;
188
+ if (-1 === windowIndex) markerTail = window.subarray(Math.max(0, window.length - marker.length + 1));
189
+ else emitShell(this, Buffer.concat(chunks, bufferedLength), windowStart + windowIndex);
120
190
  }
121
- });
122
- const passThrough = new external_stream_namespaceObject.PassThrough();
123
- const stream = external_stream_namespaceObject.Readable.toWeb(body);
124
- resolve(stream);
125
- let processedStream = passThrough;
126
- extenders.forEach((extender)=>{
127
- if (extender.processStream) processedStream = extender.processStream(processedStream);
128
- });
129
- node_namespaceObject.pipeNodeHeadStream({
130
- source: processedStream,
131
- destination: body,
132
- context: runtimeContext,
133
- terminalMarker: external_common_js_namespaceObject.ESCAPED_SHELL_STREAM_END_MARK,
134
- onError: reportError
135
- });
136
- reactStreamingPipe(passThrough);
191
+ callback();
192
+ } catch (error) {
193
+ callback(error instanceof Error ? error : new Error(String(error)));
194
+ }
195
+ },
196
+ flush (callback) {
137
197
  try {
138
- const storageContext = runtime_utils_node_namespaceObject.storage.useContext?.();
139
- const activeDeferreds = storageContext?.activeDeferreds;
140
- const entries = activeDeferreds instanceof Map ? Array.from(activeDeferreds.entries()) : [];
141
- if (entries.length > 0) {
142
- const enqueueScript = (s)=>{
143
- if (shellChunkStatus === external_shared_js_namespaceObject.ShellChunkStatus.FINISH) body.write(s);
144
- else pendingScripts.push(s);
145
- };
146
- (0, external_deferredScript_js_namespaceObject.enqueueFromEntries)(entries, config.nonce, (s)=>enqueueScript(s));
198
+ if (shellChunkStatus !== external_shared_js_namespaceObject_1.ShellChunkStatus.FINISH) {
199
+ const buffered = Buffer.concat(chunks);
200
+ emitShell(this, buffered, buffered.length);
147
201
  }
148
- } catch (err) {
149
- const monitors = (0, monitors_index_js_namespaceObject.getMonitors)();
150
- monitors.error("cannot inject router data script", err);
202
+ callback();
203
+ } catch (error) {
204
+ callback(error instanceof Error ? error : new Error(String(error)));
151
205
  }
206
+ }
207
+ });
208
+ own(body);
209
+ const passThrough = new external_stream_namespaceObject.PassThrough();
210
+ let processedStream = own(passThrough);
211
+ for (const extender of (0, external_shared_js_namespaceObject.orderSSRStreamTransforms)(extenders))if (extender.processStream) processedStream = own(extender.processStream(processedStream));
212
+ (0, external_stream_namespaceObject.pipeline)(processedStream, body, (error)=>{
213
+ if (null != error && !failed) fail(error);
214
+ });
215
+ deliver(external_stream_namespaceObject.Readable.toWeb(body));
216
+ reactStream.pipe(passThrough);
217
+ try {
218
+ const activeDeferreds = node_namespaceObject.storage.useContext?.()?.activeDeferreds;
219
+ const entries = activeDeferreds instanceof Map ? Array.from(activeDeferreds.entries()) : [];
220
+ (0, external_deferredScript_js_namespaceObject.enqueueFromEntries)(entries, config.nonce, (script)=>{
221
+ if (failed || body.destroyed || body.writableEnded) return;
222
+ if (shellChunkStatus === external_shared_js_namespaceObject_1.ShellChunkStatus.FINISH) body.write(script);
223
+ else pendingScripts.push(script);
152
224
  });
153
- },
154
- onShellError (error) {
155
- node_namespaceObject.abortHeadRender(runtimeContext);
156
- renderLevel = external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER;
157
- (0, external_template_js_namespaceObject.getTemplates)(htmlTemplate, {
158
- request,
159
- ssrConfig,
160
- renderLevel,
161
- runtimeContext,
162
- entryName,
163
- config,
164
- moduleFederationCssAssets
165
- }).then(({ shellAfter, shellBefore })=>{
166
- const fallbackHtml = `${shellBefore}${shellAfter}`;
167
- const readableStream = (0, external_shared_js_namespaceObject.getReadableStreamFromString)(fallbackHtml);
168
- resolve(readableStream);
169
- options?.onShellError?.(error);
170
- });
171
- },
172
- onError (error) {
173
- renderLevel = external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER;
174
- reportError(error);
225
+ } catch (error) {
226
+ (0, index_js_namespaceObject.getMonitors)().error("cannot inject router data script", error);
175
227
  }
228
+ };
229
+ const renderFallback = async (error)=>{
230
+ if (failed || hasStartedPipe) return;
231
+ lifecycle.finish({
232
+ status: 'fallback',
233
+ error
234
+ });
235
+ renderLevel = external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER;
236
+ const { shellBefore, shellAfter } = await (0, external_template_js_namespaceObject.getTemplates)(htmlTemplate, {
237
+ ...templateOptions(),
238
+ helmetData: (0, external_helmet_js_namespaceObject.getHelmetData)(extenders)
239
+ });
240
+ if (failed) return;
241
+ options.onShellError?.(error);
242
+ deliver((0, external_shared_js_namespaceObject_1.getReadableStreamFromString)(`${shellBefore}${shellAfter}`));
243
+ };
244
+ request.signal.addEventListener('abort', onStartupAbort, {
245
+ once: true
176
246
  });
247
+ try {
248
+ request.signal.throwIfAborted();
249
+ for (const extender of extenders)extender.init?.({
250
+ rootElement,
251
+ forceStream2String
252
+ });
253
+ let processedRootElement = isRsc && false === runtimeContext.isBrowser ? (0, wrapper_js_namespaceObject.wrapRuntimeComponentResolver)(rootElement, hooks) : rootElement;
254
+ for (const extender of extenders)processedRootElement = extender.modifyRootElement?.(processedRootElement) ?? processedRootElement;
255
+ lifecycle.beforeReact();
256
+ reactStream = renderToPipeableStream(processedRootElement, {
257
+ nonce: config.nonce,
258
+ identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX,
259
+ progressiveChunkSize: external_shared_js_namespaceObject_1.SHELL_PROGRESSIVE_CHUNK_SIZE,
260
+ [onReady] () {
261
+ startOutput().catch(fail);
262
+ },
263
+ onShellError (error) {
264
+ renderFallback(error).catch(fail);
265
+ },
266
+ onError (error) {
267
+ renderLevel = external_constants_js_namespaceObject.RenderLevel.CLIENT_RENDER;
268
+ if (!request.signal.aborted && !failed) reportError(error);
269
+ }
270
+ });
271
+ } catch (error) {
272
+ fail(error);
273
+ }
177
274
  });
178
275
  };
179
276
  exports.createReadableStreamFromElement = __webpack_exports__.createReadableStreamFromElement;