@ecopages/core 0.2.0-alpha.54 → 0.2.0-alpha.55

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 (594) hide show
  1. package/package.json +196 -91
  2. package/src/adapters/abstract/application-adapter.d.ts +194 -0
  3. package/src/adapters/abstract/application-adapter.js +121 -0
  4. package/src/adapters/abstract/router-adapter.d.ts +26 -0
  5. package/src/adapters/abstract/router-adapter.js +5 -0
  6. package/src/adapters/abstract/server-adapter.d.ts +69 -0
  7. package/src/adapters/abstract/server-adapter.js +15 -0
  8. package/src/adapters/bun/client-bridge.d.ts +34 -0
  9. package/src/adapters/bun/client-bridge.js +48 -0
  10. package/src/adapters/bun/create-app.d.ts +60 -0
  11. package/src/adapters/bun/create-app.js +140 -0
  12. package/src/adapters/bun/hmr-manager.d.ts +47 -0
  13. package/src/adapters/bun/hmr-manager.js +58 -0
  14. package/src/adapters/bun/index.d.ts +2 -0
  15. package/src/adapters/bun/index.js +8 -0
  16. package/src/adapters/bun/runtime-host.d.ts +52 -0
  17. package/src/adapters/bun/runtime-host.js +56 -0
  18. package/src/adapters/bun/server-adapter.d.ts +223 -0
  19. package/src/adapters/bun/server-adapter.js +450 -0
  20. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  21. package/src/adapters/bun/static-preview-host.js +45 -0
  22. package/src/adapters/create-app.d.ts +20 -0
  23. package/src/adapters/create-app.js +66 -0
  24. package/src/adapters/index.d.ts +2 -0
  25. package/src/adapters/index.js +8 -0
  26. package/src/adapters/node/create-app.d.ts +24 -0
  27. package/src/adapters/node/create-app.js +92 -0
  28. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  29. package/src/adapters/node/http-request-bridge.js +118 -0
  30. package/src/adapters/node/node-client-bridge.d.ts +26 -0
  31. package/src/adapters/node/node-client-bridge.js +66 -0
  32. package/src/adapters/node/node-hmr-manager.d.ts +52 -0
  33. package/src/adapters/node/node-hmr-manager.js +49 -0
  34. package/src/adapters/node/runtime-host.d.ts +57 -0
  35. package/src/adapters/node/runtime-host.js +92 -0
  36. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  37. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  38. package/src/adapters/node/server-adapter.d.ts +138 -0
  39. package/src/adapters/node/server-adapter.js +313 -0
  40. package/src/adapters/node/static-content-server.d.ts +60 -0
  41. package/src/adapters/node/static-content-server.js +194 -0
  42. package/src/adapters/node/static-preview-host.d.ts +55 -0
  43. package/src/adapters/node/static-preview-host.js +68 -0
  44. package/src/adapters/shared/api-response.d.ts +52 -0
  45. package/src/adapters/shared/api-response.js +96 -0
  46. package/src/adapters/shared/application-adapter.d.ts +18 -0
  47. package/src/adapters/shared/application-adapter.js +90 -0
  48. package/src/adapters/shared/define-api-handler.d.ts +25 -0
  49. package/src/adapters/shared/define-api-handler.js +15 -0
  50. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  51. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  52. package/src/adapters/shared/explicit-static-route-matcher.d.ts +41 -0
  53. package/src/adapters/shared/explicit-static-route-matcher.js +101 -0
  54. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +62 -0
  55. package/src/adapters/shared/file-route-middleware-pipeline.js +90 -0
  56. package/src/adapters/shared/fs-server-response-factory.d.ts +23 -0
  57. package/src/adapters/shared/fs-server-response-factory.js +81 -0
  58. package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
  59. package/src/adapters/shared/fs-server-response-matcher.js +186 -0
  60. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  61. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  62. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  63. package/src/adapters/shared/hmr-html-response.js +33 -0
  64. package/src/adapters/shared/render-context.d.ts +16 -0
  65. package/src/adapters/shared/render-context.js +93 -0
  66. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  67. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  68. package/src/adapters/shared/runtime-host.d.ts +12 -0
  69. package/src/adapters/shared/runtime-host.js +0 -0
  70. package/src/adapters/shared/server-adapter.d.ts +108 -0
  71. package/src/adapters/shared/server-adapter.js +436 -0
  72. package/src/adapters/shared/server-route-handler.d.ts +89 -0
  73. package/src/adapters/shared/server-route-handler.js +111 -0
  74. package/src/adapters/shared/server-static-builder.d.ts +71 -0
  75. package/src/adapters/shared/server-static-builder.js +100 -0
  76. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  77. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  78. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  79. package/src/adapters/shared/static-preview-host.js +0 -0
  80. package/src/build/browser-runtime-manifest.d.ts +31 -0
  81. package/src/build/browser-runtime-manifest.js +61 -0
  82. package/src/build/{browser-runtime-plugin-helpers.ts → browser-runtime-plugin-helpers.d.ts} +2 -13
  83. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  84. package/src/build/browser-runtime-plugin.d.ts +78 -0
  85. package/src/build/browser-runtime-plugin.js +172 -0
  86. package/src/build/build-adapter.d.ts +504 -0
  87. package/src/build/build-adapter.js +240 -0
  88. package/src/build/build-manifest.d.ts +33 -0
  89. package/src/build/build-manifest.js +49 -0
  90. package/src/build/build-types.d.ts +57 -0
  91. package/src/build/build-types.js +0 -0
  92. package/src/build/rolldown-build-adapter.d.ts +32 -0
  93. package/src/build/rolldown-build-adapter.js +260 -0
  94. package/src/build/rolldown-plugin-bridge.d.ts +50 -0
  95. package/src/build/rolldown-plugin-bridge.js +194 -0
  96. package/src/build/{runtime-build-executor.ts → runtime-build-executor.d.ts} +3 -19
  97. package/src/build/runtime-build-executor.js +19 -0
  98. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  99. package/src/build/runtime-build-output-normalizer.js +111 -0
  100. package/src/build/serialized-build-executor.d.ts +64 -0
  101. package/src/build/serialized-build-executor.js +63 -0
  102. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  103. package/src/build/server-side-css-shim-plugin.js +35 -0
  104. package/src/cache/{index.ts → index.d.ts} +1 -1
  105. package/src/cache/index.js +6 -0
  106. package/src/cache/module-parse-cache.d.ts +65 -0
  107. package/src/cache/module-parse-cache.js +75 -0
  108. package/src/config/config-builder.d.ts +252 -0
  109. package/src/config/config-builder.js +589 -0
  110. package/src/config/{constants.ts → constants.d.ts} +13 -22
  111. package/src/config/constants.js +25 -0
  112. package/src/dev/host-runtime.d.ts +10 -0
  113. package/src/dev/host-runtime.js +24 -0
  114. package/src/dev/sc-server.d.ts +30 -0
  115. package/src/dev/sc-server.js +111 -0
  116. package/src/eco/eco.browser.d.ts +2 -0
  117. package/src/eco/eco.browser.js +88 -0
  118. package/src/eco/eco.d.ts +9 -0
  119. package/src/eco/eco.js +119 -0
  120. package/src/eco/eco.types.d.ts +230 -0
  121. package/src/eco/eco.types.js +0 -0
  122. package/src/eco/eco.utils.d.ts +1 -0
  123. package/src/eco/eco.utils.js +10 -0
  124. package/src/eco/global-injector-map.d.ts +16 -0
  125. package/src/eco/global-injector-map.js +80 -0
  126. package/src/eco/lazy-injector-map.d.ts +8 -0
  127. package/src/eco/lazy-injector-map.js +70 -0
  128. package/src/eco/module-dependencies.d.ts +18 -0
  129. package/src/eco/module-dependencies.js +49 -0
  130. package/src/errors/http-error.d.ts +31 -0
  131. package/src/errors/http-error.js +50 -0
  132. package/src/errors/index.d.ts +3 -0
  133. package/src/errors/index.js +6 -0
  134. package/src/errors/locals-access-error.d.ts +4 -0
  135. package/src/errors/locals-access-error.js +9 -0
  136. package/src/global/app-logger.d.ts +2 -0
  137. package/src/global/app-logger.js +6 -0
  138. package/src/hmr/client/hmr-runtime.d.ts +5 -0
  139. package/src/hmr/client/hmr-runtime.js +117 -0
  140. package/src/hmr/hmr-strategy.d.ts +162 -0
  141. package/src/hmr/hmr-strategy.js +44 -0
  142. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  143. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  144. package/src/hmr/hmr.test.e2e.d.ts +1 -0
  145. package/src/hmr/hmr.test.e2e.js +43 -0
  146. package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
  147. package/src/hmr/strategies/default-hmr-strategy.js +34 -0
  148. package/src/hmr/strategies/js-hmr-strategy.d.ts +134 -0
  149. package/src/hmr/strategies/js-hmr-strategy.js +173 -0
  150. package/src/index.browser.d.ts +3 -0
  151. package/src/index.browser.js +4 -0
  152. package/src/index.d.ts +6 -0
  153. package/src/index.js +21 -0
  154. package/src/integrations/ghtml/ghtml-renderer.d.ts +16 -0
  155. package/src/integrations/ghtml/ghtml-renderer.js +57 -0
  156. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  157. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  158. package/src/integrations/ghtml/ghtml.plugin.d.ts +16 -0
  159. package/src/integrations/ghtml/ghtml.plugin.js +20 -0
  160. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  161. package/src/plugins/alias-resolver-cache.js +106 -0
  162. package/src/plugins/alias-resolver-plugin.d.ts +6 -0
  163. package/src/plugins/alias-resolver-plugin.js +65 -0
  164. package/src/plugins/eco-component-meta-plugin.d.ts +108 -0
  165. package/src/plugins/eco-component-meta-plugin.js +175 -0
  166. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  167. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  168. package/src/plugins/integration-plugin.d.ts +230 -0
  169. package/src/plugins/integration-plugin.js +201 -0
  170. package/src/plugins/processor.d.ts +97 -0
  171. package/src/plugins/processor.js +141 -0
  172. package/src/plugins/{runtime-capability.ts → runtime-capability.d.ts} +3 -8
  173. package/src/plugins/runtime-capability.js +0 -0
  174. package/src/plugins/source-transform.d.ts +46 -0
  175. package/src/plugins/source-transform.js +71 -0
  176. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  177. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  178. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  179. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  180. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  181. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  182. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  183. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  184. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  185. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  186. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  187. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  188. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  189. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  190. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  191. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  192. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  193. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  194. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  195. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  196. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  197. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  198. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  199. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  200. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  201. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  202. package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
  203. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  204. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  205. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  206. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  207. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  208. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  209. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  210. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  211. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  212. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  213. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  214. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  215. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  216. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  217. package/src/route-renderer/page-loading/page-module-loader.js +127 -0
  218. package/src/route-renderer/route-renderer.d.ts +69 -0
  219. package/src/route-renderer/route-renderer.js +80 -0
  220. package/src/router/client/link-intent.js +34 -0
  221. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  222. package/src/router/client/link-intent.test.browser.js +43 -0
  223. package/src/router/client/navigation-coordinator.d.ts +169 -0
  224. package/src/router/client/navigation-coordinator.js +215 -0
  225. package/src/router/server/route-registry.d.ts +78 -0
  226. package/src/router/server/route-registry.js +262 -0
  227. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  228. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  229. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  230. package/src/services/assets/asset-processing-service/asset-processing.service.js +285 -0
  231. package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
  232. package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
  233. package/src/services/assets/asset-processing-service/assets.types.d.ts +103 -0
  234. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  235. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +57 -0
  236. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  237. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  238. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  239. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  240. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  241. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  242. package/src/services/assets/asset-processing-service/index.js +6 -0
  243. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  244. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  245. package/src/services/assets/asset-processing-service/{processor.interface.ts → processor.interface.d.ts} +5 -10
  246. package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
  247. package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
  248. package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
  249. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
  250. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +65 -0
  251. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  252. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  253. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  254. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  255. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +6 -0
  256. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
  257. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +9 -0
  258. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +97 -0
  259. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  260. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  261. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +8 -0
  262. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  263. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
  264. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +69 -0
  265. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  266. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  267. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  268. package/src/services/assets/browser-bundle.service.js +41 -0
  269. package/src/services/cache/cache.types.d.ts +107 -0
  270. package/src/services/cache/cache.types.js +0 -0
  271. package/src/services/cache/index.d.ts +7 -0
  272. package/src/services/cache/index.js +7 -0
  273. package/src/services/cache/memory-cache-store.d.ts +42 -0
  274. package/src/services/cache/memory-cache-store.js +98 -0
  275. package/src/services/cache/page-cache-service.d.ts +70 -0
  276. package/src/services/cache/page-cache-service.js +152 -0
  277. package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
  278. package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
  279. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  280. package/src/services/html/html-rewriter-provider.service.js +68 -0
  281. package/src/services/html/html-transformer.service.d.ts +96 -0
  282. package/src/services/html/html-transformer.service.js +287 -0
  283. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  284. package/src/services/invalidation/development-invalidation.service.js +190 -0
  285. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  286. package/src/services/module-loading/app-module-loader.service.js +0 -0
  287. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  288. package/src/services/module-loading/app-server-module-transpiler.service.js +130 -0
  289. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  290. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  291. package/src/services/module-loading/{module-loading-types.ts → module-loading-types.d.ts} +0 -1
  292. package/src/services/module-loading/module-loading-types.js +0 -0
  293. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  294. package/src/services/module-loading/page-module-import.service.js +193 -0
  295. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  296. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  297. package/src/services/module-loading/source-module-support.d.ts +5 -0
  298. package/src/services/module-loading/source-module-support.js +8 -0
  299. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  300. package/src/services/runtime-state/dev-graph.service.js +162 -0
  301. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  302. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  303. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  304. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  305. package/src/services/validation/schema-validation-service.d.ts +122 -0
  306. package/src/services/validation/schema-validation-service.js +101 -0
  307. package/src/services/validation/{standard-schema.types.ts → standard-schema.types.d.ts} +17 -20
  308. package/src/services/validation/standard-schema.types.js +0 -0
  309. package/src/static-site-generator/static-site-generator.d.ts +104 -0
  310. package/src/static-site-generator/static-site-generator.js +316 -0
  311. package/src/types/internal-types.d.ts +232 -0
  312. package/src/types/internal-types.js +0 -0
  313. package/src/types/public-types.d.ts +1307 -0
  314. package/src/types/public-types.js +0 -0
  315. package/src/utils/deep-merge.d.ts +14 -0
  316. package/src/utils/deep-merge.js +32 -0
  317. package/src/utils/hash.d.ts +1 -0
  318. package/src/utils/hash.js +7 -0
  319. package/src/utils/html-escaping.d.ts +7 -0
  320. package/src/utils/html-escaping.js +6 -0
  321. package/src/utils/html.js +4 -0
  322. package/src/utils/invariant.d.ts +5 -0
  323. package/src/utils/invariant.js +11 -0
  324. package/src/utils/locals-utils.d.ts +15 -0
  325. package/src/utils/locals-utils.js +24 -0
  326. package/src/utils/parse-cli-args.d.ts +27 -0
  327. package/src/utils/parse-cli-args.js +62 -0
  328. package/src/utils/path-utils.module.d.ts +5 -0
  329. package/src/utils/path-utils.module.js +14 -0
  330. package/src/utils/resolve-work-dir.d.ts +11 -0
  331. package/src/utils/resolve-work-dir.js +31 -0
  332. package/src/utils/runtime.d.ts +11 -0
  333. package/src/utils/runtime.js +40 -0
  334. package/src/utils/server-utils.module.d.ts +19 -0
  335. package/src/utils/server-utils.module.js +56 -0
  336. package/src/watchers/project-watcher.d.ts +136 -0
  337. package/src/watchers/project-watcher.js +275 -0
  338. package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
  339. package/src/watchers/project-watcher.test-helpers.js +52 -0
  340. package/src/adapters/abstract/application-adapter.test.ts +0 -218
  341. package/src/adapters/abstract/application-adapter.ts +0 -379
  342. package/src/adapters/abstract/router-adapter.ts +0 -30
  343. package/src/adapters/abstract/server-adapter.ts +0 -79
  344. package/src/adapters/bun/client-bridge.ts +0 -62
  345. package/src/adapters/bun/create-app.ts +0 -214
  346. package/src/adapters/bun/hmr-manager.test.ts +0 -265
  347. package/src/adapters/bun/hmr-manager.ts +0 -88
  348. package/src/adapters/bun/index.ts +0 -2
  349. package/src/adapters/bun/runtime-host.ts +0 -76
  350. package/src/adapters/bun/server-adapter.ts +0 -605
  351. package/src/adapters/bun/static-preview-host.ts +0 -70
  352. package/src/adapters/create-app.test.ts +0 -10
  353. package/src/adapters/create-app.ts +0 -91
  354. package/src/adapters/index.ts +0 -2
  355. package/src/adapters/node/create-app.test.ts +0 -76
  356. package/src/adapters/node/create-app.ts +0 -116
  357. package/src/adapters/node/http-request-bridge.test.ts +0 -146
  358. package/src/adapters/node/http-request-bridge.ts +0 -176
  359. package/src/adapters/node/node-client-bridge.test.ts +0 -198
  360. package/src/adapters/node/node-client-bridge.ts +0 -79
  361. package/src/adapters/node/node-hmr-manager.test.ts +0 -374
  362. package/src/adapters/node/node-hmr-manager.ts +0 -72
  363. package/src/adapters/node/runtime-host.test.ts +0 -49
  364. package/src/adapters/node/runtime-host.ts +0 -113
  365. package/src/adapters/node/server-adapter-dependencies.ts +0 -28
  366. package/src/adapters/node/server-adapter.test.ts +0 -84
  367. package/src/adapters/node/server-adapter.ts +0 -423
  368. package/src/adapters/node/static-content-server.test.ts +0 -60
  369. package/src/adapters/node/static-content-server.ts +0 -239
  370. package/src/adapters/node/static-preview-host.test.ts +0 -89
  371. package/src/adapters/node/static-preview-host.ts +0 -101
  372. package/src/adapters/shared/api-response.test.ts +0 -97
  373. package/src/adapters/shared/api-response.ts +0 -104
  374. package/src/adapters/shared/application-adapter.ts +0 -199
  375. package/src/adapters/shared/define-api-handler.ts +0 -66
  376. package/src/adapters/shared/explicit-static-render-preparation.ts +0 -58
  377. package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
  378. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -131
  379. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -85
  380. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -118
  381. package/src/adapters/shared/fs-server-response-factory.test.ts +0 -176
  382. package/src/adapters/shared/fs-server-response-factory.ts +0 -96
  383. package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -311
  384. package/src/adapters/shared/fs-server-response-matcher.ts +0 -240
  385. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  386. package/src/adapters/shared/hmr-html-response.ts +0 -54
  387. package/src/adapters/shared/hmr-manager.contract.test.ts +0 -228
  388. package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -229
  389. package/src/adapters/shared/render-context.test.ts +0 -244
  390. package/src/adapters/shared/render-context.ts +0 -161
  391. package/src/adapters/shared/runtime-app-bootstrap.test.ts +0 -96
  392. package/src/adapters/shared/runtime-app-bootstrap.ts +0 -72
  393. package/src/adapters/shared/runtime-host.ts +0 -11
  394. package/src/adapters/shared/server-adapter.test.ts +0 -130
  395. package/src/adapters/shared/server-adapter.ts +0 -571
  396. package/src/adapters/shared/server-route-handler.test.ts +0 -112
  397. package/src/adapters/shared/server-route-handler.ts +0 -153
  398. package/src/adapters/shared/server-static-builder.test.ts +0 -338
  399. package/src/adapters/shared/server-static-builder.ts +0 -170
  400. package/src/adapters/shared/shared-hmr-manager.ts +0 -298
  401. package/src/adapters/shared/static-preview-host.ts +0 -12
  402. package/src/build/browser-runtime-manifest.test.ts +0 -121
  403. package/src/build/browser-runtime-manifest.ts +0 -105
  404. package/src/build/browser-runtime-plugin-helpers.test.ts +0 -49
  405. package/src/build/browser-runtime-plugin.test.ts +0 -256
  406. package/src/build/browser-runtime-plugin.ts +0 -306
  407. package/src/build/build-adapter.test.ts +0 -463
  408. package/src/build/build-adapter.ts +0 -788
  409. package/src/build/build-manifest.ts +0 -79
  410. package/src/build/build-types.ts +0 -83
  411. package/src/build/rolldown-build-adapter.test.ts +0 -352
  412. package/src/build/rolldown-build-adapter.ts +0 -363
  413. package/src/build/rolldown-plugin-bridge.test.ts +0 -256
  414. package/src/build/rolldown-plugin-bridge.ts +0 -309
  415. package/src/build/runtime-build-executor.test.ts +0 -130
  416. package/src/build/runtime-build-output-normalizer.ts +0 -137
  417. package/src/build/serialized-build-executor.test.ts +0 -96
  418. package/src/build/serialized-build-executor.ts +0 -90
  419. package/src/build/server-side-css-shim-plugin.ts +0 -77
  420. package/src/cache/module-parse-cache.test.ts +0 -73
  421. package/src/cache/module-parse-cache.ts +0 -137
  422. package/src/config/config-builder.test.ts +0 -456
  423. package/src/config/config-builder.ts +0 -728
  424. package/src/config/config-builder.typecheck.test.ts +0 -96
  425. package/src/dev/host-runtime.ts +0 -34
  426. package/src/dev/sc-server.ts +0 -143
  427. package/src/eco/eco.browser.test.ts +0 -43
  428. package/src/eco/eco.browser.ts +0 -137
  429. package/src/eco/eco.test.ts +0 -781
  430. package/src/eco/eco.ts +0 -262
  431. package/src/eco/eco.types.ts +0 -293
  432. package/src/eco/eco.utils.test.ts +0 -219
  433. package/src/eco/eco.utils.ts +0 -5
  434. package/src/eco/global-injector-map.test.ts +0 -42
  435. package/src/eco/global-injector-map.ts +0 -112
  436. package/src/eco/lazy-injector-map.test.ts +0 -66
  437. package/src/eco/lazy-injector-map.ts +0 -120
  438. package/src/eco/module-dependencies.test.ts +0 -30
  439. package/src/eco/module-dependencies.ts +0 -75
  440. package/src/errors/http-error.test.ts +0 -134
  441. package/src/errors/http-error.ts +0 -72
  442. package/src/errors/index.ts +0 -3
  443. package/src/errors/locals-access-error.ts +0 -7
  444. package/src/global/app-logger.ts +0 -4
  445. package/src/global/utils.test.ts +0 -12
  446. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
  447. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  448. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  449. package/src/hmr/client/hmr-runtime.ts +0 -162
  450. package/src/hmr/hmr-strategy.test.ts +0 -124
  451. package/src/hmr/hmr-strategy.ts +0 -177
  452. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  453. package/src/hmr/hmr.test.e2e.ts +0 -66
  454. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  455. package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -344
  456. package/src/hmr/strategies/js-hmr-strategy.ts +0 -307
  457. package/src/index.browser.ts +0 -3
  458. package/src/index.ts +0 -15
  459. package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -253
  460. package/src/integrations/ghtml/ghtml-renderer.ts +0 -87
  461. package/src/integrations/ghtml/ghtml.constants.ts +0 -1
  462. package/src/integrations/ghtml/ghtml.plugin.ts +0 -28
  463. package/src/plugins/alias-resolver-cache.test.ts +0 -110
  464. package/src/plugins/alias-resolver-cache.ts +0 -145
  465. package/src/plugins/alias-resolver-plugin.test.ts +0 -41
  466. package/src/plugins/alias-resolver-plugin.ts +0 -75
  467. package/src/plugins/eco-component-meta-plugin.test.ts +0 -421
  468. package/src/plugins/eco-component-meta-plugin.ts +0 -518
  469. package/src/plugins/foreign-jsx-override-plugin.test.ts +0 -65
  470. package/src/plugins/foreign-jsx-override-plugin.ts +0 -76
  471. package/src/plugins/integration-plugin.test.ts +0 -151
  472. package/src/plugins/integration-plugin.ts +0 -344
  473. package/src/plugins/processor.test.ts +0 -148
  474. package/src/plugins/processor.ts +0 -257
  475. package/src/plugins/source-transform.test.ts +0 -82
  476. package/src/plugins/source-transform.ts +0 -123
  477. package/src/route-renderer/orchestration/component-render-context.ts +0 -338
  478. package/src/route-renderer/orchestration/declared-ownership-graph.ts +0 -62
  479. package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +0 -431
  480. package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -2251
  481. package/src/route-renderer/orchestration/integration-renderer.ts +0 -1384
  482. package/src/route-renderer/orchestration/ownership-planning.service.ts +0 -97
  483. package/src/route-renderer/orchestration/ownership-validation.service.ts +0 -76
  484. package/src/route-renderer/orchestration/processed-asset-dedupe.ts +0 -29
  485. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +0 -435
  486. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +0 -310
  487. package/src/route-renderer/orchestration/render-output.utils.ts +0 -310
  488. package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +0 -1365
  489. package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +0 -267
  490. package/src/route-renderer/orchestration/route-render-orchestrator.ts +0 -879
  491. package/src/route-renderer/orchestration/template-serialization.test.ts +0 -110
  492. package/src/route-renderer/orchestration/template-serialization.ts +0 -117
  493. package/src/route-renderer/page-loading/component-dependency-collection.ts +0 -202
  494. package/src/route-renderer/page-loading/declared-asset-collection.ts +0 -153
  495. package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -761
  496. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -144
  497. package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +0 -75
  498. package/src/route-renderer/page-loading/lazy-entry-collection.ts +0 -167
  499. package/src/route-renderer/page-loading/lazy-trigger-planning.ts +0 -74
  500. package/src/route-renderer/page-loading/module-declaration-aggregation.ts +0 -60
  501. package/src/route-renderer/page-loading/module-declaration-scripts.ts +0 -16
  502. package/src/route-renderer/page-loading/page-dependency-bundling.ts +0 -244
  503. package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -183
  504. package/src/route-renderer/page-loading/page-module-loader.ts +0 -184
  505. package/src/route-renderer/route-renderer.ts +0 -133
  506. package/src/router/client/link-intent.test.browser.ts +0 -51
  507. package/src/router/client/link-intent.ts +0 -92
  508. package/src/router/client/navigation-coordinator.test.ts +0 -237
  509. package/src/router/client/navigation-coordinator.ts +0 -453
  510. package/src/router/server/route-registry.test.ts +0 -176
  511. package/src/router/server/route-registry.ts +0 -382
  512. package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +0 -66
  513. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -473
  514. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -344
  515. package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
  516. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  517. package/src/services/assets/asset-processing-service/assets.types.ts +0 -128
  518. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -74
  519. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -98
  520. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
  521. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  522. package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +0 -104
  523. package/src/services/assets/asset-processing-service/index.ts +0 -6
  524. package/src/services/assets/asset-processing-service/page-package.test.ts +0 -135
  525. package/src/services/assets/asset-processing-service/page-package.ts +0 -103
  526. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  527. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
  528. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -83
  529. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -173
  530. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  531. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +0 -188
  532. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -138
  533. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -326
  534. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -116
  535. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -270
  536. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -145
  537. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -261
  538. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -72
  539. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -83
  540. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +0 -65
  541. package/src/services/assets/browser-bundle.service.test.ts +0 -66
  542. package/src/services/assets/browser-bundle.service.ts +0 -109
  543. package/src/services/cache/cache.types.ts +0 -126
  544. package/src/services/cache/index.ts +0 -18
  545. package/src/services/cache/memory-cache-store.test.ts +0 -225
  546. package/src/services/cache/memory-cache-store.ts +0 -130
  547. package/src/services/cache/page-cache-service.test.ts +0 -175
  548. package/src/services/cache/page-cache-service.ts +0 -202
  549. package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
  550. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  551. package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
  552. package/src/services/html/html-rewriter-provider.service.ts +0 -105
  553. package/src/services/html/html-transformer.service.test.ts +0 -544
  554. package/src/services/html/html-transformer.service.ts +0 -369
  555. package/src/services/invalidation/development-invalidation.service.test.ts +0 -87
  556. package/src/services/invalidation/development-invalidation.service.ts +0 -262
  557. package/src/services/module-loading/app-module-loader.service.ts +0 -9
  558. package/src/services/module-loading/app-server-module-transpiler.service.test.ts +0 -297
  559. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -168
  560. package/src/services/module-loading/host-module-loader-registry.ts +0 -15
  561. package/src/services/module-loading/page-module-import.service.test.ts +0 -652
  562. package/src/services/module-loading/page-module-import.service.ts +0 -302
  563. package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -242
  564. package/src/services/module-loading/server-module-transpiler.service.ts +0 -104
  565. package/src/services/module-loading/source-module-support.ts +0 -19
  566. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  567. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  568. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  569. package/src/services/validation/schema-validation-service.test.ts +0 -223
  570. package/src/services/validation/schema-validation-service.ts +0 -204
  571. package/src/static-site-generator/static-site-generator.test.ts +0 -408
  572. package/src/static-site-generator/static-site-generator.ts +0 -445
  573. package/src/types/internal-types.ts +0 -243
  574. package/src/types/public-types.ts +0 -1508
  575. package/src/utils/deep-merge.test.ts +0 -114
  576. package/src/utils/deep-merge.ts +0 -47
  577. package/src/utils/hash.ts +0 -5
  578. package/src/utils/html-escaping.ts +0 -9
  579. package/src/utils/invariant.test.ts +0 -22
  580. package/src/utils/invariant.ts +0 -15
  581. package/src/utils/locals-utils.ts +0 -37
  582. package/src/utils/parse-cli-args.test.ts +0 -69
  583. package/src/utils/parse-cli-args.ts +0 -105
  584. package/src/utils/path-utils.module.ts +0 -14
  585. package/src/utils/path-utils.test.ts +0 -15
  586. package/src/utils/resolve-work-dir.ts +0 -45
  587. package/src/utils/runtime.ts +0 -44
  588. package/src/utils/server-utils.module.ts +0 -67
  589. package/src/utils/server-utils.test.ts +0 -38
  590. package/src/watchers/project-watcher.integration.test.ts +0 -337
  591. package/src/watchers/project-watcher.test-helpers.ts +0 -42
  592. package/src/watchers/project-watcher.test.ts +0 -768
  593. package/src/watchers/project-watcher.ts +0 -357
  594. /package/src/utils/{html.ts → html.d.ts} +0 -0
