@ecopages/core 0.2.0-alpha.9 → 0.2.1-beta.0

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 (471) hide show
  1. package/README.md +79 -28
  2. package/package.json +94 -116
  3. package/src/adapters/README.md +2 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +19 -115
  12. package/src/adapters/bun/hmr-manager.js +25 -301
  13. package/src/adapters/bun/index.d.ts +1 -1
  14. package/src/adapters/bun/index.js +2 -2
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +100 -32
  18. package/src/adapters/bun/server-adapter.js +142 -65
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +1 -5
  24. package/src/adapters/index.js +1 -7
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +22 -103
  31. package/src/adapters/node/node-hmr-manager.js +26 -289
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +19 -42
  37. package/src/adapters/node/server-adapter.js +94 -139
  38. package/src/adapters/node/static-content-server.d.ts +1 -1
  39. package/src/adapters/node/static-content-server.js +1 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/adapters/shared/define-api-handler.d.ts +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
  53. package/src/adapters/shared/fs-server-response-matcher.js +72 -46
  54. package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
  55. package/src/adapters/shared/hmr-html-response.d.ts +1 -1
  56. package/src/adapters/shared/hmr-html-response.js +4 -3
  57. package/src/adapters/shared/render-context.d.ts +5 -3
  58. package/src/adapters/shared/render-context.js +24 -1
  59. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  60. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  61. package/src/adapters/shared/runtime-host.d.ts +12 -0
  62. package/src/adapters/shared/server-adapter.d.ts +22 -11
  63. package/src/adapters/shared/server-adapter.js +183 -133
  64. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  65. package/src/adapters/shared/server-route-handler.js +4 -4
  66. package/src/adapters/shared/server-static-builder.d.ts +8 -7
  67. package/src/adapters/shared/server-static-builder.js +6 -5
  68. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  69. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  70. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  71. package/src/build/README.md +57 -67
  72. package/src/build/browser-runtime-manifest.d.ts +31 -0
  73. package/src/build/browser-runtime-manifest.js +61 -0
  74. package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
  75. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  76. package/src/build/browser-runtime-plugin.d.ts +78 -0
  77. package/src/build/browser-runtime-plugin.js +173 -0
  78. package/src/build/build-adapter.d.ts +384 -63
  79. package/src/build/build-adapter.js +129 -54
  80. package/src/build/build-manifest.d.ts +6 -0
  81. package/src/build/build-manifest.js +21 -2
  82. package/src/build/build-types.d.ts +2 -2
  83. package/src/build/rolldown-adapter-helpers.d.ts +58 -0
  84. package/src/build/rolldown-adapter-helpers.js +265 -0
  85. package/src/build/rolldown-build-adapter.d.ts +28 -0
  86. package/src/build/rolldown-build-adapter.js +65 -0
  87. package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
  88. package/src/build/rolldown-dev-build-adapter.js +166 -0
  89. package/src/build/rolldown-plugin-bridge.d.ts +59 -0
  90. package/src/build/rolldown-plugin-bridge.js +199 -0
  91. package/src/build/runtime-build-executor.d.ts +15 -7
  92. package/src/build/runtime-build-executor.js +8 -9
  93. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  94. package/src/build/runtime-build-output-normalizer.js +111 -0
  95. package/src/build/serialized-build-executor.d.ts +64 -0
  96. package/src/build/serialized-build-executor.js +63 -0
  97. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  98. package/src/build/server-side-css-shim-plugin.js +35 -0
  99. package/src/cache/index.d.ts +6 -0
  100. package/src/cache/index.js +6 -0
  101. package/src/cache/module-parse-cache.d.ts +65 -0
  102. package/src/cache/module-parse-cache.js +75 -0
  103. package/src/config/README.md +5 -2
  104. package/src/config/config-builder.d.ts +41 -13
  105. package/src/config/config-builder.js +62 -24
  106. package/src/declarations.d.ts +1 -1
  107. package/src/dev/host-runtime.d.ts +10 -0
  108. package/src/dev/host-runtime.js +24 -0
  109. package/src/dev/sc-server.d.ts +1 -1
  110. package/src/dev/sc-server.js +1 -1
  111. package/src/eco/eco.browser.d.ts +2 -0
  112. package/src/eco/eco.browser.js +88 -0
  113. package/src/eco/eco.js +50 -45
  114. package/src/eco/eco.types.d.ts +60 -8
  115. package/src/eco/eco.utils.d.ts +1 -40
  116. package/src/eco/eco.utils.js +5 -35
  117. package/src/eco/global-injector-map.d.ts +3 -3
  118. package/src/eco/global-injector-map.js +2 -2
  119. package/src/eco/lazy-injector-map.d.ts +2 -2
  120. package/src/errors/index.d.ts +1 -0
  121. package/src/errors/index.js +3 -1
  122. package/src/hmr/client/hmr-runtime.js +9 -1
  123. package/src/hmr/hmr-strategy.d.ts +16 -13
  124. package/src/hmr/hmr-strategy.js +22 -7
  125. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  126. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  127. package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
  128. package/src/hmr/strategies/js-hmr-strategy.js +5 -10
  129. package/src/index.browser.d.ts +2 -2
  130. package/src/index.browser.js +1 -1
  131. package/src/index.d.ts +3 -2
  132. package/src/index.js +15 -4
  133. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
  134. package/src/integrations/ghtml/ghtml-renderer.js +24 -29
  135. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  136. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  137. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  138. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  139. package/src/plugins/README.md +1 -0
  140. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  141. package/src/plugins/alias-resolver-cache.js +106 -0
  142. package/src/plugins/alias-resolver-plugin.d.ts +5 -1
  143. package/src/plugins/alias-resolver-plugin.js +19 -7
  144. package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
  145. package/src/plugins/eco-component-meta-plugin.js +43 -25
  146. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  147. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  148. package/src/plugins/integration-plugin.d.ts +136 -42
  149. package/src/plugins/integration-plugin.js +99 -31
  150. package/src/plugins/processor.d.ts +4 -2
  151. package/src/plugins/processor.js +8 -3
  152. package/src/plugins/source-transform.d.ts +46 -0
  153. package/src/plugins/source-transform.js +71 -0
  154. package/src/route-renderer/GRAPH.md +80 -318
  155. package/src/route-renderer/README.md +74 -78
  156. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  157. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  158. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  159. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  160. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  161. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  162. package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
  163. package/src/route-renderer/orchestration/integration-renderer.js +660 -258
  164. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  165. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  166. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  167. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  168. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  169. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  170. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  171. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  172. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  173. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  174. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  175. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  176. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  177. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  178. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  179. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  180. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  181. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  182. package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
  183. package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
  184. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  185. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  186. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  187. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  188. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  189. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  190. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  191. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  192. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  193. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  194. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  195. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  196. package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
  197. package/src/route-renderer/page-loading/page-module-loader.js +8 -5
  198. package/src/route-renderer/route-renderer.d.ts +31 -23
  199. package/src/route-renderer/route-renderer.js +17 -24
  200. package/src/router/README.md +76 -8
  201. package/src/router/client/navigation-coordinator.d.ts +20 -0
  202. package/src/router/client/navigation-coordinator.js +2 -2
  203. package/src/router/server/route-registry.d.ts +78 -0
  204. package/src/router/server/route-registry.js +262 -0
  205. package/src/services/README.md +1 -2
  206. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  207. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  208. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
  209. package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
  210. package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
  211. package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
  212. package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
  215. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  216. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  217. package/src/services/assets/asset-processing-service/index.d.ts +6 -5
  218. package/src/services/assets/asset-processing-service/index.js +6 -5
  219. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  220. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  221. package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
  222. package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
  223. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  229. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
  230. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
  231. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
  235. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  236. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
  237. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
  239. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  240. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  241. package/src/services/assets/browser-bundle.service.d.ts +44 -3
  242. package/src/services/assets/browser-bundle.service.js +15 -7
  243. package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
  244. package/src/services/html/html-rewriter-provider.service.js +4 -1
  245. package/src/services/html/html-transformer.service.d.ts +22 -3
  246. package/src/services/html/html-transformer.service.js +101 -35
  247. package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
  248. package/src/services/invalidation/development-invalidation.service.js +1 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/page-module-import.service.d.ts +32 -8
  258. package/src/services/module-loading/page-module-import.service.js +83 -22
  259. package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
  260. package/src/services/module-loading/server-module-transpiler.service.js +5 -2
  261. package/src/services/module-loading/source-module-support.d.ts +5 -0
  262. package/src/services/module-loading/source-module-support.js +8 -0
  263. package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
  264. package/src/services/runtime-state/dev-graph.service.js +10 -10
  265. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
  266. package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
  267. package/src/static-site-generator/static-site-generator.d.ts +23 -28
  268. package/src/static-site-generator/static-site-generator.js +119 -156
  269. package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
  270. package/src/types/internal-types.js +0 -0
  271. package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
  272. package/src/types/public-types.js +0 -0
  273. package/src/utils/html-escaping.d.ts +7 -0
  274. package/src/utils/html-escaping.js +6 -0
  275. package/src/utils/locals-utils.d.ts +1 -1
  276. package/src/utils/parse-cli-args.d.ts +4 -1
  277. package/src/utils/parse-cli-args.js +16 -1
  278. package/src/utils/resolve-work-dir.js +1 -1
  279. package/src/watchers/project-watcher.d.ts +4 -4
  280. package/src/watchers/project-watcher.js +35 -41
  281. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  282. package/src/watchers/project-watcher.test-helpers.js +5 -5
  283. package/CHANGELOG.md +0 -31
  284. package/src/adapters/abstract/application-adapter.ts +0 -337
  285. package/src/adapters/abstract/router-adapter.ts +0 -30
  286. package/src/adapters/abstract/server-adapter.ts +0 -79
  287. package/src/adapters/bun/client-bridge.ts +0 -62
  288. package/src/adapters/bun/create-app.ts +0 -189
  289. package/src/adapters/bun/hmr-manager.ts +0 -409
  290. package/src/adapters/bun/index.ts +0 -2
  291. package/src/adapters/bun/server-adapter.ts +0 -499
  292. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  293. package/src/adapters/bun/server-lifecycle.js +0 -92
  294. package/src/adapters/bun/server-lifecycle.ts +0 -124
  295. package/src/adapters/index.ts +0 -6
  296. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  297. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  298. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  299. package/src/adapters/node/create-app.ts +0 -179
  300. package/src/adapters/node/index.d.ts +0 -6
  301. package/src/adapters/node/index.js +0 -11
  302. package/src/adapters/node/index.ts +0 -16
  303. package/src/adapters/node/node-client-bridge.ts +0 -79
  304. package/src/adapters/node/node-hmr-manager.ts +0 -381
  305. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  306. package/src/adapters/node/runtime-adapter.js +0 -306
  307. package/src/adapters/node/runtime-adapter.ts +0 -439
  308. package/src/adapters/node/server-adapter.ts +0 -488
  309. package/src/adapters/node/static-content-server.ts +0 -239
  310. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  311. package/src/adapters/node/write-runtime-manifest.js +0 -12
  312. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/define-api-handler.ts +0 -66
  316. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  317. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  318. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  319. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  320. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  321. package/src/adapters/shared/hmr-html-response.ts +0 -52
  322. package/src/adapters/shared/render-context.ts +0 -120
  323. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  324. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  325. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  326. package/src/adapters/shared/server-adapter.ts +0 -489
  327. package/src/adapters/shared/server-route-handler.ts +0 -153
  328. package/src/adapters/shared/server-static-builder.ts +0 -166
  329. package/src/build/build-adapter.ts +0 -361
  330. package/src/build/build-manifest.ts +0 -54
  331. package/src/build/build-types.ts +0 -83
  332. package/src/build/dev-build-coordinator.d.ts +0 -74
  333. package/src/build/dev-build-coordinator.js +0 -161
  334. package/src/build/dev-build-coordinator.ts +0 -221
  335. package/src/build/esbuild-build-adapter.d.ts +0 -72
  336. package/src/build/esbuild-build-adapter.js +0 -422
  337. package/src/build/esbuild-build-adapter.ts +0 -559
  338. package/src/build/runtime-build-executor.ts +0 -34
  339. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  340. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  341. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  342. package/src/config/config-builder.ts +0 -706
  343. package/src/constants.ts +0 -54
  344. package/src/create-app.ts +0 -87
  345. package/src/dev/sc-server.ts +0 -143
  346. package/src/eco/component-render-context.d.ts +0 -105
  347. package/src/eco/component-render-context.js +0 -87
  348. package/src/eco/component-render-context.ts +0 -224
  349. package/src/eco/eco.ts +0 -242
  350. package/src/eco/eco.types.ts +0 -221
  351. package/src/eco/eco.utils.ts +0 -89
  352. package/src/eco/global-injector-map.ts +0 -112
  353. package/src/eco/lazy-injector-map.ts +0 -120
  354. package/src/eco/module-dependencies.ts +0 -75
  355. package/src/errors/http-error.ts +0 -72
  356. package/src/errors/index.ts +0 -2
  357. package/src/errors/locals-access-error.ts +0 -7
  358. package/src/global/app-logger.ts +0 -4
  359. package/src/hmr/client/hmr-runtime.ts +0 -152
  360. package/src/hmr/hmr-strategy.ts +0 -172
  361. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  362. package/src/hmr/hmr.test.e2e.ts +0 -66
  363. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  364. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  365. package/src/index.browser.ts +0 -3
  366. package/src/index.ts +0 -5
  367. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  368. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  369. package/src/internal-types.ts +0 -232
  370. package/src/plugins/alias-resolver-plugin.ts +0 -63
  371. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  372. package/src/plugins/integration-plugin.ts +0 -226
  373. package/src/plugins/processor.ts +0 -240
  374. package/src/plugins/runtime-capability.ts +0 -14
  375. package/src/public-types.ts +0 -1317
  376. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  377. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  378. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  379. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  380. package/src/route-renderer/component-graph/component-graph.js +0 -72
  381. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  382. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  383. package/src/route-renderer/component-graph/component-marker.js +0 -46
  384. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  385. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  386. package/src/route-renderer/component-graph/component-reference.js +0 -19
  387. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  388. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  389. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  390. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  391. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  392. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  393. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  394. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  395. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  396. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  397. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  398. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  399. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  400. package/src/route-renderer/route-renderer.ts +0 -115
  401. package/src/router/client/link-intent.test.browser.ts +0 -51
  402. package/src/router/client/link-intent.ts +0 -92
  403. package/src/router/client/navigation-coordinator.ts +0 -433
  404. package/src/router/server/fs-router-scanner.d.ts +0 -41
  405. package/src/router/server/fs-router-scanner.js +0 -156
  406. package/src/router/server/fs-router-scanner.ts +0 -219
  407. package/src/router/server/fs-router.d.ts +0 -26
  408. package/src/router/server/fs-router.js +0 -100
  409. package/src/router/server/fs-router.ts +0 -122
  410. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  411. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  412. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  413. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  414. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  415. package/src/services/assets/asset-processing-service/index.ts +0 -5
  416. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  417. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  418. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  419. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  420. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  421. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  422. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  423. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  424. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  425. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  426. package/src/services/assets/browser-bundle.service.ts +0 -53
  427. package/src/services/cache/cache.types.ts +0 -126
  428. package/src/services/cache/index.ts +0 -18
  429. package/src/services/cache/memory-cache-store.ts +0 -130
  430. package/src/services/cache/page-cache-service.ts +0 -202
  431. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  432. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  433. package/src/services/html/html-transformer.service.ts +0 -279
  434. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  435. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  436. package/src/services/module-loading/page-module-import.service.ts +0 -200
  437. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  438. package/src/services/module-loading/server-loader.service.js +0 -32
  439. package/src/services/module-loading/server-loader.service.ts +0 -130
  440. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  441. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  442. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  444. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  445. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  446. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  447. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  448. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  449. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  450. package/src/services/validation/schema-validation-service.ts +0 -204
  451. package/src/services/validation/standard-schema.types.ts +0 -68
  452. package/src/static-site-generator/static-site-generator.ts +0 -462
  453. package/src/utils/css.d.ts +0 -1
  454. package/src/utils/css.js +0 -7
  455. package/src/utils/css.ts +0 -5
  456. package/src/utils/deep-merge.ts +0 -47
  457. package/src/utils/hash.ts +0 -5
  458. package/src/utils/html.ts +0 -1
  459. package/src/utils/invariant.ts +0 -15
  460. package/src/utils/locals-utils.ts +0 -37
  461. package/src/utils/parse-cli-args.ts +0 -83
  462. package/src/utils/path-utils.module.ts +0 -14
  463. package/src/utils/resolve-work-dir.ts +0 -45
  464. package/src/utils/runtime.ts +0 -44
  465. package/src/utils/server-utils.module.ts +0 -67
  466. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  467. package/src/watchers/project-watcher.ts +0 -363
  468. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  469. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  470. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  471. /package/src/{constants.js → config/constants.js} +0 -0
