@ecopages/core 0.2.0-alpha.8 → 0.2.1-beta.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 (471) hide show
  1. package/README.md +79 -28
  2. package/package.json +94 -116
  3. package/src/adapters/README.md +2 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +19 -115
  12. package/src/adapters/bun/hmr-manager.js +25 -301
  13. package/src/adapters/bun/index.d.ts +1 -1
  14. package/src/adapters/bun/index.js +2 -2
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +100 -32
  18. package/src/adapters/bun/server-adapter.js +142 -65
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +1 -5
  24. package/src/adapters/index.js +1 -7
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +22 -103
  31. package/src/adapters/node/node-hmr-manager.js +26 -289
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +19 -42
  37. package/src/adapters/node/server-adapter.js +94 -139
  38. package/src/adapters/node/static-content-server.d.ts +1 -1
  39. package/src/adapters/node/static-content-server.js +1 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/adapters/shared/define-api-handler.d.ts +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
  53. package/src/adapters/shared/fs-server-response-matcher.js +72 -46
  54. package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
  55. package/src/adapters/shared/hmr-html-response.d.ts +1 -1
  56. package/src/adapters/shared/hmr-html-response.js +4 -3
  57. package/src/adapters/shared/render-context.d.ts +5 -3
  58. package/src/adapters/shared/render-context.js +24 -1
  59. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  60. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  61. package/src/adapters/shared/runtime-host.d.ts +12 -0
  62. package/src/adapters/shared/server-adapter.d.ts +22 -11
  63. package/src/adapters/shared/server-adapter.js +183 -133
  64. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  65. package/src/adapters/shared/server-route-handler.js +4 -4
  66. package/src/adapters/shared/server-static-builder.d.ts +8 -7
  67. package/src/adapters/shared/server-static-builder.js +6 -5
  68. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  69. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  70. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  71. package/src/build/README.md +57 -67
  72. package/src/build/browser-runtime-manifest.d.ts +31 -0
  73. package/src/build/browser-runtime-manifest.js +61 -0
  74. package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
  75. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  76. package/src/build/browser-runtime-plugin.d.ts +78 -0
  77. package/src/build/browser-runtime-plugin.js +173 -0
  78. package/src/build/build-adapter.d.ts +384 -63
  79. package/src/build/build-adapter.js +129 -54
  80. package/src/build/build-manifest.d.ts +6 -0
  81. package/src/build/build-manifest.js +21 -2
  82. package/src/build/build-types.d.ts +2 -2
  83. package/src/build/rolldown-adapter-helpers.d.ts +58 -0
  84. package/src/build/rolldown-adapter-helpers.js +265 -0
  85. package/src/build/rolldown-build-adapter.d.ts +28 -0
  86. package/src/build/rolldown-build-adapter.js +65 -0
  87. package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
  88. package/src/build/rolldown-dev-build-adapter.js +166 -0
  89. package/src/build/rolldown-plugin-bridge.d.ts +59 -0
  90. package/src/build/rolldown-plugin-bridge.js +199 -0
  91. package/src/build/runtime-build-executor.d.ts +15 -7
  92. package/src/build/runtime-build-executor.js +8 -9
  93. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  94. package/src/build/runtime-build-output-normalizer.js +111 -0
  95. package/src/build/serialized-build-executor.d.ts +64 -0
  96. package/src/build/serialized-build-executor.js +63 -0
  97. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  98. package/src/build/server-side-css-shim-plugin.js +35 -0
  99. package/src/cache/index.d.ts +6 -0
  100. package/src/cache/index.js +6 -0
  101. package/src/cache/module-parse-cache.d.ts +65 -0
  102. package/src/cache/module-parse-cache.js +75 -0
  103. package/src/config/README.md +5 -2
  104. package/src/config/config-builder.d.ts +41 -13
  105. package/src/config/config-builder.js +62 -24
  106. package/src/declarations.d.ts +1 -1
  107. package/src/dev/host-runtime.d.ts +10 -0
  108. package/src/dev/host-runtime.js +24 -0
  109. package/src/dev/sc-server.d.ts +1 -1
  110. package/src/dev/sc-server.js +1 -1
  111. package/src/eco/eco.browser.d.ts +2 -0
  112. package/src/eco/eco.browser.js +88 -0
  113. package/src/eco/eco.js +50 -45
  114. package/src/eco/eco.types.d.ts +60 -8
  115. package/src/eco/eco.utils.d.ts +1 -40
  116. package/src/eco/eco.utils.js +5 -35
  117. package/src/eco/global-injector-map.d.ts +3 -3
  118. package/src/eco/global-injector-map.js +2 -2
  119. package/src/eco/lazy-injector-map.d.ts +2 -2
  120. package/src/errors/index.d.ts +1 -0
  121. package/src/errors/index.js +3 -1
  122. package/src/hmr/client/hmr-runtime.js +9 -1
  123. package/src/hmr/hmr-strategy.d.ts +16 -13
  124. package/src/hmr/hmr-strategy.js +22 -7
  125. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  126. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  127. package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
  128. package/src/hmr/strategies/js-hmr-strategy.js +5 -10
  129. package/src/index.browser.d.ts +2 -2
  130. package/src/index.browser.js +1 -1
  131. package/src/index.d.ts +3 -2
  132. package/src/index.js +15 -4
  133. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
  134. package/src/integrations/ghtml/ghtml-renderer.js +24 -29
  135. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  136. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  137. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  138. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  139. package/src/plugins/README.md +1 -0
  140. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  141. package/src/plugins/alias-resolver-cache.js +106 -0
  142. package/src/plugins/alias-resolver-plugin.d.ts +5 -1
  143. package/src/plugins/alias-resolver-plugin.js +19 -7
  144. package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
  145. package/src/plugins/eco-component-meta-plugin.js +43 -25
  146. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  147. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  148. package/src/plugins/integration-plugin.d.ts +136 -42
  149. package/src/plugins/integration-plugin.js +99 -31
  150. package/src/plugins/processor.d.ts +4 -2
  151. package/src/plugins/processor.js +8 -3
  152. package/src/plugins/source-transform.d.ts +46 -0
  153. package/src/plugins/source-transform.js +71 -0
  154. package/src/route-renderer/GRAPH.md +80 -318
  155. package/src/route-renderer/README.md +74 -78
  156. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  157. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  158. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  159. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  160. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  161. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  162. package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
  163. package/src/route-renderer/orchestration/integration-renderer.js +660 -258
  164. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  165. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  166. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  167. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  168. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  169. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  170. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  171. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  172. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  173. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  174. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  175. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  176. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  177. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  178. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  179. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  180. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  181. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  182. package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
  183. package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
  184. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  185. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  186. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  187. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  188. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  189. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  190. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  191. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  192. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  193. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  194. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  195. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  196. package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
  197. package/src/route-renderer/page-loading/page-module-loader.js +8 -5
  198. package/src/route-renderer/route-renderer.d.ts +31 -23
  199. package/src/route-renderer/route-renderer.js +17 -24
  200. package/src/router/README.md +76 -8
  201. package/src/router/client/navigation-coordinator.d.ts +20 -0
  202. package/src/router/client/navigation-coordinator.js +2 -2
  203. package/src/router/server/route-registry.d.ts +78 -0
  204. package/src/router/server/route-registry.js +262 -0
  205. package/src/services/README.md +1 -2
  206. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  207. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  208. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
  209. package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
  210. package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
  211. package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
  212. package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
  215. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  216. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  217. package/src/services/assets/asset-processing-service/index.d.ts +6 -5
  218. package/src/services/assets/asset-processing-service/index.js +6 -5
  219. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  220. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  221. package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
  222. package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
  223. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  229. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
  230. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
  231. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
  235. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  236. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
  237. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
  239. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  240. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  241. package/src/services/assets/browser-bundle.service.d.ts +44 -3
  242. package/src/services/assets/browser-bundle.service.js +15 -7
  243. package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
  244. package/src/services/html/html-rewriter-provider.service.js +4 -1
  245. package/src/services/html/html-transformer.service.d.ts +22 -3
  246. package/src/services/html/html-transformer.service.js +101 -35
  247. package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
  248. package/src/services/invalidation/development-invalidation.service.js +1 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/page-module-import.service.d.ts +32 -8
  258. package/src/services/module-loading/page-module-import.service.js +83 -22
  259. package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
  260. package/src/services/module-loading/server-module-transpiler.service.js +5 -2
  261. package/src/services/module-loading/source-module-support.d.ts +5 -0
  262. package/src/services/module-loading/source-module-support.js +8 -0
  263. package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
  264. package/src/services/runtime-state/dev-graph.service.js +10 -10
  265. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
  266. package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
  267. package/src/static-site-generator/static-site-generator.d.ts +23 -28
  268. package/src/static-site-generator/static-site-generator.js +119 -156
  269. package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
  270. package/src/types/internal-types.js +0 -0
  271. package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
  272. package/src/types/public-types.js +0 -0
  273. package/src/utils/html-escaping.d.ts +7 -0
  274. package/src/utils/html-escaping.js +6 -0
  275. package/src/utils/locals-utils.d.ts +1 -1
  276. package/src/utils/parse-cli-args.d.ts +4 -1
  277. package/src/utils/parse-cli-args.js +16 -1
  278. package/src/utils/resolve-work-dir.js +1 -1
  279. package/src/watchers/project-watcher.d.ts +4 -4
  280. package/src/watchers/project-watcher.js +35 -41
  281. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  282. package/src/watchers/project-watcher.test-helpers.js +5 -5
  283. package/CHANGELOG.md +0 -31
  284. package/src/adapters/abstract/application-adapter.ts +0 -337
  285. package/src/adapters/abstract/router-adapter.ts +0 -30
  286. package/src/adapters/abstract/server-adapter.ts +0 -79
  287. package/src/adapters/bun/client-bridge.ts +0 -62
  288. package/src/adapters/bun/create-app.ts +0 -189
  289. package/src/adapters/bun/hmr-manager.ts +0 -409
  290. package/src/adapters/bun/index.ts +0 -2
  291. package/src/adapters/bun/server-adapter.ts +0 -499
  292. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  293. package/src/adapters/bun/server-lifecycle.js +0 -92
  294. package/src/adapters/bun/server-lifecycle.ts +0 -124
  295. package/src/adapters/index.ts +0 -6
  296. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  297. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  298. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  299. package/src/adapters/node/create-app.ts +0 -179
  300. package/src/adapters/node/index.d.ts +0 -6
  301. package/src/adapters/node/index.js +0 -11
  302. package/src/adapters/node/index.ts +0 -16
  303. package/src/adapters/node/node-client-bridge.ts +0 -79
  304. package/src/adapters/node/node-hmr-manager.ts +0 -381
  305. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  306. package/src/adapters/node/runtime-adapter.js +0 -306
  307. package/src/adapters/node/runtime-adapter.ts +0 -439
  308. package/src/adapters/node/server-adapter.ts +0 -488
  309. package/src/adapters/node/static-content-server.ts +0 -239
  310. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  311. package/src/adapters/node/write-runtime-manifest.js +0 -12
  312. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/define-api-handler.ts +0 -66
  316. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  317. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  318. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  319. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  320. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  321. package/src/adapters/shared/hmr-html-response.ts +0 -52
  322. package/src/adapters/shared/render-context.ts +0 -120
  323. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  324. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  325. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  326. package/src/adapters/shared/server-adapter.ts +0 -489
  327. package/src/adapters/shared/server-route-handler.ts +0 -153
  328. package/src/adapters/shared/server-static-builder.ts +0 -166
  329. package/src/build/build-adapter.ts +0 -361
  330. package/src/build/build-manifest.ts +0 -54
  331. package/src/build/build-types.ts +0 -83
  332. package/src/build/dev-build-coordinator.d.ts +0 -74
  333. package/src/build/dev-build-coordinator.js +0 -161
  334. package/src/build/dev-build-coordinator.ts +0 -221
  335. package/src/build/esbuild-build-adapter.d.ts +0 -72
  336. package/src/build/esbuild-build-adapter.js +0 -422
  337. package/src/build/esbuild-build-adapter.ts +0 -559
  338. package/src/build/runtime-build-executor.ts +0 -34
  339. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  340. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  341. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  342. package/src/config/config-builder.ts +0 -706
  343. package/src/constants.ts +0 -54
  344. package/src/create-app.ts +0 -87
  345. package/src/dev/sc-server.ts +0 -143
  346. package/src/eco/component-render-context.d.ts +0 -105
  347. package/src/eco/component-render-context.js +0 -87
  348. package/src/eco/component-render-context.ts +0 -224
  349. package/src/eco/eco.ts +0 -242
  350. package/src/eco/eco.types.ts +0 -221
  351. package/src/eco/eco.utils.ts +0 -89
  352. package/src/eco/global-injector-map.ts +0 -112
  353. package/src/eco/lazy-injector-map.ts +0 -120
  354. package/src/eco/module-dependencies.ts +0 -75
  355. package/src/errors/http-error.ts +0 -72
  356. package/src/errors/index.ts +0 -2
  357. package/src/errors/locals-access-error.ts +0 -7
  358. package/src/global/app-logger.ts +0 -4
  359. package/src/hmr/client/hmr-runtime.ts +0 -152
  360. package/src/hmr/hmr-strategy.ts +0 -172
  361. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  362. package/src/hmr/hmr.test.e2e.ts +0 -66
  363. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  364. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  365. package/src/index.browser.ts +0 -3
  366. package/src/index.ts +0 -5
  367. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  368. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  369. package/src/internal-types.ts +0 -232
  370. package/src/plugins/alias-resolver-plugin.ts +0 -63
  371. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  372. package/src/plugins/integration-plugin.ts +0 -226
  373. package/src/plugins/processor.ts +0 -240
  374. package/src/plugins/runtime-capability.ts +0 -14
  375. package/src/public-types.ts +0 -1317
  376. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  377. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  378. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  379. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  380. package/src/route-renderer/component-graph/component-graph.js +0 -72
  381. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  382. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  383. package/src/route-renderer/component-graph/component-marker.js +0 -46
  384. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  385. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  386. package/src/route-renderer/component-graph/component-reference.js +0 -19
  387. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  388. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  389. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  390. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  391. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  392. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  393. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  394. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  395. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  396. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  397. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  398. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  399. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  400. package/src/route-renderer/route-renderer.ts +0 -115
  401. package/src/router/client/link-intent.test.browser.ts +0 -51
  402. package/src/router/client/link-intent.ts +0 -92
  403. package/src/router/client/navigation-coordinator.ts +0 -433
  404. package/src/router/server/fs-router-scanner.d.ts +0 -41
  405. package/src/router/server/fs-router-scanner.js +0 -156
  406. package/src/router/server/fs-router-scanner.ts +0 -219
  407. package/src/router/server/fs-router.d.ts +0 -26
  408. package/src/router/server/fs-router.js +0 -100
  409. package/src/router/server/fs-router.ts +0 -122
  410. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  411. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  412. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  413. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  414. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  415. package/src/services/assets/asset-processing-service/index.ts +0 -5
  416. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  417. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  418. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  419. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  420. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  421. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  422. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  423. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  424. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  425. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  426. package/src/services/assets/browser-bundle.service.ts +0 -53
  427. package/src/services/cache/cache.types.ts +0 -126
  428. package/src/services/cache/index.ts +0 -18
  429. package/src/services/cache/memory-cache-store.ts +0 -130
  430. package/src/services/cache/page-cache-service.ts +0 -202
  431. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  432. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  433. package/src/services/html/html-transformer.service.ts +0 -279
  434. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  435. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  436. package/src/services/module-loading/page-module-import.service.ts +0 -200
  437. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  438. package/src/services/module-loading/server-loader.service.js +0 -32
  439. package/src/services/module-loading/server-loader.service.ts +0 -130
  440. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  441. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  442. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  444. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  445. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  446. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  447. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  448. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  449. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  450. package/src/services/validation/schema-validation-service.ts +0 -204
  451. package/src/services/validation/standard-schema.types.ts +0 -68
  452. package/src/static-site-generator/static-site-generator.ts +0 -462
  453. package/src/utils/css.d.ts +0 -1
  454. package/src/utils/css.js +0 -7
  455. package/src/utils/css.ts +0 -5
  456. package/src/utils/deep-merge.ts +0 -47
  457. package/src/utils/hash.ts +0 -5
  458. package/src/utils/html.ts +0 -1
  459. package/src/utils/invariant.ts +0 -15
  460. package/src/utils/locals-utils.ts +0 -37
  461. package/src/utils/parse-cli-args.ts +0 -83
  462. package/src/utils/path-utils.module.ts +0 -14
  463. package/src/utils/resolve-work-dir.ts +0 -45
  464. package/src/utils/runtime.ts +0 -44
  465. package/src/utils/server-utils.module.ts +0 -67
  466. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  467. package/src/watchers/project-watcher.ts +0 -363
  468. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  469. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  470. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  471. /package/src/{constants.js → config/constants.js} +0 -0
