@ecopages/core 0.2.0-alpha.8 → 0.2.1

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 (357) hide show
  1. package/CHANGELOG.md +18 -11
  2. package/README.md +23 -26
  3. package/package.json +76 -58
  4. package/src/adapters/README.md +2 -2
  5. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  6. package/src/adapters/abstract/application-adapter.js +14 -2
  7. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  8. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  9. package/src/adapters/bun/client-bridge.d.ts +1 -1
  10. package/src/adapters/bun/create-app.d.ts +4 -12
  11. package/src/adapters/bun/create-app.js +4 -5
  12. package/src/adapters/bun/hmr-manager.d.ts +4 -4
  13. package/src/adapters/bun/hmr-manager.js +8 -8
  14. package/src/adapters/bun/index.d.ts +1 -1
  15. package/src/adapters/bun/index.js +2 -2
  16. package/src/adapters/bun/server-adapter.d.ts +5 -5
  17. package/src/adapters/bun/server-adapter.js +6 -5
  18. package/src/adapters/bun/server-lifecycle.d.ts +4 -4
  19. package/src/adapters/bun/server-lifecycle.js +2 -2
  20. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  21. package/src/{create-app.js → adapters/create-app.js} +4 -4
  22. package/src/adapters/index.d.ts +1 -5
  23. package/src/adapters/index.js +1 -7
  24. package/src/adapters/node/create-app.d.ts +6 -9
  25. package/src/adapters/node/create-app.js +12 -6
  26. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  27. package/src/adapters/node/node-hmr-manager.d.ts +2 -2
  28. package/src/adapters/node/node-hmr-manager.js +3 -3
  29. package/src/adapters/node/server-adapter.d.ts +4 -4
  30. package/src/adapters/node/server-adapter.js +13 -12
  31. package/src/adapters/node/static-content-server.d.ts +1 -1
  32. package/src/adapters/node/static-content-server.js +1 -1
  33. package/src/adapters/shared/application-adapter.d.ts +1 -1
  34. package/src/adapters/shared/define-api-handler.d.ts +1 -1
  35. package/src/adapters/shared/explicit-static-route-matcher.d.ts +2 -2
  36. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +1 -1
  37. package/src/adapters/shared/fs-server-response-factory.d.ts +2 -2
  38. package/src/adapters/shared/fs-server-response-factory.js +1 -1
  39. package/src/adapters/shared/fs-server-response-matcher.d.ts +1 -1
  40. package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
  41. package/src/adapters/shared/hmr-html-response.d.ts +1 -1
  42. package/src/adapters/shared/render-context.d.ts +2 -1
  43. package/src/adapters/shared/render-context.js +3 -1
  44. package/src/adapters/shared/runtime-bootstrap.d.ts +1 -1
  45. package/src/adapters/shared/runtime-bootstrap.js +1 -1
  46. package/src/adapters/shared/server-adapter.d.ts +1 -1
  47. package/src/adapters/shared/server-adapter.js +5 -1
  48. package/src/adapters/shared/server-route-handler.d.ts +4 -4
  49. package/src/adapters/shared/server-route-handler.js +3 -3
  50. package/src/adapters/shared/server-static-builder.d.ts +5 -5
  51. package/src/adapters/shared/server-static-builder.js +5 -4
  52. package/src/build/README.md +19 -13
  53. package/src/build/build-adapter.d.ts +67 -20
  54. package/src/build/build-adapter.js +420 -19
  55. package/src/build/dev-build-coordinator.d.ts +10 -12
  56. package/src/build/dev-build-coordinator.js +8 -15
  57. package/src/build/esbuild-build-adapter.d.ts +6 -0
  58. package/src/build/esbuild-build-adapter.js +94 -11
  59. package/src/build/runtime-build-executor.d.ts +5 -4
  60. package/src/build/runtime-build-executor.js +5 -3
  61. package/src/build/runtime-specifier-alias-plugin.js +19 -15
  62. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  63. package/src/build/runtime-specifier-aliases.js +95 -0
  64. package/src/config/README.md +5 -2
  65. package/src/config/config-builder.d.ts +25 -2
  66. package/src/config/config-builder.js +44 -7
  67. package/src/declarations.d.ts +1 -1
  68. package/src/dev/sc-server.d.ts +1 -1
  69. package/src/dev/sc-server.js +1 -1
  70. package/src/eco/eco.browser.d.ts +2 -0
  71. package/src/eco/eco.browser.js +83 -0
  72. package/src/eco/eco.js +19 -48
  73. package/src/eco/eco.types.d.ts +1 -1
  74. package/src/eco/eco.utils.d.ts +1 -40
  75. package/src/eco/eco.utils.js +5 -35
  76. package/src/eco/global-injector-map.d.ts +1 -1
  77. package/src/eco/lazy-injector-map.d.ts +1 -1
  78. package/src/hmr/hmr-strategy.d.ts +16 -13
  79. package/src/hmr/hmr-strategy.js +22 -7
  80. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  81. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  82. package/src/hmr/strategies/js-hmr-strategy.d.ts +2 -2
  83. package/src/hmr/strategies/js-hmr-strategy.js +2 -2
  84. package/src/index.browser.d.ts +2 -2
  85. package/src/index.browser.js +1 -1
  86. package/src/index.d.ts +3 -2
  87. package/src/index.js +15 -4
  88. package/src/integrations/ghtml/ghtml-renderer.d.ts +6 -1
  89. package/src/integrations/ghtml/ghtml-renderer.js +29 -28
  90. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -2
  91. package/src/integrations/ghtml/ghtml.plugin.js +2 -2
  92. package/src/plugins/README.md +1 -0
  93. package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
  94. package/src/plugins/eco-component-meta-plugin.js +26 -20
  95. package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
  96. package/src/plugins/foreign-jsx-override-plugin.js +35 -0
  97. package/src/plugins/integration-plugin.d.ts +99 -33
  98. package/src/plugins/integration-plugin.js +68 -21
  99. package/src/plugins/processor.d.ts +2 -2
  100. package/src/plugins/processor.js +2 -2
  101. package/src/plugins/source-transform.d.ts +46 -0
  102. package/src/plugins/source-transform.js +71 -0
  103. package/src/route-renderer/GRAPH.md +54 -84
  104. package/src/route-renderer/README.md +14 -20
  105. package/src/route-renderer/orchestration/component-render-context.d.ts +83 -0
  106. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  107. package/src/route-renderer/orchestration/integration-renderer.d.ts +233 -76
  108. package/src/route-renderer/orchestration/integration-renderer.js +500 -143
  109. package/src/route-renderer/orchestration/queued-boundary-runtime.service.d.ts +93 -0
  110. package/src/route-renderer/orchestration/queued-boundary-runtime.service.js +155 -0
  111. package/src/route-renderer/orchestration/render-execution.service.d.ts +11 -71
  112. package/src/route-renderer/orchestration/render-execution.service.js +65 -80
  113. package/src/{eco/eco.utils.ts → route-renderer/orchestration/render-output.utils.d.ts} +10 -53
  114. package/src/route-renderer/orchestration/render-output.utils.js +65 -0
  115. package/src/route-renderer/orchestration/render-preparation.service.d.ts +2 -8
  116. package/src/route-renderer/orchestration/render-preparation.service.js +10 -17
  117. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  118. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  119. package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
  120. package/src/route-renderer/page-loading/dependency-resolver.js +10 -8
  121. package/src/route-renderer/page-loading/page-module-loader.d.ts +6 -4
  122. package/src/route-renderer/page-loading/page-module-loader.js +7 -5
  123. package/src/route-renderer/route-renderer.d.ts +5 -3
  124. package/src/route-renderer/route-renderer.js +13 -3
  125. package/src/router/README.md +79 -8
  126. package/src/router/client/navigation-coordinator.js +2 -2
  127. package/src/router/server/fs-router-scanner.d.ts +1 -1
  128. package/src/router/server/fs-router-scanner.js +6 -1
  129. package/src/router/server/fs-router.d.ts +1 -1
  130. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -3
  131. package/src/services/assets/asset-processing-service/asset-processing.service.js +6 -6
  132. package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
  133. package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
  134. package/src/services/assets/asset-processing-service/index.d.ts +5 -5
  135. package/src/services/assets/asset-processing-service/index.js +5 -5
  136. package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
  137. package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
  138. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
  139. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +1 -1
  140. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +3 -3
  141. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +2 -2
  142. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
  143. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  144. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +2 -2
  145. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +1 -1
  146. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
  147. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +15 -3
  148. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +3 -3
  149. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +1 -1
  150. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +2 -2
  151. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +1 -1
  152. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  153. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +1 -1
  154. package/src/services/assets/browser-bundle.service.d.ts +1 -1
  155. package/src/services/assets/browser-bundle.service.js +2 -2
  156. package/src/services/html/html-rewriter-provider.service.js +4 -1
  157. package/src/services/html/html-transformer.service.d.ts +2 -2
  158. package/src/services/html/html-transformer.service.js +4 -10
  159. package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
  160. package/src/services/invalidation/development-invalidation.service.js +1 -0
  161. package/src/services/module-loading/app-module-loader.service.d.ts +25 -0
  162. package/src/services/module-loading/app-module-loader.service.js +31 -0
  163. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
  164. package/src/services/module-loading/app-server-module-transpiler.service.js +77 -2
  165. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  166. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  167. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  168. package/src/{adapters/node/bootstrap-dependency-resolver.d.ts → services/module-loading/node-bootstrap-plugin.d.ts} +2 -24
  169. package/src/{adapters/node/bootstrap-dependency-resolver.js → services/module-loading/node-bootstrap-plugin.js} +42 -22
  170. package/src/services/module-loading/page-module-import.service.d.ts +4 -0
  171. package/src/services/module-loading/page-module-import.service.js +38 -9
  172. package/src/services/module-loading/server-module-transpiler.service.d.ts +3 -0
  173. package/src/services/module-loading/server-module-transpiler.service.js +4 -1
  174. package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
  175. package/src/services/runtime-state/dev-graph.service.js +10 -10
  176. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
  177. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +1 -1
  178. package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
  179. package/src/static-site-generator/static-site-generator.d.ts +2 -2
  180. package/src/static-site-generator/static-site-generator.js +1 -1
  181. package/src/{internal-types.d.ts → types/internal-types.d.ts} +24 -14
  182. package/src/{public-types.d.ts → types/public-types.d.ts} +30 -14
  183. package/src/types/public-types.js +0 -0
  184. package/src/utils/html-escaping.d.ts +7 -0
  185. package/src/utils/html-escaping.js +6 -0
  186. package/src/utils/locals-utils.d.ts +1 -1
  187. package/src/utils/parse-cli-args.d.ts +4 -1
  188. package/src/utils/parse-cli-args.js +16 -1
  189. package/src/utils/resolve-work-dir.js +1 -1
  190. package/src/watchers/project-watcher.d.ts +4 -4
  191. package/src/watchers/project-watcher.js +4 -10
  192. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  193. package/src/adapters/abstract/application-adapter.ts +0 -337
  194. package/src/adapters/abstract/router-adapter.ts +0 -30
  195. package/src/adapters/abstract/server-adapter.ts +0 -79
  196. package/src/adapters/bun/client-bridge.ts +0 -62
  197. package/src/adapters/bun/create-app.ts +0 -189
  198. package/src/adapters/bun/hmr-manager.ts +0 -409
  199. package/src/adapters/bun/index.ts +0 -2
  200. package/src/adapters/bun/server-adapter.ts +0 -499
  201. package/src/adapters/bun/server-lifecycle.ts +0 -124
  202. package/src/adapters/index.ts +0 -6
  203. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  204. package/src/adapters/node/create-app.ts +0 -179
  205. package/src/adapters/node/index.d.ts +0 -6
  206. package/src/adapters/node/index.js +0 -11
  207. package/src/adapters/node/index.ts +0 -16
  208. package/src/adapters/node/node-client-bridge.ts +0 -79
  209. package/src/adapters/node/node-hmr-manager.ts +0 -381
  210. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  211. package/src/adapters/node/runtime-adapter.js +0 -306
  212. package/src/adapters/node/runtime-adapter.ts +0 -439
  213. package/src/adapters/node/server-adapter.ts +0 -488
  214. package/src/adapters/node/static-content-server.ts +0 -239
  215. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  216. package/src/adapters/node/write-runtime-manifest.js +0 -12
  217. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  218. package/src/adapters/shared/api-response.ts +0 -104
  219. package/src/adapters/shared/application-adapter.ts +0 -199
  220. package/src/adapters/shared/define-api-handler.ts +0 -66
  221. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  222. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  223. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  224. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  225. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  226. package/src/adapters/shared/hmr-html-response.ts +0 -52
  227. package/src/adapters/shared/render-context.ts +0 -120
  228. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  229. package/src/adapters/shared/server-adapter.ts +0 -489
  230. package/src/adapters/shared/server-route-handler.ts +0 -153
  231. package/src/adapters/shared/server-static-builder.ts +0 -166
  232. package/src/build/build-adapter.ts +0 -361
  233. package/src/build/build-manifest.ts +0 -54
  234. package/src/build/build-types.ts +0 -83
  235. package/src/build/dev-build-coordinator.ts +0 -221
  236. package/src/build/esbuild-build-adapter.ts +0 -559
  237. package/src/build/runtime-build-executor.ts +0 -34
  238. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  239. package/src/config/config-builder.ts +0 -706
  240. package/src/constants.ts +0 -54
  241. package/src/create-app.ts +0 -87
  242. package/src/dev/sc-server.ts +0 -143
  243. package/src/eco/component-render-context.d.ts +0 -105
  244. package/src/eco/component-render-context.js +0 -87
  245. package/src/eco/component-render-context.ts +0 -224
  246. package/src/eco/eco.ts +0 -242
  247. package/src/eco/eco.types.ts +0 -221
  248. package/src/eco/global-injector-map.ts +0 -112
  249. package/src/eco/lazy-injector-map.ts +0 -120
  250. package/src/eco/module-dependencies.ts +0 -75
  251. package/src/errors/http-error.ts +0 -72
  252. package/src/errors/index.ts +0 -2
  253. package/src/errors/locals-access-error.ts +0 -7
  254. package/src/global/app-logger.ts +0 -4
  255. package/src/hmr/client/hmr-runtime.ts +0 -152
  256. package/src/hmr/hmr-strategy.ts +0 -172
  257. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  258. package/src/hmr/hmr.test.e2e.ts +0 -66
  259. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  260. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  261. package/src/index.browser.ts +0 -3
  262. package/src/index.ts +0 -5
  263. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  264. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  265. package/src/internal-types.ts +0 -232
  266. package/src/plugins/alias-resolver-plugin.ts +0 -63
  267. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  268. package/src/plugins/integration-plugin.ts +0 -226
  269. package/src/plugins/processor.ts +0 -240
  270. package/src/plugins/runtime-capability.ts +0 -14
  271. package/src/public-types.ts +0 -1317
  272. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  273. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  274. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  275. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  276. package/src/route-renderer/component-graph/component-graph.js +0 -72
  277. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  278. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  279. package/src/route-renderer/component-graph/component-marker.js +0 -46
  280. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  281. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  282. package/src/route-renderer/component-graph/component-reference.js +0 -19
  283. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  284. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  285. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  286. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  287. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  288. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  289. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  290. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  291. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  292. package/src/route-renderer/route-renderer.ts +0 -115
  293. package/src/router/client/link-intent.test.browser.ts +0 -51
  294. package/src/router/client/link-intent.ts +0 -92
  295. package/src/router/client/navigation-coordinator.ts +0 -433
  296. package/src/router/server/fs-router-scanner.ts +0 -219
  297. package/src/router/server/fs-router.ts +0 -122
  298. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  299. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  300. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  301. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  302. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  303. package/src/services/assets/asset-processing-service/index.ts +0 -5
  304. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  305. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  306. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  307. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  308. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  309. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  310. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  311. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  312. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  313. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  314. package/src/services/assets/browser-bundle.service.ts +0 -53
  315. package/src/services/cache/cache.types.ts +0 -126
  316. package/src/services/cache/index.ts +0 -18
  317. package/src/services/cache/memory-cache-store.ts +0 -130
  318. package/src/services/cache/page-cache-service.ts +0 -202
  319. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  320. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  321. package/src/services/html/html-transformer.service.ts +0 -279
  322. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  323. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  324. package/src/services/module-loading/page-module-import.service.ts +0 -200
  325. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  326. package/src/services/module-loading/server-loader.service.js +0 -32
  327. package/src/services/module-loading/server-loader.service.ts +0 -130
  328. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  329. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  330. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  331. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  332. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  333. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  334. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  335. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  336. package/src/services/validation/schema-validation-service.ts +0 -204
  337. package/src/services/validation/standard-schema.types.ts +0 -68
  338. package/src/static-site-generator/static-site-generator.ts +0 -462
  339. package/src/utils/css.d.ts +0 -1
  340. package/src/utils/css.js +0 -7
  341. package/src/utils/css.ts +0 -5
  342. package/src/utils/deep-merge.ts +0 -47
  343. package/src/utils/hash.ts +0 -5
  344. package/src/utils/html.ts +0 -1
  345. package/src/utils/invariant.ts +0 -15
  346. package/src/utils/locals-utils.ts +0 -37
  347. package/src/utils/parse-cli-args.ts +0 -83
  348. package/src/utils/path-utils.module.ts +0 -14
  349. package/src/utils/resolve-work-dir.ts +0 -45
  350. package/src/utils/runtime.ts +0 -44
  351. package/src/utils/server-utils.module.ts +0 -67
  352. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  353. package/src/watchers/project-watcher.ts +0 -363
  354. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  355. /package/src/{constants.js → config/constants.js} +0 -0
  356. /package/src/{internal-types.js → services/module-loading/module-loading-types.js} +0 -0
  357. /package/src/{public-types.js → types/internal-types.js} +0 -0
