@ecopages/core 0.2.0-beta.4 → 0.2.0-beta.41

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 (611) hide show
  1. package/README.md +40 -9
  2. package/package.json +371 -33
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +115 -6
  5. package/src/adapters/abstract/application-adapter.js +261 -120
  6. package/src/adapters/abstract/router-adapter.js +12 -4
  7. package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
  8. package/src/adapters/abstract/segment-path-matcher.js +147 -0
  9. package/src/adapters/abstract/server-adapter.d.ts +16 -2
  10. package/src/adapters/abstract/server-adapter.js +22 -14
  11. package/src/adapters/abstract/ws-pattern-matcher.d.ts +12 -0
  12. package/src/adapters/abstract/ws-pattern-matcher.js +28 -0
  13. package/src/adapters/bun/bun-user-websocket-lifecycle.d.ts +22 -0
  14. package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
  15. package/src/adapters/bun/client-bridge.d.ts +1 -0
  16. package/src/adapters/bun/client-bridge.js +51 -47
  17. package/src/adapters/bun/create-app.d.ts +9 -6
  18. package/src/adapters/bun/create-app.js +171 -130
  19. package/src/adapters/bun/hmr-manager.d.ts +1 -1
  20. package/src/adapters/bun/hmr-manager.js +62 -57
  21. package/src/adapters/bun/index.d.ts +1 -1
  22. package/src/adapters/bun/index.js +2 -8
  23. package/src/adapters/bun/runtime-host.d.ts +1 -1
  24. package/src/adapters/bun/runtime-host.js +61 -54
  25. package/src/adapters/bun/server-adapter.d.ts +91 -41
  26. package/src/adapters/bun/server-adapter.js +566 -426
  27. package/src/adapters/bun/static-preview-host.d.ts +1 -1
  28. package/src/adapters/bun/static-preview-host.js +43 -41
  29. package/src/adapters/create-app.d.ts +13 -11
  30. package/src/adapters/create-app.js +11 -63
  31. package/src/adapters/index.d.ts +2 -2
  32. package/src/adapters/index.js +2 -8
  33. package/src/adapters/node/create-app.d.ts +8 -3
  34. package/src/adapters/node/create-app.js +126 -84
  35. package/src/adapters/node/http-request-bridge.js +147 -106
  36. package/src/adapters/node/node-client-bridge.d.ts +1 -0
  37. package/src/adapters/node/node-client-bridge.js +62 -61
  38. package/src/adapters/node/node-hmr-manager.d.ts +1 -1
  39. package/src/adapters/node/node-hmr-manager.js +58 -48
  40. package/src/adapters/node/runtime-host.d.ts +1 -1
  41. package/src/adapters/node/runtime-host.js +96 -89
  42. package/src/adapters/node/server-adapter-dependencies.js +18 -17
  43. package/src/adapters/node/server-adapter.d.ts +63 -23
  44. package/src/adapters/node/server-adapter.js +346 -297
  45. package/src/adapters/node/static-content-server.d.ts +1 -0
  46. package/src/adapters/node/static-content-server.js +172 -183
  47. package/src/adapters/node/static-preview-host.d.ts +1 -1
  48. package/src/adapters/node/static-preview-host.js +88 -64
  49. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  50. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  51. package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
  52. package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
  53. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
  54. package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
  55. package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
  56. package/src/adapters/shared/http/api-request-pipeline.js +132 -0
  57. package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
  58. package/src/adapters/shared/http/api-response.js +79 -0
  59. package/src/adapters/shared/http/create-body-response.d.ts +12 -0
  60. package/src/adapters/shared/http/create-body-response.js +26 -0
  61. package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
  62. package/src/adapters/shared/http/define-api-handler.js +49 -0
  63. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  64. package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
  65. package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
  66. package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
  67. package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
  68. package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
  69. package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
  70. package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
  71. package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
  72. package/src/adapters/shared/http/fs-server-response-matcher.js +258 -0
  73. package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
  74. package/src/adapters/shared/http/run-middleware-chain.js +17 -0
  75. package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
  76. package/src/adapters/shared/runtime/application-adapter.js +75 -0
  77. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
  78. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
  79. package/src/adapters/shared/runtime/copy-runtime-public-dir.d.ts +6 -0
  80. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
  81. package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
  82. package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
  83. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  84. package/src/adapters/shared/runtime/port-manager.js +226 -0
  85. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  86. package/src/adapters/shared/runtime/render-context.js +99 -0
  87. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -3
  88. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
  89. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
  90. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
  91. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
  92. package/src/adapters/shared/runtime/server-adapter.js +301 -0
  93. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  94. package/src/adapters/shared/runtime/server-route-handler.js +77 -0
  95. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +27 -35
  96. package/src/adapters/shared/runtime/server-static-builder.js +172 -0
  97. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  98. package/src/adapters/shared/ws/node-http-websocket-upgrades.d.ts +21 -0
  99. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
  100. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  101. package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
  102. package/src/build/README.md +191 -31
  103. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  104. package/src/build/app-build-manifest-runtime.js +145 -0
  105. package/src/build/browser/browser-runtime-manifest.js +58 -0
  106. package/src/build/browser/browser-runtime-plugin-helpers.js +34 -0
  107. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +1 -1
  108. package/src/build/browser/browser-runtime-plugin.js +216 -0
  109. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  110. package/src/build/browser/jsx-ownership-plugins.js +55 -0
  111. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  112. package/src/build/browser/lit-static-render-worker-context.js +4 -0
  113. package/src/build/build-adapter.d.ts +29 -334
  114. package/src/build/build-adapter.js +273 -237
  115. package/src/build/cache/build-input-fingerprint.d.ts +28 -0
  116. package/src/build/cache/build-input-fingerprint.js +33 -0
  117. package/src/build/cache/cache-constants.d.ts +4 -0
  118. package/src/build/cache/cache-constants.js +4 -0
  119. package/src/build/cache/cache-keys.d.ts +22 -0
  120. package/src/build/cache/cache-keys.js +71 -0
  121. package/src/build/cache/pages-unified-graph-build.d.ts +31 -0
  122. package/src/build/cache/pages-unified-graph-build.js +199 -0
  123. package/src/build/cache/production-build-cache.d.ts +21 -0
  124. package/src/build/cache/production-build-cache.js +56 -0
  125. package/src/build/cache/server-entry-build-cache.d.ts +43 -0
  126. package/src/build/cache/server-entry-build-cache.js +153 -0
  127. package/src/build/contracts/build-contracts.d.ts +96 -0
  128. package/src/build/contracts/build-contracts.js +1 -0
  129. package/src/build/contracts/build-manifest.d.ts +90 -0
  130. package/src/build/contracts/build-manifest.js +64 -0
  131. package/src/build/contracts/build-types.js +1 -0
  132. package/src/build/contracts/content-virtual-modules.d.ts +12 -0
  133. package/src/build/contracts/content-virtual-modules.js +29 -0
  134. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
  135. package/src/build/rolldown/rolldown-adapter-helpers.js +458 -0
  136. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  137. package/src/build/rolldown/rolldown-build-adapter.js +57 -0
  138. package/src/build/rolldown/rolldown-build-invocation-metrics.d.ts +12 -0
  139. package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
  140. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
  141. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  142. package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
  143. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  144. package/src/build/rolldown/runtime-build-output-normalizer.d.ts +10 -0
  145. package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
  146. package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
  147. package/src/build/runtime/build-profile-options.d.ts +7 -0
  148. package/src/build/runtime/build-profile-options.js +37 -0
  149. package/src/build/runtime/build-request-identity.d.ts +17 -0
  150. package/src/build/runtime/build-request-identity.js +79 -0
  151. package/src/build/runtime/build-request-policy.d.ts +58 -0
  152. package/src/build/runtime/build-request-policy.js +84 -0
  153. package/src/build/runtime/build-runtime.d.ts +28 -0
  154. package/src/build/runtime/build-runtime.js +75 -0
  155. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  156. package/src/build/runtime/deduping-build-executor.js +40 -0
  157. package/src/build/runtime/parallel-build-executor.d.ts +21 -0
  158. package/src/build/runtime/parallel-build-executor.js +60 -0
  159. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  160. package/src/build/runtime/serialized-build-executor.js +79 -0
  161. package/src/cache/index.d.ts +2 -1
  162. package/src/cache/index.js +7 -6
  163. package/src/cache/module-parse-cache.d.ts +5 -0
  164. package/src/cache/module-parse-cache.js +122 -67
  165. package/src/cache/module-transform-profiler.d.ts +8 -0
  166. package/src/cache/module-transform-profiler.js +8 -0
  167. package/src/client/navigation-scripts/classification.d.ts +16 -0
  168. package/src/client/navigation-scripts/classification.js +49 -0
  169. package/src/client/navigation-scripts/index.d.ts +3 -0
  170. package/src/client/navigation-scripts/index.js +3 -0
  171. package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
  172. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
  173. package/src/client/navigation-scripts/registry.d.ts +11 -0
  174. package/src/client/navigation-scripts/registry.js +16 -0
  175. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  176. package/src/client/navigation-scripts/rerun-queue.js +90 -0
  177. package/src/client/scroll.d.ts +17 -0
  178. package/src/client/scroll.js +33 -0
  179. package/src/client/scroll.test.browser.d.ts +1 -0
  180. package/src/client/scroll.test.browser.js +31 -0
  181. package/src/client/view-transitions.d.ts +32 -0
  182. package/src/client/view-transitions.js +120 -0
  183. package/src/client/view-transitions.test.browser.d.ts +1 -0
  184. package/src/client/view-transitions.test.browser.js +56 -0
  185. package/src/config/config-builder.d.ts +40 -10
  186. package/src/config/config-builder.js +647 -600
  187. package/src/config/constants.d.ts +1 -0
  188. package/src/config/constants.js +44 -23
  189. package/src/declarations.d.ts +1 -0
  190. package/src/dev/README.md +24 -0
  191. package/src/dev/client-bridge-registry.d.ts +5 -0
  192. package/src/dev/client-bridge-registry.js +10 -0
  193. package/src/dev/dev-client-ownership.d.ts +7 -0
  194. package/src/dev/dev-client-ownership.js +8 -0
  195. package/src/dev/hmr-manager-registry.d.ts +8 -0
  196. package/src/dev/hmr-manager-registry.js +10 -0
  197. package/src/dev/host-runtime.d.ts +3 -0
  198. package/src/dev/host-runtime.js +25 -23
  199. package/src/dev/runtime-server-started-message.d.ts +2 -0
  200. package/src/dev/runtime-server-started-message.js +3 -0
  201. package/src/dev/sc-server.js +106 -103
  202. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  203. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  204. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  205. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  206. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  207. package/src/dev/transform-server/dev-transform-import-rewriter.js +126 -0
  208. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  209. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  210. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  211. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  212. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  213. package/src/dev/transform-server/dev-transform-server.js +191 -0
  214. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  215. package/src/dev/transform-server/dev-transform-url.js +58 -0
  216. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
  217. package/src/dev/transform-server/dev-transform-vendor-registry.js +158 -0
  218. package/src/dev/transform-server/index.d.ts +6 -0
  219. package/src/dev/transform-server/index.js +4 -0
  220. package/src/dev/transform-server/types.d.ts +15 -0
  221. package/src/dev/transform-server/types.js +1 -0
  222. package/src/dev-toolbar/README.md +52 -0
  223. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  224. package/src/dev-toolbar/define-dev-tool.js +9 -0
  225. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  226. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  227. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  228. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  229. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  230. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  231. package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
  232. package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
  233. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  234. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  235. package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
  236. package/src/dev-toolbar/dev-toolbar-package.js +78 -0
  237. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  238. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  239. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  240. package/src/diagnostics/request-build-dedupe.js +39 -0
  241. package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
  242. package/src/diagnostics/request-pipeline-metrics.js +121 -0
  243. package/src/diagnostics/startup-trace.d.ts +81 -0
  244. package/src/diagnostics/startup-trace.js +281 -0
  245. package/src/eco/README.md +17 -0
  246. package/src/eco/component-identity.d.ts +13 -0
  247. package/src/eco/component-identity.js +18 -0
  248. package/src/eco/eco-declared-component.d.ts +15 -0
  249. package/src/eco/eco-declared-component.js +23 -0
  250. package/src/eco/eco.browser.js +63 -70
  251. package/src/eco/eco.js +163 -97
  252. package/src/eco/eco.types.d.ts +47 -8
  253. package/src/eco/eco.types.js +5 -0
  254. package/src/eco/eco.utils.d.ts +1 -1
  255. package/src/eco/eco.utils.js +1 -10
  256. package/src/eco/global-injector-map.js +55 -41
  257. package/src/eco/lazy-injector-map.js +90 -60
  258. package/src/eco/module-dependencies.js +52 -44
  259. package/src/eco/page-layout-normalization.d.ts +21 -0
  260. package/src/eco/page-layout-normalization.js +69 -0
  261. package/src/env.d.ts +2 -0
  262. package/src/errors/http-error.d.ts +8 -0
  263. package/src/errors/http-error.js +66 -49
  264. package/src/errors/index.d.ts +1 -0
  265. package/src/errors/index.js +3 -6
  266. package/src/errors/locals-access-error.js +5 -8
  267. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  268. package/src/errors/undeclared-component-dependency-error.js +17 -0
  269. package/src/global/app-logger.js +3 -6
  270. package/src/hmr/README.md +21 -0
  271. package/src/hmr/client/hmr-runtime.js +119 -110
  272. package/src/hmr/client/module-update.d.ts +13 -0
  273. package/src/hmr/client/module-update.js +39 -0
  274. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  275. package/src/hmr/hmr-asset-paths.js +22 -0
  276. package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
  277. package/src/hmr/hmr-entrypoint-output.js +34 -0
  278. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  279. package/src/hmr/hmr-file-change-prep.js +14 -0
  280. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  281. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  282. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  283. package/src/hmr/hmr-runtime-paths.js +13 -0
  284. package/src/hmr/hmr-strategy.d.ts +9 -0
  285. package/src/hmr/hmr-strategy.js +113 -42
  286. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  287. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
  288. package/src/hmr/strategies/js-hmr-strategy.js +107 -167
  289. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  290. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
  291. package/src/index.browser.d.ts +1 -0
  292. package/src/index.browser.js +2 -4
  293. package/src/index.d.ts +4 -1
  294. package/src/index.js +7 -21
  295. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -6
  296. package/src/integrations/ghtml/ghtml-renderer.js +12 -56
  297. package/src/integrations/ghtml/ghtml.constants.js +1 -4
  298. package/src/integrations/ghtml/ghtml.plugin.d.ts +3 -16
  299. package/src/integrations/ghtml/ghtml.plugin.js +10 -20
  300. package/src/islands/README.md +25 -0
  301. package/src/islands/island-host.d.ts +37 -0
  302. package/src/islands/island-host.js +55 -0
  303. package/src/plugins/README.md +2 -1
  304. package/src/plugins/alias-resolver-cache.d.ts +6 -9
  305. package/src/plugins/alias-resolver-cache.js +114 -97
  306. package/src/plugins/alias-resolver-plugin.d.ts +3 -3
  307. package/src/plugins/alias-resolver-plugin.js +35 -62
  308. package/src/plugins/define-integration.d.ts +26 -0
  309. package/src/plugins/define-integration.js +20 -0
  310. package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
  311. package/src/plugins/eco-component-meta-plugin.js +120 -162
  312. package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
  313. package/src/plugins/foreign-jsx-override-plugin.js +49 -37
  314. package/src/plugins/integration-plugin.d.ts +43 -14
  315. package/src/plugins/integration-plugin.js +212 -190
  316. package/src/plugins/jsx-import-source.utils.d.ts +8 -0
  317. package/src/plugins/jsx-import-source.utils.js +21 -0
  318. package/src/plugins/processor.d.ts +71 -12
  319. package/src/plugins/processor.js +168 -130
  320. package/src/plugins/runtime-capability.js +1 -0
  321. package/src/plugins/source-transform.d.ts +32 -1
  322. package/src/plugins/source-transform.js +112 -60
  323. package/src/plugins/tsconfig-import-resolver.d.ts +35 -0
  324. package/src/plugins/tsconfig-import-resolver.js +235 -0
  325. package/src/route-renderer/GRAPH.md +26 -32
  326. package/src/route-renderer/README.md +54 -33
  327. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  328. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
  329. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
  330. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
  331. package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
  332. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
  333. package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +17 -7
  334. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +191 -0
  335. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
  336. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
  337. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
  338. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
  339. package/src/route-renderer/orchestration/integration-renderer.d.ts +41 -151
  340. package/src/route-renderer/orchestration/integration-renderer.js +798 -988
  341. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
  342. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
  343. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
  344. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
  345. package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
  346. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
  347. package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
  348. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
  349. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
  350. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
  351. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
  352. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
  353. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
  354. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
  355. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
  356. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
  357. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
  358. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
  359. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
  360. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +232 -0
  361. package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
  362. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
  363. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
  364. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
  365. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
  366. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
  367. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
  368. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
  369. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
  370. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
  371. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
  372. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
  373. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
  374. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +49 -0
  375. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
  376. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
  377. package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
  378. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
  379. package/src/route-renderer/orchestration/string-markup-renderer.d.ts +14 -0
  380. package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
  381. package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
  382. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  383. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  384. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
  385. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
  386. package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
  387. package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
  388. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  389. package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
  390. package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
  391. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  392. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  393. package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
  394. package/src/route-renderer/page-loading/page-module-loader.js +136 -124
  395. package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
  396. package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
  397. package/src/route-renderer/route-renderer.js +74 -76
  398. package/src/router/README.md +31 -0
  399. package/src/router/client/link-intent.d.ts +11 -21
  400. package/src/router/client/link-intent.js +56 -30
  401. package/src/router/client/link-intent.test.browser.js +50 -39
  402. package/src/router/client/link-navigation-policy.d.ts +45 -0
  403. package/src/router/client/link-navigation-policy.js +122 -0
  404. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  405. package/src/router/client/link-navigation-policy.test.browser.js +82 -0
  406. package/src/router/client/navigation-coordinator.d.ts +1 -1
  407. package/src/router/client/navigation-coordinator.js +235 -201
  408. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  409. package/src/router/client/navigation-lifecycle.js +50 -0
  410. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  411. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  412. package/src/router/server/route-registry.js +237 -242
  413. package/src/services/README.md +5 -0
  414. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  415. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
  416. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +7 -1
  417. package/src/services/assets/asset-processing-service/asset-processing.service.js +308 -268
  418. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  419. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  420. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  421. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -1
  422. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -45
  423. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  424. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
  425. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +4 -2
  426. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -38
  427. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  428. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
  429. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  430. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
  431. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  432. package/src/services/assets/asset-processing-service/index.js +8 -6
  433. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  434. package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
  435. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  436. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
  437. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  438. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  439. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  440. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  441. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  442. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
  443. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  444. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  445. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
  446. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  447. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
  448. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -121
  449. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  450. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
  451. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  452. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
  453. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  454. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
  455. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  456. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
  457. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  458. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
  459. package/src/services/assets/browser-bundle.service.d.ts +28 -30
  460. package/src/services/assets/browser-bundle.service.js +54 -40
  461. package/src/services/cache/cache.types.d.ts +4 -2
  462. package/src/services/cache/cache.types.js +5 -0
  463. package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
  464. package/src/services/cache/html-page-cache-dependency-index.js +88 -0
  465. package/src/services/cache/index.d.ts +2 -0
  466. package/src/services/cache/index.js +8 -7
  467. package/src/services/cache/memory-cache-store.js +101 -89
  468. package/src/services/cache/page-cache-service.d.ts +31 -1
  469. package/src/services/cache/page-cache-service.js +237 -150
  470. package/src/services/cache/page-request-cache-coordinator.service.js +106 -102
  471. package/src/services/html/html-rewriter-provider.service.js +61 -61
  472. package/src/services/html/html-transformer.service.d.ts +1 -1
  473. package/src/services/html/html-transformer.service.js +249 -266
  474. package/src/services/invalidation/development-invalidation.service.d.ts +25 -2
  475. package/src/services/invalidation/development-invalidation.service.js +239 -175
  476. package/src/services/module-loading/README.md +52 -0
  477. package/src/services/module-loading/app-module-loader.service.js +1 -0
  478. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  479. package/src/services/module-loading/app-server-module-transpiler.service.js +103 -118
  480. package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
  481. package/src/services/module-loading/collection-server-module-build.service.js +83 -0
  482. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  483. package/src/services/module-loading/module-loading-types.js +1 -0
  484. package/src/services/module-loading/page-module-import.service.d.ts +11 -13
  485. package/src/services/module-loading/page-module-import.service.js +222 -184
  486. package/src/services/module-loading/route-module-build-cache-registry.d.ts +24 -0
  487. package/src/services/module-loading/route-module-build-cache-registry.js +51 -0
  488. package/src/services/module-loading/route-module-build-cache.d.ts +4 -0
  489. package/src/services/module-loading/route-module-build-cache.js +3 -0
  490. package/src/services/module-loading/route-module-build-cache.store.d.ts +57 -0
  491. package/src/services/module-loading/route-module-build-cache.store.js +202 -0
  492. package/src/services/module-loading/route-module-build-manifest.d.ts +57 -0
  493. package/src/services/module-loading/route-module-build-manifest.js +60 -0
  494. package/src/services/module-loading/route-module-dependency-hasher.d.ts +81 -0
  495. package/src/services/module-loading/route-module-dependency-hasher.js +148 -0
  496. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
  497. package/src/services/module-loading/server-module-transpiler.service.js +65 -62
  498. package/src/services/module-loading/source-module-support.js +15 -7
  499. package/src/services/runtime-state/dev-graph.service.js +165 -157
  500. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  501. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  502. package/src/services/validation/schema-validation-service.d.ts +1 -4
  503. package/src/services/validation/schema-validation-service.js +156 -95
  504. package/src/services/validation/standard-schema.types.d.ts +9 -62
  505. package/src/services/validation/standard-schema.types.js +1 -0
  506. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  507. package/src/services/validation/validate-standard-schema.js +14 -0
  508. package/src/static-site-generator/README.md +41 -0
  509. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
  510. package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
  511. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  512. package/src/static-site-generator/sitemap-routes.js +36 -0
  513. package/src/static-site-generator/sitemap.d.ts +15 -0
  514. package/src/static-site-generator/sitemap.js +42 -0
  515. package/src/static-site-generator/static-build-invalidation.d.ts +10 -0
  516. package/src/static-site-generator/static-build-invalidation.js +37 -0
  517. package/src/static-site-generator/static-export-context.d.ts +30 -0
  518. package/src/static-site-generator/static-export-context.js +1 -0
  519. package/src/static-site-generator/static-site-generator.d.ts +43 -25
  520. package/src/static-site-generator/static-site-generator.js +536 -294
  521. package/src/types/internal-types.d.ts +59 -13
  522. package/src/types/internal-types.js +1 -0
  523. package/src/types/public-types.d.ts +310 -95
  524. package/src/types/public-types.js +1 -0
  525. package/src/utils/deep-merge.js +39 -26
  526. package/src/utils/ecopages-route-info.d.ts +26 -0
  527. package/src/utils/ecopages-route-info.js +30 -0
  528. package/src/utils/hash.js +3 -6
  529. package/src/utils/html-escaping.d.ts +7 -0
  530. package/src/utils/html-escaping.js +22 -5
  531. package/src/utils/html.js +1 -4
  532. package/src/utils/invariant.js +11 -10
  533. package/src/utils/locals-utils.js +32 -22
  534. package/src/utils/parse-cli-args.d.ts +2 -0
  535. package/src/utils/parse-cli-args.js +73 -59
  536. package/src/utils/path-pattern.d.ts +23 -0
  537. package/src/utils/path-pattern.js +42 -0
  538. package/src/utils/path-utils.module.js +8 -11
  539. package/src/utils/resolve-entry-file.js +70 -38
  540. package/src/utils/resolve-work-dir.js +23 -27
  541. package/src/utils/runtime.js +24 -33
  542. package/src/utils/server-utils.module.d.ts +3 -2
  543. package/src/utils/server-utils.module.js +60 -53
  544. package/src/utils/static-file-extensions.d.ts +12 -0
  545. package/src/utils/static-file-extensions.js +54 -0
  546. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  547. package/src/watchers/project-watcher-ignore.js +17 -0
  548. package/src/watchers/project-watcher.d.ts +29 -6
  549. package/src/watchers/project-watcher.js +402 -257
  550. package/src/watchers/project-watcher.test-helpers.js +45 -50
  551. package/src/adapters/shared/api-response.js +0 -96
  552. package/src/adapters/shared/application-adapter.js +0 -90
  553. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  554. package/src/adapters/shared/define-api-handler.js +0 -15
  555. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  556. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  557. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  558. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  559. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  560. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  561. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  562. package/src/adapters/shared/hmr-html-response.js +0 -33
  563. package/src/adapters/shared/render-context.js +0 -93
  564. package/src/adapters/shared/runtime-app-bootstrap.js +0 -46
  565. package/src/adapters/shared/runtime-host.js +0 -0
  566. package/src/adapters/shared/server-adapter.js +0 -436
  567. package/src/adapters/shared/server-route-handler.js +0 -111
  568. package/src/adapters/shared/server-static-builder.js +0 -162
  569. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
  570. package/src/adapters/shared/shared-hmr-manager.js +0 -241
  571. package/src/adapters/shared/static-preview-host.js +0 -0
  572. package/src/build/browser-runtime-manifest.js +0 -61
  573. package/src/build/browser-runtime-plugin-helpers.js +0 -14
  574. package/src/build/browser-runtime-plugin.js +0 -173
  575. package/src/build/build-manifest.d.ts +0 -33
  576. package/src/build/build-manifest.js +0 -49
  577. package/src/build/build-types.js +0 -0
  578. package/src/build/rolldown-adapter-helpers.js +0 -265
  579. package/src/build/rolldown-build-adapter.js +0 -65
  580. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  581. package/src/build/rolldown-dev-build-adapter.js +0 -166
  582. package/src/build/rolldown-plugin-bridge.js +0 -199
  583. package/src/build/runtime-build-executor.d.ts +0 -21
  584. package/src/build/runtime-build-executor.js +0 -19
  585. package/src/build/runtime-build-output-normalizer.d.ts +0 -3
  586. package/src/build/runtime-build-output-normalizer.js +0 -111
  587. package/src/build/serialized-build-executor.js +0 -63
  588. package/src/build/server-side-css-shim-plugin.js +0 -35
  589. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  590. package/src/hmr/hmr.test.e2e.js +0 -43
  591. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  592. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  593. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  594. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -233
  595. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  596. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  597. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  598. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  599. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  600. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  601. package/src/route-renderer/orchestration/render-output.utils.js +0 -171
  602. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
  603. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  604. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  605. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  606. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  607. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  608. /package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +0 -0
  609. /package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +0 -0
  610. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  611. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -0,0 +1,196 @@