@@ -6,117 +6,113 @@ This folder contains the core rendering orchestration for Ecopages.
6
6
 
7
7
  The route renderer layer is responsible for:
8
8
 
9
- - Selecting the correct integration renderer for a route.
10
- - Loading page modules and resolving static data/metadata.
11
- - Resolving and processing component dependencies.
12
- - Applying full orchestration.
13
- - Emitting final HTML body output plus metadata/cache strategy.
9
+ - selecting the correct integration renderer for a route
10
+ - loading page modules and resolving static data or metadata
11
+ - resolving component dependencies and page browser assets
12
+ - coordinating mixed-integration rendering
13
+ - emitting final HTML plus cache strategy
14
14
 
15
- ## Main Components
15
+ ## Core Concepts
16
16
 
17
- ### `route-renderer.ts`
18
-
19
- - `RouteRendererFactory` chooses integration renderers based on route file extension.
20
- - `RouteRenderer` delegates route execution to the selected integration renderer.
17
+ The architecture is organized around three distinct concepts:
21
18
 
22
- ### `orchestration/`
19
+ - `ownership`: preparation-time metadata that describes which integration owns each declared component edge
20
+ - `foreign child`: a component encountered during render whose owning integration differs from the current integration
21
+ - `foreign subtree`: the resolved HTML, assets, and root-attachment metadata returned by the owning renderer for that foreign child
23
22
 
