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

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,58 @@
1
+ /**
2
+ * Server-side CSS shim plugin for the bundler adapter.
3
+ *
4
+ * @remarks
5
+ * Page modules imported by the server (so the framework can read
6
+ * `getStaticProps` / `staticPaths` / page metadata) commonly have
7
+ * `import './style.css'` at the top. The bundler does not bundle
8
+ * CSS, and the server only needs the JS exports — the CSS itself
9
+ * is delivered to the browser via the page's `dependencies.stylesheets`
10
+ * declarations. This plugin:
11
+ *
12
+ * - Resolves `.css` imports to the absolute on-disk path.
13
+ * - Loads them and returns an empty ESM module with
14
+ * `moduleSideEffects: true` so the bundler keeps the import in
15
+ * the dependency graph without trying to bundle the bytes.
16
+ *
17
+ * The plugin is added by the adapter on every server-side build.
18
+ * Browser-side builds that want real CSS bundling should keep using
19
+ * a dedicated CSS pipeline (e.g. the postcss processor's output)
20
+ * and continue to declare stylesheets in `dependencies.stylesheets`
21
+ * — the shim is intentionally inert for those flows.
22
+ */
23
+ import { existsSync, readFileSync } from 'node:fs';
24
+ import path from 'node:path';
25
+ const CSS_PATH = /\.css$/u;
26
+ const CSS_QUERY = '?ecopages-css-shim';
27
+ function stripShimQuery(id) {
28
+ const queryIndex = id.indexOf('?');
29
+ return queryIndex === -1 ? id : id.slice(0, queryIndex);
30
+ }
31
+ /**
32
+ * Builds a Rolldown plugin that turns `.css` imports into no-op ESM
33
+ * modules while preserving the dependency graph.
34
+ */
35
+ export function createServerSideCssShimPlugin() {
36
+ return {
37
+ name: 'ecopages:server-side-css-shim',
38
+ async resolveId(source, importer) {
39
+ if (!CSS_PATH.test(source)) {
40
+ return null;
41
+ }
42
+ const resolved = importer ? path.resolve(path.dirname(importer), source) : path.resolve(source);
43
+ return existsSync(resolved) ? `${resolved}${CSS_QUERY}` : null;
44
+ },
45
+ async load(id) {
46
+ if (!id.endsWith(CSS_QUERY)) {
47
+ return null;
48
+ }
49
+ const realPath = stripShimQuery(id);
50
+ readFileSync(realPath, 'utf-8');
51
+ return {
52
+ code: 'export default "";',
53
+ moduleType: 'js',
54
+ moduleSideEffects: true,
55
+ };
56
+ },
57
+ };
58
+ }
@@ -0,0 +1,7 @@
1
+ import type { BuildOptions } from '../build-adapter.js';
2
+ import type { BuildProfile } from './build-runtime.js';
3
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
4
+ /**
5
+ * Resolves shared Rolldown options for a build profile.
6
+ */
7
+ export declare function resolveBuildProfileOptions(profile: BuildProfile, appConfig: EcoPagesAppConfig, overrides?: Partial<BuildOptions>): Partial<BuildOptions>;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Resolves shared Rolldown options for a build profile.
3
+ */
4
+ export function resolveBuildProfileOptions(profile, appConfig, overrides = {}) {
5
+ const root = appConfig.rootDir;
6
+ switch (profile) {
7
+ case 'server-entry':
8
+ return {
9
+ root,
10
+ target: 'node',
11
+ format: 'esm',
12
+ sourcemap: 'none',
13
+ minify: false,
14
+ externalPackages: true,
15
+ ...overrides,
16
+ };
17
+ case 'route-module':
18
+ return {
19
+ root,
20
+ target: 'es2022',
21
+ format: 'esm',
22
+ sourcemap: 'none',
23
+ minify: false,
24
+ externalPackages: true,
25
+ ...overrides,
26
+ };
27
+ case 'browser-hmr':
28
+ return {
29
+ root,
30
+ target: 'browser',
31
+ format: 'esm',
32
+ sourcemap: 'none',
33
+ minify: false,
34
+ ...overrides,
35
+ };
36
+ }
37
+ }
@@ -0,0 +1,17 @@
1
+ import type { BuildOptions } from '../contracts/build-contracts.js';
2
+ /**
3
+ * Canonical identity for one complete {@link BuildOptions} request.
4
+ *
5
+ * @remarks
6
+ * Semantically unordered collections (`external`, `define` keys, array entrypoints)
7
+ * are sorted. Plugin, `conditions`, and source-transform order is preserved because
8
+ * Rolldown hook and `conditionNames` precedence depend on it.
9
+ *
10
+ * Deprecated / ignored adapter fields (`splitting`, `bundle`, `outbase`) still
11
+ * participate in the key so requests that differ only on those fields do not
12
+ * coalesce. Empty `conditions` / `define` / `external` normalize to the same
13
+ * sentinel as `undefined`.
14
+ */
15
+ export declare function createBuildRequestIdentity(options: BuildOptions): string;
16
+ /** @deprecated Use {@link createBuildRequestIdentity}. */
17
+ export declare const createBuildOptionsDedupeKey: typeof createBuildRequestIdentity;
@@ -0,0 +1,79 @@
1
+ import path from 'node:path';
2
+ import { createJsxCacheKey, createPluginCacheKey, createSourceTransformCacheKey } from '../cache/cache-keys.js';
3
+ function normalizeEntrypoints(entrypoints) {
4
+ if (Array.isArray(entrypoints)) {
5
+ return entrypoints
6
+ .map((entrypoint) => path.resolve(entrypoint))
7
+ .sort()
8
+ .join('|');
9
+ }
10
+ return Object.entries(entrypoints)
11
+ .sort(([left], [right]) => left.localeCompare(right))
12
+ .map(([key, value]) => `${key}:${path.resolve(value)}`)
13
+ .join('|');
14
+ }
15
+ /**
16
+ * Preserves list order for collections where Rolldown precedence depends on position.
17
+ */
18
+ function normalizeOrderedStringList(values, label) {
19
+ if (!values || values.length === 0) {
20
+ return `${label}:default`;
21
+ }
22
+ return `${label}:${values.join(',')}`;
23
+ }
24
+ /**
25
+ * Sorts unordered sets so equivalent membership produces one identity.
26
+ */
27
+ function normalizeUnorderedStringList(values, label) {
28
+ if (!values || values.length === 0) {
29
+ return `${label}:default`;
30
+ }
31
+ return `${label}:${[...values].sort().join(',')}`;
32
+ }
33
+ function normalizeDefine(define) {
34
+ if (!define || Object.keys(define).length === 0) {
35
+ return 'define:default';
36
+ }
37
+ return `define:${Object.entries(define)
38
+ .sort(([left], [right]) => left.localeCompare(right))
39
+ .map(([key, value]) => `${key}=${value}`)
40
+ .join(',')}`;
41
+ }
42
+ /**
43
+ * Canonical identity for one complete {@link BuildOptions} request.
44
+ *
45
+ * @remarks
46
+ * Semantically unordered collections (`external`, `define` keys, array entrypoints)
47
+ * are sorted. Plugin, `conditions`, and source-transform order is preserved because
48
+ * Rolldown hook and `conditionNames` precedence depend on it.
49
+ *
50
+ * Deprecated / ignored adapter fields (`splitting`, `bundle`, `outbase`) still
51
+ * participate in the key so requests that differ only on those fields do not
52
+ * coalesce. Empty `conditions` / `define` / `external` normalize to the same
53
+ * sentinel as `undefined`.
54
+ */
55
+ export function createBuildRequestIdentity(options) {
56
+ return [
57
+ normalizeEntrypoints(options.entrypoints),
58
+ options.root ? path.resolve(options.root) : 'root:default',
59
+ options.outdir ? path.resolve(options.outdir) : 'outdir:default',
60
+ options.outbase ? path.resolve(options.outbase) : 'outbase:default',
61
+ options.splitting ?? 'splitting:default',
62
+ options.bundle ?? 'bundle:default',
63
+ options.externalPackages ?? 'externalPackages:default',
64
+ options.target ?? 'target:default',
65
+ options.format ?? 'format:default',
66
+ options.sourcemap ?? 'sourcemap:default',
67
+ options.minify ?? 'minify:default',
68
+ options.treeshaking ?? 'treeshaking:default',
69
+ options.naming ?? 'naming:default',
70
+ normalizeOrderedStringList(options.conditions, 'conditions'),
71
+ normalizeDefine(options.define),
72
+ normalizeUnorderedStringList(options.external, 'external'),
73
+ createJsxCacheKey(options.jsx),
74
+ createPluginCacheKey(options.plugins),
75
+ createSourceTransformCacheKey(options.sourceTransforms),
76
+ ].join('::');
77
+ }
78
+ /** @deprecated Use {@link createBuildRequestIdentity}. */
79
+ export const createBuildOptionsDedupeKey = createBuildRequestIdentity;
@@ -0,0 +1,58 @@
1
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
2
+ import type { EcoBuildPlugin } from '../contracts/build-types.js';
3
+ import type { BuildOptions, BuildTranspileProfile } from '../contracts/build-contracts.js';
4
+ import type { BuildProfile } from './build-runtime.js';
5
+ /**
6
+ * Resolves app-owned server plugins plus JSX ownership for one config.
7
+ *
8
+ * @remarks
9
+ * Always goes through {@link getAppServerBuildPlugins} so sealed-manifest and
10
+ * source-transform apps share one plugin list with the alias resolver. Used by
11
+ * both request assembly and unified-graph cache keys.
12
+ */
13
+ export declare function resolveServerAppBuildPlugins(appConfig: EcoPagesAppConfig): EcoBuildPlugin[];
14
+ /**
15
+ * Merges caller plugins with app-owned manifest plugins.
16
+ *
17
+ * @remarks
18
+ * App-manifest plugins cannot be silently replaced by same-name caller plugins.
19
+ * Unique caller plugins are prepended so first-wins Rolldown hooks (for example
20
+ * React vendor/alias rewrites) still run before general app loaders. Use
21
+ * `excludeAppBuildPlugins` on browser requests to omit app-owned plugins.
22
+ */
23
+ export declare function mergeCallerBuildPlugins(appPlugins: EcoBuildPlugin[], callerPlugins?: EcoBuildPlugin[]): EcoBuildPlugin[];
24
+ export type ServerBuildRequestInput = Partial<BuildOptions> & {
25
+ entrypoints: BuildOptions['entrypoints'];
26
+ profile?: Extract<BuildProfile, 'server-entry' | 'route-module'>;
27
+ };
28
+ export type BrowserBuildRequestInput = Partial<BuildOptions> & {
29
+ entrypoints: BuildOptions['entrypoints'];
30
+ profile: BuildTranspileProfile;
31
+ excludeAppBuildPlugins?: string[];
32
+ };
33
+ /**
34
+ * Assembles a complete server-oriented {@link BuildOptions} before scheduling.
35
+ *
36
+ * @remarks
37
+ * Defaults `profile` to `'route-module'`. Plugins are
38
+ * {@link resolveServerAppBuildPlugins} plus unique caller contributions via
39
+ * {@link mergeCallerBuildPlugins}. Source transforms are applied on every
40
+ * compilation target, so server module loading shares browser attribution.
41
+ */
42
+ export declare function createServerBuildRequest(appConfig: EcoPagesAppConfig, input: ServerBuildRequestInput): BuildOptions;
43
+ /**
44
+ * Assembles a complete browser-oriented {@link BuildOptions} before scheduling.
45
+ *
46
+ * @remarks
47
+ * Applies {@link resolveBuildProfileOptions} for `'browser-hmr'` (browser target
48
+ * defaults), then overlays {@link getAppTranspileOptions} for the given
49
+ * {@link BuildTranspileProfile}. That profile selects transpile settings only;
50
+ * the {@link BuildRuntime} executor slot is chosen later by the caller
51
+ * (typically {@link BrowserBundleService}).
52
+ *
53
+ * Always attaches {@link getAppSourceTransforms}. App browser plugins come from
54
+ * {@link getAppBrowserBuildPlugins} (includes JSX ownership); use
55
+ * `excludeAppBuildPlugins` to omit app-owned names. Caller plugins cannot
56
+ * replace app-manifest names ({@link mergeCallerBuildPlugins}).
57
+ */
58
+ export declare function createBrowserBuildRequest(appConfig: EcoPagesAppConfig, input: BrowserBuildRequestInput): BuildOptions;
@@ -0,0 +1,84 @@
1
+ import { getAppBrowserBuildPlugins, getAppServerBuildPlugins, getAppTranspileOptions } from '../build-adapter.js';
2
+ import { resolveBuildProfileOptions } from './build-profile-options.js';
3
+ import { getJsxOwnershipPlugins } from '../browser/jsx-ownership-plugins.js';
4
+ import { getAppSourceTransforms } from '../../plugins/source-transform.js';
5
+ /**
6
+ * Resolves app-owned server plugins plus JSX ownership for one config.
7
+ *
8
+ * @remarks
9
+ * Always goes through {@link getAppServerBuildPlugins} so sealed-manifest and
10
+ * source-transform apps share one plugin list with the alias resolver. Used by
11
+ * both request assembly and unified-graph cache keys.
12
+ */
13
+ export function resolveServerAppBuildPlugins(appConfig) {
14
+ return [...getAppServerBuildPlugins(appConfig), ...getJsxOwnershipPlugins(appConfig)];
15
+ }
16
+ /**
17
+ * Merges caller plugins with app-owned manifest plugins.
18
+ *
19
+ * @remarks
20
+ * App-manifest plugins cannot be silently replaced by same-name caller plugins.
21
+ * Unique caller plugins are prepended so first-wins Rolldown hooks (for example
22
+ * React vendor/alias rewrites) still run before general app loaders. Use
23
+ * `excludeAppBuildPlugins` on browser requests to omit app-owned plugins.
24
+ */
25
+ export function mergeCallerBuildPlugins(appPlugins, callerPlugins) {
26
+ if (!callerPlugins || callerPlugins.length === 0) {
27
+ return appPlugins;
28
+ }
29
+ const appByName = new Map(appPlugins.map((plugin) => [plugin.name, plugin]));
30
+ const uniqueCallerPlugins = callerPlugins.filter((plugin) => !appByName.has(plugin.name));
31
+ return [...uniqueCallerPlugins, ...appPlugins];
32
+ }
33
+ /**
34
+ * Assembles a complete server-oriented {@link BuildOptions} before scheduling.
35
+ *
36
+ * @remarks
37
+ * Defaults `profile` to `'route-module'`. Plugins are
38
+ * {@link resolveServerAppBuildPlugins} plus unique caller contributions via
39
+ * {@link mergeCallerBuildPlugins}. Source transforms are applied on every
40
+ * compilation target, so server module loading shares browser attribution.
41
+ */
42
+ export function createServerBuildRequest(appConfig, input) {
43
+ const profile = input.profile ?? 'route-module';
44
+ const plugins = mergeCallerBuildPlugins(resolveServerAppBuildPlugins(appConfig), input.plugins);
45
+ const { plugins: _callerPlugins, profile: _profile, ...overrides } = input;
46
+ return {
47
+ ...resolveBuildProfileOptions(profile, appConfig, overrides),
48
+ ...overrides,
49
+ entrypoints: input.entrypoints,
50
+ ...(plugins.length > 0 ? { plugins } : {}),
51
+ sourceTransforms: getAppSourceTransforms(appConfig),
52
+ };
53
+ }
54
+ /**
55
+ * Assembles a complete browser-oriented {@link BuildOptions} before scheduling.
56
+ *
57
+ * @remarks
58
+ * Applies {@link resolveBuildProfileOptions} for `'browser-hmr'` (browser target
59
+ * defaults), then overlays {@link getAppTranspileOptions} for the given
60
+ * {@link BuildTranspileProfile}. That profile selects transpile settings only;
61
+ * the {@link BuildRuntime} executor slot is chosen later by the caller
62
+ * (typically {@link BrowserBundleService}).
63
+ *
64
+ * Always attaches {@link getAppSourceTransforms}. App browser plugins come from
65
+ * {@link getAppBrowserBuildPlugins} (includes JSX ownership); use
66
+ * `excludeAppBuildPlugins` to omit app-owned names. Caller plugins cannot
67
+ * replace app-manifest names ({@link mergeCallerBuildPlugins}).
68
+ */
69
+ export function createBrowserBuildRequest(appConfig, input) {
70
+ const { profile, excludeAppBuildPlugins, plugins: callerPlugins, ...overrides } = input;
71
+ const appBrowserPlugins = getAppBrowserBuildPlugins(appConfig);
72
+ const filteredAppBrowserPlugins = excludeAppBuildPlugins && excludeAppBuildPlugins.length > 0
73
+ ? appBrowserPlugins.filter((plugin) => !excludeAppBuildPlugins.includes(plugin.name))
74
+ : appBrowserPlugins;
75
+ const plugins = mergeCallerBuildPlugins(filteredAppBrowserPlugins, callerPlugins);
76
+ return {
77
+ ...resolveBuildProfileOptions('browser-hmr', appConfig, overrides),
78
+ ...getAppTranspileOptions(appConfig, profile),
79
+ ...overrides,
80
+ entrypoints: input.entrypoints,
81
+ plugins,
82
+ sourceTransforms: getAppSourceTransforms(appConfig),
83
+ };
84
+ }
@@ -0,0 +1,28 @@
1
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
2
+ import { type BuildExecutor } from '../build-adapter.js';
3
+ export type BuildProfile = 'server-entry' | 'route-module' | 'browser-hmr';
4
+ export interface BuildRuntime {
5
+ getProfile(profile: BuildProfile): BuildExecutor;
6
+ dispose(): Promise<void>;
7
+ }
8
+ export declare function getBuildRuntime(appConfig: EcoPagesAppConfig): BuildRuntime | undefined;
9
+ /**
10
+ * Returns the installed build runtime, installing it when missing.
11
+ */
12
+ export declare function requireBuildRuntime(appConfig: EcoPagesAppConfig): BuildRuntime;
13
+ /**
14
+ * Installs profile-based build executors for one app instance.
15
+ *
16
+ * @remarks
17
+ * For Rolldown ownership, server-entry stays serialized single-flight while
18
+ * route-module and browser-HMR run in parallel one-shot builds. Vite-host
19
+ * profiles wrap a boundary marker and reject framework-owned build attempts.
20
+ * Profiles do not inject app plugins — assemble complete
21
+ * {@link BuildOptions} with {@link createServerBuildRequest} /
22
+ * {@link createBrowserBuildRequest} (or {@link BrowserBundleService}) first.
23
+ */
24
+ export declare function installBuildRuntime(appConfig: EcoPagesAppConfig): BuildRuntime;
25
+ /**
26
+ * No-op retained for server teardown call sites.
27
+ */
28
+ export declare function disposeAppBuildRuntime(appConfig: EcoPagesAppConfig): Promise<void>;
@@ -0,0 +1,75 @@
1
+ import { availableParallelism } from 'node:os';
2
+ import { getAppBuildAdapter } from '../build-adapter.js';
3
+ import { ParallelBuildExecutor } from './parallel-build-executor.js';
4
+ import { DedupingBuildExecutor } from './deduping-build-executor.js';
5
+ import { SerializedBuildExecutor } from './serialized-build-executor.js';
6
+ function resolveParallelismLimit() {
7
+ return Math.max(1, availableParallelism() - 1);
8
+ }
9
+ function patchAppRuntime(appConfig, patch) {
10
+ appConfig.runtime = {
11
+ ...(appConfig.runtime ?? {}),
12
+ ...patch,
13
+ };
14
+ }
15
+ class AppBuildRuntime {
16
+ serverEntryExecutor;
17
+ routeModuleExecutor;
18
+ hmrExecutor;
19
+ constructor(appConfig) {
20
+ const adapter = getAppBuildAdapter(appConfig);
21
+ const limit = resolveParallelismLimit();
22
+ this.serverEntryExecutor = new SerializedBuildExecutor(adapter);
23
+ this.routeModuleExecutor = new DedupingBuildExecutor(new ParallelBuildExecutor(adapter, limit));
24
+ this.hmrExecutor = new DedupingBuildExecutor(new ParallelBuildExecutor(adapter, Math.min(3, limit)));
25
+ }
26
+ getProfile(profile) {
27
+ switch (profile) {
28
+ case 'server-entry':
29
+ return this.serverEntryExecutor;
30
+ case 'route-module':
31
+ return this.routeModuleExecutor;
32
+ case 'browser-hmr':
33
+ return this.hmrExecutor;
34
+ }
35
+ }
36
+ /**
37
+ * No-op for profile teardown.
38
+ *
39
+ * @remarks
40
+ * Rolldown-owned profiles use one-shot builds, and Vite-host profiles only
41
+ * wrap a boundary marker. Neither owns a long-lived engine to close.
42
+ */
43
+ async dispose() { }
44
+ }
45
+ export function getBuildRuntime(appConfig) {
46
+ return appConfig.runtime?.buildRuntime;
47
+ }
48
+ /**
49
+ * Returns the installed build runtime, installing it when missing.
50
+ */
51
+ export function requireBuildRuntime(appConfig) {
52
+ return getBuildRuntime(appConfig) ?? installBuildRuntime(appConfig);
53
+ }
54
+ /**
55
+ * Installs profile-based build executors for one app instance.
56
+ *
57
+ * @remarks
58
+ * For Rolldown ownership, server-entry stays serialized single-flight while
59
+ * route-module and browser-HMR run in parallel one-shot builds. Vite-host
60
+ * profiles wrap a boundary marker and reject framework-owned build attempts.
61
+ * Profiles do not inject app plugins — assemble complete
62
+ * {@link BuildOptions} with {@link createServerBuildRequest} /
63
+ * {@link createBrowserBuildRequest} (or {@link BrowserBundleService}) first.
64
+ */
65
+ export function installBuildRuntime(appConfig) {
66
+ const buildRuntime = new AppBuildRuntime(appConfig);
67
+ patchAppRuntime(appConfig, { buildRuntime });
68
+ return buildRuntime;
69
+ }
70
+ /**
71
+ * No-op retained for server teardown call sites.
72
+ */
73
+ export async function disposeAppBuildRuntime(appConfig) {
74
+ await getBuildRuntime(appConfig)?.dispose();
75
+ }
@@ -0,0 +1,21 @@
1
+ import type { BuildExecutor, BuildOptions, BuildResult } from '../build-adapter.js';
2
+ export { createBuildRequestIdentity, createBuildOptionsDedupeKey } from './build-request-identity.js';
3
+ /**
4
+ * In-flight build coalescing wrapper.
5
+ *
6
+ * @remarks
7
+ * `ParallelBuildExecutor` allows concurrent builds but does not dedupe identical
8
+ * options. Multiple callers (route import, browser bundles, HMR) can hit the
9
+ * same Rolldown request before disk or import caches warm. This wrapper shares
10
+ * one inner `build()` promise per dedupe key until it settles.
11
+ *
12
+ * Wrap route-module and browser-hmr profiles only; server-entry stays serialized.
13
+ */
14
+ export declare class DedupingBuildExecutor implements BuildExecutor {
15
+ private readonly inner;
16
+ private readonly inFlight;
17
+ constructor(inner: BuildExecutor);
18
+ build(options: BuildOptions): Promise<BuildResult>;
19
+ unwrap(): BuildExecutor;
20
+ getInFlightCountForTests(): number;
21
+ }
@@ -0,0 +1,40 @@
1
+ import { createBuildRequestIdentity } from './build-request-identity.js';
2
+ export { createBuildRequestIdentity, createBuildOptionsDedupeKey } from './build-request-identity.js';
3
+ /**
4
+ * In-flight build coalescing wrapper.
5
+ *
6
+ * @remarks
7
+ * `ParallelBuildExecutor` allows concurrent builds but does not dedupe identical
8
+ * options. Multiple callers (route import, browser bundles, HMR) can hit the
9
+ * same Rolldown request before disk or import caches warm. This wrapper shares
10
+ * one inner `build()` promise per dedupe key until it settles.
11
+ *
12
+ * Wrap route-module and browser-hmr profiles only; server-entry stays serialized.
13
+ */
14
+ export class DedupingBuildExecutor {
15
+ inner;
16
+ inFlight = new Map();
17
+ constructor(inner) {
18
+ this.inner = inner;
19
+ }
20
+ build(options) {
21
+ const key = createBuildRequestIdentity(options);
22
+ const existing = this.inFlight.get(key);
23
+ if (existing) {
24
+ return existing;
25
+ }
26
+ const buildPromise = this.inner.build(options).finally(() => {
27
+ if (this.inFlight.get(key) === buildPromise) {
28
+ this.inFlight.delete(key);
29
+ }
30
+ });
31
+ this.inFlight.set(key, buildPromise);
32
+ return buildPromise;
33
+ }
34
+ unwrap() {
35
+ return this.inner;
36
+ }
37
+ getInFlightCountForTests() {
38
+ return this.inFlight.size;
39
+ }
40
+ }
@@ -0,0 +1,21 @@
1
+ import type { BuildExecutor, BuildOptions, BuildResult } from '../build-adapter.js';
2
+ /**
3
+ * Concurrency-limited build executor wrapper.
4
+ *
5
+ * @remarks
6
+ * Runs up to `limit` builds concurrently. Use for independent route-module
7
+ * and HMR browser builds where FIFO serialization is unnecessary.
8
+ */
9
+ export declare class ParallelBuildExecutor implements BuildExecutor {
10
+ private readonly inner;
11
+ private readonly limit;
12
+ private activeCount;
13
+ private queue;
14
+ constructor(inner: BuildExecutor, limit: number);
15
+ build(options: BuildOptions): Promise<BuildResult>;
16
+ private drainQueue;
17
+ unwrap(): BuildExecutor;
18
+ getConcurrencyLimitForTests(): number;
19
+ getActiveCountForTests(): number;
20
+ getQueuedCountForTests(): number;
21
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Concurrency-limited build executor wrapper.
3
+ *
4
+ * @remarks
5
+ * Runs up to `limit` builds concurrently. Use for independent route-module
6
+ * and HMR browser builds where FIFO serialization is unnecessary.
7
+ */
8
+ export class ParallelBuildExecutor {
9
+ inner;
10
+ limit;
11
+ activeCount = 0;
12
+ queue = [];
13
+ constructor(inner, limit) {
14
+ this.inner = inner;
15
+ this.limit = Math.max(1, limit);
16
+ }
17
+ build(options) {
18
+ return new Promise((resolve, reject) => {
19
+ this.queue.push({
20
+ operation: () => this.inner.build(options),
21
+ resolve,
22
+ reject,
23
+ });
24
+ this.drainQueue();
25
+ });
26
+ }
27
+ drainQueue() {
28
+ while (this.activeCount < this.limit && this.queue.length > 0) {
29
+ const next = this.queue.shift();
30
+ if (!next) {
31
+ return;
32
+ }
33
+ this.activeCount += 1;
34
+ void next
35
+ .operation()
36
+ .then((result) => {
37
+ next.resolve(result);
38
+ })
39
+ .catch((error) => {
40
+ next.reject(error);
41
+ })
42
+ .finally(() => {
43
+ this.activeCount -= 1;
44
+ this.drainQueue();
45
+ });
46
+ }
47
+ }
48
+ unwrap() {
49
+ return this.inner;
50
+ }
51
+ getConcurrencyLimitForTests() {
52
+ return this.limit;
53
+ }
54
+ getActiveCountForTests() {
55
+ return this.activeCount;
56
+ }
57
+ getQueuedCountForTests() {
58
+ return this.queue.length;
59
+ }
60
+ }
@@ -1,4 +1,4 @@
1
- import type { BuildExecutor, BuildOptions, BuildResult } from './build-adapter.js';
1
+ import type { BuildExecutor, BuildOptions, BuildResult } from '../build-adapter.js';
2
2
  /**
3
3
  * FIFO-serialized build executor wrapper.
4
4
  *