1
+ import { addTriggerAttribute, isThenable, wrapWithScriptsInjector } from './foreign-child-output.utils.js';
2
+ /**
3
+ * Shared output finalization behavior used both inside and outside active render contexts.
4
+ *
5
+ * This stage is responsible only for lazy trigger or injector wrapping. Foreign-child
6
+ * interception stays in `ContextualComponentRenderRuntime`.
7
+ */
8
+ class ComponentRenderOutputRuntime {
9
+ finalizeComponentRender(component, content) {
10
+ const lazyTriggers = component.config?._resolvedLazyTriggers;
11
+ if (lazyTriggers && lazyTriggers.length > 0) {
12
+ return this.addTriggerToContent(content, lazyTriggers[0].triggerId);
13
+ }
14
+ const lazyGroups = component.config?._resolvedLazyScripts;
15
+ if (lazyGroups && lazyGroups.length > 0) {
16
+ return this.wrapContentWithScriptsInjector(content, lazyGroups);
17
+ }
18
+ return content;
19
+ }
20
+ addTriggerToContent(content, triggerId) {
21
+ if (isThenable(content)) {
22
+ return content.then((resolvedContent) => addTriggerAttribute(resolvedContent, triggerId));
23
+ }
24
+ return addTriggerAttribute(content, triggerId);
25
+ }
26
+ wrapContentWithScriptsInjector(content, lazyGroups) {
27
+ if (isThenable(content)) {
28
+ return content.then((resolvedContent) => wrapWithScriptsInjector(resolvedContent, lazyGroups));
29
+ }
30
+ return wrapWithScriptsInjector(content, lazyGroups);
31
+ }
32
+ }
33
+ /**
34
+ * Render-context-aware runtime that delegates foreign-child interception.
35
+ */
36
+ class ContextualComponentRenderRuntime extends ComponentRenderOutputRuntime {
37
+ context;
38
+ constructor(context) {
39
+ super();
40
+ this.context = context;
41
+ }
42
+ applyForeignChildInterceptionResult(result) {
43
+ if (result.kind === 'resolved') {
44
+ return result;
45
+ }
46
+ return result.props ? result : undefined;
47
+ }
48
+ /**
49
+ * Resolves one foreign-child interception through the active runtime.
50
+ *
51
+ * The runtime may choose inline rendering or immediate resolved output.
52
+ */
53
+ interceptForeignChild(input) {
54
+ const foreignChildRuntimeInput = {
55
+ currentIntegration: this.context.currentIntegration,
56
+ targetIntegration: input.targetIntegration,
57
+ component: input.component,
58
+ props: input.props,
59
+ };
60
+ const asyncInterception = this.context.foreignChildRuntime?.interceptForeignChild?.(foreignChildRuntimeInput);
61
+ if (asyncInterception !== undefined) {
62
+ if (isThenable(asyncInterception)) {
63
+ return asyncInterception.then((result) => result === undefined ? undefined : this.applyForeignChildInterceptionResult(result));
64
+ }
65
+ return this.applyForeignChildInterceptionResult(asyncInterception);
66
+ }
67
+ const syncInterception = this.context.foreignChildRuntime?.interceptForeignChildSync?.(foreignChildRuntimeInput);
68
+ if (syncInterception === undefined) {
69
+ return undefined;
70
+ }
71
+ return this.applyForeignChildInterceptionResult(syncInterception);
72
+ }
73
+ }
74
+ const GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY = '__ECOPAGES_COMPONENT_RENDER_CONTEXT_STATE__';
75
+ /**
76
+ * Chooses the widest shared global scope available for process-wide state.
77
+ *
78
+ * `process` is preferred when present so duplicate bundles or module instances in
79
+ * the same runtime still converge on one shared context registry.
80
+ */
81
+ function getSharedContextScope() {
82
+ const globalProcess = globalThis.process;
83
+ if (globalProcess && typeof globalProcess === 'object') {
84
+ return globalProcess;
85
+ }
86
+ return globalThis;
87
+ }
88
+ /**
89
+ * Returns the singleton mutable state used by component render contexts.
90
+ */
91
+ function getComponentRenderContextState() {
92
+ const sharedScope = getSharedContextScope();
93
+ sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY] ??= {
94
+ contextStack: [],
95
+ nodeContextStorage: null,
96
+ nodeContextStorageLoader: null,
97
+ };
98
+ return sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY];
99
+ }
100
+ /**
101
+ * Lazily initializes async context storage for Node runtimes.
102
+ *
103
+ * Falls back to in-memory stack mode when async_hooks is unavailable.
104
+ *
105
+ * @returns Async context storage when available; otherwise `null`.
106
+ */
107
+ async function getContextStorage() {
108
+ const state = getComponentRenderContextState();
109
+ if (state.nodeContextStorage) {
110
+ return state.nodeContextStorage;
111
+ }
112
+ if (state.nodeContextStorageLoader) {
113
+ return state.nodeContextStorageLoader;
114
+ }
115
+ state.nodeContextStorageLoader = import('node:async_hooks')
116
+ .then((module) => {
117
+ const storage = new module.AsyncLocalStorage();
118
+ state.nodeContextStorage = {
119
+ getStore: () => storage.getStore(),
120
+ run: (store, callback) => storage.run(store, callback),
121
+ };
122
+ return state.nodeContextStorage;
123
+ })
124
+ .catch(() => {
125
+ state.nodeContextStorage = null;
126
+ return null;
127
+ })
128
+ .finally(() => {
129
+ state.nodeContextStorageLoader = null;
130
+ });
131
+ return state.nodeContextStorageLoader;
132
+ }
133
+ /**
134
+ * Returns the current component render context, if one is active.
135
+ *
136
+ * @returns Active render context or `undefined` outside render execution.
137
+ */
138
+ export function getComponentRenderContext() {
139
+ const state = getComponentRenderContextState();
140
+ return state.nodeContextStorage?.getStore() ?? state.contextStack[state.contextStack.length - 1];
141
+ }
142
+ const componentRenderOutputRuntime = new ComponentRenderOutputRuntime();
143
+ /**
144
+ * Runs foreign-child interception for one component render step.
145
+ *
146
+ * The active runtime may resolve the foreign child immediately or keep it inline.
147
+ */
148
+ export function interceptForeignChild(input) {
149
+ return getComponentRenderContext()?.interceptForeignChild(input);
150
+ }
151
+ /**
152
+ * Applies lazy trigger or injector wrapping to completed component output.
153
+ *
154
+ * This helper works both inside render-context execution and in fallback flows
155
+ * where no active context exists.
156
+ */
157
+ export function finalizeComponentRender(component, content) {
158
+ const renderContext = getComponentRenderContext();
159
+ return (renderContext?.finalizeComponentRender(component, content) ??
160
+ componentRenderOutputRuntime.finalizeComponentRender(component, content));
161
+ }
162
+ /**
163
+ * Runs render work under a fresh component render context and returns the
164
+ * resulting value.
165
+ *
166
+ * @param input Execution metadata for current integration and foreign-child policy.
167
+ * @param render Async render function to execute inside the context.
168
+ * @returns Render result value.
169
+ */
170
+ export async function runWithComponentRenderContext(input, render) {
171
+ const context = {
172
+ currentIntegration: input.currentIntegration,
173
+ foreignChildRuntime: input.foreignChildRuntime,
174
+ };
175
+ const runtime = new ContextualComponentRenderRuntime(context);
176
+ context.interceptForeignChild = (deferredInput) => runtime.interceptForeignChild(deferredInput);
177
+ context.finalizeComponentRender = (component, content) => runtime.finalizeComponentRender(component, content);
178
+ const storage = await getContextStorage();
179
+ let value;
180
+ if (storage) {
181
+ value = await storage.run(context, render);
182
+ }
183
+ else {
184
+ const state = getComponentRenderContextState();
185
+ state.contextStack.push(context);
186
+ try {
187
+ value = await render();
188
+ }
189
+ finally {
190
+ state.contextStack.pop();
191
+ }
192
+ }
193
+ return {
194
+ value,
195
+ };
196
+ }
@@ -1,4 +1,4 @@
1
- import type { EcoComponent } from '../../types/public-types.js';
1
+ import type { EcoComponent } from '../../../types/public-types.js';
2
2
  type ResolvedLazyScriptGroups = Readonly<NonNullable<EcoComponent['config']>['_resolvedLazyScripts']>;