24
- Framework-owned orchestration services and renderer base class:
23
+ These concepts intentionally live in different places:
25
24
 
26
- - `integration-renderer.ts`: abstract base class that coordinates end-to-end route rendering.
27
- - `render-preparation.service.ts`: page module/data/dependency preparation before render.
28
- - `render-execution.service.ts`: render capture, marker-graph resolution, and finalization.
25
+ - `ownership-planning.service.ts` builds `ownershipPlan`
26
+ - `ownership-validation.service.ts` validates declared foreign ownership up front
27
+ - `component-render-context.ts` intercepts foreign children during active component render
28
+ - `queued-foreign-subtree-resolution.service.ts` resolves queued foreign subtrees for renderers that cannot hand them off inline
29
+ - `integration-renderer.ts` owns renderer-to-renderer delegation and shared shell composition
30
+ - `route-render-flow.ts` owns route preparation, final response capture, and unresolved artifact enforcement
29
31
 
30
- It also provides:
32
+ ## Main Files
31
33
 
32
- - `renderToResponse()` contract for explicit-route rendering.
33
- - `renderComponent()` contract for component-level orchestration and artifact reporting.
34
- - marker graph resolution for nested cross-integration component boundaries.
34
+ ### `route-renderer.ts`
35
35
 
36
- ### `component-graph/`
36
+ - `RouteRendererFactory` chooses integration renderers from route files
37
+ - `RouteRenderer` delegates execution to the selected renderer
37
38
 