@@ -1,14 +1,8 @@
1
- import { EcopagesApp, createApp } from "./bun/create-app.js";
1
+ import { EcopagesApp, createApp } from "./create-app.js";
2
2
  import { defineApiHandler, defineGroupHandler } from "./shared/define-api-handler.js";
3
- import { NodeServerAdapter, createNodeServerAdapter } from "./node/server-adapter.js";
4
- import { EcopagesApp as EcopagesApp2, createNodeApp } from "./node/create-app.js";
5
3
  export {
6
4
  EcopagesApp,
7
- EcopagesApp2 as NodeAdapterEcopagesApp,
8
- NodeServerAdapter,
9
5
  createApp,
10
- createNodeApp,
11
- createNodeServerAdapter,
12
6
  defineApiHandler,
13
7
  defineGroupHandler
14
8
  };
@@ -1,21 +1,24 @@
1
- import { type Server as NodeServerInstance } from 'node:http';
2
- import type { EcoPagesAppConfig } from '../../internal-types.js';
3
- import { type ApplicationAdapterOptions } from '../abstract/application-adapter.js';
4
1
  import { SharedApplicationAdapter } from '../shared/application-adapter.js';
5
- import { type NodeServerAdapterResult } from './server-adapter.js';
6
- export interface EcopagesAppOptions extends ApplicationAdapterOptions {
7
- appConfig: EcoPagesAppConfig;
8
- serverOptions?: Record<string, any>;
9
- }
10
- export declare class EcopagesApp extends SharedApplicationAdapter<EcopagesAppOptions, NodeServerInstance, Request> {
2
+ import type { RuntimeHost } from '../shared/runtime-host.js';
3
+ import type { EcopagesAppOptions } from '../create-app.js';
4
+ import { type NodeServerAdapterResult, createNodeServerAdapter } from './server-adapter.js';
5
+ import type { NodeServerInstance } from './server-adapter.js';
6
+ export declare class NodeEcopagesApp extends SharedApplicationAdapter<EcopagesAppOptions, NodeServerInstance, Request> {
11
7
  serverAdapter: NodeServerAdapterResult | undefined;
12
8
  private server;
13
9
  private runtimeOrigin;
10
+ private readonly runtimeHost;
11
+ constructor(options: EcopagesAppOptions, dependencies: {
12
+ runtimeHost: RuntimeHost<NodeServerInstance, {
13
+ port?: number;
14
+ hostname?: string;
15
+ }>;
16
+ });
17
+ protected createServerAdapter(params: Parameters<typeof createNodeServerAdapter>[0]): Promise<NodeServerAdapterResult>;
14
18
  stop(force?: boolean): Promise<void>;
15
19
  protected initializeServerAdapter(): Promise<NodeServerAdapterResult>;
16
20
  start(): Promise<NodeServerInstance | void>;
17
- private createWebRequest;
18
- private sendNodeResponse;
19
21
  fetch(request: Request): Promise<Response>;
20
22
  }
21
- export declare function createNodeApp(options: EcopagesAppOptions): Promise<EcopagesApp>;
23
+ export declare function createNodeApp(options: EcopagesAppOptions): Promise<NodeEcopagesApp>;
24
+ export declare function createApp(options: EcopagesAppOptions): Promise<NodeEcopagesApp>;
@@ -1,53 +1,43 @@
1
- import { createServer } from "node:http";
2
- import { Readable } from "node:stream";
3
- import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../constants.js";
4
1
  import { appLogger } from "../../global/app-logger.js";
5
- import {} from "../abstract/application-adapter.js";
6
2
  import { SharedApplicationAdapter } from "../shared/application-adapter.js";
3
+ import { resolveRuntimeBinding } from "../shared/runtime-app-bootstrap.js";
7
4
  import { createNodeServerAdapter } from "./server-adapter.js";
8
- class EcopagesApp extends SharedApplicationAdapter {
5
+ import { NodeHttpRequestBridge } from "./http-request-bridge.js";
6
+ import { NodeRuntimeHost } from "./runtime-host.js";
7
+ class NodeEcopagesApp extends SharedApplicationAdapter {
9
8
  serverAdapter;
10
9
  server = null;
11
10
  runtimeOrigin = "";
11
+ runtimeHost;
12
+ constructor(options, dependencies) {
13
+ super(options);
14
+ this.runtimeHost = dependencies.runtimeHost;
15
+ }
16
+ createServerAdapter(params) {
17
+ return createNodeServerAdapter(params);
18
+ }
12
19
  async stop(force = true) {
13
20
  if (!this.server) {
14
21
  return;
15
22
  }
16
23
  const activeServer = this.server;
17
24
  this.server = null;
18
- await new Promise((resolve, reject) => {
19
- activeServer.close((error) => {
20
- if (error) {
21
- reject(error);
22
- return;
23
- }
24
- resolve();
25
- });
26
- if (force) {
27
- activeServer.closeAllConnections();
28
- }
29
- });
25
+ await this.runtimeHost.stop(activeServer, { force });
30
26
  }
31
27
  async initializeServerAdapter() {
32
- const { dev } = this.cliArgs;
33
- const { port: cliPort, hostname: cliHostname } = this.cliArgs;
34
- const envPort = process.env.ECOPAGES_PORT;
35
- const envHostname = process.env.ECOPAGES_HOSTNAME;
36
- const preferredPort = cliPort ?? (envPort ? Number(envPort) : void 0) ?? DEFAULT_ECOPAGES_PORT;
37
- const preferredHostname = cliHostname ?? envHostname ?? DEFAULT_ECOPAGES_HOSTNAME;
38
- this.runtimeOrigin = `http://${preferredHostname}:${preferredPort}`;
39
- return createNodeServerAdapter({
28
+ const binding = resolveRuntimeBinding({
29
+ cliArgs: this.cliArgs,
30
+ serverOptions: this.serverOptions
31
+ });
32
+ this.runtimeOrigin = binding.runtimeOrigin;
33
+ return this.createServerAdapter({
40
34
  runtimeOrigin: this.runtimeOrigin,
41
35
  appConfig: this.appConfig,
42
36
  apiHandlers: this.apiHandlers,
43
37
  staticRoutes: this.staticRoutes,
44
38
  errorHandler: this.errorHandler,
45
- options: { watch: dev },
46
- serveOptions: {
47
- port: preferredPort,
48
- hostname: preferredHostname,
49
- ...this.serverOptions
50
- }
39
+ options: { watch: binding.watch },
40
+ serveOptions: binding.serveOptions
51
41
  });
52
42
  }
53
43
  async start() {
@@ -69,64 +59,17 @@ class EcopagesApp extends SharedApplicationAdapter {
69
59
  return;
70
60
  }
71
61
  const serveOptions = this.serverAdapter.getServerOptions();
72
- const hostname = String(serveOptions.hostname ?? DEFAULT_ECOPAGES_HOSTNAME);
73
- const port = Number(serveOptions.port ?? DEFAULT_ECOPAGES_PORT);
74
- this.runtimeOrigin = `http://${hostname}:${port}`;
75
- this.server = createServer(async (req, res) => {
76
- try {
77
- const webRequest = this.createWebRequest(req);
78
- const response = await this.serverAdapter.handleRequest(webRequest);
79
- await this.sendNodeResponse(res, response);
80
- } catch (error) {
81
- appLogger.error("Node server adapter request failed", error);
82
- res.statusCode = 500;
83
- res.end("Internal Server Error");
62
+ this.server = await this.runtimeHost.start({
63
+ serveOptions,
64
+ handleRequest: async (request) => await this.serverAdapter.handleRequest(request),
65
+ onError: async () => {
84
66
  }
85
67
  });
86
- await new Promise((resolve) => {
87
- this.server.listen(port, hostname, () => resolve());
88
- });
68
+ this.runtimeOrigin = this.runtimeHost.getOrigin(this.server, serveOptions);
89
69
  await this.serverAdapter.completeInitialization(this.server);
90
70
  appLogger.info(`Node server running at ${this.runtimeOrigin}`);
91
71
  return this.server;
92
72
  }
93
- createWebRequest(req) {
94
- const url = new URL(req.url ?? "/", this.runtimeOrigin);
95
- const headers = new Headers();
96
- for (const [key, value] of Object.entries(req.headers)) {
97
- if (Array.isArray(value)) {
98
- for (const item of value) {
99
- headers.append(key, item);
100
- }
101
- continue;
102
- }
103
- if (value !== void 0) {
104
- headers.set(key, value);
105
- }
106
- }
107
- const method = (req.method ?? "GET").toUpperCase();
108
- const requestInit = {
109
- method,
110
- headers
111
- };
112
- if (method !== "GET" && method !== "HEAD") {
113
- requestInit.body = Readable.toWeb(req);
114
- requestInit.duplex = "half";
115
- }
116
- return new Request(url, requestInit);
117
- }
118
- async sendNodeResponse(res, response) {
119
- res.statusCode = response.status;
120
- response.headers.forEach((value, key) => {
121
- res.setHeader(key, value);
122
- });
123
- if (!response.body) {
124
- res.end();
125
- return;
126
- }
127
- const body = Buffer.from(await response.arrayBuffer());
128
- res.end(body);
129
- }
130
73
  async fetch(request) {
131
74
  if (!this.serverAdapter) {
132
75
  this.serverAdapter = await this.initializeServerAdapter();
@@ -135,9 +78,15 @@ class EcopagesApp extends SharedApplicationAdapter {
135
78
  }
136
79
  }
137
80
  async function createNodeApp(options) {
138
- return new EcopagesApp(options);
81
+ return new NodeEcopagesApp(options, {
82
+ runtimeHost: new NodeRuntimeHost(new NodeHttpRequestBridge())
83
+ });
84
+ }
85
+ async function createApp(options) {
86
+ return createNodeApp(options);
139
87
  }
140
88
  export {
141
- EcopagesApp,
89
+ NodeEcopagesApp,
90
+ createApp,
142
91
  createNodeApp
143
92
  };
@@ -0,0 +1,57 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ /**
3
+ * Signals that the remote client closed the HTTP exchange before the Node
4
+ * adapter finished reading or writing the body.
5
+ *
6
+ * @remarks
7
+ * This error represents a transport-level disconnect, not an application
8
+ * failure. Higher layers may safely suppress logging for this error when the
9
+ * client socket is already gone and no meaningful response can still be sent.
10
+ */
11
+ export declare class NodeClientAbortError extends Error {
12
+ /**
13
+ * Creates the canonical Node transport abort error used across request-body
14
+ * reads and response-body writes.
15
+ */
16
+ constructor();
17
+ }
18
+ /**
19
+ * Type guard for the canonical client-abort error used by the Node adapter.
20
+ *
21
+ * @remarks
22
+ * Runtime hosts use this guard before logging so only explicitly classified
23
+ * client disconnects are muted. All other failures continue through the normal
24
+ * error-reporting path.
25
+ */
26
+ export declare function isNodeClientAbortError(error: unknown): error is NodeClientAbortError;
27
+ /**
28
+ * Bridges Node's `IncomingMessage` / `ServerResponse` pair to the Web
29
+ * `Request` / `Response` contract used by the shared routing pipeline.
30
+ *
31
+ * @remarks
32
+ * This class is the Node transport boundary. It owns the translation of request
33
+ * headers and bodies into Web primitives and the reverse translation of Web
34
+ * responses back onto Node streams, including client-abort normalization.
35
+ */
36
+ export declare class NodeHttpRequestBridge {
37
+ /**
38
+ * Converts one incoming Node request into the Web `Request` shape consumed by
39
+ * the shared server adapter.
40
+ *
41
+ * @remarks
42
+ * Non-GET/HEAD requests retain streaming semantics via a `ReadableStream` so
43
+ * large request bodies do not need to be buffered before route handling begins.
44
+ */
45
+ createWebRequest(req: IncomingMessage, runtimeOrigin: string): Request;
46
+ /**
47
+ * Sends a Web `Response` through Node's `ServerResponse` without buffering the
48
+ * full body in memory first.
49
+ *
50
+ * @remarks
51
+ * Streaming responses matter for large payloads and long-lived transports such
52
+ * as server-sent events. The bridge therefore forwards the `ReadableStream`
53
+ * directly into the Node writable response instead of materializing an
54
+ * intermediate `ArrayBuffer`.
55
+ */
56
+ sendNodeResponse(res: ServerResponse, response: Response): Promise<void>;
57
+ }
@@ -0,0 +1,118 @@
1
+ import { Readable } from "node:stream";
2
+ import { pipeline } from "node:stream/promises";
3
+ class NodeClientAbortError extends Error {
4
+ /**
5
+ * Creates the canonical Node transport abort error used across request-body
6
+ * reads and response-body writes.
7
+ */
8
+ constructor() {
9
+ super("Client closed the request");
10
+ this.name = "ClientAbortError";
11
+ }
12
+ }
13
+ function isNodeClientDisconnectCode(code) {
14
+ return [
15
+ "ECONNRESET",
16
+ "EPIPE",
17
+ "ERR_STREAM_DESTROYED",
18
+ "ERR_STREAM_PREMATURE_CLOSE",
19
+ "ERR_STREAM_UNABLE_TO_PIPE"
20
+ ].includes(code ?? "");
21
+ }
22
+ function isNodeClientAbortError(error) {
23
+ return error instanceof NodeClientAbortError;
24
+ }
25
+ function toNodeClientAbortError(error) {
26
+ if (error instanceof NodeClientAbortError) {
27
+ return error;
28
+ }
29
+ if (typeof error === "object" && error !== null && "code" in error) {
30
+ const code = typeof error.code === "string" ? error.code : void 0;
31
+ if (isNodeClientDisconnectCode(code)) {
32
+ return new NodeClientAbortError();
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+ class NodeHttpRequestBridge {
38
+ /**
39
+ * Converts one incoming Node request into the Web `Request` shape consumed by
40
+ * the shared server adapter.
41
+ *
42
+ * @remarks
43
+ * Non-GET/HEAD requests retain streaming semantics via a `ReadableStream` so
44
+ * large request bodies do not need to be buffered before route handling begins.
45
+ */
46
+ createWebRequest(req, runtimeOrigin) {
47
+ const url = new URL(req.url ?? "/", runtimeOrigin);
48
+ const headers = new Headers();
49
+ for (const [key, value] of Object.entries(req.headers)) {
50
+ if (Array.isArray(value)) {
51
+ for (const item of value) {
52
+ headers.append(key, item);
53
+ }
54
+ continue;
55
+ }
56
+ if (value !== void 0) {
57
+ headers.set(key, value);
58
+ }
59
+ }
60
+ const method = (req.method ?? "GET").toUpperCase();
61
+ const requestInit = {
62
+ method,
63
+ headers
64
+ };
65
+ if (method !== "GET" && method !== "HEAD") {
66
+ const body = new ReadableStream({
67
+ start(controller) {
68
+ req.on("data", (chunk) => controller.enqueue(chunk));
69
+ req.once("end", () => controller.close());
70
+ req.once("aborted", () => {
71
+ controller.error(new NodeClientAbortError());
72
+ });
73
+ req.once("error", (err) => {
74
+ const isClientAbort = err.code === "ECONNRESET";
75
+ controller.error(isClientAbort ? new NodeClientAbortError() : err);
76
+ });
77
+ },
78
+ cancel() {
79
+ req.destroy();
80
+ }
81
+ });
82
+ requestInit.body = body;
83
+ requestInit.duplex = "half";
84
+ }
85
+ return new Request(url, requestInit);
86
+ }
87
+ /**
88
+ * Sends a Web `Response` through Node's `ServerResponse` without buffering the
89
+ * full body in memory first.
90
+ *
91
+ * @remarks
92
+ * Streaming responses matter for large payloads and long-lived transports such
93
+ * as server-sent events. The bridge therefore forwards the `ReadableStream`
94
+ * directly into the Node writable response instead of materializing an
95
+ * intermediate `ArrayBuffer`.
96
+ */
97
+ async sendNodeResponse(res, response) {
98
+ res.statusCode = response.status;
99
+ response.headers.forEach((value, key) => {
100
+ res.setHeader(key, value);
101
+ });
102
+ if (!response.body) {
103
+ res.end();
104
+ return;
105
+ }
106
+ const responseBody = response.body;
107
+ try {
108
+ await pipeline(Readable.fromWeb(responseBody), res);
109
+ } catch (error) {
110
+ throw toNodeClientAbortError(error) ?? error;
111
+ }
112
+ }
113
+ }
114
+ export {
115
+ NodeClientAbortError,
116
+ NodeHttpRequestBridge,
117
+ isNodeClientAbortError
118
+ };
@@ -1,5 +1,5 @@
1
1
  import type { WebSocket } from 'ws';
2
- import type { ClientBridgeEvent, IClientBridge } from '../../public-types.js';
2
+ import type { ClientBridgeEvent, IClientBridge } from '../../types/public-types.js';
3
3
  export declare class NodeClientBridge implements IClientBridge {
4
4
  private subscribers;
5
5
  private heartbeatTimer;
@@ -1,14 +1,10 @@
1
- import type { DefaultHmrContext, EcoPagesAppConfig, IHmrManager, IClientBridge } from '../../internal-types.js';
2
- import type { EcoBuildPlugin } from '../../build/build-types.js';
3
- import { type HmrStrategy } from '../../hmr/hmr-strategy.js';
4
- import type { ClientBridgeEvent } from '../../public-types.js';
1
+ import type { EcoPagesAppConfig, IClientBridge } from '../../types/internal-types.js';
2
+ import { InMemoryEntrypointDependencyGraph, type EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.js';
3
+ import { SharedHmrManager } from '../shared/shared-hmr-manager.js';
5
4
  export interface NodeHmrManagerParams {
6
5
  appConfig: EcoPagesAppConfig;
7
6
  bridge: IClientBridge;
8
7
  }
9
- type HandleFileChangeOptions = {
10
- broadcast?: boolean;
11
- };
12
8
  /**
13
9
  * Node development HMR manager.
14
10
  *
@@ -22,112 +18,35 @@ type HandleFileChangeOptions = {
22
18
  * reserved for integration-owned page bundles, while generic script assets must
23
19
  * go through `registerScriptEntrypoint()`.
24
20
  */
25
- export declare class NodeHmrManager implements IHmrManager {
26
- private static readonly entrypointRegistrationTimeoutMs;
27
- readonly appConfig: EcoPagesAppConfig;
28
- private readonly bridge;
29
- private watchers;
30
- private watchedFiles;
31
- private entrypointRegistrations;
32
- private distDir;
33
- private plugins;
34
- private enabled;
35
- private strategies;
36
- private readonly entrypointRegistrar;
37
- private readonly browserBundleService;
38
- private readonly entrypointDependencyGraph;
39
- private readonly runtimeSpecifierRegistry;
40
- private readonly serverModuleTranspiler;
41
- constructor({ appConfig, bridge }: NodeHmrManagerParams);
42
- /**
43
- * Ensures the HMR output directory exists.
44
- *
45
- * This must not remove the directory because multiple app processes
46
- * can share the same dist path during e2e runs.
47
- */
48
- private cleanDistDir;
21
+ export declare class NodeHmrManager extends SharedHmrManager {
49
22
  /**
50
- * Returns whether the generic JS strategy is allowed to rebuild an entrypoint.
23
+ * Creates the Node HMR manager over the shared coordination pipeline.
51
24
  *
52
25
  * @remarks
53
- * Higher-priority integration strategies own framework page entrypoints. When
54
- * one of them matches, the generic JS strategy must stay out of the way so a
55
- * shared dependency invalidation does not overwrite framework-specific output.
26
+ * Unlike Bun, Node keeps websocket subscription wiring in the server adapter,
27
+ * so this manager only specializes the shared manager where runtime behavior
28
+ * actually differs: dependency-graph storage, missing-file tolerance, and how
29
+ * runtime bundle failures disable HMR.
56
30
  */
57
- private shouldJsStrategyProcessEntrypoint;
58
- private initializeStrategies;
59
- registerStrategy(strategy: HmrStrategy): void;
60
- setPlugins(plugins: EcoBuildPlugin[]): void;
61
- setEnabled(enabled: boolean): void;
62
- isEnabled(): boolean;
63
- /**
64
- * Registers runtime bare-specifier mappings exposed by integrations.
65
- *
66
- * @remarks
67
- * These mappings are consumed by framework-owned HMR strategies such as the
68
- * React integration strategy when they rewrite browser bundles. The registry
69
- * stays generic so the same mappings can support broader import-map-style
70
- * runtime features later without moving integration semantics into core.
71
- */
72
- registerSpecifierMap(map: Record<string, string>): void;
73
- buildRuntime(): Promise<void>;
74
- getRuntimePath(): string;
75
- broadcast(event: ClientBridgeEvent): void;
76
- handleFileChange(filePath: string, options?: HandleFileChangeOptions): Promise<void>;
77
- getOutputUrl(entrypointPath: string): string | undefined;
78
- getWatchedFiles(): Map<string, string>;
79
- getSpecifierMap(): Map<string, string>;
80
- getDistDir(): string;
81
- getPlugins(): EcoBuildPlugin[];
82
- getDefaultContext(): DefaultHmrContext;
83
- private clearFailedEntrypointRegistration;
84
- /**
85
- * Registers one integration-owned page entrypoint.
86
- *
87
- * @remarks
88
- * Concurrent callers share one in-flight registration. The registration is
89
- * removed from the dedupe map once it resolves or fails so later requests do
90
- * not inherit stale state.
91
- */
92
- registerEntrypoint(entrypointPath: string): Promise<string>;
93
- /**
94
- * Registers one generic script entrypoint.
95
- *
96
- * @remarks
97
- * This path is intentionally separate from page entrypoints so non-framework
98
- * scripts can still use the generic build fallback without weakening the page
99
- * ownership contract.
100
- */
101
- registerScriptEntrypoint(entrypointPath: string): Promise<string>;
31
+ constructor({ appConfig, bridge }: NodeHmrManagerParams);
102
32
  /**
103
- * Performs strict integration-owned entrypoint registration for one normalized source path.
104
- *
105
- * @remarks
106
- * The flow is:
107
- * 1. Reserve the output URL in the watched map.
108
- * 2. Remove any stale emitted file from an earlier process or failed build.
109
- * 3. Let the strategy chain try to emit the entrypoint without broadcasting.
110
- * 4. Fail if the owning integration did not emit the expected output.
33
+ * Reuses the shared in-memory dependency graph when the app already has one and
34
+ * otherwise creates the default Node development graph.
111
35
  */
112
- private emitStrictEntrypoint;
36
+ protected createEntrypointDependencyGraph(existingEntrypointDependencyGraph: EntrypointDependencyGraph): InMemoryEntrypointDependencyGraph;
113
37
  /**
114
- * Performs registration for a generic script asset.
38
+ * Tells the shared HMR manager to ignore missing-file events during Node watch
39
+ * mode.
115
40
  *
116
41
  * @remarks
117
- * The manager first gives registered strategies a chance to emit the file so
118
- * processor-owned or integration-owned behavior can still participate. Only
119
- * when no output exists does it issue the generic build.
42
+ * Node file watching can briefly report remove-and-recreate sequences while a
43
+ * file is being rewritten. Treating those transient gaps as fatal would disable
44
+ * otherwise healthy development sessions.
120
45
  */
121
- private emitScriptEntrypoint;
46
+ protected shouldSkipMissingFileChange(_filePath: string): boolean;
122
47
  /**
123
- * Stops active watchers and releases retained registration state.
124
- *
125
- * @remarks
126
- * The manager intentionally does not remove emitted `_hmr` files from disk
127
- * because multiple app processes may share the same dist directory during test
128
- * runs. It does clear in-memory indexes so old entrypoints, dependencies, and
129
- * specifier maps cannot leak across a reused manager instance.
48
+ * Disables HMR after a runtime bundle failure so the Node dev server can keep
49
+ * serving requests without repeatedly emitting broken updates.
130
50
  */
131
- stop(): void;
51
+ protected onRuntimeBundleFailure(error: unknown): void;
132
52
  }
133
- export {};