@@ -0,0 +1,93 @@
1
+ import type { ProcessedAsset } from '../../services/assets/asset-processing-service/index.js';
2
+ import type { ComponentRenderInput, ComponentRenderResult, EcoComponent } from '../../types/public-types.js';
3
+ import type { ComponentBoundaryRuntime } from './component-render-context.js';
4
+ export type QueuedBoundaryDecisionInput = {
5
+ currentIntegration: string;
6
+ targetIntegration?: string;
7
+ component: EcoComponent;
8
+ props: Record<string, unknown>;
9
+ };
10
+ export type QueuedBoundaryResolution = {
11
+ token: string;
12
+ component: EcoComponent;
13
+ props: Record<string, unknown>;
14
+ componentInstanceId: string;
15
+ };
16
+ /**
17
+ * Shared mutable state for one renderer-owned queued boundary runtime.
18
+ *
19
+ * Renderers that cannot resolve foreign boundaries inline can enqueue transport
20
+ * tokens during their initial render, then resolve those tokens against the
21
+ * owning renderer before returning final HTML.
22
+ */
23
+ export type QueuedBoundaryRuntimeContext = {
24
+ rendererCache: Map<string, unknown>;
25
+ componentInstanceScope?: string;
26
+ nextBoundaryId: number;
27
+ queuedResolutions: QueuedBoundaryResolution[];
28
+ };
29
+ type QueuedBoundaryIntegrationContext = {
30
+ rendererCache?: Map<string, unknown>;
31
+ componentInstanceId?: string;
32
+ [key: string]: unknown;
33
+ };
34
+ type QueuedBoundaryChildRenderResult = {
35
+ assets: ProcessedAsset[];
36
+ html?: string;
37
+ };
38
+ /**
39
+ * Shared queue orchestration for renderer-owned boundary runtimes that emit
40
+ * temporary transport tokens during one render pass.
41
+ *
42
+ * The service keeps three responsibilities in one place:
43
+ * - storing per-render queue state on the active integration context
44
+ * - creating a `ComponentBoundaryRuntime` that enqueues foreign boundaries
45
+ * - resolving queued tokens back through the owning renderer before final HTML
46
+ * leaves the current renderer
47
+ *
48
+ * Renderers still own framework-specific child rendering. This service only
49
+ * handles queue bookkeeping, recursion, cycle detection, and asset merging.
50
+ */
51
+ export declare class QueuedBoundaryRuntimeService {
52
+ /**
53
+ * Reads the queued boundary runtime state previously attached to one render.
54
+ */
55
+ getRuntimeContext<TContext extends QueuedBoundaryRuntimeContext>(input: ComponentRenderInput, runtimeContextKey: string): TContext | undefined;
56
+ /**
57
+ * Creates the runtime hook used by `runWithComponentRenderContext()` for one
58
+ * renderer-owned queue.
59
+ *
60
+ * When the renderer decides a boundary must be handed off, the runtime returns
61
+ * a resolved transport token instead of rendering the foreign component inline.
62
+ */
63
+ createRuntime<TContext extends QueuedBoundaryRuntimeContext>(options: {
64
+ boundaryInput: ComponentRenderInput;
65
+ rendererCache: Map<string, unknown>;
66
+ runtimeContextKey: string;
67
+ tokenPrefix: string;
68
+ shouldQueueBoundary: (input: QueuedBoundaryDecisionInput) => boolean;
69
+ createRuntimeContext?: (integrationContext: QueuedBoundaryIntegrationContext, rendererCache: Map<string, unknown>) => TContext;
70
+ }): ComponentBoundaryRuntime;
71
+ /**
72
+ * Resolves every queued transport token in one renderer-owned HTML fragment.
73
+ *
74
+ * The caller supplies framework-specific child rendering, while this service
75
+ * handles recursive token replacement, cycle detection, root-attribute
76
+ * application, and merged asset collection.
77
+ */
78
+ resolveQueuedHtml<TContext extends QueuedBoundaryRuntimeContext>(options: {
79
+ html: string;
80
+ runtimeContext?: TContext;
81
+ queueLabel: string;
82
+ renderQueuedChildren: (children: unknown, runtimeContext: TContext, queuedResolutionsByToken: Map<string, QueuedBoundaryResolution>, resolveToken: (token: string) => Promise<string>) => Promise<QueuedBoundaryChildRenderResult>;
83
+ resolveBoundary: (input: ComponentRenderInput, rendererCache: Map<string, unknown>) => Promise<ComponentRenderResult | undefined>;
84
+ applyAttributesToFirstElement: (html: string, attributes: Record<string, string>) => string;
85
+ dedupeProcessedAssets: (assets: ProcessedAsset[]) => ProcessedAsset[];
86
+ }): Promise<{
87
+ assets: ProcessedAsset[];
88
+ html: string;
89
+ }>;
90
+ private createBoundaryToken;
91
+ private ensureRuntimeContext;
92
+ }
93
+ export {};
@@ -0,0 +1,155 @@
1
+ class QueuedBoundaryRuntimeService {
2
+ /**
3
+ * Reads the queued boundary runtime state previously attached to one render.
4
+ */
5
+ getRuntimeContext(input, runtimeContextKey) {
6
+ const integrationContext = input.integrationContext;
7
+ const runtimeContext = integrationContext?.[runtimeContextKey];
8
+ if (typeof runtimeContext !== "object" || runtimeContext === null) {
9
+ return void 0;
10
+ }
11
+ return runtimeContext;
12
+ }
13
+ /**
14
+ * Creates the runtime hook used by `runWithComponentRenderContext()` for one
15
+ * renderer-owned queue.
16
+ *
17
+ * When the renderer decides a boundary must be handed off, the runtime returns
18
+ * a resolved transport token instead of rendering the foreign component inline.
19
+ */
20
+ createRuntime(options) {
21
+ const runtimeContext = this.ensureRuntimeContext(options);
22
+ const interceptBoundary = (input) => {
23
+ if (!options.shouldQueueBoundary(input)) {
24
+ return { kind: "inline" };
25
+ }
26
+ runtimeContext.nextBoundaryId += 1;
27
+ const boundaryId = runtimeContext.nextBoundaryId;
28
+ const token = this.createBoundaryToken(options.tokenPrefix, runtimeContext, boundaryId);
29
+ runtimeContext.queuedResolutions.push({
30
+ token,
31
+ component: input.component,
32
+ props: { ...input.props },
33
+ componentInstanceId: runtimeContext.componentInstanceScope ? `${runtimeContext.componentInstanceScope}_n_${boundaryId}` : `n_${boundaryId}`
34
+ });
35
+ return {
36
+ kind: "resolved",
37
+ value: token
38
+ };
39
+ };
40
+ return {
41
+ interceptBoundary,
42
+ interceptBoundarySync: interceptBoundary
43
+ };
44
+ }
45
+ /**
46
+ * Resolves every queued transport token in one renderer-owned HTML fragment.
47
+ *
48
+ * The caller supplies framework-specific child rendering, while this service
49
+ * handles recursive token replacement, cycle detection, root-attribute
50
+ * application, and merged asset collection.
51
+ */
52
+ async resolveQueuedHtml(options) {
53
+ if (!options.runtimeContext || options.runtimeContext.queuedResolutions.length === 0) {
54
+ return { assets: [], html: options.html };
55
+ }
56
+ const runtimeContext = options.runtimeContext;
57
+ const queuedResolutionsByToken = new Map(
58
+ runtimeContext.queuedResolutions.map((resolution) => [resolution.token, resolution])
59
+ );
60
+ const resolvedHtmlByToken = /* @__PURE__ */ new Map();
61
+ const resolvingTokens = /* @__PURE__ */ new Set();
62
+ const collectedAssets = [];
63
+ const resolveToken = async (token) => {
64
+ const cachedHtml = resolvedHtmlByToken.get(token);
65
+ if (cachedHtml) {
66
+ return cachedHtml;
67
+ }
68
+ const resolution = queuedResolutionsByToken.get(token);
69
+ if (!resolution) {
70
+ return token;
71
+ }
72
+ if (resolvingTokens.has(token)) {
73
+ throw new Error(
74
+ `[ecopages] ${options.queueLabel} boundary queue contains a cycle or unresolved dependency links.`
75
+ );
76
+ }
77
+ resolvingTokens.add(token);
78
+ try {
79
+ const renderedChildren = await options.renderQueuedChildren(
80
+ resolution.props.children,
81
+ runtimeContext,
82
+ queuedResolutionsByToken,
83
+ resolveToken
84
+ );
85
+ if (renderedChildren.assets.length > 0) {
86
+ collectedAssets.push(...renderedChildren.assets);
87
+ }
88
+ const boundaryRender = await options.resolveBoundary(
89
+ {
90
+ component: resolution.component,
91
+ props: { ...resolution.props },
92
+ children: renderedChildren.html,
93
+ integrationContext: {
94
+ rendererCache: runtimeContext.rendererCache,
95
+ componentInstanceId: resolution.componentInstanceId
96
+ }
97
+ },
98
+ runtimeContext.rendererCache
99
+ );
100
+ if (!boundaryRender) {
101
+ throw new Error(
102
+ `[ecopages] ${options.queueLabel} queued boundary could not resolve its owning renderer.`
103
+ );
104
+ }
105
+ if ((boundaryRender.assets?.length ?? 0) > 0) {
106
+ collectedAssets.push(...boundaryRender.assets ?? []);
107
+ }
108
+ const resolvedHtml2 = boundaryRender.canAttachAttributes && boundaryRender.rootAttributes ? options.applyAttributesToFirstElement(boundaryRender.html, boundaryRender.rootAttributes) : boundaryRender.html;
109
+ resolvedHtmlByToken.set(token, resolvedHtml2);
110
+ return resolvedHtml2;
111
+ } finally {
112
+ resolvingTokens.delete(token);
113
+ }
114
+ };
115
+ let resolvedHtml = options.html;
116
+ for (const resolution of runtimeContext.queuedResolutions) {
117
+ if (!resolvedHtml.includes(resolution.token)) {
118
+ continue;
119
+ }
120
+ resolvedHtml = resolvedHtml.split(resolution.token).join(await resolveToken(resolution.token));
121
+ }
122
+ return {
123
+ assets: options.dedupeProcessedAssets(collectedAssets),
124
+ html: resolvedHtml
125
+ };
126
+ }
127
+ createBoundaryToken(tokenPrefix, runtimeContext, boundaryId) {
128
+ return `${tokenPrefix}${runtimeContext.componentInstanceScope ?? "root"}__${boundaryId}__`;
129
+ }
130
+ ensureRuntimeContext(options) {
131
+ let integrationContext;
132
+ if (typeof options.boundaryInput.integrationContext === "object" && options.boundaryInput.integrationContext !== null) {
133
+ integrationContext = options.boundaryInput.integrationContext;
134
+ } else {
135
+ integrationContext = {};
136
+ }
137
+ const existingRuntimeContext = integrationContext[options.runtimeContextKey];
138
+ if (typeof existingRuntimeContext !== "object" || existingRuntimeContext === null) {
139
+ integrationContext[options.runtimeContextKey] = options.createRuntimeContext?.(integrationContext, options.rendererCache) ?? {
140
+ rendererCache: options.rendererCache,
141
+ componentInstanceScope: integrationContext.componentInstanceId,
142
+ nextBoundaryId: 0,
143
+ queuedResolutions: []
144
+ };
145
+ } else {
146
+ existingRuntimeContext.rendererCache = options.rendererCache;
147
+ }
148
+ integrationContext.rendererCache = options.rendererCache;
149
+ options.boundaryInput.integrationContext = integrationContext;
150
+ return integrationContext[options.runtimeContextKey];
151
+ }
152
+ }
153
+ export {
154
+ QueuedBoundaryRuntimeService
155
+ };
@@ -1,72 +1,31 @@
1
- import { type ComponentRenderBoundaryContext } from '../../eco/component-render-context.js';
2
- import type { EcoComponent, IntegrationRendererRenderOptions, RouteRendererBody, RouteRendererOptions, RouteRenderResult } from '../../public-types.js';
3
- import type { ProcessedAsset } from '../../services/assets/asset-processing-service/index.js';
4
- import type { MarkerGraphContext } from '../component-graph/marker-graph-resolver.js';
5
- /**
6
- * Serializable graph context merged from render-time captured references and
7
- * optional explicit page-module graph metadata.
8
- */
9
- export type RenderExecutionGraphContext = {
10
- propsByRef?: Record<string, Record<string, unknown>>;
11
- slotChildrenByRef?: MarkerGraphContext['slotChildrenByRef'];
12
- };
1
+ import type { IntegrationRendererRenderOptions, RouteRendererBody, RouteRendererOptions, RouteRenderResult } from '../../types/public-types.js';
13
2
  export interface CapturedHtmlRenderResult {
3
+ body: RouteRendererBody;
14
4
  html: string;
15
- graphContext: RenderExecutionGraphContext;
16
5
  }