38
- Component marker contracts and graph resolution:
39
+ ### `orchestration/`
39
40
 
40
- - `createComponentMarker()` for canonical `<eco-marker ...></eco-marker>` generation.
41
- - `parseComponentMarkers()` for marker extraction from rendered HTML.
42
- - node collection by marker id.
43
- - parent/child edges from slot reference registry.
44
- - topological levels for bottom-up execution.
41
+ - `route-render-flow.ts`: one route render from page-module loading through final HTML output
42
+ - `integration-renderer.ts`: abstract base class for route rendering, explicit view rendering, and foreign-child delegation
43
+ - `ownership-planning.service.ts`: declared ownership graph construction
44
+ - `ownership-validation.service.ts`: up-front ownership validation for route roots and declared descendants
45
+ - `component-render-context.ts`: active render context used by `eco.component()` to intercept foreign children
46
+ - `queued-foreign-subtree-resolution.service.ts`: queue resolution for renderers that need token-based foreign-subtree handoff
47
+ - `render-output.utils.ts`: unresolved artifact normalization and marker inspection
45
48
 
46
49
  ### `page-loading/`
47
50
 
48
- Service for loading page modules and deriving page data:
51
+ - `page-module-loader.ts`: imports page modules and normalizes page exports
52
+ - `dependency-resolver.ts`: resolves component dependencies and browser-facing assets
53
+
54
+ ## Render Flow
49
55
 
50
- - `importPageFile()` runtime-aware loading.
51
- - `resolvePageModule()` normalizes exports and statics.
52
- - `resolvePageData()` resolves static props then metadata.
56
+ The route-render contract is:
53
57
 
54
- Builds processed assets from component dependency declarations:
58
+ 1. `RouteRendererFactory` selects the owning integration renderer.
59
+ 2. `IntegrationRenderer.execute()` delegates preparation and finalization to `RouteRenderFlow`.
60
+ 3. `RouteRenderFlow.prepareRenderOptions()` loads the page module, validates ownership, builds `ownershipPlan`, resolves page data, resolves dependencies, and builds the page browser graph.
61
+ 4. The integration renderer performs page, layout, and document-shell rendering. When it encounters a foreign child, it delegates that child back to the owning renderer.
62
+ 5. If a renderer needs queued handoff, it emits internal foreign-subtree tokens and resolves them before returning final HTML.
63
+ 6. `RouteRenderFlow.execute()` captures the final body, rejects unresolved `<eco-marker>` artifacts, stamps root or document attributes when needed, and runs the HTML transformer.
55
64
 
56
- - Scripts/styles/components/modules.
57
- - Lazy dependency grouping and trigger derivation.
58
- - Default global injector behavior with optional legacy scripts-injector compatibility.
65
+ Important:
59
66
 
60
- ## Rendering Behavior
67
+ - route-level fallback resolution is gone; unresolved artifacts are now a hard failure
68
+ - ownership is declared from component metadata, not inferred from final HTML
69
+ - same-integration children stay renderer-local and do not need to pass through a universal transport
61
70
 
62
- Default behavior:
71
+ ## Declared Foreign Child Contract
63
72
 
