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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (624) hide show
  1. package/README.md +42 -13
  2. package/package.json +360 -57
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +57 -5
  5. package/src/adapters/abstract/application-adapter.js +261 -203
  6. package/src/adapters/abstract/router-adapter.js +12 -4
  7. package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
  8. package/src/adapters/abstract/segment-path-matcher.js +147 -0
  9. package/src/adapters/abstract/server-adapter.d.ts +13 -2
  10. package/src/adapters/abstract/server-adapter.js +22 -14
  11. package/src/adapters/abstract/ws-pattern-matcher.d.ts +2 -50
  12. package/src/adapters/abstract/ws-pattern-matcher.js +24 -57
  13. package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
  14. package/src/adapters/bun/client-bridge.js +51 -50
  15. package/src/adapters/bun/create-app.d.ts +4 -6
  16. package/src/adapters/bun/create-app.js +169 -154
  17. package/src/adapters/bun/hmr-manager.d.ts +2 -3
  18. package/src/adapters/bun/hmr-manager.js +62 -57
  19. package/src/adapters/bun/index.d.ts +1 -1
  20. package/src/adapters/bun/index.js +2 -8
  21. package/src/adapters/bun/runtime-host.d.ts +1 -1
  22. package/src/adapters/bun/runtime-host.js +61 -54
  23. package/src/adapters/bun/server-adapter.d.ts +34 -53
  24. package/src/adapters/bun/server-adapter.js +557 -637
  25. package/src/adapters/bun/static-preview-host.d.ts +1 -1
  26. package/src/adapters/bun/static-preview-host.js +43 -41
  27. package/src/adapters/create-app.d.ts +1 -12
  28. package/src/adapters/create-app.js +11 -72
  29. package/src/adapters/index.d.ts +2 -2
  30. package/src/adapters/index.js +2 -8
  31. package/src/adapters/node/create-app.d.ts +4 -3
  32. package/src/adapters/node/create-app.js +123 -98
  33. package/src/adapters/node/http-request-bridge.js +147 -106
  34. package/src/adapters/node/node-client-bridge.js +62 -64
  35. package/src/adapters/node/node-hmr-manager.d.ts +2 -3
  36. package/src/adapters/node/node-hmr-manager.js +58 -48
  37. package/src/adapters/node/runtime-host.d.ts +1 -1
  38. package/src/adapters/node/runtime-host.js +96 -89
  39. package/src/adapters/node/server-adapter-dependencies.js +18 -17
  40. package/src/adapters/node/server-adapter.d.ts +28 -8
  41. package/src/adapters/node/server-adapter.js +349 -302
  42. package/src/adapters/node/static-content-server.js +172 -186
  43. package/src/adapters/node/static-preview-host.d.ts +1 -1
  44. package/src/adapters/node/static-preview-host.js +88 -64
  45. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  46. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  47. package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
  48. package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
  49. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
  50. package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
  51. package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
  52. package/src/adapters/shared/http/api-request-pipeline.js +132 -0
  53. package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
  54. package/src/adapters/shared/http/api-response.js +79 -0
  55. package/src/adapters/shared/http/create-body-response.d.ts +12 -0
  56. package/src/adapters/shared/http/create-body-response.js +26 -0
  57. package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
  58. package/src/adapters/shared/http/define-api-handler.js +49 -0
  59. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  60. package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
  61. package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
  62. package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
  63. package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
  64. package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
  65. package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
  66. package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
  67. package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
  68. package/src/adapters/shared/http/fs-server-response-matcher.js +260 -0
  69. package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
  70. package/src/adapters/shared/http/run-middleware-chain.js +17 -0
  71. package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
  72. package/src/adapters/shared/runtime/application-adapter.js +75 -0
  73. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
  74. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
  75. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
  76. package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
  77. package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
  78. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  79. package/src/adapters/shared/runtime/port-manager.js +226 -0
  80. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  81. package/src/adapters/shared/runtime/render-context.js +99 -0
  82. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -2
  83. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
  84. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
  85. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
  86. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
  87. package/src/adapters/shared/runtime/server-adapter.js +301 -0
  88. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  89. package/src/adapters/shared/runtime/server-route-handler.js +77 -0
  90. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +26 -31
  91. package/src/adapters/shared/runtime/server-static-builder.js +172 -0
  92. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  93. package/src/adapters/shared/{node-http-websocket-upgrades.d.ts → ws/node-http-websocket-upgrades.d.ts} +1 -1
  94. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
  95. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  96. package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
  97. package/src/build/README.md +165 -45
  98. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  99. package/src/build/app-build-manifest-runtime.js +145 -0
  100. package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +4 -0
  101. package/src/build/browser/browser-runtime-manifest.js +65 -0
  102. package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +3 -5
  103. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -0
  104. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +12 -13
  105. package/src/build/browser/browser-runtime-plugin.js +218 -0
  106. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  107. package/src/build/browser/jsx-ownership-plugins.js +55 -0
  108. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  109. package/src/build/browser/lit-static-render-worker-context.js +4 -0
  110. package/src/build/build-adapter.d.ts +25 -355
  111. package/src/build/build-adapter.js +258 -265
  112. package/src/build/{build-input-fingerprint.d.ts → cache/build-input-fingerprint.d.ts} +3 -3
  113. package/src/build/cache/build-input-fingerprint.js +33 -0
  114. package/src/build/cache/cache-constants.d.ts +4 -0
  115. package/src/build/cache/cache-constants.js +4 -0
  116. package/src/build/cache/cache-keys.d.ts +22 -0
  117. package/src/build/cache/cache-keys.js +71 -0
  118. package/src/build/{pages-unified-graph-build.d.ts → cache/pages-unified-graph-build.d.ts} +1 -1
  119. package/src/build/cache/pages-unified-graph-build.js +199 -0
  120. package/src/build/cache/production-build-cache.d.ts +21 -0
  121. package/src/build/cache/production-build-cache.js +56 -0
  122. package/src/build/{server-entry-build-cache.d.ts → cache/server-entry-build-cache.d.ts} +3 -4
  123. package/src/build/cache/server-entry-build-cache.js +153 -0
  124. package/src/build/contracts/build-contracts.d.ts +96 -0
  125. package/src/build/contracts/build-contracts.js +1 -0
  126. package/src/build/contracts/build-manifest.d.ts +90 -0
  127. package/src/build/contracts/build-manifest.js +64 -0
  128. package/src/build/contracts/build-types.js +1 -0
  129. package/src/build/contracts/content-virtual-modules.d.ts +12 -0
  130. package/src/build/contracts/content-virtual-modules.js +29 -0
  131. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
  132. package/src/build/rolldown/rolldown-adapter-helpers.js +463 -0
  133. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  134. package/src/build/rolldown/rolldown-build-adapter.js +57 -0
  135. package/src/build/{rolldown-build-invocation-metrics.d.ts → rolldown/rolldown-build-invocation-metrics.d.ts} +1 -1
  136. package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
  137. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +7 -2
  138. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  139. package/src/build/{rolldown-source-transform-pass.d.ts → rolldown/rolldown-source-transform-pass.d.ts} +1 -1
  140. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  141. package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
  142. package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
  143. package/src/build/runtime/build-profile-options.d.ts +7 -0
  144. package/src/build/runtime/build-profile-options.js +37 -0
  145. package/src/build/runtime/build-request-identity.d.ts +17 -0
  146. package/src/build/runtime/build-request-identity.js +79 -0
  147. package/src/build/runtime/build-request-policy.d.ts +58 -0
  148. package/src/build/runtime/build-request-policy.js +84 -0
  149. package/src/build/runtime/build-runtime.d.ts +28 -0
  150. package/src/build/runtime/build-runtime.js +75 -0
  151. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  152. package/src/build/runtime/deduping-build-executor.js +40 -0
  153. package/src/build/{parallel-build-executor.d.ts → runtime/parallel-build-executor.d.ts} +1 -1
  154. package/src/build/runtime/parallel-build-executor.js +60 -0
  155. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  156. package/src/build/runtime/serialized-build-executor.js +79 -0
  157. package/src/cache/index.d.ts +2 -1
  158. package/src/cache/index.js +7 -6
  159. package/src/cache/module-parse-cache.d.ts +5 -0
  160. package/src/cache/module-parse-cache.js +122 -67
  161. package/src/cache/module-transform-profiler.d.ts +8 -0
  162. package/src/cache/module-transform-profiler.js +8 -0
  163. package/src/client/navigation-scripts/classification.d.ts +16 -0
  164. package/src/client/navigation-scripts/classification.js +49 -0
  165. package/src/client/navigation-scripts/index.d.ts +3 -0
  166. package/src/client/navigation-scripts/index.js +3 -0
  167. package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
  168. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
  169. package/src/client/navigation-scripts/registry.d.ts +11 -0
  170. package/src/client/navigation-scripts/registry.js +16 -0
  171. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  172. package/src/client/navigation-scripts/rerun-queue.js +90 -0
  173. package/src/client/scroll.d.ts +17 -0
  174. package/src/client/scroll.js +33 -0
  175. package/src/client/scroll.test.browser.d.ts +1 -0
  176. package/src/client/scroll.test.browser.js +31 -0
  177. package/src/client/view-transitions.d.ts +32 -0
  178. package/src/client/view-transitions.js +120 -0
  179. package/src/client/view-transitions.test.browser.d.ts +1 -0
  180. package/src/client/view-transitions.test.browser.js +56 -0
  181. package/src/config/README.md +1 -1
  182. package/src/config/config-builder.d.ts +40 -20
  183. package/src/config/config-builder.js +645 -610
  184. package/src/config/constants.d.ts +1 -0
  185. package/src/config/constants.js +44 -23
  186. package/src/declarations.d.ts +1 -0
  187. package/src/dev/README.md +24 -0
  188. package/src/dev/client-bridge-registry.d.ts +5 -0
  189. package/src/dev/client-bridge-registry.js +10 -0
  190. package/src/dev/dev-client-ownership.d.ts +7 -0
  191. package/src/dev/dev-client-ownership.js +8 -0
  192. package/src/dev/hmr-manager-registry.d.ts +8 -0
  193. package/src/dev/hmr-manager-registry.js +10 -0
  194. package/src/dev/host-runtime.d.ts +3 -0
  195. package/src/dev/host-runtime.js +25 -23
  196. package/src/dev/runtime-server-started-message.d.ts +2 -0
  197. package/src/dev/runtime-server-started-message.js +3 -0
  198. package/src/dev/sc-server.js +106 -103
  199. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  200. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  201. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  202. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  203. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  204. package/src/dev/transform-server/dev-transform-import-rewriter.js +127 -0
  205. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  206. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  207. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  208. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  209. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  210. package/src/dev/transform-server/dev-transform-server.js +191 -0
  211. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  212. package/src/dev/transform-server/dev-transform-url.js +58 -0
  213. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
  214. package/src/dev/transform-server/dev-transform-vendor-registry.js +166 -0
  215. package/src/dev/transform-server/index.d.ts +6 -0
  216. package/src/dev/transform-server/index.js +4 -0
  217. package/src/dev/transform-server/types.d.ts +15 -0
  218. package/src/dev/transform-server/types.js +1 -0
  219. package/src/dev-toolbar/README.md +52 -0
  220. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  221. package/src/dev-toolbar/define-dev-tool.js +9 -0
  222. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  223. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  224. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  225. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  226. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  227. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  228. package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
  229. package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
  230. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  231. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  232. package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
  233. package/src/dev-toolbar/dev-toolbar-package.js +78 -0
  234. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  235. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  236. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  237. package/src/diagnostics/request-build-dedupe.js +39 -0
  238. package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
  239. package/src/diagnostics/request-pipeline-metrics.js +121 -0
  240. package/src/diagnostics/startup-trace.d.ts +81 -0
  241. package/src/diagnostics/startup-trace.js +281 -0
  242. package/src/eco/README.md +17 -0
  243. package/src/eco/component-identity.d.ts +13 -0
  244. package/src/eco/component-identity.js +18 -0
  245. package/src/eco/eco-declared-component.d.ts +15 -0
  246. package/src/eco/eco-declared-component.js +23 -0
  247. package/src/eco/eco.browser.js +63 -70
  248. package/src/eco/eco.js +163 -97
  249. package/src/eco/eco.types.d.ts +47 -8
  250. package/src/eco/eco.types.js +5 -0
  251. package/src/eco/eco.utils.d.ts +1 -1
  252. package/src/eco/eco.utils.js +1 -10
  253. package/src/eco/global-injector-map.js +55 -41
  254. package/src/eco/lazy-injector-map.js +90 -60
  255. package/src/eco/module-dependencies.js +52 -44
  256. package/src/eco/page-layout-normalization.d.ts +21 -0
  257. package/src/eco/page-layout-normalization.js +69 -0
  258. package/src/env.d.ts +2 -0
  259. package/src/errors/http-error.d.ts +8 -0
  260. package/src/errors/http-error.js +66 -49
  261. package/src/errors/index.d.ts +1 -0
  262. package/src/errors/index.js +3 -6
  263. package/src/errors/locals-access-error.js +5 -8
  264. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  265. package/src/errors/undeclared-component-dependency-error.js +17 -0
  266. package/src/global/app-logger.js +3 -6
  267. package/src/hmr/README.md +21 -0
  268. package/src/hmr/client/hmr-runtime.js +119 -110
  269. package/src/hmr/client/module-update.d.ts +13 -0
  270. package/src/hmr/client/module-update.js +39 -0
  271. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  272. package/src/hmr/hmr-asset-paths.js +22 -0
  273. package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
  274. package/src/hmr/hmr-entrypoint-output.js +34 -0
  275. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  276. package/src/hmr/hmr-file-change-prep.js +14 -0
  277. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  278. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  279. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  280. package/src/hmr/hmr-runtime-paths.js +13 -0
  281. package/src/hmr/hmr-strategy.d.ts +9 -0
  282. package/src/hmr/hmr-strategy.js +113 -42
  283. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  284. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
  285. package/src/hmr/strategies/js-hmr-strategy.js +107 -167
  286. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  287. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
  288. package/src/index.browser.d.ts +1 -0
  289. package/src/index.browser.js +2 -4
  290. package/src/index.d.ts +4 -1
  291. package/src/index.js +7 -21
  292. package/src/islands/README.md +25 -0
  293. package/src/islands/island-host.d.ts +37 -0
  294. package/src/islands/island-host.js +55 -0
  295. package/src/plugins/README.md +2 -1
  296. package/src/plugins/alias-resolver-cache.d.ts +6 -9
  297. package/src/plugins/alias-resolver-cache.js +114 -97
  298. package/src/plugins/alias-resolver-plugin.d.ts +3 -3
  299. package/src/plugins/alias-resolver-plugin.js +35 -62
  300. package/src/plugins/define-integration.d.ts +26 -0
  301. package/src/plugins/define-integration.js +20 -0
  302. package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
  303. package/src/plugins/eco-component-meta-plugin.js +123 -162
  304. package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
  305. package/src/plugins/foreign-jsx-override-plugin.js +49 -37
  306. package/src/plugins/integration-plugin.d.ts +24 -6
  307. package/src/plugins/integration-plugin.js +212 -195
  308. package/src/plugins/jsx-import-source.utils.d.ts +8 -0
  309. package/src/plugins/jsx-import-source.utils.js +21 -0
  310. package/src/plugins/package-specifier.d.ts +12 -0
  311. package/src/plugins/package-specifier.js +33 -0
  312. package/src/plugins/processor.d.ts +66 -12
  313. package/src/plugins/processor.js +168 -137
  314. package/src/plugins/runtime-capability.js +1 -0
  315. package/src/plugins/source-transform.d.ts +1 -1
  316. package/src/plugins/source-transform.js +109 -79
  317. package/src/plugins/tsconfig-import-resolver.d.ts +37 -0
  318. package/src/plugins/tsconfig-import-resolver.js +262 -0
  319. package/src/route-renderer/GRAPH.md +24 -30
  320. package/src/route-renderer/README.md +52 -32
  321. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  322. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
  323. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
  324. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
  325. package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
  326. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
  327. package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +20 -7
  328. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +195 -0
  329. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
  330. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
  331. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
  332. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
  333. package/src/route-renderer/orchestration/integration-renderer.d.ts +37 -153
  334. package/src/route-renderer/orchestration/integration-renderer.js +803 -1008
  335. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
  336. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
  337. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
  338. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
  339. package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
  340. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
  341. package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
  342. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
  343. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
  344. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
  345. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
  346. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
  347. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
  348. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
  349. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
  350. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
  351. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
  352. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
  353. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
  354. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +248 -0
  355. package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
  356. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
  357. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
  358. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
  359. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
  360. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
  361. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
  362. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
  363. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
  364. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
  365. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
  366. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
  367. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
  368. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +44 -0
  369. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
  370. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
  371. package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
  372. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
  373. package/src/{integrations/ghtml/ghtml-renderer.d.ts → route-renderer/orchestration/string-markup-renderer.d.ts} +8 -10
  374. package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
  375. package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
  376. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  377. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  378. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
  379. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
  380. package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
  381. package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
  382. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  383. package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
  384. package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
  385. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  386. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  387. package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
  388. package/src/route-renderer/page-loading/page-module-loader.js +136 -124
  389. package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
  390. package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
  391. package/src/route-renderer/route-renderer.js +74 -76
  392. package/src/router/README.md +31 -0
  393. package/src/router/client/link-intent.d.ts +11 -21
  394. package/src/router/client/link-intent.js +56 -30
  395. package/src/router/client/link-intent.test.browser.js +50 -39
  396. package/src/router/client/link-navigation-policy.d.ts +45 -0
  397. package/src/router/client/link-navigation-policy.js +122 -0
  398. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  399. package/src/router/client/link-navigation-policy.test.browser.js +82 -0
  400. package/src/router/client/navigation-coordinator.d.ts +1 -1
  401. package/src/router/client/navigation-coordinator.js +235 -211
  402. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  403. package/src/router/client/navigation-lifecycle.js +50 -0
  404. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  405. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  406. package/src/router/server/route-registry.js +237 -242
  407. package/src/services/README.md +5 -0
  408. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  409. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
  410. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +12 -1
  411. package/src/services/assets/asset-processing-service/asset-processing.service.js +335 -268
  412. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  413. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  414. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  415. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +1 -1
  416. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  417. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  418. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
  419. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -58
  420. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  421. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
  422. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  423. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
  424. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  425. package/src/services/assets/asset-processing-service/index.js +8 -6
  426. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  427. package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
  428. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  429. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
  430. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  431. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  432. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  433. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  434. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  435. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
  436. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  437. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  438. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
  439. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  440. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
  441. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  442. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  443. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
  444. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  445. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
  446. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  447. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
  448. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  449. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
  450. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  451. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
  452. package/src/services/assets/browser-bundle.service.d.ts +27 -31
  453. package/src/services/assets/browser-bundle.service.js +54 -49
  454. package/src/services/assets/browser-runtime-asset-generation.d.ts +17 -0
  455. package/src/services/assets/browser-runtime-asset-generation.js +28 -0
  456. package/src/services/cache/cache.types.d.ts +4 -2
  457. package/src/services/cache/cache.types.js +5 -0
  458. package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
  459. package/src/services/cache/html-page-cache-dependency-index.js +88 -0
  460. package/src/services/cache/index.d.ts +2 -0
  461. package/src/services/cache/index.js +8 -7
  462. package/src/services/cache/memory-cache-store.js +101 -89
  463. package/src/services/cache/page-cache-service.d.ts +31 -1
  464. package/src/services/cache/page-cache-service.js +237 -150
  465. package/src/services/cache/page-request-cache-coordinator.service.d.ts +2 -1
  466. package/src/services/cache/page-request-cache-coordinator.service.js +112 -102
  467. package/src/services/html/html-rewriter-provider.service.js +61 -61
  468. package/src/services/html/html-transformer.service.js +249 -266
  469. package/src/services/invalidation/development-invalidation.service.d.ts +15 -1
  470. package/src/services/invalidation/development-invalidation.service.js +241 -204
  471. package/src/services/module-loading/README.md +9 -6
  472. package/src/services/module-loading/app-module-loader.service.js +1 -0
  473. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  474. package/src/services/module-loading/app-server-module-transpiler.service.js +104 -106
  475. package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
  476. package/src/services/module-loading/collection-server-module-build.service.js +83 -0
  477. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  478. package/src/services/module-loading/module-loading-types.js +1 -0
  479. package/src/services/module-loading/page-module-import.service.d.ts +7 -12
  480. package/src/services/module-loading/page-module-import.service.js +232 -206
  481. package/src/services/module-loading/route-module-build-cache-registry.d.ts +2 -0
  482. package/src/services/module-loading/route-module-build-cache-registry.js +59 -33
  483. package/src/services/module-loading/route-module-build-cache.js +3 -38
  484. package/src/services/module-loading/route-module-build-cache.store.d.ts +10 -0
  485. package/src/services/module-loading/route-module-build-cache.store.js +213 -196
  486. package/src/services/module-loading/route-module-build-manifest.d.ts +10 -14
  487. package/src/services/module-loading/route-module-build-manifest.js +54 -118
  488. package/src/services/module-loading/route-module-dependency-hasher.d.ts +2 -2
  489. package/src/services/module-loading/route-module-dependency-hasher.js +136 -109
  490. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
  491. package/src/services/module-loading/server-module-transpiler.service.js +65 -62
  492. package/src/services/module-loading/source-module-support.js +15 -7
  493. package/src/services/runtime-state/dev-graph.service.js +165 -157
  494. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  495. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  496. package/src/services/validation/schema-validation-service.d.ts +1 -4
  497. package/src/services/validation/schema-validation-service.js +156 -95
  498. package/src/services/validation/standard-schema.types.d.ts +9 -62
  499. package/src/services/validation/standard-schema.types.js +1 -0
  500. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  501. package/src/services/validation/validate-standard-schema.js +14 -0
  502. package/src/static-site-generator/README.md +10 -2
  503. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
  504. package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
  505. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  506. package/src/static-site-generator/sitemap-routes.js +36 -0
  507. package/src/static-site-generator/sitemap.d.ts +15 -0
  508. package/src/static-site-generator/sitemap.js +42 -0
  509. package/src/static-site-generator/static-build-invalidation.d.ts +2 -2
  510. package/src/static-site-generator/static-build-invalidation.js +33 -74
  511. package/src/static-site-generator/static-export-context.d.ts +9 -1
  512. package/src/static-site-generator/static-export-context.js +1 -0
  513. package/src/static-site-generator/static-site-generator.d.ts +27 -6
  514. package/src/static-site-generator/static-site-generator.js +528 -389
  515. package/src/types/internal-types.d.ts +55 -17
  516. package/src/types/internal-types.js +1 -0
  517. package/src/types/public-types.d.ts +236 -95
  518. package/src/types/public-types.js +1 -0
  519. package/src/utils/deep-merge.js +39 -26
  520. package/src/utils/ecopages-route-info.d.ts +26 -0
  521. package/src/utils/ecopages-route-info.js +30 -0
  522. package/src/utils/hash.js +3 -6
  523. package/src/utils/html-escaping.d.ts +7 -0
  524. package/src/utils/html-escaping.js +22 -5
  525. package/src/utils/invariant.js +11 -10
  526. package/src/utils/locals-utils.js +32 -22
  527. package/src/utils/parse-cli-args.d.ts +1 -0
  528. package/src/utils/parse-cli-args.js +73 -62
  529. package/src/utils/path-pattern.d.ts +23 -0
  530. package/src/utils/path-pattern.js +42 -0
  531. package/src/utils/path-utils.module.js +8 -11
  532. package/src/utils/resolve-entry-file.js +70 -38
  533. package/src/utils/resolve-work-dir.js +23 -27
  534. package/src/utils/runtime.js +24 -33
  535. package/src/utils/server-utils.module.d.ts +3 -2
  536. package/src/utils/server-utils.module.js +60 -53
  537. package/src/utils/static-file-extensions.d.ts +12 -0
  538. package/src/utils/static-file-extensions.js +54 -0
  539. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  540. package/src/watchers/project-watcher-ignore.js +17 -0
  541. package/src/watchers/project-watcher.d.ts +21 -6
  542. package/src/watchers/project-watcher.js +402 -277
  543. package/src/watchers/project-watcher.test-helpers.js +45 -50
  544. package/src/adapters/shared/api-response.js +0 -96
  545. package/src/adapters/shared/application-adapter.js +0 -90
  546. package/src/adapters/shared/bun-user-websocket-lifecycle.js +0 -102
  547. package/src/adapters/shared/copy-runtime-public-dir.js +0 -24
  548. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  549. package/src/adapters/shared/define-api-handler.js +0 -15
  550. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  551. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  552. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  553. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  554. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  555. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  556. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  557. package/src/adapters/shared/hmr-html-response.js +0 -33
  558. package/src/adapters/shared/node-http-websocket-upgrades.js +0 -125
  559. package/src/adapters/shared/render-context.js +0 -93
  560. package/src/adapters/shared/runtime-app-bootstrap.js +0 -41
  561. package/src/adapters/shared/runtime-host.js +0 -0
  562. package/src/adapters/shared/server-adapter.js +0 -436
  563. package/src/adapters/shared/server-route-handler.js +0 -111
  564. package/src/adapters/shared/server-static-builder.js +0 -202
  565. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -61
  566. package/src/adapters/shared/shared-hmr-manager.js +0 -273
  567. package/src/adapters/shared/static-preview-host.js +0 -0
  568. package/src/adapters/shared/websocket-lifecycle.d.ts +0 -3
  569. package/src/adapters/shared/websocket-lifecycle.js +0 -19
  570. package/src/build/browser-runtime-manifest.js +0 -61
  571. package/src/build/browser-runtime-plugin-helpers.js +0 -14
  572. package/src/build/browser-runtime-plugin.js +0 -173
  573. package/src/build/build-input-fingerprint.js +0 -31
  574. package/src/build/build-manifest.d.ts +0 -33
  575. package/src/build/build-manifest.js +0 -49
  576. package/src/build/build-types.js +0 -0
  577. package/src/build/jsx-ownership-plugins.d.ts +0 -10
  578. package/src/build/jsx-ownership-plugins.js +0 -17
  579. package/src/build/pages-unified-graph-build.js +0 -208
  580. package/src/build/parallel-build-executor.js +0 -52
  581. package/src/build/rolldown-adapter-helpers.js +0 -310
  582. package/src/build/rolldown-build-adapter.js +0 -67
  583. package/src/build/rolldown-build-invocation-metrics.js +0 -43
  584. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  585. package/src/build/rolldown-dev-build-adapter.js +0 -182
  586. package/src/build/rolldown-plugin-bridge.js +0 -211
  587. package/src/build/rolldown-source-transform-pass.js +0 -58
  588. package/src/build/runtime-build-executor.d.ts +0 -15
  589. package/src/build/runtime-build-executor.js +0 -43
  590. package/src/build/runtime-build-output-normalizer.js +0 -203
  591. package/src/build/serialized-build-executor.js +0 -63
  592. package/src/build/server-entry-build-cache.js +0 -169
  593. package/src/build/server-side-css-shim-plugin.js +0 -35
  594. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  595. package/src/hmr/hmr.test.e2e.js +0 -54
  596. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  597. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  598. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  599. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  600. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  601. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  602. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  603. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  604. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
  605. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  606. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  607. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  608. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  609. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  610. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  611. package/src/route-renderer/orchestration/render-output.utils.js +0 -175
  612. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
  613. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  614. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  615. package/src/utils/html.d.ts +0 -1
  616. package/src/utils/html.js +0 -4
  617. /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
  618. /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
  619. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  620. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  621. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  622. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  623. /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
  624. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -0,0 +1,463 @@
