@ecopages/core 0.2.0-beta.9 → 0.2.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (624) hide show
  1. package/README.md +42 -13
  2. package/package.json +360 -57
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +57 -5
  5. package/src/adapters/abstract/application-adapter.js +261 -203
  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 +13 -2
  10. package/src/adapters/abstract/server-adapter.js +22 -14
  11. package/src/adapters/abstract/ws-pattern-matcher.d.ts +2 -50
  12. package/src/adapters/abstract/ws-pattern-matcher.js +24 -57
  13. package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
  14. package/src/adapters/bun/client-bridge.js +51 -50
  15. package/src/adapters/bun/create-app.d.ts +4 -6
  16. package/src/adapters/bun/create-app.js +169 -154
  17. package/src/adapters/bun/hmr-manager.d.ts +2 -3
  18. package/src/adapters/bun/hmr-manager.js +62 -57
  19. package/src/adapters/bun/index.d.ts +1 -1
  20. package/src/adapters/bun/index.js +2 -8
  21. package/src/adapters/bun/runtime-host.d.ts +1 -1
  22. package/src/adapters/bun/runtime-host.js +61 -54
  23. package/src/adapters/bun/server-adapter.d.ts +34 -53
  24. package/src/adapters/bun/server-adapter.js +557 -637
  25. package/src/adapters/bun/static-preview-host.d.ts +1 -1
  26. package/src/adapters/bun/static-preview-host.js +43 -41
  27. package/src/adapters/create-app.d.ts +1 -12
  28. package/src/adapters/create-app.js +11 -72
  29. package/src/adapters/index.d.ts +2 -2
  30. package/src/adapters/index.js +2 -8
  31. package/src/adapters/node/create-app.d.ts +4 -3
  32. package/src/adapters/node/create-app.js +123 -98
  33. package/src/adapters/node/http-request-bridge.js +147 -106
  34. package/src/adapters/node/node-client-bridge.js +62 -64
  35. package/src/adapters/node/node-hmr-manager.d.ts +2 -3
  36. package/src/adapters/node/node-hmr-manager.js +58 -48
  37. package/src/adapters/node/runtime-host.d.ts +1 -1
  38. package/src/adapters/node/runtime-host.js +96 -89
  39. package/src/adapters/node/server-adapter-dependencies.js +18 -17
  40. package/src/adapters/node/server-adapter.d.ts +28 -8
  41. package/src/adapters/node/server-adapter.js +349 -302
  42. package/src/adapters/node/static-content-server.js +172 -186
  43. package/src/adapters/node/static-preview-host.d.ts +1 -1
  44. package/src/adapters/node/static-preview-host.js +88 -64
  45. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  46. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  47. package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
  48. package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
  49. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
  50. package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
  51. package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
  52. package/src/adapters/shared/http/api-request-pipeline.js +132 -0
  53. package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
  54. package/src/adapters/shared/http/api-response.js +79 -0
  55. package/src/adapters/shared/http/create-body-response.d.ts +12 -0
  56. package/src/adapters/shared/http/create-body-response.js +26 -0
  57. package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
  58. package/src/adapters/shared/http/define-api-handler.js +49 -0
  59. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  60. package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
  61. package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
  62. package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
  63. package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
  64. package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
  65. package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
  66. package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
  67. package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
  68. package/src/adapters/shared/http/fs-server-response-matcher.js +260 -0
  69. package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
  70. package/src/adapters/shared/http/run-middleware-chain.js +17 -0
  71. package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
  72. package/src/adapters/shared/runtime/application-adapter.js +75 -0
  73. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
  74. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
  75. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
  76. package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
  77. package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
  78. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  79. package/src/adapters/shared/runtime/port-manager.js +226 -0
  80. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  81. package/src/adapters/shared/runtime/render-context.js +99 -0
  82. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -2
  83. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
  84. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
  85. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
  86. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
  87. package/src/adapters/shared/runtime/server-adapter.js +301 -0
  88. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  89. package/src/adapters/shared/runtime/server-route-handler.js +77 -0
  90. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +26 -31
  91. package/src/adapters/shared/runtime/server-static-builder.js +172 -0
  92. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  93. package/src/adapters/shared/{node-http-websocket-upgrades.d.ts → ws/node-http-websocket-upgrades.d.ts} +1 -1
  94. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
  95. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  96. package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
  97. package/src/build/README.md +165 -45
  98. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  99. package/src/build/app-build-manifest-runtime.js +145 -0
  100. package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +4 -0
  101. package/src/build/browser/browser-runtime-manifest.js +65 -0
  102. package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +3 -5
  103. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -0
  104. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +12 -13
  105. package/src/build/browser/browser-runtime-plugin.js +218 -0
  106. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  107. package/src/build/browser/jsx-ownership-plugins.js +55 -0
  108. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  109. package/src/build/browser/lit-static-render-worker-context.js +4 -0
  110. package/src/build/build-adapter.d.ts +25 -355
  111. package/src/build/build-adapter.js +258 -265
  112. package/src/build/{build-input-fingerprint.d.ts → cache/build-input-fingerprint.d.ts} +3 -3
  113. package/src/build/cache/build-input-fingerprint.js +33 -0
  114. package/src/build/cache/cache-constants.d.ts +4 -0
  115. package/src/build/cache/cache-constants.js +4 -0
  116. package/src/build/cache/cache-keys.d.ts +22 -0
  117. package/src/build/cache/cache-keys.js +71 -0
  118. package/src/build/{pages-unified-graph-build.d.ts → cache/pages-unified-graph-build.d.ts} +1 -1
  119. package/src/build/cache/pages-unified-graph-build.js +199 -0
  120. package/src/build/cache/production-build-cache.d.ts +21 -0
  121. package/src/build/cache/production-build-cache.js +56 -0
  122. package/src/build/{server-entry-build-cache.d.ts → cache/server-entry-build-cache.d.ts} +3 -4
  123. package/src/build/cache/server-entry-build-cache.js +153 -0
  124. package/src/build/contracts/build-contracts.d.ts +96 -0
  125. package/src/build/contracts/build-contracts.js +1 -0
  126. package/src/build/contracts/build-manifest.d.ts +90 -0
  127. package/src/build/contracts/build-manifest.js +64 -0
  128. package/src/build/contracts/build-types.js +1 -0
  129. package/src/build/contracts/content-virtual-modules.d.ts +12 -0
  130. package/src/build/contracts/content-virtual-modules.js +29 -0
  131. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
  132. package/src/build/rolldown/rolldown-adapter-helpers.js +463 -0
  133. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  134. package/src/build/rolldown/rolldown-build-adapter.js +57 -0
  135. package/src/build/{rolldown-build-invocation-metrics.d.ts → rolldown/rolldown-build-invocation-metrics.d.ts} +1 -1
  136. package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
  137. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +7 -2
  138. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  139. package/src/build/{rolldown-source-transform-pass.d.ts → rolldown/rolldown-source-transform-pass.d.ts} +1 -1
  140. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  141. package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
  142. package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
  143. package/src/build/runtime/build-profile-options.d.ts +7 -0
  144. package/src/build/runtime/build-profile-options.js +37 -0
  145. package/src/build/runtime/build-request-identity.d.ts +17 -0
  146. package/src/build/runtime/build-request-identity.js +79 -0
  147. package/src/build/runtime/build-request-policy.d.ts +58 -0
  148. package/src/build/runtime/build-request-policy.js +84 -0
  149. package/src/build/runtime/build-runtime.d.ts +28 -0
  150. package/src/build/runtime/build-runtime.js +75 -0
  151. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  152. package/src/build/runtime/deduping-build-executor.js +40 -0
  153. package/src/build/{parallel-build-executor.d.ts → runtime/parallel-build-executor.d.ts} +1 -1
  154. package/src/build/runtime/parallel-build-executor.js +60 -0
  155. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  156. package/src/build/runtime/serialized-build-executor.js +79 -0
  157. package/src/cache/index.d.ts +2 -1
  158. package/src/cache/index.js +7 -6
  159. package/src/cache/module-parse-cache.d.ts +5 -0
  160. package/src/cache/module-parse-cache.js +122 -67
  161. package/src/cache/module-transform-profiler.d.ts +8 -0
  162. package/src/cache/module-transform-profiler.js +8 -0
  163. package/src/client/navigation-scripts/classification.d.ts +16 -0
  164. package/src/client/navigation-scripts/classification.js +49 -0
  165. package/src/client/navigation-scripts/index.d.ts +3 -0
  166. package/src/client/navigation-scripts/index.js +3 -0
  167. package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
  168. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
  169. package/src/client/navigation-scripts/registry.d.ts +11 -0
  170. package/src/client/navigation-scripts/registry.js +16 -0
  171. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  172. package/src/client/navigation-scripts/rerun-queue.js +90 -0
  173. package/src/client/scroll.d.ts +17 -0
  174. package/src/client/scroll.js +33 -0
  175. package/src/client/scroll.test.browser.d.ts +1 -0
  176. package/src/client/scroll.test.browser.js +31 -0
  177. package/src/client/view-transitions.d.ts +32 -0
  178. package/src/client/view-transitions.js +120 -0
  179. package/src/client/view-transitions.test.browser.d.ts +1 -0
  180. package/src/client/view-transitions.test.browser.js +56 -0
  181. package/src/config/README.md +1 -1
  182. package/src/config/config-builder.d.ts +40 -20
  183. package/src/config/config-builder.js +645 -610
  184. package/src/config/constants.d.ts +1 -0
  185. package/src/config/constants.js +44 -23
  186. package/src/declarations.d.ts +1 -0
  187. package/src/dev/README.md +24 -0
  188. package/src/dev/client-bridge-registry.d.ts +5 -0
  189. package/src/dev/client-bridge-registry.js +10 -0
  190. package/src/dev/dev-client-ownership.d.ts +7 -0
  191. package/src/dev/dev-client-ownership.js +8 -0
  192. package/src/dev/hmr-manager-registry.d.ts +8 -0
  193. package/src/dev/hmr-manager-registry.js +10 -0
  194. package/src/dev/host-runtime.d.ts +3 -0
  195. package/src/dev/host-runtime.js +25 -23
  196. package/src/dev/runtime-server-started-message.d.ts +2 -0
  197. package/src/dev/runtime-server-started-message.js +3 -0
  198. package/src/dev/sc-server.js +106 -103
  199. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  200. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  201. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  202. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  203. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  204. package/src/dev/transform-server/dev-transform-import-rewriter.js +127 -0
  205. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  206. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  207. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  208. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  209. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  210. package/src/dev/transform-server/dev-transform-server.js +191 -0
  211. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  212. package/src/dev/transform-server/dev-transform-url.js +58 -0
  213. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
  214. package/src/dev/transform-server/dev-transform-vendor-registry.js +166 -0
  215. package/src/dev/transform-server/index.d.ts +6 -0
  216. package/src/dev/transform-server/index.js +4 -0
  217. package/src/dev/transform-server/types.d.ts +15 -0
  218. package/src/dev/transform-server/types.js +1 -0
  219. package/src/dev-toolbar/README.md +52 -0
  220. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  221. package/src/dev-toolbar/define-dev-tool.js +9 -0
  222. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  223. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  224. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  225. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  226. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  227. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  228. package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
  229. package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
  230. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  231. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  232. package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
  233. package/src/dev-toolbar/dev-toolbar-package.js +78 -0
  234. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  235. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  236. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  237. package/src/diagnostics/request-build-dedupe.js +39 -0
  238. package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
  239. package/src/diagnostics/request-pipeline-metrics.js +121 -0
  240. package/src/diagnostics/startup-trace.d.ts +81 -0
  241. package/src/diagnostics/startup-trace.js +281 -0
  242. package/src/eco/README.md +17 -0
  243. package/src/eco/component-identity.d.ts +13 -0
  244. package/src/eco/component-identity.js +18 -0
  245. package/src/eco/eco-declared-component.d.ts +15 -0
  246. package/src/eco/eco-declared-component.js +23 -0
  247. package/src/eco/eco.browser.js +63 -70
  248. package/src/eco/eco.js +163 -97
  249. package/src/eco/eco.types.d.ts +47 -8
  250. package/src/eco/eco.types.js +5 -0
  251. package/src/eco/eco.utils.d.ts +1 -1
  252. package/src/eco/eco.utils.js +1 -10
  253. package/src/eco/global-injector-map.js +55 -41
  254. package/src/eco/lazy-injector-map.js +90 -60
  255. package/src/eco/module-dependencies.js +52 -44
  256. package/src/eco/page-layout-normalization.d.ts +21 -0
  257. package/src/eco/page-layout-normalization.js +69 -0
  258. package/src/env.d.ts +2 -0
  259. package/src/errors/http-error.d.ts +8 -0
  260. package/src/errors/http-error.js +66 -49
  261. package/src/errors/index.d.ts +1 -0
  262. package/src/errors/index.js +3 -6
  263. package/src/errors/locals-access-error.js +5 -8
  264. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  265. package/src/errors/undeclared-component-dependency-error.js +17 -0
  266. package/src/global/app-logger.js +3 -6
  267. package/src/hmr/README.md +21 -0
  268. package/src/hmr/client/hmr-runtime.js +119 -110
  269. package/src/hmr/client/module-update.d.ts +13 -0
  270. package/src/hmr/client/module-update.js +39 -0
  271. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  272. package/src/hmr/hmr-asset-paths.js +22 -0
  273. package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
  274. package/src/hmr/hmr-entrypoint-output.js +34 -0
  275. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  276. package/src/hmr/hmr-file-change-prep.js +14 -0
  277. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  278. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  279. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  280. package/src/hmr/hmr-runtime-paths.js +13 -0
  281. package/src/hmr/hmr-strategy.d.ts +9 -0
  282. package/src/hmr/hmr-strategy.js +113 -42
  283. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  284. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
  285. package/src/hmr/strategies/js-hmr-strategy.js +107 -167
  286. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  287. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
  288. package/src/index.browser.d.ts +1 -0
  289. package/src/index.browser.js +2 -4
  290. package/src/index.d.ts +4 -1
  291. package/src/index.js +7 -21
  292. package/src/islands/README.md +25 -0
  293. package/src/islands/island-host.d.ts +37 -0
  294. package/src/islands/island-host.js +55 -0
  295. package/src/plugins/README.md +2 -1
  296. package/src/plugins/alias-resolver-cache.d.ts +6 -9
  297. package/src/plugins/alias-resolver-cache.js +114 -97
  298. package/src/plugins/alias-resolver-plugin.d.ts +3 -3
  299. package/src/plugins/alias-resolver-plugin.js +35 -62
  300. package/src/plugins/define-integration.d.ts +26 -0
  301. package/src/plugins/define-integration.js +20 -0
  302. package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
  303. package/src/plugins/eco-component-meta-plugin.js +123 -162
  304. package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
  305. package/src/plugins/foreign-jsx-override-plugin.js +49 -37
  306. package/src/plugins/integration-plugin.d.ts +24 -6
  307. package/src/plugins/integration-plugin.js +212 -195
  308. package/src/plugins/jsx-import-source.utils.d.ts +8 -0
  309. package/src/plugins/jsx-import-source.utils.js +21 -0
  310. package/src/plugins/package-specifier.d.ts +12 -0
  311. package/src/plugins/package-specifier.js +33 -0
  312. package/src/plugins/processor.d.ts +66 -12
  313. package/src/plugins/processor.js +168 -137
  314. package/src/plugins/runtime-capability.js +1 -0
  315. package/src/plugins/source-transform.d.ts +1 -1
  316. package/src/plugins/source-transform.js +109 -79
  317. package/src/plugins/tsconfig-import-resolver.d.ts +37 -0
  318. package/src/plugins/tsconfig-import-resolver.js +262 -0
  319. package/src/route-renderer/GRAPH.md +24 -30
  320. package/src/route-renderer/README.md +52 -32
  321. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  322. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
  323. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
  324. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
  325. package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
  326. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
  327. package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +20 -7
  328. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +195 -0
  329. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
  330. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
  331. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
  332. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
  333. package/src/route-renderer/orchestration/integration-renderer.d.ts +37 -153
  334. package/src/route-renderer/orchestration/integration-renderer.js +803 -1008
  335. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
  336. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
  337. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
  338. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
  339. package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
  340. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
  341. package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
  342. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
  343. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
  344. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
  345. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
  346. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
  347. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
  348. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
  349. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
  350. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
  351. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
  352. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
  353. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
  354. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +248 -0
  355. package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
  356. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
  357. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
  358. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
  359. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
  360. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
  361. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
  362. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
  363. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
  364. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
  365. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
  366. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
  367. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
  368. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +44 -0
  369. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
  370. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
  371. package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
  372. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
  373. package/src/{integrations/ghtml/ghtml-renderer.d.ts → route-renderer/orchestration/string-markup-renderer.d.ts} +8 -10
  374. package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
  375. package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
  376. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  377. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  378. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
  379. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
  380. package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
  381. package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
  382. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  383. package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
  384. package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
  385. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  386. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  387. package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
  388. package/src/route-renderer/page-loading/page-module-loader.js +136 -124
  389. package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
  390. package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
  391. package/src/route-renderer/route-renderer.js +74 -76
  392. package/src/router/README.md +31 -0
  393. package/src/router/client/link-intent.d.ts +11 -21
  394. package/src/router/client/link-intent.js +56 -30
  395. package/src/router/client/link-intent.test.browser.js +50 -39
  396. package/src/router/client/link-navigation-policy.d.ts +45 -0
  397. package/src/router/client/link-navigation-policy.js +122 -0
  398. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  399. package/src/router/client/link-navigation-policy.test.browser.js +82 -0
  400. package/src/router/client/navigation-coordinator.d.ts +1 -1
  401. package/src/router/client/navigation-coordinator.js +235 -211
  402. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  403. package/src/router/client/navigation-lifecycle.js +50 -0
  404. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  405. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  406. package/src/router/server/route-registry.js +237 -242
  407. package/src/services/README.md +5 -0
  408. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  409. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
  410. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +12 -1
  411. package/src/services/assets/asset-processing-service/asset-processing.service.js +335 -268
  412. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  413. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  414. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  415. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +1 -1
  416. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  417. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  418. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
  419. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -58
  420. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  421. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
  422. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  423. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
  424. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  425. package/src/services/assets/asset-processing-service/index.js +8 -6
  426. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  427. package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
  428. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  429. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
  430. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  431. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  432. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  433. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  434. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  435. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
  436. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  437. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  438. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
  439. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  440. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
  441. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  442. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  443. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
  444. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  445. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
  446. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  447. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
  448. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  449. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
  450. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  451. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
  452. package/src/services/assets/browser-bundle.service.d.ts +27 -31
  453. package/src/services/assets/browser-bundle.service.js +54 -49
  454. package/src/services/assets/browser-runtime-asset-generation.d.ts +17 -0
  455. package/src/services/assets/browser-runtime-asset-generation.js +28 -0
  456. package/src/services/cache/cache.types.d.ts +4 -2
  457. package/src/services/cache/cache.types.js +5 -0
  458. package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
  459. package/src/services/cache/html-page-cache-dependency-index.js +88 -0
  460. package/src/services/cache/index.d.ts +2 -0
  461. package/src/services/cache/index.js +8 -7
  462. package/src/services/cache/memory-cache-store.js +101 -89
  463. package/src/services/cache/page-cache-service.d.ts +31 -1
  464. package/src/services/cache/page-cache-service.js +237 -150
  465. package/src/services/cache/page-request-cache-coordinator.service.d.ts +2 -1
  466. package/src/services/cache/page-request-cache-coordinator.service.js +112 -102
  467. package/src/services/html/html-rewriter-provider.service.js +61 -61
  468. package/src/services/html/html-transformer.service.js +249 -266
  469. package/src/services/invalidation/development-invalidation.service.d.ts +15 -1
  470. package/src/services/invalidation/development-invalidation.service.js +241 -204
  471. package/src/services/module-loading/README.md +9 -6
  472. package/src/services/module-loading/app-module-loader.service.js +1 -0
  473. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  474. package/src/services/module-loading/app-server-module-transpiler.service.js +104 -106
  475. package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
  476. package/src/services/module-loading/collection-server-module-build.service.js +83 -0
  477. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  478. package/src/services/module-loading/module-loading-types.js +1 -0
  479. package/src/services/module-loading/page-module-import.service.d.ts +7 -12
  480. package/src/services/module-loading/page-module-import.service.js +232 -206
  481. package/src/services/module-loading/route-module-build-cache-registry.d.ts +2 -0
  482. package/src/services/module-loading/route-module-build-cache-registry.js +59 -33
  483. package/src/services/module-loading/route-module-build-cache.js +3 -38
  484. package/src/services/module-loading/route-module-build-cache.store.d.ts +10 -0
  485. package/src/services/module-loading/route-module-build-cache.store.js +213 -196
  486. package/src/services/module-loading/route-module-build-manifest.d.ts +10 -14
  487. package/src/services/module-loading/route-module-build-manifest.js +54 -118
  488. package/src/services/module-loading/route-module-dependency-hasher.d.ts +2 -2
  489. package/src/services/module-loading/route-module-dependency-hasher.js +136 -109
  490. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
  491. package/src/services/module-loading/server-module-transpiler.service.js +65 -62
  492. package/src/services/module-loading/source-module-support.js +15 -7
  493. package/src/services/runtime-state/dev-graph.service.js +165 -157
  494. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  495. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  496. package/src/services/validation/schema-validation-service.d.ts +1 -4
  497. package/src/services/validation/schema-validation-service.js +156 -95
  498. package/src/services/validation/standard-schema.types.d.ts +9 -62
  499. package/src/services/validation/standard-schema.types.js +1 -0
  500. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  501. package/src/services/validation/validate-standard-schema.js +14 -0
  502. package/src/static-site-generator/README.md +10 -2
  503. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
  504. package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
  505. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  506. package/src/static-site-generator/sitemap-routes.js +36 -0
  507. package/src/static-site-generator/sitemap.d.ts +15 -0
  508. package/src/static-site-generator/sitemap.js +42 -0
  509. package/src/static-site-generator/static-build-invalidation.d.ts +2 -2
  510. package/src/static-site-generator/static-build-invalidation.js +33 -74
  511. package/src/static-site-generator/static-export-context.d.ts +9 -1
  512. package/src/static-site-generator/static-export-context.js +1 -0
  513. package/src/static-site-generator/static-site-generator.d.ts +27 -6
  514. package/src/static-site-generator/static-site-generator.js +528 -389
  515. package/src/types/internal-types.d.ts +55 -17
  516. package/src/types/internal-types.js +1 -0
  517. package/src/types/public-types.d.ts +236 -95
  518. package/src/types/public-types.js +1 -0
  519. package/src/utils/deep-merge.js +39 -26
  520. package/src/utils/ecopages-route-info.d.ts +26 -0
  521. package/src/utils/ecopages-route-info.js +30 -0
  522. package/src/utils/hash.js +3 -6
  523. package/src/utils/html-escaping.d.ts +7 -0
  524. package/src/utils/html-escaping.js +22 -5
  525. package/src/utils/invariant.js +11 -10
  526. package/src/utils/locals-utils.js +32 -22
  527. package/src/utils/parse-cli-args.d.ts +1 -0
  528. package/src/utils/parse-cli-args.js +73 -62
  529. package/src/utils/path-pattern.d.ts +23 -0
  530. package/src/utils/path-pattern.js +42 -0
  531. package/src/utils/path-utils.module.js +8 -11
  532. package/src/utils/resolve-entry-file.js +70 -38
  533. package/src/utils/resolve-work-dir.js +23 -27
  534. package/src/utils/runtime.js +24 -33
  535. package/src/utils/server-utils.module.d.ts +3 -2
  536. package/src/utils/server-utils.module.js +60 -53
  537. package/src/utils/static-file-extensions.d.ts +12 -0
  538. package/src/utils/static-file-extensions.js +54 -0
  539. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  540. package/src/watchers/project-watcher-ignore.js +17 -0
  541. package/src/watchers/project-watcher.d.ts +21 -6
  542. package/src/watchers/project-watcher.js +402 -277
  543. package/src/watchers/project-watcher.test-helpers.js +45 -50
  544. package/src/adapters/shared/api-response.js +0 -96
  545. package/src/adapters/shared/application-adapter.js +0 -90
  546. package/src/adapters/shared/bun-user-websocket-lifecycle.js +0 -102
  547. package/src/adapters/shared/copy-runtime-public-dir.js +0 -24
  548. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  549. package/src/adapters/shared/define-api-handler.js +0 -15
  550. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  551. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  552. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  553. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  554. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  555. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  556. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  557. package/src/adapters/shared/hmr-html-response.js +0 -33
  558. package/src/adapters/shared/node-http-websocket-upgrades.js +0 -125
  559. package/src/adapters/shared/render-context.js +0 -93
  560. package/src/adapters/shared/runtime-app-bootstrap.js +0 -41
  561. package/src/adapters/shared/runtime-host.js +0 -0
  562. package/src/adapters/shared/server-adapter.js +0 -436
  563. package/src/adapters/shared/server-route-handler.js +0 -111
  564. package/src/adapters/shared/server-static-builder.js +0 -202
  565. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -61
  566. package/src/adapters/shared/shared-hmr-manager.js +0 -273
  567. package/src/adapters/shared/static-preview-host.js +0 -0
  568. package/src/adapters/shared/websocket-lifecycle.d.ts +0 -3
  569. package/src/adapters/shared/websocket-lifecycle.js +0 -19
  570. package/src/build/browser-runtime-manifest.js +0 -61
  571. package/src/build/browser-runtime-plugin-helpers.js +0 -14
  572. package/src/build/browser-runtime-plugin.js +0 -173
  573. package/src/build/build-input-fingerprint.js +0 -31
  574. package/src/build/build-manifest.d.ts +0 -33
  575. package/src/build/build-manifest.js +0 -49
  576. package/src/build/build-types.js +0 -0
  577. package/src/build/jsx-ownership-plugins.d.ts +0 -10
  578. package/src/build/jsx-ownership-plugins.js +0 -17
  579. package/src/build/pages-unified-graph-build.js +0 -208
  580. package/src/build/parallel-build-executor.js +0 -52
  581. package/src/build/rolldown-adapter-helpers.js +0 -310
  582. package/src/build/rolldown-build-adapter.js +0 -67
  583. package/src/build/rolldown-build-invocation-metrics.js +0 -43
  584. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  585. package/src/build/rolldown-dev-build-adapter.js +0 -182
  586. package/src/build/rolldown-plugin-bridge.js +0 -211
  587. package/src/build/rolldown-source-transform-pass.js +0 -58
  588. package/src/build/runtime-build-executor.d.ts +0 -15
  589. package/src/build/runtime-build-executor.js +0 -43
  590. package/src/build/runtime-build-output-normalizer.js +0 -203
  591. package/src/build/serialized-build-executor.js +0 -63
  592. package/src/build/server-entry-build-cache.js +0 -169
  593. package/src/build/server-side-css-shim-plugin.js +0 -35
  594. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  595. package/src/hmr/hmr.test.e2e.js +0 -54
  596. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  597. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  598. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  599. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  600. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  601. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  602. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  603. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  604. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
  605. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  606. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  607. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  608. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  609. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  610. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  611. package/src/route-renderer/orchestration/render-output.utils.js +0 -175
  612. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
  613. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  614. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  615. package/src/utils/html.d.ts +0 -1
  616. package/src/utils/html.js +0 -4
  617. /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
  618. /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
  619. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  620. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  621. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  622. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  623. /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
  624. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -1,19 +1,23 @@