64
- - marker-graph component orchestration + component render artifacts.
65
- - global lazy trigger map + global injector bootstrap.
73
+ Mixed-integration component configs must declare every possible foreign child in `config.dependencies.components`.
66
74
 
67
- Global injector lifecycle notes:
75
+ That declaration is used for two things:
68
76
 
69
- - The bootstrap remains active across client-side navigations.
70
- - On `eco:after-swap`, it prunes stale `ecopages/global-injector-map` scripts and calls `refresh()` so newly swapped `data-eco-trigger` elements can bind their lazy rules.
71
- - It must not call injector `cleanup()` on every swap, because that permanently disables future refresh work for the current runtime instance.
77
+ - `OwnershipValidationService` surfaces missing metadata or unknown integrations before render execution
78
+ - `OwnershipPlanningService` records the expected ownership shape in `ownershipPlan`
72
79
 
73
- ## Current Component Artifact Contract
80
+ At runtime, renderers still discover actual foreign children through the active component render context.
74
81
 
75
- Integration `renderComponent()` returns `ComponentRenderResult` with:
82
+ ## Foreign Subtree Contract
83
+
84
+ `renderForeignSubtree()` is the compatibility contract for renderer-to-renderer handoff. It returns:
76
85
 
77
86
  - `html`
78
- - `canAttachAttributes`
87
+ - `assets`
79
88
  - `rootTag`
80
- - `integrationName`
81
89
  - optional `rootAttributes`
82
- - optional `assets`
83
-
84
- Current base orchestration behavior:
85
-
86
- - Calls `renderComponent()` for the page root component.
87
- - Merges returned `assets` into processed dependencies.
88
- - Applies returned `rootAttributes` to the first element under `<body>`.
90
+ - `attachmentPolicy`
91
+ - `integrationName`
89
92
 
90
- When rendered output contains `eco-marker` nodes:
93
+ `renderComponentWithForeignChildren()` is the higher-level renderer entrypoint. It is responsible for:
91
94
 
92
- - builds marker graph using `componentGraphContext` (`propsByRef`, `slotChildrenByRef`) from integration-specific page module exports.
93
- - resolves markers bottom-up through integration-specific `renderComponent()` calls.
94
- - fails fast when marker component refs or props refs are missing.
95
- - merges marker-rendered assets back into the dependency pipeline with deduplication.
95
+ - reusing the execution-scoped owning-renderer cache
96
+ - deciding whether the current component can stay local
97
+ - creating a foreign-child runtime when nested foreign ownership must be resolved
98
+ - normalizing unresolved artifact HTML before the render leaves the renderer
96
99
 
97
- This enables island-style hydration assets (for example React/Lit/Kita integration outputs) to be emitted through the normal dependency injection pipeline.
100
+ ## Queue Model
98
101
 
99
- ## React Island Boundary Notes
102
+ Not every integration needs queue-based handoff.
100
103
 
101
- - React component-level islands are emitted without synthetic wrapper elements.
102
- - The React integration attaches `data-eco-component-id` on the component's own SSR root element when a single root is available.
103
- - Island client bootstrap mounts with `createRoot()` into that root boundary.
104
- - The emitted hydration bootstrap also listens for `eco:after-swap` so islands hydrate correctly when their SSR markup appears after client-side navigation.
105
- - React hydration bootstraps are emitted with `data-eco-rerun` and stable `data-eco-script-id` metadata so head-script reconciliation can safely re-execute them when needed.
106
- - This keeps authored DOM shape stable for global layout/style selectors while preserving per-island runtime isolation.
104
+ - If a renderer can resolve a foreign child inline, it returns resolved output immediately.
105
+ - If it cannot, it may emit internal foreign-subtree tokens and resolve them before returning final HTML.
106
+ - The queue service is only for renderer-owned transport inside one render pass. It is not a general route-level fallback mechanism.
107
107
 
108
- ## Output Pipeline (High-Level)
108
+ ## React Island Notes
109
109
 
110
- 1. Factory selects integration renderer.
111
- 2. Integration renderer prepares render options.
112
- 3. Dependencies are resolved and processed.
113
- 4. Orchestration assets/artifacts are merged.
114
- 5. Integration renderer generates HTML body.
115
- 6. HTML transformer injects head/body dependencies.
116
- 7. Route result returns body + metadata + cache strategy.
110
+ - React islands are emitted without synthetic wrapper elements.
111
+ - The React integration attaches `data-eco-component-id` to the SSR root when a single root exists.
112
+ - The island bootstrap mounts with `createRoot()` into that SSR root.
113
+ - Hydration bootstraps listen for `eco:after-swap` so islands hydrate after client-side navigation.
117
114
 
118
- ## Notes for Future Work
115
+ ## Current Limits
119
116
 