3
3
  type TemplateContentShape = {
4
4
  strings: readonly string[];
@@ -21,6 +21,22 @@ type MarkupNodeLikeShape = {
21
21
  * @typeParam T Expected resolved type of the thenable.
22
22
  */
23
23
  export declare function isThenable<T>(value: unknown): value is PromiseLike<T>;
24
+ /** Returns whether a value looks like a DOM-like markup node from SSR integrations. */
25
+ export declare function isMarkupNodeLike(value: unknown): value is MarkupNodeLikeShape;
26
+ /**
27
+ * Returns whether a value is a plain opaque object that string serializers would
28
+ * coerce via `String(value)` rather than render as markup.
29
+ *
30
+ * @remarks
31
+ * Template results (`strings`/`values`), markup nodes, arrays, and framework
32
+ * element markers (`$$typeof`) are not opaque. Cross-integration children that
33
+ * are only plain objects must use EcoEmbed or already-serialized HTML.
34
+ */
35
+ export declare function isOpaqueForeignChildValue(children: unknown): boolean;
36
+ /**
37
+ * Throws when foreign-path children would be coerced from an opaque object.
38
+ */
39
+ export declare function assertForeignChildrenNotOpaque(children: unknown, context: string): void;
24
40
  /**
25
41
  * Injects `data-eco-trigger` into the first real HTML element opening tag of
26
42
  * a component's rendered output string.
@@ -57,10 +73,4 @@ export declare function wrapWithScriptsInjector(content: string, lazyGroups: Res
57
73
  export declare function wrapWithScriptsInjector<T extends TemplateContentShape>(content: T, lazyGroups: ResolvedLazyScriptGroups): T | string;
58
74
  export declare function wrapWithScriptsInjector<T extends MarkupNodeLikeShape>(content: T, lazyGroups: ResolvedLazyScriptGroups): T;
59
75
  export declare function wrapWithScriptsInjector(content: unknown, lazyGroups: ResolvedLazyScriptGroups): string | TemplateContentShape | MarkupNodeLikeShape;
60
- export declare function decodeHtmlEntities(value: string): string;
61
- export declare function normalizeUnresolvedMarkerArtifactHtml(html: string): string;
62
- export declare function inspectUnresolvedMarkerArtifactHtml(html: string): {
63
- hasUnresolvedMarkerArtifacts: boolean;
64
- normalizedHtml: string;
65
- };
66
76
  export {};
@@ -0,0 +1,191 @@
1
+ import { buildInjectorMapScript } from '../../../eco/lazy-injector-map.js';
2
+ function cloneTemplateStrings(strings, firstString) {
3
+ const nextStrings = [...strings];
4
+ nextStrings[0] = firstString;
5
+ const rawDescriptor = Object.getOwnPropertyDescriptor(strings, 'raw');
6
+ if (rawDescriptor && Array.isArray(rawDescriptor.value)) {
7
+ const rawStrings = [...rawDescriptor.value];
8
+ rawStrings[0] = firstString;
9
+ Object.defineProperty(nextStrings, 'raw', {
10
+ ...rawDescriptor,
11
+ value: rawStrings,
12
+ });
13
+ }
14
+ return nextStrings;
15
+ }
16
+ function cloneTemplateContentWithUpdatedFirstString(content, firstString) {
17
+ const descriptors = Object.getOwnPropertyDescriptors(content);
18
+ const clonedContent = Object.create(Object.getPrototypeOf(content));
19
+ const stringsDescriptor = descriptors.strings;
20
+ Object.defineProperties(clonedContent, {
21
+ ...descriptors,
22
+ strings: {
23
+ ...stringsDescriptor,
24
+ value: cloneTemplateStrings(content.strings, firstString),
25
+ },
26
+ });
27
+ return clonedContent;
28
+ }
29
+ function cloneMarkupNodeLikeWithUpdatedOuterHtml(content, outerHTML) {
30
+ const descriptors = Object.getOwnPropertyDescriptors(content);
31
+ const clonedContent = Object.create(Object.getPrototypeOf(content));
32
+ const outerHTMLDescriptor = descriptors.outerHTML;
33
+ Object.defineProperties(clonedContent, {
34
+ ...descriptors,
35
+ outerHTML: {
36
+ configurable: outerHTMLDescriptor?.configurable ?? true,
37
+ enumerable: outerHTMLDescriptor?.enumerable ?? true,
38
+ writable: true,
39
+ value: outerHTML,
40
+ },
41
+ });
42
+ return clonedContent;
43
+ }
44
+ function wrapWithScriptsInjectorMarkup(content, injectorMapScript) {
45
+ return `<scripts-injector><script type="ecopages/injector-map">${injectorMapScript}</script>${content}</scripts-injector>`;
46
+ }
47
+ function cloneTemplateContentWithWrappedInjector(content, injectorMapScript) {
48
+ if (content.strings.length === 0) {
49
+ return wrapWithScriptsInjectorMarkup(String(content), injectorMapScript);
50
+ }
51
+ const nextStrings = [...content.strings];
52
+ nextStrings[0] = wrapWithScriptsInjectorMarkup(nextStrings[0] ?? '', injectorMapScript);
53
+ nextStrings[nextStrings.length - 1] = `${nextStrings[nextStrings.length - 1] ?? ''}</scripts-injector>`;
54
+ const rawDescriptor = Object.getOwnPropertyDescriptor(content.strings, 'raw');
55
+ if (rawDescriptor && Array.isArray(rawDescriptor.value)) {
56
+ const rawStrings = [...rawDescriptor.value];
57
+ rawStrings[0] = wrapWithScriptsInjectorMarkup(rawStrings[0] ?? '', injectorMapScript);
58
+ rawStrings[rawStrings.length - 1] = `${rawStrings[rawStrings.length - 1] ?? ''}</scripts-injector>`;
59
+ Object.defineProperty(nextStrings, 'raw', {
60
+ ...rawDescriptor,
61
+ value: rawStrings,
62
+ });
63
+ }
64
+ const descriptors = Object.getOwnPropertyDescriptors(content);
65
+ const clonedContent = Object.create(Object.getPrototypeOf(content));
66
+ const stringsDescriptor = descriptors.strings;
67
+ Object.defineProperties(clonedContent, {
68
+ ...descriptors,
69
+ strings: {
70
+ ...stringsDescriptor,
71
+ value: nextStrings,
72
+ },
73
+ });
74
+ return clonedContent;
75
+ }
76
+ /**
77
+ * Returns `true` when `value` is a thenable (Promise-like) object.
78
+ *
79
+ * Used to transparently handle both synchronous and asynchronous component
80
+ * render results without requiring every caller to branch on `instanceof Promise`.
81
+ *
82
+ * @typeParam T Expected resolved type of the thenable.
83
+ */
84
+ export function isThenable(value) {
85
+ return (typeof value === 'object' &&
86
+ value !== null &&
87
+ 'then' in value &&
88
+ typeof value.then === 'function');
89
+ }
90
+ function isTemplateContentShape(value) {
91
+ return (typeof value === 'object' &&
92
+ value !== null &&
93
+ Array.isArray(value.strings) &&
94
+ ((value.values ?? undefined) === undefined ||
95
+ Array.isArray(value.values)));
96
+ }
97
+ function isMarkupNodeLikeShape(value) {
98
+ return (typeof value === 'object' && value !== null && typeof value.nodeType === 'number');
99
+ }
100
+ /** Returns whether a value looks like a DOM-like markup node from SSR integrations. */
101
+ export function isMarkupNodeLike(value) {
102
+ return isMarkupNodeLikeShape(value);
103
+ }
104
+ /**
105
+ * Returns whether a value is a plain opaque object that string serializers would
106
+ * coerce via `String(value)` rather than render as markup.
107
+ *
108
+ * @remarks
109
+ * Template results (`strings`/`values`), markup nodes, arrays, and framework
110
+ * element markers (`$$typeof`) are not opaque. Cross-integration children that
111
+ * are only plain objects must use EcoEmbed or already-serialized HTML.
112
+ */
113
+ export function isOpaqueForeignChildValue(children) {
114
+ if (children === null || typeof children !== 'object') {
115
+ return false;
116
+ }
117
+ if (Array.isArray(children)) {
118
+ return false;
119
+ }
120
+ if ('$$typeof' in children) {
121
+ return false;
122
+ }
123
+ if ('strings' in children && Array.isArray(children.strings)) {
124
+ return false;
125
+ }
126
+ if (isMarkupNodeLikeShape(children)) {
127
+ return false;
128
+ }
129
+ const prototype = Object.getPrototypeOf(children);
130
+ return prototype === Object.prototype || prototype === null;
131
+ }
132
+ /**
133
+ * Throws when foreign-path children would be coerced from an opaque object.
134
+ */
135
+ export function assertForeignChildrenNotOpaque(children, context) {
136
+ if (!isOpaqueForeignChildValue(children)) {
137
+ return;
138
+ }
139
+ const childTag = Object.prototype.toString.call(children);
140
+ throw new TypeError(`[ecopages] ${context} refused to coerce opaque foreign children (${childTag}). Use EcoEmbed for cross-integration children or pass already-serialized HTML.`);
141
+ }
142
+ function injectTriggerAttributeIntoString(content, triggerId) {
143
+ const str = content;
144
+ let i = 0;
145
+ while (i < str.length) {
146
+ if (str[i] !== '<') {
147
+ i++;
148
+ continue;
149
+ }
150
+ const next = str[i + 1];
151
+ if (next === '!' || next === '?') {
152
+ const end = str.indexOf('>', i);
153
+ if (end === -1)
154
+ break;
155
+ i = end + 1;
156
+ continue;
157
+ }
158
+ if (next && /[a-zA-Z]/.test(next)) {
159
+ const tagSlice = str.slice(i + 1);
160
+ const nameEnd = tagSlice.search(/[\s/>]/);
161
+ if (nameEnd === -1)
162
+ break;
163
+ const insertAt = i + 1 + nameEnd;
164
+ return `${str.slice(0, insertAt)} data-eco-trigger="${triggerId}"${str.slice(insertAt)}`;
165
+ }
166
+ break;
167
+ }
168
+ return str;
169
+ }
170
+ export function addTriggerAttribute(content, triggerId) {
171
+ if (isTemplateContentShape(content)) {
172
+ if (content.strings.length === 0) {
173
+ return String(content);
174
+ }
175
+ return cloneTemplateContentWithUpdatedFirstString(content, injectTriggerAttributeIntoString(content.strings[0] ?? '', triggerId));
176
+ }
177
+ if (isMarkupNodeLikeShape(content) && typeof content.outerHTML === 'string') {
178
+ return cloneMarkupNodeLikeWithUpdatedOuterHtml(content, injectTriggerAttributeIntoString(content.outerHTML, triggerId));
179
+ }
180
+ return injectTriggerAttributeIntoString(String(content), triggerId);
181
+ }
182
+ export function wrapWithScriptsInjector(content, lazyGroups) {
183
+ const injectorMapScript = buildInjectorMapScript(lazyGroups ?? []);
184
+ if (isTemplateContentShape(content)) {
185
+ return cloneTemplateContentWithWrappedInjector(content, injectorMapScript);
186
+ }
187
+ if (isMarkupNodeLikeShape(content) && typeof content.outerHTML === 'string') {
188
+ return cloneMarkupNodeLikeWithUpdatedOuterHtml(content, wrapWithScriptsInjectorMarkup(content.outerHTML, injectorMapScript));
189
+ }
190
+ return wrapWithScriptsInjectorMarkup(String(content), injectorMapScript);
191
+ }
@@ -1,11 +1,36 @@
1
- import type { ProcessedAsset } from '../../services/assets/asset-processing-service/index.js';
2
- import type { BaseIntegrationContext, ComponentRenderInput, ComponentRenderResult, EcoComponent, ForeignSubtreeRenderPayload } from '../../types/public-types.js';
1
+ import type { ProcessedAsset } from '../../../services/assets/asset-processing-service/index.js';
2
+ import type { BaseIntegrationContext, ComponentRenderInput, ComponentRenderResult, EcoComponent, ForeignSubtreeRenderPayload } from '../../../types/public-types.js';
3
3
  import { type ForeignChildRuntime } from './component-render-context.js';
4
- import { QueuedForeignSubtreeResolutionService, type QueuedForeignSubtreeResolution, type QueuedForeignSubtreeResolutionContext } from './queued-foreign-subtree-resolution.service.js';
4
+ export type QueuedForeignChildDecisionInput = {
5
+ currentIntegration: string;
6
+ targetIntegration?: string;
7
+ component: EcoComponent;
8
+ props: Record<string, unknown>;
9
+ };
10
+ export type QueuedForeignSubtreeResolution = {
11
+ token: string;
12
+ component: EcoComponent;
13
+ props: Record<string, unknown>;
14
+ componentInstanceId: string;
15
+ };
16
+ /**
17
+ * Shared mutable state for one renderer-owned queued foreign-subtree runtime.
18
+ */
19
+ export type QueuedForeignSubtreeResolutionContext = {
20
+ rendererCache: Map<string, unknown>;
21
+ componentInstanceScope?: string;
22
+ nextForeignSubtreeId: number;
23
+ queuedResolutions: QueuedForeignSubtreeResolution[];
24
+ };
25
+ type QueuedForeignSubtreeIntegrationContext = BaseIntegrationContext & Record<string, unknown>;
26
+ type QueuedForeignSubtreeChildRenderResult = {
27
+ assets: ProcessedAsset[];
28
+ html?: string;
29
+ children?: unknown;
30
+ };
5
31
  export interface ForeignSubtreeExecutionOwningRenderer {
6
32
  readonly name: string;
7
33
  renderComponentWithForeignChildren(input: ComponentRenderInput): Promise<ComponentRenderResult>;
8
- renderForeignSubtree(input: ComponentRenderInput): Promise<ForeignSubtreeRenderPayload>;
9
34
  }
10
35
  export interface ForeignSubtreeExecutionDecisionInput {
11
36
  currentIntegration: string;
@@ -21,7 +46,7 @@ export interface ForeignSubtreeExecutionRenderOptions {
21
46
  renderInput: ComponentRenderInput;
22
47
  rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>;
23
48
  }): ForeignChildRuntime;
24
- getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer;
49
+ getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): Promise<ForeignSubtreeExecutionOwningRenderer>;
25
50
  }