1
+ /**
2
+ * Shared helpers for the Rolldown-backed build adapters.
3
+ *
4
+ * @remarks
5
+ * The standard {@link RolldownBuildAdapter} uses these helpers for
6
+ * BuildOptions → Rolldown mapping, dependency-graph extraction, and the
7
+ * post-build rewriting pipeline.
8
+ *
9
+ * @module
10
+ */
11
+ import { builtinModules, createRequire } from 'node:module';
12
+ import { readFileSync } from 'node:fs';
13
+ import path from 'node:path';
14
+ import { isBarePackageImportSpecifier } from '../../plugins/tsconfig-import-resolver.js';
15
+ import { collectBrowserRuntimeManifests, rewriteBrowserRuntimeImports } from '../browser/browser-runtime-plugin.js';
16
+ import { mergeBrowserRuntimeManifests } from '../browser/browser-runtime-manifest.js';
17
+ import { createServerSideCssShimPlugin } from './server-side-css-shim-plugin.js';
18
+ import { createRolldownPluginBridge } from './rolldown-plugin-bridge.js';
19
+ import { isDeclaredAppPackageImport, isWorkspacePackageImport, normalizeNodeRuntimeBuildOutputs, } from './runtime-build-output-normalizer.js';
20
+ const corePackageRequire = createRequire(new URL('../../../package.json', import.meta.url));
21
+ const nodeBuiltinSpecifiers = new Set(builtinModules);
22
+ let corePackageNames;
23
+ /**
24
+ * Returns the set of packages declared as direct dependencies in core's own
25
+ * `package.json` (all dependency fields combined).
26
+ *
27
+ * @remarks
28
+ * Result is cached for the lifetime of the process. This is safe because
29
+ * core's own package.json does not change at runtime.
30
+ */
31
+ function getCorePackageNames() {
32
+ if (corePackageNames) {
33
+ return corePackageNames;
34
+ }
35
+ const packageJsonPath = new URL('../../../package.json', import.meta.url);
36
+ corePackageNames = new Set();
37
+ try {
38
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
39
+ for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
40
+ const entries = packageJson[field];
41
+ if (!entries || typeof entries !== 'object') {
42
+ continue;
43
+ }
44
+ for (const name of Object.keys(entries)) {
45
+ corePackageNames.add(name);
46
+ }
47
+ }
48
+ }
49
+ catch {
50
+ // Return empty set on read/parse failure; packages will be bundled.
51
+ }
52
+ return corePackageNames;
53
+ }
54
+ function isCoreDeclaredPackageImport(specifier) {
55
+ const name = specifier.startsWith('@')
56
+ ? specifier.split('/').slice(0, 2).join('/')
57
+ : (specifier.split('/')[0] ?? specifier);
58
+ return getCorePackageNames().has(name);
59
+ }
60
+ export function transpileProfileToOptions(profile) {
61
+ switch (profile) {
62
+ case 'browser-script':
63
+ case 'hmr-runtime':
64
+ case 'hmr-entrypoint':
65
+ return {
66
+ target: 'browser',
67
+ format: 'esm',
68
+ sourcemap: 'none',
69
+ };
70
+ }
71
+ }
72
+ function isPackageImport(id, contextRoot) {
73
+ return isBarePackageImportSpecifier(id, contextRoot);
74
+ }
75
+ function tryResolveModule(id, resolver) {
76
+ try {
77
+ return resolver.resolve(id);
78
+ }
79
+ catch {
80
+ return undefined;
81
+ }
82
+ }
83
+ function getAppRootRequire(cache, contextRoot) {
84
+ const cacheKey = path.resolve(contextRoot);
85
+ let req = cache.get(cacheKey);
86
+ if (!req) {
87
+ req = createRequire(path.join(cacheKey, 'package.json'));
88
+ cache.set(cacheKey, req);
89
+ }
90
+ return req;
91
+ }
92
+ /**
93
+ * Determines whether a package import should be bundled into the output
94
+ * rather than left as an external bare specifier.
95
+ *
96
+ * @remarks
97
+ * Resolution is evaluated in three tiers:
98
+ *
99
+ * 1. **Workspace packages** (`workspace:` protocol) — always bundled; they
100
+ * are source-only and cannot be resolved by Node.js at runtime.
101
+ * 2. **App-declared packages** — bundled only when their resolved entry is a
102
+ * TypeScript or JSX file (source packages); pre-compiled packages are left
103
+ * external so the app's own resolver handles them at runtime.
104
+ * 3. **Everything else** (undeclared transitives) — split into two sub-cases:
105
+ * - A **direct dependency of core** that resolves to a compiled JS file
106
+ * (e.g. `oxc-parser`, `rolldown`, `ws`): externalized so the
107
+ * `runtime-build-output-normalizer` can rewrite the import to an
108
+ * absolute `file://` URL after the build. "Direct" means declared in
109
+ * core's own `package.json`; transitives that merely *resolve through*
110
+ * core's `require` are excluded.
111
+ * - **Everything else** (true transitives like `lexical`, `@lexical/react`):
112
+ * bundled unconditionally. pnpm strict hoisting means these packages
113
+ * are unreachable as bare specifiers from output directories such as
114
+ * `.eco/`, `.server-route-modules/`, or `dist/.server/`.
115
+ *
116
+ * @param id - The package specifier (e.g., `@scope/pkg/subpath`).
117
+ * @param contextRoot - The root directory of the app being built.
118
+ * @param appRootRequireCache - Cache of `require` instances per context root.
119
+ * @returns `true` if the import should be bundled, `false` to externalize.
120
+ */
121
+ function shouldBundlePackageImport(id, contextRoot, appRootRequireCache) {
122
+ if (isWorkspacePackageImport(id, contextRoot)) {
123
+ return true;
124
+ }
125
+ if (isDeclaredAppPackageImport(id, contextRoot)) {
126
+ const appRootRequire = getAppRootRequire(appRootRequireCache, contextRoot);
127
+ const appResolvedPath = tryResolveModule(id, appRootRequire);
128
+ return Boolean(appResolvedPath && /\.(?:[cm]?ts|tsx|jsx)$/u.test(appResolvedPath));
129
+ }
130
+ if (isCoreDeclaredPackageImport(id)) {
131
+ const coreResolvedPath = tryResolveModule(id, corePackageRequire);
132
+ if (coreResolvedPath && !/\.(?:[cm]?ts|tsx|jsx)$/u.test(coreResolvedPath)) {
133
+ return false;
134
+ }
135
+ }
136
+ return true;
137
+ }
138
+ function createExternalMatcher(options, appRootRequireCache) {
139
+ const explicitExternals = new Set(options.external ?? []);
140
+ const externalPackages = options.externalPackages === true;
141
+ const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
142
+ return (id) => {
143
+ if (explicitExternals.has(id)) {
144
+ return true;
145
+ }
146
+ if (!externalPackages || !isPackageImport(id, contextRoot)) {
147
+ return false;
148
+ }
149
+ return !shouldBundlePackageImport(id, contextRoot, appRootRequireCache);
150
+ };
151
+ }
152
+ function isNodeBuiltinSpecifier(id) {
153
+ return id.startsWith('node:') || nodeBuiltinSpecifiers.has(id);
154
+ }
155
+ /**
156
+ * Resolves Node builtins as external before Rolldown falls back to file resolution.
157
+ *
158
+ * @remarks
159
+ * Rolldown documents two first-class externalization points: its `external`
160
+ * option is checked before resolution, and a plugin `resolveId` hook can return
161
+ * `{ id, external: true }`. Core uses the latter to keep Node-builtin ownership
162
+ * explicit in the Node-target plugin pipeline.
163
+ *
164
+ * The hook runs before Rolldown's internal filesystem resolver, leaving imports
165
+ * such as `node:fs` intact for the Node runtime. It is installed only for
166
+ * Node-target builds, so browser bundles still surface accidental Node builtin
167
+ * imports as resolver failures.
168
+ *
169
+ * See {@link https://rolldown.rs/in-depth/external-modules | Rolldown external modules}.
170
+ */
171
+ export function createNodeBuiltinExternalPlugin() {
172
+ return {
173
+ name: 'ecopages-node-builtin-external',
174
+ resolveId(id) {
175
+ return isNodeBuiltinSpecifier(id) ? { id, external: true } : null;
176
+ },
177
+ };
178
+ }
179
+ /**
180
+ * Rejects Node builtins in browser-target builds before Rolldown externalizes them.
181
+ *
182
+ * @remarks
183
+ * With `platform: 'browser'`, Rolldown leaves `node:*` imports in the output as
184
+ * bare specifiers. This plugin fails the build instead so server-only graphs
185
+ * cannot reach the browser as silent CORS errors.
186
+ */
187
+ export function createBrowserNodeBuiltinGuardPlugin() {
188
+ return {
189
+ name: 'ecopages-browser-node-builtin-guard',
190
+ resolveId(id, importer) {
191
+ if (!isNodeBuiltinSpecifier(id)) {
192
+ return null;
193
+ }
194
+ const from = importer ? ` (imported from ${importer})` : '';
195
+ throw new Error(`[browser-build] Node builtin "${id}" cannot be bundled for the browser${from}. ` +
196
+ `Check package "browser" exports and the client-graph boundary for the importer.`);
197
+ },
198
+ };
199
+ }
200
+ function mapRolldownFormat(value) {
201
+ switch (value) {
202
+ case 'cjs':
203
+ return 'cjs';
204
+ case 'iife':
205
+ return 'iife';
206
+ default:
207
+ return 'esm';
208
+ }
209
+ }
210
+ function mapRolldownPlatform(value) {
211
+ if (value === 'browser')
212
+ return 'browser';
213
+ if (value === 'node')
214
+ return 'node';
215
+ if (value && /^(?:es\d+|chrome\d+|edge\d+|firefox\d+|safari\d+|hermes|deno\d+|ios\d+)$/.test(value)) {
216
+ return 'node';
217
+ }
218
+ return 'neutral';
219
+ }
220
+ function mapRolldownSourcemap(value) {
221
+ switch (value) {
222
+ case 'none':
223
+ return false;
224
+ case 'inline':
225
+ return 'inline';
226
+ case 'external':
227
+ case 'linked':
228
+ return 'hidden';
229
+ default:
230
+ return true;
231
+ }
232
+ }
233
+ function mapRolldownJsx(jsx) {
234
+ const { factory, fragment, ...rest } = jsx;
235
+ const out = { ...rest };
236
+ if (factory !== undefined) {
237
+ out.pragma = factory;
238
+ }
239
+ if (fragment !== undefined) {
240
+ out.pragmaFrag = fragment;
241
+ }
242
+ return out;
243
+ }
244
+ function toEntryFileNamesPattern(value) {
245
+ if (!value) {
246
+ return undefined;
247
+ }
248
+ const literal = !/\[[^\]]+\]/u.test(value);
249
+ const stripped = value.replaceAll(/\.?\[ext\]/g, '');
250
+ if (stripped.length === 0) {
251
+ return undefined;
252
+ }
253
+ return { pattern: stripped, literal };
254
+ }
255
+ function getJavaScriptOutExtension(options, literal) {
256
+ if (literal) {
257
+ return undefined;
258
+ }
259
+ if (options.target === 'browser') {
260
+ return '.js';
261
+ }
262
+ if (options.format === 'cjs') {
263
+ return '.cjs';
264
+ }
265
+ return '.mjs';
266
+ }
267
+ function normalizeOutputPath(outputPath, outdir) {
268
+ return path.isAbsolute(outputPath) ? path.normalize(outputPath) : path.normalize(path.join(outdir, outputPath));
269
+ }
270
+ function normalizeModulePath(modulePath, contextRoot) {
271
+ return path.isAbsolute(modulePath)
272
+ ? path.normalize(modulePath)
273
+ : path.normalize(path.resolve(contextRoot, modulePath));
274
+ }
275
+ export function extractDependencyGraph(chunks, contextRoot) {
276
+ const entrypoints = {};
277
+ for (const chunk of chunks) {
278
+ if (!chunk.facadeModuleId) {
279
+ continue;
280
+ }
281
+ const entrypointPath = normalizeModulePath(chunk.facadeModuleId, contextRoot);
282
+ entrypoints[entrypointPath] = Array.from(new Set([entrypointPath, ...chunk.moduleIds.map((id) => normalizeModulePath(id, contextRoot))]));
283
+ }
284
+ return { entrypoints };
285
+ }
286
+ export function toBuildLogs(error) {
287
+ if (error instanceof Error) {
288
+ return [{ message: error.message }];
289
+ }
290
+ return [{ message: 'Unknown build error' }];
291
+ }
292
+ /**
293
+ * Translates a {@link BuildOptions} into Rolldown's `InputOptions` and
294
+ * `OutputOptions`. Always sets `experimental.nativeMagicString: true`
295
+ * and always consolidates eco plugins via the bridge.
296
+ */
297
+ export function resolveRolldownOptions(options, contextRoot, outdir, appRootRequireCache) {
298
+ const rolldownPlatform = mapRolldownPlatform(options.target);
299
+ const external = createExternalMatcher(options, appRootRequireCache);
300
+ const transformOptions = {};
301
+ if (options.define) {
302
+ transformOptions.define = options.define;
303
+ }
304
+ if (options.jsx) {
305
+ transformOptions.jsx = mapRolldownJsx(options.jsx);
306
+ }
307
+ if (options.target && /^(?:es|chrome|edge|firefox|safari|hermes|deno|ios)/.test(options.target)) {
308
+ transformOptions.target = options.target;
309
+ }
310
+ const bundlePlugins = options.plugins ?? [];
311
+ const sourceTransforms = options.sourceTransforms ?? [];
312
+ const appPlugins = createRolldownPluginBridge(bundlePlugins, contextRoot, sourceTransforms);
313
+ const allPlugins = [
314
+ ...(rolldownPlatform === 'node' ? [createNodeBuiltinExternalPlugin()] : []),
315
+ ...(rolldownPlatform === 'browser' ? [createBrowserNodeBuiltinGuardPlugin()] : []),
316
+ ...(options.target !== 'browser' ? [createServerSideCssShimPlugin()] : []),
317
+ ...appPlugins,
318
+ ];
319
+ const inputOptions = {
320
+ input: options.entrypoints,
321
+ cwd: contextRoot,
322
+ external,
323
+ platform: mapRolldownPlatform(options.target),
324
+ transform: Object.keys(transformOptions).length > 0 ? transformOptions : undefined,
325
+ resolve: options.conditions ? { conditionNames: options.conditions } : undefined,
326
+ treeshake: typeof options.treeshaking === 'boolean' ? options.treeshaking : true,
327
+ ...(process.env.ECOPAGES_PROFILE_BUILD === '1'
328
+ ? {}
329
+ : {
330
+ checks: {
331
+ pluginTimings: false,
332
+ },
333
+ }),
334
+ experimental: {
335
+ nativeMagicString: true,
336
+ },
337
+ plugins: allPlugins,
338
+ };
339
+ const entryFileNames = toEntryFileNamesPattern(options.naming);
340
+ const jsExtension = getJavaScriptOutExtension(options, entryFileNames?.literal ?? false);
341
+ const finalEntryFileNames = entryFileNames
342
+ ? jsExtension
343
+ ? `${entryFileNames.pattern}${jsExtension}`
344
+ : entryFileNames.pattern
345
+ : jsExtension
346
+ ? `[name]${jsExtension}`
347
+ : '[name]';
348
+ const entrypointCount = Array.isArray(options.entrypoints)
349
+ ? options.entrypoints.length
350
+ : Object.keys(options.entrypoints).length;
351
+ const disableCodeSplitting = options.splitting === false && entrypointCount === 1;
352
+ const outputOptions = {
353
+ dir: outdir,
354
+ format: mapRolldownFormat(options.format),
355
+ minify: !!options.minify,
356
+ entryFileNames: finalEntryFileNames,
357
+ chunkFileNames: '[name]-[hash].js',
358
+ assetFileNames: '[name]-[hash][extname]',
359
+ sourcemap: mapRolldownSourcemap(options.sourcemap),
360
+ ...(disableCodeSplitting ? { codeSplitting: false } : {}),
361
+ };
362
+ return { inputOptions, outputOptions };
363
+ }
364
+ /**
365
+ * Rewrites manifest-owned runtime specifiers in emitted JS output
366
+ * files. Skips work when the specifier map is empty or when a
367
+ * `(specifierMap, path, content)` tuple was already seen.
368
+ *
369
+ * The content cache is module-level and is keyed on a djb2 hash of
370
+ * the input bytes plus a sorted fingerprint of the specifier map. A
371
+ * manifest change correctly invalidates prior entries; different
372
+ * content of the same length does not collide.
373
+ */
374
+ export function rewriteBrowserRuntimeImportsInOutputs(result, contextRoot, plugins) {
375
+ if (!result.success || result.outputs.length === 0) {
376
+ return result;
377
+ }
378
+ const manifests = collectBrowserRuntimeManifests(plugins);
379
+ const manifest = mergeBrowserRuntimeManifests(...manifests);
380
+ if (manifest.assets.length === 0) {
381
+ return result;
382
+ }
383
+ const moduleRequireFromContext = createRequire(path.join(contextRoot, 'package.json'));
384
+ const fs = moduleRequireFromContext('node:fs');
385
+ const cacheFingerprint = manifest.assets
386
+ .map((asset) => `${asset.specifier}->${asset.publicPath}`)
387
+ .sort()
388
+ .join('|');
389
+ for (const output of result.outputs) {
390
+ if (!/\.(?:[cm]?js)$/u.test(output.path)) {
391
+ continue;
392
+ }
393
+ const code = fs.readFileSync(output.path, 'utf-8');
394
+ const contentKey = `${cacheFingerprint}::${output.path}::${djb2(code)}`;
395
+ if (rewriteCache.has(contentKey)) {
396
+ continue;
397
+ }
398
+ const rewritten = rewriteBrowserRuntimeImports(code, manifest, output.path);
399
+ if (rewritten !== code) {
400
+ fs.writeFileSync(output.path, rewritten);
401
+ }
402
+ rememberRewrite(contentKey);
403
+ }
404
+ return result;
405
+ }
406
+ const REWRITE_CACHE_MAX_ENTRIES = 2048;
407
+ const rewriteCache = new Set();
408
+ /**
409
+ * @remarks
410
+ * Dev rebuilds hit the same output paths with stable specifier maps; memoizing
411
+ * skips re-reading and re-writing unchanged files. The cache is capped because
412
+ * a process-global set would otherwise grow for the lifetime of a watch session.
413
+ * Eviction uses insertion order as an approximate LRU.
414
+ */
415
+ function rememberRewrite(contentKey) {
416
+ rewriteCache.add(contentKey);
417
+ if (rewriteCache.size > REWRITE_CACHE_MAX_ENTRIES) {
418
+ const oldest = rewriteCache.values().next().value;
419
+ if (oldest !== undefined) {
420
+ rewriteCache.delete(oldest);
421
+ }
422
+ }
423
+ }
424
+ function djb2(input) {
425
+ let hash = 5381;
426
+ for (let i = 0; i < input.length; i++) {
427
+ hash = ((hash << 5) + hash + input.charCodeAt(i)) | 0;
428
+ }
429
+ return hash.toString(36);
430
+ }
431
+ /** Test-only: clears the rewriter content cache. */
432
+ export function clearRewriteCacheForTests() {
433
+ rewriteCache.clear();
434
+ }
435
+ /** Normalizes node-runtime import paths in emitted outputs. */
436
+ export function rewriteNodeRuntimeImportsInOutputs(result, contextRoot) {
437
+ if (!result.success || result.outputs.length === 0) {
438
+ return result;
439
+ }
440
+ normalizeNodeRuntimeBuildOutputs(result.outputs.map((output) => output.path), contextRoot);
441
+ return result;
442
+ }
443
+ /** Maps a Rolldown `output` to a normalized {@link BuildResult}. */
444
+ export function buildResultFromRolldownOutput(output, outdir, contextRoot) {
445
+ const outputs = output.output.map((entry) => ({
446
+ path: normalizeOutputPath(entry.fileName, outdir),
447
+ }));
448
+ const entryChunks = output.output.filter((entry) => entry.type === 'chunk' && entry.isEntry);
449
+ const dependencyGraph = entryChunks.length > 0 ? extractDependencyGraph(entryChunks, contextRoot) : undefined;
450
+ const entryOutputs = {};
451
+ for (const chunk of entryChunks) {
452
+ if (chunk.facadeModuleId) {
453
+ entryOutputs[normalizeModulePath(chunk.facadeModuleId, contextRoot)] = normalizeOutputPath(chunk.fileName, outdir);
454
+ }
455
+ }
456
+ return {
457
+ success: true,
458
+ logs: [],
459
+ outputs,
460
+ dependencyGraph,
461
+ entryOutputs: entryChunks.length > 0 ? entryOutputs : undefined,
462
+ };
463
+ }
@@ -6,19 +6,15 @@
6
6
  * default adapter installed by `ConfigBuilder` and the adapter that