120
- - Expand integration-side marker emission so more nested trees are resolved through graph mode by default.
121
- - Add broader fixtures/e2e for deep multi-level slot graphs.
122
- - Add optional batching by integration per graph level to reduce repeated renderer invocations.
117
+ - `ownershipPlan` is still diagnostic and preparatory metadata; it does not yet drive a full route-composer execution model.
118
+ - Different integrations still own different foreign-child runtime strategies, which is intentional where child transport or hydration behavior differs.
@@ -0,0 +1,97 @@
1
+ import type { EcoComponent } from '../../types/public-types.js';
2
+ /**
3
+ * Result returned by a renderer-owned foreign-child runtime.
4
+ *
5
+ * `inline` keeps rendering inside the current integration. `resolved` returns a
6
+ * renderer-owned value immediately, which can be final HTML or a renderer-local
7
+ * transport token for later queue resolution.
8
+ */
9
+ export type ForeignChildInterceptionResult = {
10
+ kind: 'inline';
11
+ props?: Record<string, unknown>;
12
+ } | {
13
+ kind: 'resolved';
14
+ value: unknown;
15
+ };
16
+ export type ForeignChildRenderInterception = {
17
+ kind: 'inline';
18
+ props?: Record<string, unknown>;
19
+ } | {
20
+ kind: 'resolved';
21
+ value: unknown;
22
+ } | undefined;
23
+ /**
24
+ * Foreign-child metadata passed into the active renderer-owned runtime.
25
+ */
26
+ export type ForeignChildInterceptionInput = {
27
+ currentIntegration: string;
28
+ targetIntegration?: string;
29
+ component: EcoComponent;
30
+ props: Record<string, unknown>;
31
+ };
32
+ /**
33
+ * Narrow renderer-owned foreign-child runtime injected into one active render
34
+ * context.
35
+ *
36
+ * Integrations implement this contract when foreign children must be handed
37
+ * off inside the renderer instead of being left for route-level reconciliation.
38
+ */
39
+ export interface ForeignChildRuntime {
40
+ /**
41
+ * Intercepts one foreign child during an active render.
42
+ *
43
+ * This runtime is typically installed by the Foreign Subtree execution module,
44
+ * which decides whether the child stays inline or leaves the current renderer.
45
+ */
46
+ interceptForeignChild?(input: ForeignChildInterceptionInput): ForeignChildInterceptionResult | Promise<ForeignChildInterceptionResult>;
47
+ interceptForeignChildSync?(input: ForeignChildInterceptionInput): ForeignChildInterceptionResult;
48
+ }
49
+ type ForeignChildRenderInput = {
50
+ component: EcoComponent;
51
+ props: Record<string, unknown>;
52
+ targetIntegration?: string;
53
+ };
54
+ /**
55
+ * Per-render mutable state used while applying foreign-child interception and lazy
56
+ * output wrapping.
57
+ */
58
+ export type ComponentRenderContext = {
59
+ currentIntegration: string;
60
+ foreignChildRuntime?: ForeignChildRuntime;
61
+ interceptForeignChild(input: ForeignChildRenderInput): Promise<ForeignChildRenderInterception> | ForeignChildRenderInterception;
62
+ finalizeComponentRender<T>(component: EcoComponent, content: T): T;
63
+ };
64
+ /**
65
+ * Returns the current component render context, if one is active.
66
+ *
67
+ * @returns Active render context or `undefined` outside render execution.
68
+ */
69
+ export declare function getComponentRenderContext(): ComponentRenderContext | undefined;
70
+ /**
71
+ * Runs foreign-child interception for one component render step.
72
+ *
73
+ * The active runtime may resolve the foreign child immediately or keep it inline.
74
+ */
75
+ export declare function interceptForeignChild(input: ForeignChildRenderInput): Promise<ForeignChildRenderInterception> | ForeignChildRenderInterception;
76
+ /**
77
+ * Applies lazy trigger or injector wrapping to completed component output.
78
+ *
79
+ * This helper works both inside render-context execution and in fallback flows
80
+ * where no active context exists.
81
+ */
82
+ export declare function finalizeComponentRender<T>(component: EcoComponent, content: T): T;
83
+ /**
84
+ * Runs render work under a fresh component render context and returns the
85
+ * resulting value.
86
+ *
87
+ * @param input Execution metadata for current integration and foreign-child policy.
88
+ * @param render Async render function to execute inside the context.
89
+ * @returns Render result value.
90
+ */
91
+ export declare function runWithComponentRenderContext<T>(input: {
92
+ currentIntegration: string;
93
+ foreignChildRuntime?: ForeignChildRuntime;
94
+ }, render: () => Promise<T>): Promise<{
95
+ value: T;
96
+ }>;
97
+ export {};
@@ -0,0 +1,147 @@
1
+ import { addTriggerAttribute, isThenable, wrapWithScriptsInjector } from "./render-output.utils.js";
2
+ class ComponentRenderOutputRuntime {
3
+ finalizeComponentRender(component, content) {
4
+ const lazyTriggers = component.config?._resolvedLazyTriggers;
5
+ if (lazyTriggers && lazyTriggers.length > 0) {
6
+ return this.addTriggerToContent(content, lazyTriggers[0].triggerId);
7
+ }
8
+ const lazyGroups = component.config?._resolvedLazyScripts;
9
+ if (lazyGroups && lazyGroups.length > 0) {
10
+ return this.wrapContentWithScriptsInjector(content, lazyGroups);
11
+ }
12
+ return content;
13
+ }
14
+ addTriggerToContent(content, triggerId) {
15
+ if (isThenable(content)) {
16
+ return content.then((resolvedContent) => addTriggerAttribute(resolvedContent, triggerId));
17
+ }
18
+ return addTriggerAttribute(content, triggerId);
19
+ }
20
+ wrapContentWithScriptsInjector(content, lazyGroups) {
21
+ if (isThenable(content)) {
22
+ return content.then((resolvedContent) => wrapWithScriptsInjector(resolvedContent, lazyGroups));
23
+ }
24
+ return wrapWithScriptsInjector(content, lazyGroups);
25
+ }
26
+ }
27
+ class ContextualComponentRenderRuntime extends ComponentRenderOutputRuntime {
28
+ context;
29
+ constructor(context) {
30
+ super();
31
+ this.context = context;
32
+ }
33
+ applyForeignChildInterceptionResult(result) {
34
+ if (result.kind === "resolved") {
35
+ return result;
36
+ }
37
+ return result.props ? result : void 0;
38
+ }
39
+ /**
40
+ * Resolves one foreign-child interception through the active runtime.
41
+ *
42
+ * The runtime may choose inline rendering or immediate resolved output.
43
+ */
44
+ interceptForeignChild(input) {
45
+ const foreignChildRuntimeInput = {
46
+ currentIntegration: this.context.currentIntegration,
47
+ targetIntegration: input.targetIntegration,
48
+ component: input.component,
49
+ props: input.props
50
+ };
51
+ const asyncInterception = this.context.foreignChildRuntime?.interceptForeignChild?.(foreignChildRuntimeInput);
52
+ if (asyncInterception !== void 0) {
53
+ if (isThenable(asyncInterception)) {
54
+ return asyncInterception.then((result) => this.applyForeignChildInterceptionResult(result));
55
+ }
56
+ return this.applyForeignChildInterceptionResult(asyncInterception);
57
+ }
58
+ const syncInterception = this.context.foreignChildRuntime?.interceptForeignChildSync?.(foreignChildRuntimeInput);
59
+ if (syncInterception === void 0) {
60
+ return void 0;
61
+ }
62
+ return this.applyForeignChildInterceptionResult(syncInterception);
63
+ }
64
+ }
65
+ const GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY = "__ECOPAGES_COMPONENT_RENDER_CONTEXT_STATE__";
66
+ function getSharedContextScope() {
67
+ const globalProcess = globalThis.process;
68
+ if (globalProcess && typeof globalProcess === "object") {
69
+ return globalProcess;
70
+ }
71
+ return globalThis;
72
+ }
73
+ function getComponentRenderContextState() {
74
+ const sharedScope = getSharedContextScope();
75
+ sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY] ??= {
76
+ contextStack: [],
77
+ nodeContextStorage: null,
78
+ nodeContextStorageLoader: null
79
+ };
80
+ return sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY];
81
+ }
82
+ async function getContextStorage() {
83
+ const state = getComponentRenderContextState();
84
+ if (state.nodeContextStorage) {
85
+ return state.nodeContextStorage;
86
+ }
87
+ if (state.nodeContextStorageLoader) {
88
+ return state.nodeContextStorageLoader;
89
+ }
90
+ state.nodeContextStorageLoader = import("node:async_hooks").then((module) => {
91
+ const storage = new module.AsyncLocalStorage();
92
+ state.nodeContextStorage = {
93
+ getStore: () => storage.getStore(),
94
+ run: (store, callback) => storage.run(store, callback)
95
+ };
96
+ return state.nodeContextStorage;
97
+ }).catch(() => {
98
+ state.nodeContextStorage = null;
99
+ return null;
100
+ }).finally(() => {
101
+ state.nodeContextStorageLoader = null;
102
+ });
103
+ return state.nodeContextStorageLoader;
104
+ }
105
+ function getComponentRenderContext() {
106
+ const state = getComponentRenderContextState();
107
+ return state.nodeContextStorage?.getStore() ?? state.contextStack[state.contextStack.length - 1];
108
+ }
109
+ const componentRenderOutputRuntime = new ComponentRenderOutputRuntime();
110
+ function interceptForeignChild(input) {
111
+ return getComponentRenderContext()?.interceptForeignChild(input);
112
+ }
113
+ function finalizeComponentRender(component, content) {
114
+ const renderContext = getComponentRenderContext();
115
+ return renderContext?.finalizeComponentRender(component, content) ?? componentRenderOutputRuntime.finalizeComponentRender(component, content);
116
+ }
117
+ async function runWithComponentRenderContext(input, render) {
118
+ const context = {
119
+ currentIntegration: input.currentIntegration,
120
+ foreignChildRuntime: input.foreignChildRuntime
121
+ };
122
+ const runtime = new ContextualComponentRenderRuntime(context);
123
+ context.interceptForeignChild = (deferredInput) => runtime.interceptForeignChild(deferredInput);
124
+ context.finalizeComponentRender = (component, content) => runtime.finalizeComponentRender(component, content);
125
+ const storage = await getContextStorage();
126
+ let value;
127
+ if (storage) {
128
+ value = await storage.run(context, render);
129
+ } else {
130
+ const state = getComponentRenderContextState();
131
+ state.contextStack.push(context);
132
+ try {
133
+ value = await render();
134
+ } finally {
135
+ state.contextStack.pop();
136
+ }
137
+ }
138
+ return {
139
+ value
140
+ };
141
+ }
142
+ export {
143
+ finalizeComponentRender,
144
+ getComponentRenderContext,
145
+ interceptForeignChild,
146
+ runWithComponentRenderContext
147
+ };
@@ -0,0 +1,18 @@
1
+ import type { EcoComponent, OwnershipPlanNodeSource } from '../../types/public-types.js';
2
+ export type DeclaredOwnershipRoot = {
3
+ component: EcoComponent;
4
+ source: Extract<OwnershipPlanNodeSource, 'page' | 'layout' | 'html-template'>;
5
+ };
6
+ export type DeclaredOwnershipNodeInput = {
7
+ component: EcoComponent;
8
+ source: Exclude<OwnershipPlanNodeSource, 'route'>;
9
+ parentIntegrationName: string;
10
+ integrationName: string;
11
+ componentId: string;
12
+ isForeignToParent: boolean;
13
+ };
14
+ export declare function mapDeclaredOwnershipGraph<T>(input: {
15
+ roots: DeclaredOwnershipRoot[];
16
+ currentIntegrationName: string;
17
+ mapNode: (node: DeclaredOwnershipNodeInput, children: T[]) => T;
18
+ }): T[];
@@ -0,0 +1,34 @@
1
+ function mapDeclaredOwnershipGraph(input) {
2
+ let nextSyntheticId = 0;
3
+ const mapComponent = (component, source, parentIntegrationName, lineage) => {
4
+ const integrationName = component.config?.integration ?? component.config?.__eco?.integration ?? parentIntegrationName;
5
+ const componentMeta = component.config?.__eco;
6
+ const isForeignToParent = integrationName !== parentIntegrationName;
7
+ const componentId = componentMeta?.id ?? componentMeta?.file ?? `${source}:${nextSyntheticId += 1}`;
8
+ const nextLineage = new Set(lineage);
9
+ nextLineage.add(component);
10
+ const children = (component.config?.dependencies?.components ?? []).flatMap((child) => {
11
+ if (!child || nextLineage.has(child)) {
12
+ return [];
13
+ }
14
+ return [mapComponent(child, "dependency", integrationName, nextLineage)];
15
+ });
16
+ return input.mapNode(
17
+ {
18
+ component,
19
+ source,
20
+ parentIntegrationName,
21
+ integrationName,
22
+ componentId,
23
+ isForeignToParent
24
+ },
25
+ children
26
+ );
27
+ };
28
+ return input.roots.map(
29
+ ({ component, source }) => mapComponent(component, source, input.currentIntegrationName, /* @__PURE__ */ new Set())
30
+ );
31
+ }
32
+ export {
33
+ mapDeclaredOwnershipGraph
34
+ };
@@ -0,0 +1,110 @@
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
+ import { type ForeignChildRuntime } from './component-render-context.js';
4
+ import { QueuedForeignSubtreeResolutionService, type QueuedForeignSubtreeResolution, type QueuedForeignSubtreeResolutionContext } from './queued-foreign-subtree-resolution.service.js';
5
+ export interface ForeignSubtreeExecutionOwningRenderer {
6
+ readonly name: string;
7
+ renderComponentWithForeignChildren(input: ComponentRenderInput): Promise<ComponentRenderResult>;
8
+ renderForeignSubtree(input: ComponentRenderInput): Promise<ForeignSubtreeRenderPayload>;
9
+ }
10
+ export interface ForeignSubtreeExecutionDecisionInput {
11
+ currentIntegration: string;
12
+ targetIntegration?: string;
13
+ }
14
+ export interface ForeignSubtreeExecutionRenderOptions {
15
+ currentIntegrationName: string;
16
+ input: ComponentRenderInput;
17
+ renderComponent(input: ComponentRenderInput): Promise<ComponentRenderResult>;
18
+ normalizeComponentRenderOutput(result: ComponentRenderResult): ComponentRenderResult;
19
+ hasForeignChildDescendants(component: EcoComponent): boolean;
20
+ createForeignChildRuntime(options: {
21
+ renderInput: ComponentRenderInput;
22
+ rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>;
23
+ }): ForeignChildRuntime;
24
+ getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer;
25
+ }
26
+ export interface ForeignSubtreeQueuedRuntimeOptions<TContext extends QueuedForeignSubtreeResolutionContext> {
27
+ renderInput: ComponentRenderInput;
28
+ rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>;
29
+ runtimeContextKey: string;
30
+ tokenPrefix: string;
31
+ createRuntimeContext?: (integrationContext: BaseIntegrationContext & Record<string, unknown>, rendererCache: Map<string, unknown>) => TContext;
32
+ }
33
+ export interface ForeignSubtreeStringQueuedHtmlOptions {
34
+ currentIntegrationName: string;
35
+ renderInput: ComponentRenderInput;
36
+ html: string;
37
+ runtimeContextKey: string;
38
+ queueLabel: string;
39
+ getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer;
40
+ applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
41
+ dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
42
+ }
43
+ export interface ForeignSubtreeQueuedHtmlOptions<TContext extends QueuedForeignSubtreeResolutionContext> {
44
+ currentIntegrationName: string;
45
+ html: string;
46
+ runtimeContext?: TContext;
47
+ queueLabel: string;
48
+ renderQueuedChildren(children: unknown, runtimeContext: TContext, queuedResolutionsByToken: Map<string, QueuedForeignSubtreeResolution>, resolveToken: (token: string) => Promise<string>): Promise<{
49
+ assets: ProcessedAsset[];
50
+ children?: unknown;
51
+ html?: string;
52
+ }>;
53
+ getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer;
54
+ applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
55
+ dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
56
+ }
57
+ /**
58
+ * Executes one component render tree under Foreign Child support.
59
+ *
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.
64
+ */
65
+ export declare class ForeignSubtreeExecutionService {
66
+ private readonly queuedForeignSubtreeResolutionService;
67
+ constructor(queuedForeignSubtreeResolutionService?: QueuedForeignSubtreeResolutionService);
68
+ private requiresForeignChildRuntime;
69
+ /**
70
+ * Returns whether the current render pass must hand the child off to a foreign owner.
71
+ */
72
+ 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
+ createFailFastRuntime(rendererName: string): ForeignChildRuntime;
80
+ getQueuedRuntimeContext<TContext extends QueuedForeignSubtreeResolutionContext>(input: ComponentRenderInput, runtimeContextKey: string): TContext | undefined;
81
+ 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
+ */
85
+ resolveStringQueuedHtml<TContext extends QueuedForeignSubtreeResolutionContext>(options: ForeignSubtreeStringQueuedHtmlOptions): Promise<{
86
+ assets: ProcessedAsset[];
87
+ html: string;
88
+ }>;
89
+ resolveQueuedHtml<TContext extends QueuedForeignSubtreeResolutionContext>(options: ForeignSubtreeQueuedHtmlOptions<TContext>): Promise<{
90
+ assets: ProcessedAsset[];
91
+ html: string;
92
+ }>;
93
+ /**
94
+ * Executes one component render with Foreign Child support under the current integration.
95
+ */
96
+ executeComponentRender(options: ForeignSubtreeExecutionRenderOptions): Promise<ComponentRenderResult>;
97
+ private getRendererCache;
98
+ 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
+ private getForeignOwnerIntegrationName;
106
+ private resolveForeignChildInOwningRenderer;
107
+ private resolveForeignSubtreeInOwningRenderer;
108
+ private runInForeignOwningRenderer;
109
+ resolveQueuedTokens(html: string, queuedResolutionsByToken: Map<string, QueuedForeignSubtreeResolution>, resolveToken: (token: string) => Promise<string>): Promise<string>;
110
+ }