@@ -0,0 +1,92 @@
1
+ import { appLogger } from "../../global/app-logger.js";
2
+ import { SharedApplicationAdapter } from "../shared/application-adapter.js";
3
+ import { resolveRuntimeBinding } from "../shared/runtime-app-bootstrap.js";
4
+ import { createNodeServerAdapter } from "./server-adapter.js";
5
+ import { NodeHttpRequestBridge } from "./http-request-bridge.js";
6
+ import { NodeRuntimeHost } from "./runtime-host.js";
7
+ class NodeEcopagesApp extends SharedApplicationAdapter {
8
+ serverAdapter;
9
+ server = null;
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
+ }
19
+ async stop(force = true) {
20
+ if (!this.server) {
21
+ return;
22
+ }
23
+ const activeServer = this.server;
24
+ this.server = null;
25
+ await this.runtimeHost.stop(activeServer, { force });
26
+ }
27
+ async initializeServerAdapter() {
28
+ const binding = resolveRuntimeBinding({
29
+ cliArgs: this.cliArgs,
30
+ serverOptions: this.serverOptions
31
+ });
32
+ this.runtimeOrigin = binding.runtimeOrigin;
33
+ return this.createServerAdapter({
34
+ runtimeOrigin: this.runtimeOrigin,
35
+ appConfig: this.appConfig,
36
+ apiHandlers: this.apiHandlers,
37
+ staticRoutes: this.staticRoutes,
38
+ errorHandler: this.errorHandler,
39
+ options: { watch: binding.watch },
40
+ serveOptions: binding.serveOptions
41
+ });
42
+ }
43
+ async start() {
44
+ if (!this.serverAdapter) {
45
+ this.serverAdapter = await this.initializeServerAdapter();
46
+ }
47
+ if (this.server) {
48
+ return this.server;
49
+ }
50
+ const { build, preview } = this.cliArgs;
51
+ if (build || preview) {
52
+ appLogger.debugTime("Building static pages");
53
+ await this.serverAdapter.buildStatic({ preview });
54
+ await this.stop(true);
55
+ appLogger.debugTimeEnd("Building static pages");
56
+ if (build) {
57
+ process.exit(0);
58
+ }
59
+ return;
60
+ }
61
+ const serveOptions = this.serverAdapter.getServerOptions();
62
+ this.server = await this.runtimeHost.start({
63
+ serveOptions,
64
+ handleRequest: async (request) => await this.serverAdapter.handleRequest(request),
65
+ onError: async () => {
66
+ }
67
+ });
68
+ this.runtimeOrigin = this.runtimeHost.getOrigin(this.server, serveOptions);
69
+ await this.serverAdapter.completeInitialization(this.server);
70
+ appLogger.info(`Node server running at ${this.runtimeOrigin}`);
71
+ return this.server;
72
+ }
73
+ async fetch(request) {
74
+ if (!this.serverAdapter) {
75
+ this.serverAdapter = await this.initializeServerAdapter();
76
+ }
77
+ return this.serverAdapter.handleRequest(request);
78
+ }
79
+ }
80
+ async function createNodeApp(options) {
81
+ return new NodeEcopagesApp(options, {
82
+ runtimeHost: new NodeRuntimeHost(new NodeHttpRequestBridge())
83
+ });
84
+ }
85
+ async function createApp(options) {
86
+ return createNodeApp(options);
87
+ }
88
+ export {
89
+ NodeEcopagesApp,
90
+ createApp,
91
+ createNodeApp
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
+ };
@@ -0,0 +1,26 @@
1
+ import type { WebSocket } from 'ws';
2
+ import type { ClientBridgeEvent, IClientBridge } from '../../types/public-types.js';
3
+ export declare class NodeClientBridge implements IClientBridge {
4
+ private subscribers;
5
+ private heartbeatTimer;
6
+ constructor();
7
+ /**
8
+ * Pings all open subscribers and removes any that are no longer in OPEN state.
9
+ * This prevents a slow memory leak caused by zombie connections that never
10
+ * send a close event (e.g. abruptly killed browsers, orphaned tabs, network drops).
11
+ */
12
+ private sweep;
13
+ subscribe(ws: WebSocket): void;
14
+ unsubscribe(ws: WebSocket): void;
15
+ broadcast(event: ClientBridgeEvent): void;
16
+ reload(): void;
17
+ cssUpdate(path: string): void;
18
+ update(path: string): void;
19
+ error(message: string): void;
20
+ get subscriberCount(): number;
21
+ /**
22
+ * Stops the heartbeat timer and clears all subscribers.
23
+ * Call this when the dev server is shutting down.
24
+ */
25
+ destroy(): void;
26
+ }
@@ -0,0 +1,66 @@
1
+ const HEARTBEAT_INTERVAL_MS = 3e4;
2
+ class NodeClientBridge {
3
+ subscribers = /* @__PURE__ */ new Set();
4
+ heartbeatTimer = null;
5
+ constructor() {
6
+ this.heartbeatTimer = setInterval(() => this.sweep(), HEARTBEAT_INTERVAL_MS);
7
+ this.heartbeatTimer.unref?.();
8
+ }
9
+ /**
10
+ * Pings all open subscribers and removes any that are no longer in OPEN state.
11
+ * This prevents a slow memory leak caused by zombie connections that never
12
+ * send a close event (e.g. abruptly killed browsers, orphaned tabs, network drops).
13
+ */
14
+ sweep() {
15
+ for (const ws of this.subscribers) {
16
+ if (ws.readyState !== 1) {
17
+ this.subscribers.delete(ws);
18
+ continue;
19
+ }
20
+ ws.ping();
21
+ }
22
+ }
23
+ subscribe(ws) {
24
+ this.subscribers.add(ws);
25
+ }
26
+ unsubscribe(ws) {
27
+ this.subscribers.delete(ws);
28
+ }
29
+ broadcast(event) {
30
+ const payload = JSON.stringify(event);
31
+ for (const ws of this.subscribers) {
32
+ if (ws.readyState === 1) {
33
+ ws.send(payload);
34
+ }
35
+ }
36
+ }
37
+ reload() {
38
+ this.broadcast({ type: "reload" });
39
+ }
40
+ cssUpdate(path) {
41
+ this.broadcast({ type: "css-update", path, timestamp: Date.now() });
42
+ }
43
+ update(path) {
44
+ this.broadcast({ type: "update", path, timestamp: Date.now() });
45
+ }
46
+ error(message) {
47
+ this.broadcast({ type: "error", message });
48
+ }
49
+ get subscriberCount() {
50
+ return this.subscribers.size;
51
+ }
52
+ /**
53
+ * Stops the heartbeat timer and clears all subscribers.
54
+ * Call this when the dev server is shutting down.
55
+ */
56
+ destroy() {
57
+ if (this.heartbeatTimer !== null) {
58
+ clearInterval(this.heartbeatTimer);
59
+ this.heartbeatTimer = null;
60
+ }
61
+ this.subscribers.clear();
62
+ }
63
+ }
64
+ export {
65
+ NodeClientBridge
66
+ };
@@ -0,0 +1,52 @@
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';
4
+ export interface NodeHmrManagerParams {
5
+ appConfig: EcoPagesAppConfig;
6
+ bridge: IClientBridge;
7
+ }
8
+ /**
9
+ * Node development HMR manager.
10
+ *
11
+ * @remarks
12
+ * This manager owns three separate concerns:
13
+ * - runtime websocket event fanout
14
+ * - entrypoint registration and dedupe
15
+ * - strategy coordination for rebuilds and invalidation
16
+ *
17
+ * The strict page-entrypoint contract lives here: `registerEntrypoint()` is
18
+ * reserved for integration-owned page bundles, while generic script assets must
19
+ * go through `registerScriptEntrypoint()`.
20
+ */
21
+ export declare class NodeHmrManager extends SharedHmrManager {
22
+ /**
23
+ * Creates the Node HMR manager over the shared coordination pipeline.
24
+ *
25
+ * @remarks
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.
30
+ */
31
+ constructor({ appConfig, bridge }: NodeHmrManagerParams);
32
+ /**
33
+ * Reuses the shared in-memory dependency graph when the app already has one and
34
+ * otherwise creates the default Node development graph.
35
+ */
36
+ protected createEntrypointDependencyGraph(existingEntrypointDependencyGraph: EntrypointDependencyGraph): InMemoryEntrypointDependencyGraph;
37
+ /**
38
+ * Tells the shared HMR manager to ignore missing-file events during Node watch
39
+ * mode.
40
+ *
41
+ * @remarks
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.
45
+ */
46
+ protected shouldSkipMissingFileChange(_filePath: string): boolean;
47
+ /**
48
+ * Disables HMR after a runtime bundle failure so the Node dev server can keep
49
+ * serving requests without repeatedly emitting broken updates.
50
+ */
51
+ protected onRuntimeBundleFailure(error: unknown): void;
52
+ }
@@ -0,0 +1,49 @@
1
+ import { appLogger } from "../../global/app-logger.js";
2
+ import {
3
+ InMemoryEntrypointDependencyGraph
4
+ } from "../../services/runtime-state/entrypoint-dependency-graph.service.js";
5
+ import { SharedHmrManager } from "../shared/shared-hmr-manager.js";
6
+ class NodeHmrManager extends SharedHmrManager {
7
+ /**
8
+ * Creates the Node HMR manager over the shared coordination pipeline.
9
+ *
10
+ * @remarks
11
+ * Unlike Bun, Node keeps websocket subscription wiring in the server adapter,
12
+ * so this manager only specializes the shared manager where runtime behavior
13
+ * actually differs: dependency-graph storage, missing-file tolerance, and how
14
+ * runtime bundle failures disable HMR.
15
+ */
16
+ constructor({ appConfig, bridge }) {
17
+ super({ appConfig, bridge });
18
+ }
19
+ /**
20
+ * Reuses the shared in-memory dependency graph when the app already has one and
21
+ * otherwise creates the default Node development graph.
22
+ */
23
+ createEntrypointDependencyGraph(existingEntrypointDependencyGraph) {
24
+ return existingEntrypointDependencyGraph instanceof InMemoryEntrypointDependencyGraph ? existingEntrypointDependencyGraph : new InMemoryEntrypointDependencyGraph();
25
+ }
26
+ /**
27
+ * Tells the shared HMR manager to ignore missing-file events during Node watch
28
+ * mode.
29
+ *
30
+ * @remarks
31
+ * Node file watching can briefly report remove-and-recreate sequences while a
32
+ * file is being rewritten. Treating those transient gaps as fatal would disable
33
+ * otherwise healthy development sessions.
34
+ */
35
+ shouldSkipMissingFileChange(_filePath) {
36
+ return true;
37
+ }
38
+ /**
39
+ * Disables HMR after a runtime bundle failure so the Node dev server can keep
40
+ * serving requests without repeatedly emitting broken updates.
41
+ */
42
+ onRuntimeBundleFailure(error) {
43
+ this.enabled = false;
44
+ appLogger.error("[HMR] Failed to build runtime script; continuing with HMR disabled.", error);
45
+ }
46
+ }
47
+ export {
48
+ NodeHmrManager
49
+ };
@@ -0,0 +1,57 @@
1
+ import { createServer, type Server as NodeServerInstance } from 'node:http';
2
+ import type { RuntimeHost, RuntimeHostStartOptions } from '../shared/runtime-host.js';
3
+ import { NodeHttpRequestBridge } from './http-request-bridge.js';
4
+ type NodeServerFactory = typeof createServer;
5
+ /**
6
+ * Node runtime host that binds the shared Web-request pipeline onto a concrete
7
+ * Node HTTP server.
8
+ *
9
+ * @remarks
10
+ * The host owns only transport concerns: creating the Node listener, converting
11
+ * requests through `NodeHttpRequestBridge`, and handling socket-level failures.
12
+ * Routing and rendering remain in the shared server adapter.
13
+ */
14
+ export declare class NodeRuntimeHost implements RuntimeHost<NodeServerInstance, {
15
+ port?: number;
16
+ hostname?: string;
17
+ }> {
18
+ private readonly requestBridge;
19
+ private readonly serverFactory;
20
+ /**
21
+ * Creates a Node runtime host with injectable request bridging and server
22
+ * creation seams for tests and alternate hosts.
23
+ */
24
+ constructor(requestBridge: NodeHttpRequestBridge, serverFactory?: NodeServerFactory);
25
+ /**
26
+ * Starts the Node HTTP server and wires each request through the shared Web
27
+ * request pipeline.
28
+ *
29
+ * @remarks
30
+ * Client disconnects are treated as normal aborts and do not trigger adapter
31
+ * error logging or the runtime host's `onError` callback.
32
+ */
33
+ start(options: RuntimeHostStartOptions<{
34
+ port?: number;
35
+ hostname?: string;
36
+ }>): Promise<NodeServerInstance>;
37
+ /**
38
+ * Stops the Node HTTP server and, by default, force-closes any remaining open
39
+ * connections.
40
+ */
41
+ stop(server: NodeServerInstance, options?: {
42
+ force?: boolean;
43
+ }): Promise<void>;
44
+ /**
45
+ * Resolves the public runtime origin from the bound Node listener.
46
+ *
47
+ * @remarks
48
+ * The host preserves the configured hostname rather than echoing the raw socket
49
+ * address because users care about the requested host contract, not the local
50
+ * bind interface that Node chose internally.
51
+ */
52
+ getOrigin(server: NodeServerInstance, fallbackServeOptions: {
53
+ port?: number;
54
+ hostname?: string;
55
+ }): string;
56
+ }
57
+ export {};
@@ -0,0 +1,92 @@
1
+ import { createServer } from "node:http";
2
+ import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
3
+ import { appLogger } from "../../global/app-logger.js";
4
+ import { resolveServeRuntimeOrigin } from "../shared/runtime-app-bootstrap.js";
5
+ import { isNodeClientAbortError, NodeHttpRequestBridge } from "./http-request-bridge.js";
6
+ class NodeRuntimeHost {
7
+ /**
8
+ * Creates a Node runtime host with injectable request bridging and server
9
+ * creation seams for tests and alternate hosts.
10
+ */
11
+ constructor(requestBridge, serverFactory = createServer) {
12
+ this.requestBridge = requestBridge;
13
+ this.serverFactory = serverFactory;
14
+ }
15
+ requestBridge;
16
+ serverFactory;
17
+ /**
18
+ * Starts the Node HTTP server and wires each request through the shared Web
19
+ * request pipeline.
20
+ *
21
+ * @remarks
22
+ * Client disconnects are treated as normal aborts and do not trigger adapter
23
+ * error logging or the runtime host's `onError` callback.
24
+ */
25
+ async start(options) {
26
+ const hostname = String(options.serveOptions.hostname ?? DEFAULT_ECOPAGES_HOSTNAME);
27
+ const port = Number(options.serveOptions.port ?? DEFAULT_ECOPAGES_PORT);
28
+ const runtimeOrigin = resolveServeRuntimeOrigin({ hostname, port });
29
+ const server = this.serverFactory(async (req, res) => {
30
+ try {
31
+ const webRequest = this.requestBridge.createWebRequest(req, runtimeOrigin);
32
+ const response = await options.handleRequest(webRequest);
33
+ await this.requestBridge.sendNodeResponse(res, response);
34
+ } catch (error) {
35
+ if (isNodeClientAbortError(error)) {
36
+ return;
37
+ }
38
+ appLogger.error("Node server adapter request failed", error);
39
+ res.statusCode = 500;
40
+ res.end("Internal Server Error");
41
+ await options.onError(error instanceof Error ? error : new Error(String(error)));
42
+ }
43
+ });
44
+ await new Promise((resolve) => {
45
+ server.listen(port, hostname, () => resolve());
46
+ });
47
+ return server;
48
+ }
49
+ /**
50
+ * Stops the Node HTTP server and, by default, force-closes any remaining open
51
+ * connections.
52
+ */
53
+ async stop(server, options) {
54
+ await new Promise((resolve, reject) => {
55
+ server.close((error) => {
56
+ if (error) {
57
+ reject(error);
58
+ return;
59
+ }
60
+ resolve();
61
+ });
62
+ if (options?.force ?? true) {
63
+ server.closeAllConnections();
64
+ }
65
+ });
66
+ }
67
+ /**
68
+ * Resolves the public runtime origin from the bound Node listener.
69
+ *
70
+ * @remarks
71
+ * The host preserves the configured hostname rather than echoing the raw socket
72
+ * address because users care about the requested host contract, not the local
73
+ * bind interface that Node chose internally.
74
+ */
75
+ getOrigin(server, fallbackServeOptions) {
76
+ const address = server.address();
77
+ const fallbackHostname = fallbackServeOptions.hostname ?? DEFAULT_ECOPAGES_HOSTNAME;
78
+ if (address && typeof address === "object") {
79
+ return resolveServeRuntimeOrigin({
80
+ hostname: fallbackHostname,
81
+ port: address.port
82
+ });
83
+ }
84
+ return resolveServeRuntimeOrigin({
85
+ hostname: fallbackHostname,
86
+ port: fallbackServeOptions.port
87
+ });
88
+ }
89
+ }
90
+ export {
91
+ NodeRuntimeHost
92
+ };
@@ -0,0 +1,19 @@
1
+ import { WebSocketServer } from 'ws';
2
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
3
+ import { NodeClientBridge } from './node-client-bridge.js';
4
+ import { NodeHmrManager } from './node-hmr-manager.js';
5
+ export interface NodeServerDevRuntime {
6
+ websocketServer: WebSocketServer;
7
+ bridge: NodeClientBridge;
8
+ hmrManager: NodeHmrManager;
9
+ }
10
+ export interface NodeServerDevRuntimeFactory {
11
+ create(options: {
12
+ appConfig: EcoPagesAppConfig;
13
+ }): NodeServerDevRuntime;
14
+ }
15
+ export declare class DefaultNodeServerDevRuntimeFactory implements NodeServerDevRuntimeFactory {
16
+ create(options: {
17
+ appConfig: EcoPagesAppConfig;
18
+ }): NodeServerDevRuntime;
19
+ }
@@ -0,0 +1,18 @@
1
+ import { WebSocketServer } from "ws";
2
+ import { NodeClientBridge } from "./node-client-bridge.js";
3
+ import { NodeHmrManager } from "./node-hmr-manager.js";
4
+ class DefaultNodeServerDevRuntimeFactory {
5
+ create(options) {
6
+ const websocketServer = new WebSocketServer({ noServer: true });
7
+ const bridge = new NodeClientBridge();
8
+ const hmrManager = new NodeHmrManager({ appConfig: options.appConfig, bridge });
9
+ return {
10
+ websocketServer,
11
+ bridge,
12
+ hmrManager
13
+ };
14
+ }
15
+ }
16
+ export {
17
+ DefaultNodeServerDevRuntimeFactory
18
+ };