26
51
  export interface ForeignSubtreeQueuedRuntimeOptions<TContext extends QueuedForeignSubtreeResolutionContext> {
27
52
  renderInput: ComponentRenderInput;
@@ -36,7 +61,7 @@ export interface ForeignSubtreeStringQueuedHtmlOptions {
36
61
  html: string;
37
62
  runtimeContextKey: string;
38
63
  queueLabel: string;
39
- getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer;
64
+ getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): Promise<ForeignSubtreeExecutionOwningRenderer>;
40
65
  applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
41
66
  dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
42
67
  }
@@ -50,38 +75,45 @@ export interface ForeignSubtreeQueuedHtmlOptions<TContext extends QueuedForeignS
50
75
  children?: unknown;
51
76
  html?: string;
52
77
  }>;
53
- getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer;
78
+ getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): Promise<ForeignSubtreeExecutionOwningRenderer>;
54
79
  applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
55
80
  dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
56
81
  }
82
+ export interface ResolveQueuedForeignSubtreeTokensOptions<TContext extends QueuedForeignSubtreeResolutionContext> {
83
+ html: string;
84
+ runtimeContext?: TContext;
85
+ queueLabel: string;
86
+ renderQueuedChildren: (children: unknown, runtimeContext: TContext, queuedResolutionsByToken: Map<string, QueuedForeignSubtreeResolution>, resolveToken: (token: string) => Promise<string>) => Promise<QueuedForeignSubtreeChildRenderResult>;
87
+ resolveForeignSubtree: (input: ComponentRenderInput, rendererCache: Map<string, unknown>) => Promise<ForeignSubtreeRenderPayload | undefined>;
88
+ applyAttributesToFirstElement: (html: string, attributes: Record<string, string>) => string;
89
+ dedupeProcessedAssets: (assets: ProcessedAsset[]) => ProcessedAsset[];
90
+ }
91
+ /**
92
+ * Maps one component render result into the foreign-subtree payload shape used by
93
+ * queue resolution and integration tests.
94
+ */
95
+ export declare function toForeignSubtreeRenderPayload(result: ComponentRenderResult): ForeignSubtreeRenderPayload;
57
96
  /**
58
97
  * Executes one component render tree under Foreign Child support.
59
98
  *
60
- * This service owns the execution policy for mixed-integration component trees:
61
- * it decides when a child stays inline, when it must delegate to an owning
62
- * renderer, how one render-pass renderer cache is reused, and how queued
63
- * Foreign Subtree tokens resolve back into final HTML.
99
+ * This service owns mixed-integration execution policy and the queued token
100
+ * mechanics renderers use when foreign children cannot resolve inline.
64
101
  */