1
- import type { EcoBuildPlugin } from '../build/build-types.js';
2
- import type { AppBuildManifest } from '../build/build-manifest.js';
3
- import type { BuildAdapter, BuildExecutor, BuildOwnership } from '../build/build-adapter.js';
1
+ import type { EcoBuildPlugin } from '../build/contracts/build-types.js';
2
+ import type { AppBuildManifest } from '../build/contracts/build-manifest.js';
3
+ import type { BuildAdapter, BuildOwnership } from '../build/build-adapter.js';
4
+ import type { BuildRuntime } from '../build/runtime/build-runtime.js';
4
5
  import type { AnyIntegrationPlugin } from '../plugins/integration-plugin.js';
5
6
  import type { Processor } from '../plugins/processor.js';
6
7
  import type { EcoSourceTransform } from '../plugins/source-transform.js';
7
- import type { PageMetadataProps } from './public-types.js';
8
+ import type { PageMetadataProps, SitemapConfig } from './public-types.js';
8
9
  import type { RouteRegistry } from '../router/server/route-registry.js';
9
10
  import type { CacheConfig } from '../services/cache/cache.types.js';
10
11
  import type { DevGraphService } from '../services/runtime-state/dev-graph.service.js';
11
12
  import type { AppModuleLoader } from '../services/module-loading/app-module-loader.service.js';
