@ecopages/core 0.2.0-beta.8 → 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 (623) hide show
  1. package/README.md +42 -13
  2. package/package.json +361 -58
  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 +29 -340
  111. package/src/build/build-adapter.js +258 -260
  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} +16 -2
  138. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  139. package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
  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 +42 -12
  183. package/src/config/config-builder.js +645 -600
  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 +32 -1
  316. package/src/plugins/source-transform.js +112 -60
  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 -30
  453. package/src/services/assets/browser-bundle.service.js +54 -46
  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 -309
  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 -199
  587. package/src/build/runtime-build-executor.d.ts +0 -15
  588. package/src/build/runtime-build-executor.js +0 -43
  589. package/src/build/runtime-build-output-normalizer.js +0 -203
  590. package/src/build/serialized-build-executor.js +0 -63
  591. package/src/build/server-entry-build-cache.js +0 -169
  592. package/src/build/server-side-css-shim-plugin.js +0 -35
  593. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  594. package/src/hmr/hmr.test.e2e.js +0 -54
  595. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  596. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  597. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  598. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  599. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  600. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  601. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  602. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  603. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
  604. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  605. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  606. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  607. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  608. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  609. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  610. package/src/route-renderer/orchestration/render-output.utils.js +0 -175
  611. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
  612. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  613. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  614. package/src/utils/html.d.ts +0 -1
  615. package/src/utils/html.js +0 -4
  616. /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
  617. /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
  618. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  619. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  620. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  621. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  622. /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
  623. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -0,0 +1,248 @@