17
6
  export interface FinalizeHtmlRenderOptions {
18
7
  html: string;
19
- graphContext: RenderExecutionGraphContext;
20
- componentsToResolve: EcoComponent[];
21
8
  componentRootAttributes?: Record<string, string>;
22
9
  documentAttributes?: Record<string, string>;
23
- mergeAssets?: boolean;
24
10
  }
25
11
  export interface RenderExecutionCallbacks<C> {
26
12
  prepareRenderOptions(options: RouteRendererOptions): Promise<IntegrationRendererRenderOptions<C>>;
27
13
  render(renderOptions: IntegrationRendererRenderOptions<C>): Promise<RouteRendererBody>;
28
- getComponentRenderBoundaryContext(): ComponentRenderBoundaryContext;
29
14
  getDocumentAttributes(renderOptions: IntegrationRendererRenderOptions<C>): Record<string, string> | undefined;
30
- resolveMarkerGraphHtml(input: {
31
- html: string;
32
- componentsToResolve: EcoComponent[];
33
- graphContext: RenderExecutionGraphContext;
34
- }): Promise<{
35
- html: string;
36
- assets: ProcessedAsset[];
37
- }>;
38
- dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
39
- getProcessedDependencies(): ProcessedAsset[];
40
- setProcessedDependencies(dependencies: ProcessedAsset[]): void;
41
- applyAttributesToHtmlElement(html: string, attributes: Record<string, string>): string;
42
- applyAttributesToFirstBodyElement(html: string, attributes: Record<string, string>): string;
43
- transformHtml(html: string): Promise<RouteRendererBody>;
44
- }
45
- export interface FinalizeHtmlRenderCallbacks {
46
- resolveMarkerGraphHtml(input: {
47
- html: string;
48
- componentsToResolve: EcoComponent[];
49
- graphContext: RenderExecutionGraphContext;
50
- }): Promise<{
51
- html: string;
52
- assets: ProcessedAsset[];
53
- }>;
54
- dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
55
- getProcessedDependencies(): ProcessedAsset[];
56
- setProcessedDependencies(dependencies: ProcessedAsset[]): void;
57
15
  applyAttributesToHtmlElement(html: string, attributes: Record<string, string>): string;
58
16
  applyAttributesToFirstBodyElement(html: string, attributes: Record<string, string>): string;
17
+ transformResponse(response: Response): Promise<RouteRendererBody>;
59
18
  }