12
13
  import type { SourceModuleLoader } from '../services/module-loading/module-loading-types.js';
13
14
  import type { EntrypointDependencyGraph } from '../services/runtime-state/entrypoint-dependency-graph.service.js';
15
+ import type { SessionPageBrowserGraphCache } from '../route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js';
14
16
  import type { ServerInvalidationState } from '../services/runtime-state/server-invalidation-state.service.js';
15
17
  import type { ServerModuleTranspiler } from '../services/module-loading/server-module-transpiler.service.js';
16
18
  import type { RouteModuleBuildCache } from '../services/module-loading/route-module-build-cache.store.js';
19
+ /** Integration hook for registered `dependencies.scripts` entrypoint changes in dev. */
20
+ export type RegisteredScriptEntrypointChangeHandler = (filePath: string) => void | boolean | Promise<void | boolean>;
17
21
  export interface RobotsPreference {
18
22
  /**
19
23
  * The user agent
@@ -95,8 +99,18 @@ export type EcoPagesAppConfig = {
95
99
  */
96
100
  preferences: RobotsPreference;
97
101
  };
102
+ /**
103
+ * Automatic sitemap.xml generation during static export.
104
+ *
105
+ * @default { enabled: false, fileName: 'sitemap.xml', extraUrls: [], exclude: [] }
106
+ */
107
+ sitemap: SitemapConfig;
98
108
  /** Additional paths to watch. Use this to monitor extra files. It is relative to the rootDir */