1
+ import path from 'node:path';
2
+ import {} from '../../../services/assets/asset-processing-service/index.js';
3
+ import { appLogger } from '../../../global/app-logger.js';
4
+ import { startupTrace } from '../../../diagnostics/startup-trace.js';
5
+ import { collectPageBrowserGraphDependencyPaths, createPageBrowserGraphEntryFingerprint, getAppPageBrowserGraphSession, } from './page-browser-graph-session.js';
6
+ import { createRouteGraphLookupKey } from './route-instance-key.js';
7
+ function isGroupedContentScriptAsset(asset) {
8
+ return asset.kind === 'script' && asset.source === 'content' && Boolean(asset.groupedBundle?.id);
9
+ }
10
+ function getGroupedBundleAssetKey(groupedBundle) {
11
+ return `${groupedBundle.id}:${groupedBundle.entryName}`;
12
+ }
13
+ function indexGroupedAssetsByBundleKey(processedAssets) {
14
+ const assetsByBundleKey = new Map();
15
+ for (const [index, asset] of processedAssets.entries()) {
16
+ if (!asset.groupedBundle) {
17
+ continue;
18
+ }
19
+ const bundleKey = getGroupedBundleAssetKey(asset.groupedBundle);
20
+ const assets = assetsByBundleKey.get(bundleKey);
21
+ if (assets) {
22
+ assets.push({ asset, index });
23
+ }
24
+ else {
25
+ assetsByBundleKey.set(bundleKey, [{ asset, index }]);
26
+ }
27
+ }
28
+ return assetsByBundleKey;
29
+ }
30
+ /**
31
+ * Resolves declarative page browser graph assets for one route and integration.
32
+ */
33
+ export class PageBrowserGraphService {
34
+ appConfig;
35
+ assetProcessingService;
36
+ constructor(appConfig, assetProcessingService) {
37
+ this.appConfig = appConfig;
38
+ this.assetProcessingService = assetProcessingService;
39
+ }
40
+ async resolvePageBrowserGraph(input) {
41
+ return await this.getOrBuild(input);
42
+ }
43
+ /**
44
+ * Returns dependency paths recorded for one resolved Page Browser Graph.
45
+ */
46
+ getDependencyPathsForRoute(input) {
47
+ const policy = input.policy ?? this.resolveGraphPolicy();
48
+ return getAppPageBrowserGraphSession(this.appConfig).getDependencyPathsByRoute(input.integrationName, input.routeFile, policy, input.dependencyInstanceKey ?? '');
49
+ }
50
+ /**
51
+ * Resolves or builds one Page Browser Graph under the given policy.
52
+ */
53
+ async getOrBuild(input) {
54
+ const policy = input.policy ?? this.resolveGraphPolicy();
55
+ const session = getAppPageBrowserGraphSession(this.appConfig);
56
+ const dependencyInstanceKey = input.dependencyInstanceKey ?? '';
57
+ if (!this.isHmrEnabled()) {
58
+ const cachedByRoute = session.getGraphByRoute(input.integrationName, input.routeFile, policy, dependencyInstanceKey);
59
+ if (cachedByRoute) {
60
+ return cachedByRoute;
61
+ }
62
+ }
63
+ const contribution = await input.collectContribution();
64
+ if (!contribution) {
65
+ return undefined;
66
+ }
67
+ const entryFingerprint = createPageBrowserGraphEntryFingerprint(contribution);
68
+ return await session.resolveGraph({
69
+ integrationName: input.integrationName,
70
+ routeFile: input.routeFile,
71
+ dependencyInstanceKey,
72
+ entryFingerprint,
73
+ policy,
74
+ }, collectPageBrowserGraphDependencyPaths(input.routeFile, contribution, contribution.assets ?? []), async () => this.buildPageBrowserGraphRecord(input, contribution));
75
+ }
76
+ resolveGraphPolicy() {
77
+ return this.isHmrEnabled() ? 'development' : 'production';
78
+ }
79
+ isHmrEnabled() {
80
+ return (typeof this.assetProcessingService.getHmrManager === 'function' &&
81
+ this.assetProcessingService.getHmrManager()?.isEnabled() === true);
82
+ }
83
+ async buildPageBrowserGraphRecord(input, contribution) {
84
+ const result = await this.materializePageBrowserGraph(input, contribution);
85
+ if (!result) {
86
+ return undefined;
87
+ }
88
+ startupTrace.markFirstPageBrowserGraphReady(getAppPageBrowserGraphSession(this.appConfig).getBuildCount());
89
+ return result;
90
+ }
91
+ async materializePageBrowserGraph(input, contribution) {
92
+ const groupedDependencies = (contribution.dependencies ?? []).filter((dep) => isGroupedContentScriptAsset(dep));
93
+ const ungroupedDependencies = (contribution.dependencies ?? []).filter((dep) => !isGroupedContentScriptAsset(dep));
94
+ const groupedResolution = groupedDependencies.length
95
+ ? await this.resolveGroupedPageBrowserAssets(input, contribution)
96
+ : undefined;
97
+ const groupedAssets = groupedResolution?.assetsByRoute.get(createRouteGraphLookupKey(input.routeFile, input.dependencyInstanceKey ?? '')) ?? [];
98
+ const processedDependencies = ungroupedDependencies.length
99
+ ? await this.assetProcessingService.processDependencies(ungroupedDependencies, `${input.integrationName}:${input.routeFile}`)
100
+ : [];
101
+ const resolvedAssets = [...processedDependencies, ...groupedAssets, ...(contribution.assets ?? [])];
102
+ const result = this.partitionPageBrowserGraphAssets(resolvedAssets);
103
+ const dependencyPaths = collectPageBrowserGraphDependencyPaths(input.routeFile, contribution, resolvedAssets);
104
+ return {
105
+ result,
106
+ dependencyPaths,
107
+ cacheable: groupedResolution?.cacheable ?? true,
108
+ };
109
+ }
110
+ async resolveGroupedPageBrowserAssets(input, currentContribution) {
111
+ if (this.isHmrEnabled()) {
112
+ return await this.buildGroupedPageBrowserAssets(input, currentContribution);
113
+ }
114
+ if (!input.groupedBuildPlan) {
115
+ const built = await this.buildGroupedPageBrowserAssets(input, currentContribution);
116
+ return {
117
+ ...built,
118
+ cacheable: false,
119
+ };
120
+ }
121
+ const session = getAppPageBrowserGraphSession(this.appConfig);
122
+ const groupedScope = {
123
+ integrationName: input.integrationName,
124
+ planKey: input.groupedBuildPlan.planKey,
125
+ };
126
+ let groupedCacheable = true;
127
+ const assetsByRoute = await session.resolveGroupedGraph(groupedScope, async () => {
128
+ const built = await this.buildGroupedPageBrowserAssets(input, currentContribution);
129
+ groupedCacheable = !built.hasCollectionFailures;
130
+ if (built.hasCollectionFailures) {
131
+ return {
132
+ skipCache: true,
133
+ assetsByRoute: built.assetsByRoute,
134
+ dependencyPaths: built.dependencyPaths,
135
+ };
136
+ }
137
+ return {
138
+ assetsByRoute: built.assetsByRoute,
139
+ dependencyPaths: built.dependencyPaths,
140
+ generation: 0,
141
+ };
142
+ });
143
+ return {
144
+ assetsByRoute,
145
+ dependencyPaths: new Set(),
146
+ hasCollectionFailures: !groupedCacheable,
147
+ cacheable: groupedCacheable,
148
+ };
149
+ }
150
+ async buildGroupedPageBrowserAssets(input, currentContribution) {
151
+ const dependencyInstanceKey = input.dependencyInstanceKey ?? '';
152
+ const currentRouteLookupKey = createRouteGraphLookupKey(input.routeFile, dependencyInstanceKey);
153
+ const groupedCollection = input.groupedBuildPlan
154
+ ? {
155
+ contributions: input.groupedBuildPlan.instances.map((instance) => ({
156
+ routeFile: instance.routeFile,
157
+ dependencyInstanceKey: instance.dependencyInstanceKey,
158
+ contribution: instance.contribution,
159
+ })),
160
+ hasCollectionFailures: false,
161
+ }
162
+ : {
163
+ contributions: [],
164
+ hasCollectionFailures: false,
165
+ };
166
+ const groupedContributions = groupedCollection.contributions;
167
+ const currentRouteGroupedDependencies = (currentContribution.dependencies ?? []).filter((dep) => isGroupedContentScriptAsset(dep));
168
+ const groupedDependencies = [...currentRouteGroupedDependencies];
169
+ const groupedAssetKeysByRoute = new Map();
170
+ const routeDisplayPaths = new Map();
171
+ const dependencyPaths = new Set([path.resolve(input.routeFile)]);
172
+ let hasCollectionFailures = groupedCollection.hasCollectionFailures;
173
+ if (currentRouteGroupedDependencies.length > 0) {
174
+ groupedAssetKeysByRoute.set(currentRouteLookupKey, new Set(currentRouteGroupedDependencies.map((dep) => getGroupedBundleAssetKey(dep.groupedBundle))));
175
+ routeDisplayPaths.set(currentRouteLookupKey, input.routeFile);
176
+ }
177
+ for (const groupedContribution of groupedContributions) {
178
+ if (groupedContribution.routeFile === input.routeFile &&
179
+ groupedContribution.dependencyInstanceKey === dependencyInstanceKey) {
180
+ continue;
181
+ }
182
+ const { contribution, routeFile } = groupedContribution;
183
+ if (!contribution?.dependencies?.length) {
184
+ continue;
185
+ }
186
+ const routeGroupedDependencies = contribution.dependencies.filter((dep) => isGroupedContentScriptAsset(dep));
187
+ if (routeGroupedDependencies.length === 0) {
188
+ continue;
189
+ }
190
+ groupedDependencies.push(...routeGroupedDependencies);
191
+ groupedAssetKeysByRoute.set(createRouteGraphLookupKey(routeFile, groupedContribution.dependencyInstanceKey), new Set(routeGroupedDependencies.map((dep) => getGroupedBundleAssetKey(dep.groupedBundle))));
192
+ routeDisplayPaths.set(createRouteGraphLookupKey(routeFile, groupedContribution.dependencyInstanceKey), routeFile);
193
+ dependencyPaths.add(path.resolve(routeFile));
194
+ }
195
+ if (groupedDependencies.length === 0) {
196
+ return {
197
+ assetsByRoute: new Map(),
198
+ dependencyPaths,
199
+ hasCollectionFailures,
200
+ cacheable: Boolean(input.groupedBuildPlan) && !hasCollectionFailures,
201
+ };
202
+ }
203
+ for (const dependency of groupedDependencies) {
204
+ if (dependency.source === 'file') {
205
+ dependencyPaths.add(path.resolve(dependency.filepath));
206
+ }
207
+ }
208
+ const processedGroupedDependencies = await this.assetProcessingService.processDependencies(groupedDependencies, `${input.integrationName}:grouped-page-browser-graph`);
209
+ const groupedAssetsByRoute = new Map();
210
+ const groupedAssetsByBundleKey = indexGroupedAssetsByBundleKey(processedGroupedDependencies);
211
+ for (const [routeFile, groupedAssetKeys] of groupedAssetKeysByRoute) {
212
+ const matchedAssets = [...groupedAssetKeys]
213
+ .flatMap((assetKey) => groupedAssetsByBundleKey.get(assetKey) ?? [])
214
+ .sort((left, right) => left.index - right.index)
215
+ .map(({ asset }) => asset);
216
+ if (groupedAssetKeys.size > 0 && matchedAssets.length === 0) {
217
+ appLogger.warn(`Grouped page-browser assets for ${routeDisplayPaths.get(routeFile) ?? routeFile} are missing groupedBundle metadata after processing. Hydration scripts may be omitted from HTML.`);
218
+ }
219
+ groupedAssetsByRoute.set(routeFile, matchedAssets);
220
+ }
221
+ for (const asset of processedGroupedDependencies) {
222
+ if (asset.sourceFilepath) {
223
+ dependencyPaths.add(path.resolve(asset.sourceFilepath));
224
+ }
225
+ for (const bundledSourceFilepath of asset.bundledSourceFilepaths ?? []) {
226
+ dependencyPaths.add(path.resolve(bundledSourceFilepath));
227
+ }
228
+ }
229
+ return {
230
+ assetsByRoute: groupedAssetsByRoute,
231
+ dependencyPaths,
232
+ hasCollectionFailures,
233
+ cacheable: Boolean(input.groupedBuildPlan) && !hasCollectionFailures,
234
+ };
235
+ }
236
+ partitionPageBrowserGraphAssets(assets) {
237
+ const entryAssets = [];
238
+ const chunkAssets = [];
239
+ for (const asset of assets) {
240
+ if (asset.packageRole === 'dynamic-chunk') {
241
+ chunkAssets.push(asset);
242
+ continue;
243
+ }
244
+ entryAssets.push(asset);
245
+ }
246
+ return { entryAssets, chunkAssets };
247
+ }
248
+ }
@@ -1,3 +1,3 @@
1
- import type { ProcessedAsset } from '../../services/assets/asset-processing-service/index.js';
1
+ import type { ProcessedAsset } from '../../../services/assets/asset-processing-service/index.js';
2
2
  export declare function buildProcessedAssetDedupeKey(asset: ProcessedAsset): string;
