@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,458 @@
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 { collectBrowserRuntimeImportRewriteMap, rewriteBrowserRuntimeImports, } from '../browser/browser-runtime-plugin.js';
16
+ import { createServerSideCssShimPlugin } from './server-side-css-shim-plugin.js';
17
+ import { createRolldownPluginBridge } from './rolldown-plugin-bridge.js';
18
+ import { isDeclaredAppPackageImport, isWorkspacePackageImport, normalizeNodeRuntimeBuildOutputs, } from './runtime-build-output-normalizer.js';
19
+ const corePackageRequire = createRequire(new URL('../../../package.json', import.meta.url));
20
+ const nodeBuiltinSpecifiers = new Set(builtinModules);
21
+ let corePackageNames;
22
+ /**
23
+ * Returns the set of packages declared as direct dependencies in core's own
24
+ * `package.json` (all dependency fields combined).
25
+ *
26
+ * @remarks
27
+ * Result is cached for the lifetime of the process. This is safe because
28
+ * core's own package.json does not change at runtime.
29
+ */
30
+ function getCorePackageNames() {
31
+ if (corePackageNames) {
32
+ return corePackageNames;
33
+ }
34
+ const packageJsonPath = new URL('../../../package.json', import.meta.url);
35
+ corePackageNames = new Set();
36
+ try {
37
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
38
+ for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
39
+ const entries = packageJson[field];
40
+ if (!entries || typeof entries !== 'object') {
41
+ continue;
42
+ }
43
+ for (const name of Object.keys(entries)) {
44
+ corePackageNames.add(name);
45
+ }
46
+ }
47
+ }
48
+ catch {
49
+ // Return empty set on read/parse failure; packages will be bundled.
50
+ }
51
+ return corePackageNames;
52
+ }
53
+ function isCoreDeclaredPackageImport(specifier) {
54
+ const name = specifier.startsWith('@')
55
+ ? specifier.split('/').slice(0, 2).join('/')
56
+ : (specifier.split('/')[0] ?? specifier);
57
+ return getCorePackageNames().has(name);
58
+ }
59
+ export function transpileProfileToOptions(profile) {
60
+ switch (profile) {
61
+ case 'browser-script':
62
+ case 'hmr-runtime':
63
+ case 'hmr-entrypoint':
64
+ return {
65
+ target: 'browser',
66
+ format: 'esm',
67
+ sourcemap: 'none',
68
+ };
69
+ }
70
+ }
71
+ function isPackageImport(id, contextRoot) {
72
+ return isBarePackageImportSpecifier(id, contextRoot);
73
+ }
74
+ function tryResolveModule(id, resolver) {
75
+ try {
76
+ return resolver.resolve(id);
77
+ }
78
+ catch {
79
+ return undefined;
80
+ }
81
+ }
82
+ function getAppRootRequire(cache, contextRoot) {
83
+ const cacheKey = path.resolve(contextRoot);
84
+ let req = cache.get(cacheKey);
85
+ if (!req) {
86
+ req = createRequire(path.join(cacheKey, 'package.json'));
87
+ cache.set(cacheKey, req);
88
+ }
89
+ return req;
90
+ }
91
+ /**
92
+ * Determines whether a package import should be bundled into the output
93
+ * rather than left as an external bare specifier.
94
+ *
95
+ * @remarks
96
+ * Resolution is evaluated in three tiers:
97
+ *
98
+ * 1. **Workspace packages** (`workspace:` protocol) — always bundled; they
99
+ * are source-only and cannot be resolved by Node.js at runtime.
100
+ * 2. **App-declared packages** — bundled only when their resolved entry is a
101
+ * TypeScript or JSX file (source packages); pre-compiled packages are left
102
+ * external so the app's own resolver handles them at runtime.
103
+ * 3. **Everything else** (undeclared transitives) — split into two sub-cases:
104
+ * - A **direct dependency of core** that resolves to a compiled JS file
105
+ * (e.g. `oxc-parser`, `rolldown`, `ws`): externalized so the
106
+ * `runtime-build-output-normalizer` can rewrite the import to an
107
+ * absolute `file://` URL after the build. "Direct" means declared in
108
+ * core's own `package.json`; transitives that merely *resolve through*
109
+ * core's `require` are excluded.
110
+ * - **Everything else** (true transitives like `lexical`, `@lexical/react`):
111
+ * bundled unconditionally. pnpm strict hoisting means these packages
112
+ * are unreachable as bare specifiers from output directories such as
113
+ * `.eco/`, `.server-route-modules/`, or `dist/.server/`.
114
+ *
115
+ * @param id - The package specifier (e.g., `@scope/pkg/subpath`).
116
+ * @param contextRoot - The root directory of the app being built.
117
+ * @param appRootRequireCache - Cache of `require` instances per context root.
118
+ * @returns `true` if the import should be bundled, `false` to externalize.
119
+ */
120
+ function shouldBundlePackageImport(id, contextRoot, appRootRequireCache) {
121
+ if (isWorkspacePackageImport(id, contextRoot)) {
122
+ return true;
123
+ }
124
+ if (isDeclaredAppPackageImport(id, contextRoot)) {
125
+ const appRootRequire = getAppRootRequire(appRootRequireCache, contextRoot);
126
+ const appResolvedPath = tryResolveModule(id, appRootRequire);
127
+ return Boolean(appResolvedPath && /\.(?:[cm]?ts|tsx|jsx)$/u.test(appResolvedPath));
128
+ }
129
+ if (isCoreDeclaredPackageImport(id)) {
130
+ const coreResolvedPath = tryResolveModule(id, corePackageRequire);
131
+ if (coreResolvedPath && !/\.(?:[cm]?ts|tsx|jsx)$/u.test(coreResolvedPath)) {
132
+ return false;
133
+ }
134
+ }
135
+ return true;
136
+ }
137
+ function createExternalMatcher(options, appRootRequireCache) {
138
+ const explicitExternals = new Set(options.external ?? []);
139
+ const externalPackages = options.externalPackages === true;
140
+ const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
141
+ return (id) => {
142
+ if (explicitExternals.has(id)) {
143
+ return true;
144
+ }
145
+ if (!externalPackages || !isPackageImport(id, contextRoot)) {
146
+ return false;
147
+ }
148
+ return !shouldBundlePackageImport(id, contextRoot, appRootRequireCache);
149
+ };
150
+ }
151
+ function isNodeBuiltinSpecifier(id) {
152
+ return id.startsWith('node:') || nodeBuiltinSpecifiers.has(id);
153
+ }
154
+ /**
155
+ * Resolves Node builtins as external before Rolldown falls back to file resolution.
156
+ *
157
+ * @remarks
158
+ * Rolldown documents two first-class externalization points: its `external`
159
+ * option is checked before resolution, and a plugin `resolveId` hook can return
160
+ * `{ id, external: true }`. Core uses the latter to keep Node-builtin ownership
161
+ * explicit in the Node-target plugin pipeline.
162
+ *
163
+ * The hook runs before Rolldown's internal filesystem resolver, leaving imports
164
+ * such as `node:fs` intact for the Node runtime. It is installed only for
165
+ * Node-target builds, so browser bundles still surface accidental Node builtin
166
+ * imports as resolver failures.
167
+ *
168
+ * See {@link https://rolldown.rs/in-depth/external-modules | Rolldown external modules}.
169
+ */
170
+ export function createNodeBuiltinExternalPlugin() {
171
+ return {
172
+ name: 'ecopages-node-builtin-external',
173
+ resolveId(id) {
174
+ return isNodeBuiltinSpecifier(id) ? { id, external: true } : null;
175
+ },
176
+ };
177
+ }
178
+ /**
179
+ * Rejects Node builtins in browser-target builds before Rolldown externalizes them.
180
+ *
181
+ * @remarks
182
+ * With `platform: 'browser'`, Rolldown leaves `node:*` imports in the output as
183
+ * bare specifiers. This plugin fails the build instead so server-only graphs
184
+ * cannot reach the browser as silent CORS errors.
185
+ */
186
+ export function createBrowserNodeBuiltinGuardPlugin() {
187
+ return {
188
+ name: 'ecopages-browser-node-builtin-guard',
189
+ resolveId(id, importer) {
190
+ if (!isNodeBuiltinSpecifier(id)) {
191
+ return null;
192
+ }
193
+ const from = importer ? ` (imported from ${importer})` : '';
194
+ throw new Error(`[browser-build] Node builtin "${id}" cannot be bundled for the browser${from}. ` +
195
+ `Check package "browser" exports and the client-graph boundary for the importer.`);
196
+ },
197
+ };
198
+ }
199
+ function mapRolldownFormat(value) {
200
+ switch (value) {
201
+ case 'cjs':
202
+ return 'cjs';
203
+ case 'iife':
204
+ return 'iife';
205
+ default:
206
+ return 'esm';
207
+ }
208
+ }
209
+ function mapRolldownPlatform(value) {
210
+ if (value === 'browser')
211
+ return 'browser';
212
+ if (value === 'node')
213
+ return 'node';
214
+ if (value && /^(?:es\d+|chrome\d+|edge\d+|firefox\d+|safari\d+|hermes|deno\d+|ios\d+)$/.test(value)) {
215
+ return 'node';
216
+ }
217
+ return 'neutral';
218
+ }
219
+ function mapRolldownSourcemap(value) {
220
+ switch (value) {
221
+ case 'none':
222
+ return false;
223
+ case 'inline':
224
+ return 'inline';
225
+ case 'external':
226
+ case 'linked':
227
+ return 'hidden';
228
+ default:
229
+ return true;
230
+ }
231
+ }
232
+ function mapRolldownJsx(jsx) {
233
+ const { factory, fragment, ...rest } = jsx;
234
+ const out = { ...rest };
235
+ if (factory !== undefined) {
236
+ out.pragma = factory;
237
+ }
238
+ if (fragment !== undefined) {
239
+ out.pragmaFrag = fragment;
240
+ }
241
+ return out;
242
+ }
243
+ function toEntryFileNamesPattern(value) {
244
+ if (!value) {
245
+ return undefined;
246
+ }
247
+ const literal = !/\[[^\]]+\]/u.test(value);
248
+ const stripped = value.replaceAll(/\.?\[ext\]/g, '');
249
+ if (stripped.length === 0) {
250
+ return undefined;
251
+ }
252
+ return { pattern: stripped, literal };
253
+ }
254
+ function getJavaScriptOutExtension(options, literal) {
255
+ if (literal) {
256
+ return undefined;
257
+ }
258
+ if (options.target === 'browser') {
259
+ return '.js';
260
+ }
261
+ if (options.format === 'cjs') {
262
+ return '.cjs';
263
+ }
264
+ return '.mjs';
265
+ }
266
+ function normalizeOutputPath(outputPath, outdir) {
267
+ return path.isAbsolute(outputPath) ? path.normalize(outputPath) : path.normalize(path.join(outdir, outputPath));
268
+ }
269
+ function normalizeModulePath(modulePath, contextRoot) {
270
+ return path.isAbsolute(modulePath)
271
+ ? path.normalize(modulePath)
272
+ : path.normalize(path.resolve(contextRoot, modulePath));
273
+ }
274
+ export function extractDependencyGraph(chunks, contextRoot) {
275
+ const entrypoints = {};
276
+ for (const chunk of chunks) {
277
+ if (!chunk.facadeModuleId) {
278
+ continue;
279
+ }
280
+ const entrypointPath = normalizeModulePath(chunk.facadeModuleId, contextRoot);
281
+ entrypoints[entrypointPath] = Array.from(new Set([entrypointPath, ...chunk.moduleIds.map((id) => normalizeModulePath(id, contextRoot))]));
282
+ }
283
+ return { entrypoints };
284
+ }
285
+ export function toBuildLogs(error) {
286
+ if (error instanceof Error) {
287
+ return [{ message: error.message }];
288
+ }
289
+ return [{ message: 'Unknown build error' }];
290
+ }
291
+ /**
292
+ * Translates a {@link BuildOptions} into Rolldown's `InputOptions` and
293
+ * `OutputOptions`. Always sets `experimental.nativeMagicString: true`
294
+ * and always consolidates eco plugins via the bridge.
295
+ */
296
+ export function resolveRolldownOptions(options, contextRoot, outdir, appRootRequireCache) {
297
+ const rolldownPlatform = mapRolldownPlatform(options.target);
298
+ const external = createExternalMatcher(options, appRootRequireCache);
299
+ const transformOptions = {};
300
+ if (options.define) {
301
+ transformOptions.define = options.define;
302
+ }
303
+ if (options.jsx) {
304
+ transformOptions.jsx = mapRolldownJsx(options.jsx);
305
+ }
306
+ if (options.target && /^(?:es|chrome|edge|firefox|safari|hermes|deno|ios)/.test(options.target)) {
307
+ transformOptions.target = options.target;
308
+ }
309
+ const bundlePlugins = options.plugins ?? [];
310
+ const sourceTransforms = options.sourceTransforms ?? [];
311
+ const appPlugins = createRolldownPluginBridge(bundlePlugins, contextRoot, sourceTransforms);
312
+ const allPlugins = [
313
+ ...(rolldownPlatform === 'node' ? [createNodeBuiltinExternalPlugin()] : []),
314
+ ...(rolldownPlatform === 'browser' ? [createBrowserNodeBuiltinGuardPlugin()] : []),
315
+ ...(options.target !== 'browser' ? [createServerSideCssShimPlugin()] : []),
316
+ ...appPlugins,
317
+ ];
318
+ const inputOptions = {
319
+ input: options.entrypoints,
320
+ cwd: contextRoot,
321
+ external,
322
+ platform: mapRolldownPlatform(options.target),
323
+ transform: Object.keys(transformOptions).length > 0 ? transformOptions : undefined,
324
+ resolve: options.conditions ? { conditionNames: options.conditions } : undefined,
325
+ treeshake: typeof options.treeshaking === 'boolean' ? options.treeshaking : true,
326
+ ...(process.env.ECOPAGES_PROFILE_BUILD === '1'
327
+ ? {}
328
+ : {
329
+ checks: {
330
+ pluginTimings: false,
331
+ },
332
+ }),
333
+ experimental: {
334
+ nativeMagicString: true,
335
+ },
336
+ plugins: allPlugins,
337
+ };
338
+ const entryFileNames = toEntryFileNamesPattern(options.naming);
339
+ const jsExtension = getJavaScriptOutExtension(options, entryFileNames?.literal ?? false);
340
+ const finalEntryFileNames = entryFileNames
341
+ ? jsExtension
342
+ ? `${entryFileNames.pattern}${jsExtension}`
343
+ : entryFileNames.pattern
344
+ : jsExtension
345
+ ? `[name]${jsExtension}`
346
+ : '[name]';
347
+ const entrypointCount = Array.isArray(options.entrypoints)
348
+ ? options.entrypoints.length
349
+ : Object.keys(options.entrypoints).length;
350
+ const disableCodeSplitting = options.splitting === false && entrypointCount === 1;
351
+ const outputOptions = {
352
+ dir: outdir,
353
+ format: mapRolldownFormat(options.format),
354
+ minify: !!options.minify,
355
+ entryFileNames: finalEntryFileNames,
356
+ chunkFileNames: '[name]-[hash].js',
357
+ assetFileNames: '[name]-[hash][extname]',
358
+ sourcemap: mapRolldownSourcemap(options.sourcemap),
359
+ ...(disableCodeSplitting ? { codeSplitting: false } : {}),
360
+ };
361
+ return { inputOptions, outputOptions };
362
+ }
363
+ /**
364
+ * Rewrites manifest-owned runtime specifiers in emitted JS output
365
+ * files. Skips work when the specifier map is empty or when a
366
+ * `(specifierMap, path, content)` tuple was already seen.
367
+ *
368
+ * The content cache is module-level and is keyed on a djb2 hash of
369
+ * the input bytes plus a sorted fingerprint of the specifier map. A
370
+ * manifest change correctly invalidates prior entries; different
371
+ * content of the same length does not collide.
372
+ */
373
+ export function rewriteBrowserRuntimeImportsInOutputs(result, contextRoot, plugins) {
374
+ if (!result.success || result.outputs.length === 0) {
375
+ return result;
376
+ }
377
+ const specifierMap = collectBrowserRuntimeImportRewriteMap(plugins);
378
+ if (specifierMap.size === 0) {
379
+ return result;
380
+ }
381
+ const moduleRequireFromContext = createRequire(path.join(contextRoot, 'package.json'));
382
+ const fs = moduleRequireFromContext('node:fs');
383
+ const cacheFingerprint = `${Array.from(specifierMap.entries()).sort().join('|')}`;
384
+ for (const output of result.outputs) {
385
+ if (!/\.(?:[cm]?js)$/u.test(output.path)) {
386
+ continue;
387
+ }
388
+ const code = fs.readFileSync(output.path, 'utf-8');
389
+ const contentKey = `${cacheFingerprint}::${output.path}::${djb2(code)}`;
390
+ if (rewriteCache.has(contentKey)) {
391
+ continue;
392
+ }
393
+ const rewritten = rewriteBrowserRuntimeImports(code, specifierMap, output.path);
394
+ if (rewritten !== code) {
395
+ fs.writeFileSync(output.path, rewritten);
396
+ }
397
+ rememberRewrite(contentKey);
398
+ }
399
+ return result;
400
+ }
401
+ const REWRITE_CACHE_MAX_ENTRIES = 2048;
402
+ const rewriteCache = new Set();
403
+ /**
404
+ * @remarks
405
+ * Dev rebuilds hit the same output paths with stable specifier maps; memoizing
406
+ * skips re-reading and re-writing unchanged files. The cache is capped because
407
+ * a process-global set would otherwise grow for the lifetime of a watch session.
408
+ * Eviction uses insertion order as an approximate LRU.
409
+ */
410
+ function rememberRewrite(contentKey) {
411
+ rewriteCache.add(contentKey);
412
+ if (rewriteCache.size > REWRITE_CACHE_MAX_ENTRIES) {
413
+ const oldest = rewriteCache.values().next().value;
414
+ if (oldest !== undefined) {
415
+ rewriteCache.delete(oldest);
416
+ }
417
+ }
418
+ }
419
+ function djb2(input) {
420
+ let hash = 5381;
421
+ for (let i = 0; i < input.length; i++) {
422
+ hash = ((hash << 5) + hash + input.charCodeAt(i)) | 0;
423
+ }
424
+ return hash.toString(36);
425
+ }
426
+ /** Test-only: clears the rewriter content cache. */
427
+ export function clearRewriteCacheForTests() {
428
+ rewriteCache.clear();
429
+ }
430
+ /** Normalizes node-runtime import paths in emitted outputs. */
431
+ export function rewriteNodeRuntimeImportsInOutputs(result, contextRoot) {
432
+ if (!result.success || result.outputs.length === 0) {
433
+ return result;
434
+ }
435
+ normalizeNodeRuntimeBuildOutputs(result.outputs.map((output) => output.path), contextRoot);
436
+ return result;
437
+ }
438
+ /** Maps a Rolldown `output` to a normalized {@link BuildResult}. */
439
+ export function buildResultFromRolldownOutput(output, outdir, contextRoot) {
440
+ const outputs = output.output.map((entry) => ({
441
+ path: normalizeOutputPath(entry.fileName, outdir),
442
+ }));
443
+ const entryChunks = output.output.filter((entry) => entry.type === 'chunk' && entry.isEntry);
444
+ const dependencyGraph = entryChunks.length > 0 ? extractDependencyGraph(entryChunks, contextRoot) : undefined;
445
+ const entryOutputs = {};
446
+ for (const chunk of entryChunks) {
447
+ if (chunk.facadeModuleId) {
448
+ entryOutputs[normalizeModulePath(chunk.facadeModuleId, contextRoot)] = normalizeOutputPath(chunk.fileName, outdir);
449
+ }
450
+ }
451
+ return {
452
+ success: true,
453
+ logs: [],
454
+ outputs,
455
+ dependencyGraph,
456
+ entryOutputs: entryChunks.length > 0 ? entryOutputs : undefined,
457
+ };
458
+ }
@@ -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
+ }
@@ -0,0 +1,12 @@
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
+ export declare function isRolldownBuildMetricsEnabled(): boolean;
7
+ export declare function recordRolldownBuildInvocation(adapter?: 'rolldown'): void;
8
+ export declare function getRolldownBuildInvocationCounts(): Readonly<Record<string, number>>;
9
+ export declare function resetRolldownBuildInvocationCounts(): void;
10
+ export declare function recordPageModuleBuildInvocation(): void;
11
+ export declare function getPageModuleRolldownBuildInvocations(): number;
12
+ export declare function getTotalRolldownBuildInvocations(): number;
@@ -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,7 +40,8 @@
40
40
  * on every source file.