99
109
  additionalWatchPaths: string[];
110
+ /** Static paths to SSR-prewarm in development before user navigation. */
111
+ devPrewarmPaths?: string[];
112
+ /** Static paths to SSR-prewarm before the development server reports ready. */
113
+ devPrewarmBeforeReadyPaths?: string[];
100
114
  /**
101
115
  * @default { title: 'Ecopages', description: 'Ecopages' }
102
116
  */
@@ -119,6 +133,7 @@ export type EcoPagesAppConfig = {
119
133
  srcDir: string;
120
134
  htmlTemplatePath: string;
121
135
  error404TemplatePath: string;
136
+ error500TemplatePath: string;
122
137
  };
123
138
  /**
124
139
  * The processors to be used in the app
@@ -150,20 +165,50 @@ export type EcoPagesAppConfig = {
150
165
  buildOwnership?: BuildOwnership;
151
166
  buildAdapter?: BuildAdapter;
152
167
  buildManifest?: AppBuildManifest;
153
- buildExecutor?: BuildExecutor;
154
- hmrBuildExecutor?: BuildExecutor;
155
- routeModuleBuildExecutor?: BuildExecutor;
156
168
  devGraphService?: DevGraphService;
157
169
  entrypointDependencyGraph?: EntrypointDependencyGraph;
170
+ pageBrowserGraphSession?: SessionPageBrowserGraphCache;
158
171
  hostModuleLoader?: SourceModuleLoader;
159
172
  rendererModuleContext?: unknown;
160
173
  serverInvalidationState?: ServerInvalidationState;
161
174
  serverModuleTranspiler?: ServerModuleTranspiler;
162
175
  routeModuleBuildCaches?: Map<string, RouteModuleBuildCache>;
163
- /** Serialized server-entry bundler installed by {@link getInstalledServerEntryBuildExecutor}. */
164
- serverEntryBuildExecutor?: BuildExecutor;
176
+ /** Profile-based build runtime installed by {@link installBuildRuntime}. */
177
+ buildRuntime?: BuildRuntime;
165
178
  /** Set after {@link setupAppRuntimePlugins} runs processor/integration setup once per process. */