60
19
  /**
61
20
  * Executes the main post-preparation rendering flow for integration renderers.
62
21
  *
63
22
  * This service owns the orchestration that happens after normalized render
64
- * options have been prepared: the first render pass, graph-context capture,
65
- * deferred marker resolution, root-attribute application, and final HTML
66
- * transformation into a response body stream.
23
+ * options have been prepared: one render pass, unresolved boundary-marker
24
+ * enforcement, root-attribute application, and final HTML transformation into
25
+ * a response body stream.
67
26
  */
68
27
  export declare class RenderExecutionService {
69
- captureHtmlRender(currentIntegrationName: string, boundaryContext: ComponentRenderBoundaryContext, render: () => Promise<RouteRendererBody>): Promise<CapturedHtmlRenderResult>;
28
+ captureHtmlRender(render: () => Promise<RouteRendererBody>): Promise<CapturedHtmlRenderResult>;
70
29
  /**
71
30
  * Executes one integration render pass and returns the final route render
72
31
  * result.
@@ -77,27 +36,8 @@ export declare class RenderExecutionService {
77
36
  * @param callbacks Renderer-specific hooks required during execution.
78
37
  * @returns Final route render output with body and cache strategy.
79
38
  */
80
- execute<C = unknown>(options: RouteRendererOptions, currentIntegrationName: string, callbacks: RenderExecutionCallbacks<C>): Promise<RouteRenderResult>;
81
- /**
82
- * Merges captured render-time graph references with any explicit graph context
83
- * provided by the page module.
84
- *
85
- * @param capturedGraphContext Graph context captured from the first render pass.
86
- * @param explicitGraphContext Optional page-module graph metadata.
87
- * @returns Merged graph context used during marker resolution.
88
- */
89
- mergeGraphContext(capturedGraphContext: RenderExecutionGraphContext, explicitGraphContext?: RenderExecutionGraphContext): RenderExecutionGraphContext;
90
- finalizeHtmlRender(options: FinalizeHtmlRenderOptions, callbacks: FinalizeHtmlRenderCallbacks): Promise<{
91
- html: string;
92
- assets: ProcessedAsset[];
93
- }>;
94
- /**
95
- * Returns the component set that participates in marker graph resolution for a
96
- * render pass.
97
- *
98
- * @typeParam C Integration render output element type.
99
- * @param renderOptions Normalized render options for the pass.
100
- * @returns Ordered component list for graph registry construction.
101
- */
102
- private getComponentsToResolve;
39
+ execute<C = unknown>(options: RouteRendererOptions, callbacks: RenderExecutionCallbacks<C>): Promise<RouteRenderResult>;
40
+ private captureRenderedBody;
41
+ finalizeHtmlRender(options: FinalizeHtmlRenderOptions, callbacks: Pick<RenderExecutionCallbacks<unknown>, 'applyAttributesToHtmlElement' | 'applyAttributesToFirstBodyElement'>): Promise<string>;
42
+ private applyFinalHtmlAttributes;
103
43
  }
