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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/README.md +40 -9
  2. package/package.json +371 -33
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +115 -6
  5. package/src/adapters/abstract/application-adapter.js +261 -120
  6. package/src/adapters/abstract/router-adapter.js +12 -4
  7. package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
  8. package/src/adapters/abstract/segment-path-matcher.js +147 -0
  9. package/src/adapters/abstract/server-adapter.d.ts +16 -2
  10. package/src/adapters/abstract/server-adapter.js +22 -14
  11. package/src/adapters/abstract/ws-pattern-matcher.d.ts +12 -0
  12. package/src/adapters/abstract/ws-pattern-matcher.js +28 -0
  13. package/src/adapters/bun/bun-user-websocket-lifecycle.d.ts +22 -0
  14. package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
  15. package/src/adapters/bun/client-bridge.d.ts +1 -0
  16. package/src/adapters/bun/client-bridge.js +51 -47
  17. package/src/adapters/bun/create-app.d.ts +9 -6
  18. package/src/adapters/bun/create-app.js +171 -130
  19. package/src/adapters/bun/hmr-manager.d.ts +1 -1
  20. package/src/adapters/bun/hmr-manager.js +62 -57
  21. package/src/adapters/bun/index.d.ts +1 -1
  22. package/src/adapters/bun/index.js +2 -8
  23. package/src/adapters/bun/runtime-host.d.ts +1 -1
  24. package/src/adapters/bun/runtime-host.js +61 -54
  25. package/src/adapters/bun/server-adapter.d.ts +91 -41
  26. package/src/adapters/bun/server-adapter.js +566 -426
  27. package/src/adapters/bun/static-preview-host.d.ts +1 -1
  28. package/src/adapters/bun/static-preview-host.js +43 -41
  29. package/src/adapters/create-app.d.ts +13 -11
  30. package/src/adapters/create-app.js +11 -63
  31. package/src/adapters/index.d.ts +2 -2
  32. package/src/adapters/index.js +2 -8
  33. package/src/adapters/node/create-app.d.ts +8 -3
  34. package/src/adapters/node/create-app.js +126 -84
  35. package/src/adapters/node/http-request-bridge.js +147 -106
  36. package/src/adapters/node/node-client-bridge.d.ts +1 -0
  37. package/src/adapters/node/node-client-bridge.js +62 -61
  38. package/src/adapters/node/node-hmr-manager.d.ts +1 -1
  39. package/src/adapters/node/node-hmr-manager.js +58 -48
  40. package/src/adapters/node/runtime-host.d.ts +1 -1
  41. package/src/adapters/node/runtime-host.js +96 -89
  42. package/src/adapters/node/server-adapter-dependencies.js +18 -17
  43. package/src/adapters/node/server-adapter.d.ts +63 -23
  44. package/src/adapters/node/server-adapter.js +346 -297
  45. package/src/adapters/node/static-content-server.d.ts +1 -0
  46. package/src/adapters/node/static-content-server.js +172 -183
  47. package/src/adapters/node/static-preview-host.d.ts +1 -1
  48. package/src/adapters/node/static-preview-host.js +88 -64
  49. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  50. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  51. package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
  52. package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
  53. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
  54. package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
  55. package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
  56. package/src/adapters/shared/http/api-request-pipeline.js +132 -0
  57. package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
  58. package/src/adapters/shared/http/api-response.js +79 -0
  59. package/src/adapters/shared/http/create-body-response.d.ts +12 -0
  60. package/src/adapters/shared/http/create-body-response.js +26 -0
  61. package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
  62. package/src/adapters/shared/http/define-api-handler.js +49 -0
  63. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  64. package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
  65. package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
  66. package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
  67. package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
  68. package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
  69. package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
  70. package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
  71. package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
  72. package/src/adapters/shared/http/fs-server-response-matcher.js +258 -0
  73. package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
  74. package/src/adapters/shared/http/run-middleware-chain.js +17 -0
  75. package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
  76. package/src/adapters/shared/runtime/application-adapter.js +75 -0
  77. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
  78. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
  79. package/src/adapters/shared/runtime/copy-runtime-public-dir.d.ts +6 -0
  80. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
  81. package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
  82. package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
  83. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  84. package/src/adapters/shared/runtime/port-manager.js +226 -0
  85. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  86. package/src/adapters/shared/runtime/render-context.js +99 -0
  87. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -3
  88. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
  89. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
  90. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
  91. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
  92. package/src/adapters/shared/runtime/server-adapter.js +301 -0
  93. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  94. package/src/adapters/shared/runtime/server-route-handler.js +77 -0
  95. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +27 -35
  96. package/src/adapters/shared/runtime/server-static-builder.js +172 -0
  97. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  98. package/src/adapters/shared/ws/node-http-websocket-upgrades.d.ts +21 -0
  99. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
  100. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  101. package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
  102. package/src/build/README.md +191 -31
  103. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  104. package/src/build/app-build-manifest-runtime.js +145 -0
  105. package/src/build/browser/browser-runtime-manifest.js +58 -0
  106. package/src/build/browser/browser-runtime-plugin-helpers.js +34 -0
  107. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +1 -1
  108. package/src/build/browser/browser-runtime-plugin.js +216 -0
  109. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  110. package/src/build/browser/jsx-ownership-plugins.js +55 -0
  111. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  112. package/src/build/browser/lit-static-render-worker-context.js +4 -0
  113. package/src/build/build-adapter.d.ts +29 -334
  114. package/src/build/build-adapter.js +273 -237
  115. package/src/build/cache/build-input-fingerprint.d.ts +28 -0
  116. package/src/build/cache/build-input-fingerprint.js +33 -0
  117. package/src/build/cache/cache-constants.d.ts +4 -0
  118. package/src/build/cache/cache-constants.js +4 -0
  119. package/src/build/cache/cache-keys.d.ts +22 -0
  120. package/src/build/cache/cache-keys.js +71 -0
  121. package/src/build/cache/pages-unified-graph-build.d.ts +31 -0
  122. package/src/build/cache/pages-unified-graph-build.js +199 -0
  123. package/src/build/cache/production-build-cache.d.ts +21 -0
  124. package/src/build/cache/production-build-cache.js +56 -0
  125. package/src/build/cache/server-entry-build-cache.d.ts +43 -0
  126. package/src/build/cache/server-entry-build-cache.js +153 -0
  127. package/src/build/contracts/build-contracts.d.ts +96 -0
  128. package/src/build/contracts/build-contracts.js +1 -0
  129. package/src/build/contracts/build-manifest.d.ts +90 -0
  130. package/src/build/contracts/build-manifest.js +64 -0
  131. package/src/build/contracts/build-types.js +1 -0
  132. package/src/build/contracts/content-virtual-modules.d.ts +12 -0
  133. package/src/build/contracts/content-virtual-modules.js +29 -0
  134. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
  135. package/src/build/rolldown/rolldown-adapter-helpers.js +458 -0
  136. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  137. package/src/build/rolldown/rolldown-build-adapter.js +57 -0
  138. package/src/build/rolldown/rolldown-build-invocation-metrics.d.ts +12 -0
  139. package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
  140. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
  141. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  142. package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
  143. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  144. package/src/build/rolldown/runtime-build-output-normalizer.d.ts +10 -0
  145. package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
  146. package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
  147. package/src/build/runtime/build-profile-options.d.ts +7 -0
  148. package/src/build/runtime/build-profile-options.js +37 -0
  149. package/src/build/runtime/build-request-identity.d.ts +17 -0
  150. package/src/build/runtime/build-request-identity.js +79 -0
  151. package/src/build/runtime/build-request-policy.d.ts +58 -0
  152. package/src/build/runtime/build-request-policy.js +84 -0
  153. package/src/build/runtime/build-runtime.d.ts +28 -0
  154. package/src/build/runtime/build-runtime.js +75 -0
  155. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  156. package/src/build/runtime/deduping-build-executor.js +40 -0
  157. package/src/build/runtime/parallel-build-executor.d.ts +21 -0
  158. package/src/build/runtime/parallel-build-executor.js +60 -0
  159. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  160. package/src/build/runtime/serialized-build-executor.js +79 -0
  161. package/src/cache/index.d.ts +2 -1
  162. package/src/cache/index.js +7 -6
  163. package/src/cache/module-parse-cache.d.ts +5 -0
  164. package/src/cache/module-parse-cache.js +122 -67
  165. package/src/cache/module-transform-profiler.d.ts +8 -0
  166. package/src/cache/module-transform-profiler.js +8 -0
  167. package/src/client/navigation-scripts/classification.d.ts +16 -0
  168. package/src/client/navigation-scripts/classification.js +49 -0
  169. package/src/client/navigation-scripts/index.d.ts +3 -0
  170. package/src/client/navigation-scripts/index.js +3 -0
  171. package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
  172. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
  173. package/src/client/navigation-scripts/registry.d.ts +11 -0
  174. package/src/client/navigation-scripts/registry.js +16 -0
  175. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  176. package/src/client/navigation-scripts/rerun-queue.js +90 -0
  177. package/src/client/scroll.d.ts +17 -0
  178. package/src/client/scroll.js +33 -0
  179. package/src/client/scroll.test.browser.d.ts +1 -0
  180. package/src/client/scroll.test.browser.js +31 -0
  181. package/src/client/view-transitions.d.ts +32 -0
  182. package/src/client/view-transitions.js +120 -0
  183. package/src/client/view-transitions.test.browser.d.ts +1 -0
  184. package/src/client/view-transitions.test.browser.js +56 -0
  185. package/src/config/config-builder.d.ts +40 -10
  186. package/src/config/config-builder.js +647 -600
  187. package/src/config/constants.d.ts +1 -0
  188. package/src/config/constants.js +44 -23
  189. package/src/declarations.d.ts +1 -0
  190. package/src/dev/README.md +24 -0
  191. package/src/dev/client-bridge-registry.d.ts +5 -0
  192. package/src/dev/client-bridge-registry.js +10 -0
  193. package/src/dev/dev-client-ownership.d.ts +7 -0
  194. package/src/dev/dev-client-ownership.js +8 -0
  195. package/src/dev/hmr-manager-registry.d.ts +8 -0
  196. package/src/dev/hmr-manager-registry.js +10 -0
  197. package/src/dev/host-runtime.d.ts +3 -0
  198. package/src/dev/host-runtime.js +25 -23
  199. package/src/dev/runtime-server-started-message.d.ts +2 -0
  200. package/src/dev/runtime-server-started-message.js +3 -0
  201. package/src/dev/sc-server.js +106 -103
  202. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  203. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  204. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  205. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  206. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  207. package/src/dev/transform-server/dev-transform-import-rewriter.js +126 -0
  208. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  209. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  210. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  211. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  212. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  213. package/src/dev/transform-server/dev-transform-server.js +191 -0
  214. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  215. package/src/dev/transform-server/dev-transform-url.js +58 -0
  216. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
  217. package/src/dev/transform-server/dev-transform-vendor-registry.js +158 -0
  218. package/src/dev/transform-server/index.d.ts +6 -0
  219. package/src/dev/transform-server/index.js +4 -0
  220. package/src/dev/transform-server/types.d.ts +15 -0
  221. package/src/dev/transform-server/types.js +1 -0
  222. package/src/dev-toolbar/README.md +52 -0
  223. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  224. package/src/dev-toolbar/define-dev-tool.js +9 -0
  225. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  226. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  227. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  228. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  229. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  230. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  231. package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
  232. package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
  233. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  234. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  235. package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
  236. package/src/dev-toolbar/dev-toolbar-package.js +78 -0
  237. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  238. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  239. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  240. package/src/diagnostics/request-build-dedupe.js +39 -0
  241. package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
  242. package/src/diagnostics/request-pipeline-metrics.js +121 -0
  243. package/src/diagnostics/startup-trace.d.ts +81 -0
  244. package/src/diagnostics/startup-trace.js +281 -0
  245. package/src/eco/README.md +17 -0
  246. package/src/eco/component-identity.d.ts +13 -0
  247. package/src/eco/component-identity.js +18 -0
  248. package/src/eco/eco-declared-component.d.ts +15 -0
  249. package/src/eco/eco-declared-component.js +23 -0
  250. package/src/eco/eco.browser.js +63 -70
  251. package/src/eco/eco.js +163 -97
  252. package/src/eco/eco.types.d.ts +47 -8
  253. package/src/eco/eco.types.js +5 -0
  254. package/src/eco/eco.utils.d.ts +1 -1
  255. package/src/eco/eco.utils.js +1 -10
  256. package/src/eco/global-injector-map.js +55 -41
  257. package/src/eco/lazy-injector-map.js +90 -60
  258. package/src/eco/module-dependencies.js +52 -44
  259. package/src/eco/page-layout-normalization.d.ts +21 -0
  260. package/src/eco/page-layout-normalization.js +69 -0
  261. package/src/env.d.ts +2 -0
  262. package/src/errors/http-error.d.ts +8 -0
  263. package/src/errors/http-error.js +66 -49
  264. package/src/errors/index.d.ts +1 -0
  265. package/src/errors/index.js +3 -6
  266. package/src/errors/locals-access-error.js +5 -8
  267. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  268. package/src/errors/undeclared-component-dependency-error.js +17 -0
  269. package/src/global/app-logger.js +3 -6
  270. package/src/hmr/README.md +21 -0
  271. package/src/hmr/client/hmr-runtime.js +119 -110
  272. package/src/hmr/client/module-update.d.ts +13 -0
  273. package/src/hmr/client/module-update.js +39 -0
  274. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  275. package/src/hmr/hmr-asset-paths.js +22 -0
  276. package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
  277. package/src/hmr/hmr-entrypoint-output.js +34 -0
  278. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  279. package/src/hmr/hmr-file-change-prep.js +14 -0
  280. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  281. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  282. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  283. package/src/hmr/hmr-runtime-paths.js +13 -0
  284. package/src/hmr/hmr-strategy.d.ts +9 -0
  285. package/src/hmr/hmr-strategy.js +113 -42
  286. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  287. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
  288. package/src/hmr/strategies/js-hmr-strategy.js +107 -167
  289. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  290. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
  291. package/src/index.browser.d.ts +1 -0
  292. package/src/index.browser.js +2 -4
  293. package/src/index.d.ts +4 -1
  294. package/src/index.js +7 -21
  295. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -6
  296. package/src/integrations/ghtml/ghtml-renderer.js +12 -56
  297. package/src/integrations/ghtml/ghtml.constants.js +1 -4
  298. package/src/integrations/ghtml/ghtml.plugin.d.ts +3 -16
  299. package/src/integrations/ghtml/ghtml.plugin.js +10 -20
  300. package/src/islands/README.md +25 -0
  301. package/src/islands/island-host.d.ts +37 -0
  302. package/src/islands/island-host.js +55 -0
  303. package/src/plugins/README.md +2 -1
  304. package/src/plugins/alias-resolver-cache.d.ts +6 -9
  305. package/src/plugins/alias-resolver-cache.js +114 -97
  306. package/src/plugins/alias-resolver-plugin.d.ts +3 -3
  307. package/src/plugins/alias-resolver-plugin.js +35 -62
  308. package/src/plugins/define-integration.d.ts +26 -0
  309. package/src/plugins/define-integration.js +20 -0
  310. package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
  311. package/src/plugins/eco-component-meta-plugin.js +120 -162
  312. package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
  313. package/src/plugins/foreign-jsx-override-plugin.js +49 -37
  314. package/src/plugins/integration-plugin.d.ts +43 -14
  315. package/src/plugins/integration-plugin.js +212 -190
  316. package/src/plugins/jsx-import-source.utils.d.ts +8 -0
  317. package/src/plugins/jsx-import-source.utils.js +21 -0
  318. package/src/plugins/processor.d.ts +71 -12
  319. package/src/plugins/processor.js +168 -130
  320. package/src/plugins/runtime-capability.js +1 -0
  321. package/src/plugins/source-transform.d.ts +32 -1
  322. package/src/plugins/source-transform.js +112 -60
  323. package/src/plugins/tsconfig-import-resolver.d.ts +35 -0
  324. package/src/plugins/tsconfig-import-resolver.js +235 -0
  325. package/src/route-renderer/GRAPH.md +26 -32
  326. package/src/route-renderer/README.md +54 -33
  327. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  328. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
  329. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
  330. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
  331. package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
  332. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
  333. package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +17 -7
  334. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +191 -0
  335. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
  336. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
  337. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
  338. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
  339. package/src/route-renderer/orchestration/integration-renderer.d.ts +41 -151
  340. package/src/route-renderer/orchestration/integration-renderer.js +798 -988
  341. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
  342. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
  343. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
  344. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
  345. package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
  346. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
  347. package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
  348. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
  349. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
  350. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
  351. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
  352. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
  353. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
  354. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
  355. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
  356. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
  357. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
  358. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
  359. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
  360. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +232 -0
  361. package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
  362. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
  363. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
  364. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
  365. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
  366. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
  367. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
  368. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
  369. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
  370. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
  371. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
  372. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
  373. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
  374. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +49 -0
  375. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
  376. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
  377. package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
  378. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
  379. package/src/route-renderer/orchestration/string-markup-renderer.d.ts +14 -0
  380. package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
  381. package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
  382. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  383. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  384. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
  385. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
  386. package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
  387. package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
  388. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  389. package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
  390. package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
  391. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  392. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  393. package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
  394. package/src/route-renderer/page-loading/page-module-loader.js +136 -124
  395. package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
  396. package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
  397. package/src/route-renderer/route-renderer.js +74 -76
  398. package/src/router/README.md +31 -0
  399. package/src/router/client/link-intent.d.ts +11 -21
  400. package/src/router/client/link-intent.js +56 -30
  401. package/src/router/client/link-intent.test.browser.js +50 -39
  402. package/src/router/client/link-navigation-policy.d.ts +45 -0
  403. package/src/router/client/link-navigation-policy.js +122 -0
  404. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  405. package/src/router/client/link-navigation-policy.test.browser.js +82 -0
  406. package/src/router/client/navigation-coordinator.d.ts +1 -1
  407. package/src/router/client/navigation-coordinator.js +235 -201
  408. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  409. package/src/router/client/navigation-lifecycle.js +50 -0
  410. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  411. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  412. package/src/router/server/route-registry.js +237 -242
  413. package/src/services/README.md +5 -0
  414. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  415. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
  416. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +7 -1
  417. package/src/services/assets/asset-processing-service/asset-processing.service.js +308 -268
  418. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  419. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  420. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  421. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -1
  422. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -45
  423. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  424. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
  425. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +4 -2
  426. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -38
  427. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  428. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
  429. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  430. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
  431. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  432. package/src/services/assets/asset-processing-service/index.js +8 -6
  433. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  434. package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
  435. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  436. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
  437. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  438. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  439. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  440. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  441. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  442. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
  443. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  444. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  445. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
  446. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  447. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
  448. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -121
  449. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  450. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
  451. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  452. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
  453. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  454. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
  455. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  456. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
  457. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  458. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
  459. package/src/services/assets/browser-bundle.service.d.ts +28 -30
  460. package/src/services/assets/browser-bundle.service.js +54 -40
  461. package/src/services/cache/cache.types.d.ts +4 -2
  462. package/src/services/cache/cache.types.js +5 -0
  463. package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
  464. package/src/services/cache/html-page-cache-dependency-index.js +88 -0
  465. package/src/services/cache/index.d.ts +2 -0
  466. package/src/services/cache/index.js +8 -7
  467. package/src/services/cache/memory-cache-store.js +101 -89
  468. package/src/services/cache/page-cache-service.d.ts +31 -1
  469. package/src/services/cache/page-cache-service.js +237 -150
  470. package/src/services/cache/page-request-cache-coordinator.service.js +106 -102
  471. package/src/services/html/html-rewriter-provider.service.js +61 -61
  472. package/src/services/html/html-transformer.service.d.ts +1 -1
  473. package/src/services/html/html-transformer.service.js +249 -266
  474. package/src/services/invalidation/development-invalidation.service.d.ts +25 -2
  475. package/src/services/invalidation/development-invalidation.service.js +239 -175
  476. package/src/services/module-loading/README.md +52 -0
  477. package/src/services/module-loading/app-module-loader.service.js +1 -0
  478. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  479. package/src/services/module-loading/app-server-module-transpiler.service.js +103 -118
  480. package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
  481. package/src/services/module-loading/collection-server-module-build.service.js +83 -0
  482. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  483. package/src/services/module-loading/module-loading-types.js +1 -0
  484. package/src/services/module-loading/page-module-import.service.d.ts +11 -13
  485. package/src/services/module-loading/page-module-import.service.js +222 -184
  486. package/src/services/module-loading/route-module-build-cache-registry.d.ts +24 -0
  487. package/src/services/module-loading/route-module-build-cache-registry.js +51 -0
  488. package/src/services/module-loading/route-module-build-cache.d.ts +4 -0
  489. package/src/services/module-loading/route-module-build-cache.js +3 -0
  490. package/src/services/module-loading/route-module-build-cache.store.d.ts +57 -0
  491. package/src/services/module-loading/route-module-build-cache.store.js +202 -0
  492. package/src/services/module-loading/route-module-build-manifest.d.ts +57 -0
  493. package/src/services/module-loading/route-module-build-manifest.js +60 -0
  494. package/src/services/module-loading/route-module-dependency-hasher.d.ts +81 -0
  495. package/src/services/module-loading/route-module-dependency-hasher.js +148 -0
  496. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
  497. package/src/services/module-loading/server-module-transpiler.service.js +65 -62
  498. package/src/services/module-loading/source-module-support.js +15 -7
  499. package/src/services/runtime-state/dev-graph.service.js +165 -157
  500. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  501. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  502. package/src/services/validation/schema-validation-service.d.ts +1 -4
  503. package/src/services/validation/schema-validation-service.js +156 -95
  504. package/src/services/validation/standard-schema.types.d.ts +9 -62
  505. package/src/services/validation/standard-schema.types.js +1 -0
  506. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  507. package/src/services/validation/validate-standard-schema.js +14 -0
  508. package/src/static-site-generator/README.md +41 -0
  509. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
  510. package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
  511. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  512. package/src/static-site-generator/sitemap-routes.js +36 -0
  513. package/src/static-site-generator/sitemap.d.ts +15 -0
  514. package/src/static-site-generator/sitemap.js +42 -0
  515. package/src/static-site-generator/static-build-invalidation.d.ts +10 -0
  516. package/src/static-site-generator/static-build-invalidation.js +37 -0
  517. package/src/static-site-generator/static-export-context.d.ts +30 -0
  518. package/src/static-site-generator/static-export-context.js +1 -0
  519. package/src/static-site-generator/static-site-generator.d.ts +43 -25
  520. package/src/static-site-generator/static-site-generator.js +536 -294
  521. package/src/types/internal-types.d.ts +59 -13
  522. package/src/types/internal-types.js +1 -0
  523. package/src/types/public-types.d.ts +310 -95
  524. package/src/types/public-types.js +1 -0
  525. package/src/utils/deep-merge.js +39 -26
  526. package/src/utils/ecopages-route-info.d.ts +26 -0
  527. package/src/utils/ecopages-route-info.js +30 -0
  528. package/src/utils/hash.js +3 -6
  529. package/src/utils/html-escaping.d.ts +7 -0
  530. package/src/utils/html-escaping.js +22 -5
  531. package/src/utils/html.js +1 -4
  532. package/src/utils/invariant.js +11 -10
  533. package/src/utils/locals-utils.js +32 -22
  534. package/src/utils/parse-cli-args.d.ts +2 -0
  535. package/src/utils/parse-cli-args.js +73 -59
  536. package/src/utils/path-pattern.d.ts +23 -0
  537. package/src/utils/path-pattern.js +42 -0
  538. package/src/utils/path-utils.module.js +8 -11
  539. package/src/utils/resolve-entry-file.js +70 -38
  540. package/src/utils/resolve-work-dir.js +23 -27
  541. package/src/utils/runtime.js +24 -33
  542. package/src/utils/server-utils.module.d.ts +3 -2
  543. package/src/utils/server-utils.module.js +60 -53
  544. package/src/utils/static-file-extensions.d.ts +12 -0
  545. package/src/utils/static-file-extensions.js +54 -0
  546. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  547. package/src/watchers/project-watcher-ignore.js +17 -0
  548. package/src/watchers/project-watcher.d.ts +29 -6
  549. package/src/watchers/project-watcher.js +402 -257
  550. package/src/watchers/project-watcher.test-helpers.js +45 -50
  551. package/src/adapters/shared/api-response.js +0 -96
  552. package/src/adapters/shared/application-adapter.js +0 -90
  553. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  554. package/src/adapters/shared/define-api-handler.js +0 -15
  555. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  556. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  557. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  558. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  559. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  560. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  561. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  562. package/src/adapters/shared/hmr-html-response.js +0 -33
  563. package/src/adapters/shared/render-context.js +0 -93
  564. package/src/adapters/shared/runtime-app-bootstrap.js +0 -46
  565. package/src/adapters/shared/runtime-host.js +0 -0
  566. package/src/adapters/shared/server-adapter.js +0 -436
  567. package/src/adapters/shared/server-route-handler.js +0 -111
  568. package/src/adapters/shared/server-static-builder.js +0 -162
  569. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
  570. package/src/adapters/shared/shared-hmr-manager.js +0 -241
  571. package/src/adapters/shared/static-preview-host.js +0 -0
  572. package/src/build/browser-runtime-manifest.js +0 -61
  573. package/src/build/browser-runtime-plugin-helpers.js +0 -14
  574. package/src/build/browser-runtime-plugin.js +0 -173
  575. package/src/build/build-manifest.d.ts +0 -33
  576. package/src/build/build-manifest.js +0 -49
  577. package/src/build/build-types.js +0 -0
  578. package/src/build/rolldown-adapter-helpers.js +0 -265
  579. package/src/build/rolldown-build-adapter.js +0 -65
  580. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  581. package/src/build/rolldown-dev-build-adapter.js +0 -166
  582. package/src/build/rolldown-plugin-bridge.js +0 -199
  583. package/src/build/runtime-build-executor.d.ts +0 -21
  584. package/src/build/runtime-build-executor.js +0 -19
  585. package/src/build/runtime-build-output-normalizer.d.ts +0 -3
  586. package/src/build/runtime-build-output-normalizer.js +0 -111
  587. package/src/build/serialized-build-executor.js +0 -63
  588. package/src/build/server-side-css-shim-plugin.js +0 -35
  589. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  590. package/src/hmr/hmr.test.e2e.js +0 -43
  591. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  592. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  593. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  594. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -233
  595. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  596. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  597. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  598. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  599. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  600. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  601. package/src/route-renderer/orchestration/render-output.utils.js +0 -171
  602. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
  603. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  604. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  605. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  606. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  607. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  608. /package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +0 -0
  609. /package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +0 -0
  610. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  611. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -0,0 +1,71 @@
