@ecopages/core 0.2.0-beta.31 → 0.2.0-beta.32

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 (338) hide show
  1. package/README.md +1 -0
  2. package/package.json +82 -3
  3. package/src/adapters/abstract/application-adapter.d.ts +0 -8
  4. package/src/adapters/abstract/application-adapter.js +252 -261
  5. package/src/adapters/abstract/router-adapter.js +12 -4
  6. package/src/adapters/abstract/segment-path-matcher.js +132 -134
  7. package/src/adapters/abstract/server-adapter.js +22 -14
  8. package/src/adapters/abstract/ws-pattern-matcher.js +24 -26
  9. package/src/adapters/bun/bun-user-websocket-lifecycle.js +83 -86
  10. package/src/adapters/bun/client-bridge.js +51 -50
  11. package/src/adapters/bun/create-app.js +171 -161
  12. package/src/adapters/bun/hmr-manager.js +62 -57
  13. package/src/adapters/bun/index.js +2 -31
  14. package/src/adapters/bun/runtime-host.js +61 -54
  15. package/src/adapters/bun/server-adapter.d.ts +0 -1
  16. package/src/adapters/bun/server-adapter.js +561 -561
  17. package/src/adapters/bun/static-preview-host.js +43 -46
  18. package/src/adapters/create-app.js +11 -14
  19. package/src/adapters/index.js +2 -30
  20. package/src/adapters/node/create-app.js +123 -129
  21. package/src/adapters/node/http-request-bridge.js +147 -106
  22. package/src/adapters/node/node-client-bridge.js +62 -64
  23. package/src/adapters/node/node-hmr-manager.js +58 -48
  24. package/src/adapters/node/runtime-host.js +96 -89
  25. package/src/adapters/node/server-adapter-dependencies.js +18 -21
  26. package/src/adapters/node/server-adapter.d.ts +0 -1
  27. package/src/adapters/node/server-adapter.js +347 -326
  28. package/src/adapters/node/static-content-server.js +172 -191
  29. package/src/adapters/node/static-preview-host.js +87 -78
  30. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  31. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  32. package/src/adapters/shared/hmr/hmr-html-response.js +46 -32
  33. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +29 -38
  34. package/src/adapters/shared/hmr/shared-hmr-manager.js +439 -425
  35. package/src/adapters/shared/http/api-request-pipeline.js +122 -119
  36. package/src/adapters/shared/http/api-response.js +77 -77
  37. package/src/adapters/shared/http/create-body-response.js +22 -19
  38. package/src/adapters/shared/http/define-api-handler.js +41 -55
  39. package/src/adapters/shared/http/explicit-static-render-preparation.js +26 -23
  40. package/src/adapters/shared/http/explicit-static-route-matcher.js +55 -62
  41. package/src/adapters/shared/http/file-route-middleware-pipeline.js +81 -75
  42. package/src/adapters/shared/http/fs-server-response-factory.js +101 -96
  43. package/src/adapters/shared/http/fs-server-response-matcher.js +239 -257
  44. package/src/adapters/shared/http/run-middleware-chain.js +15 -15
  45. package/src/adapters/shared/runtime/application-adapter.js +72 -87
  46. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +25 -22
  47. package/src/adapters/shared/runtime/port-manager.js +207 -177
  48. package/src/adapters/shared/runtime/render-context.js +94 -79
  49. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +33 -38
  50. package/src/adapters/shared/runtime/runtime-host.js +1 -0
  51. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +2 -3
  52. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +65 -51
  53. package/src/adapters/shared/runtime/server-adapter.d.ts +1 -0
  54. package/src/adapters/shared/runtime/server-adapter.js +233 -217
  55. package/src/adapters/shared/runtime/server-route-handler.js +74 -70
  56. package/src/adapters/shared/runtime/server-static-builder.js +165 -184
  57. package/src/adapters/shared/runtime/static-preview-host.js +1 -0
  58. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +97 -88
  59. package/src/adapters/shared/ws/websocket-lifecycle.js +57 -50
  60. package/src/build/README.md +52 -1
  61. package/src/build/app-build-manifest-runtime.js +129 -108
  62. package/src/build/browser/browser-runtime-manifest.js +47 -50
  63. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -12
  64. package/src/build/browser/browser-runtime-plugin.js +206 -160
  65. package/src/build/browser/jsx-ownership-plugins.js +51 -37
  66. package/src/build/browser/lit-static-render-worker-context.js +3 -5
  67. package/src/build/build-adapter.js +276 -139
  68. package/src/build/cache/build-input-fingerprint.js +28 -26
  69. package/src/build/cache/cache-constants.js +4 -6
  70. package/src/build/cache/cache-keys.js +64 -56
  71. package/src/build/cache/pages-unified-graph-build.js +179 -178
  72. package/src/build/cache/production-build-cache.js +47 -54
  73. package/src/build/cache/server-entry-build-cache.js +134 -146
  74. package/src/build/contracts/build-contracts.d.ts +4 -4
  75. package/src/build/contracts/build-contracts.js +1 -0
  76. package/src/build/contracts/build-manifest.js +58 -43
  77. package/src/build/contracts/build-types.js +1 -0
  78. package/src/build/rolldown/rolldown-adapter-helpers.d.ts +9 -0
  79. package/src/build/rolldown/rolldown-adapter-helpers.js +405 -298
  80. package/src/build/rolldown/rolldown-build-adapter.js +53 -61
  81. package/src/build/rolldown/rolldown-build-invocation-metrics.js +31 -35
  82. package/src/build/rolldown/rolldown-plugin-bridge.js +264 -194
  83. package/src/build/rolldown/rolldown-source-transform-pass.js +59 -50
  84. package/src/build/rolldown/runtime-build-output-normalizer.js +227 -175
  85. package/src/build/rolldown/server-side-css-shim-plugin.js +54 -31
  86. package/src/build/runtime/build-profile-options.js +36 -36
  87. package/src/build/runtime/build-request-identity.js +70 -45
  88. package/src/build/runtime/build-request-policy.js +80 -42
  89. package/src/build/runtime/build-runtime.js +64 -54
  90. package/src/build/runtime/deduping-build-executor.js +38 -32
  91. package/src/build/runtime/parallel-build-executor.js +58 -50
  92. package/src/build/runtime/serialized-build-executor.js +78 -62
  93. package/src/cache/index.js +6 -6
  94. package/src/cache/module-parse-cache.js +99 -68
  95. package/src/client/navigation-scripts/classification.js +45 -37
  96. package/src/client/navigation-scripts/index.js +3 -23
  97. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +58 -62
  98. package/src/client/navigation-scripts/registry.js +15 -11
  99. package/src/client/navigation-scripts/rerun-queue.js +81 -64
  100. package/src/client/scroll.js +32 -24
  101. package/src/client/scroll.test.browser.js +27 -33
  102. package/src/client/view-transitions.js +68 -55
  103. package/src/config/config-builder.d.ts +8 -0
  104. package/src/config/config-builder.js +637 -642
  105. package/src/config/constants.js +44 -24
  106. package/src/declarations.d.ts +1 -0
  107. package/src/dev/README.md +24 -0
  108. package/src/dev/client-bridge-registry.js +7 -12
  109. package/src/dev/dev-client-ownership.js +7 -5
  110. package/src/dev/hmr-manager-registry.js +7 -12
  111. package/src/dev/host-runtime.js +25 -30
  112. package/src/dev/runtime-server-started-message.js +2 -5
  113. package/src/dev/sc-server.js +106 -103
  114. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  115. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  116. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  117. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  118. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  119. package/src/dev/transform-server/dev-transform-import-rewriter.js +110 -0
  120. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  121. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  122. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  123. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  124. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  125. package/src/dev/transform-server/dev-transform-server.js +191 -0
  126. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  127. package/src/dev/transform-server/dev-transform-url.js +58 -0
  128. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +27 -0
  129. package/src/dev/transform-server/dev-transform-vendor-registry.js +145 -0
  130. package/src/dev/transform-server/index.d.ts +6 -0
  131. package/src/dev/transform-server/index.js +4 -0
  132. package/src/dev/transform-server/types.d.ts +15 -0
  133. package/src/dev/transform-server/types.js +1 -0
  134. package/src/dev-toolbar/README.md +51 -0
  135. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  136. package/src/dev-toolbar/define-dev-tool.js +9 -0
  137. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  138. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  139. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  140. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  141. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  142. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  143. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  144. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  145. package/src/dev-toolbar/dev-toolbar-package.d.ts +31 -0
  146. package/src/dev-toolbar/dev-toolbar-package.js +72 -0
  147. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  148. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  149. package/src/diagnostics/request-build-dedupe.js +34 -28
  150. package/src/diagnostics/startup-trace.d.ts +10 -1
  151. package/src/diagnostics/startup-trace.js +269 -241
  152. package/src/eco/README.md +6 -0
  153. package/src/eco/eco-declared-component.js +19 -14
  154. package/src/eco/eco.browser.js +56 -69
  155. package/src/eco/eco.js +156 -96
  156. package/src/eco/eco.types.js +5 -0
  157. package/src/eco/eco.utils.js +1 -10
  158. package/src/eco/global-injector-map.js +55 -41
  159. package/src/eco/lazy-injector-map.js +90 -60
  160. package/src/eco/module-dependencies.js +52 -44
  161. package/src/eco/page-layout-normalization.js +59 -49
  162. package/src/errors/http-error.js +50 -49
  163. package/src/errors/index.js +3 -12
  164. package/src/errors/locals-access-error.js +5 -8
  165. package/src/errors/undeclared-component-dependency-error.js +15 -15
  166. package/src/global/app-logger.js +3 -6
  167. package/src/hmr/README.md +10 -0
  168. package/src/hmr/client/hmr-runtime.js +117 -113
  169. package/src/hmr/client/module-update.d.ts +13 -0
  170. package/src/hmr/client/module-update.js +39 -0
  171. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  172. package/src/hmr/hmr-asset-paths.js +22 -0
  173. package/src/hmr/hmr-entrypoint-output.d.ts +11 -39
  174. package/src/hmr/hmr-entrypoint-output.js +28 -54
  175. package/src/hmr/hmr-file-change-prep.js +13 -16
  176. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  177. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  178. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  179. package/src/hmr/hmr-runtime-paths.js +13 -0
  180. package/src/hmr/hmr-strategy.d.ts +5 -11
  181. package/src/hmr/hmr-strategy.js +113 -61
  182. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  183. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -95
  184. package/src/hmr/strategies/js-hmr-strategy.js +104 -217
  185. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +33 -27
  186. package/src/index.browser.js +1 -4
  187. package/src/index.d.ts +1 -0
  188. package/src/index.js +6 -47
  189. package/src/integrations/ghtml/ghtml-renderer.js +12 -7
  190. package/src/integrations/ghtml/ghtml.constants.js +1 -4
  191. package/src/integrations/ghtml/ghtml.plugin.js +9 -12
  192. package/src/islands/README.md +25 -0
  193. package/src/islands/island-host.d.ts +37 -0
  194. package/src/islands/island-host.js +55 -0
  195. package/src/plugins/alias-resolver-cache.js +114 -97
  196. package/src/plugins/alias-resolver-plugin.js +33 -47
  197. package/src/plugins/define-integration.js +18 -17
  198. package/src/plugins/eco-component-meta-plugin.js +387 -145
  199. package/src/plugins/foreign-jsx-override-plugin.js +49 -35
  200. package/src/plugins/integration-plugin.js +212 -203
  201. package/src/plugins/jsx-import-source.utils.js +16 -21
  202. package/src/plugins/processor.js +159 -149
  203. package/src/plugins/runtime-capability.js +1 -0
  204. package/src/plugins/source-transform.js +109 -79
  205. package/src/plugins/tsconfig-import-resolver.d.ts +17 -0
  206. package/src/plugins/tsconfig-import-resolver.js +218 -142
  207. package/src/route-renderer/README.md +12 -1
  208. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +143 -136
  209. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +33 -27
  210. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +173 -126
  211. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +165 -154
  212. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +329 -341
  213. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +33 -32
  214. package/src/route-renderer/orchestration/integration-renderer.d.ts +1 -0
  215. package/src/route-renderer/orchestration/integration-renderer.js +731 -750
  216. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +168 -172
  217. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +119 -131
  218. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +82 -91
  219. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +82 -76
  220. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +29 -31
  221. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +10 -6
  222. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +31 -28
  223. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +3 -0
  224. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +430 -413
  225. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +191 -212
  226. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +20 -24
  227. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +4 -0
  228. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +24 -24
  229. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +22 -24
  230. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +41 -34
  231. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +5 -0
  232. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +42 -22
  233. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +50 -48
  234. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +29 -32
  235. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +150 -156
  236. package/src/route-renderer/orchestration/string-markup-renderer.js +48 -51
  237. package/src/route-renderer/page-loading/component-dependency-collection.js +120 -124
  238. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  239. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  240. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +68 -54
  241. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  242. package/src/route-renderer/page-loading/lazy-trigger-planning.js +46 -36
  243. package/src/route-renderer/page-loading/module-declaration-aggregation.js +38 -31
  244. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  245. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  246. package/src/route-renderer/page-loading/page-module-loader.js +130 -124
  247. package/src/route-renderer/route-renderer.js +74 -76
  248. package/src/router/client/link-intent.js +55 -39
  249. package/src/router/client/link-intent.test.browser.js +49 -49
  250. package/src/router/client/link-navigation-policy.js +114 -93
  251. package/src/router/client/link-navigation-policy.test.browser.js +70 -80
  252. package/src/router/client/navigation-coordinator.js +235 -211
  253. package/src/router/server/route-registry.js +237 -242
  254. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -53
  255. package/src/services/assets/asset-processing-service/asset-processing.service.js +287 -303
  256. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  257. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  258. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  259. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +106 -69
  260. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -53
  261. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +4 -6
  262. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +79 -80
  263. package/src/services/assets/asset-processing-service/index.js +8 -8
  264. package/src/services/assets/asset-processing-service/inline-content-script-body.js +22 -16
  265. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +21 -17
  266. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  267. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  268. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  269. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  270. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -117
  271. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  272. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +110 -115
  273. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -97
  274. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  275. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +27 -29
  276. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +34 -40
  277. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +36 -35
  278. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +14 -16
  279. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -39
  280. package/src/services/assets/browser-bundle.service.js +52 -47
  281. package/src/services/cache/cache.types.js +5 -0
  282. package/src/services/cache/index.js +6 -7
  283. package/src/services/cache/memory-cache-store.js +101 -89
  284. package/src/services/cache/page-cache-service.js +156 -145
  285. package/src/services/cache/page-request-cache-coordinator.service.js +102 -102
  286. package/src/services/html/html-rewriter-provider.service.js +61 -61
  287. package/src/services/html/html-transformer.service.js +249 -266
  288. package/src/services/invalidation/development-invalidation.service.js +252 -241
  289. package/src/services/module-loading/app-module-loader.service.js +1 -0
  290. package/src/services/module-loading/app-server-module-transpiler.service.js +107 -101
  291. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  292. package/src/services/module-loading/module-loading-types.js +1 -0
  293. package/src/services/module-loading/page-module-import.service.js +235 -243
  294. package/src/services/module-loading/route-module-build-cache-registry.js +47 -33
  295. package/src/services/module-loading/route-module-build-cache.js +3 -38
  296. package/src/services/module-loading/route-module-build-cache.store.js +195 -200
  297. package/src/services/module-loading/route-module-build-manifest.js +61 -74
  298. package/src/services/module-loading/route-module-dependency-hasher.js +136 -110
  299. package/src/services/module-loading/server-module-transpiler.service.js +68 -62
  300. package/src/services/module-loading/source-module-support.js +15 -7
  301. package/src/services/runtime-state/dev-graph.service.js +165 -157
  302. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  303. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  304. package/src/services/validation/schema-validation-service.js +157 -95
  305. package/src/services/validation/standard-schema.types.js +1 -0
  306. package/src/services/validation/validate-standard-schema.js +13 -13
  307. package/src/static-site-generator/production-page-browser-graph-prebuild.js +35 -19
  308. package/src/static-site-generator/sitemap-routes.js +33 -28
  309. package/src/static-site-generator/sitemap.js +38 -29
  310. package/src/static-site-generator/static-build-invalidation.js +34 -56
  311. package/src/static-site-generator/static-export-context.js +1 -0
  312. package/src/static-site-generator/static-site-generator.js +517 -553
  313. package/src/types/internal-types.d.ts +19 -3
  314. package/src/types/internal-types.js +1 -0
  315. package/src/types/public-types.d.ts +16 -46
  316. package/src/types/public-types.js +1 -0
  317. package/src/utils/deep-merge.js +39 -26
  318. package/src/utils/ecopages-route-info.js +27 -23
  319. package/src/utils/hash.js +3 -6
  320. package/src/utils/html-escaping.js +21 -8
  321. package/src/utils/html.js +1 -4
  322. package/src/utils/invariant.js +11 -10
  323. package/src/utils/locals-utils.js +32 -22
  324. package/src/utils/parse-cli-args.js +73 -65
  325. package/src/utils/path-pattern.js +38 -23
  326. package/src/utils/path-utils.module.js +8 -11
  327. package/src/utils/resolve-entry-file.js +70 -38
  328. package/src/utils/resolve-work-dir.js +23 -27
  329. package/src/utils/runtime.js +24 -33
  330. package/src/utils/server-utils.module.js +60 -52
  331. package/src/utils/static-file-extensions.js +52 -46
  332. package/src/watchers/project-watcher-ignore.js +16 -15
  333. package/src/watchers/project-watcher.js +385 -366
  334. package/src/watchers/project-watcher.test-helpers.js +45 -50
  335. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.d.ts +0 -56
  336. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +0 -106
  337. package/src/build/cache/dev-browser-script-cache.d.ts +0 -34
  338. package/src/build/cache/dev-browser-script-cache.js +0 -90