65
102
  export declare class ForeignSubtreeExecutionService {
66
- private readonly queuedForeignSubtreeResolutionService;
67
- constructor(queuedForeignSubtreeResolutionService?: QueuedForeignSubtreeResolutionService);
68
103
  private requiresForeignChildRuntime;
69
- /**
70
- * Returns whether the current render pass must hand the child off to a foreign owner.
71
- */
72
104
  shouldDelegateForeignChild(input: ForeignSubtreeExecutionDecisionInput): boolean;
73
- /**
74
- * Creates the base runtime used when a renderer has not supplied its own queueing runtime.
75
- *
76
- * The runtime allows same-integration children to continue inline and fails fast
77
- * when execution crosses into a foreign owner without a renderer-owned handoff.
78
- */
79
105
  createFailFastRuntime(rendererName: string): ForeignChildRuntime;
80
106
  getQueuedRuntimeContext<TContext extends QueuedForeignSubtreeResolutionContext>(input: ComponentRenderInput, runtimeContextKey: string): TContext | undefined;
81
107
  createQueuedRuntime<TContext extends QueuedForeignSubtreeResolutionContext>(options: ForeignSubtreeQueuedRuntimeOptions<TContext>): ForeignChildRuntime;
82
- /**
83
- * Resolves a string-first renderer HTML fragment that may contain queued Foreign Subtree tokens.
84
- */
108
+ createQueueRuntime<TContext extends QueuedForeignSubtreeResolutionContext>(options: {
109
+ renderInput: ComponentRenderInput;
110
+ rendererCache: Map<string, unknown>;
111
+ runtimeContextKey: string;
112
+ tokenPrefix: string;
113
+ shouldQueueForeignChild: (input: QueuedForeignChildDecisionInput) => boolean;
114
+ createRuntimeContext?: (integrationContext: QueuedForeignSubtreeIntegrationContext, rendererCache: Map<string, unknown>) => TContext;
115
+ }): ForeignChildRuntime;
116
+ getRuntimeContext<TContext extends QueuedForeignSubtreeResolutionContext>(input: ComponentRenderInput, runtimeContextKey: string): TContext | undefined;
85
117
  resolveStringQueuedHtml<TContext extends QueuedForeignSubtreeResolutionContext>(options: ForeignSubtreeStringQueuedHtmlOptions): Promise<{
86
118
  assets: ProcessedAsset[];
87
119
  html: string;
@@ -90,21 +122,19 @@ export declare class ForeignSubtreeExecutionService {
90
122
  assets: ProcessedAsset[];
91
123
  html: string;
92
124
  }>;
93
- /**
94
- * Executes one component render with Foreign Child support under the current integration.
95
- */
125
+ resolveQueuedForeignSubtreeTokens<TContext extends QueuedForeignSubtreeResolutionContext>(options: ResolveQueuedForeignSubtreeTokensOptions<TContext>): Promise<{
126
+ assets: ProcessedAsset[];
127
+ html: string;
128
+ }>;
96
129
  executeComponentRender(options: ForeignSubtreeExecutionRenderOptions): Promise<ComponentRenderResult>;
97
130
  private getRendererCache;
98
131
  private withRendererCache;
99
- /**
100
- * Returns the delegatable owning renderer integration for one component.
101
- *
102
- * The pseudo `html` integration marks document-shell ownership only and does
103
- * not participate in component-level foreign subtree execution.
104
- */
105
132
  private getForeignOwnerIntegrationName;
106
133
  private resolveForeignChildInOwningRenderer;
107
134
  private resolveForeignSubtreeInOwningRenderer;
108
135
  private runInForeignOwningRenderer;
109
136
  resolveQueuedTokens(html: string, queuedResolutionsByToken: Map<string, QueuedForeignSubtreeResolution>, resolveToken: (token: string) => Promise<string>): Promise<string>;
137
+ private createForeignSubtreeToken;
138
+ private ensureRuntimeContext;
110
139
  }
140
+ export {};