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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/README.md +40 -9
  2. package/package.json +371 -33
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +115 -6
  5. package/src/adapters/abstract/application-adapter.js +261 -120
  6. package/src/adapters/abstract/router-adapter.js +12 -4
  7. package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
  8. package/src/adapters/abstract/segment-path-matcher.js +147 -0
  9. package/src/adapters/abstract/server-adapter.d.ts +16 -2
  10. package/src/adapters/abstract/server-adapter.js +22 -14
  11. package/src/adapters/abstract/ws-pattern-matcher.d.ts +12 -0
  12. package/src/adapters/abstract/ws-pattern-matcher.js +28 -0
  13. package/src/adapters/bun/bun-user-websocket-lifecycle.d.ts +22 -0
  14. package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
  15. package/src/adapters/bun/client-bridge.d.ts +1 -0
  16. package/src/adapters/bun/client-bridge.js +51 -47
  17. package/src/adapters/bun/create-app.d.ts +9 -6
  18. package/src/adapters/bun/create-app.js +171 -130
  19. package/src/adapters/bun/hmr-manager.d.ts +1 -1
  20. package/src/adapters/bun/hmr-manager.js +62 -57
  21. package/src/adapters/bun/index.d.ts +1 -1
  22. package/src/adapters/bun/index.js +2 -8
  23. package/src/adapters/bun/runtime-host.d.ts +1 -1
  24. package/src/adapters/bun/runtime-host.js +61 -54
  25. package/src/adapters/bun/server-adapter.d.ts +91 -41
  26. package/src/adapters/bun/server-adapter.js +566 -426
  27. package/src/adapters/bun/static-preview-host.d.ts +1 -1
  28. package/src/adapters/bun/static-preview-host.js +43 -41
  29. package/src/adapters/create-app.d.ts +13 -11
  30. package/src/adapters/create-app.js +11 -63
  31. package/src/adapters/index.d.ts +2 -2
  32. package/src/adapters/index.js +2 -8
  33. package/src/adapters/node/create-app.d.ts +8 -3
  34. package/src/adapters/node/create-app.js +126 -84
  35. package/src/adapters/node/http-request-bridge.js +147 -106
  36. package/src/adapters/node/node-client-bridge.d.ts +1 -0
  37. package/src/adapters/node/node-client-bridge.js +62 -61
  38. package/src/adapters/node/node-hmr-manager.d.ts +1 -1
  39. package/src/adapters/node/node-hmr-manager.js +58 -48
  40. package/src/adapters/node/runtime-host.d.ts +1 -1
  41. package/src/adapters/node/runtime-host.js +96 -89
  42. package/src/adapters/node/server-adapter-dependencies.js +18 -17
  43. package/src/adapters/node/server-adapter.d.ts +63 -23
  44. package/src/adapters/node/server-adapter.js +346 -297
  45. package/src/adapters/node/static-content-server.d.ts +1 -0
  46. package/src/adapters/node/static-content-server.js +172 -183
  47. package/src/adapters/node/static-preview-host.d.ts +1 -1
  48. package/src/adapters/node/static-preview-host.js +88 -64
  49. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  50. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  51. package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
  52. package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
  53. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
  54. package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
  55. package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
  56. package/src/adapters/shared/http/api-request-pipeline.js +132 -0
  57. package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
  58. package/src/adapters/shared/http/api-response.js +79 -0
  59. package/src/adapters/shared/http/create-body-response.d.ts +12 -0
  60. package/src/adapters/shared/http/create-body-response.js +26 -0
  61. package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
  62. package/src/adapters/shared/http/define-api-handler.js +49 -0
  63. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  64. package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
  65. package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
  66. package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
  67. package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
  68. package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
  69. package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
  70. package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
  71. package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
  72. package/src/adapters/shared/http/fs-server-response-matcher.js +258 -0
  73. package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
  74. package/src/adapters/shared/http/run-middleware-chain.js +17 -0
  75. package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
  76. package/src/adapters/shared/runtime/application-adapter.js +75 -0
  77. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
  78. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
  79. package/src/adapters/shared/runtime/copy-runtime-public-dir.d.ts +6 -0
  80. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
  81. package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
  82. package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
  83. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  84. package/src/adapters/shared/runtime/port-manager.js +226 -0
  85. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  86. package/src/adapters/shared/runtime/render-context.js +99 -0
  87. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -3
  88. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
  89. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
  90. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
  91. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
  92. package/src/adapters/shared/runtime/server-adapter.js +301 -0
  93. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  94. package/src/adapters/shared/runtime/server-route-handler.js +77 -0
  95. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +27 -35
  96. package/src/adapters/shared/runtime/server-static-builder.js +172 -0
  97. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  98. package/src/adapters/shared/ws/node-http-websocket-upgrades.d.ts +21 -0
  99. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
  100. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  101. package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
  102. package/src/build/README.md +191 -31
  103. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  104. package/src/build/app-build-manifest-runtime.js +145 -0
  105. package/src/build/browser/browser-runtime-manifest.js +58 -0
  106. package/src/build/browser/browser-runtime-plugin-helpers.js +34 -0
  107. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +1 -1
  108. package/src/build/browser/browser-runtime-plugin.js +216 -0
  109. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  110. package/src/build/browser/jsx-ownership-plugins.js +55 -0
  111. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  112. package/src/build/browser/lit-static-render-worker-context.js +4 -0
  113. package/src/build/build-adapter.d.ts +29 -334
  114. package/src/build/build-adapter.js +273 -237
  115. package/src/build/cache/build-input-fingerprint.d.ts +28 -0
  116. package/src/build/cache/build-input-fingerprint.js +33 -0
  117. package/src/build/cache/cache-constants.d.ts +4 -0
  118. package/src/build/cache/cache-constants.js +4 -0
  119. package/src/build/cache/cache-keys.d.ts +22 -0
  120. package/src/build/cache/cache-keys.js +71 -0
  121. package/src/build/cache/pages-unified-graph-build.d.ts +31 -0
  122. package/src/build/cache/pages-unified-graph-build.js +199 -0
  123. package/src/build/cache/production-build-cache.d.ts +21 -0
  124. package/src/build/cache/production-build-cache.js +56 -0
  125. package/src/build/cache/server-entry-build-cache.d.ts +43 -0
  126. package/src/build/cache/server-entry-build-cache.js +153 -0
  127. package/src/build/contracts/build-contracts.d.ts +96 -0
  128. package/src/build/contracts/build-contracts.js +1 -0
  129. package/src/build/contracts/build-manifest.d.ts +90 -0
  130. package/src/build/contracts/build-manifest.js +64 -0
  131. package/src/build/contracts/build-types.js +1 -0
  132. package/src/build/contracts/content-virtual-modules.d.ts +12 -0
  133. package/src/build/contracts/content-virtual-modules.js +29 -0
  134. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
  135. package/src/build/rolldown/rolldown-adapter-helpers.js +458 -0
  136. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  137. package/src/build/rolldown/rolldown-build-adapter.js +57 -0
  138. package/src/build/rolldown/rolldown-build-invocation-metrics.d.ts +12 -0
  139. package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
  140. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
  141. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  142. package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
  143. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  144. package/src/build/rolldown/runtime-build-output-normalizer.d.ts +10 -0
  145. package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
  146. package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
  147. package/src/build/runtime/build-profile-options.d.ts +7 -0
  148. package/src/build/runtime/build-profile-options.js +37 -0
  149. package/src/build/runtime/build-request-identity.d.ts +17 -0
  150. package/src/build/runtime/build-request-identity.js +79 -0
  151. package/src/build/runtime/build-request-policy.d.ts +58 -0
  152. package/src/build/runtime/build-request-policy.js +84 -0
  153. package/src/build/runtime/build-runtime.d.ts +28 -0
  154. package/src/build/runtime/build-runtime.js +75 -0
  155. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  156. package/src/build/runtime/deduping-build-executor.js +40 -0
  157. package/src/build/runtime/parallel-build-executor.d.ts +21 -0
  158. package/src/build/runtime/parallel-build-executor.js +60 -0
  159. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  160. package/src/build/runtime/serialized-build-executor.js +79 -0
  161. package/src/cache/index.d.ts +2 -1
  162. package/src/cache/index.js +7 -6
  163. package/src/cache/module-parse-cache.d.ts +5 -0
  164. package/src/cache/module-parse-cache.js +122 -67
  165. package/src/cache/module-transform-profiler.d.ts +8 -0
  166. package/src/cache/module-transform-profiler.js +8 -0
  167. package/src/client/navigation-scripts/classification.d.ts +16 -0
  168. package/src/client/navigation-scripts/classification.js +49 -0
  169. package/src/client/navigation-scripts/index.d.ts +3 -0
  170. package/src/client/navigation-scripts/index.js +3 -0
  171. package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
  172. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
  173. package/src/client/navigation-scripts/registry.d.ts +11 -0
  174. package/src/client/navigation-scripts/registry.js +16 -0
  175. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  176. package/src/client/navigation-scripts/rerun-queue.js +90 -0
  177. package/src/client/scroll.d.ts +17 -0
  178. package/src/client/scroll.js +33 -0
  179. package/src/client/scroll.test.browser.d.ts +1 -0
  180. package/src/client/scroll.test.browser.js +31 -0
  181. package/src/client/view-transitions.d.ts +32 -0
  182. package/src/client/view-transitions.js +120 -0
  183. package/src/client/view-transitions.test.browser.d.ts +1 -0
  184. package/src/client/view-transitions.test.browser.js +56 -0
  185. package/src/config/config-builder.d.ts +40 -10
  186. package/src/config/config-builder.js +647 -600
  187. package/src/config/constants.d.ts +1 -0
  188. package/src/config/constants.js +44 -23
  189. package/src/declarations.d.ts +1 -0
  190. package/src/dev/README.md +24 -0
  191. package/src/dev/client-bridge-registry.d.ts +5 -0
  192. package/src/dev/client-bridge-registry.js +10 -0
  193. package/src/dev/dev-client-ownership.d.ts +7 -0
  194. package/src/dev/dev-client-ownership.js +8 -0
  195. package/src/dev/hmr-manager-registry.d.ts +8 -0
  196. package/src/dev/hmr-manager-registry.js +10 -0
  197. package/src/dev/host-runtime.d.ts +3 -0
  198. package/src/dev/host-runtime.js +25 -23
  199. package/src/dev/runtime-server-started-message.d.ts +2 -0
  200. package/src/dev/runtime-server-started-message.js +3 -0
  201. package/src/dev/sc-server.js +106 -103
  202. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  203. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  204. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  205. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  206. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  207. package/src/dev/transform-server/dev-transform-import-rewriter.js +126 -0
  208. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  209. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  210. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  211. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  212. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  213. package/src/dev/transform-server/dev-transform-server.js +191 -0
  214. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  215. package/src/dev/transform-server/dev-transform-url.js +58 -0
  216. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
  217. package/src/dev/transform-server/dev-transform-vendor-registry.js +158 -0
  218. package/src/dev/transform-server/index.d.ts +6 -0
  219. package/src/dev/transform-server/index.js +4 -0
  220. package/src/dev/transform-server/types.d.ts +15 -0
  221. package/src/dev/transform-server/types.js +1 -0
  222. package/src/dev-toolbar/README.md +52 -0
  223. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  224. package/src/dev-toolbar/define-dev-tool.js +9 -0
  225. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  226. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  227. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  228. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  229. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  230. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  231. package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
  232. package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
  233. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  234. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  235. package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
  236. package/src/dev-toolbar/dev-toolbar-package.js +78 -0
  237. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  238. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  239. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  240. package/src/diagnostics/request-build-dedupe.js +39 -0
  241. package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
  242. package/src/diagnostics/request-pipeline-metrics.js +121 -0
  243. package/src/diagnostics/startup-trace.d.ts +81 -0
  244. package/src/diagnostics/startup-trace.js +281 -0
  245. package/src/eco/README.md +17 -0
  246. package/src/eco/component-identity.d.ts +13 -0
  247. package/src/eco/component-identity.js +18 -0
  248. package/src/eco/eco-declared-component.d.ts +15 -0
  249. package/src/eco/eco-declared-component.js +23 -0
  250. package/src/eco/eco.browser.js +63 -70
  251. package/src/eco/eco.js +163 -97
  252. package/src/eco/eco.types.d.ts +47 -8
  253. package/src/eco/eco.types.js +5 -0
  254. package/src/eco/eco.utils.d.ts +1 -1
  255. package/src/eco/eco.utils.js +1 -10
  256. package/src/eco/global-injector-map.js +55 -41
  257. package/src/eco/lazy-injector-map.js +90 -60
  258. package/src/eco/module-dependencies.js +52 -44
  259. package/src/eco/page-layout-normalization.d.ts +21 -0
  260. package/src/eco/page-layout-normalization.js +69 -0
  261. package/src/env.d.ts +2 -0
  262. package/src/errors/http-error.d.ts +8 -0
  263. package/src/errors/http-error.js +66 -49
  264. package/src/errors/index.d.ts +1 -0
  265. package/src/errors/index.js +3 -6
  266. package/src/errors/locals-access-error.js +5 -8
  267. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  268. package/src/errors/undeclared-component-dependency-error.js +17 -0
  269. package/src/global/app-logger.js +3 -6
  270. package/src/hmr/README.md +21 -0
  271. package/src/hmr/client/hmr-runtime.js +119 -110
  272. package/src/hmr/client/module-update.d.ts +13 -0
  273. package/src/hmr/client/module-update.js +39 -0
  274. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  275. package/src/hmr/hmr-asset-paths.js +22 -0
  276. package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
  277. package/src/hmr/hmr-entrypoint-output.js +34 -0
  278. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  279. package/src/hmr/hmr-file-change-prep.js +14 -0
  280. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  281. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  282. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  283. package/src/hmr/hmr-runtime-paths.js +13 -0
  284. package/src/hmr/hmr-strategy.d.ts +9 -0
  285. package/src/hmr/hmr-strategy.js +113 -42
  286. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  287. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
  288. package/src/hmr/strategies/js-hmr-strategy.js +107 -167
  289. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  290. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
  291. package/src/index.browser.d.ts +1 -0
  292. package/src/index.browser.js +2 -4
  293. package/src/index.d.ts +4 -1
  294. package/src/index.js +7 -21
  295. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -6
  296. package/src/integrations/ghtml/ghtml-renderer.js +12 -56
  297. package/src/integrations/ghtml/ghtml.constants.js +1 -4
  298. package/src/integrations/ghtml/ghtml.plugin.d.ts +3 -16
  299. package/src/integrations/ghtml/ghtml.plugin.js +10 -20
  300. package/src/islands/README.md +25 -0
  301. package/src/islands/island-host.d.ts +37 -0
  302. package/src/islands/island-host.js +55 -0
  303. package/src/plugins/README.md +2 -1
  304. package/src/plugins/alias-resolver-cache.d.ts +6 -9
  305. package/src/plugins/alias-resolver-cache.js +114 -97
  306. package/src/plugins/alias-resolver-plugin.d.ts +3 -3
  307. package/src/plugins/alias-resolver-plugin.js +35 -62
  308. package/src/plugins/define-integration.d.ts +26 -0
  309. package/src/plugins/define-integration.js +20 -0
  310. package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
  311. package/src/plugins/eco-component-meta-plugin.js +120 -162
  312. package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
  313. package/src/plugins/foreign-jsx-override-plugin.js +49 -37
  314. package/src/plugins/integration-plugin.d.ts +43 -14
  315. package/src/plugins/integration-plugin.js +212 -190
  316. package/src/plugins/jsx-import-source.utils.d.ts +8 -0
  317. package/src/plugins/jsx-import-source.utils.js +21 -0
  318. package/src/plugins/processor.d.ts +71 -12
  319. package/src/plugins/processor.js +168 -130
  320. package/src/plugins/runtime-capability.js +1 -0
  321. package/src/plugins/source-transform.d.ts +32 -1
  322. package/src/plugins/source-transform.js +112 -60
  323. package/src/plugins/tsconfig-import-resolver.d.ts +35 -0
  324. package/src/plugins/tsconfig-import-resolver.js +235 -0
  325. package/src/route-renderer/GRAPH.md +26 -32
  326. package/src/route-renderer/README.md +54 -33
  327. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  328. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
  329. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
  330. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
  331. package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
  332. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
  333. package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +17 -7
  334. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +191 -0
  335. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
  336. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
  337. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
  338. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
  339. package/src/route-renderer/orchestration/integration-renderer.d.ts +41 -151
  340. package/src/route-renderer/orchestration/integration-renderer.js +798 -988
  341. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
  342. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
  343. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
  344. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
  345. package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
  346. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
  347. package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
  348. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
  349. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
  350. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
  351. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
  352. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
  353. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
  354. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
  355. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
  356. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
  357. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
  358. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
  359. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
  360. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +232 -0
  361. package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
  362. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
  363. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
  364. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
  365. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
  366. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
  367. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
  368. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
  369. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
  370. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
  371. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
  372. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
  373. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
  374. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +49 -0
  375. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
  376. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
  377. package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
  378. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
  379. package/src/route-renderer/orchestration/string-markup-renderer.d.ts +14 -0
  380. package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
  381. package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
  382. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  383. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  384. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
  385. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
  386. package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
  387. package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
  388. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  389. package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
  390. package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
  391. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  392. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  393. package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
  394. package/src/route-renderer/page-loading/page-module-loader.js +136 -124
  395. package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
  396. package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
  397. package/src/route-renderer/route-renderer.js +74 -76
  398. package/src/router/README.md +31 -0
  399. package/src/router/client/link-intent.d.ts +11 -21
  400. package/src/router/client/link-intent.js +56 -30
  401. package/src/router/client/link-intent.test.browser.js +50 -39
  402. package/src/router/client/link-navigation-policy.d.ts +45 -0
  403. package/src/router/client/link-navigation-policy.js +122 -0
  404. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  405. package/src/router/client/link-navigation-policy.test.browser.js +82 -0
  406. package/src/router/client/navigation-coordinator.d.ts +1 -1
  407. package/src/router/client/navigation-coordinator.js +235 -201
  408. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  409. package/src/router/client/navigation-lifecycle.js +50 -0
  410. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  411. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  412. package/src/router/server/route-registry.js +237 -242
  413. package/src/services/README.md +5 -0
  414. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  415. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
  416. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +7 -1
  417. package/src/services/assets/asset-processing-service/asset-processing.service.js +308 -268
  418. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  419. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  420. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  421. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -1
  422. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -45
  423. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  424. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
  425. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +4 -2
  426. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -38
  427. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  428. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
  429. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  430. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
  431. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  432. package/src/services/assets/asset-processing-service/index.js +8 -6
  433. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  434. package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
  435. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  436. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
  437. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  438. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  439. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  440. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  441. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  442. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
  443. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  444. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  445. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
  446. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  447. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
  448. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -121
  449. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  450. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
  451. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  452. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
  453. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  454. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
  455. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  456. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
  457. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  458. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
  459. package/src/services/assets/browser-bundle.service.d.ts +28 -30
  460. package/src/services/assets/browser-bundle.service.js +54 -40
  461. package/src/services/cache/cache.types.d.ts +4 -2
  462. package/src/services/cache/cache.types.js +5 -0
  463. package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
  464. package/src/services/cache/html-page-cache-dependency-index.js +88 -0
  465. package/src/services/cache/index.d.ts +2 -0
  466. package/src/services/cache/index.js +8 -7
  467. package/src/services/cache/memory-cache-store.js +101 -89
  468. package/src/services/cache/page-cache-service.d.ts +31 -1
  469. package/src/services/cache/page-cache-service.js +237 -150
  470. package/src/services/cache/page-request-cache-coordinator.service.js +106 -102
  471. package/src/services/html/html-rewriter-provider.service.js +61 -61
  472. package/src/services/html/html-transformer.service.d.ts +1 -1
  473. package/src/services/html/html-transformer.service.js +249 -266
  474. package/src/services/invalidation/development-invalidation.service.d.ts +25 -2
  475. package/src/services/invalidation/development-invalidation.service.js +239 -175
  476. package/src/services/module-loading/README.md +52 -0
  477. package/src/services/module-loading/app-module-loader.service.js +1 -0
  478. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  479. package/src/services/module-loading/app-server-module-transpiler.service.js +103 -118
  480. package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
  481. package/src/services/module-loading/collection-server-module-build.service.js +83 -0
  482. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  483. package/src/services/module-loading/module-loading-types.js +1 -0
  484. package/src/services/module-loading/page-module-import.service.d.ts +11 -13
  485. package/src/services/module-loading/page-module-import.service.js +222 -184
  486. package/src/services/module-loading/route-module-build-cache-registry.d.ts +24 -0
  487. package/src/services/module-loading/route-module-build-cache-registry.js +51 -0
  488. package/src/services/module-loading/route-module-build-cache.d.ts +4 -0
  489. package/src/services/module-loading/route-module-build-cache.js +3 -0
  490. package/src/services/module-loading/route-module-build-cache.store.d.ts +57 -0
  491. package/src/services/module-loading/route-module-build-cache.store.js +202 -0
  492. package/src/services/module-loading/route-module-build-manifest.d.ts +57 -0
  493. package/src/services/module-loading/route-module-build-manifest.js +60 -0
  494. package/src/services/module-loading/route-module-dependency-hasher.d.ts +81 -0
  495. package/src/services/module-loading/route-module-dependency-hasher.js +148 -0
  496. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
  497. package/src/services/module-loading/server-module-transpiler.service.js +65 -62
  498. package/src/services/module-loading/source-module-support.js +15 -7
  499. package/src/services/runtime-state/dev-graph.service.js +165 -157
  500. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  501. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  502. package/src/services/validation/schema-validation-service.d.ts +1 -4
  503. package/src/services/validation/schema-validation-service.js +156 -95
  504. package/src/services/validation/standard-schema.types.d.ts +9 -62
  505. package/src/services/validation/standard-schema.types.js +1 -0
  506. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  507. package/src/services/validation/validate-standard-schema.js +14 -0
  508. package/src/static-site-generator/README.md +41 -0
  509. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
  510. package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
  511. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  512. package/src/static-site-generator/sitemap-routes.js +36 -0
  513. package/src/static-site-generator/sitemap.d.ts +15 -0
  514. package/src/static-site-generator/sitemap.js +42 -0
  515. package/src/static-site-generator/static-build-invalidation.d.ts +10 -0
  516. package/src/static-site-generator/static-build-invalidation.js +37 -0
  517. package/src/static-site-generator/static-export-context.d.ts +30 -0
  518. package/src/static-site-generator/static-export-context.js +1 -0
  519. package/src/static-site-generator/static-site-generator.d.ts +43 -25
  520. package/src/static-site-generator/static-site-generator.js +536 -294
  521. package/src/types/internal-types.d.ts +59 -13
  522. package/src/types/internal-types.js +1 -0
  523. package/src/types/public-types.d.ts +310 -95
  524. package/src/types/public-types.js +1 -0
  525. package/src/utils/deep-merge.js +39 -26
  526. package/src/utils/ecopages-route-info.d.ts +26 -0
  527. package/src/utils/ecopages-route-info.js +30 -0
  528. package/src/utils/hash.js +3 -6
  529. package/src/utils/html-escaping.d.ts +7 -0
  530. package/src/utils/html-escaping.js +22 -5
  531. package/src/utils/html.js +1 -4
  532. package/src/utils/invariant.js +11 -10
  533. package/src/utils/locals-utils.js +32 -22
  534. package/src/utils/parse-cli-args.d.ts +2 -0
  535. package/src/utils/parse-cli-args.js +73 -59
  536. package/src/utils/path-pattern.d.ts +23 -0
  537. package/src/utils/path-pattern.js +42 -0
  538. package/src/utils/path-utils.module.js +8 -11
  539. package/src/utils/resolve-entry-file.js +70 -38
  540. package/src/utils/resolve-work-dir.js +23 -27
  541. package/src/utils/runtime.js +24 -33
  542. package/src/utils/server-utils.module.d.ts +3 -2
  543. package/src/utils/server-utils.module.js +60 -53
  544. package/src/utils/static-file-extensions.d.ts +12 -0
  545. package/src/utils/static-file-extensions.js +54 -0
  546. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  547. package/src/watchers/project-watcher-ignore.js +17 -0
  548. package/src/watchers/project-watcher.d.ts +29 -6
  549. package/src/watchers/project-watcher.js +402 -257
  550. package/src/watchers/project-watcher.test-helpers.js +45 -50
  551. package/src/adapters/shared/api-response.js +0 -96
  552. package/src/adapters/shared/application-adapter.js +0 -90
  553. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  554. package/src/adapters/shared/define-api-handler.js +0 -15
  555. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  556. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  557. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  558. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  559. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  560. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  561. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  562. package/src/adapters/shared/hmr-html-response.js +0 -33
  563. package/src/adapters/shared/render-context.js +0 -93
  564. package/src/adapters/shared/runtime-app-bootstrap.js +0 -46
  565. package/src/adapters/shared/runtime-host.js +0 -0
  566. package/src/adapters/shared/server-adapter.js +0 -436
  567. package/src/adapters/shared/server-route-handler.js +0 -111
  568. package/src/adapters/shared/server-static-builder.js +0 -162
  569. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
  570. package/src/adapters/shared/shared-hmr-manager.js +0 -241
  571. package/src/adapters/shared/static-preview-host.js +0 -0
  572. package/src/build/browser-runtime-manifest.js +0 -61
  573. package/src/build/browser-runtime-plugin-helpers.js +0 -14
  574. package/src/build/browser-runtime-plugin.js +0 -173
  575. package/src/build/build-manifest.d.ts +0 -33
  576. package/src/build/build-manifest.js +0 -49
  577. package/src/build/build-types.js +0 -0
  578. package/src/build/rolldown-adapter-helpers.js +0 -265
  579. package/src/build/rolldown-build-adapter.js +0 -65
  580. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  581. package/src/build/rolldown-dev-build-adapter.js +0 -166
  582. package/src/build/rolldown-plugin-bridge.js +0 -199
  583. package/src/build/runtime-build-executor.d.ts +0 -21
  584. package/src/build/runtime-build-executor.js +0 -19
  585. package/src/build/runtime-build-output-normalizer.d.ts +0 -3
  586. package/src/build/runtime-build-output-normalizer.js +0 -111
  587. package/src/build/serialized-build-executor.js +0 -63
  588. package/src/build/server-side-css-shim-plugin.js +0 -35
  589. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  590. package/src/hmr/hmr.test.e2e.js +0 -43
  591. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  592. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  593. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  594. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -233
  595. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  596. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  597. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  598. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  599. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  600. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  601. package/src/route-renderer/orchestration/render-output.utils.js +0 -171
  602. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
  603. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  604. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  605. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  606. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  607. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  608. /package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +0 -0
  609. /package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +0 -0
  610. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  611. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -1,21 +1,96 @@