@@ -1,18 +1,11 @@
1
- import {
2
- runWithComponentRenderContext
3
- } from "../../eco/component-render-context.js";
1
+ import { inspectBoundaryArtifactHtml } from "./render-output.utils.js";
4
2
  class RenderExecutionService {
5
- async captureHtmlRender(currentIntegrationName, boundaryContext, render) {
6
- const renderExecution = await runWithComponentRenderContext(
7
- {
8
- currentIntegration: currentIntegrationName,
9
- boundaryContext
10
- },
11
- render
12
- );
3
+ async captureHtmlRender(render) {
4
+ const renderedBody = await render();
5
+ const capturedRender = await this.captureRenderedBody(renderedBody);
13
6
  return {
14
- html: await new Response(renderExecution.value).text(),
15
- graphContext: renderExecution.graphContext
7
+ body: capturedRender.body,
8
+ html: capturedRender.html
16
9
  };
17
10
  }
18
11
  /**
@@ -25,95 +18,87 @@ class RenderExecutionService {
25
18
  * @param callbacks Renderer-specific hooks required during execution.
26
19
  * @returns Final route render output with body and cache strategy.
27
20
  */
28
- async execute(options, currentIntegrationName, callbacks) {
21
+ async execute(options, callbacks) {
29
22
  const renderOptions = await callbacks.prepareRenderOptions(options);
30
23
  const shouldApplyComponentRootAttributes = renderOptions.componentRender?.canAttachAttributes && renderOptions.componentRender.rootAttributes && Object.keys(renderOptions.componentRender.rootAttributes).length > 0;
31
- const renderExecution = await this.captureHtmlRender(
32
- currentIntegrationName,
33
- callbacks.getComponentRenderBoundaryContext(),
34
- async () => callbacks.render(renderOptions)
35
- );
36
- const componentGraphContext = this.mergeGraphContext(
37
- renderExecution.graphContext,
38
- renderOptions.componentGraphContext
39
- );
24
+ const renderExecution = await this.captureHtmlRender(async () => callbacks.render(renderOptions));
25
+ const boundaryArtifacts = inspectBoundaryArtifactHtml(renderExecution.html);
26
+ const documentAttributes = callbacks.getDocumentAttributes(renderOptions);
27
+ const hasBoundaryMarkerHtml = boundaryArtifacts.hasUnresolvedBoundaryArtifacts;
28
+ if (hasBoundaryMarkerHtml) {
29
+ throw new Error(
30
+ "[ecopages] Route render returned unresolved boundary artifact HTML. Full-route unresolved-boundary fallback has been removed; resolve mixed boundaries inside renderComponentBoundary()."
31
+ );
32
+ }
33
+ const canReuseCapturedBody = !hasBoundaryMarkerHtml && !shouldApplyComponentRootAttributes && !(documentAttributes && Object.keys(documentAttributes).length > 0);
34
+ if (canReuseCapturedBody) {
35
+ const body2 = await callbacks.transformResponse(
36
+ new Response(renderExecution.body, {
37
+ headers: {
38
+ "Content-Type": "text/html"
39
+ }
40
+ })
41
+ );
42
+ return {
43
+ body: body2,
44
+ cacheStrategy: renderOptions.cacheStrategy
45
+ };
46
+ }
40
47
  const finalization = await this.finalizeHtmlRender(
41
48
  {
42
- html: renderExecution.html,
43
- graphContext: componentGraphContext,
44
- componentsToResolve: this.getComponentsToResolve(renderOptions),
49
+ html: boundaryArtifacts.normalizedHtml,
45
50
  componentRootAttributes: shouldApplyComponentRootAttributes ? renderOptions.componentRender?.rootAttributes : void 0,
46
- documentAttributes: callbacks.getDocumentAttributes(renderOptions),
47
- mergeAssets: true
51
+ documentAttributes
48
52
  },
49
- callbacks
53
+ {
54
+ applyAttributesToHtmlElement: callbacks.applyAttributesToHtmlElement,
55
+ applyAttributesToFirstBodyElement: callbacks.applyAttributesToFirstBodyElement
56
+ }
57
+ );
58
+ const body = await callbacks.transformResponse(
59
+ new Response(finalization, {
60
+ headers: {
61
+ "Content-Type": "text/html"
62
+ }
63
+ })
50
64
  );
51
- const body = await callbacks.transformHtml(finalization.html);
52
65
  return {
53
66
  body,
54
67
  cacheStrategy: renderOptions.cacheStrategy
55
68
  };
56
69
  }
57
- /**
58
- * Merges captured render-time graph references with any explicit graph context
59
- * provided by the page module.
60
- *
61
- * @param capturedGraphContext Graph context captured from the first render pass.
62
- * @param explicitGraphContext Optional page-module graph metadata.
63
- * @returns Merged graph context used during marker resolution.
64
- */
65
- mergeGraphContext(capturedGraphContext, explicitGraphContext) {
70
+ async captureRenderedBody(body) {
71
+ const response = new Response(body);
72
+ if (typeof body === "string") {
73
+ return {
74
+ body,
75
+ html: await response.text()
76
+ };
77
+ }
78
+ if (!response.body) {
79
+ return {
80
+ body,
81
+ html: await response.text()
82
+ };
83
+ }
84
+ const [capturedBody, replayBody] = response.body.tee();
66
85
  return {
67
- propsByRef: {
68
- ...capturedGraphContext.propsByRef ?? {},
69
- ...explicitGraphContext?.propsByRef ?? {}
70
- },
71
- slotChildrenByRef: {
72
- ...capturedGraphContext.slotChildrenByRef ?? {},
73
- ...explicitGraphContext?.slotChildrenByRef ?? {}
74
- }
86
+ body: replayBody,
87
+ html: await new Response(capturedBody).text()
75
88
  };
76
89
  }
77
90
  async finalizeHtmlRender(options, callbacks) {
78
- let renderedHtml = options.html;
79
- let markerAssets = [];
80
- if (renderedHtml.includes("<eco-marker")) {
81
- const markerResolution = await callbacks.resolveMarkerGraphHtml({
82
- html: renderedHtml,
83
- componentsToResolve: options.componentsToResolve,
84
- graphContext: options.graphContext
85
- });
86
- renderedHtml = markerResolution.html;
87
- markerAssets = markerResolution.assets;
88
- if (options.mergeAssets !== false && markerResolution.assets.length > 0) {
89
- const mergedDependencies = callbacks.dedupeProcessedAssets([
90
- ...callbacks.getProcessedDependencies(),
91
- ...markerResolution.assets
92
- ]);
93
- callbacks.setProcessedDependencies(mergedDependencies);
94
- }
95
- }
91
+ return this.applyFinalHtmlAttributes(options.html, options, callbacks);
92
+ }
93
+ applyFinalHtmlAttributes(html, options, callbacks) {
94
+ let renderedHtml = html;
96
95
  if (options.componentRootAttributes && Object.keys(options.componentRootAttributes).length > 0) {
97
96
  renderedHtml = callbacks.applyAttributesToFirstBodyElement(renderedHtml, options.componentRootAttributes);
98
97
  }
99
98
  if (options.documentAttributes && Object.keys(options.documentAttributes).length > 0) {
100
99
  renderedHtml = callbacks.applyAttributesToHtmlElement(renderedHtml, options.documentAttributes);
101
100
  }
102
- return {
103
- html: renderedHtml,
104
- assets: markerAssets
105
- };
106
- }
107
- /**
108
- * Returns the component set that participates in marker graph resolution for a
109
- * render pass.
110
- *
111
- * @typeParam C Integration render output element type.
112
- * @param renderOptions Normalized render options for the pass.
113
- * @returns Ordered component list for graph registry construction.
114
- */
115
- getComponentsToResolve(renderOptions) {
116
- return renderOptions.Layout ? [renderOptions.HtmlTemplate, renderOptions.Layout, renderOptions.Page] : [renderOptions.HtmlTemplate, renderOptions.Page];
101
+ return renderedHtml;
117
102
  }
118
103
  }
119
104
  export {
@@ -1,6 +1,4 @@
1
- import type { EcoComponent } from '../public-types.ts';
2
- import { buildInjectorMapScript } from './lazy-injector-map.ts';
3
-
1
+ import type { EcoComponent } from '../../types/public-types.js';
4
2
  /**
5
3
  * Returns `true` when `value` is a thenable (Promise-like) object.
6
4
  *
@@ -9,15 +7,7 @@ import { buildInjectorMapScript } from './lazy-injector-map.ts';
9
7
  *
10
8
  * @typeParam T Expected resolved type of the thenable.
11
9
  */
12
- export function isThenable<T>(value: unknown): value is PromiseLike<T> {
13
- return (
14
- typeof value === 'object' &&
15
- value !== null &&
16
- 'then' in value &&
17
- typeof (value as { then?: unknown }).then === 'function'
18
- );
19
- }
20
-
10
+ export declare function isThenable<T>(value: unknown): value is PromiseLike<T>;
21
11
  /**
22
12
  * Injects `data-eco-trigger` into the first real HTML element opening tag of
23
13
  * a component's rendered output string.
@@ -39,39 +29,7 @@ export function isThenable<T>(value: unknown): value is PromiseLike<T> {
39
29
  * @param content Rendered HTML string (or any value coercible to string).
40
30
  * @param triggerId Stable trigger identifier produced by `buildResolvedLazyTriggers`.
41
31
  */
42
- export function addTriggerAttribute(content: unknown, triggerId: string): string {
43
- const str = String(content);
44
- let i = 0;
45
-
46
- while (i < str.length) {
47
- if (str[i] !== '<') {
48
- i++;
49
- continue;
50
- }
51
-
52
- const next = str[i + 1];
53
-
54
- if (next === '!' || next === '?') {
55
- const end = str.indexOf('>', i);
56
- if (end === -1) break;
57
- i = end + 1;
58
- continue;
59
- }
60
-
61
- if (next && /[a-zA-Z]/.test(next)) {
62
- const tagSlice = str.slice(i + 1);
63
- const nameEnd = tagSlice.search(/[\s/>]/);
64
- if (nameEnd === -1) break;
65
- const insertAt = i + 1 + nameEnd;
66
- return `${str.slice(0, insertAt)} data-eco-trigger="${triggerId}"${str.slice(insertAt)}`;
67
- }
68
-
69
- break;
70
- }
71
-
72
- return str;
73
- }
74
-
32
+ export declare function addTriggerAttribute(content: unknown, triggerId: string): string;
75
33
  /**
76
34
  * Wraps rendered component output in a `<scripts-injector>` element that
77
35
  * carries an inline injector map for the legacy (non-global-injector) path.
@@ -79,11 +37,10 @@ export function addTriggerAttribute(content: unknown, triggerId: string): string
79
37
  * @param content Rendered component HTML.
80
38
  * @param lazyGroups Resolved lazy script groups attached to the component config.
81
39
  */
82
- export function wrapWithScriptsInjector(
83
- content: unknown,
84
- lazyGroups: NonNullable<EcoComponent['config']>['_resolvedLazyScripts'],
85
- ): string {
86
- const wrappedContent = String(content);
87
- const injectorMapScript = buildInjectorMapScript(lazyGroups ?? []);
88
- return `<scripts-injector><script type="ecopages/injector-map">${injectorMapScript}</script>${wrappedContent}</scripts-injector>`;
89
- }
40
+ export declare function wrapWithScriptsInjector(content: unknown, lazyGroups: NonNullable<EcoComponent['config']>['_resolvedLazyScripts']): string;
41
+ export declare function decodeHtmlEntities(value: string): string;
42
+ export declare function normalizeBoundaryArtifactHtml(html: string): string;
43
+ export declare function inspectBoundaryArtifactHtml(html: string): {
44
+ hasUnresolvedBoundaryArtifacts: boolean;
45
+ normalizedHtml: string;
46
+ };