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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) hide show
  1. package/README.md +42 -13
  2. package/package.json +361 -58
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +57 -5
  5. package/src/adapters/abstract/application-adapter.js +261 -203
  6. package/src/adapters/abstract/router-adapter.js +12 -4
  7. package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
  8. package/src/adapters/abstract/segment-path-matcher.js +147 -0
  9. package/src/adapters/abstract/server-adapter.d.ts +13 -2
  10. package/src/adapters/abstract/server-adapter.js +22 -14
  11. package/src/adapters/abstract/ws-pattern-matcher.d.ts +2 -50
  12. package/src/adapters/abstract/ws-pattern-matcher.js +24 -57
  13. package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
  14. package/src/adapters/bun/client-bridge.js +51 -50
  15. package/src/adapters/bun/create-app.d.ts +4 -6
  16. package/src/adapters/bun/create-app.js +169 -154
  17. package/src/adapters/bun/hmr-manager.d.ts +2 -3
  18. package/src/adapters/bun/hmr-manager.js +62 -57
  19. package/src/adapters/bun/index.d.ts +1 -1
  20. package/src/adapters/bun/index.js +2 -8
  21. package/src/adapters/bun/runtime-host.d.ts +1 -1
  22. package/src/adapters/bun/runtime-host.js +61 -54
  23. package/src/adapters/bun/server-adapter.d.ts +34 -53
  24. package/src/adapters/bun/server-adapter.js +557 -637
  25. package/src/adapters/bun/static-preview-host.d.ts +1 -1
  26. package/src/adapters/bun/static-preview-host.js +43 -41
  27. package/src/adapters/create-app.d.ts +1 -12
  28. package/src/adapters/create-app.js +11 -72
  29. package/src/adapters/index.d.ts +2 -2
  30. package/src/adapters/index.js +2 -8
  31. package/src/adapters/node/create-app.d.ts +4 -3
  32. package/src/adapters/node/create-app.js +123 -98
  33. package/src/adapters/node/http-request-bridge.js +147 -106
  34. package/src/adapters/node/node-client-bridge.js +62 -64
  35. package/src/adapters/node/node-hmr-manager.d.ts +2 -3
  36. package/src/adapters/node/node-hmr-manager.js +58 -48
  37. package/src/adapters/node/runtime-host.d.ts +1 -1
  38. package/src/adapters/node/runtime-host.js +96 -89
  39. package/src/adapters/node/server-adapter-dependencies.js +18 -17
  40. package/src/adapters/node/server-adapter.d.ts +28 -8
  41. package/src/adapters/node/server-adapter.js +349 -302
  42. package/src/adapters/node/static-content-server.js +172 -186
  43. package/src/adapters/node/static-preview-host.d.ts +1 -1
  44. package/src/adapters/node/static-preview-host.js +88 -64
  45. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  46. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  47. package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
  48. package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
  49. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
  50. package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
  51. package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
  52. package/src/adapters/shared/http/api-request-pipeline.js +132 -0
  53. package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
  54. package/src/adapters/shared/http/api-response.js +79 -0
  55. package/src/adapters/shared/http/create-body-response.d.ts +12 -0
  56. package/src/adapters/shared/http/create-body-response.js +26 -0
  57. package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
  58. package/src/adapters/shared/http/define-api-handler.js +49 -0
  59. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  60. package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
  61. package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
  62. package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
  63. package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
  64. package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
  65. package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
  66. package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
  67. package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
  68. package/src/adapters/shared/http/fs-server-response-matcher.js +260 -0
  69. package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
  70. package/src/adapters/shared/http/run-middleware-chain.js +17 -0
  71. package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
  72. package/src/adapters/shared/runtime/application-adapter.js +75 -0
  73. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
  74. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
  75. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
  76. package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
  77. package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
  78. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  79. package/src/adapters/shared/runtime/port-manager.js +226 -0
  80. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  81. package/src/adapters/shared/runtime/render-context.js +99 -0
  82. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -2
  83. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
  84. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
  85. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
  86. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
  87. package/src/adapters/shared/runtime/server-adapter.js +301 -0
  88. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  89. package/src/adapters/shared/runtime/server-route-handler.js +77 -0
  90. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +26 -31
  91. package/src/adapters/shared/runtime/server-static-builder.js +172 -0
  92. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  93. package/src/adapters/shared/{node-http-websocket-upgrades.d.ts → ws/node-http-websocket-upgrades.d.ts} +1 -1
  94. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
  95. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  96. package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
  97. package/src/build/README.md +165 -45
  98. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  99. package/src/build/app-build-manifest-runtime.js +145 -0
  100. package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +4 -0
  101. package/src/build/browser/browser-runtime-manifest.js +65 -0
  102. package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +3 -5
  103. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -0
  104. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +12 -13
  105. package/src/build/browser/browser-runtime-plugin.js +218 -0
  106. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  107. package/src/build/browser/jsx-ownership-plugins.js +55 -0
  108. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  109. package/src/build/browser/lit-static-render-worker-context.js +4 -0
  110. package/src/build/build-adapter.d.ts +29 -340
  111. package/src/build/build-adapter.js +258 -260
  112. package/src/build/{build-input-fingerprint.d.ts → cache/build-input-fingerprint.d.ts} +3 -3
  113. package/src/build/cache/build-input-fingerprint.js +33 -0
  114. package/src/build/cache/cache-constants.d.ts +4 -0
  115. package/src/build/cache/cache-constants.js +4 -0
  116. package/src/build/cache/cache-keys.d.ts +22 -0
  117. package/src/build/cache/cache-keys.js +71 -0
  118. package/src/build/{pages-unified-graph-build.d.ts → cache/pages-unified-graph-build.d.ts} +1 -1
  119. package/src/build/cache/pages-unified-graph-build.js +199 -0
  120. package/src/build/cache/production-build-cache.d.ts +21 -0
  121. package/src/build/cache/production-build-cache.js +56 -0
  122. package/src/build/{server-entry-build-cache.d.ts → cache/server-entry-build-cache.d.ts} +3 -4
  123. package/src/build/cache/server-entry-build-cache.js +153 -0
  124. package/src/build/contracts/build-contracts.d.ts +96 -0
  125. package/src/build/contracts/build-contracts.js +1 -0
  126. package/src/build/contracts/build-manifest.d.ts +90 -0
  127. package/src/build/contracts/build-manifest.js +64 -0
  128. package/src/build/contracts/build-types.js +1 -0
  129. package/src/build/contracts/content-virtual-modules.d.ts +12 -0
  130. package/src/build/contracts/content-virtual-modules.js +29 -0
  131. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
  132. package/src/build/rolldown/rolldown-adapter-helpers.js +463 -0
  133. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  134. package/src/build/rolldown/rolldown-build-adapter.js +57 -0
  135. package/src/build/{rolldown-build-invocation-metrics.d.ts → rolldown/rolldown-build-invocation-metrics.d.ts} +1 -1
  136. package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
  137. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
  138. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  139. package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
  140. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  141. package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
  142. package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
  143. package/src/build/runtime/build-profile-options.d.ts +7 -0
  144. package/src/build/runtime/build-profile-options.js +37 -0
  145. package/src/build/runtime/build-request-identity.d.ts +17 -0
  146. package/src/build/runtime/build-request-identity.js +79 -0
  147. package/src/build/runtime/build-request-policy.d.ts +58 -0
  148. package/src/build/runtime/build-request-policy.js +84 -0
  149. package/src/build/runtime/build-runtime.d.ts +28 -0
  150. package/src/build/runtime/build-runtime.js +75 -0
  151. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  152. package/src/build/runtime/deduping-build-executor.js +40 -0
  153. package/src/build/{parallel-build-executor.d.ts → runtime/parallel-build-executor.d.ts} +1 -1
  154. package/src/build/runtime/parallel-build-executor.js +60 -0
  155. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  156. package/src/build/runtime/serialized-build-executor.js +79 -0
  157. package/src/cache/index.d.ts +2 -1
  158. package/src/cache/index.js +7 -6
  159. package/src/cache/module-parse-cache.d.ts +5 -0
  160. package/src/cache/module-parse-cache.js +122 -67
  161. package/src/cache/module-transform-profiler.d.ts +8 -0
  162. package/src/cache/module-transform-profiler.js +8 -0
  163. package/src/client/navigation-scripts/classification.d.ts +16 -0
  164. package/src/client/navigation-scripts/classification.js +49 -0
  165. package/src/client/navigation-scripts/index.d.ts +3 -0
  166. package/src/client/navigation-scripts/index.js +3 -0
  167. package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
  168. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
  169. package/src/client/navigation-scripts/registry.d.ts +11 -0
  170. package/src/client/navigation-scripts/registry.js +16 -0
  171. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  172. package/src/client/navigation-scripts/rerun-queue.js +90 -0
  173. package/src/client/scroll.d.ts +17 -0
  174. package/src/client/scroll.js +33 -0
  175. package/src/client/scroll.test.browser.d.ts +1 -0
  176. package/src/client/scroll.test.browser.js +31 -0
  177. package/src/client/view-transitions.d.ts +32 -0
  178. package/src/client/view-transitions.js +120 -0
  179. package/src/client/view-transitions.test.browser.d.ts +1 -0
  180. package/src/client/view-transitions.test.browser.js +56 -0
  181. package/src/config/README.md +1 -1
  182. package/src/config/config-builder.d.ts +42 -12
  183. package/src/config/config-builder.js +645 -600
  184. package/src/config/constants.d.ts +1 -0
  185. package/src/config/constants.js +44 -23
  186. package/src/declarations.d.ts +1 -0
  187. package/src/dev/README.md +24 -0
  188. package/src/dev/client-bridge-registry.d.ts +5 -0
  189. package/src/dev/client-bridge-registry.js +10 -0
  190. package/src/dev/dev-client-ownership.d.ts +7 -0
  191. package/src/dev/dev-client-ownership.js +8 -0
  192. package/src/dev/hmr-manager-registry.d.ts +8 -0
  193. package/src/dev/hmr-manager-registry.js +10 -0
  194. package/src/dev/host-runtime.d.ts +3 -0
  195. package/src/dev/host-runtime.js +25 -23
  196. package/src/dev/runtime-server-started-message.d.ts +2 -0
  197. package/src/dev/runtime-server-started-message.js +3 -0
  198. package/src/dev/sc-server.js +106 -103
  199. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  200. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  201. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  202. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  203. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  204. package/src/dev/transform-server/dev-transform-import-rewriter.js +127 -0
  205. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  206. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  207. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  208. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  209. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  210. package/src/dev/transform-server/dev-transform-server.js +191 -0
  211. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  212. package/src/dev/transform-server/dev-transform-url.js +58 -0
  213. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
  214. package/src/dev/transform-server/dev-transform-vendor-registry.js +166 -0
  215. package/src/dev/transform-server/index.d.ts +6 -0
  216. package/src/dev/transform-server/index.js +4 -0
  217. package/src/dev/transform-server/types.d.ts +15 -0
  218. package/src/dev/transform-server/types.js +1 -0
  219. package/src/dev-toolbar/README.md +52 -0
  220. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  221. package/src/dev-toolbar/define-dev-tool.js +9 -0
  222. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  223. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  224. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  225. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  226. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  227. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  228. package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
  229. package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
  230. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  231. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  232. package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
  233. package/src/dev-toolbar/dev-toolbar-package.js +78 -0
  234. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  235. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  236. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  237. package/src/diagnostics/request-build-dedupe.js +39 -0
  238. package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
  239. package/src/diagnostics/request-pipeline-metrics.js +121 -0
  240. package/src/diagnostics/startup-trace.d.ts +81 -0
  241. package/src/diagnostics/startup-trace.js +281 -0
  242. package/src/eco/README.md +17 -0
  243. package/src/eco/component-identity.d.ts +13 -0
  244. package/src/eco/component-identity.js +18 -0
  245. package/src/eco/eco-declared-component.d.ts +15 -0
  246. package/src/eco/eco-declared-component.js +23 -0
  247. package/src/eco/eco.browser.js +63 -70
  248. package/src/eco/eco.js +163 -97
  249. package/src/eco/eco.types.d.ts +47 -8
  250. package/src/eco/eco.types.js +5 -0
  251. package/src/eco/eco.utils.d.ts +1 -1
  252. package/src/eco/eco.utils.js +1 -10
  253. package/src/eco/global-injector-map.js +55 -41
  254. package/src/eco/lazy-injector-map.js +90 -60
  255. package/src/eco/module-dependencies.js +52 -44
  256. package/src/eco/page-layout-normalization.d.ts +21 -0
  257. package/src/eco/page-layout-normalization.js +69 -0
  258. package/src/env.d.ts +2 -0
  259. package/src/errors/http-error.d.ts +8 -0
  260. package/src/errors/http-error.js +66 -49
  261. package/src/errors/index.d.ts +1 -0
  262. package/src/errors/index.js +3 -6
  263. package/src/errors/locals-access-error.js +5 -8
  264. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  265. package/src/errors/undeclared-component-dependency-error.js +17 -0
  266. package/src/global/app-logger.js +3 -6
  267. package/src/hmr/README.md +21 -0
  268. package/src/hmr/client/hmr-runtime.js +119 -110
  269. package/src/hmr/client/module-update.d.ts +13 -0
  270. package/src/hmr/client/module-update.js +39 -0
  271. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  272. package/src/hmr/hmr-asset-paths.js +22 -0
  273. package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
  274. package/src/hmr/hmr-entrypoint-output.js +34 -0
  275. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  276. package/src/hmr/hmr-file-change-prep.js +14 -0
  277. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  278. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  279. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  280. package/src/hmr/hmr-runtime-paths.js +13 -0
  281. package/src/hmr/hmr-strategy.d.ts +9 -0
  282. package/src/hmr/hmr-strategy.js +113 -42
  283. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  284. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
  285. package/src/hmr/strategies/js-hmr-strategy.js +107 -167
  286. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  287. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
  288. package/src/index.browser.d.ts +1 -0
  289. package/src/index.browser.js +2 -4
  290. package/src/index.d.ts +4 -1
  291. package/src/index.js +7 -21
  292. package/src/islands/README.md +25 -0
  293. package/src/islands/island-host.d.ts +37 -0
  294. package/src/islands/island-host.js +55 -0
  295. package/src/plugins/README.md +2 -1
  296. package/src/plugins/alias-resolver-cache.d.ts +6 -9
  297. package/src/plugins/alias-resolver-cache.js +114 -97
  298. package/src/plugins/alias-resolver-plugin.d.ts +3 -3
  299. package/src/plugins/alias-resolver-plugin.js +35 -62
  300. package/src/plugins/define-integration.d.ts +26 -0
  301. package/src/plugins/define-integration.js +20 -0
  302. package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
  303. package/src/plugins/eco-component-meta-plugin.js +123 -162
  304. package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
  305. package/src/plugins/foreign-jsx-override-plugin.js +49 -37
  306. package/src/plugins/integration-plugin.d.ts +24 -6
  307. package/src/plugins/integration-plugin.js +212 -195
  308. package/src/plugins/jsx-import-source.utils.d.ts +8 -0
  309. package/src/plugins/jsx-import-source.utils.js +21 -0
  310. package/src/plugins/package-specifier.d.ts +12 -0
  311. package/src/plugins/package-specifier.js +33 -0
  312. package/src/plugins/processor.d.ts +66 -12
  313. package/src/plugins/processor.js +168 -137
  314. package/src/plugins/runtime-capability.js +1 -0
  315. package/src/plugins/source-transform.d.ts +32 -1
  316. package/src/plugins/source-transform.js +112 -60
  317. package/src/plugins/tsconfig-import-resolver.d.ts +37 -0
  318. package/src/plugins/tsconfig-import-resolver.js +262 -0
  319. package/src/route-renderer/GRAPH.md +24 -30
  320. package/src/route-renderer/README.md +52 -32
  321. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  322. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
  323. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
  324. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
  325. package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
  326. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
  327. package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +20 -7
  328. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +195 -0
  329. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
  330. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
  331. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
  332. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
  333. package/src/route-renderer/orchestration/integration-renderer.d.ts +37 -153
  334. package/src/route-renderer/orchestration/integration-renderer.js +803 -1008
  335. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
  336. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
  337. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
  338. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
  339. package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
  340. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
  341. package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
  342. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
  343. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
  344. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
  345. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
  346. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
  347. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
  348. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
  349. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
  350. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
  351. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
  352. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
  353. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
  354. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +248 -0
  355. package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
  356. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
  357. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
  358. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
  359. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
  360. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
  361. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
  362. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
  363. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
  364. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
  365. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
  366. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
  367. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
  368. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +44 -0
  369. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
  370. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
  371. package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
  372. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
  373. package/src/{integrations/ghtml/ghtml-renderer.d.ts → route-renderer/orchestration/string-markup-renderer.d.ts} +8 -10
  374. package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
  375. package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
  376. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  377. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  378. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
  379. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
  380. package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
  381. package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
  382. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  383. package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
  384. package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
  385. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  386. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  387. package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
  388. package/src/route-renderer/page-loading/page-module-loader.js +136 -124
  389. package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
  390. package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
  391. package/src/route-renderer/route-renderer.js +74 -76
  392. package/src/router/README.md +31 -0
  393. package/src/router/client/link-intent.d.ts +11 -21
  394. package/src/router/client/link-intent.js +56 -30
  395. package/src/router/client/link-intent.test.browser.js +50 -39
  396. package/src/router/client/link-navigation-policy.d.ts +45 -0
  397. package/src/router/client/link-navigation-policy.js +122 -0
  398. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  399. package/src/router/client/link-navigation-policy.test.browser.js +82 -0
  400. package/src/router/client/navigation-coordinator.d.ts +1 -1
  401. package/src/router/client/navigation-coordinator.js +235 -211
  402. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  403. package/src/router/client/navigation-lifecycle.js +50 -0
  404. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  405. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  406. package/src/router/server/route-registry.js +237 -242
  407. package/src/services/README.md +5 -0
  408. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  409. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
  410. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +12 -1
  411. package/src/services/assets/asset-processing-service/asset-processing.service.js +335 -268
  412. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  413. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  414. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  415. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +1 -1
  416. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  417. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  418. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
  419. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -58
  420. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  421. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
  422. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  423. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
  424. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  425. package/src/services/assets/asset-processing-service/index.js +8 -6
  426. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  427. package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
  428. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  429. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
  430. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  431. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  432. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  433. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  434. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  435. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
  436. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  437. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  438. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
  439. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  440. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
  441. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  442. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  443. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
  444. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  445. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
  446. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  447. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
  448. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  449. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
  450. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  451. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
  452. package/src/services/assets/browser-bundle.service.d.ts +27 -30
  453. package/src/services/assets/browser-bundle.service.js +54 -46
  454. package/src/services/assets/browser-runtime-asset-generation.d.ts +17 -0
  455. package/src/services/assets/browser-runtime-asset-generation.js +28 -0
  456. package/src/services/cache/cache.types.d.ts +4 -2
  457. package/src/services/cache/cache.types.js +5 -0
  458. package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
  459. package/src/services/cache/html-page-cache-dependency-index.js +88 -0
  460. package/src/services/cache/index.d.ts +2 -0
  461. package/src/services/cache/index.js +8 -7
  462. package/src/services/cache/memory-cache-store.js +101 -89
  463. package/src/services/cache/page-cache-service.d.ts +31 -1
  464. package/src/services/cache/page-cache-service.js +237 -150
  465. package/src/services/cache/page-request-cache-coordinator.service.d.ts +2 -1
  466. package/src/services/cache/page-request-cache-coordinator.service.js +112 -102
  467. package/src/services/html/html-rewriter-provider.service.js +61 -61
  468. package/src/services/html/html-transformer.service.js +249 -266
  469. package/src/services/invalidation/development-invalidation.service.d.ts +15 -1
  470. package/src/services/invalidation/development-invalidation.service.js +241 -204
  471. package/src/services/module-loading/README.md +9 -6
  472. package/src/services/module-loading/app-module-loader.service.js +1 -0
  473. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  474. package/src/services/module-loading/app-server-module-transpiler.service.js +104 -106
  475. package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
  476. package/src/services/module-loading/collection-server-module-build.service.js +83 -0
  477. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  478. package/src/services/module-loading/module-loading-types.js +1 -0
  479. package/src/services/module-loading/page-module-import.service.d.ts +7 -12
  480. package/src/services/module-loading/page-module-import.service.js +232 -206
  481. package/src/services/module-loading/route-module-build-cache-registry.d.ts +2 -0
  482. package/src/services/module-loading/route-module-build-cache-registry.js +59 -33
  483. package/src/services/module-loading/route-module-build-cache.js +3 -38
  484. package/src/services/module-loading/route-module-build-cache.store.d.ts +10 -0
  485. package/src/services/module-loading/route-module-build-cache.store.js +213 -196
  486. package/src/services/module-loading/route-module-build-manifest.d.ts +10 -14
  487. package/src/services/module-loading/route-module-build-manifest.js +54 -118
  488. package/src/services/module-loading/route-module-dependency-hasher.d.ts +2 -2
  489. package/src/services/module-loading/route-module-dependency-hasher.js +136 -109
  490. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
  491. package/src/services/module-loading/server-module-transpiler.service.js +65 -62
  492. package/src/services/module-loading/source-module-support.js +15 -7
  493. package/src/services/runtime-state/dev-graph.service.js +165 -157
  494. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  495. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  496. package/src/services/validation/schema-validation-service.d.ts +1 -4
  497. package/src/services/validation/schema-validation-service.js +156 -95
  498. package/src/services/validation/standard-schema.types.d.ts +9 -62
  499. package/src/services/validation/standard-schema.types.js +1 -0
  500. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  501. package/src/services/validation/validate-standard-schema.js +14 -0
  502. package/src/static-site-generator/README.md +10 -2
  503. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
  504. package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
  505. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  506. package/src/static-site-generator/sitemap-routes.js +36 -0
  507. package/src/static-site-generator/sitemap.d.ts +15 -0
  508. package/src/static-site-generator/sitemap.js +42 -0
  509. package/src/static-site-generator/static-build-invalidation.d.ts +2 -2
  510. package/src/static-site-generator/static-build-invalidation.js +33 -74
  511. package/src/static-site-generator/static-export-context.d.ts +9 -1
  512. package/src/static-site-generator/static-export-context.js +1 -0
  513. package/src/static-site-generator/static-site-generator.d.ts +27 -6
  514. package/src/static-site-generator/static-site-generator.js +528 -389
  515. package/src/types/internal-types.d.ts +55 -17
  516. package/src/types/internal-types.js +1 -0
  517. package/src/types/public-types.d.ts +236 -95
  518. package/src/types/public-types.js +1 -0
  519. package/src/utils/deep-merge.js +39 -26
  520. package/src/utils/ecopages-route-info.d.ts +26 -0
  521. package/src/utils/ecopages-route-info.js +30 -0
  522. package/src/utils/hash.js +3 -6
  523. package/src/utils/html-escaping.d.ts +7 -0
  524. package/src/utils/html-escaping.js +22 -5
  525. package/src/utils/invariant.js +11 -10
  526. package/src/utils/locals-utils.js +32 -22
  527. package/src/utils/parse-cli-args.d.ts +1 -0
  528. package/src/utils/parse-cli-args.js +73 -62
  529. package/src/utils/path-pattern.d.ts +23 -0
  530. package/src/utils/path-pattern.js +42 -0
  531. package/src/utils/path-utils.module.js +8 -11
  532. package/src/utils/resolve-entry-file.js +70 -38
  533. package/src/utils/resolve-work-dir.js +23 -27
  534. package/src/utils/runtime.js +24 -33
  535. package/src/utils/server-utils.module.d.ts +3 -2
  536. package/src/utils/server-utils.module.js +60 -53
  537. package/src/utils/static-file-extensions.d.ts +12 -0
  538. package/src/utils/static-file-extensions.js +54 -0
  539. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  540. package/src/watchers/project-watcher-ignore.js +17 -0
  541. package/src/watchers/project-watcher.d.ts +21 -6
  542. package/src/watchers/project-watcher.js +402 -277
  543. package/src/watchers/project-watcher.test-helpers.js +45 -50
  544. package/src/adapters/shared/api-response.js +0 -96
  545. package/src/adapters/shared/application-adapter.js +0 -90
  546. package/src/adapters/shared/bun-user-websocket-lifecycle.js +0 -102
  547. package/src/adapters/shared/copy-runtime-public-dir.js +0 -24
  548. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  549. package/src/adapters/shared/define-api-handler.js +0 -15
  550. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  551. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  552. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  553. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  554. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  555. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  556. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  557. package/src/adapters/shared/hmr-html-response.js +0 -33
  558. package/src/adapters/shared/node-http-websocket-upgrades.js +0 -125
  559. package/src/adapters/shared/render-context.js +0 -93
  560. package/src/adapters/shared/runtime-app-bootstrap.js +0 -41
  561. package/src/adapters/shared/runtime-host.js +0 -0
  562. package/src/adapters/shared/server-adapter.js +0 -436
  563. package/src/adapters/shared/server-route-handler.js +0 -111
  564. package/src/adapters/shared/server-static-builder.js +0 -202
  565. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -61
  566. package/src/adapters/shared/shared-hmr-manager.js +0 -273
  567. package/src/adapters/shared/static-preview-host.js +0 -0
  568. package/src/adapters/shared/websocket-lifecycle.d.ts +0 -3
  569. package/src/adapters/shared/websocket-lifecycle.js +0 -19
  570. package/src/build/browser-runtime-manifest.js +0 -61
  571. package/src/build/browser-runtime-plugin-helpers.js +0 -14
  572. package/src/build/browser-runtime-plugin.js +0 -173
  573. package/src/build/build-input-fingerprint.js +0 -31
  574. package/src/build/build-manifest.d.ts +0 -33
  575. package/src/build/build-manifest.js +0 -49
  576. package/src/build/build-types.js +0 -0
  577. package/src/build/jsx-ownership-plugins.d.ts +0 -10
  578. package/src/build/jsx-ownership-plugins.js +0 -17
  579. package/src/build/pages-unified-graph-build.js +0 -208
  580. package/src/build/parallel-build-executor.js +0 -52
  581. package/src/build/rolldown-adapter-helpers.js +0 -309
  582. package/src/build/rolldown-build-adapter.js +0 -67
  583. package/src/build/rolldown-build-invocation-metrics.js +0 -43
  584. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  585. package/src/build/rolldown-dev-build-adapter.js +0 -182
  586. package/src/build/rolldown-plugin-bridge.js +0 -199
  587. package/src/build/runtime-build-executor.d.ts +0 -15
  588. package/src/build/runtime-build-executor.js +0 -43
  589. package/src/build/runtime-build-output-normalizer.js +0 -203
  590. package/src/build/serialized-build-executor.js +0 -63
  591. package/src/build/server-entry-build-cache.js +0 -169
  592. package/src/build/server-side-css-shim-plugin.js +0 -35
  593. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  594. package/src/hmr/hmr.test.e2e.js +0 -54
  595. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  596. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  597. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  598. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  599. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  600. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  601. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  602. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  603. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
  604. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  605. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  606. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  607. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  608. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  609. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  610. package/src/route-renderer/orchestration/render-output.utils.js +0 -175
  611. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
  612. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  613. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  614. package/src/utils/html.d.ts +0 -1
  615. package/src/utils/html.js +0 -4
  616. /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
  617. /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
  618. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  619. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  620. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  621. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  622. /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
  623. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Detects whether a thrown error indicates the requested port is already in