1
1
  import type { Readable } from 'node:stream';
2
- import type { ApiResponseBuilder } from '../adapters/shared/api-response.js';
3
- import type { BuildExecutor } from '../build/build-adapter.js';
4
- import type { EcoBuildPlugin } from '../build/build-types.js';
5
- import type { ForeignChildRuntime } from '../route-renderer/orchestration/component-render-context.js';
2
+ import type { ComponentIdentity } from '../eco/component-identity.js';
3
+ import type { ApiResponseBuilder } from '../adapters/shared/http/api-response.js';
4
+ import type { ForeignChildRuntime } from '../route-renderer/orchestration/foreign-child/component-render-context.js';
6
5
  import type { EcoPageComponent } from '../eco/eco.types.js';
7
6
  import type { EcoPagesAppConfig } from './internal-types.js';
8
7
  import type { HmrStrategy } from '../hmr/hmr-strategy.js';
9
- import type { BrowserBundleExecutor } from '../services/assets/browser-bundle.service.js';
10
8
  import type { AssetDefinition, ProcessedAsset } from '../services/assets/asset-processing-service/assets.types.js';
11
9
  import type { CacheStats, CacheStrategy } from '../services/cache/cache.types.js';
12
10
  import type { InteractionEventsString as ScriptsInjectorInteractionEventsString } from '@ecopages/scripts-injector/types';