166
179
  runtimeAssetsPrepared?: boolean;
180
+ /** Registers integration runtime plugins when lazy activation completes. */
181
+ onRuntimePlugin?: (plugin: import('../build/contracts/build-types.js').EcoBuildPlugin) => void;
182
+ /**
183
+ * In-flight or completed lazy integration activation promises, keyed by integration name.
184
+ *
185
+ * @remarks
186
+ * Concurrent callers (background prewarm + first render) share the same promise.
187
+ * Failed activations are removed so a later caller can retry.
188
+ */
189
+ integrationActivations?: Map<string, Promise<void>>;
190
+ /** When `'host'`, the embedded dev server owns browser dev-client bootstrap. */
191
+ devClientOwner?: 'core' | 'host';
192
+ /** Integration hooks run when a registered `dependencies.scripts` entrypoint changes. */
193
+ registeredScriptEntrypointChangeHandlers?: RegisteredScriptEntrypointChangeHandler[];
194
+ };
195
+ /**
196
+ * Development-only in-browser toolbar configuration.
197
+ */
198
+ devToolbar?: {
199
+ /**
200
+ * Whether the dev toolbar is enabled during watch mode.
201
+ *
202
+ * @default true when `package` is configured
203
+ */
204
+ enabled?: boolean;
205
+ /**
206
+ * Client package resolved from the application project and bundled to
207
+ * `/_dev_toolbar.js` during watch mode.
208
+ *
209
+ * @example '@ecopages/dev-toolbar'
210
+ */
211
+ package?: string;
167
212
  };