7
7
  * issues real builds in production.
8
8
  *
9
- * Each `build()` creates a fresh `rolldown()` bundler, so there is no
10
- * module-graph reuse across calls. For HMR/watch mode where the same
11
- * entrypoints are rebuilt repeatedly, see {@link RolldownDevBuildAdapter}.
9
+ * Each `build()` creates a fresh `rolldown()` bundler.
12
10
  */
13
- import type { BuildAdapter, BuildOptions, BuildResult, BuildTranspileOptions, BuildTranspileProfile } from './build-adapter.js';
11
+ import type { BuildAdapter, BuildOptions, BuildResult, BuildTranspileOptions, BuildTranspileProfile } from '../build-adapter.js';
14
12
  export declare class RolldownBuildAdapter implements BuildAdapter {
15
13
  readonly ownership: "rolldown";
16
14
  /** Per-adapter require cache, keyed on resolved context root. */
17
15
  private readonly appRootRequireCache;
18
16
  /**
19
- * Issues one build. Creates a fresh `rolldown()` bundler per call,
20
- * so no module-graph reuse. For repeated rebuilds on the same
21
- * entrypoints, use {@link RolldownDevBuildAdapter}.
17
+ * Issues one build. Creates a fresh `rolldown()` bundler per call.
22
18
  */
23
19
  buildOrThrow(options: BuildOptions): Promise<BuildResult>;
24
20
  build(options: BuildOptions): Promise<BuildResult>;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Bundler-backed build adapter.
3
+ *
4
+ * @remarks
5
+ * Implements {@link BuildAdapter} on top of Rolldown. This is the
6
+ * default adapter installed by `ConfigBuilder` and the adapter that
7
+ * issues real builds in production.
8
+ *
9
+ * Each `build()` creates a fresh `rolldown()` bundler.
10
+ */
11
+ import { createRequire } from 'node:module';
12
+ import path from 'node:path';
13
+ import { rolldown } from 'rolldown';
14
+ import { buildResultFromRolldownOutput, resolveRolldownOptions, rewriteBrowserRuntimeImportsInOutputs, rewriteNodeRuntimeImportsInOutputs, toBuildLogs, transpileProfileToOptions, } from './rolldown-adapter-helpers.js';
15
+ import { recordRolldownBuildInvocation } from './rolldown-build-invocation-metrics.js';
16
+ const moduleRequire = createRequire(import.meta.url);
17
+ export class RolldownBuildAdapter {
18
+ ownership = 'rolldown';
19
+ /** Per-adapter require cache, keyed on resolved context root. */
20
+ appRootRequireCache = new Map();
21
+ /**
22
+ * Issues one build. Creates a fresh `rolldown()` bundler per call.
23
+ */
24
+ async buildOrThrow(options) {
25
+ recordRolldownBuildInvocation('rolldown');
26
+ const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
27
+ const outdir = path.resolve(options.outdir ?? 'dist/assets');
28
+ const plugins = options.plugins ?? [];
29
+ const { inputOptions, outputOptions } = resolveRolldownOptions(options, contextRoot, outdir, this.appRootRequireCache);
30
+ const bundle = await rolldown(inputOptions);
31
+ const output = await bundle.write(outputOptions);
32
+ await bundle.close();
33
+ const baseResult = buildResultFromRolldownOutput(output, outdir, contextRoot);
34
+ return rewriteNodeRuntimeImportsInOutputs(rewriteBrowserRuntimeImportsInOutputs(baseResult, contextRoot, plugins), contextRoot);
35
+ }
36
+ async build(options) {
37
+ try {
38
+ return await this.buildOrThrow(options);
39
+ }
40
+ catch (error) {
41
+ return {
42
+ success: false,
43
+ logs: toBuildLogs(error),
44
+ outputs: [],
45
+ };
46
+ }
47
+ }
48
+ resolve(importPath, rootDir) {
49
+ return moduleRequire.resolve(importPath, { paths: [rootDir] });
50
+ }
51
+ getTranspileOptions(profile) {
52
+ return transpileProfileToOptions(profile);
53
+ }
54
+ }
55
+ export function createRolldownBuildAdapter() {
56
+ return new RolldownBuildAdapter();
57
+ }
@@ -4,7 +4,7 @@
4
4
  * Gated behind {@link isRolldownBuildMetricsEnabled} so production paths stay quiet.
5
5
  */
6
6
  export declare function isRolldownBuildMetricsEnabled(): boolean;
7
- export declare function recordRolldownBuildInvocation(adapter?: 'rolldown' | 'rolldown-dev'): void;
7
+ export declare function recordRolldownBuildInvocation(adapter?: 'rolldown'): void;
8
8
  export declare function getRolldownBuildInvocationCounts(): Readonly<Record<string, number>>;
9
9
  export declare function resetRolldownBuildInvocationCounts(): void;
10
10
  export declare function recordPageModuleBuildInvocation(): void;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Process-wide Rolldown build invocation counters for benchmarks and spikes.
3
+ *
4
+ * Gated behind {@link isRolldownBuildMetricsEnabled} so production paths stay quiet.
5
+ */
6
+ const invocationCounts = new Map();
7
+ let pageModuleBuildInvocations = 0;
8
+ export function isRolldownBuildMetricsEnabled() {
9
+ return process.env.ECOPAGES_ROLLDOWN_BUILD_METRICS === '1' || process.env.ECOPAGES_LOGGER_DEBUG === 'true';
10
+ }
11
+ export function recordRolldownBuildInvocation(adapter = 'rolldown') {
12
+ if (!isRolldownBuildMetricsEnabled()) {
13
+ return;
14
+ }
15
+ invocationCounts.set(adapter, (invocationCounts.get(adapter) ?? 0) + 1);
16
+ }
17
+ export function getRolldownBuildInvocationCounts() {
18
+ return Object.fromEntries(invocationCounts);
19
+ }
20
+ export function resetRolldownBuildInvocationCounts() {
21
+ invocationCounts.clear();
22
+ pageModuleBuildInvocations = 0;
23
+ }
24
+ export function recordPageModuleBuildInvocation() {
25
+ if (!isRolldownBuildMetricsEnabled()) {
26
+ return;
27
+ }
28
+ pageModuleBuildInvocations += 1;
29
+ }
30
+ export function getPageModuleRolldownBuildInvocations() {
31
+ return pageModuleBuildInvocations;
32
+ }
33
+ export function getTotalRolldownBuildInvocations() {
34
+ let total = 0;
35
+ for (const count of invocationCounts.values()) {
36
+ total += count;
37
+ }
38
+ return total;
39
+ }
@@ -40,8 +40,8 @@
40
40
  * on every source file.
41
41
  */
42
42
  import type { Plugin } from 'rolldown';
43
- import type { EcoSourceTransform } from '../plugins/source-transform.js';
44
- import type { EcoBuildPlugin } from './build-types.js';
43
+ import type { EcoSourceTransform } from '../../plugins/source-transform.js';
44
+ import type { EcoBuildPlugin } from '../contracts/build-types.js';
45
45
  /**
46
46
  * Creates a Rolldown `Plugin` array that drives the supplied
47
47
  * `EcoBuildPlugin` instances.
@@ -57,6 +57,11 @@ import type { EcoBuildPlugin } from './build-types.js';
57
57
  * are checked before registrations from later ones, matching the
58
58
  * original per-plugin priority semantics.
59
59
  *
60
+ * @remarks
61
+ * Rolldown re-fires `buildStart` on each build, so registrations and the
62
+ * virtual-module counter are cleared before every `setup` pass — otherwise
63
+ * handlers accumulate when bridge plugins are reused.
64
+ *
60
65
  * @param plugins - `EcoBuildPlugin` instances registered for this build.
61
66
  * @param contextRoot - Project root used to resolve relative load paths.
62
67
  * @param sourceTransforms - Optional app-owned transforms applied after a matching