13
11
  import type { EntrypointDependencyGraph } from '../services/runtime-state/entrypoint-dependency-graph.service.js';
12
+ import type { DevTransformBundleContributor } from '../dev/transform-server/types.js';
14
13
  export type { EcoPagesAppConfig } from './internal-types.js';
15
- export type { EcoPageComponent } from '../eco/eco.types.js';
14
+ export type { EcoPageComponent, GetPageDependencies, GetPageDependenciesContext, PageDependenciesResult, } from '../eco/eco.types.js';
16
15
  export type { ProcessedAsset } from '../services/assets/asset-processing-service/assets.types.js';
17
- import type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput } from '../services/validation/standard-schema.types.js';
18
- export type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput, ForeignChildRuntime, };
16
+ /**
17
+ * Runtime-agnostic incoming WebSocket frame.
18
+ *
19
+ * Both Bun and Node `ws` deliver text and binary frames; this discriminated
20
+ * union lets handlers deal with both without runtime-specific casts.
21
+ */
22
+ export type IncomingWebSocketMessage = {
23
+ readonly kind: 'text';
24
+ readonly text: string;
25
+ } | {
26
+ readonly kind: 'binary';
27
+ readonly data: Uint8Array;
28
+ };
29
+ /**
30
+ * Runtime-agnostic outgoing WebSocket payload.
31
+ *
32
+ * Strings are sent as text frames. Anything binary-shaped is sent as binary
33
+ * frames. `Blob` is included for cross-runtime parity and is normalized to a
34
+ * binary frame by each adapter.
35
+ */
36
+ export type OutgoingWebSocketMessage = string | Uint8Array | ArrayBuffer | ArrayBufferView | Blob;
37
+ /**
38
+ * Close event delivered to `onClose` after a connection terminates.
39
+ */
40
+ export interface WebSocketCloseInfo {
41
+ readonly code: number;
42
+ readonly reason: string;
43
+ readonly wasClean: boolean;
44
+ }
45
+ /**
46
+ * Input passed to a WebSocket handler's `context()` factory.
47
+ *
48
+ * Adapters call `context()` exactly once per accepted upgrade. The returned
49
+ * value becomes `socket.context` and is shared by all lifecycle hooks.
50
+ */
51
+ export interface WebSocketContextFactoryInput<TParams extends Record<string, string> = Record<string, string>> {
52
+ readonly request: Request;
53
+ readonly kind: string;
54
+ readonly params: TParams;
55
+ readonly search: Readonly<Record<string, string>>;
56
+ readonly locals?: RequestLocals;
57
+ }
58
+ /**
59
+ * Runtime-agnostic WebSocket socket view exposed to handlers.
60
+ *
61
+ * Framework-owned fields:
62
+ * - `kind`: the registered route pattern (e.g. '/ws/chat/:roomId')
63
+ * - `params`: dynamic segments captured at match time
64
+ * - `search`: query string, always string-typed
65
+ *
66
+ * App-owned field:
67
+ * - `context`: returned by the handler's `context()` factory
68
+ */
69
+ export interface EcopagesSocket<TContext = unknown, TParams extends Record<string, string> = Record<string, string>> {
70
+ readonly kind: string;
71
+ readonly params: TParams;
72
+ readonly search: Readonly<Record<string, string>>;
73
+ readonly context: TContext;
74
+ send(message: OutgoingWebSocketMessage): void;
75
+ sendStream(stream: ReadableStream<Uint8Array>): Promise<void>;
76
+ close(code?: number, reason?: string): void;
77
+ }
78
+ /**
79
+ * Connection-lifecycle handler object.
80
+ *
81
+ * All hooks are optional. `context()` is the one-time initializer that
82
+ * produces the per-connection state shared by the lifecycle hooks. Returning
83
+ * a rejected promise from `context()` aborts the upgrade.
84
+ */
85
+ export interface EcopagesWebSocketHandler<TContext = unknown, TParams extends Record<string, string> = Record<string, string>> {
86
+ context?(input: WebSocketContextFactoryInput<TParams>): TContext | Promise<TContext>;
87
+ onConnect?(socket: EcopagesSocket<TContext, TParams>): void | Promise<void>;
88
+ onMessage?(socket: EcopagesSocket<TContext, TParams>, message: IncomingWebSocketMessage): void | Promise<void>;
89
+ onClose?(socket: EcopagesSocket<TContext, TParams>, event: WebSocketCloseInfo): void | Promise<void>;
90
+ onError?(socket: EcopagesSocket<TContext, TParams>, error: unknown): void | Promise<void>;
91
+ }
92
+ import type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput, StandardSchemaV1 } from '../services/validation/standard-schema.types.js';
93
+ export type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput, StandardSchemaV1, ForeignChildRuntime, };
19
94
  export type InteractionEventsString = ScriptsInjectorInteractionEventsString;