168
213
  /**
169
214
  * Experimental features.
@@ -230,11 +275,4 @@ export interface EcoPagesFileSystemServerAdapter<ServerInstanceOptions = unknown
230
275
  server: unknown;
231
276
  }>;
232
277
  }
233
- export interface ProcessorPlugin {
234
- name: string;
235
- description?: string;
236
- setup(): Promise<void>;
237
- process<T = unknown>(input: T): Promise<T>;
238
- teardown?(): Promise<void>;
239
- }
240
- export type { ClientBridgeEvent, DefaultHmrContext, IHmrManager, IClientBridge } from './public-types.js';
278
+ export type { ClientBridgeEvent, DefaultHmrContext, HmrFileChangeOptions, IHmrManager, IClientBridge, } from './public-types.js';
@@ -0,0 +1 @@
1
+ export {};
@@ -1,18 +1,17 @@
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
16
  /**
18
17
  * Runtime-agnostic incoming WebSocket frame.
@@ -90,8 +89,8 @@ export interface EcopagesWebSocketHandler<TContext = unknown, TParams extends Re
90
89
  onClose?(socket: EcopagesSocket<TContext, TParams>, event: WebSocketCloseInfo): void | Promise<void>;
91
90
  onError?(socket: EcopagesSocket<TContext, TParams>, error: unknown): void | Promise<void>;
92
91
  }
93
- import type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput } from '../services/validation/standard-schema.types.js';
94
- export type { StandardSchema, StandardSchemaResult, StandardSchemaSuccessResult, StandardSchemaFailureResult, StandardSchemaIssue, InferOutput, ForeignChildRuntime, };
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, };
95
94
  export type InteractionEventsString = ScriptsInjectorInteractionEventsString;
96
95
  export type DependencyLazyTrigger = {
97
96
  'on:idle': true;
@@ -164,21 +163,14 @@ export interface CacheInvalidator {
164
163
  }
165
164
  /**
166
165
  * Context interface for HMR strategies.
167
- * Provides access to watched files, registered bare-specifier mappings, and build configuration.
166
+ * Provides access to registered entrypoints and build configuration.
168
167
  */