@@ -1,366 +1,354 @@
1
- import {
2
- getComponentRenderContext,
3
- runWithComponentRenderContext
4
- } from "./component-render-context.js";
5
- import { assertForeignChildrenNotOpaque, isMarkupNodeLike } from "./foreign-child-output.utils.js";
6
- function toForeignSubtreeRenderPayload(result) {
7
- return {
8
- html: result.html,
9
- assets: result.assets ?? [],
10
- rootTag: result.rootTag,
11
- rootAttributes: result.rootAttributes,
12
- attachmentPolicy: result.canAttachAttributes ? { kind: "first-element" } : { kind: "none" },
13
- integrationName: result.integrationName
14
- };
1
+ import { getComponentRenderContext, runWithComponentRenderContext, } from './component-render-context.js';
2
+ import { assertForeignChildrenNotOpaque, isMarkupNodeLike } from './foreign-child-output.utils.js';
3
+ /**
4
+ * Maps one component render result into the foreign-subtree payload shape used by
5
+ * queue resolution and integration tests.
6
+ */
7
+ export function toForeignSubtreeRenderPayload(result) {
8
+ return {
9
+ html: result.html,
10
+ assets: result.assets ?? [],
11
+ rootTag: result.rootTag,
12
+ rootAttributes: result.rootAttributes,
13
+ attachmentPolicy: result.canAttachAttributes ? { kind: 'first-element' } : { kind: 'none' },
14
+ integrationName: result.integrationName,
15
+ };
15
16
  }
16
- class ForeignSubtreeExecutionService {
17
- requiresForeignChildRuntime(input) {
18
- const children = input.children ?? input.props.children;
19
- if (children === void 0 || children === null) {
20
- return false;
21
- }
22
- if (typeof children === "string") {
23
- return false;
17
+ /**
18
+ * Executes one component render tree under Foreign Child support.
19
+ *
20
+ * This service owns mixed-integration execution policy and the queued token
21
+ * mechanics renderers use when foreign children cannot resolve inline.
22
+ */
23
+ export class ForeignSubtreeExecutionService {
24
+ requiresForeignChildRuntime(input) {
25
+ const children = input.children ?? input.props.children;
26
+ if (children === undefined || children === null) {
27
+ return false;
28
+ }
29
+ if (typeof children === 'string') {
30
+ return false;
31
+ }
32
+ if (typeof children !== 'object') {
33
+ return false;
34
+ }
35
+ return !isMarkupNodeLike(children);
24
36
  }
25
- if (typeof children !== "object") {
26
- return false;
37
+ shouldDelegateForeignChild(input) {
38
+ return !!input.targetIntegration && input.targetIntegration !== input.currentIntegration;
27
39
  }
28
- return !isMarkupNodeLike(children);
29
- }
30
- shouldDelegateForeignChild(input) {
31
- return !!input.targetIntegration && input.targetIntegration !== input.currentIntegration;
32
- }
33
- createFailFastRuntime(rendererName) {
34
- const interceptForeignChild = (input) => {
35
- if (!this.shouldDelegateForeignChild(input)) {
40
+ createFailFastRuntime(rendererName) {
41
+ const interceptForeignChild = (input) => {
42
+ if (!this.shouldDelegateForeignChild(input)) {
43
+ return {
44
+ kind: 'inline',
45
+ props: 'props' in input && input.props ? { ...input.props } : undefined,
46
+ };
47
+ }
48
+ throw new Error(`[ecopages] ${rendererName} renderer crossed into ${input.targetIntegration} without a renderer-owned foreign-child runtime. Override createForeignChildRuntime() to resolve foreign children inside the owning renderer.`);
49
+ };
36
50
  return {
37
- kind: "inline",
38
- props: "props" in input && input.props ? { ...input.props } : void 0
51
+ interceptForeignChild,
52
+ interceptForeignChildSync: interceptForeignChild,
53
+ };
54
+ }
55
+ getQueuedRuntimeContext(input, runtimeContextKey) {
56
+ return this.getRuntimeContext(input, runtimeContextKey);
57
+ }
58
+ createQueuedRuntime(options) {
59
+ return this.createQueueRuntime({
60
+ renderInput: options.renderInput,
61
+ rendererCache: options.rendererCache,
62
+ runtimeContextKey: options.runtimeContextKey,
63
+ tokenPrefix: options.tokenPrefix,
64
+ shouldQueueForeignChild: (input) => this.shouldDelegateForeignChild(input),
65
+ createRuntimeContext: options.createRuntimeContext,
66
+ });
67
+ }
68
+ createQueueRuntime(options) {
69
+ const runtimeContext = this.ensureRuntimeContext(options);
70
+ const interceptForeignChild = (input) => {
71
+ if (!options.shouldQueueForeignChild(input)) {
72
+ return {
73
+ kind: 'inline',
74
+ props: { ...input.props },
75
+ };
76
+ }
77
+ if ('children' in input.props) {
78
+ assertForeignChildrenNotOpaque(input.props.children, 'foreign-subtree queue');
79
+ }
80
+ runtimeContext.nextForeignSubtreeId += 1;
81
+ const foreignSubtreeId = runtimeContext.nextForeignSubtreeId;
82
+ const token = this.createForeignSubtreeToken(options.tokenPrefix, runtimeContext, foreignSubtreeId);
83
+ runtimeContext.queuedResolutions.push({
84
+ token,
85
+ component: input.component,
86
+ props: { ...input.props },
87
+ componentInstanceId: runtimeContext.componentInstanceScope
88
+ ? `${runtimeContext.componentInstanceScope}_n_${foreignSubtreeId}`
89
+ : `n_${foreignSubtreeId}`,
90
+ });
91
+ return {
92
+ kind: 'resolved',
93
+ value: token,
94
+ };
39
95
  };
40
- }
41
- throw new Error(
42
- `[ecopages] ${rendererName} renderer crossed into ${input.targetIntegration} without a renderer-owned foreign-child runtime. Override createForeignChildRuntime() to resolve foreign children inside the owning renderer.`
43
- );
44
- };
45
- return {
46
- interceptForeignChild,
47
- interceptForeignChildSync: interceptForeignChild
48
- };
49
- }
50
- getQueuedRuntimeContext(input, runtimeContextKey) {
51
- return this.getRuntimeContext(input, runtimeContextKey);
52
- }
53
- createQueuedRuntime(options) {
54
- return this.createQueueRuntime({
55
- renderInput: options.renderInput,
56
- rendererCache: options.rendererCache,
57
- runtimeContextKey: options.runtimeContextKey,
58
- tokenPrefix: options.tokenPrefix,
59
- shouldQueueForeignChild: (input) => this.shouldDelegateForeignChild(input),
60
- createRuntimeContext: options.createRuntimeContext
61
- });
62
- }
63
- createQueueRuntime(options) {
64
- const runtimeContext = this.ensureRuntimeContext(options);
65
- const interceptForeignChild = (input) => {
66
- if (!options.shouldQueueForeignChild(input)) {
67
96
  return {
68
- kind: "inline",
69
- props: { ...input.props }
97
+ interceptForeignChild,
98
+ interceptForeignChildSync: interceptForeignChild,
70
99
  };
71
- }
72
- if ("children" in input.props) {
73
- assertForeignChildrenNotOpaque(input.props.children, "foreign-subtree queue");
74
- }
75
- runtimeContext.nextForeignSubtreeId += 1;
76
- const foreignSubtreeId = runtimeContext.nextForeignSubtreeId;
77
- const token = this.createForeignSubtreeToken(options.tokenPrefix, runtimeContext, foreignSubtreeId);
78
- runtimeContext.queuedResolutions.push({
79
- token,
80
- component: input.component,
81
- props: { ...input.props },
82
- componentInstanceId: runtimeContext.componentInstanceScope ? `${runtimeContext.componentInstanceScope}_n_${foreignSubtreeId}` : `n_${foreignSubtreeId}`
83
- });
84
- return {
85
- kind: "resolved",
86
- value: token
87
- };
88
- };
89
- return {
90
- interceptForeignChild,
91
- interceptForeignChildSync: interceptForeignChild
92
- };
93
- }
94
- getRuntimeContext(input, runtimeContextKey) {
95
- const integrationContext = input.integrationContext;
96
- const runtimeContext = integrationContext?.[runtimeContextKey];
97
- if (typeof runtimeContext !== "object" || runtimeContext === null) {
98
- return void 0;
99
100
  }
100
- return runtimeContext;
101
- }
102
- async resolveStringQueuedHtml(options) {
103
- const runtimeContext = this.getQueuedRuntimeContext(options.renderInput, options.runtimeContextKey);
104
- return this.resolveQueuedHtml({
105
- currentIntegrationName: options.currentIntegrationName,
106
- html: options.html,
107
- runtimeContext,
108
- queueLabel: options.queueLabel,
109
- renderQueuedChildren: async (children, _runtimeContext, queuedResolutionsByToken, resolveToken) => {
110
- if (children === void 0) {
111
- return { assets: [], html: void 0 };
112
- }
113
- if (typeof children !== "string" && !isMarkupNodeLike(children)) {
114
- assertForeignChildrenNotOpaque(children, options.queueLabel);
115
- return { assets: [], children };
101
+ getRuntimeContext(input, runtimeContextKey) {
102
+ const integrationContext = input.integrationContext;
103
+ const runtimeContext = integrationContext?.[runtimeContextKey];
104
+ if (typeof runtimeContext !== 'object' || runtimeContext === null) {
105
+ return undefined;
116
106
  }
117
- const html = await this.resolveQueuedTokens(
118
- typeof children === "string" ? children : children.outerHTML ?? "",
119
- queuedResolutionsByToken,
120
- resolveToken
121
- );
122
- return { assets: [], html };
123
- },
124
- getOwningRenderer: options.getOwningRenderer,
125
- applyAttributesToFirstElement: options.applyAttributesToFirstElement,
126
- dedupeProcessedAssets: options.dedupeProcessedAssets
127
- });
128
- }
129
- async resolveQueuedHtml(options) {
130
- return this.resolveQueuedForeignSubtreeTokens({
131
- html: options.html,
132
- runtimeContext: options.runtimeContext,
133
- queueLabel: options.queueLabel,
134
- renderQueuedChildren: options.renderQueuedChildren,
135
- resolveForeignSubtree: (input, rendererCache) => this.resolveForeignSubtreeInOwningRenderer({
136
- currentIntegrationName: options.currentIntegrationName,
137
- input,
138
- rendererCache,
139
- getOwningRenderer: options.getOwningRenderer
140
- }),
141
- applyAttributesToFirstElement: options.applyAttributesToFirstElement,
142
- dedupeProcessedAssets: options.dedupeProcessedAssets
143
- });
144
- }
145
- async resolveQueuedForeignSubtreeTokens(options) {
146
- if (!options.runtimeContext || options.runtimeContext.queuedResolutions.length === 0) {
147
- return { assets: [], html: options.html };
107
+ return runtimeContext;
148
108
  }
149
- const runtimeContext = options.runtimeContext;
150
- const queuedResolutionsByToken = /* @__PURE__ */ new Map();
151
- const resolvedHtmlByToken = /* @__PURE__ */ new Map();
152
- const resolvingTokens = /* @__PURE__ */ new Set();
153
- const collectedAssets = [];
154
- const syncQueuedResolutions = () => {
155
- for (const resolution of runtimeContext.queuedResolutions) {
156
- if (!queuedResolutionsByToken.has(resolution.token)) {
157
- queuedResolutionsByToken.set(resolution.token, resolution);
158
- }
159
- }
160
- };
161
- const resolveToken = async (token) => {
162
- syncQueuedResolutions();
163
- const cachedHtml = resolvedHtmlByToken.get(token);
164
- if (cachedHtml) {
165
- return cachedHtml;
166
- }
167
- const resolution = queuedResolutionsByToken.get(token);
168
- if (!resolution) {
169
- return token;
170
- }
171
- if (resolvingTokens.has(token)) {
172
- throw new Error(
173
- `[ecopages] ${options.queueLabel} foreign-subtree queue contains a cycle or unresolved dependency links.`
174
- );
175
- }
176
- resolvingTokens.add(token);
177
- try {
178
- const renderedChildren = await options.renderQueuedChildren(
179
- resolution.props.children,
180
- runtimeContext,
181
- queuedResolutionsByToken,
182
- resolveToken
183
- );
184
- syncQueuedResolutions();
185
- if (renderedChildren.assets.length > 0) {
186
- collectedAssets.push(...renderedChildren.assets);
109
+ async resolveStringQueuedHtml(options) {
110
+ const runtimeContext = this.getQueuedRuntimeContext(options.renderInput, options.runtimeContextKey);
111
+ return this.resolveQueuedHtml({
112
+ currentIntegrationName: options.currentIntegrationName,
113
+ html: options.html,
114
+ runtimeContext,
115
+ queueLabel: options.queueLabel,
116
+ renderQueuedChildren: async (children, _runtimeContext, queuedResolutionsByToken, resolveToken) => {
117
+ if (children === undefined) {
118
+ return { assets: [], html: undefined };
119
+ }
120
+ if (typeof children !== 'string' && !isMarkupNodeLike(children)) {
121
+ assertForeignChildrenNotOpaque(children, options.queueLabel);
122
+ return { assets: [], children };
123
+ }
124
+ const html = await this.resolveQueuedTokens(typeof children === 'string' ? children : (children.outerHTML ?? ''), queuedResolutionsByToken, resolveToken);
125
+ return { assets: [], html };
126
+ },
127
+ getOwningRenderer: options.getOwningRenderer,
128
+ applyAttributesToFirstElement: options.applyAttributesToFirstElement,
129
+ dedupeProcessedAssets: options.dedupeProcessedAssets,
130
+ });
131
+ }
132
+ async resolveQueuedHtml(options) {
133
+ return this.resolveQueuedForeignSubtreeTokens({
134
+ html: options.html,
135
+ runtimeContext: options.runtimeContext,
136
+ queueLabel: options.queueLabel,
137
+ renderQueuedChildren: options.renderQueuedChildren,
138
+ resolveForeignSubtree: (input, rendererCache) => this.resolveForeignSubtreeInOwningRenderer({
139
+ currentIntegrationName: options.currentIntegrationName,
140
+ input,
141
+ rendererCache: rendererCache,
142
+ getOwningRenderer: options.getOwningRenderer,
143
+ }),
144
+ applyAttributesToFirstElement: options.applyAttributesToFirstElement,
145
+ dedupeProcessedAssets: options.dedupeProcessedAssets,
146
+ });
147
+ }
148
+ async resolveQueuedForeignSubtreeTokens(options) {
149
+ if (!options.runtimeContext || options.runtimeContext.queuedResolutions.length === 0) {
150
+ return { assets: [], html: options.html };
187
151
  }
188
- const foreignSubtreeRender = await options.resolveForeignSubtree(
189
- {
190
- component: resolution.component,
191
- props: { ...resolution.props },
192
- children: renderedChildren.html ?? renderedChildren.children,
193
- integrationContext: {
194
- rendererCache: runtimeContext.rendererCache,
195
- componentInstanceId: resolution.componentInstanceId
152
+ const runtimeContext = options.runtimeContext;
153
+ const queuedResolutionsByToken = new Map();
154
+ const resolvedHtmlByToken = new Map();
155
+ const resolvingTokens = new Set();
156
+ const collectedAssets = [];
157
+ const syncQueuedResolutions = () => {
158
+ for (const resolution of runtimeContext.queuedResolutions) {
159
+ if (!queuedResolutionsByToken.has(resolution.token)) {
160
+ queuedResolutionsByToken.set(resolution.token, resolution);
161
+ }
162
+ }
163
+ };
164
+ const resolveToken = async (token) => {
165
+ syncQueuedResolutions();
166
+ const cachedHtml = resolvedHtmlByToken.get(token);
167
+ if (cachedHtml) {
168
+ return cachedHtml;
169
+ }
170
+ const resolution = queuedResolutionsByToken.get(token);
171
+ if (!resolution) {
172
+ return token;
196
173
  }
197
- },
198
- runtimeContext.rendererCache
199
- );
200
- if (!foreignSubtreeRender) {
201
- throw new Error(
202
- `[ecopages] ${options.queueLabel} queued foreign subtree could not resolve its owning renderer.`
203
- );
174
+ if (resolvingTokens.has(token)) {
175
+ throw new Error(`[ecopages] ${options.queueLabel} foreign-subtree queue contains a cycle or unresolved dependency links.`);
176
+ }
177
+ resolvingTokens.add(token);
178
+ try {
179
+ const renderedChildren = await options.renderQueuedChildren(resolution.props.children, runtimeContext, queuedResolutionsByToken, resolveToken);
180
+ syncQueuedResolutions();
181
+ if (renderedChildren.assets.length > 0) {
182
+ collectedAssets.push(...renderedChildren.assets);
183
+ }
184
+ const foreignSubtreeRender = await options.resolveForeignSubtree({
185
+ component: resolution.component,
186
+ props: { ...resolution.props },
187
+ children: renderedChildren.html ?? renderedChildren.children,
188
+ integrationContext: {
189
+ rendererCache: runtimeContext.rendererCache,
190
+ componentInstanceId: resolution.componentInstanceId,
191
+ },
192
+ }, runtimeContext.rendererCache);
193
+ if (!foreignSubtreeRender) {
194
+ throw new Error(`[ecopages] ${options.queueLabel} queued foreign subtree could not resolve its owning renderer.`);
195
+ }
196
+ if ((foreignSubtreeRender.assets?.length ?? 0) > 0) {
197
+ collectedAssets.push(...(foreignSubtreeRender.assets ?? []));
198
+ }
199
+ const resolvedHtml = foreignSubtreeRender.attachmentPolicy.kind === 'first-element' &&
200
+ foreignSubtreeRender.rootAttributes
201
+ ? options.applyAttributesToFirstElement(foreignSubtreeRender.html, foreignSubtreeRender.rootAttributes)
202
+ : foreignSubtreeRender.html;
203
+ resolvedHtmlByToken.set(token, resolvedHtml);
204
+ return resolvedHtml;
205
+ }
206
+ finally {
207
+ resolvingTokens.delete(token);
208
+ }
209
+ };
210
+ let resolvedHtml = options.html;
211
+ for (let index = 0; index < runtimeContext.queuedResolutions.length; index += 1) {
212
+ syncQueuedResolutions();
213
+ const resolution = runtimeContext.queuedResolutions[index];
214
+ if (!resolvedHtml.includes(resolution.token)) {
215
+ continue;
216
+ }
217
+ resolvedHtml = resolvedHtml.split(resolution.token).join(await resolveToken(resolution.token));
218
+ }
219
+ return {
220
+ assets: options.dedupeProcessedAssets(collectedAssets),
221
+ html: resolvedHtml,
222
+ };
223
+ }
224
+ async executeComponentRender(options) {
225
+ const rendererCache = this.getRendererCache(options.input.integrationContext) ??
226
+ new Map();
227
+ const delegatedForeignChildRender = await this.resolveForeignChildInOwningRenderer({
228
+ currentIntegrationName: options.currentIntegrationName,
229
+ input: options.input,
230
+ rendererCache,
231
+ getOwningRenderer: options.getOwningRenderer,
232
+ });
233
+ if (delegatedForeignChildRender) {
234
+ return delegatedForeignChildRender;
204
235
  }
205
- if ((foreignSubtreeRender.assets?.length ?? 0) > 0) {
206
- collectedAssets.push(...foreignSubtreeRender.assets ?? []);
236
+ const hasForeignChildren = options.hasForeignChildDescendants(options.input.component) ||
237
+ this.requiresForeignChildRuntime(options.input);
238
+ const activeRenderContext = getComponentRenderContext();
239
+ if (!hasForeignChildren) {
240
+ if (!activeRenderContext || activeRenderContext.currentIntegration === options.currentIntegrationName) {
241
+ return options.normalizeComponentRenderOutput(await options.renderComponent(options.input));
242
+ }
243
+ const sameIntegrationExecution = await runWithComponentRenderContext({
244
+ currentIntegration: options.currentIntegrationName,
245
+ }, async () => options.renderComponent(options.input));
246
+ return options.normalizeComponentRenderOutput(sameIntegrationExecution.value);
207
247
  }
208
- const resolvedHtml2 = foreignSubtreeRender.attachmentPolicy.kind === "first-element" && foreignSubtreeRender.rootAttributes ? options.applyAttributesToFirstElement(
209
- foreignSubtreeRender.html,
210
- foreignSubtreeRender.rootAttributes
211
- ) : foreignSubtreeRender.html;
212
- resolvedHtmlByToken.set(token, resolvedHtml2);
213
- return resolvedHtml2;
214
- } finally {
215
- resolvingTokens.delete(token);
216
- }
217
- };
218
- let resolvedHtml = options.html;
219
- for (let index = 0; index < runtimeContext.queuedResolutions.length; index += 1) {
220
- syncQueuedResolutions();
221
- const resolution = runtimeContext.queuedResolutions[index];
222
- if (!resolvedHtml.includes(resolution.token)) {
223
- continue;
224
- }
225
- resolvedHtml = resolvedHtml.split(resolution.token).join(await resolveToken(resolution.token));
248
+ const execution = await runWithComponentRenderContext({
249
+ currentIntegration: options.currentIntegrationName,
250
+ foreignChildRuntime: options.createForeignChildRuntime({
251
+ renderInput: options.input,
252
+ rendererCache,
253
+ }),
254
+ }, async () => options.renderComponent(options.input));
255
+ return options.normalizeComponentRenderOutput(execution.value);
226
256
  }
227
- return {
228
- assets: options.dedupeProcessedAssets(collectedAssets),
229
- html: resolvedHtml
230
- };
231
- }
232
- async executeComponentRender(options) {
233
- const rendererCache = this.getRendererCache(options.input.integrationContext) ?? /* @__PURE__ */ new Map();
234
- const delegatedForeignChildRender = await this.resolveForeignChildInOwningRenderer({
235
- currentIntegrationName: options.currentIntegrationName,
236
- input: options.input,
237
- rendererCache,
238
- getOwningRenderer: options.getOwningRenderer
239
- });
240
- if (delegatedForeignChildRender) {
241
- return delegatedForeignChildRender;
257
+ getRendererCache(integrationContext) {
258
+ if (integrationContext?.rendererCache instanceof Map) {
259
+ return integrationContext.rendererCache;
260
+ }
261
+ return undefined;
242
262
  }
243
- const hasForeignChildren = options.hasForeignChildDescendants(options.input.component) || this.requiresForeignChildRuntime(options.input);
244
- const activeRenderContext = getComponentRenderContext();
245
- if (!hasForeignChildren) {
246
- if (!activeRenderContext || activeRenderContext.currentIntegration === options.currentIntegrationName) {
247
- return options.normalizeComponentRenderOutput(await options.renderComponent(options.input));
248
- }
249
- const sameIntegrationExecution = await runWithComponentRenderContext(
250
- {
251
- currentIntegration: options.currentIntegrationName
252
- },
253
- async () => options.renderComponent(options.input)
254
- );
255
- return options.normalizeComponentRenderOutput(sameIntegrationExecution.value);
263
+ withRendererCache(input, rendererCache) {
264
+ const integrationContext = input.integrationContext;
265
+ const sharedRendererCache = rendererCache;
266
+ return {
267
+ ...input,
268
+ integrationContext: integrationContext
269
+ ? { ...integrationContext, rendererCache: sharedRendererCache }
270
+ : { rendererCache: sharedRendererCache },
271
+ };
256
272
  }
257
- const execution = await runWithComponentRenderContext(
258
- {
259
- currentIntegration: options.currentIntegrationName,
260
- foreignChildRuntime: options.createForeignChildRuntime({
261
- renderInput: options.input,
262
- rendererCache
263
- })
264
- },
265
- async () => options.renderComponent(options.input)
266
- );
267
- return options.normalizeComponentRenderOutput(execution.value);
268
- }
269
- getRendererCache(integrationContext) {
270
- if (integrationContext?.rendererCache instanceof Map) {
271
- return integrationContext.rendererCache;
273
+ getForeignOwnerIntegrationName(component, currentIntegrationName) {
274
+ const integrationName = component.config?.integration ?? component.config?.__eco?.integration;
275
+ if (!integrationName || integrationName === 'html' || integrationName === currentIntegrationName) {
276
+ return undefined;
277
+ }
278
+ return integrationName;
272
279
  }
273
- return void 0;
274
- }
275
- withRendererCache(input, rendererCache) {
276
- const integrationContext = input.integrationContext;
277
- const sharedRendererCache = rendererCache;
278
- return {
279
- ...input,
280
- integrationContext: integrationContext ? { ...integrationContext, rendererCache: sharedRendererCache } : { rendererCache: sharedRendererCache }
281
- };
282
- }
283
- getForeignOwnerIntegrationName(component, currentIntegrationName) {
284
- const integrationName = component.config?.integration ?? component.config?.__eco?.integration;
285
- if (!integrationName || integrationName === "html" || integrationName === currentIntegrationName) {
286
- return void 0;
280
+ async resolveForeignChildInOwningRenderer(options) {
281
+ return await this.runInForeignOwningRenderer({
282
+ currentIntegrationName: options.currentIntegrationName,
283
+ input: options.input,
284
+ rendererCache: options.rendererCache,
285
+ getOwningRenderer: options.getOwningRenderer,
286
+ run: (owningRenderer, delegatedInput) => owningRenderer.renderComponentWithForeignChildren(delegatedInput),
287
+ });
287
288
  }
288
- return integrationName;
289
- }
290
- async resolveForeignChildInOwningRenderer(options) {
291
- return await this.runInForeignOwningRenderer({
292
- currentIntegrationName: options.currentIntegrationName,
293
- input: options.input,
294
- rendererCache: options.rendererCache,
295
- getOwningRenderer: options.getOwningRenderer,
296
- run: (owningRenderer, delegatedInput) => owningRenderer.renderComponentWithForeignChildren(delegatedInput)
297
- });
298
- }
299
- async resolveForeignSubtreeInOwningRenderer(options) {
300
- return await this.runInForeignOwningRenderer({
301
- currentIntegrationName: options.currentIntegrationName,
302
- input: options.input,
303
- rendererCache: options.rendererCache,
304
- getOwningRenderer: options.getOwningRenderer,
305
- run: async (owningRenderer, delegatedInput) => toForeignSubtreeRenderPayload(await owningRenderer.renderComponentWithForeignChildren(delegatedInput))
306
- });
307
- }
308
- async runInForeignOwningRenderer(options) {
309
- const foreignOwnerIntegrationName = this.getForeignOwnerIntegrationName(
310
- options.input.component,
311
- options.currentIntegrationName
312
- );
313
- if (!foreignOwnerIntegrationName) {
314
- return void 0;
289
+ async resolveForeignSubtreeInOwningRenderer(options) {
290
+ return await this.runInForeignOwningRenderer({
291
+ currentIntegrationName: options.currentIntegrationName,
292
+ input: options.input,
293
+ rendererCache: options.rendererCache,
294
+ getOwningRenderer: options.getOwningRenderer,
295
+ run: async (owningRenderer, delegatedInput) => toForeignSubtreeRenderPayload(await owningRenderer.renderComponentWithForeignChildren(delegatedInput)),
296
+ });
315
297
  }
316
- const owningRenderer = await options.getOwningRenderer(foreignOwnerIntegrationName, options.rendererCache);
317
- if (owningRenderer.name === options.currentIntegrationName) {
318
- return void 0;
298
+ async runInForeignOwningRenderer(options) {
299
+ const foreignOwnerIntegrationName = this.getForeignOwnerIntegrationName(options.input.component, options.currentIntegrationName);
300
+ if (!foreignOwnerIntegrationName) {
301
+ return undefined;
302
+ }
303
+ const owningRenderer = await options.getOwningRenderer(foreignOwnerIntegrationName, options.rendererCache);
304
+ if (owningRenderer.name === options.currentIntegrationName) {
305
+ return undefined;
306
+ }
307
+ const delegatedInputWithCache = this.withRendererCache(options.input, options.rendererCache);
308
+ const delegatedChildren = delegatedInputWithCache.children ?? delegatedInputWithCache.props.children;
309
+ return await options.run(owningRenderer, {
310
+ ...delegatedInputWithCache,
311
+ children: delegatedChildren,
312
+ });
319
313
  }
320
- const delegatedInputWithCache = this.withRendererCache(options.input, options.rendererCache);
321
- const delegatedChildren = delegatedInputWithCache.children ?? delegatedInputWithCache.props.children;
322
- return await options.run(owningRenderer, {
323
- ...delegatedInputWithCache,
324
- children: delegatedChildren
325
- });
326
- }
327
- async resolveQueuedTokens(html, queuedResolutionsByToken, resolveToken) {
328
- let resolvedHtml = html;
329
- for (const token of queuedResolutionsByToken.keys()) {
330
- if (!resolvedHtml.includes(token)) {
331
- continue;
332
- }
333
- resolvedHtml = resolvedHtml.split(token).join(await resolveToken(token));
314
+ async resolveQueuedTokens(html, queuedResolutionsByToken, resolveToken) {
315
+ let resolvedHtml = html;
316
+ for (const token of queuedResolutionsByToken.keys()) {
317
+ if (!resolvedHtml.includes(token)) {
318
+ continue;
319
+ }
320
+ resolvedHtml = resolvedHtml.split(token).join(await resolveToken(token));
321
+ }
322
+ return resolvedHtml;
334
323
  }
335
- return resolvedHtml;
336
- }
337
- createForeignSubtreeToken(tokenPrefix, runtimeContext, foreignSubtreeId) {
338
- return `${tokenPrefix}${runtimeContext.componentInstanceScope ?? "root"}__${foreignSubtreeId}__`;
339
- }
340
- ensureRuntimeContext(options) {
341
- let integrationContext;
342
- if (typeof options.renderInput.integrationContext === "object" && options.renderInput.integrationContext !== null) {
343
- integrationContext = options.renderInput.integrationContext;
344
- } else {
345
- integrationContext = {};
324
+ createForeignSubtreeToken(tokenPrefix, runtimeContext, foreignSubtreeId) {
325
+ return `${tokenPrefix}${runtimeContext.componentInstanceScope ?? 'root'}__${foreignSubtreeId}__`;
346
326
  }
347
- const existingRuntimeContext = integrationContext[options.runtimeContextKey];
348
- if (typeof existingRuntimeContext !== "object" || existingRuntimeContext === null) {
349
- integrationContext[options.runtimeContextKey] = options.createRuntimeContext?.(integrationContext, options.rendererCache) ?? {
350
- rendererCache: options.rendererCache,
351
- componentInstanceScope: integrationContext.componentInstanceId,
352
- nextForeignSubtreeId: 0,
353
- queuedResolutions: []
354
- };
355
- } else {
356
- existingRuntimeContext.rendererCache = options.rendererCache;
327
+ ensureRuntimeContext(options) {
328
+ let integrationContext;
329
+ if (typeof options.renderInput.integrationContext === 'object' &&
330
+ options.renderInput.integrationContext !== null) {
331
+ integrationContext = options.renderInput.integrationContext;
332
+ }
333
+ else {
334
+ integrationContext = {};
335
+ }
336
+ const existingRuntimeContext = integrationContext[options.runtimeContextKey];
337
+ if (typeof existingRuntimeContext !== 'object' || existingRuntimeContext === null) {
338
+ integrationContext[options.runtimeContextKey] =
339
+ options.createRuntimeContext?.(integrationContext, options.rendererCache) ??
340
+ {
341
+ rendererCache: options.rendererCache,
342
+ componentInstanceScope: integrationContext.componentInstanceId,
343
+ nextForeignSubtreeId: 0,
344
+ queuedResolutions: [],
345
+ };
346
+ }
347
+ else {
348
+ existingRuntimeContext.rendererCache = options.rendererCache;
349
+ }
350
+ integrationContext.rendererCache = options.rendererCache;
351
+ options.renderInput.integrationContext = integrationContext;
352
+ return integrationContext[options.runtimeContextKey];
357
353
  }
358
- integrationContext.rendererCache = options.rendererCache;
359
- options.renderInput.integrationContext = integrationContext;
360
- return integrationContext[options.runtimeContextKey];
361
- }
362
354
  }
363
- export {
364
- ForeignSubtreeExecutionService,
365
- toForeignSubtreeRenderPayload
366
- };