20
95
  export type DependencyLazyTrigger = {
21
96
  'on:idle': true;
@@ -88,21 +163,14 @@ export interface CacheInvalidator {
88
163
  }
89
164
  /**
90
165
  * Context interface for HMR strategies.
91
- * Provides access to watched files, registered bare-specifier mappings, and build configuration.
166
+ * Provides access to registered entrypoints and build configuration.
92
167
  */
93
168
  export interface DefaultHmrContext {
94
169
  /**
95
- * Map of registered entrypoints to their output URLs.
170
+ * Map of registered entrypoint source paths to their dev-transform output URLs.
96
171
  */
97
172
  getWatchedFiles(): Map<string, string>;
98
- /**
99
- * Directory where HMR bundles are written.
100
- */
101
- getDistDir(): string;
102
- /**
103
- * Build plugins to use during bundling.
104
- */
105
- getPlugins(): EcoBuildPlugin[];
173
+ getRegisteredEntrypoints(): ReadonlyMap<string, ResolvedHmrEntrypoint>;
106
174
  /**
107
175
  * Absolute path to the source directory.
108
176
  */
@@ -117,14 +185,6 @@ export interface DefaultHmrContext {
117
185
  * Used by plugins to identify page files for transformation.
118
186
  */
119
187
  getPagesDir(): string;
120
- /**
121
- * Build executor owned by the active app/runtime.
122
- */
123
- getBuildExecutor(): BuildExecutor;
124
- /**
125
- * Browser bundler owned by the active app/runtime.
126
- */
127
- getBrowserBundleService(): BrowserBundleExecutor;
128
188
  /**
129
189
  * Server-side module loader owned by the active app/runtime.
130
190
  */
@@ -154,6 +214,22 @@ export type ClientBridgeEvent = {
154
214
  * Timestamp for cache busting
155
215
  */
156
216
  timestamp?: number;
217
+ /**
218
+ * Page Browser Graph identities invalidated by the originating file change.
219
+ */
220
+ graphIdentities?: Array<{
221
+ integrationName: string;
222
+ routeFile: string;
223
+ policy: 'development' | 'production';
224
+ entryFingerprint: string;
225
+ }>;
226
+ };
227
+ /**
228
+ * Options for handling a development file change through HMR.
229
+ */
230
+ export type HmrFileChangeOptions = {
231
+ broadcast?: boolean;
232
+ graphIdentities?: ClientBridgeEvent['graphIdentities'];
157
233
  };
158
234
  /**
159
235
  * Adapter-agnostic interface for broadcasting development events to connected clients.
@@ -167,40 +243,42 @@ export interface IClientBridge {
167
243
  error(message: string): void;
168
244
  subscriberCount: number;
169
245
  }
246
+ export interface ResolvedHmrEntrypoint {
247
+ sourcePath: string;
248
+ outputPath: string;
249
+ outputUrl: string;
250
+ role: 'page' | 'script';
251
+ }
170
252
  /**
171
253
  * Interface for the HMR Manager.
172
254
  * Used by integration plugins to register entrypoints and strategies.
173
255
  */
174
256
  export interface IHmrManager {
175
257
  /**
176
- * Registers an integration-owned client entrypoint to be built and watched.
258
+ * Registers a client entrypoint for dev-transform delivery and HMR watching.
177
259
  *
178
260
  * @remarks
179
- * This path is strict: the owning integration must emit the expected `_hmr`
180
- * bundle. Missing output is treated as a development pipeline failure.
261
+ * Returns a stable `/assets/__eco_dev__/…` URL immediately; the module is
262
+ * transpiled on the first browser request (per-file ESM, not a page bundle).
181
263
  */
182
264
  registerEntrypoint(entrypointPath: string): Promise<string>;
183
265
  /**
184
- * Registers a generic script asset entrypoint to be built and watched.
185
- *
186
- * @remarks
187
- * This path exists for non-page script assets that are not owned by a
188
- * framework integration. Unlike `registerEntrypoint()`, it may use the generic
189
- * script bundling path.
266
+ * Registers an integration contributor that supplies per-module transform plugins.
190
267
  */
191
- registerScriptEntrypoint(entrypointPath: string): Promise<string>;
268
+ registerDevTransformContributor(contributor: DevTransformBundleContributor): void;
269
+ registerScriptEntrypoint(entrypointPath: string): Promise<ResolvedHmrEntrypoint>;
192
270
  /**
193
271
  * Registers a custom HMR strategy.
194
272
  */
195
273
  registerStrategy(strategy: HmrStrategy): void;
196
- /**
197
- * Sets the build plugins to use during bundling.
198
- */
199
- setPlugins(plugins: EcoBuildPlugin[]): void;
200
274
  /**
201
275
  * Enables or disables HMR.
202
276
  */
203
277
  setEnabled(enabled: boolean): void;
278
+ /**
279
+ * Stops active HMR watchers and releases dev-time resources.
280
+ */
281
+ stop(): void;
204
282
  /**
205
283
  * Returns whether HMR is enabled.
206
284
  */
@@ -213,18 +291,30 @@ export interface IHmrManager {
213
291
  * Gets the output URL for a registered entrypoint.
214
292
  */
215
293
  getOutputUrl(entrypointPath: string): string | undefined;
294
+ /**
295
+ * Returns an existing emitted HMR script artifact without registering it.
296
+ */
297
+ getResolvedScriptOutput?(entrypointPath: string): ResolvedHmrEntrypoint | undefined;
216
298
  /**
217
299
  * Gets the map of watched files.
218
300
  */
219
301
  getWatchedFiles(): Map<string, string>;
220
302
  /**
221
- * Gets the HMR dist directory.
303
+ * Gets registered dev-transform entrypoints keyed by resolved source path.
222
304
  */
223
- getDistDir(): string;
305
+ getRegisteredEntrypoints(): ReadonlyMap<string, ResolvedHmrEntrypoint>;
224
306
  /**
225
- * Gets the build plugins.
307
+ * Gets the on-disk work directory for the bundled HMR client runtime.
226
308
  */
227
- getPlugins(): EcoBuildPlugin[];
309
+ getRuntimeWorkDir(): string;
310
+ /**
311
+ * Returns the on-disk path to the bundled HMR runtime script.
312
+ */
313
+ getRuntimePath(): string;
314
+ /**
315
+ * Serves a development HMR asset request when the URL matches a known HMR path.
316
+ */
317
+ tryHandleAssetRequest(request: Request): Response | null;
228
318
  /**
229
319
  * Gets the default HMR context.
230
320
  */
@@ -232,7 +322,7 @@ export interface IHmrManager {
232
322
  /**
233
323
  * Handles a file change event.
234
324
  */
235
- handleFileChange(path: string): Promise<void>;
325
+ handleFileChange(path: string, options?: HmrFileChangeOptions): Promise<void>;
236
326
  }
237
327
  /**
238
328
  * Represents the dependencies for an EcoComponent.
@@ -247,44 +337,43 @@ export type EcoComponentDependencies = {
247
337
  * to express explicit module imports for client bundles.
248
338
  */
249
339
  modules?: string[];
250
- components?: EcoComponent[];
340
+ /**
341
+ * Child components whose assets and foreign-child graph are collected transitively.
342
+ * Each entry must be an `eco.component()`, `eco.layout()`, or `eco.html()` result
343
+ * with bound component identity.
344
+ */
345
+ components?: EcoDeclaredComponent[];
251
346
  };
347
+ /**
348
+ * Component returned from `eco.component()`, `eco.layout()`, or `eco.html()`.
349
+ *
350
+ * @remarks
351
+ * Used for `dependencies.components` and eco factory return types. Bound
352
+ * component identity is enforced at runtime via `isEcoDeclaredComponent()`, not by this alias.
353
+ */
354
+ export type EcoDeclaredComponent<P = any, R = any> = EcoComponent<P, R>;
252
355
  export type EcoPagesElement = string | Promise<string>;
253
356
  /**
254
357
  * Serializable child payloads accepted by cross-integration deferred rendering.
255
358
  *
256
- * This models the broad value shapes that EcoPages already flattens when a
257
- * foreign component boundary serializes its children for another integration.
258
- * It is intentionally transport-oriented rather than framework-native, so it
259
- * can be shared across Kita, Lit, React, and Ecopages JSX authoring surfaces
260
- * without coupling core types to any one renderer.
359
+ * @remarks
360
+ * Covers primitives, arrays, and Kita/Lit-style template results (`strings` /
361
+ * optional `values`). Plain opaque objects are intentionally excluded; foreign
362
+ * composition boundaries reject them before serializers can coerce `String(object)`.
363
+ * Framework-native trees (React nodes, JSX elements) stay outside this type and
364
+ * use EcoEmbed or already-serialized HTML at the boundary.
261
365
  */
262
366
  export type EcoChildren = string | Promise<string> | number | bigint | boolean | null | undefined | readonly EcoChildren[] | {
263
367
  strings: readonly string[];
264
368
  values?: readonly EcoChildren[];
265
- } | {
266
- [key: string]: EcoChildren;
267
369
  };
268
370
  /**
269
371
  * Represents the input configuration for EcoPages.
270
372
  */
271
373
  export type EcoPagesConfig = Omit<Partial<EcoPagesAppConfig>, 'baseUrl' | 'derivedPaths' | 'templatesExt' | 'integrationsDependencies'> & Pick<EcoPagesAppConfig, 'baseUrl' | 'rootDir'>;
272
- /**
273
- * Internal metadata injected by eco-component-meta-plugin.
274
- * Contains component file path and integration info for dependency resolution.
275
- * @internal
276
- */
277
- export interface EcoInjectedMeta {
278
- /** Hashed identifier for client-side use (doesn't expose file paths) */
279
- id: string;
280
- /** Full file path of the component (use path.dirname() to get directory) */
281
- file: string;
282
- /** The integration identifier (e.g., 'react', 'kitajs', 'lit', 'ghtml', 'mdx') */
283
- integration: string;
284
- }
285
374
  export type EcoComponentConfig = {
286
- /** @internal Injected by eco-component-meta-plugin */
287
- __eco?: EcoInjectedMeta;
375
+ /** Canonical integration, module, and stable component attribution. */
376
+ identity?: ComponentIdentity;
288
377
  /**
289
378
  * Explicit integration override for this component.
290
379
  * When provided, this takes precedence over auto-detected integration metadata.
@@ -314,11 +403,13 @@ export type EcoComponentConfig = {
314
403
  * );
315
404
  *
316
405
  * // Page using the layout
317
- * const MyPage = () => <h1>Hello</h1>;
318
- * MyPage.config = { layout: Layout };
406
+ * const MyPage = eco.page({ layout: Layout, render: () => <h1>Hello</h1> });
319
407
  * ```
320
408
  */
321
- layout?: EcoPageLayoutComponent<any>;
409
+ /** Normalized outer→inner layout stack from `eco.page({ layout: [...] })`. */
410
+ layouts?: EcoDeclaredComponent[];
411
+ /** Layout entries retained for per-tier prop factories. */
412
+ layoutEntries?: EcoPageLayoutEntry[];
322
413
  dependencies?: EcoComponentDependencies;
323
414
  /**
324
415
  * Internal: Resolved lazy scripts grouped by trigger.
@@ -409,6 +500,21 @@ export type EcoComponent<P = any, R = any> = IsAny<P> extends true ? EcoFunction
409
500
  export type PageProps<T = unknown> = T & StaticPageContext & {
410
501
  locals?: RequestLocals;
411
502
  };
503
+ /**
504
+ * Page-level robots directives for the document head and sitemap filtering.
505
+ *
506
+ * @remarks
507
+ * When `index` is `false`, the page is omitted from the auto-generated sitemap
508
+ * for routes whose metadata can be resolved during static export (filesystem
509
+ * pages and `app.static()` views with `metadata`). Defaults when omitted:
510
+ * `index: true`, `follow: true`. A `<meta name="robots">` tag is emitted by the
511
+ * route HTML finalization path when directives differ from those defaults.
512
+ */
513
+ export interface PageRobotsMetadata {
514
+ index?: boolean;
515
+ follow?: boolean;
516
+ nocache?: boolean;
517
+ }
412
518
  /**
413
519
  * Represents the metadata for a page.
414
520
  */
@@ -418,6 +524,48 @@ export interface PageMetadataProps {
418
524
  image?: string;
419
525
  url?: string;
420
526
  keywords?: string[];
527
+ robots?: PageRobotsMetadata;
528
+ }
529
+ /**
530
+ * Configuration for automatic `sitemap.xml` generation during static export.
531
+ *
532
+ * @remarks
533
+ * Disabled by default. When enabled, the sitemap is written after
534
+ * `afterStaticExport` so integration-generated URLs can be listed via
535
+ * `extraUrls`. Use `exclude` for bulk pathname filters and `metadata.robots.index: false`
536
+ * for page-level noindex that also removes the URL from the sitemap when metadata
537
+ * is available during export.
538
+ */
539
+ export interface SitemapConfig {
540
+ /** Emit sitemap.xml during static generation. @default false */
541
+ enabled?: boolean;
542
+ /** Output file name. @default "sitemap.xml" */
543
+ fileName?: string;
544
+ /**
545
+ * Extra, non-page URLs to include (e.g. "/rss.xml").
546
+ *
547
+ * @remarks
548
+ * Relative paths are resolved against `baseUrl`. Absolute `http(s)` URLs pass
549
+ * through. Always appended after page URLs; not filtered by `exclude` or page robots.
550
+ */
551
+ extraUrls?: string[];
552
+ /**
553
+ * Pathname patterns to exclude even if a page exists.
554
+ *
555
+ * @remarks
556
+ * Supported patterns: exact paths (`/admin`) and prefix wildcards (`/admin/**`).
557
+ * Unsupported patterns are treated as exact matches. This is not a full glob engine.
558
+ */
559
+ exclude?: string[];
560
+ }
561
+ /**
562
+ * Slim route descriptor for static-export hooks and runtime consumers.
563
+ */
564
+ export interface EcopagesRouteInfo {
565
+ /** Resolved URL pathname, e.g. `/blog/my-post`. */
566
+ pathname: string;
567
+ /** Route params for dynamic routes (empty for static routes). */
568
+ params: Record<string, string>;
421
569
  }
422
570
  /**
423
571
  * Represents the props for the head of a page.
@@ -441,7 +589,46 @@ export interface HtmlTemplateProps<T = EcoPagesElement> extends PageHeadProps<T>
441
589
  language?: string;
442
590
  headContent?: T;
443
591
  pageProps: Record<string, unknown>;
592
+ /**
593
+ * Browser-importable page module URL for router-enabled documents.
594
+ *
595
+ * @remarks
596
+ * Transport-only: threaded into HTML shells (for example `EcoPropsScript`
597
+ * `moduleUrl`) and serialized as the page-data envelope `moduleUrl`. Not page
598
+ * component state.
599
+ */
600
+ pageModuleUrl?: string;
444
601
  }
602
+ /**
603
+ * Request-scoped context available to layout prop factories on `eco.page`.
604
+ */
605
+ export type LayoutPropsContext = {
606
+ params?: Record<string, string>;
607
+ query?: Record<string, string>;
608
+ locals?: RequestLocals;
609
+ };
610
+ /**
611
+ * One layout tier in a page layout stack (outer→inner).
612
+ */
613
+ export type EcoPageLayoutEntry<E = EcoPagesElement> = {
614
+ component: EcoDeclaredComponent<any, E>;
615
+ props?: (context: LayoutPropsContext) => Record<string, unknown>;
616
+ };
617
+ /**
618
+ * Layout declaration accepted by `eco.page()`.
619
+ *
620
+ * @remarks
621
+ * Array order is outer→inner, matching Next.js App Router segment nesting.
622
+ */
623
+ export type EcoPageLayoutSpec<E = EcoPagesElement> = EcoDeclaredComponent<any, E> | EcoPageLayoutEntry<E>;
624
+ /**
625
+ * One or more layout tiers for `eco.page({ layout })`.
626
+ *
627
+ * @remarks
628
+ * When an array, order is **outer → inner** (outermost layout wraps all inner tiers).
629
+ * Normalized at factory time to `config.layouts` and `config.layoutEntries`.
630
+ */
631
+ export type EcoPageLayouts<E = EcoPagesElement> = EcoPageLayoutSpec<E> | EcoPageLayoutSpec<E>[];
445
632
  /**
446
633
  * Layout components accepted by pages.
447
634
  *
@@ -458,12 +645,25 @@ export type EcoLayoutComponent<T = EcoPagesElement> = EcoComponent<LayoutProps<T
458
645
  */
459
646
  export type EcoHtmlComponent<T = EcoPagesElement> = EcoComponent<HtmlTemplateProps, T>;
460
647
  /**
461
- * Represents the props for the error 404 template.
648
+ * Props type for the semantic `404.*` page template.
649
+ * @remarks `message` and `stack` are declared for future error context. The
650
+ * runtime does not currently pass these props when rendering the custom 404 page.
462
651
  */
463
652
  export interface Error404TemplateProps extends Omit<HtmlTemplateProps, 'children'> {
464
653
  message: string;
465
654
  stack?: string;
466
655
  }
656
+ /**
657
+ * Props type for the semantic `500.*` page template.
658
+ * @remarks In development, the page-pipeline passes `message` and `stack` from the
659
+ * thrown error when rendering this page after a failure. In production those
660
+ * fields are omitted so stacks are not serialized into HTML. Direct visits to
661
+ * `/500` also omit them.
662
+ */
663
+ export interface Error500TemplateProps extends Omit<HtmlTemplateProps, 'children'> {
664
+ message?: string;
665
+ stack?: string;
666
+ }
467
667
  /**
468
668
  * Represents the parameters for a page.
469
669
  * The keys are strings, and the values can be either a string or an array of strings.
@@ -587,6 +787,20 @@ export type RouteRendererOptions = {
587
787
  params?: PageParams;
588
788
  query?: PageQuery;
589
789
  locals?: RequestLocals;
790
+ /**
791
+ * Preloaded page module from request-time inspection.
792
+ *
793
+ * @remarks
794
+ * When present, render preparation reuses this module instead of importing the
795
+ * page file again for the same request.
796
+ */
797
+ pageModule?: EcoPageFile;
798
+ /**
799
+ * Extra props merged into the page props for this render.
800
+ * @remarks Used by semantic error pages (for example development `message` /
801
+ * `stack` on the custom 500 page).
802
+ */
803
+ props?: Record<string, unknown>;
590
804
  };
591
805
  /**
592
806
  * The body of the route renderer.
@@ -599,6 +813,8 @@ export type RouteRenderResult = {
599
813
  body: RouteRendererBody;
600
814
  /** Cache strategy from page component's eco.page({ cache }) option */
601
815
  cacheStrategy?: CacheStrategy;
816
+ /** Source paths observed during render preparation for HTML cache invalidation. */
817
+ sourceDependencyPaths?: readonly string[];
602
818
  };
603
819
  /**
604
820
  * Represents the dependencies required for an integration plugin.
@@ -659,15 +875,19 @@ export type IntegrationRendererRenderOptions<C = EcoPagesElement> = RouteRendere
659
875
  metadata: PageMetadataProps;
660
876
  HtmlTemplate: EcoHtmlComponent<C>;
661
877
  Page: EcoComponent<PageProps, C>;
878
+ Layouts?: EcoDeclaredComponent[];
662
879
  Layout?: EcoPageLayoutComponent<any>;
880
+ layoutEntries?: EcoPageLayoutEntry[];
663
881
  dependencies?: EcoComponentDependencies;
882
+ /** @internal Resolved page dependencies carried through the render pipeline. */
883
+ resolvedPageDependencyComponents?: ReadonlyArray<EcoComponent | Partial<EcoComponent>>;
664
884
  resolvedDependencies: ProcessedAsset[];
665
885
  pagePackage?: PagePackageResult;
666
- componentRender?: ComponentRenderResult;
667
886
  pageProps?: Record<string, unknown>;
668
887
  cacheStrategy?: CacheStrategy;
669
888
  pageLocals?: RequestLocals;
670
- ownershipPlan?: OwnershipPlan;
889
+ /** @internal Source paths from render preparation for HTML cache dependency registration. */
890
+ sourceDependencyPaths?: readonly string[];
671
891
  };
672
892
  /**
673
893
  * Structured page asset package produced after dependency resolution.
@@ -732,10 +952,16 @@ export interface PageBrowserGraphResult {
732
952
  export type PageBrowserGraphContributionContext = {
733
953
  file: string;
734
954
  pageModule: EcoPageFile;
955
+ props?: Record<string, unknown>;
956
+ params?: PageParams;
957
+ query?: PageQuery;
958
+ dependencyInstanceKey?: string;
735
959
  };
736
960
  export interface PageBrowserGraphContribution {
737
961
  dependencies?: AssetDefinition[];
738
962
  assets?: ProcessedAsset[];
963
+ /** Source files that should invalidate this graph entry when they change. */
964
+ watchPaths?: string[];
739
965
  }