3
3
  export declare function dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
@@ -0,0 +1,23 @@
1
+ export function buildProcessedAssetDedupeKey(asset) {
2
+ return [
3
+ asset.kind,
4
+ asset.position ?? '',
5
+ asset.srcUrl ?? '',
6
+ asset.filepath ?? '',
7
+ asset.content ?? '',
8
+ asset.inline ? 'inline' : 'external',
9
+ asset.excludeFromHtml ? 'excluded' : 'included',
10
+ asset.packageRole ?? '',
11
+ JSON.stringify(asset.attributes ?? {}),
12
+ ].join('|');
13
+ }
14
+ export function dedupeProcessedAssets(assets) {
15
+ const unique = new Map();
16
+ for (const asset of assets) {
17
+ const key = buildProcessedAssetDedupeKey(asset);
18
+ if (!unique.has(key)) {
19
+ unique.set(key, asset);
20
+ }
21
+ }
22
+ return [...unique.values()];
23
+ }
@@ -0,0 +1,29 @@
1
+ import type { PageParams, PageQuery } from '../../../types/public-types.js';
2
+ export type PageDependencyInstance = {
3
+ params?: PageParams;
4
+ query?: PageQuery;
5
+ };
6
+ export type GroupedGraphScope = {
7
+ integrationName: string;
8
+ planKey: string;
9
+ };
10
+ /**
11
+ * Builds a stable cache key for one concrete dependency resolver input.
12
+ *
13
+ * @remarks
14
+ * The representation deliberately retains scalar versus array values. Delimiter-based
15
+ * encodings would make otherwise distinct route inputs collide.
16
+ */
17
+ export declare function createPageDependencyInstanceKey(input: PageDependencyInstance): string;
18
+ /**
19
+ * Combines a route file with an optional dependency-instance key for grouped graph maps.
20
+ */
21
+ export declare function createRouteGraphLookupKey(routeFile: string, dependencyInstanceKey?: string): string;
22
+ /**
23
+ * Serializes the grouped graph cache scope for one integration and dependency instance.
24
+ */
25
+ export declare function serializeGroupedGraphCacheKey(scope: GroupedGraphScope): string;
26
+ /**
27
+ * Reconstructs dependency resolver inputs from a serialized dependency-instance key.
28
+ */
29
+ export declare function parsePageDependencyInstanceKey(dependencyInstanceKey: string): PageDependencyInstance;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Builds a stable cache key for one concrete dependency resolver input.
3
+ *
4
+ * @remarks
5
+ * The representation deliberately retains scalar versus array values. Delimiter-based
6
+ * encodings would make otherwise distinct route inputs collide.
7
+ */
8
+ export function createPageDependencyInstanceKey(input) {
9
+ const params = canonicalizeInput(input.params);
10
+ const query = canonicalizeInput(input.query);
11
+ if (params.length === 0 && query.length === 0) {
12
+ return '';
13
+ }
14
+ return JSON.stringify({ params, query });
15
+ }
16
+ /**
17
+ * Combines a route file with an optional dependency-instance key for grouped graph maps.
18
+ */
19
+ export function createRouteGraphLookupKey(routeFile, dependencyInstanceKey = '') {
20
+ return JSON.stringify([routeFile, dependencyInstanceKey]);
21
+ }
22
+ /**
23
+ * Serializes the grouped graph cache scope for one integration and dependency instance.
24
+ */
25
+ export function serializeGroupedGraphCacheKey(scope) {
26
+ return JSON.stringify(['grouped', scope.integrationName, scope.planKey]);
27
+ }
28
+ /**
29
+ * Reconstructs dependency resolver inputs from a serialized dependency-instance key.
30
+ */
31
+ export function parsePageDependencyInstanceKey(dependencyInstanceKey) {
32
+ if (!dependencyInstanceKey) {
33
+ return {};
34
+ }
35
+ const parsed = JSON.parse(dependencyInstanceKey);
36
+ if (!isSerializedDependencyInstance(parsed)) {
37
+ throw new TypeError('Invalid page dependency instance key.');
38
+ }
39
+ return {
40
+ ...(parsed.params.length > 0 ? { params: Object.fromEntries(parsed.params) } : {}),
41
+ ...(parsed.query.length > 0 ? { query: Object.fromEntries(parsed.query) } : {}),
42
+ };
43
+ }
44
+ function canonicalizeInput(input) {
45
+ return Object.entries(input ?? {})
46
+ .sort(([left], [right]) => left.localeCompare(right))
47
+ .map(([key, value]) => [key, Array.isArray(value) ? [...value] : value]);
48
+ }
49
+ function isSerializedDependencyInstance(value) {
50
+ if (!value || typeof value !== 'object' || !('params' in value) || !('query' in value)) {
51
+ return false;
52
+ }
53
+ return Array.isArray(value.params) && Array.isArray(value.query);
54
+ }
@@ -0,0 +1,38 @@
1
+ import type { ProcessedAsset } from '../../../services/assets/asset-processing-service/index.js';
2
+ import type { HtmlDocumentContribution } from '../../../services/html/html-transformer.service.js';
3
+ import type { EcoPagesAppConfig } from '../../../types/internal-types.js';
4
+ import type { EcoComponent, EcoPageFile, IntegrationRendererRenderOptions, PageBrowserGraphContribution, PageBrowserGraphContributionContext, PagePackageResult, RouteRendererBody, RouteRendererOptions } from '../../../types/public-types.js';
5
+ import type { ResolvedPageDependencies } from '../../page-loading/resolved-page-dependencies.js';
6
+ import type { RouteHtmlFinalization, RouteRenderOrchestratorAdapter, RouteRenderOrchestratorResolvedInputs } from './route-render-orchestrator.js';
7
+ /**
8
+ * Host surface required to build the orchestrator adapter for one integration renderer.
9
+ */
10
+ export type IntegrationRouteRenderAdapterHost<C> = {
11
+ readonly name: string;
12
+ readonly appConfig: EcoPagesAppConfig;
13
+ readonly watch: boolean;
14
+ readonly hostOwnsDevClient?: boolean;
15
+ resolveRouteRenderInputs(routeOptions: RouteRendererOptions): Promise<RouteRenderOrchestratorResolvedInputs>;
16
+ resolveRouteDependencies(input: {
17
+ components: (EcoComponent | Partial<EcoComponent>)[];
18
+ }): Promise<{
19
+ resolvedDependencies: ProcessedAsset[];
20
+ }>;
21
+ importPageFile(file: string): Promise<EcoPageFile>;
22
+ collectPageBrowserGraphContribution(context: PageBrowserGraphContributionContext): Promise<PageBrowserGraphContribution | undefined>;
23
+ resolvePageDependencies(context: PageBrowserGraphContributionContext): Promise<ResolvedPageDependencies | undefined>;
24
+ buildPageBrowserGraphContributionContext(routeFile: string, routeOptions?: Pick<RouteRendererOptions, 'params' | 'query'>): Promise<PageBrowserGraphContributionContext>;
25
+ renderRouteBody(renderOptions: IntegrationRendererRenderOptions<C>): Promise<RouteRendererBody>;
26
+ getDocumentAttributes(renderOptions: IntegrationRendererRenderOptions<C>): Record<string, string> | undefined;
27
+ getHtmlDocumentContributions(options: {
28
+ renderOptions: IntegrationRendererRenderOptions<C>;
29
+ partial: boolean;
30
+ }): HtmlDocumentContribution[] | undefined;
31
+ applyAttributesToHtmlElement(html: string, attributes: Record<string, string>): string;
32
+ transformRouteResponse(response: Response, htmlContributions?: HtmlDocumentContribution[], pagePackage?: PagePackageResult): Promise<RouteRendererBody>;
33
+ };
34
+ /**
35
+ * Builds the internal route-render adapter consumed by `RouteRenderOrchestrator`.
36
+ */
37
+ export declare function createIntegrationRouteRenderAdapter<C>(host: IntegrationRouteRenderAdapterHost<C>): RouteRenderOrchestratorAdapter<C>;
38
+ export type { RouteHtmlFinalization };
@@ -0,0 +1,26 @@
1
+ import { buildRouteHtmlFinalization } from './route-html-finalization.service.js';
2
+ /**
3
+ * Builds the internal route-render adapter consumed by `RouteRenderOrchestrator`.
4
+ */
5
+ export function createIntegrationRouteRenderAdapter(host) {
6
+ return {
7
+ name: host.name,
8
+ resolveRouteRenderInputs: (routeOptions) => host.resolveRouteRenderInputs(routeOptions),
9
+ resolveRouteDependencies: (input) => host.resolveRouteDependencies(input),
10
+ collectPageBrowserGraphContribution: (context) => host.collectPageBrowserGraphContribution(context),
11
+ resolvePageDependencies: (context) => host.resolvePageDependencies(context),
12
+ buildPageBrowserGraphContributionContext: (routeFile, routeOptions) => host.buildPageBrowserGraphContributionContext(routeFile, routeOptions),
13
+ renderRouteBody: (renderOptions) => host.renderRouteBody(renderOptions),
14
+ getRouteHtmlFinalization: (renderOptions) => buildRouteHtmlFinalization({
15
+ appConfig: host.appConfig,
16
+ watch: host.watch,
17
+ hostOwnsDevClient: host.hostOwnsDevClient,
18
+ integrationName: host.name,
19
+ renderOptions,
20
+ getDocumentAttributes: (options) => host.getDocumentAttributes(options),
21
+ getHtmlDocumentContributions: (options) => host.getHtmlDocumentContributions(options),
22
+ applyAttributesToHtmlElement: (html, attributes) => host.applyAttributesToHtmlElement(html, attributes),
23
+ }),
24
+ transformRouteResponse: (response, htmlContributions, pagePackage) => host.transformRouteResponse(response, htmlContributions, pagePackage),
25
+ };
26
+ }
@@ -0,0 +1,6 @@
1
+ export declare function decodeHtmlEntities(value: string): string;
2
+ export declare function normalizeUnresolvedMarkerArtifactHtml(html: string): string;
3
+ export declare function inspectUnresolvedMarkerArtifactHtml(html: string): {
4
+ hasUnresolvedMarkerArtifacts: boolean;
5
+ normalizedHtml: string;
6
+ };
@@ -0,0 +1,25 @@
1
+ export function decodeHtmlEntities(value) {
2
+ let decoded = value;
3
+ let previous;
4
+ do {
5
+ previous = decoded;
6
+ decoded = decoded
7
+ .replaceAll('&quot;', '"')
8
+ .replaceAll('&#39;', "'")
9
+ .replaceAll('&#x27;', "'")
10
+ .replaceAll('&lt;', '<')
11
+ .replaceAll('&gt;', '>')
12
+ .replaceAll('&amp;', '&');
13
+ } while (decoded !== previous);
14
+ return decoded;
15
+ }
16
+ export function normalizeUnresolvedMarkerArtifactHtml(html) {
17
+ return html.replace(/&(?:amp;)?lt;eco-marker\b[\s\S]*?&(?:amp;)?gt;&(?:amp;)?lt;\/eco-marker&(?:amp;)?gt;/g, (marker) => decodeHtmlEntities(marker));
18
+ }
19
+ export function inspectUnresolvedMarkerArtifactHtml(html) {
20
+ const normalizedHtml = normalizeUnresolvedMarkerArtifactHtml(html);
21
+ return {
22
+ normalizedHtml,
23
+ hasUnresolvedMarkerArtifacts: normalizedHtml.includes('<eco-marker'),
24
+ };
25
+ }
@@ -0,0 +1,15 @@
1
+ import type { HtmlDocumentContribution } from '../../../services/html/html-transformer.service.js';
2
+ import type { PageMetadataProps, PageRobotsMetadata } from '../../../types/public-types.js';
3
+ /**
4
+ * Builds a head contribution for non-default `metadata.robots` values.
5
+ *
6
+ * @remarks
7
+ * When `robots` is omitted or matches the default `index,follow` behaviour,
8
+ * no tag is emitted (Next.js parity). Otherwise a single
9
+ * `<meta name="robots" content="...">` contribution is returned.
10
+ */
11
+ export declare function buildRobotsMetaContribution(metadata: Pick<PageMetadataProps, 'robots'>): HtmlDocumentContribution | undefined;
12
+ /**
13
+ * Formats robots directives for a meta tag, or `undefined` when defaults apply.
14
+ */
15
+ export declare function formatRobotsMetaContent(robots: PageRobotsMetadata | undefined): string | undefined;
@@ -0,0 +1,43 @@
1
+ import { escapeHtmlAttribute } from '../../../utils/html-escaping.js';
2
+ /**
3
+ * Builds a head contribution for non-default `metadata.robots` values.
4
+ *
5
+ * @remarks
6
+ * When `robots` is omitted or matches the default `index,follow` behaviour,
7
+ * no tag is emitted (Next.js parity). Otherwise a single
8
+ * `<meta name="robots" content="...">` contribution is returned.
9
+ */
10
+ export function buildRobotsMetaContribution(metadata) {
11
+ const content = formatRobotsMetaContent(metadata.robots);
12
+ if (!content) {
13
+ return undefined;
14
+ }
15
+ return {
16
+ placement: 'head-append',
17
+ html: `<meta name="robots" content="${escapeHtmlAttribute(content)}">`,
18
+ };
19
+ }
20
+ /**
21
+ * Formats robots directives for a meta tag, or `undefined` when defaults apply.
22
+ */
23
+ export function formatRobotsMetaContent(robots) {
24
+ if (!robots) {
25
+ return undefined;
26
+ }
27
+ const index = robots.index !== false;
28
+ const follow = robots.follow !== false;
29
+ const directives = [];
30
+ if (!index) {
31
+ directives.push('noindex');
32
+ }
33
+ if (!follow) {
34
+ directives.push('nofollow');
35
+ }
36
+ if (robots.nocache) {
37
+ directives.push('nocache');
38
+ }
39
+ if (directives.length === 0) {
40
+ return undefined;
41
+ }
42
+ return directives.join(', ');
43
+ }
@@ -0,0 +1,25 @@
1
+ import type { HtmlDocumentContribution } from '../../../services/html/html-transformer.service.js';
2
+ import type { IntegrationRendererRenderOptions } from '../../../types/public-types.js';
3
+ import type { RouteHtmlFinalization } from './route-render-orchestrator.js';
4
+ import type { EcoPagesAppConfig } from '../../../types/internal-types.js';
5
+ export type RouteHtmlFinalizationContext<C> = {
6
+ appConfig: EcoPagesAppConfig;
7
+ watch: boolean;
8
+ hostOwnsDevClient?: boolean;
9
+ integrationName: string;
10
+ renderOptions: IntegrationRendererRenderOptions<C>;
11
+ getDocumentAttributes: (renderOptions: IntegrationRendererRenderOptions<C>) => Record<string, string> | undefined;
12
+ getHtmlDocumentContributions: (options: {
13
+ renderOptions: IntegrationRendererRenderOptions<C>;
14
+ partial: boolean;
15
+ }) => HtmlDocumentContribution[] | undefined;
16
+ applyAttributesToHtmlElement: (html: string, attributes: Record<string, string>) => string;
17
+ };
18
+ /**
19
+ * Builds the structural HTML finalization plan for one prepared route render.
20
+ *
21
+ * @remarks
22
+ * Merges core robots meta contributions with integration-owned document
23
+ * contributions so page-level `metadata.robots` works across templates.
24
+ */
25
+ export declare function buildRouteHtmlFinalization<C>(context: RouteHtmlFinalizationContext<C>): RouteHtmlFinalization;
@@ -0,0 +1,44 @@
1
+ import { buildRobotsMetaContribution } from './robots-meta.contribution.js';
2
+ import { DevToolbarHost } from '../../../dev-toolbar/dev-toolbar-host.js';
3
+ /**
4
+ * Builds the structural HTML finalization plan for one prepared route render.
5
+ *
6
+ * @remarks
7
+ * Merges core robots meta contributions with integration-owned document
8
+ * contributions so page-level `metadata.robots` works across templates.
9
+ */
10
+ export function buildRouteHtmlFinalization(context) {
11
+ const { renderOptions } = context;
12
+ const documentAttributes = context.getDocumentAttributes(renderOptions);
13
+ const integrationContributions = context.getHtmlDocumentContributions({ renderOptions, partial: false }) ?? [];
14
+ const robotsContribution = buildRobotsMetaContribution(renderOptions.metadata ?? {});
15
+ const devToolbarContribution = buildDevToolbarManifestContribution(context);
16
+ const htmlContributions = [
17
+ ...(robotsContribution ? [robotsContribution] : []),
18
+ ...(devToolbarContribution ? [devToolbarContribution] : []),
19
+ ...integrationContributions,
20
+ ];
21
+ const hasStructuralFinalization = documentAttributes && Object.keys(documentAttributes).length > 0;
22
+ if (!hasStructuralFinalization && htmlContributions.length === 0) {
23
+ return {};
24
+ }
25
+ return {
26
+ htmlContributions,
27
+ finalizeHtml: (html) => {
28
+ if (!documentAttributes || Object.keys(documentAttributes).length === 0) {
29
+ return html;
30
+ }
31
+ return context.applyAttributesToHtmlElement(html, documentAttributes);
32
+ },
33
+ };
34
+ }
35
+ function buildDevToolbarManifestContribution(context) {
36
+ return DevToolbarHost.forApp(context.appConfig, {
37
+ watch: context.watch,
38
+ hostOwnsDevClient: context.hostOwnsDevClient,
39
+ }).buildRouteManifestContribution({
40
+ routeFile: context.renderOptions.file,
41
+ integrationName: context.integrationName,
42
+ pagePackage: context.renderOptions.pagePackage,
43
+ });
44
+ }
@@ -0,0 +1,26 @@
1
+ import type { EcoPagesAppConfig } from '../../../types/internal-types.js';
2
+ import type { EcoComponent, EcoPageComponent, EcoPageFile, HtmlTemplateProps, IntegrationRendererRenderOptions, PageBrowserGraphResult, PageMetadataProps, EcoPageLayoutEntry, RouteRendererOptions } from '../../../types/public-types.js';
3
+ import { type ProcessedAsset } from '../../../services/assets/asset-processing-service/index.js';
4
+ type PreparedRenderInputs = {
5
+ Page: EcoPageFile['default'] | EcoPageComponent<any>;
6
+ HtmlTemplate: EcoComponent<HtmlTemplateProps>;
7
+ Layouts: EcoComponent[];
8
+ Layout?: EcoComponent;
9
+ layoutEntries?: EcoPageLayoutEntry[];
10
+ props: Record<string, unknown>;
11
+ metadata: PageMetadataProps;
12
+ integrationSpecificProps: Record<string, unknown>;
13
+ };
14
+ /**
15
+ * Assembles the final integration render options after route prep dependencies resolve.
16
+ */
17
+ export declare function buildPreparedRenderOptions<C = unknown>(input: {
18
+ routeOptions: RouteRendererOptions;
19
+ resolvedInputs: PreparedRenderInputs;
20
+ resolvedPageDependencyComponents?: ReadonlyArray<EcoComponent | Partial<EcoComponent>>;
21
+ resolvedDependencies: ProcessedAsset[];
22
+ allDependencies: ProcessedAsset[];
23
+ pageBrowserGraph?: PageBrowserGraphResult;
24
+ appConfig: EcoPagesAppConfig;
25
+ }): IntegrationRendererRenderOptions<C>;
26
+ export {};