41
41
  */
42
42
  import type { Plugin } from 'rolldown';
43
- 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';
44
45
  /**
45
46
  * Creates a Rolldown `Plugin` array that drives the supplied
46
47
  * `EcoBuildPlugin` instances.
@@ -55,5 +56,18 @@ import type { EcoBuildPlugin } from './build-types.js';
55
56
  * Plugin ordering is preserved: registrations from earlier eco plugins
56
57
  * are checked before registrations from later ones, matching the
57
58
  * original per-plugin priority semantics.
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
+ *
65
+ * @param plugins - `EcoBuildPlugin` instances registered for this build.
66
+ * @param contextRoot - Project root used to resolve relative load paths.
67
+ * @param sourceTransforms - Optional app-owned transforms applied after a matching
68
+ * `onLoad` handler returns module contents. Browser builds pass
69
+ * {@link getAppSourceTransforms | app source transforms} here so metadata injection
70
+ * still runs on output rewritten by boundary/runtime plugins. Virtual modules,
71
+ * CSS, and asset loads are skipped.
58
72
  */
59
- export declare function createRolldownPluginBridge(plugins: EcoBuildPlugin[], contextRoot: string): Plugin[];
73
+ export declare function createRolldownPluginBridge(plugins: EcoBuildPlugin[], contextRoot: string, sourceTransforms?: readonly EcoSourceTransform[]): Plugin[];