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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (624) hide show
  1. package/README.md +44 -14
  2. package/package.json +368 -57
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +57 -5
  5. package/src/adapters/abstract/application-adapter.js +261 -203
  6. package/src/adapters/abstract/router-adapter.js +12 -4
  7. package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
  8. package/src/adapters/abstract/segment-path-matcher.js +147 -0
  9. package/src/adapters/abstract/server-adapter.d.ts +13 -2
  10. package/src/adapters/abstract/server-adapter.js +22 -14
  11. package/src/adapters/abstract/ws-pattern-matcher.d.ts +2 -50
  12. package/src/adapters/abstract/ws-pattern-matcher.js +24 -57
  13. package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
  14. package/src/adapters/bun/client-bridge.js +51 -50
  15. package/src/adapters/bun/create-app.d.ts +5 -7
  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 +48 -0
  58. package/src/adapters/shared/http/define-api-handler.js +49 -0
  59. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  60. package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
  61. package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
  62. package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
  63. package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
  64. package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
  65. package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
  66. package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
  67. package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
  68. package/src/adapters/shared/http/fs-server-response-matcher.js +260 -0
  69. package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
  70. package/src/adapters/shared/http/run-middleware-chain.js +17 -0
  71. package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
  72. package/src/adapters/shared/runtime/application-adapter.js +75 -0
  73. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
  74. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
  75. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
  76. package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
  77. package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
  78. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  79. package/src/adapters/shared/runtime/port-manager.js +226 -0
  80. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  81. package/src/adapters/shared/runtime/render-context.js +99 -0
  82. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -2
  83. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
  84. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
  85. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
  86. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
  87. package/src/adapters/shared/runtime/server-adapter.js +301 -0
  88. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  89. package/src/adapters/shared/runtime/server-route-handler.js +77 -0
  90. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +26 -31
  91. package/src/adapters/shared/runtime/server-static-builder.js +172 -0
  92. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  93. package/src/adapters/shared/{node-http-websocket-upgrades.d.ts → ws/node-http-websocket-upgrades.d.ts} +1 -1
  94. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
  95. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  96. package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
  97. package/src/build/README.md +165 -45
  98. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  99. package/src/build/app-build-manifest-runtime.js +145 -0
  100. package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +4 -0
  101. package/src/build/browser/browser-runtime-manifest.js +65 -0
  102. package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +3 -5
  103. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -0
  104. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +12 -13
  105. package/src/build/browser/browser-runtime-plugin.js +218 -0
  106. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  107. package/src/build/browser/jsx-ownership-plugins.js +55 -0
  108. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  109. package/src/build/browser/lit-static-render-worker-context.js +4 -0
  110. package/src/build/build-adapter.d.ts +25 -355
  111. package/src/build/build-adapter.js +258 -265
  112. package/src/build/{build-input-fingerprint.d.ts → cache/build-input-fingerprint.d.ts} +3 -3
  113. package/src/build/cache/build-input-fingerprint.js +33 -0
  114. package/src/build/cache/cache-constants.d.ts +4 -0
  115. package/src/build/cache/cache-constants.js +4 -0
  116. package/src/build/cache/cache-keys.d.ts +22 -0
  117. package/src/build/cache/cache-keys.js +71 -0
  118. package/src/build/{pages-unified-graph-build.d.ts → cache/pages-unified-graph-build.d.ts} +1 -1
  119. package/src/build/cache/pages-unified-graph-build.js +199 -0
  120. package/src/build/cache/production-build-cache.d.ts +21 -0
  121. package/src/build/cache/production-build-cache.js +56 -0
  122. package/src/build/{server-entry-build-cache.d.ts → cache/server-entry-build-cache.d.ts} +3 -4
  123. package/src/build/cache/server-entry-build-cache.js +153 -0
  124. package/src/build/contracts/build-contracts.d.ts +96 -0
  125. package/src/build/contracts/build-contracts.js +1 -0
  126. package/src/build/contracts/build-manifest.d.ts +90 -0
  127. package/src/build/contracts/build-manifest.js +64 -0
  128. package/src/build/contracts/build-types.js +1 -0
  129. package/src/build/contracts/content-virtual-modules.d.ts +12 -0
  130. package/src/build/contracts/content-virtual-modules.js +29 -0
  131. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
  132. package/src/build/rolldown/rolldown-adapter-helpers.js +472 -0
  133. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  134. package/src/build/rolldown/rolldown-build-adapter.js +57 -0
  135. package/src/build/{rolldown-build-invocation-metrics.d.ts → rolldown/rolldown-build-invocation-metrics.d.ts} +1 -1
  136. package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
  137. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +7 -2
  138. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  139. package/src/build/{rolldown-source-transform-pass.d.ts → rolldown/rolldown-source-transform-pass.d.ts} +1 -1
  140. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  141. package/src/build/rolldown/runtime-build-output-normalizer.js +227 -0
  142. package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
  143. package/src/build/runtime/build-profile-options.d.ts +7 -0
  144. package/src/build/runtime/build-profile-options.js +37 -0
  145. package/src/build/runtime/build-request-identity.d.ts +17 -0
  146. package/src/build/runtime/build-request-identity.js +79 -0
  147. package/src/build/runtime/build-request-policy.d.ts +58 -0
  148. package/src/build/runtime/build-request-policy.js +84 -0
  149. package/src/build/runtime/build-runtime.d.ts +28 -0
  150. package/src/build/runtime/build-runtime.js +75 -0
  151. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  152. package/src/build/runtime/deduping-build-executor.js +40 -0
  153. package/src/build/{parallel-build-executor.d.ts → runtime/parallel-build-executor.d.ts} +1 -1
  154. package/src/build/runtime/parallel-build-executor.js +60 -0
  155. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  156. package/src/build/runtime/serialized-build-executor.js +79 -0
  157. package/src/cache/index.d.ts +2 -1
  158. package/src/cache/index.js +7 -6
  159. package/src/cache/module-parse-cache.d.ts +5 -0
  160. package/src/cache/module-parse-cache.js +122 -67
  161. package/src/cache/module-transform-profiler.d.ts +8 -0
  162. package/src/cache/module-transform-profiler.js +8 -0
  163. package/src/client/navigation-scripts/classification.d.ts +16 -0
  164. package/src/client/navigation-scripts/classification.js +49 -0
  165. package/src/client/navigation-scripts/index.d.ts +3 -0
  166. package/src/client/navigation-scripts/index.js +3 -0
  167. package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
  168. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
  169. package/src/client/navigation-scripts/registry.d.ts +11 -0
  170. package/src/client/navigation-scripts/registry.js +16 -0
  171. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  172. package/src/client/navigation-scripts/rerun-queue.js +90 -0
  173. package/src/client/scroll.d.ts +17 -0
  174. package/src/client/scroll.js +33 -0
  175. package/src/client/scroll.test.browser.d.ts +1 -0
  176. package/src/client/scroll.test.browser.js +31 -0
  177. package/src/client/view-transitions.d.ts +32 -0
  178. package/src/client/view-transitions.js +120 -0
  179. package/src/client/view-transitions.test.browser.d.ts +1 -0
  180. package/src/client/view-transitions.test.browser.js +56 -0
  181. package/src/config/README.md +1 -1
  182. package/src/config/config-builder.d.ts +40 -20
  183. package/src/config/config-builder.js +645 -610
  184. package/src/config/constants.d.ts +1 -0
  185. package/src/config/constants.js +44 -23
  186. package/src/declarations.d.ts +1 -0
  187. package/src/dev/README.md +24 -0
  188. package/src/dev/client-bridge-registry.d.ts +5 -0
  189. package/src/dev/client-bridge-registry.js +10 -0
  190. package/src/dev/dev-client-ownership.d.ts +7 -0
  191. package/src/dev/dev-client-ownership.js +8 -0
  192. package/src/dev/hmr-manager-registry.d.ts +8 -0
  193. package/src/dev/hmr-manager-registry.js +10 -0
  194. package/src/dev/host-runtime.d.ts +3 -0
  195. package/src/dev/host-runtime.js +25 -23
  196. package/src/dev/runtime-server-started-message.d.ts +2 -0
  197. package/src/dev/runtime-server-started-message.js +3 -0
  198. package/src/dev/sc-server.js +106 -103
  199. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  200. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  201. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  202. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  203. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  204. package/src/dev/transform-server/dev-transform-import-rewriter.js +127 -0
  205. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  206. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  207. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  208. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  209. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  210. package/src/dev/transform-server/dev-transform-server.js +191 -0
  211. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  212. package/src/dev/transform-server/dev-transform-url.js +58 -0
  213. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
  214. package/src/dev/transform-server/dev-transform-vendor-registry.js +166 -0
  215. package/src/dev/transform-server/index.d.ts +6 -0
  216. package/src/dev/transform-server/index.js +4 -0
  217. package/src/dev/transform-server/types.d.ts +15 -0
  218. package/src/dev/transform-server/types.js +1 -0
  219. package/src/dev-toolbar/README.md +52 -0
  220. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  221. package/src/dev-toolbar/define-dev-tool.js +9 -0
  222. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  223. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  224. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  225. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  226. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  227. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  228. package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
  229. package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
  230. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  231. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  232. package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
  233. package/src/dev-toolbar/dev-toolbar-package.js +78 -0
  234. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  235. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  236. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  237. package/src/diagnostics/request-build-dedupe.js +39 -0
  238. package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
  239. package/src/diagnostics/request-pipeline-metrics.js +121 -0
  240. package/src/diagnostics/startup-trace.d.ts +81 -0
  241. package/src/diagnostics/startup-trace.js +281 -0
  242. package/src/eco/README.md +17 -0
  243. package/src/eco/component-identity.d.ts +13 -0
  244. package/src/eco/component-identity.js +18 -0
  245. package/src/eco/eco-declared-component.d.ts +15 -0
  246. package/src/eco/eco-declared-component.js +23 -0
  247. package/src/eco/eco.browser.js +63 -70
  248. package/src/eco/eco.js +163 -97
  249. package/src/eco/eco.types.d.ts +47 -8
  250. package/src/eco/eco.types.js +5 -0
  251. package/src/eco/eco.utils.d.ts +1 -1
  252. package/src/eco/eco.utils.js +1 -10
  253. package/src/eco/global-injector-map.js +55 -41
  254. package/src/eco/lazy-injector-map.js +90 -60
  255. package/src/eco/module-dependencies.js +52 -44
  256. package/src/eco/page-layout-normalization.d.ts +21 -0
  257. package/src/eco/page-layout-normalization.js +69 -0
  258. package/src/env.d.ts +2 -0
  259. package/src/errors/http-error.d.ts +8 -0
  260. package/src/errors/http-error.js +66 -49
  261. package/src/errors/index.d.ts +1 -0
  262. package/src/errors/index.js +3 -6
  263. package/src/errors/locals-access-error.js +5 -8
  264. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  265. package/src/errors/undeclared-component-dependency-error.js +17 -0
  266. package/src/global/app-logger.js +3 -6
  267. package/src/hmr/README.md +21 -0
  268. package/src/hmr/client/hmr-runtime.js +119 -110
  269. package/src/hmr/client/module-update.d.ts +13 -0
  270. package/src/hmr/client/module-update.js +39 -0
  271. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  272. package/src/hmr/hmr-asset-paths.js +22 -0
  273. package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
  274. package/src/hmr/hmr-entrypoint-output.js +34 -0
  275. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  276. package/src/hmr/hmr-file-change-prep.js +14 -0
  277. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  278. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  279. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  280. package/src/hmr/hmr-runtime-paths.js +13 -0
  281. package/src/hmr/hmr-strategy.d.ts +9 -0
  282. package/src/hmr/hmr-strategy.js +113 -42
  283. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  284. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
  285. package/src/hmr/strategies/js-hmr-strategy.js +107 -167
  286. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  287. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
  288. package/src/index.browser.d.ts +1 -0
  289. package/src/index.browser.js +2 -4
  290. package/src/index.d.ts +4 -1
  291. package/src/index.js +7 -21
  292. package/src/islands/README.md +25 -0
  293. package/src/islands/island-host.d.ts +37 -0
  294. package/src/islands/island-host.js +55 -0
  295. package/src/plugins/README.md +4 -2
  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 +28 -15
  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 +79 -12
  313. package/src/plugins/processor.js +188 -136
  314. package/src/plugins/runtime-capability.js +1 -0
  315. package/src/plugins/source-transform.d.ts +1 -1
  316. package/src/plugins/source-transform.js +109 -79
  317. package/src/plugins/tsconfig-import-resolver.d.ts +37 -0
  318. package/src/plugins/tsconfig-import-resolver.js +262 -0
  319. package/src/route-renderer/GRAPH.md +24 -30
  320. package/src/route-renderer/README.md +52 -32
  321. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  322. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
  323. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +32 -0
  324. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +52 -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 +39 -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 +53 -0
  375. package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
  376. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  377. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  378. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
  379. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
  380. package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
  381. package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
  382. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  383. package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
  384. package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
  385. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  386. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  387. package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
  388. package/src/route-renderer/page-loading/page-module-loader.js +136 -124
  389. package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
  390. package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
  391. package/src/route-renderer/route-renderer.js +74 -76
  392. package/src/router/README.md +31 -0
  393. package/src/router/client/link-intent.d.ts +11 -21
  394. package/src/router/client/link-intent.js +56 -30
  395. package/src/router/client/link-intent.test.browser.js +50 -39
  396. package/src/router/client/link-navigation-policy.d.ts +45 -0
  397. package/src/router/client/link-navigation-policy.js +122 -0
  398. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  399. package/src/router/client/link-navigation-policy.test.browser.js +82 -0
  400. package/src/router/client/navigation-coordinator.d.ts +1 -1
  401. package/src/router/client/navigation-coordinator.js +235 -211
  402. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  403. package/src/router/client/navigation-lifecycle.js +50 -0
  404. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  405. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  406. package/src/router/server/route-registry.js +237 -242
  407. package/src/services/README.md +5 -0
  408. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  409. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
  410. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +12 -1
  411. package/src/services/assets/asset-processing-service/asset-processing.service.js +335 -268
  412. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  413. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  414. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  415. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +1 -1
  416. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  417. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  418. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
  419. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -58
  420. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  421. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
  422. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  423. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
  424. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  425. package/src/services/assets/asset-processing-service/index.js +8 -6
  426. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  427. package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
  428. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  429. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
  430. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  431. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  432. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  433. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  434. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  435. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
  436. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  437. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  438. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
  439. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  440. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
  441. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  442. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  443. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
  444. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  445. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
  446. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  447. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
  448. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  449. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
  450. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  451. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
  452. package/src/services/assets/browser-bundle.service.d.ts +27 -31
  453. package/src/services/assets/browser-bundle.service.js +54 -49
  454. package/src/services/assets/browser-runtime-asset-generation.d.ts +17 -0
  455. package/src/services/assets/browser-runtime-asset-generation.js +28 -0
  456. package/src/services/cache/cache.types.d.ts +4 -2
  457. package/src/services/cache/cache.types.js +5 -0
  458. package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
  459. package/src/services/cache/html-page-cache-dependency-index.js +88 -0
  460. package/src/services/cache/index.d.ts +2 -0
  461. package/src/services/cache/index.js +8 -7
  462. package/src/services/cache/memory-cache-store.js +101 -89
  463. package/src/services/cache/page-cache-service.d.ts +31 -1
  464. package/src/services/cache/page-cache-service.js +237 -150
  465. package/src/services/cache/page-request-cache-coordinator.service.d.ts +2 -1
  466. package/src/services/cache/page-request-cache-coordinator.service.js +112 -102
  467. package/src/services/html/html-rewriter-provider.service.js +61 -61
  468. package/src/services/html/html-transformer.service.js +249 -266
  469. package/src/services/invalidation/development-invalidation.service.d.ts +15 -1
  470. package/src/services/invalidation/development-invalidation.service.js +241 -204
  471. package/src/services/module-loading/README.md +9 -6
  472. package/src/services/module-loading/app-module-loader.service.js +1 -0
  473. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  474. package/src/services/module-loading/app-server-module-transpiler.service.js +104 -106
  475. package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
  476. package/src/services/module-loading/collection-server-module-build.service.js +83 -0
  477. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  478. package/src/services/module-loading/module-loading-types.js +1 -0
  479. package/src/services/module-loading/page-module-import.service.d.ts +7 -12
  480. package/src/services/module-loading/page-module-import.service.js +232 -206
  481. package/src/services/module-loading/route-module-build-cache-registry.d.ts +2 -0
  482. package/src/services/module-loading/route-module-build-cache-registry.js +59 -33
  483. package/src/services/module-loading/route-module-build-cache.js +3 -38
  484. package/src/services/module-loading/route-module-build-cache.store.d.ts +10 -0
  485. package/src/services/module-loading/route-module-build-cache.store.js +213 -196
  486. package/src/services/module-loading/route-module-build-manifest.d.ts +10 -14
  487. package/src/services/module-loading/route-module-build-manifest.js +54 -118
  488. package/src/services/module-loading/route-module-dependency-hasher.d.ts +2 -2
  489. package/src/services/module-loading/route-module-dependency-hasher.js +136 -109
  490. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
  491. package/src/services/module-loading/server-module-transpiler.service.js +65 -62
  492. package/src/services/module-loading/source-module-support.js +15 -7
  493. package/src/services/runtime-state/dev-graph.service.js +165 -157
  494. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  495. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  496. package/src/services/validation/schema-validation-service.d.ts +1 -4
  497. package/src/services/validation/schema-validation-service.js +156 -95
  498. package/src/services/validation/standard-schema.types.d.ts +9 -62
  499. package/src/services/validation/standard-schema.types.js +1 -0
  500. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  501. package/src/services/validation/validate-standard-schema.js +14 -0
  502. package/src/static-site-generator/README.md +10 -2
  503. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
  504. package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
  505. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  506. package/src/static-site-generator/sitemap-routes.js +36 -0
  507. package/src/static-site-generator/sitemap.d.ts +15 -0
  508. package/src/static-site-generator/sitemap.js +42 -0
  509. package/src/static-site-generator/static-build-invalidation.d.ts +2 -2
  510. package/src/static-site-generator/static-build-invalidation.js +33 -74
  511. package/src/static-site-generator/static-export-context.d.ts +9 -1
  512. package/src/static-site-generator/static-export-context.js +1 -0
  513. package/src/static-site-generator/static-site-generator.d.ts +27 -6
  514. package/src/static-site-generator/static-site-generator.js +528 -389
  515. package/src/types/internal-types.d.ts +55 -17
  516. package/src/types/internal-types.js +1 -0
  517. package/src/types/public-types.d.ts +236 -95
  518. package/src/types/public-types.js +1 -0
  519. package/src/utils/deep-merge.js +39 -26
  520. package/src/utils/ecopages-route-info.d.ts +26 -0
  521. package/src/utils/ecopages-route-info.js +30 -0
  522. package/src/utils/hash.js +3 -6
  523. package/src/utils/html-escaping.d.ts +7 -0
  524. package/src/utils/html-escaping.js +22 -5
  525. package/src/utils/invariant.js +11 -10
  526. package/src/utils/locals-utils.js +32 -22
  527. package/src/utils/parse-cli-args.d.ts +1 -0
  528. package/src/utils/parse-cli-args.js +73 -62
  529. package/src/utils/path-pattern.d.ts +23 -0
  530. package/src/utils/path-pattern.js +42 -0
  531. package/src/utils/path-utils.module.js +8 -11
  532. package/src/utils/resolve-entry-file.js +70 -38
  533. package/src/utils/resolve-work-dir.js +23 -27
  534. package/src/utils/runtime.js +24 -33
  535. package/src/utils/server-utils.module.d.ts +3 -2
  536. package/src/utils/server-utils.module.js +60 -53
  537. package/src/utils/static-file-extensions.d.ts +12 -0
  538. package/src/utils/static-file-extensions.js +54 -0
  539. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  540. package/src/watchers/project-watcher-ignore.js +17 -0
  541. package/src/watchers/project-watcher.d.ts +21 -6
  542. package/src/watchers/project-watcher.js +402 -277
  543. package/src/watchers/project-watcher.test-helpers.js +45 -50
  544. package/src/adapters/shared/api-response.js +0 -96
  545. package/src/adapters/shared/application-adapter.js +0 -90
  546. package/src/adapters/shared/bun-user-websocket-lifecycle.js +0 -102
  547. package/src/adapters/shared/copy-runtime-public-dir.js +0 -24
  548. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  549. package/src/adapters/shared/define-api-handler.js +0 -15
  550. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  551. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  552. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  553. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  554. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  555. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  556. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  557. package/src/adapters/shared/hmr-html-response.js +0 -33
  558. package/src/adapters/shared/node-http-websocket-upgrades.js +0 -125
  559. package/src/adapters/shared/render-context.js +0 -93
  560. package/src/adapters/shared/runtime-app-bootstrap.js +0 -41
  561. package/src/adapters/shared/runtime-host.js +0 -0
  562. package/src/adapters/shared/server-adapter.js +0 -436
  563. package/src/adapters/shared/server-route-handler.js +0 -111
  564. package/src/adapters/shared/server-static-builder.js +0 -202
  565. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -61
  566. package/src/adapters/shared/shared-hmr-manager.js +0 -273
  567. package/src/adapters/shared/static-preview-host.js +0 -0
  568. package/src/adapters/shared/websocket-lifecycle.d.ts +0 -3
  569. package/src/adapters/shared/websocket-lifecycle.js +0 -19
  570. package/src/build/browser-runtime-manifest.js +0 -61
  571. package/src/build/browser-runtime-plugin-helpers.js +0 -14
  572. package/src/build/browser-runtime-plugin.js +0 -173
  573. package/src/build/build-input-fingerprint.js +0 -31
  574. package/src/build/build-manifest.d.ts +0 -33
  575. package/src/build/build-manifest.js +0 -49
  576. package/src/build/build-types.js +0 -0
  577. package/src/build/jsx-ownership-plugins.d.ts +0 -10
  578. package/src/build/jsx-ownership-plugins.js +0 -17
  579. package/src/build/pages-unified-graph-build.js +0 -208
  580. package/src/build/parallel-build-executor.js +0 -52
  581. package/src/build/rolldown-adapter-helpers.js +0 -310
  582. package/src/build/rolldown-build-adapter.js +0 -67
  583. package/src/build/rolldown-build-invocation-metrics.js +0 -43
  584. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  585. package/src/build/rolldown-dev-build-adapter.js +0 -182
  586. package/src/build/rolldown-plugin-bridge.js +0 -211
  587. package/src/build/rolldown-source-transform-pass.js +0 -58
  588. package/src/build/runtime-build-executor.d.ts +0 -15
  589. package/src/build/runtime-build-executor.js +0 -43
  590. package/src/build/runtime-build-output-normalizer.js +0 -203
  591. package/src/build/serialized-build-executor.js +0 -63
  592. package/src/build/server-entry-build-cache.js +0 -169
  593. package/src/build/server-side-css-shim-plugin.js +0 -35
  594. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  595. package/src/hmr/hmr.test.e2e.js +0 -54
  596. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  597. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  598. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  599. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  600. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  601. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  602. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  603. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  604. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
  605. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  606. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  607. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  608. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  609. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  610. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  611. package/src/route-renderer/orchestration/render-output.utils.js +0 -175
  612. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
  613. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  614. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  615. package/src/utils/html.d.ts +0 -1
  616. package/src/utils/html.js +0 -4
  617. /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
  618. /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
  619. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  620. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  621. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  622. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  623. /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
  624. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -1,315 +1,362 @@