3
+ * use.
4
+ *
5
+ * @remarks
6
+ * Matches Node's `code: 'EADDRINUSE'` and Bun's surface, where the error
7
+ * carries the same `code` plus a human-readable message such as
8
+ * `"Failed to start server. Is port 3000 in use?"`. Older Bun builds that do
9
+ * not set `.code` are covered by a fallback match on `syscall === 'listen'`
10
+ * plus the message shape.
11
+ */
12
+ export declare function isPortInUseError(error: unknown): boolean;
13
+ /**
14
+ * Probes whether a TCP port is currently bindable from this process. Uses a
15
+ * short-lived Node `net.Server` so both Node and Bun can run it via their
16
+ * Node-compatible core.
17
+ *
18
+ * @remarks
19
+ * A successful probe only guarantees the port was free at probe time; callers
20
+ * must still handle EADDRINUSE when they actually bind, since release races
21
+ * can flip the answer between probe and bind.
22
+ */
23
+ export declare function isPortAvailable(port: number, hostname?: string): Promise<boolean>;
24
+ /**
25
+ * Default interactive prompt. Asks a yes/no question on stdin/stdout and
26
+ * auto-approves (returns `true`) after `timeoutMs` with no input.
27
+ *
28
+ * @returns `true` when the user accepted (or timed out), `false` when they declined.
29
+ */
30
+ export type PromptFunction = (message: string, timeoutMs: number) => Promise<boolean>;
31
+ export interface PortManagerOptions {
32
+ /**
33
+ * Bind factory. Should throw on EADDRINUSE (or return `null`/`undefined`
34
+ * when it declines without a port collision). Returning a non-null port
35
+ * marks the bind as successful.
36
+ */
37
+ startOnPort: (port: number) => Promise<number | null | undefined>;
38
+ /** Emits the "moved to port X" warning when the bound port differs from the preferred port. */
39
+ warn?: (message: string) => void;
40
+ /** Infers a free port to display in the prompt. Defaults to {@link isPortAvailable}. */
41
+ probePort?: (port: number) => Promise<boolean>;
42
+ /** Custom prompter. Defaults to a readline-based yes/no prompt on the process stdio. */
43
+ prompt?: PromptFunction;
44
+ /** Enables the prompt flow at all. Defaults to `process.stdin.isTTY && process.stdout.isTTY`. */
45
+ interactive?: boolean;
46
+ /** Auto-approve timeout (ms) for the prompt. Defaults to 10000. */
47
+ autoApproveMs?: number;
48
+ /** Maximum port offset to scan when falling back. Defaults to 20. */
49
+ maxPortOffset?: number;
50
+ /** Retry attempts for the same port before declaring it taken. Defaults to 2. */
51
+ releaseRaceRetries?: number;
52
+ /** Backoff between same-port retries. Defaults to 100 ms. */
53
+ releaseRaceDelayMs?: number;
54
+ }
55
+ export interface BindPortOptions {
56
+ /** Port the caller would prefer to bind. */
57
+ preferredPort: number;
58
+ /**
59
+ * Whether the caller permits moving to the next free port automatically when
60
+ * the preferred port is busy and no interactive prompt is available
61
+ * (non-TTY / CI). Explicit ports that fall back silently in CI would surprise
62
+ * operators, so this is honoured by the non-interactive path only.
63
+ */
64
+ allowPortFallback: boolean;
65
+ }
66
+ /**
67
+ * Owns preview-port assignment: probing, race-release retries, fallback, and
68
+ * an optional interactive auto-approve prompt.
69
+ *
70
+ * @remarks
71
+ * Single-process API. The manager does not cache ports across calls; each
72
+ * `bind()` runs fresh from the preferred port.
73
+ */
74
+ export declare class PortManager {
75
+ private readonly startOnPort;
76
+ private readonly warn;
77
+ private readonly probePort;
78
+ private readonly prompt;
79
+ private readonly interactive;
80
+ private readonly autoApproveMs;
81
+ private readonly maxPortOffset;
82
+ private readonly releaseRaceRetries;
83
+ private readonly releaseRaceDelayMs;
84
+ constructor(options: PortManagerOptions);
85
+ /**
86
+ * Binds the preview server to the preferred port.
87
+ *
88
+ * @remarks
89
+ * When the preferred port is free, binds it directly — no prompt, no
90
+ * fallback. The interactive prompt only fires on a genuine EADDRINUSE
91
+ * collision (TTY runs), and auto-approves after
92
+ * {@link PortManagerOptions.autoApproveMs}. In non-interactive (CI) runs,
93
+ * the manager falls back silently only when
94
+ * {@link BindPortOptions.allowPortFallback} is true (the default-port
95
+ * path); pinned ports rethrow EADDRINUSE so Docker-style fixed-port
96
+ * deployments fail loudly instead of silently moving.
97
+ */
98
+ bind(options: BindPortOptions): Promise<number | null>;
99
+ private shouldFallback;
100
+ private fallForward;
101
+ /**
102
+ * Attempts to bind via {@link PortManagerOptions.startOnPort} on `port`,
103
+ * retrying EADDRINUSE collisions up to
104
+ * {@link PortManagerOptions.releaseRaceRetries} to ride through TIME_WAIT
105
+ * race release.
106
+ *
107
+ * @remarks
108
+ * Only EADDRINUSE is retryable. Any other error is rethrown synchronously
109
+ * rather than swallowed as a soft "port taken" result, so a misconfigured
110
+ * factory surfaces loudly instead of causing a silent fallback. A `null`
111
+ * return from the factory (no throw) is reported as `factory-refused`, not
112
+ * conflated with a real collision.
113
+ */
114
+ private tryPort;
115
+ private findNextFreePort;
116
+ }
@@ -0,0 +1,226 @@
1
+ import { createServer as createNetServer } from 'node:net';
2
+ import { createInterface } from 'node:readline';
3
+ /**
4
+ * Detects whether a thrown error indicates the requested port is already in
5
+ * use.
6
+ *
7
+ * @remarks
8
+ * Matches Node's `code: 'EADDRINUSE'` and Bun's surface, where the error
9
+ * carries the same `code` plus a human-readable message such as
10
+ * `"Failed to start server. Is port 3000 in use?"`. Older Bun builds that do
11
+ * not set `.code` are covered by a fallback match on `syscall === 'listen'`
12
+ * plus the message shape.
13
+ */
14
+ export function isPortInUseError(error) {
15
+ if (!(error instanceof Error) && (typeof error !== 'object' || error === null)) {
16
+ return false;
17
+ }
18
+ const maybeErr = error;
19
+ const code = typeof maybeErr.code === 'string' || typeof maybeErr.code === 'number' ? String(maybeErr.code) : undefined;
20
+ const syscall = typeof maybeErr.syscall === 'string' ? maybeErr.syscall : undefined;
21
+ const message = error instanceof Error ? error.message : String(maybeErr.message ?? '');
22
+ if (code === 'EADDRINUSE') {
23
+ return true;
24
+ }
25
+ if (message.includes('EADDRINUSE')) {
26
+ return true;
27
+ }
28
+ if (syscall === 'listen' && /is port \d+ in use\??/i.test(message)) {
29
+ return true;
30
+ }
31
+ return false;
32
+ }
33
+ function sleep(ms) {
34
+ return new Promise((resolve) => setTimeout(resolve, ms));
35
+ }
36
+ /**
37
+ * Probes whether a TCP port is currently bindable from this process. Uses a
38
+ * short-lived Node `net.Server` so both Node and Bun can run it via their
39
+ * Node-compatible core.
40
+ *
41
+ * @remarks
42
+ * A successful probe only guarantees the port was free at probe time; callers
43
+ * must still handle EADDRINUSE when they actually bind, since release races
44
+ * can flip the answer between probe and bind.
45
+ */
46
+ export function isPortAvailable(port, hostname = '127.0.0.1') {
47
+ return new Promise((resolve) => {
48
+ const tester = createNetServer();
49
+ tester.once('error', () => resolve(false));
50
+ tester.once('listening', () => {
51
+ tester.close(() => resolve(true));
52
+ });
53
+ tester.listen(port, hostname);
54
+ });
55
+ }
56
+ function createDefaultPrompt(stdin, stdout) {
57
+ return async (message, timeoutMs) => {
58
+ stdout.write(`${message} `);
59
+ return await new Promise((resolve) => {
60
+ const rl = createInterface({ input: stdin, output: undefined, terminal: false });
61
+ let settled = false;
62
+ const finish = (value) => {
63
+ if (settled) {
64
+ return;
65
+ }
66
+ settled = true;
67
+ clearTimeout(timer);
68
+ rl.close();
69
+ stdout.write('\n');
70
+ resolve(value);
71
+ };
72
+ const timer = setTimeout(() => finish(true), timeoutMs);
73
+ rl.once('line', (line) => {
74
+ const answer = line.trim().toLowerCase();
75
+ if (answer === '' || answer === 'y' || answer === 'yes') {
76
+ finish(true);
77
+ }
78
+ else {
79
+ finish(false);
80
+ }
81
+ });
82
+ rl.once('close', () => finish(true));
83
+ });
84
+ };
85
+ }
86
+ const PREVIEW_PORT_RELEASE_RACE_RETRIES = 2;
87
+ const PREVIEW_PORT_FALLBACK_ATTEMPTS = 20;
88
+ const PREVIEW_PORT_RELEASE_RACE_DELAY_MS = 100;
89
+ const PREVIEW_PORT_AUTO_APPROVE_MS = 10_000;
90
+ /**
91
+ * Owns preview-port assignment: probing, race-release retries, fallback, and
92
+ * an optional interactive auto-approve prompt.
93
+ *
94
+ * @remarks
95
+ * Single-process API. The manager does not cache ports across calls; each
96
+ * `bind()` runs fresh from the preferred port.
97
+ */
98
+ export class PortManager {
99
+ startOnPort;
100
+ warn;
101
+ probePort;
102
+ prompt;
103
+ interactive;
104
+ autoApproveMs;
105
+ maxPortOffset;
106
+ releaseRaceRetries;
107
+ releaseRaceDelayMs;
108
+ constructor(options) {
109
+ this.startOnPort = options.startOnPort;
110
+ this.warn = options.warn;
111
+ this.probePort = options.probePort ?? isPortAvailable;
112
+ this.maxPortOffset = options.maxPortOffset ?? PREVIEW_PORT_FALLBACK_ATTEMPTS - 1;
113
+ this.releaseRaceRetries = options.releaseRaceRetries ?? PREVIEW_PORT_RELEASE_RACE_RETRIES;
114
+ this.releaseRaceDelayMs = options.releaseRaceDelayMs ?? PREVIEW_PORT_RELEASE_RACE_DELAY_MS;
115
+ this.autoApproveMs = options.autoApproveMs ?? PREVIEW_PORT_AUTO_APPROVE_MS;
116
+ this.interactive =
117
+ typeof options.interactive === 'boolean'
118
+ ? options.interactive
119
+ : Boolean(typeof process !== 'undefined' && process.stdin?.isTTY && process.stdout?.isTTY);
120
+ if (options.prompt) {
121
+ this.prompt = options.prompt;
122
+ }
123
+ else if (this.interactive) {
124
+ this.prompt = createDefaultPrompt(process.stdin, process.stdout);
125
+ }
126
+ else {
127
+ this.prompt = undefined;
128
+ }
129
+ }
130
+ /**
131
+ * Binds the preview server to the preferred port.
132
+ *
133
+ * @remarks
134
+ * When the preferred port is free, binds it directly — no prompt, no
135
+ * fallback. The interactive prompt only fires on a genuine EADDRINUSE
136
+ * collision (TTY runs), and auto-approves after
137
+ * {@link PortManagerOptions.autoApproveMs}. In non-interactive (CI) runs,
138
+ * the manager falls back silently only when
139
+ * {@link BindPortOptions.allowPortFallback} is true (the default-port
140
+ * path); pinned ports rethrow EADDRINUSE so Docker-style fixed-port
141
+ * deployments fail loudly instead of silently moving.
142
+ */
143
+ async bind(options) {
144
+ const preferredPort = options.preferredPort;
145
+ const firstAttempt = await this.tryPort(preferredPort);
146
+ if (firstAttempt.status === 'bound') {
147
+ return firstAttempt.boundPort;
148
+ }
149
+ if (firstAttempt.status === 'factory-refused') {
150
+ return null;
151
+ }
152
+ // firstAttempt.status === 'port-in-use'
153
+ await this.shouldFallback(preferredPort, options.allowPortFallback, firstAttempt.error);
154
+ return await this.fallForward(preferredPort);
155
+ }
156
+ async shouldFallback(preferredPort, allowPortFallback, error) {
157
+ if (this.interactive && this.prompt) {
158
+ const nextFree = await this.findNextFreePort(preferredPort);
159
+ const nextFreeSuffix = typeof nextFree === 'number' ? ` (next free: ${nextFree})` : '';
160
+ const autoApproveHint = `auto-yes in ${Math.round(this.autoApproveMs / 1000)}s`;
161
+ const message = `[@ecopages/core] Port ${preferredPort} is already in use${nextFreeSuffix}. Bind there instead? [Y/n] (${autoApproveHint})`;
162
+ const accepted = await this.prompt(message, this.autoApproveMs);
163
+ if (!accepted) {
164
+ throw error;
165
+ }
166
+ return;
167
+ }
168
+ if (!allowPortFallback) {
169
+ throw error;
170
+ }
171
+ }
172
+ async fallForward(preferredPort) {
173
+ for (let offset = 1; offset <= this.maxPortOffset; offset += 1) {
174
+ const candidatePort = preferredPort + offset;
175
+ const attempt = await this.tryPort(candidatePort);
176
+ if (attempt.status === 'bound') {
177
+ this.warn?.(`Port ${preferredPort} is in use; preview serving on port ${attempt.boundPort} instead. Pin the preview port with --port or ECOPAGES_PORT when a fixed binding is required.`);
178
+ return attempt.boundPort;
179
+ }
180
+ }
181
+ return null;
182
+ }
183
+ /**
184
+ * Attempts to bind via {@link PortManagerOptions.startOnPort} on `port`,
185
+ * retrying EADDRINUSE collisions up to
186
+ * {@link PortManagerOptions.releaseRaceRetries} to ride through TIME_WAIT
187
+ * race release.
188
+ *
189
+ * @remarks
190
+ * Only EADDRINUSE is retryable. Any other error is rethrown synchronously
191
+ * rather than swallowed as a soft "port taken" result, so a misconfigured
192
+ * factory surfaces loudly instead of causing a silent fallback. A `null`
193
+ * return from the factory (no throw) is reported as `factory-refused`, not
194
+ * conflated with a real collision.
195
+ */
196
+ async tryPort(port) {
197
+ for (let attempt = 0; attempt < this.releaseRaceRetries; attempt += 1) {
198
+ try {
199
+ const bound = await this.startOnPort(port);
200
+ if (bound) {
201
+ return { status: 'bound', boundPort: bound };
202
+ }
203
+ return { status: 'factory-refused' };
204
+ }
205
+ catch (error) {
206
+ if (!isPortInUseError(error)) {
207
+ throw error;
208
+ }
209
+ if (attempt === this.releaseRaceRetries - 1) {
210
+ return { status: 'port-in-use', error };
211
+ }
212
+ await sleep(this.releaseRaceDelayMs);
213
+ }
214
+ }
215
+ return { status: 'factory-refused' };
216
+ }
217
+ async findNextFreePort(startPort) {
218
+ for (let offset = 1; offset <= this.maxPortOffset; offset += 1) {
219
+ const candidate = startPort + offset;
220
+ if (await this.probePort(candidate)) {
221
+ return candidate;
222
+ }
223
+ }
224
+ return null;
225
+ }
226
+ }
@@ -1,5 +1,5 @@
1
- import type { RenderContext } from '../../types/public-types.js';
2
- import type { AnyIntegrationPlugin } from '../../plugins/integration-plugin.js';
1
+ import type { RenderContext } from '../../../types/public-types.js';
2
+ import type { AnyIntegrationPlugin } from '../../../plugins/integration-plugin.js';
3
3
  export interface CreateRenderContextOptions {
4
4
  integrations: AnyIntegrationPlugin[];
5
5
  rendererModules?: unknown;
@@ -0,0 +1,99 @@
1
+ import { fileURLToPath } from 'node:url';
2
+ import { invariant } from '../../../utils/invariant.js';
3
+ import { createBodyResponse } from '../http/create-body-response.js';
4
+ function resolveServerModulePath(filePath) {
5
+ return filePath instanceof URL ? fileURLToPath(filePath) : filePath;
6
+ }
7
+ /**
8
+ * Merges request locals into component props as a dedicated 'locals' property.
9
+ * This prevents naming conflicts and maintains type safety by keeping locals
10
+ * separate from other props.
11
+ *
12
+ * @param props - The original component props
13
+ * @param locals - Optional request-scoped locals from middleware
14
+ * @returns Props with locals merged in, or original props if no locals provided
15
+ */
16
+ function mergePropsWithLocals(props, locals) {
17
+ if (!locals || typeof props !== 'object' || props === null) {
18
+ return props;
19
+ }
20
+ return { ...props, locals };
21
+ }
22
+ /**
23
+ * Creates a render context for route handlers.
24
+ * Provides render(), renderPartial(), json(), and html() methods that can be used
25
+ * within route handlers to generate responses.
26
+ *
27
+ * @param options - Configuration options including available integrations
28
+ * @returns A RenderContext object with methods for rendering views and creating responses
29
+ */
30
+ export function createRenderContext(options) {
31
+ const { integrations } = options;
32
+ /**
33
+ * Resolves the appropriate renderer for a given view component based on its integration.
34
+ * Throws an error if the integration cannot be determined or is not found.
35
+ */
36
+ const getRendererForView = (view) => {
37
+ const integrationName = view.config?.integration ?? view.config?.identity?.integration;
38
+ invariant(!!integrationName, 'Cannot determine integration for view. Set view.config.integration explicitly or ensure the view is defined with eco.page() in a file with a recognized extension.');
39
+ const integration = integrations.find((i) => i.name === integrationName);
40
+ invariant(!!integration, `No integration found for: ${integrationName}`);
41
+ return integration.initializeRenderer({
42
+ rendererModules: options.rendererModules,
43
+ });
44
+ };
45
+ const renderContext = {
46
+ importServerModule: async (filePath) => {
47
+ invariant(!!options.importServerModule, 'Server module importing is not available in this render context.');
48
+ return (await options.importServerModule(resolveServerModulePath(filePath)));
49
+ },
50
+ async renderServerModule(filePath, props, renderOptions) {
51
+ const module = await renderContext.importServerModule(filePath);
52
+ const view = module.default;
53
+ const locals = this?.locals;
54
+ const mergedProps = mergePropsWithLocals(props ?? {}, locals);
55
+ const renderer = getRendererForView(view);
56
+ const ctx = {
57
+ partial: false,
58
+ status: renderOptions?.status,
59
+ headers: renderOptions?.headers,
60
+ };
61
+ return await renderer.renderToResponse(view, mergedProps, ctx);
62
+ },
63
+ async render(view, props, renderOptions) {
64
+ const locals = this?.locals;
65
+ const mergedProps = mergePropsWithLocals(props ?? {}, locals);
66
+ const renderer = getRendererForView(view);
67
+ const ctx = {
68
+ partial: false,
69
+ status: renderOptions?.status,
70
+ headers: renderOptions?.headers,
71
+ };
72
+ return renderer.renderToResponse(view, mergedProps, ctx);
73
+ },
74
+ async renderPartial(view, props, renderOptions) {
75
+ const locals = this?.locals;
76
+ const mergedProps = mergePropsWithLocals(props, locals);
77
+ const renderer = getRendererForView(view);
78
+ const ctx = {
79
+ partial: true,
80
+ status: renderOptions?.status,
81
+ headers: renderOptions?.headers,
82
+ };
83
+ return renderer.renderToResponse(view, mergedProps, ctx);
84
+ },
85
+ json(data, responseOptions) {
86
+ return createBodyResponse('json', data, {
87
+ status: responseOptions?.status,
88
+ headers: responseOptions?.headers,
89
+ });
90
+ },
91
+ html(content, responseOptions) {
92
+ return createBodyResponse('html', content, {
93
+ status: responseOptions?.status,
94
+ headers: responseOptions?.headers,
95
+ });
96
+ },
97
+ };
98
+ return renderContext;
99
+ }
@@ -1,11 +1,13 @@
1
- import type { ReturnParseCliArgs } from '../../utils/parse-cli-args.js';
2
- import type { EcoPagesAppConfig } from '../../types/internal-types.js';
1
+ import type { ReturnParseCliArgs } from '../../../utils/parse-cli-args.js';
2
+ import type { EcoPagesAppConfig } from '../../../types/internal-types.js';
3
3
  export type RuntimeBinding = {
4
4
  preferredPort: number;
5
5
  preferredHostname: string;
6
6
  runtimeOrigin: string;
7
7
  serveOptions: Record<string, unknown>;
8
8
  watch: boolean;
9
+ /** Whether preview may bind to the next free port when the preferred port is busy. */
10
+ allowPortFallback: boolean;
9
11
  };
10
12
  export type StaticRuntimeMode = {
11
13
  canBuildWithoutRuntimeServer: boolean;
@@ -0,0 +1,38 @@
1
+ import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from '../../../config/constants.js';
2
+ function normalizeOriginHostname(hostname) {
3
+ if (hostname.includes(':') && !hostname.startsWith('[') && !hostname.endsWith(']')) {
4
+ return `[${hostname}]`;
5
+ }
6
+ return hostname;
7
+ }
8
+ export function resolveServeRuntimeOrigin(serveOptions) {
9
+ const hostname = normalizeOriginHostname(String(serveOptions.hostname ?? DEFAULT_ECOPAGES_HOSTNAME));
10
+ const port = Number(serveOptions.port ?? DEFAULT_ECOPAGES_PORT);
11
+ return `http://${hostname}:${port}`;
12
+ }
13
+ export function resolveRuntimeBinding(options) {
14
+ const env = options.env ?? process.env;
15
+ const portExplicitlyConfigured = options.cliArgs.port !== undefined || Boolean(env.ECOPAGES_PORT) || options.serverOptions?.port !== undefined;
16
+ const preferredPort = options.cliArgs.port ?? (env.ECOPAGES_PORT ? Number(env.ECOPAGES_PORT) : undefined) ?? DEFAULT_ECOPAGES_PORT;
17
+ const preferredHostname = options.cliArgs.hostname ?? env.ECOPAGES_HOSTNAME ?? DEFAULT_ECOPAGES_HOSTNAME;
18
+ return {
19
+ preferredPort,
20
+ preferredHostname,
21
+ allowPortFallback: !portExplicitlyConfigured,
22
+ runtimeOrigin: resolveServeRuntimeOrigin({
23
+ hostname: preferredHostname,
24
+ port: preferredPort,
25
+ }),
26
+ serveOptions: {
27
+ port: preferredPort,
28
+ hostname: preferredHostname,
29
+ ...(options.serverOptions ?? {}),
30
+ },
31
+ watch: options.cliArgs.dev,
32
+ };
33
+ }
34
+ export function resolveStaticRuntimeMode(options) {
35
+ return {
36
+ canBuildWithoutRuntimeServer: options.cliArgs.build || options.cliArgs.preview,
37
+ };
38
+ }
@@ -0,0 +1,45 @@
1
+ import type { EcoPagesAppConfig, IHmrManager } from '../../../types/internal-types.js';
2
+ import type { ProjectWatcher } from '../../../watchers/project-watcher.js';
3
+ /**
4
+ * Copies source `public/` into dist and ensures the resolved assets directory exists.
5
+ */
6
+ export declare function prepareRuntimePublicDir(appConfig: EcoPagesAppConfig): void;
7
+ /**
8
+ * Attaches the shared HMR manager to every integration exactly once per app config.
9
+ *
10
+ * @remarks
11
+ * Runtime plugin setup must not call `integration.setHmrManager()` directly. Adapters invoke
12
+ * this after the manager is enabled so late plugin init cannot double-bind integrations.
13
+ */
14
+ export declare function attachHmrToIntegrations(appConfig: EcoPagesAppConfig, hmrManager: IHmrManager): void;
15
+ /**
16
+ * Starts background activation of every configured integration after watch-mode HMR is ready.
17
+ *
18
+ * @remarks
19
+ * Fire-and-forget: overlaps with watcher setup so first-page render can join the same
20
+ * coalesced {@link ensureIntegrationRuntimeReady} promise instead of paying a cold vendor build.
21
+ * Failures are logged and do not crash the server.
22
+ */
23
+ export declare function startDevWarmup(options: {
24
+ appConfig: EcoPagesAppConfig;
25
+ runtimeOrigin: string;
26
+ }): void;
27
+ /**
28
+ * Releases shared dev resources in a consistent order across server adapters.
29
+ *
30
+ * @remarks
31
+ * Bun calls `buildRuntime()` during `initialize()` when watch is enabled; Node defers
32
+ * runtime creation to `completeInitialization()`. Transport-specific setup stays in
33
+ * each adapter — only shared teardown lives here.
34
+ */
35
+ export declare function disposeDevResources(options: {
36
+ projectWatcher: ProjectWatcher | null | undefined;
37
+ appConfig: EcoPagesAppConfig;
38
+ hmrManager: IHmrManager | null | undefined;
39
+ bridge: {
40
+ destroy(): void;
41
+ } | null | undefined;
42
+ previewHost: {
43
+ stop(): Promise<void>;
44
+ };
45
+ }): Promise<void>;
@@ -0,0 +1,71 @@
1
+ import path from 'node:path';
2
+ import { fileSystem } from '@ecopages/file-system';
3
+ import { RESOLVED_ASSETS_DIR } from '../../../config/constants.js';
4
+ import { disposeAppBuildRuntime } from '../../../build/runtime/build-runtime.js';
5
+ import { ensureIntegrationRuntimeReady } from '../../../build/app-build-manifest-runtime.js';
6
+ import { appLogger } from '../../../global/app-logger.js';
7
+ import { copyRuntimePublicDirIfChanged } from './copy-runtime-public-dir.js';
8
+ import { clearAppDevClientBridge } from '../../../dev/client-bridge-registry.js';
9
+ import { clearAppHmrManager } from '../../../dev/hmr-manager-registry.js';
10
+ /**
11
+ * Copies source `public/` into dist and ensures the resolved assets directory exists.
12
+ */
13
+ export function prepareRuntimePublicDir(appConfig) {
14
+ const srcPublicDir = path.join(appConfig.rootDir, appConfig.srcDir, appConfig.publicDir);
15
+ if (fileSystem.exists(srcPublicDir)) {
16
+ copyRuntimePublicDirIfChanged(srcPublicDir, path.join(appConfig.rootDir, appConfig.distDir));
17
+ }
18
+ fileSystem.ensureDir(path.join(appConfig.absolutePaths.distDir, RESOLVED_ASSETS_DIR));
19
+ }
20
+ const attachedHmrApps = new WeakSet();
21
+ /**
22
+ * Attaches the shared HMR manager to every integration exactly once per app config.
23
+ *
24
+ * @remarks
25
+ * Runtime plugin setup must not call `integration.setHmrManager()` directly. Adapters invoke
26
+ * this after the manager is enabled so late plugin init cannot double-bind integrations.
27
+ */
28
+ export function attachHmrToIntegrations(appConfig, hmrManager) {
29
+ if (attachedHmrApps.has(appConfig)) {
30
+ return;
31
+ }
32
+ attachedHmrApps.add(appConfig);
33
+ for (const integration of appConfig.integrations) {
34
+ integration.setHmrManager(hmrManager);
35
+ }
36
+ }
37
+ /**
38
+ * Starts background activation of every configured integration after watch-mode HMR is ready.
39
+ *
40
+ * @remarks
41
+ * Fire-and-forget: overlaps with watcher setup so first-page render can join the same
42
+ * coalesced {@link ensureIntegrationRuntimeReady} promise instead of paying a cold vendor build.
43
+ * Failures are logged and do not crash the server.
44
+ */
45
+ export function startDevWarmup(options) {
46
+ const { appConfig, runtimeOrigin } = options;
47
+ void Promise.all(appConfig.integrations.map((integration) => ensureIntegrationRuntimeReady({
48
+ appConfig,
49
+ integrationName: integration.name,
50
+ runtimeOrigin,
51
+ }))).catch((error) => {
52
+ appLogger.error(`Failed to prewarm integration runtimes: ${error instanceof Error ? error.message : String(error)}`);
53
+ });
54
+ }
55
+ /**
56
+ * Releases shared dev resources in a consistent order across server adapters.
57
+ *
58
+ * @remarks
59
+ * Bun calls `buildRuntime()` during `initialize()` when watch is enabled; Node defers
60
+ * runtime creation to `completeInitialization()`. Transport-specific setup stays in
61
+ * each adapter — only shared teardown lives here.
62
+ */
63
+ export async function disposeDevResources(options) {
64
+ await options.projectWatcher?.close();
65
+ await disposeAppBuildRuntime(options.appConfig);
66
+ options.hmrManager?.stop();
67
+ options.bridge?.destroy();
68
+ clearAppDevClientBridge(options.appConfig);
69
+ clearAppHmrManager(options.appConfig);
70
+ await options.previewHost.stop();
71
+ }