740
966
  export type OwnershipValidationErrorCode = 'UNKNOWN_INTEGRATION_OWNER' | 'MISSING_COMPONENT_METADATA';
741
967
  export interface OwnershipValidationError {
@@ -746,27 +972,6 @@ export interface OwnershipValidationError {
746
972
  integrationName?: string;
747
973
  }
748
974
  export type OwnershipPlanNodeSource = 'route' | 'page' | 'layout' | 'html-template' | 'dependency';
749
- export interface IntegrationOwnership {
750
- integrationName: string;
751
- componentId: string;
752
- componentFile?: string;
753
- isPageEntry: boolean;
754
- isForeignToParent: boolean;
755
- }
756
- export interface OwnershipPlanNode {
757
- id: string;
758
- source: OwnershipPlanNodeSource;
759
- ownership: IntegrationOwnership;
760
- children: OwnershipPlanNode[];
761
- declaredDependenciesValid: boolean;
762
- }
763
- export interface OwnershipPlan {
764
- root: OwnershipPlanNode;
765
- rendererNames: string[];
766
- foreignEdgeCount: number;
767
- hasValidationErrors: boolean;
768
- validationErrors: OwnershipValidationError[];
769
- }
770
975
  export type ForeignSubtreeAttachmentPolicy = {
771
976
  kind: 'none';
772
977
  } | {
@@ -790,6 +995,16 @@ export interface BaseIntegrationContext {
790
995
  rendererCache?: Map<string, unknown>;
791
996
  componentInstanceId?: string;
792
997
  }
998
+ /**
999
+ * Shared input for renderer-owned component execution.
1000
+ *
1001
+ * @remarks
1002
+ * `children` stays `unknown` at this boundary so integrations can receive
1003
+ * queued tokens, already-serialized HTML, or framework-native values before
1004
+ * their own placement rules apply. Opaque values must be rejected or converted
1005
+ * by foreign-child interception before string serializers run; adapters keep
1006
+ * framework-specific placement (React raw HTML, Lit slot markers).
1007
+ */
793
1008
  export interface ComponentRenderInput<TIntegrationContext extends BaseIntegrationContext = BaseIntegrationContext> {
794
1009
  component: EcoComponent;
795
1010
  props: Record<string, unknown>;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,32 +1,45 @@
1
+ /**
2
+ * This module contains a simple utility function to merge two objects deeply
3
+ * @module
4
+ */
1
5
  function isObject(item) {
2
- return item && typeof item === "object" && !Array.isArray(item);
6
+ return item && typeof item === 'object' && !Array.isArray(item);
3
7
  }
4
8
  function isArray(item) {
5
- return Array.isArray(item);
9
+ return Array.isArray(item);
6
10
  }
7
- function deepMerge(target, source) {
8
- if (isArray(target) && isArray(source)) {
9
- return [...target, ...source];
10
- }
11
- if (!isObject(target) || !isObject(source)) {
12
- return source;
13
- }
14
- const output = Object.assign({}, target);
15
- for (const key in source) {
16
- if (isObject(source[key])) {
17
- if (!target[key]) {
18
- Object.assign(output, { [key]: source[key] });
19
- } else {
20
- output[key] = deepMerge(target[key], source[key]);
21
- }
22
- } else if (isArray(source[key])) {
23
- output[key] = [...target[key] || [], ...source[key]];
24
- } else if (source[key] !== void 0) {
25
- Object.assign(output, { [key]: source[key] });
11
+ /**
12
+ * Deeply merges two objects or arrays
13
+ * @function deepMerge
14
+ * @template T - Type of target object
15
+ * @template U - Type of source object
16
+ * @param target - The target object to merge into
17
+ * @param source - The source object to merge from
18
+ * @returns A new object with merged properties
19
+ */
20
+ export function deepMerge(target, source) {
21
+ if (isArray(target) && isArray(source)) {
22
+ return [...target, ...source];
26
23
  }
27
- }
28
- return output;
24
+ if (!isObject(target) || !isObject(source)) {
25
+ return source;
26
+ }
27
+ const output = Object.assign({}, target);
28
+ for (const key in source) {
29
+ if (isObject(source[key])) {
30
+ if (!target[key]) {
31
+ Object.assign(output, { [key]: source[key] });
32
+ }
33
+ else {
34
+ output[key] = deepMerge(target[key], source[key]);
35
+ }
36
+ }
37
+ else if (isArray(source[key])) {
38
+ output[key] = [...(target[key] || []), ...source[key]];
39
+ }
40
+ else if (source[key] !== undefined) {
41
+ Object.assign(output, { [key]: source[key] });
42
+ }
43
+ }
44
+ return output;
29
45
  }
30
- export {
31
- deepMerge
32
- };