169
168
  export interface DefaultHmrContext {
170
169
  /**
171
- * Map of registered entrypoints to their output URLs.
170
+ * Map of registered entrypoint source paths to their dev-transform output URLs.
172
171
  */
173
172
  getWatchedFiles(): Map<string, string>;
174
- /**
175
- * Directory where HMR bundles are written.
176
- */
177
- getDistDir(): string;
178
- /**
179
- * Build plugins to use during bundling.
180
- */
181
- getPlugins(): EcoBuildPlugin[];
173
+ getRegisteredEntrypoints(): ReadonlyMap<string, ResolvedHmrEntrypoint>;
182
174
  /**
183
175
  * Absolute path to the source directory.
184
176
  */
@@ -193,14 +185,6 @@ export interface DefaultHmrContext {
193
185
  * Used by plugins to identify page files for transformation.
194
186
  */
195
187
  getPagesDir(): string;
196
- /**
197
- * Build executor owned by the active app/runtime.
198
- */
199
- getBuildExecutor(): BuildExecutor;
200
- /**
201
- * Browser bundler owned by the active app/runtime.
202
- */
203
- getBrowserBundleService(): BrowserBundleExecutor;
204
188
  /**
205
189
  * Server-side module loader owned by the active app/runtime.
206
190
  */
@@ -230,6 +214,22 @@ export type ClientBridgeEvent = {
230
214
  * Timestamp for cache busting
231
215
  */
232
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'];
233
233
  };
234
234
  /**
235
235
  * Adapter-agnostic interface for broadcasting development events to connected clients.
@@ -243,40 +243,42 @@ export interface IClientBridge {
243
243
  error(message: string): void;
244
244
  subscriberCount: number;
245
245
  }
246
+ export interface ResolvedHmrEntrypoint {
247
+ sourcePath: string;
248
+ outputPath: string;
249
+ outputUrl: string;
250
+ role: 'page' | 'script';
251
+ }
246
252
  /**
247
253
  * Interface for the HMR Manager.
248
254
  * Used by integration plugins to register entrypoints and strategies.
249
255
  */
250
256
  export interface IHmrManager {
251
257
  /**
252
- * Registers an integration-owned client entrypoint to be built and watched.
258
+ * Registers a client entrypoint for dev-transform delivery and HMR watching.
253
259
  *
254
260
  * @remarks
255
- * This path is strict: the owning integration must emit the expected `_hmr`
256
- * 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).
257
263
  */
258
264
  registerEntrypoint(entrypointPath: string): Promise<string>;
259
265
  /**
260
- * Registers a generic script asset entrypoint to be built and watched.
261
- *
262
- * @remarks
263
- * This path exists for non-page script assets that are not owned by a
264
- * framework integration. Unlike `registerEntrypoint()`, it may use the generic
265
- * script bundling path.
266
+ * Registers an integration contributor that supplies per-module transform plugins.
266
267
  */
267
- registerScriptEntrypoint(entrypointPath: string): Promise<string>;
268
+ registerDevTransformContributor(contributor: DevTransformBundleContributor): void;
269
+ registerScriptEntrypoint(entrypointPath: string): Promise<ResolvedHmrEntrypoint>;
268
270
  /**
269
271
  * Registers a custom HMR strategy.
270
272
  */
271
273
  registerStrategy(strategy: HmrStrategy): void;
272
- /**
273
- * Sets the build plugins to use during bundling.
274
- */
275
- setPlugins(plugins: EcoBuildPlugin[]): void;
276
274
  /**
277
275
  * Enables or disables HMR.
278
276
  */
279
277
  setEnabled(enabled: boolean): void;
278
+ /**
279
+ * Stops active HMR watchers and releases dev-time resources.
280
+ */
281
+ stop(): void;
280
282
  /**
281
283
  * Returns whether HMR is enabled.
282
284
  */
@@ -289,18 +291,30 @@ export interface IHmrManager {
289
291
  * Gets the output URL for a registered entrypoint.
290
292
  */
291
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;
292
298
  /**
293
299
  * Gets the map of watched files.
294
300
  */
295
301
  getWatchedFiles(): Map<string, string>;
296
302
  /**
297
- * Gets the HMR dist directory.
303
+ * Gets registered dev-transform entrypoints keyed by resolved source path.
304
+ */
305
+ getRegisteredEntrypoints(): ReadonlyMap<string, ResolvedHmrEntrypoint>;
306
+ /**
307
+ * Gets the on-disk work directory for the bundled HMR client runtime.
298
308
  */
299
- getDistDir(): string;
309
+ getRuntimeWorkDir(): string;
300
310
  /**
301
- * Gets the build plugins.
311
+ * Returns the on-disk path to the bundled HMR runtime script.
302
312
  */
303
- getPlugins(): EcoBuildPlugin[];
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;
304
318
  /**
305
319
  * Gets the default HMR context.
306
320
  */
@@ -308,7 +322,7 @@ export interface IHmrManager {
308
322
  /**
309
323
  * Handles a file change event.
310
324
  */
311
- handleFileChange(path: string): Promise<void>;
325
+ handleFileChange(path: string, options?: HmrFileChangeOptions): Promise<void>;
312
326
  }
313
327
  /**
314
328
  * Represents the dependencies for an EcoComponent.
@@ -323,44 +337,43 @@ export type EcoComponentDependencies = {
323
337
  * to express explicit module imports for client bundles.
324
338
  */
325
339
  modules?: string[];
326
- 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[];
327
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>;
328
355
  export type EcoPagesElement = string | Promise<string>;
329
356
  /**
330
357
  * Serializable child payloads accepted by cross-integration deferred rendering.
331
358
  *
332
- * This models the broad value shapes that EcoPages already flattens when a
333
- * foreign component boundary serializes its children for another integration.
334
- * It is intentionally transport-oriented rather than framework-native, so it
335
- * can be shared across Kita, Lit, React, and Ecopages JSX authoring surfaces
336
- * 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.
337
365
  */
338
366
  export type EcoChildren = string | Promise<string> | number | bigint | boolean | null | undefined | readonly EcoChildren[] | {
339
367
  strings: readonly string[];
340
368
  values?: readonly EcoChildren[];
341
- } | {
342
- [key: string]: EcoChildren;
343
369
  };
344
370
  /**
345
371
  * Represents the input configuration for EcoPages.
346
372
  */
347
373
  export type EcoPagesConfig = Omit<Partial<EcoPagesAppConfig>, 'baseUrl' | 'derivedPaths' | 'templatesExt' | 'integrationsDependencies'> & Pick<EcoPagesAppConfig, 'baseUrl' | 'rootDir'>;
348
- /**
349
- * Internal metadata injected by eco-component-meta-plugin.
350
- * Contains component file path and integration info for dependency resolution.
351
- * @internal
352
- */
353
- export interface EcoInjectedMeta {
354
- /** Hashed identifier for client-side use (doesn't expose file paths) */
355
- id: string;
356
- /** Full file path of the component (use path.dirname() to get directory) */
357
- file: string;
358
- /** The integration identifier (e.g., 'react', 'kitajs', 'lit', 'ghtml', 'mdx') */
359
- integration: string;
360
- }
361
374
  export type EcoComponentConfig = {
362
- /** @internal Injected by eco-component-meta-plugin */
363
- __eco?: EcoInjectedMeta;
375
+ /** Canonical integration, module, and stable component attribution. */
376
+ identity?: ComponentIdentity;
364
377
  /**
365
378
  * Explicit integration override for this component.
366
379
  * When provided, this takes precedence over auto-detected integration metadata.
@@ -390,11 +403,13 @@ export type EcoComponentConfig = {
390
403
  * );
391
404
  *
392
405
  * // Page using the layout
393
- * const MyPage = () => <h1>Hello</h1>;
394
- * MyPage.config = { layout: Layout };
406
+ * const MyPage = eco.page({ layout: Layout, render: () => <h1>Hello</h1> });
395
407
  * ```
396
408
  */
397
- 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[];
398
413
  dependencies?: EcoComponentDependencies;
399
414
  /**
400
415
  * Internal: Resolved lazy scripts grouped by trigger.
@@ -485,6 +500,21 @@ export type EcoComponent<P = any, R = any> = IsAny<P> extends true ? EcoFunction
485
500
  export type PageProps<T = unknown> = T & StaticPageContext & {
486
501
  locals?: RequestLocals;
487
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
+ }
488
518
  /**
489
519
  * Represents the metadata for a page.
490
520
  */
@@ -494,6 +524,48 @@ export interface PageMetadataProps {
494
524
  image?: string;
495
525
  url?: string;
496
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>;
497
569
  }
498
570
  /**
499
571
  * Represents the props for the head of a page.
@@ -517,7 +589,46 @@ export interface HtmlTemplateProps<T = EcoPagesElement> extends PageHeadProps<T>
517
589
  language?: string;
518
590
  headContent?: T;
519
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;
520
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>[];
521
632
  /**
522
633
  * Layout components accepted by pages.
523
634
  *
@@ -534,12 +645,27 @@ export type EcoLayoutComponent<T = EcoPagesElement> = EcoComponent<LayoutProps<T
534
645
  */
535
646
  export type EcoHtmlComponent<T = EcoPagesElement> = EcoComponent<HtmlTemplateProps, T>;
536
647
  /**
537
- * Represents the props for the error 404 template.
648
+ * Props type for the semantic `404.*` page template.
649
+ * @remarks Semantic error templates receive safe empty `pageLocals` rather than
650
+ * request-scoped locals. The runtime does not currently pass `message` / `stack`
651
+ * when rendering the custom 404 page.
538
652
  */
539
653
  export interface Error404TemplateProps extends Omit<HtmlTemplateProps, 'children'> {
540
654
  message: string;
541
655
  stack?: string;
542
656
  }
657
+ /**
658
+ * Props type for the semantic `500.*` page template.
659
+ * @remarks In development, the page-pipeline passes `message` and `stack` from the
660
+ * thrown error when rendering this page after a failure. In production those
661
+ * fields are omitted so stacks are not serialized into HTML. Direct visits to
662
+ * `/500` also omit them. Semantic error templates receive safe empty
663
+ * `pageLocals` rather than request-scoped locals.
664
+ */
665
+ export interface Error500TemplateProps extends Omit<HtmlTemplateProps, 'children'> {
666
+ message?: string;
667
+ stack?: string;
668
+ }
543
669
  /**
544
670
  * Represents the parameters for a page.
545
671
  * The keys are strings, and the values can be either a string or an array of strings.
@@ -663,6 +789,20 @@ export type RouteRendererOptions = {
663
789
  params?: PageParams;
664
790
  query?: PageQuery;
665
791
  locals?: RequestLocals;
792
+ /**
793
+ * Preloaded page module from request-time inspection.
794
+ *
795
+ * @remarks
796
+ * When present, render preparation reuses this module instead of importing the
797
+ * page file again for the same request.
798
+ */
799
+ pageModule?: EcoPageFile;
800
+ /**
801
+ * Extra props merged into the page props for this render.
802
+ * @remarks Used by semantic error pages (for example development `message` /
803
+ * `stack` on the custom 500 page).
804
+ */
805
+ props?: Record<string, unknown>;
666
806
  };
667
807
  /**
668
808
  * The body of the route renderer.
@@ -675,6 +815,8 @@ export type RouteRenderResult = {
675
815
  body: RouteRendererBody;
676
816
  /** Cache strategy from page component's eco.page({ cache }) option */
677
817
  cacheStrategy?: CacheStrategy;
818
+ /** Source paths observed during render preparation for HTML cache invalidation. */
819
+ sourceDependencyPaths?: readonly string[];
678
820
  };
679
821
  /**
680
822
  * Represents the dependencies required for an integration plugin.
@@ -735,15 +877,19 @@ export type IntegrationRendererRenderOptions<C = EcoPagesElement> = RouteRendere
735
877
  metadata: PageMetadataProps;
736
878
  HtmlTemplate: EcoHtmlComponent<C>;
737
879
  Page: EcoComponent<PageProps, C>;
880
+ Layouts?: EcoDeclaredComponent[];
738
881
  Layout?: EcoPageLayoutComponent<any>;
882
+ layoutEntries?: EcoPageLayoutEntry[];
739
883
  dependencies?: EcoComponentDependencies;
884
+ /** @internal Resolved page dependencies carried through the render pipeline. */
885
+ resolvedPageDependencyComponents?: ReadonlyArray<EcoComponent | Partial<EcoComponent>>;
740
886
  resolvedDependencies: ProcessedAsset[];
741
887
  pagePackage?: PagePackageResult;
742
- componentRender?: ComponentRenderResult;
743
888
  pageProps?: Record<string, unknown>;
744
889
  cacheStrategy?: CacheStrategy;
745
890
  pageLocals?: RequestLocals;
746
- ownershipPlan?: OwnershipPlan;
891
+ /** @internal Source paths from render preparation for HTML cache dependency registration. */
892
+ sourceDependencyPaths?: readonly string[];
747
893
  };
748
894
  /**
749
895
  * Structured page asset package produced after dependency resolution.
@@ -808,10 +954,16 @@ export interface PageBrowserGraphResult {
808
954
  export type PageBrowserGraphContributionContext = {
809
955
  file: string;
810
956
  pageModule: EcoPageFile;
957
+ props?: Record<string, unknown>;
958
+ params?: PageParams;
959
+ query?: PageQuery;
960
+ dependencyInstanceKey?: string;
811
961
  };
812
962
  export interface PageBrowserGraphContribution {
813
963
  dependencies?: AssetDefinition[];
814
964
  assets?: ProcessedAsset[];
965
+ /** Source files that should invalidate this graph entry when they change. */
966
+ watchPaths?: string[];
815
967
  }
816
968
  export type OwnershipValidationErrorCode = 'UNKNOWN_INTEGRATION_OWNER' | 'MISSING_COMPONENT_METADATA';
817
969
  export interface OwnershipValidationError {
@@ -822,27 +974,6 @@ export interface OwnershipValidationError {
822
974
  integrationName?: string;
823
975
  }
824
976
  export type OwnershipPlanNodeSource = 'route' | 'page' | 'layout' | 'html-template' | 'dependency';
825
- export interface IntegrationOwnership {
826
- integrationName: string;
827
- componentId: string;
828
- componentFile?: string;
829
- isPageEntry: boolean;
830
- isForeignToParent: boolean;
831
- }
832
- export interface OwnershipPlanNode {
833
- id: string;
834
- source: OwnershipPlanNodeSource;
835
- ownership: IntegrationOwnership;
836
- children: OwnershipPlanNode[];
837
- declaredDependenciesValid: boolean;
838
- }
839
- export interface OwnershipPlan {
840
- root: OwnershipPlanNode;
841
- rendererNames: string[];
842
- foreignEdgeCount: number;
843
- hasValidationErrors: boolean;
844
- validationErrors: OwnershipValidationError[];
845
- }
846
977
  export type ForeignSubtreeAttachmentPolicy = {
847
978
  kind: 'none';
848
979
  } | {
@@ -866,6 +997,16 @@ export interface BaseIntegrationContext {
866
997
  rendererCache?: Map<string, unknown>;
867
998
  componentInstanceId?: string;
868
999
  }
1000
+ /**
1001
+ * Shared input for renderer-owned component execution.
1002
+ *
1003
+ * @remarks
1004
+ * `children` stays `unknown` at this boundary so integrations can receive
1005
+ * queued tokens, already-serialized HTML, or framework-native values before
1006
+ * their own placement rules apply. Opaque values must be rejected or converted
1007
+ * by foreign-child interception before string serializers run; adapters keep
1008
+ * framework-specific placement (React raw HTML, Lit slot markers).
1009
+ */
869
1010
  export interface ComponentRenderInput<TIntegrationContext extends BaseIntegrationContext = BaseIntegrationContext> {
870
1011
  component: EcoComponent;
871
1012
  props: Record<string, unknown>;
@@ -0,0 +1 @@
1
+ export {};