1
+ import { readFileSync } from 'node:fs';
2
+ let cachedCorePackageVersion;
3
+ /**
4
+ * Returns the installed `@ecopages/core` package version for cache invalidation.
5
+ */
6
+ export function getCorePackageVersion() {
7
+ if (cachedCorePackageVersion) {
8
+ return cachedCorePackageVersion;
9
+ }
10
+ const packageJsonPath = new URL('../../../package.json', import.meta.url);
11
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
12
+ cachedCorePackageVersion = packageJson.version ?? '0.0.0';
13
+ return cachedCorePackageVersion;
14
+ }
15
+ /** Stable fingerprint for JSX options used in build and disk cache keys. */
16
+ export function createJsxCacheKey(jsx) {
17
+ if (!jsx) {
18
+ return 'jsx:default';
19
+ }
20
+ return JSON.stringify({
21
+ development: jsx.development ?? false,
22
+ factory: jsx.factory ?? null,
23
+ fragment: jsx.fragment ?? null,
24
+ importSource: jsx.importSource ?? null,
25
+ runtime: jsx.runtime ?? null,
26
+ sideEffects: jsx.sideEffects ?? null,
27
+ });
28
+ }
29
+ /** Stable fingerprint for ordered build plugins. */
30
+ export function createPluginCacheKey(plugins) {
31
+ if (!plugins || plugins.length === 0) {
32
+ return 'plugins:default';
33
+ }
34
+ return `plugins:${plugins.map((plugin) => `${plugin.name}:${hashFunctionIdentity(plugin.setup)}`).join(',')}`;
35
+ }
36
+ /** Stable fingerprint for ordered source transforms. */
37
+ export function createSourceTransformCacheKey(sourceTransforms) {
38
+ if (!sourceTransforms || sourceTransforms.length === 0) {
39
+ return 'sourceTransforms:default';
40
+ }
41
+ return `sourceTransforms:${sourceTransforms
42
+ .map((transform) => {
43
+ const filterSource = transform.filter.source;
44
+ const filterFlags = transform.filter.flags;
45
+ return [
46
+ transform.name,
47
+ transform.enforce ?? 'default',
48
+ filterSource,
49
+ filterFlags,
50
+ hashFunctionIdentity(transform.transform),
51
+ ].join(':');
52
+ })
53
+ .join(',')}`;
54
+ }
55
+ /**
56
+ * Stable fingerprint of a function body for cache and request identity keys.
57
+ *
58
+ * @remarks
59
+ * Hashes `fn.toString()`. Suitable for in-process and persisted keys that must
60
+ * agree within one install; not stable across minifiers or renames.
61
+ */
62
+ export function hashFunctionIdentity(fn) {
63
+ let hash = 0;
64
+ const source = fn.toString();
65
+ for (let index = 0; index < source.length; index += 1) {
66
+ hash = (hash * 31 + source.charCodeAt(index)) | 0;
67
+ }
68
+ return (hash >>> 0).toString(36);
69
+ }
70
+ /** @deprecated Use {@link hashFunctionIdentity}. */
71
+ export const hashPluginSetup = hashFunctionIdentity;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Unified pages Rolldown graph (Phase A build + Phase C import).
3
+ *
4
+ * Enabled by default in production builds. Opt out with
5
+ * `ECOPAGES_UNIFIED_PAGES_GRAPH=0`. Covers all static page template extensions
6
+ * registered on the app config.
7
+ */
8
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
9
+ export declare const PAGES_UNIFIED_GRAPH_CACHE_DIR = ".server-pages-graph";
10
+ export declare const PAGES_UNIFIED_GRAPH_CACHE_FILENAME = ".build-cache.json";
11
+ export interface PagesUnifiedGraphCacheManifest {
12
+ invalidationVersion: string;
13
+ buildInputsFingerprint: string;
14
+ buildKey: string;
15
+ builtAt: number;
16
+ outputs: Record<string, string>;
17
+ }
18
+ export declare function isPagesUnifiedGraphEnabled(): boolean;
19
+ /** True when the unified graph should build or serve prebuilt page modules. */
20
+ export declare function shouldBuildPagesUnifiedGraph(): boolean;
21
+ export declare function isPagesUnifiedGraphPage(filePath: string, appConfig: EcoPagesAppConfig): boolean;
22
+ /**
23
+ * Builds eligible static pages in one Rolldown invocation and seeds route-module disk cache.
24
+ */
25
+ export declare function ensurePagesUnifiedGraphBuilt(options: {
26
+ appConfig: EcoPagesAppConfig;
27
+ entryPaths: readonly string[];
28
+ outdir: string;
29
+ force?: boolean;
30
+ }): Promise<PagesUnifiedGraphCacheManifest | undefined>;
31
+ export declare function importPagesUnifiedGraphModule<T>(appConfig: EcoPagesAppConfig, filePath: string): Promise<T | undefined>;
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Unified pages Rolldown graph (Phase A build + Phase C import).
3
+ *
4
+ * Enabled by default in production builds. Opt out with
5
+ * `ECOPAGES_UNIFIED_PAGES_GRAPH=0`. Covers all static page template extensions
6
+ * registered on the app config.
7
+ */
8
+ import path from 'node:path';
9
+ import { pathToFileURL } from 'node:url';
10
+ import { fileSystem } from '@ecopages/file-system';
11
+ import { appLogger } from '../../global/app-logger.js';
12
+ import { build } from '../build-adapter.js';
13
+ import { requireBuildRuntime } from '../runtime/build-runtime.js';
14
+ import { createServerBuildRequest, resolveServerAppBuildPlugins } from '../runtime/build-request-policy.js';
15
+ import { createBuildInputsFingerprint, hashAppConfigFile } from './build-input-fingerprint.js';
16
+ import { isProductionCacheManifestCurrent, matchesProductionCacheBuildKey, matchesProductionCacheFingerprint, readProductionCacheManifest, writeProductionCacheManifest, } from './production-build-cache.js';
17
+ import { getCorePackageVersion } from './cache-keys.js';
18
+ import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
19
+ import { getSharedRouteModuleBuildCache } from '../../services/module-loading/route-module-build-cache-registry.js';
20
+ import { resolveRouteModuleDependencyPaths } from '../../services/module-loading/route-module-dependency-hasher.js';
21
+ export const PAGES_UNIFIED_GRAPH_CACHE_DIR = '.server-pages-graph';
22
+ export const PAGES_UNIFIED_GRAPH_CACHE_FILENAME = '.build-cache.json';
23
+ export function isPagesUnifiedGraphEnabled() {
24
+ if (process.env.ECOPAGES_UNIFIED_PAGES_GRAPH === '0') {
25
+ return false;
26
+ }
27
+ if (process.env.ECOPAGES_UNIFIED_PAGES_GRAPH === '1') {
28
+ return true;
29
+ }
30
+ return process.env.NODE_ENV === 'production';
31
+ }
32
+ /** True when the unified graph should build or serve prebuilt page modules. */
33
+ export function shouldBuildPagesUnifiedGraph() {
34
+ return isPagesUnifiedGraphEnabled() && process.env.NODE_ENV === 'production';
35
+ }
36
+ export function isPagesUnifiedGraphPage(filePath, appConfig) {
37
+ const normalizedPath = path.normalize(filePath);
38
+ return appConfig.templatesExt.some((extension) => normalizedPath.endsWith(extension));
39
+ }
40
+ function getPagesUnifiedGraphCachePath(appConfig) {
41
+ return path.join(resolveInternalExecutionDir(appConfig), PAGES_UNIFIED_GRAPH_CACHE_DIR, PAGES_UNIFIED_GRAPH_CACHE_FILENAME);
42
+ }
43
+ function createPagesUnifiedGraphBuildKey(appConfig, outdir) {
44
+ const pluginNames = resolveServerAppBuildPlugins(appConfig)
45
+ .map((plugin) => plugin.name)
46
+ .sort()
47
+ .join('|');
48
+ const templateExtensions = [...appConfig.templatesExt].sort().join('|');
49
+ return [
50
+ path.resolve(outdir),
51
+ hashAppConfigFile(appConfig),
52
+ templateExtensions,
53
+ pluginNames,
54
+ 'es2022',
55
+ 'esm',
56
+ 'external-packages',
57
+ ].join('::');
58
+ }
59
+ function readPagesUnifiedGraphManifest(appConfig) {
60
+ const manifest = readProductionCacheManifest(getPagesUnifiedGraphCachePath(appConfig));
61
+ if (!manifest?.outputs) {
62
+ return undefined;
63
+ }
64
+ return manifest;
65
+ }
66
+ function writePagesUnifiedGraphManifest(appConfig, manifest) {
67
+ writeProductionCacheManifest(getPagesUnifiedGraphCachePath(appConfig), manifest);
68
+ }
69
+ function createSafeGraphEntryKey(entryPath, rootDir) {
70
+ const relativePath = path.relative(rootDir, entryPath).replace(/\.[^.]+$/u, '');
71
+ const safeKey = relativePath.replace(/[^a-zA-Z0-9]+/gu, '-').replace(/^-+|-+$/gu, '');
72
+ return safeKey.length > 0 ? safeKey : 'page';
73
+ }
74
+ /**
75
+ * @remarks
76
+ * Uses {@link BuildResult.entryOutputs} when present so resolution follows the
77
+ * bundler's `facadeModuleId` instead of guessing from sanitized entry keys.
78
+ * Basename prefix matching remains only as a fallback for backends that omit
79
+ * `entryOutputs`; it can mis-associate keys such as `pages-blog` and
80
+ * `pages-blog-index`.
81
+ */
82
+ function resolveOutputForEntrypoint(entryPath, entryKey, buildResult) {
83
+ const exactOutput = buildResult.entryOutputs?.[path.resolve(entryPath)];
84
+ if (exactOutput) {
85
+ return exactOutput;
86
+ }
87
+ for (const { path: outputPath } of buildResult.outputs) {
88
+ const outputBaseName = path.basename(outputPath);
89
+ if (outputBaseName.startsWith(`${entryKey}-`) && /\.(?:m?js)$/u.test(outputBaseName)) {
90
+ return outputPath;
91
+ }
92
+ if (outputBaseName === `${entryKey}.js` || outputBaseName === `${entryKey}.mjs`) {
93
+ return outputPath;
94
+ }
95
+ }
96
+ return undefined;
97
+ }
98
+ function isManifestValidForEntries(manifest, appConfig, outdir, entryPaths) {
99
+ if (!isProductionCacheManifestCurrent(manifest, getCorePackageVersion())) {
100
+ return false;
101
+ }
102
+ if (!matchesProductionCacheFingerprint(manifest, createBuildInputsFingerprint(appConfig))) {
103
+ return false;
104
+ }
105
+ if (!matchesProductionCacheBuildKey(manifest, createPagesUnifiedGraphBuildKey(appConfig, outdir))) {
106
+ return false;
107
+ }
108
+ return entryPaths.every((entryPath) => {
109
+ const resolvedEntryPath = path.resolve(entryPath);
110
+ const outputPath = manifest.outputs[resolvedEntryPath];
111
+ return outputPath ? fileSystem.exists(outputPath) : false;
112
+ });
113
+ }
114
+ /**
115
+ * Builds eligible static pages in one Rolldown invocation and seeds route-module disk cache.
116
+ */
117
+ export async function ensurePagesUnifiedGraphBuilt(options) {
118
+ if (!shouldBuildPagesUnifiedGraph()) {
119
+ return undefined;
120
+ }
121
+ const eligibleEntryPaths = options.entryPaths
122
+ .map((entryPath) => path.resolve(entryPath))
123
+ .filter((entryPath) => isPagesUnifiedGraphPage(entryPath, options.appConfig));
124
+ if (eligibleEntryPaths.length === 0) {
125
+ return undefined;
126
+ }
127
+ const outdir = path.resolve(options.outdir);
128
+ const existingManifest = options.force ? undefined : readPagesUnifiedGraphManifest(options.appConfig);
129
+ if (existingManifest &&
130
+ isManifestValidForEntries(existingManifest, options.appConfig, outdir, eligibleEntryPaths)) {
131
+ appLogger.debug('Reusing pages unified graph cache');
132
+ return existingManifest;
133
+ }
134
+ const routeModuleBuildCache = getSharedRouteModuleBuildCache(outdir, options.appConfig);
135
+ const entryRecord = {};
136
+ const entryKeysByPath = new Map();
137
+ for (const entryPath of eligibleEntryPaths) {
138
+ const entryKey = createSafeGraphEntryKey(entryPath, options.appConfig.rootDir);
139
+ entryRecord[entryKey] = entryPath;
140
+ entryKeysByPath.set(entryPath, entryKey);
141
+ }
142
+ appLogger.debugTime('pagesUnifiedGraphBuild');
143
+ const buildOptions = createServerBuildRequest(options.appConfig, {
144
+ profile: 'route-module',
145
+ entrypoints: entryRecord,
146
+ outdir,
147
+ splitting: true,
148
+ naming: '[name]-[hash].[ext]',
149
+ });
150
+ const plugins = buildOptions.plugins ?? [];
151
+ const buildResult = await build(buildOptions, requireBuildRuntime(options.appConfig).getProfile('route-module'));
152
+ appLogger.debugTimeEnd('pagesUnifiedGraphBuild');
153
+ if (!buildResult.success) {
154
+ const details = buildResult.logs.map((log) => log.message).join(' | ');
155
+ throw new Error(`Pages unified graph build failed: ${details}`);
156
+ }
157
+ const outputs = {};
158
+ for (const entryPath of eligibleEntryPaths) {
159
+ const fileHash = fileSystem.hash(entryPath);
160
+ const entryKey = entryKeysByPath.get(entryPath);
161
+ const compiledOutput = entryKey ? resolveOutputForEntrypoint(entryPath, entryKey, buildResult) : undefined;
162
+ if (!compiledOutput) {
163
+ throw new Error(`Pages unified graph build produced no output for ${entryPath}`);
164
+ }
165
+ outputs[entryPath] = compiledOutput;
166
+ routeModuleBuildCache.recordBuild({
167
+ filePath: entryPath,
168
+ rootDir: options.appConfig.rootDir,
169
+ outdir,
170
+ fileHash,
171
+ outputPath: compiledOutput,
172
+ dependencyModulePaths: resolveRouteModuleDependencyPaths(buildResult, entryPath, options.appConfig.rootDir),
173
+ externalPackages: true,
174
+ plugins,
175
+ });
176
+ }
177
+ const manifest = {
178
+ invalidationVersion: getCorePackageVersion(),
179
+ buildInputsFingerprint: createBuildInputsFingerprint(options.appConfig),
180
+ buildKey: createPagesUnifiedGraphBuildKey(options.appConfig, outdir),
181
+ builtAt: Date.now(),
182
+ outputs,
183
+ };
184
+ writePagesUnifiedGraphManifest(options.appConfig, manifest);
185
+ appLogger.debug(`Built pages unified graph for ${eligibleEntryPaths.length} entries`);
186
+ return manifest;
187
+ }
188
+ export async function importPagesUnifiedGraphModule(appConfig, filePath) {
189
+ const manifest = readPagesUnifiedGraphManifest(appConfig);
190
+ if (!manifest) {
191
+ return undefined;
192
+ }
193
+ const resolvedFilePath = path.resolve(filePath);
194
+ const outputPath = manifest.outputs[resolvedFilePath];
195
+ if (!outputPath || !fileSystem.exists(outputPath)) {
196
+ return undefined;
197
+ }
198
+ return (await import(/* @vite-ignore */ pathToFileURL(outputPath).href));
199
+ }
@@ -0,0 +1,21 @@
1
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
2
+ /**
3
+ * Shared manifest fields for persisted production build caches.
4
+ */
5
+ export interface ProductionCacheManifestBase {
6
+ invalidationVersion?: string;
7
+ corePackageVersion?: string;
8
+ buildInputsFingerprint?: string;
9
+ buildKey?: string;
10
+ builtAt?: number;
11
+ }
12
+ export type ProductionBuildCacheKind = 'server-entry' | 'route-module' | 'pages-graph';
13
+ /** Returns every persisted production cache manifest path for one app. */
14
+ export declare function getProductionBuildCacheManifestPaths(appConfig: EcoPagesAppConfig): string[];
15
+ /** Removes all persisted production cache manifests for one app. */
16
+ export declare function clearPersistedProductionBuildCacheManifests(appConfig: EcoPagesAppConfig): void;
17
+ export declare function readProductionCacheManifest<T extends ProductionCacheManifestBase>(manifestPath: string): T | undefined;
18
+ export declare function writeProductionCacheManifest(manifestPath: string, manifest: unknown): void;
19
+ export declare function isProductionCacheManifestCurrent(manifest: ProductionCacheManifestBase | undefined, packageVersion: string): boolean;
20
+ export declare function matchesProductionCacheFingerprint(manifest: ProductionCacheManifestBase | undefined, buildInputsFingerprint: string): boolean;
21
+ export declare function matchesProductionCacheBuildKey(manifest: ProductionCacheManifestBase | undefined, buildKey: string): boolean;
@@ -0,0 +1,56 @@
1
+ import { fileSystem } from '@ecopages/file-system';
2
+ import path from 'node:path';
3
+ import { ROUTE_MODULE_BUILD_CACHE_FILENAME } from './cache-constants.js';
4
+ import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
5
+ const ROUTE_MODULE_CACHE_OUTDIRS = ['.server-modules', '.server-route-modules'];
6
+ const PAGES_GRAPH_CACHE_DIR = '.server-pages-graph';
7
+ /** Returns every persisted production cache manifest path for one app. */
8
+ export function getProductionBuildCacheManifestPaths(appConfig) {
9
+ const executionDir = resolveInternalExecutionDir(appConfig);
10
+ const paths = [];
11
+ for (const subdir of ROUTE_MODULE_CACHE_OUTDIRS) {
12
+ paths.push(path.join(executionDir, subdir, ROUTE_MODULE_BUILD_CACHE_FILENAME));
13
+ }
14
+ paths.push(path.join(executionDir, '.server-entry', ROUTE_MODULE_BUILD_CACHE_FILENAME));
15
+ paths.push(path.join(executionDir, PAGES_GRAPH_CACHE_DIR, ROUTE_MODULE_BUILD_CACHE_FILENAME));
16
+ return paths;
17
+ }
18
+ /** Removes all persisted production cache manifests for one app. */
19
+ export function clearPersistedProductionBuildCacheManifests(appConfig) {
20
+ if (process.env.NODE_ENV !== 'production') {
21
+ return;
22
+ }
23
+ for (const manifestPath of getProductionBuildCacheManifestPaths(appConfig)) {
24
+ if (fileSystem.exists(manifestPath)) {
25
+ fileSystem.remove(manifestPath);
26
+ }
27
+ }
28
+ }
29
+ export function readProductionCacheManifest(manifestPath) {
30
+ if (!fileSystem.exists(manifestPath)) {
31
+ return undefined;
32
+ }
33
+ try {
34
+ const parsed = JSON.parse(fileSystem.readFileSync(manifestPath));
35
+ if (!parsed || typeof parsed !== 'object') {
36
+ return undefined;
37
+ }
38
+ return parsed;
39
+ }
40
+ catch {
41
+ return undefined;
42
+ }
43
+ }
44
+ export function writeProductionCacheManifest(manifestPath, manifest) {
45
+ fileSystem.ensureDir(path.dirname(manifestPath));
46
+ fileSystem.write(manifestPath, `${JSON.stringify(manifest, null, '\t')}\n`);
47
+ }
48
+ export function isProductionCacheManifestCurrent(manifest, packageVersion) {
49
+ return (manifest?.corePackageVersion ?? manifest?.invalidationVersion) === packageVersion;
50
+ }
51
+ export function matchesProductionCacheFingerprint(manifest, buildInputsFingerprint) {
52
+ return manifest?.buildInputsFingerprint === buildInputsFingerprint;
53
+ }
54
+ export function matchesProductionCacheBuildKey(manifest, buildKey) {
55
+ return manifest?.buildKey === buildKey;
56
+ }
@@ -0,0 +1,43 @@
1
+ import type { BuildResult } from '../build-adapter.js';
2
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
3
+ export { SERVER_ENTRY_BUILD_CACHE_FILENAME } from './cache-constants.js';
4
+ export declare const SERVER_BUNDLE_MANIFEST_FILENAME = "manifest.json";
5
+ export interface ServerBundleDeployManifest {
6
+ serverEntry: string;
7
+ distDir: string;
8
+ builtAt: number;
9
+ }
10
+ export interface ServerEntryBuildCacheManifest {
11
+ invalidationVersion: string;
12
+ entryPath: string;
13
+ entryHash: string;
14
+ buildInputsFingerprint: string;
15
+ buildKey: string;
16
+ outputPaths: string[];
17
+ dependencyHashes: Record<string, string>;
18
+ builtAt: number;
19
+ }
20
+ export interface ServerEntryBuildCacheLookup {
21
+ manifest: ServerEntryBuildCacheManifest;
22
+ outputPaths: string[];
23
+ }
24
+ export declare function getServerBundleOutputPaths(appConfig: EcoPagesAppConfig): {
25
+ distDir: string;
26
+ serverOutdir: string;
27
+ serverEntryPath: string;
28
+ manifestPath: string;
29
+ };
30
+ export declare function readServerEntryBuildCacheManifest(appConfig: EcoPagesAppConfig): ServerEntryBuildCacheManifest | undefined;
31
+ export declare function writeServerBundleDeployManifest(appConfig: EcoPagesAppConfig, serverEntryPath: string): void;
32
+ export declare function lookupServerEntryBuildCache(options: {
33
+ appConfig: EcoPagesAppConfig;
34
+ entryPath: string;
35
+ force?: boolean;
36
+ }): ServerEntryBuildCacheLookup | undefined;
37
+ export declare function recordServerEntryBuildCache(options: {
38
+ appConfig: EcoPagesAppConfig;
39
+ entryPath: string;
40
+ buildResult: BuildResult;
41
+ outputPaths: string[];
42
+ }): void;
43
+ export declare function resolveProductionServerEntry(cwd?: string): string | undefined;
@@ -0,0 +1,153 @@
1
+ import path from 'node:path';
2
+ import { fileSystem } from '@ecopages/file-system';
3
+ import { resolveServerAppBuildPlugins } from '../runtime/build-request-policy.js';
4
+ import { createBuildInputsFingerprint } from './build-input-fingerprint.js';
5
+ import { isProductionCacheManifestCurrent, matchesProductionCacheBuildKey, matchesProductionCacheFingerprint, readProductionCacheManifest, writeProductionCacheManifest, } from './production-build-cache.js';
6
+ import { createPluginCacheKey, getCorePackageVersion } from './cache-keys.js';
7
+ import { RouteModuleDependencyHasher, createRouteModuleDependencyHashes, } from '../../services/module-loading/route-module-dependency-hasher.js';
8
+ import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
9
+ import { SERVER_BUNDLE_DIR, SERVER_BUNDLE_FILENAME } from '../../utils/resolve-entry-file.js';
10
+ import { SERVER_ENTRY_BUILD_CACHE_FILENAME } from './cache-constants.js';
11
+ export { SERVER_ENTRY_BUILD_CACHE_FILENAME } from './cache-constants.js';
12
+ export const SERVER_BUNDLE_MANIFEST_FILENAME = 'manifest.json';
13
+ function getServerEntryCacheDir(appConfig) {
14
+ return path.join(resolveInternalExecutionDir(appConfig), '.server-entry');
15
+ }
16
+ function getServerEntryCacheManifestPath(appConfig) {
17
+ return path.join(getServerEntryCacheDir(appConfig), SERVER_ENTRY_BUILD_CACHE_FILENAME);
18
+ }
19
+ function hashDependencyGraph(entryPath, dependencyGraph, hasher, rootDir) {
20
+ if (!dependencyGraph) {
21
+ return { [path.resolve(entryPath)]: fileSystem.hash(entryPath) };
22
+ }
23
+ return createRouteModuleDependencyHashes(hasher, { dependencyGraph }, entryPath, rootDir);
24
+ }
25
+ /**
26
+ * Fingerprints the app-owned output-affecting server request policy.
27
+ *
28
+ * @remarks
29
+ * Includes ordered server plugins and JSX ownership plugins via
30
+ * {@link resolveServerAppBuildPlugins}. The versioned prefix intentionally
31
+ * invalidates manifests written before server requests included JSX ownership.
32
+ */
33
+ function createServerEntryBuildKey(appConfig) {
34
+ try {
35
+ return [
36
+ 'server-entry-request-v2',
37
+ 'node',
38
+ 'esm',
39
+ 'external-packages',
40
+ createPluginCacheKey(resolveServerAppBuildPlugins(appConfig)),
41
+ ].join('::');
42
+ }
43
+ catch {
44
+ return 'server-entry-request-v2::node::esm::external-packages';
45
+ }
46
+ }
47
+ export function getServerBundleOutputPaths(appConfig) {
48
+ const distDir = appConfig.absolutePaths?.distDir ?? path.join(appConfig.rootDir, appConfig.distDir);
49
+ const serverOutdir = path.join(distDir, SERVER_BUNDLE_DIR);
50
+ const serverEntryPath = path.join(serverOutdir, SERVER_BUNDLE_FILENAME);
51
+ const manifestPath = path.join(serverOutdir, SERVER_BUNDLE_MANIFEST_FILENAME);
52
+ return { distDir, serverOutdir, serverEntryPath, manifestPath };
53
+ }
54
+ export function readServerEntryBuildCacheManifest(appConfig) {
55
+ return readProductionCacheManifest(getServerEntryCacheManifestPath(appConfig));
56
+ }
57
+ function writeServerEntryBuildCacheManifest(appConfig, manifest) {
58
+ writeProductionCacheManifest(path.join(getServerEntryCacheDir(appConfig), SERVER_ENTRY_BUILD_CACHE_FILENAME), manifest);
59
+ }
60
+ export function writeServerBundleDeployManifest(appConfig, serverEntryPath) {
61
+ const { distDir, manifestPath } = getServerBundleOutputPaths(appConfig);
62
+ fileSystem.ensureDir(path.dirname(manifestPath));
63
+ const payload = {
64
+ serverEntry: path.relative(path.dirname(manifestPath), serverEntryPath) || SERVER_BUNDLE_FILENAME,
65
+ distDir,
66
+ builtAt: Date.now(),
67
+ };
68
+ fileSystem.write(manifestPath, `${JSON.stringify(payload, null, '\t')}\n`);
69
+ }
70
+ export function lookupServerEntryBuildCache(options) {
71
+ if (options.force) {
72
+ return undefined;
73
+ }
74
+ if (process.env.NODE_ENV !== 'production') {
75
+ return undefined;
76
+ }
77
+ const entryPath = path.resolve(options.entryPath);
78
+ const entryHash = fileSystem.hash(entryPath);
79
+ const buildInputsFingerprint = createBuildInputsFingerprint(options.appConfig);
80
+ const buildKey = createServerEntryBuildKey(options.appConfig);
81
+ const manifest = readServerEntryBuildCacheManifest(options.appConfig);
82
+ if (!manifest) {
83
+ return undefined;
84
+ }
85
+ if (!isProductionCacheManifestCurrent(manifest, getCorePackageVersion())) {
86
+ return undefined;
87
+ }
88
+ if (manifest.entryPath !== entryPath ||
89
+ manifest.entryHash !== entryHash ||
90
+ !matchesProductionCacheFingerprint(manifest, buildInputsFingerprint) ||
91
+ !matchesProductionCacheBuildKey(manifest, buildKey)) {
92
+ return undefined;
93
+ }
94
+ const hasher = new RouteModuleDependencyHasher();
95
+ if (!hasher.matchesStoredHashes(manifest.dependencyHashes, entryPath, entryHash)) {
96
+ return undefined;
97
+ }
98
+ const existingOutputs = manifest.outputPaths.filter((outputPath) => fileSystem.exists(outputPath));
99
+ if (existingOutputs.length === 0) {
100
+ return undefined;
101
+ }
102
+ return {
103
+ manifest,
104
+ outputPaths: existingOutputs,
105
+ };
106
+ }
107
+ export function recordServerEntryBuildCache(options) {
108
+ if (process.env.NODE_ENV !== 'production') {
109
+ return;
110
+ }
111
+ const entryPath = path.resolve(options.entryPath);
112
+ const entryHash = fileSystem.hash(entryPath);
113
+ const hasher = new RouteModuleDependencyHasher();
114
+ const dependencyHashes = hashDependencyGraph(entryPath, options.buildResult.dependencyGraph, hasher, options.appConfig.rootDir);
115
+ const manifest = {
116
+ invalidationVersion: getCorePackageVersion(),
117
+ entryPath,
118
+ entryHash,
119
+ buildInputsFingerprint: createBuildInputsFingerprint(options.appConfig),
120
+ buildKey: createServerEntryBuildKey(options.appConfig),
121
+ outputPaths: options.outputPaths,
122
+ dependencyHashes,
123
+ builtAt: Date.now(),
124
+ };
125
+ writeServerEntryBuildCacheManifest(options.appConfig, manifest);
126
+ }
127
+ export function resolveProductionServerEntry(cwd = process.cwd()) {
128
+ const manifestPath = path.join(cwd, 'dist', SERVER_BUNDLE_DIR, SERVER_BUNDLE_MANIFEST_FILENAME);
129
+ if (fileSystem.exists(manifestPath)) {
130
+ try {
131
+ const parsed = JSON.parse(fileSystem.readFileSync(manifestPath));
132
+ if (parsed?.serverEntry) {
133
+ const fromManifest = path.isAbsolute(parsed.serverEntry)
134
+ ? parsed.serverEntry
135
+ : path.join(path.dirname(manifestPath), parsed.serverEntry);
136
+ if (fileSystem.exists(fromManifest)) {
137
+ return fromManifest;
138
+ }
139
+ }
140
+ if (parsed?.distDir) {
141
+ const fromDistDir = path.join(parsed.distDir, SERVER_BUNDLE_DIR, SERVER_BUNDLE_FILENAME);
142
+ if (fileSystem.exists(fromDistDir)) {
143
+ return fromDistDir;
144
+ }
145
+ }
146
+ }
147
+ catch {
148
+ // fall through to legacy path
149
+ }
150
+ }
151
+ const legacyPath = path.join(cwd, 'dist', SERVER_BUNDLE_DIR, SERVER_BUNDLE_FILENAME);
152
+ return fileSystem.exists(legacyPath) ? legacyPath : undefined;
153
+ }
@@ -0,0 +1,96 @@
1
+ import type { EcoSourceTransform } from '../../plugins/source-transform.js';
2
+ import type { EcoBuildPlugin } from './build-types.js';
3
+ /**
4
+ * Which backend owns the app's build pipeline.
5
+ *
6
+ * - `'rolldown'`: the default. Ecopages runs the build directly through
7
+ * its bundler-backed adapter.
8
+ * - `'vite-host'`: a host runtime owns the build. {@link ViteHostBuildAdapter}
9
+ * is exposed as a boundary marker; any direct call into it throws.
10
+ */
11
+ export type BuildOwnership = 'vite-host' | 'rolldown';
12
+ /** A single message emitted by the build backend. */
13
+ export interface BuildLog {
14
+ message: string;
15
+ }
16
+ /** A single artifact emitted by the build backend. */
17
+ export interface BuildOutput {
18
+ path: string;
19
+ }
20
+ /** Per-entrypoint dependency metadata surfaced alongside a build. */
21
+ export interface BuildDependencyGraph {
22
+ entrypoints: Record<string, string[]>;
23
+ }
24
+ /** The full result of one `BuildAdapter.build` call. */
25
+ export interface BuildResult {
26
+ success: boolean;
27
+ logs: BuildLog[];
28
+ outputs: BuildOutput[];
29
+ dependencyGraph?: BuildDependencyGraph;
30
+ entryOutputs?: Record<string, string>;
31
+ }
32
+ /**
33
+ * Options accepted by every `BuildAdapter.build` call.
34
+ *
35
+ * @remarks
36
+ * Fields that the adapter can forward are honored. `splitting: false` disables
37
+ * Rolldown code splitting for single-entrypoint builds. `bundle` and `outbase`
38
+ * are accepted for call-site compatibility but ignored.
39
+ */
40
+ export interface BuildOptions {
41
+ entrypoints: string[] | Record<string, string>;
42
+ outdir?: string;
43
+ /**
44
+ * Base directory for `[dir]` placeholders in `naming`. Currently
45
+ * the bundled adapter derives the base from `root` directly and
46
+ * ignores this field.
47
+ *
48
+ * @deprecated Accepted for call-site compatibility only. Use record-form
49
+ * `entrypoints` keys to preserve directory structure.
50
+ */
51
+ outbase?: string;
52
+ naming?: string;
53
+ conditions?: string[];
54
+ define?: Record<string, string>;
55
+ minify?: boolean;
56
+ treeshaking?: boolean;
57
+ target?: string;
58
+ format?: string;
59
+ sourcemap?: string;
60
+ /** When `false` with a single entrypoint, inlines dynamic imports into one output file. */
61
+ splitting?: boolean;
62
+ root?: string;
63
+ /** @deprecated Accepted for call-site compatibility only. */
64
+ bundle?: boolean;
65
+ externalPackages?: boolean;
66
+ external?: string[];
67
+ jsx?: {
68
+ development?: boolean;
69
+ factory?: string;
70
+ fragment?: string;
71
+ importSource?: string;
72
+ runtime?: 'classic' | 'automatic';
73
+ sideEffects?: boolean;
74
+ };
75
+ plugins?: EcoBuildPlugin[];
76
+ sourceTransforms?: EcoSourceTransform[];
77
+ }
78
+ /** Stable profile identifiers for `BuildAdapter.getTranspileOptions`. */
79
+ export type BuildTranspileProfile = 'browser-script' | 'hmr-runtime' | 'hmr-entrypoint';
80
+ /** Resolved transpile settings for a given profile. */
81
+ export interface BuildTranspileOptions {
82
+ target: string;
83
+ format: string;
84
+ sourcemap: string;
85
+ }
86
+ /** Low-level build backend contract. */
87
+ export interface BuildAdapter {
88
+ readonly ownership?: BuildOwnership;
89
+ build(options: BuildOptions): Promise<BuildResult>;
90
+ resolve(importPath: string, rootDir: string): string;
91
+ getTranspileOptions(profile: BuildTranspileProfile): BuildTranspileOptions;
92
+ }
93
+ /** Runtime-facing facade for issuing builds. */
94
+ export interface BuildExecutor {
95
+ build(options: BuildOptions): Promise<BuildResult>;
96
+ }
@@ -0,0 +1 @@
1
+ export {};