1
- import {} from "node:http";
2
- import path from "node:path";
3
- import { fileSystem } from "@ecopages/file-system";
4
- import { getAppBrowserBuildPlugins, setupAppRuntimePlugins } from "../../build/build-adapter.js";
5
- import { installAppRuntimeBuildExecutor } from "../../build/runtime-build-executor.js";
6
- import { RESOLVED_ASSETS_DIR } from "../../config/constants.js";
7
- import { appLogger } from "../../global/app-logger.js";
8
- import { NodeClientBridge } from "./node-client-bridge.js";
9
- import { NodeHmrManager } from "./node-hmr-manager.js";
10
- import { ProjectWatcher } from "../../watchers/project-watcher.js";
11
- import {
12
- attachNodeHttpWebSocketUpgrades
13
- } from "../shared/node-http-websocket-upgrades.js";
14
- import { StaticSiteGenerator } from "../../static-site-generator/static-site-generator.js";
15
- import { SharedServerAdapter } from "../shared/server-adapter.js";
16
- import { ServerStaticBuilder } from "../shared/server-static-builder.js";
17
- import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
18
- import {
19
- injectHmrRuntimeIntoHtmlResponse,
20
- isHtmlResponse,
21
- shouldInjectHmrHtmlResponse
22
- } from "../shared/hmr-html-response.js";
23
- import { copyRuntimePublicDirIfChanged } from "../shared/copy-runtime-public-dir.js";
24
- import { resolveServeRuntimeOrigin } from "../shared/runtime-app-bootstrap.js";
25
- import { NodeClientAbortError, NodeHttpRequestBridge } from "./http-request-bridge.js";
26
- import { NodeStaticPreviewHost } from "./static-preview-host.js";
27
- import { DefaultNodeServerDevRuntimeFactory } from "./server-adapter-dependencies.js";
28
- class NodeServerAdapter extends SharedServerAdapter {
29
- serverInstance = null;
30
- initialized = false;
31
- apiHandlers;
32
- staticRoutes;
33
- errorHandler;
34
- bridge = null;
35
- hmrManager = null;
36
- projectWatcher = null;
37
- adapterDisposed = false;
38
- previewHost;
39
- requestBridge;
40
- devRuntimeFactory;
41
- /**
42
- * Reference to the application-level WebSocket handlers map.
43
- *
44
- * @remarks
45
- * This is a reference to the map owned by `AbstractApplicationAdapter`,
46
- * passed in via the constructor. The Node adapter reads from it to wire
47
- * WebSocket upgrades for user-registered patterns.
48
- */
49
- websocketHandlers = /* @__PURE__ */ new Map();
50
- /**
51
- * Wires user WebSocket routes onto a foreign Node HTTP server.
52
- *
53
- * Host integrations such as the Vite plugin call this so `app.websocket()`
54
- * handlers work while HTTP is still served by the host dev server.
55
- */
56
- attachUserWebSocketUpgrades(server, options) {
57
- attachNodeHttpWebSocketUpgrades(server, {
58
- runtimeOrigin: this.runtimeOrigin,
59
- websocketHandlers: this.websocketHandlers,
60
- passthroughUnmatched: options?.passthroughUnmatched
61
- });
62
- }
63
- wireUserWebSocketUpgrades(server, preflight) {
64
- attachNodeHttpWebSocketUpgrades(server, {
65
- runtimeOrigin: this.runtimeOrigin,
66
- websocketHandlers: this.websocketHandlers,
67
- passthroughUnmatched: false,
68
- preflight
69
- });
70
- }
71
- shouldInjectHmrScript() {
72
- return shouldInjectHmrHtmlResponse(this.options?.watch === true, this.hmrManager ?? void 0);
73
- }
74
- isHtmlResponse(response) {
75
- return isHtmlResponse(response);
76
- }
77
- async maybeInjectHmrScript(response) {
78
- if (this.shouldInjectHmrScript() && this.isHtmlResponse(response)) {
79
- return injectHmrRuntimeIntoHtmlResponse(response);
1
+ import {} from 'node:http';
2
+ import path from 'node:path';
3
+ import { fileSystem } from '@ecopages/file-system';
4
+ import { setupAppRuntimePlugins } from '../../build/build-adapter.js';
5
+ import { installBuildRuntime } from '../../build/runtime/build-runtime.js';
6
+ import { appLogger } from '../../global/app-logger.js';
7
+ import { NodeClientBridge } from './node-client-bridge.js';
8
+ import { NodeHmrManager } from './node-hmr-manager.js';
9
+ import { ProjectWatcher } from '../../watchers/project-watcher.js';
10
+ import { attachNodeHttpWebSocketUpgrades, } from '../shared/ws/node-http-websocket-upgrades.js';
11
+ import { StaticSiteGenerator } from '../../static-site-generator/static-site-generator.js';
12
+ import { SharedServerAdapter } from '../shared/runtime/server-adapter.js';
13
+ import { ServerStaticBuilder } from '../shared/runtime/server-static-builder.js';
14
+ import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from '../../config/constants.js';
15
+ import { attachHmrToIntegrations, disposeDevResources, prepareRuntimePublicDir, startDevWarmup, } from '../shared/runtime/runtime-server-lifecycle.js';
16
+ import { resolveServeRuntimeOrigin } from '../shared/runtime/runtime-app-bootstrap.js';
17
+ import { NodeClientAbortError, NodeHttpRequestBridge } from './http-request-bridge.js';
18
+ import { NodeStaticPreviewHost } from './static-preview-host.js';
19
+ import { DefaultNodeServerDevRuntimeFactory } from './server-adapter-dependencies.js';
20
+ /**
21
+ * Node.js HTTP server adapter for the Ecopages runtime.
22
+ *
23
+ * `NodeServerAdapter` bridges the Node.js `http` module and the Ecopages
24
+ * `SharedServerAdapter` abstraction, translating between Node's
25
+ * `IncomingMessage`/`ServerResponse` API and the platform-agnostic Web
26
+ * `Request`/`Response` model.
27
+ *
28
+ * Lifecycle:
29
+ * 1. `createAdapter()` — calls `initialize()` and returns the public adapter result.
30
+ * 2. `completeInitialization(server)` — called once the HTTP server is listening.
31
+ * Conditionally wires HMR, WebSocket upgrades, and the file watcher when
32
+ * `options.watch` is `true`.
33
+ * 3. `handleRequest(request)` — delegates to `handleSharedRequest` for routing;
34
+ * intercepts `ClientAbortError` to return 499 instead of 500.
35
+ * 4. `buildStatic()` — spins up an ephemeral runtime server, generates all static
36
+ * pages against it, then tears it down.
37
+ *
38
+ * @see SharedServerAdapter for routing, caching and response handler logic.
39
+ */
40
+ export class NodeServerAdapter extends SharedServerAdapter {
41
+ serverInstance = null;
42
+ initialized = false;
43
+ apiHandlers;
44
+ staticRoutes;
45
+ errorHandler;
46
+ bridge = null;
47
+ hmrManager = null;
48
+ projectWatcher = null;
49
+ adapterDisposed = false;
50
+ deferRuntimeAssetSetup;
51
+ allowPortFallback;
52
+ previewHost;
53
+ requestBridge;
54
+ devRuntimeFactory;
55
+ /**
56
+ * Reference to the application-level WebSocket handlers map.
57
+ *
58
+ * @remarks
59
+ * This is a reference to the map owned by `AbstractApplicationAdapter`,
60
+ * passed in via the constructor. The Node adapter reads from it to wire
61
+ * WebSocket upgrades for user-registered patterns.
62
+ */
63
+ websocketHandlers = new Map();
64
+ /**
65
+ * Wires user WebSocket routes onto a foreign Node HTTP server.
66
+ *
67
+ * Host integrations such as the Vite plugin call this so `app.websocket()`
68
+ * handlers work while HTTP is still served by the host dev server.
69
+ */
70
+ attachUserWebSocketUpgrades(server, options) {
71
+ attachNodeHttpWebSocketUpgrades(server, {
72
+ runtimeOrigin: this.runtimeOrigin,
73
+ websocketHandlers: this.websocketHandlers,
74
+ passthroughUnmatched: options?.passthroughUnmatched,
75
+ });
80
76
  }
81
- return response;
82
- }
83
- constructor(options) {
84
- super(options);
85
- this.apiHandlers = options.apiHandlers || [];
86
- this.staticRoutes = options.staticRoutes || [];
87
- this.errorHandler = options.errorHandler;
88
- this.previewHost = options.previewHost;
89
- this.requestBridge = options.requestBridge;
90
- this.devRuntimeFactory = options.devRuntimeFactory;
91
- if (options.websocketHandlers) {
92
- this.websocketHandlers = options.websocketHandlers;
77
+ wireUserWebSocketUpgrades(server, preflight) {
78
+ attachNodeHttpWebSocketUpgrades(server, {
79
+ runtimeOrigin: this.runtimeOrigin,
80
+ websocketHandlers: this.websocketHandlers,
81
+ passthroughUnmatched: false,
82
+ preflight,
83
+ });
93
84
  }
94
- }
95
- /**
96
- * Prepares the adapter for use.
97
- *
98
- * Order is intentional:
99
- * 1. **Loaders** are registered first so processors and integrations can
100
- * reference loader-provided file types in their own plugins.
101
- * 2. **Public dir** is copied before any build so static assets are in `distDir`
102
- * before the first request arrives.
103
- * 3. **Plugins** (processors, then integrations) are set up after the public dir
104
- * is in place so they can safely reference dist-relative paths.
105
- * 4. **Router** is initialised last because it may depend on files written by
106
- * processors during their `setup()` calls.
107
- */
108
- async initialize() {
109
- installAppRuntimeBuildExecutor(this.appConfig);
110
- this.prepareRuntimePublicDir();
111
- await setupAppRuntimePlugins({
112
- appConfig: this.appConfig,
113
- runtimeOrigin: this.runtimeOrigin,
114
- hmrManager: this.hmrManager ?? void 0
115
- });
116
- await this.initializeSharedRouteHandling({
117
- staticRoutes: this.staticRoutes,
118
- hmrManager: this.hmrManager ?? void 0
119
- });
120
- this.staticSiteGenerator = new StaticSiteGenerator({ appConfig: this.appConfig });
121
- this.staticBuilder = new ServerStaticBuilder({
122
- appConfig: this.appConfig,
123
- staticSiteGenerator: this.staticSiteGenerator,
124
- serveOptions: this.serveOptions,
125
- apiHandlers: this.apiHandlers
126
- });
127
- this.initialized = true;
128
- }
129
- prepareRuntimePublicDir() {
130
- const srcPublicDir = path.join(this.appConfig.rootDir, this.appConfig.srcDir, this.appConfig.publicDir);
131
- if (fileSystem.exists(srcPublicDir)) {
132
- copyRuntimePublicDirIfChanged(srcPublicDir, path.join(this.appConfig.rootDir, this.appConfig.distDir));
85
+ /**
86
+ * @remarks
87
+ * `previewHost`, `requestBridge`, and `devRuntimeFactory` are optional on the
88
+ * public {@link NodeServerAdapterParams} so factory callers can omit them, but
89
+ * they are mandatory by the time the concrete adapter is constructed —
90
+ * {@link createNodeServerAdapter} fills in Node-specific defaults first. The
91
+ * constructor signature makes that invariant explicit instead of relying on
92
+ * non-null assertions.
93
+ */
94
+ constructor(options) {
95
+ super(options);
96
+ this.deferRuntimeAssetSetup = options.deferRuntimeAssetSetup === true;
97
+ this.allowPortFallback = options.allowPortFallback !== false;
98
+ this.apiHandlers = options.apiHandlers || [];
99
+ this.staticRoutes = options.staticRoutes || [];
100
+ this.errorHandler = options.errorHandler;
101
+ this.previewHost = options.previewHost;
102
+ this.requestBridge = options.requestBridge;
103
+ this.devRuntimeFactory = options.devRuntimeFactory;
104
+ if (options.websocketHandlers) {
105
+ this.websocketHandlers = options.websocketHandlers;
106
+ }
107
+ this.hostOwnsDevClient = options.hostOwnsDevClient === true;
133
108
  }
134
- fileSystem.ensureDir(path.join(this.appConfig.absolutePaths.distDir, RESOLVED_ASSETS_DIR));
135
- }
136
- getServerOptions() {
137
- return {
138
- ...this.serveOptions
139
- };
140
- }
141
- async buildStatic(options) {
142
- if (!this.initialized) {
143
- await this.initialize();
109
+ /**
110
+ * Prepares the adapter for use.
111
+ *
112
+ * Order is intentional:
113
+ * 1. **Loaders** are registered first so processors and integrations can
114
+ * reference loader-provided file types in their own plugins.
115
+ * 2. **Public dir** is copied before any build so static assets are in `distDir`
116
+ * before the first request arrives.
117
+ * 3. **Plugins** (processors, then integrations) are set up after the public dir
118
+ * is in place so they can safely reference dist-relative paths.
119
+ * 4. **Router** is initialised last because it may depend on files written by
120
+ * processors during their `setup()` calls.
121
+ */
122
+ async initialize() {
123
+ installBuildRuntime(this.appConfig);
124
+ prepareRuntimePublicDir(this.appConfig);
125
+ if (!this.deferRuntimeAssetSetup) {
126
+ await setupAppRuntimePlugins({
127
+ appConfig: this.appConfig,
128
+ runtimeOrigin: this.runtimeOrigin,
129
+ });
130
+ }
131
+ await this.initializeSharedRouteHandling({
132
+ staticRoutes: this.staticRoutes,
133
+ hmrManager: this.hmrManager ?? undefined,
134
+ });
135
+ this.staticSiteGenerator = new StaticSiteGenerator({ appConfig: this.appConfig });
136
+ this.staticBuilder = new ServerStaticBuilder({
137
+ appConfig: this.appConfig,
138
+ staticSiteGenerator: this.staticSiteGenerator,
139
+ serveOptions: this.serveOptions,
140
+ runtimeOrigin: this.runtimeOrigin,
141
+ needsServerBundle: this.apiHandlers.length > 0 || this.websocketHandlers.size > 0,
142
+ hmrManager: this.hmrManager ?? undefined,
143
+ });
144
+ this.initialized = true;
144
145
  }
145
- const baseUrl = resolveServeRuntimeOrigin(this.serveOptions);
146
- await this.staticBuilder.build(
147
- { preview: false, baseUrl, force: options?.force },
148
- {
149
- router: this.router,
150
- routeRendererFactory: this.routeRendererFactory,
151
- staticRoutes: this.staticRoutes
152
- }
153
- );
154
- if (!options?.preview) {
155
- return;
146
+ getServerOptions() {
147
+ return {
148
+ ...this.serveOptions,
149
+ };
156
150
  }
157
- await this.previewHost.start({
158
- appConfig: this.appConfig,
159
- hostname: String(this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME),
160
- port: Number(this.serveOptions.port || DEFAULT_ECOPAGES_PORT)
161
- });
162
- const previewHostname = this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME;
163
- const previewPort = this.serveOptions.port || DEFAULT_ECOPAGES_PORT;
164
- appLogger.info(`Preview running at http://${previewHostname}:${previewPort}`);
165
- }
166
- async createAdapter() {
167
- await this.initialize();
168
- return {
169
- getServerOptions: this.getServerOptions.bind(this),
170
- buildStatic: this.buildStatic.bind(this),
171
- completeInitialization: this.completeInitialization.bind(this),
172
- handleRequest: this.handleRequest.bind(this),
173
- attachUserWebSocketUpgrades: this.attachUserWebSocketUpgrades.bind(this),
174
- dispose: this.dispose.bind(this)
175
- };
176
- }
177
- /**
178
- * Releases dev-time resources owned by the adapter.
179
- *
180
- * @remarks
181
- * Safe to call multiple times. Does not stop the bound HTTP server — callers
182
- * should shut down transport through the runtime host before disposing.
183
- */
184
- async dispose() {
185
- if (this.adapterDisposed) {
186
- return;
151
+ async buildStatic(options) {
152
+ if (!this.initialized) {
153
+ await this.initialize();
154
+ }
155
+ const baseUrl = resolveServeRuntimeOrigin(this.serveOptions);
156
+ await this.staticBuilder.build({ baseUrl, force: options?.force }, {
157
+ router: this.router,
158
+ routeRendererFactory: this.routeRendererFactory,
159
+ staticRoutes: this.staticRoutes,
160
+ });
161
+ if (!options?.preview) {
162
+ return undefined;
163
+ }
164
+ return this.startPreviewServer();
187
165
  }
188
- this.adapterDisposed = true;
189
- await this.projectWatcher?.close();
190
- this.projectWatcher = null;
191
- this.hmrManager?.stop();
192
- this.hmrManager = null;
193
- this.bridge?.destroy();
194
- this.bridge = null;
195
- await this.previewHost.stop();
196
- }
197
- /**
198
- * Handles a single incoming Web `Request` and returns a Web `Response`.
199
- *
200
- * Delegates to `handleSharedRequest` for all routing, caching, and response
201
- * handler logic. The only Node-specific concern here is translating a
202
- * `ClientAbortError` — which the body `ReadableStream` raises when the
203
- * underlying socket closes early — into a 499 response so it does not
204
- * incorrectly surface as a 500 in application logs.
205
- */
206
- async handleRequest(request) {
207
- if (!this.initialized) {
208
- throw new Error("Node server adapter is not initialized. Call createAdapter() first.");
166
+ /**
167
+ * Serves an existing static export without running SSG. Used by e2e preview
168
+ * launchers after a shared prewarm build.
169
+ */
170
+ async servePreviewOnly() {
171
+ if (!this.initialized) {
172
+ await this.initialize();
173
+ }
174
+ const distPath = path.join(this.appConfig.rootDir, this.appConfig.distDir);
175
+ if (!fileSystem.exists(distPath)) {
176
+ throw new Error(`Cannot serve preview without building first: dist directory "${this.appConfig.distDir}" not found in "${this.appConfig.rootDir}".`);
177
+ }
178
+ return this.startPreviewServer();
179
+ }
180
+ async startPreviewServer() {
181
+ const activePreviewPort = await this.previewHost.start({
182
+ appConfig: this.appConfig,
183
+ hostname: String(this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME),
184
+ port: Number(this.serveOptions.port || DEFAULT_ECOPAGES_PORT),
185
+ allowPortFallback: this.allowPortFallback,
186
+ });
187
+ if (!activePreviewPort) {
188
+ return undefined;
189
+ }
190
+ const previewHostname = this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME;
191
+ return `http://${previewHostname}:${activePreviewPort}`;
209
192
  }
210
- try {
211
- const response = await this.handleSharedRequest(request, {
212
- apiHandlers: this.apiHandlers,
213
- errorHandler: this.errorHandler,
214
- serverInstance: this.serverInstance,
215
- hmrManager: this.hmrManager
216
- });
217
- return await this.maybeInjectHmrScript(response);
218
- } catch (error) {
219
- if (error instanceof NodeClientAbortError) {
220
- return new Response(null, { status: 499 });
221
- }
222
- throw error;
193
+ async createAdapter() {
194
+ await this.initialize();
195
+ return {
196
+ getServerOptions: this.getServerOptions.bind(this),
197
+ buildStatic: this.buildStatic.bind(this),
198
+ servePreviewOnly: this.servePreviewOnly.bind(this),
199
+ completeInitialization: this.completeInitialization.bind(this),
200
+ handleRequest: this.handleRequest.bind(this),
201
+ attachUserWebSocketUpgrades: this.attachUserWebSocketUpgrades.bind(this),
202
+ listStaticGenerationRoutes: (input) => this.router.listStaticGenerationRoutes(input),
203
+ dispose: this.dispose.bind(this),
204
+ };
223
205
  }
224
- }
225
- /**
226
- * Called once the HTTP server is bound and listening.
227
- *
228
- * When `options.watch` is `true` this method wires the full HMR pipeline:
229
- * - A `WebSocketServer` is attached to the existing HTTP server via the
230
- * `upgrade` event (no separate port needed).
231
- * - `NodeClientBridge` tracks active WebSocket connections and handles
232
- * broadcast + heartbeat cleanup.
233
- * - `NodeHmrManager` watches the filesystem and triggers incremental
234
- * rebuilds, notifying connected clients via the bridge.
235
- * - Shared watcher bootstrapping listens for route-level file changes and
236
- * refreshes the router and response handlers when pages are added or removed.
237
- *
238
- * WebSocket upgrade requests that do not match a known path are rejected with an
239
- * immediate socket destroy to prevent unhandled upgrade leaks.
240
- */
241
- async completeInitialization(server) {
242
- this.serverInstance = server;
243
- const hasUserWs = this.websocketHandlers.size > 0;
244
- if (this.options?.watch) {
245
- const devRuntime = this.devRuntimeFactory.create({ appConfig: this.appConfig });
246
- const wss = devRuntime.websocketServer;
247
- this.bridge = devRuntime.bridge;
248
- this.hmrManager = devRuntime.hmrManager;
249
- this.hmrManager.setEnabled(true);
250
- await this.hmrManager.buildRuntime();
251
- const hmrPreflight = (req, socket, head) => {
252
- const url = new URL(req.url ?? "/", this.runtimeOrigin);
253
- if (url.pathname !== "/_hmr") return false;
254
- wss.handleUpgrade(req, socket, head, (ws) => {
255
- this.bridge.subscribe(ws);
256
- ws.on("close", () => this.bridge.unsubscribe(ws));
257
- ws.on("error", (err) => appLogger.error("[HMR] WebSocket error:", err));
206
+ /**
207
+ * Releases dev-time resources owned by the adapter.
208
+ *
209
+ * @remarks
210
+ * Safe to call multiple times. Does not stop the bound HTTP server — callers
211
+ * should shut down transport through the runtime host before disposing.
212
+ */
213
+ async dispose() {
214
+ if (this.adapterDisposed) {
215
+ return;
216
+ }
217
+ this.adapterDisposed = true;
218
+ await disposeDevResources({
219
+ projectWatcher: this.projectWatcher,
220
+ appConfig: this.appConfig,
221
+ hmrManager: this.hmrManager,
222
+ bridge: this.bridge,
223
+ previewHost: this.previewHost,
258
224
  });
259
- return true;
260
- };
261
- if (hasUserWs) {
262
- this.wireUserWebSocketUpgrades(server, hmrPreflight);
263
- } else {
264
- server.on("upgrade", (req, socket, head) => {
265
- if (!hmrPreflight(req, socket, head)) {
266
- socket.destroy();
267
- }
225
+ this.projectWatcher = null;
226
+ this.hmrManager = null;
227
+ this.bridge = null;
228
+ }
229
+ /**
230
+ * Handles a single incoming Web `Request` and returns a Web `Response`.
231
+ *
232
+ * Delegates to `handleSharedRequest` for all routing, caching, and response
233
+ * handler logic. The only Node-specific concern here is translating a
234
+ * `ClientAbortError` — which the body `ReadableStream` raises when the
235
+ * underlying socket closes early — into a 499 response so it does not
236
+ * incorrectly surface as a 500 in application logs.
237
+ */
238
+ async handleRequest(request) {
239
+ if (!this.initialized) {
240
+ throw new Error('Node server adapter is not initialized. Call createAdapter() first.');
241
+ }
242
+ try {
243
+ const response = await this.handleSharedRequest(request, {
244
+ apiHandlers: this.apiHandlers,
245
+ errorHandler: this.errorHandler,
246
+ serverInstance: this.serverInstance,
247
+ hmrManager: this.hmrManager ?? undefined,
248
+ });
249
+ return response;
250
+ }
251
+ catch (error) {
252
+ if (error instanceof NodeClientAbortError) {
253
+ /**
254
+ * The client disconnected before the response was sent (killed tab,
255
+ * network drop, or programmatic abort). This is a normal browser behaviour,
256
+ * not a server fault. Return 499 (Client Closed Request) silently so the
257
+ * error does not surface in application logs as a 500.
258
+ */
259
+ return new Response(null, { status: 499 });
260
+ }
261
+ throw error;
262
+ }
263
+ }
264
+ /**
265
+ * Called once the HTTP server is bound and listening.
266
+ *
267
+ * When `options.watch` is `true` this method wires the full HMR pipeline:
268
+ * - A `WebSocketServer` is attached to the existing HTTP server via the
269
+ * `upgrade` event (no separate port needed).
270
+ * - `NodeClientBridge` tracks active WebSocket connections and handles
271
+ * broadcast + heartbeat cleanup.
272
+ * - `NodeHmrManager` watches the filesystem and triggers incremental
273
+ * rebuilds, notifying connected clients via the bridge.
274
+ * - Shared watcher bootstrapping listens for route-level file changes and
275
+ * refreshes the router and response handlers when pages are added or removed.
276
+ *
277
+ * WebSocket upgrade requests that do not match a known path are rejected with an
278
+ * immediate socket destroy to prevent unhandled upgrade leaks.
279
+ */
280
+ async completeInitialization(server) {
281
+ this.serverInstance = server;
282
+ const hasUserWs = this.websocketHandlers.size > 0;
283
+ if (this.options?.watch) {
284
+ const devRuntime = this.devRuntimeFactory.create({ appConfig: this.appConfig });
285
+ const wss = devRuntime.websocketServer;
286
+ this.bridge = devRuntime.bridge;
287
+ this.hmrManager = devRuntime.hmrManager;
288
+ this.hmrManager.setEnabled(true);
289
+ await this.hmrManager.ensureRuntimeReady();
290
+ const hmrPreflight = (req, socket, head) => {
291
+ const url = new URL(req.url ?? '/', this.runtimeOrigin);
292
+ if (url.pathname !== '/_hmr')
293
+ return false;
294
+ wss.handleUpgrade(req, socket, head, (ws) => {
295
+ this.bridge.subscribe(ws);
296
+ ws.on('close', () => this.bridge.unsubscribe(ws));
297
+ ws.on('error', (err) => appLogger.error('[HMR] WebSocket error:', err));
298
+ });
299
+ return true;
300
+ };
301
+ if (hasUserWs) {
302
+ this.wireUserWebSocketUpgrades(server, hmrPreflight);
303
+ }
304
+ else {
305
+ server.on('upgrade', (req, socket, head) => {
306
+ if (!hmrPreflight(req, socket, head)) {
307
+ socket.destroy();
308
+ }
309
+ });
310
+ }
311
+ attachHmrToIntegrations(this.appConfig, this.hmrManager);
312
+ startDevWarmup({
313
+ appConfig: this.appConfig,
314
+ runtimeOrigin: this.runtimeOrigin,
315
+ });
316
+ this.configureSharedResponseHandlers(this.staticRoutes, this.hmrManager);
317
+ await this.startDevStaticRoutePrewarmWhenReady();
318
+ const watcher = new ProjectWatcher({
319
+ config: this.appConfig,
320
+ refreshRouterRoutesCallback: this.createSharedWatchRefreshCallback({
321
+ staticRoutes: this.staticRoutes,
322
+ hmrManager: this.hmrManager ?? undefined,
323
+ }),
324
+ hmrManager: this.hmrManager ?? undefined,
325
+ bridge: this.bridge,
326
+ hostOwnsDevClient: this.hostOwnsDevClient,
327
+ });
328
+ this.projectWatcher = watcher;
329
+ await watcher.createWatcherSubscription();
330
+ }
331
+ else if (hasUserWs) {
332
+ this.wireUserWebSocketUpgrades(server);
333
+ }
334
+ appLogger.debug('Node server adapter initialization completed', {
335
+ apiHandlers: this.apiHandlers.length,
336
+ staticRoutes: this.staticRoutes.length,
337
+ hasErrorHandler: !!this.errorHandler,
338
+ hmrEnabled: !!this.hmrManager?.isEnabled(),
268
339
  });
269
- }
270
- const browserBuildPlugins = getAppBrowserBuildPlugins(this.appConfig);
271
- this.hmrManager.setPlugins(browserBuildPlugins);
272
- for (const integration of this.appConfig.integrations) {
273
- integration.setHmrManager(this.hmrManager);
274
- }
275
- this.configureSharedResponseHandlers(this.staticRoutes, this.hmrManager);
276
- const watcher = new ProjectWatcher({
277
- config: this.appConfig,
278
- refreshRouterRoutesCallback: this.createSharedWatchRefreshCallback({
279
- staticRoutes: this.staticRoutes,
280
- hmrManager: this.hmrManager
281
- }),
282
- hmrManager: this.hmrManager,
283
- bridge: this.bridge
284
- });
285
- this.projectWatcher = watcher;
286
- await watcher.createWatcherSubscription();
287
- } else if (hasUserWs) {
288
- this.wireUserWebSocketUpgrades(server);
289
340
  }
290
- appLogger.debug("Node server adapter initialization completed", {
291
- apiHandlers: this.apiHandlers.length,
292
- staticRoutes: this.staticRoutes.length,
293
- hasErrorHandler: !!this.errorHandler,
294
- hmrEnabled: !!this.hmrManager?.isEnabled()
295
- });
296
- }
297
341
  }
298
- async function createNodeServerAdapter(params) {
299
- const runtimeOrigin = params.runtimeOrigin ?? resolveServeRuntimeOrigin(params.serveOptions);
300
- const previewHost = params.previewHost ?? new NodeStaticPreviewHost();
301
- const requestBridge = params.requestBridge ?? new NodeHttpRequestBridge();
302
- const devRuntimeFactory = params.devRuntimeFactory ?? new DefaultNodeServerDevRuntimeFactory();
303
- const adapter = new NodeServerAdapter({
304
- ...params,
305
- runtimeOrigin,
306
- previewHost,
307
- requestBridge,
308
- devRuntimeFactory
309
- });
310
- return adapter.createAdapter();
342
+ /**
343
+ * Factory function that creates and fully initialises a `NodeServerAdapter`.
344
+ *
345
+ * `runtimeOrigin` is derived from `serveOptions` when not explicitly provided,
346
+ * so callers only need to set it when the server is behind a reverse proxy that
347
+ * changes the effective host or port.
348
+ */
349
+ export async function createNodeServerAdapter(params) {
350
+ const runtimeOrigin = params.runtimeOrigin ?? resolveServeRuntimeOrigin(params.serveOptions);
351
+ const previewHost = params.previewHost ?? new NodeStaticPreviewHost();
352
+ const requestBridge = params.requestBridge ?? new NodeHttpRequestBridge();
353
+ const devRuntimeFactory = params.devRuntimeFactory ?? new DefaultNodeServerDevRuntimeFactory();
354
+ const adapter = new NodeServerAdapter({
355
+ ...params,
356
+ runtimeOrigin,
357
+ previewHost,
358
+ requestBridge,
359
+ devRuntimeFactory,
360
+ });
361
+ return adapter.createAdapter();
311
362
  }
312
- export {
313
- NodeServerAdapter,
314
- createNodeServerAdapter
315
- };