@ecopages/core 0.2.0-alpha.5 → 0.2.0-alpha.50

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 (454) hide show
  1. package/README.md +268 -14
  2. package/package.json +92 -110
  3. package/src/adapters/README.md +39 -0
  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 +30 -62
  12. package/src/adapters/bun/hmr-manager.js +30 -194
  13. package/src/adapters/bun/index.d.ts +2 -3
  14. package/src/adapters/bun/index.js +3 -3
  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 +93 -32
  18. package/src/adapters/bun/server-adapter.js +166 -89
  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 +2 -6
  24. package/src/adapters/index.js +2 -8
  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 +38 -48
  31. package/src/adapters/node/node-hmr-manager.js +31 -203
  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 +20 -72
  37. package/src/adapters/node/server-adapter.js +99 -203
  38. package/src/adapters/node/static-content-server.d.ts +37 -1
  39. package/src/adapters/node/static-content-server.js +29 -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/{define-api-handler.d.ts → 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 -13
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -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 +20 -16
  53. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  54. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  56. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  57. package/src/adapters/shared/hmr-html-response.js +33 -0
  58. package/src/adapters/shared/render-context.d.ts +5 -3
  59. package/src/adapters/shared/render-context.js +27 -3
  60. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  61. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  62. package/src/adapters/shared/runtime-host.d.ts +12 -0
  63. package/src/adapters/shared/server-adapter.d.ts +33 -12
  64. package/src/adapters/shared/server-adapter.js +215 -132
  65. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  66. package/src/adapters/shared/server-route-handler.js +7 -16
  67. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  68. package/src/adapters/shared/server-static-builder.js +65 -11
  69. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  70. package/src/adapters/shared/shared-hmr-manager.js +240 -0
  71. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  72. package/src/build/README.md +107 -0
  73. package/src/build/build-adapter.d.ts +175 -3
  74. package/src/build/build-adapter.js +625 -16
  75. package/src/build/build-manifest.d.ts +27 -0
  76. package/src/build/build-manifest.js +30 -0
  77. package/src/build/dev-build-coordinator.d.ts +72 -0
  78. package/src/build/dev-build-coordinator.js +154 -0
  79. package/src/build/esbuild-build-adapter.d.ts +16 -6
  80. package/src/build/esbuild-build-adapter.js +202 -75
  81. package/src/build/runtime-build-executor.d.ts +14 -0
  82. package/src/build/runtime-build-executor.js +22 -0
  83. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  84. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  85. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  86. package/src/build/runtime-specifier-aliases.js +95 -0
  87. package/src/config/README.md +36 -0
  88. package/src/config/config-builder.d.ts +54 -29
  89. package/src/config/config-builder.js +256 -50
  90. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  91. package/src/{constants.js → config/constants.js} +4 -0
  92. package/src/declarations.d.ts +19 -14
  93. package/src/dev/host-runtime.d.ts +10 -0
  94. package/src/dev/host-runtime.js +24 -0
  95. package/src/dev/sc-server.d.ts +1 -1
  96. package/src/dev/sc-server.js +1 -1
  97. package/src/eco/README.md +70 -16
  98. package/src/eco/eco.browser.d.ts +2 -0
  99. package/src/eco/eco.browser.js +88 -0
  100. package/src/eco/eco.js +63 -54
  101. package/src/eco/eco.types.d.ts +69 -6
  102. package/src/eco/eco.utils.d.ts +1 -40
  103. package/src/eco/eco.utils.js +5 -35
  104. package/src/eco/global-injector-map.d.ts +3 -3
  105. package/src/eco/global-injector-map.js +2 -2
  106. package/src/eco/lazy-injector-map.d.ts +2 -2
  107. package/src/errors/index.d.ts +1 -0
  108. package/src/errors/index.js +3 -1
  109. package/src/hmr/README.md +26 -0
  110. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  111. package/src/hmr/client/hmr-runtime.js +38 -7
  112. package/src/hmr/hmr-strategy.d.ts +16 -13
  113. package/src/hmr/hmr-strategy.js +22 -7
  114. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  115. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  116. package/src/hmr/hmr.test.e2e.js +26 -33
  117. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  118. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  119. package/src/hmr/strategies/js-hmr-strategy.d.ts +40 -42
  120. package/src/hmr/strategies/js-hmr-strategy.js +24 -43
  121. package/src/index.browser.d.ts +2 -2
  122. package/src/index.browser.js +1 -1
  123. package/src/index.d.ts +4 -3
  124. package/src/index.js +16 -5
  125. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  126. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  127. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  128. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  129. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  130. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  131. package/src/plugins/README.md +35 -0
  132. package/src/plugins/alias-resolver-plugin.d.ts +1 -0
  133. package/src/plugins/alias-resolver-plugin.js +27 -5
  134. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  135. package/src/plugins/eco-component-meta-plugin.js +42 -24
  136. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  137. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  138. package/src/plugins/integration-plugin.d.ts +147 -29
  139. package/src/plugins/integration-plugin.js +103 -14
  140. package/src/plugins/processor.d.ts +17 -2
  141. package/src/plugins/processor.js +22 -3
  142. package/src/plugins/runtime-capability.d.ts +9 -0
  143. package/src/plugins/source-transform.d.ts +46 -0
  144. package/src/plugins/source-transform.js +71 -0
  145. package/src/route-renderer/GRAPH.md +83 -325
  146. package/src/route-renderer/README.md +73 -90
  147. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  148. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  149. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  150. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  151. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  152. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  153. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  154. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  155. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  156. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  157. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  158. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  159. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  160. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  161. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  162. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  163. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  164. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  165. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  166. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  167. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  168. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  169. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  170. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  171. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  172. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  173. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  174. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  175. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  176. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  177. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  178. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  179. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  180. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  181. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  182. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  183. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  184. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  185. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  186. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  187. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  188. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  189. package/src/route-renderer/route-renderer.d.ts +57 -14
  190. package/src/route-renderer/route-renderer.js +30 -18
  191. package/src/router/README.md +94 -0
  192. package/src/router/client/link-intent.d.ts +53 -0
  193. package/src/router/client/link-intent.js +34 -0
  194. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  195. package/src/router/client/link-intent.test.browser.js +43 -0
  196. package/src/router/client/navigation-coordinator.d.ts +169 -0
  197. package/src/router/client/navigation-coordinator.js +215 -0
  198. package/src/router/server/route-registry.d.ts +78 -0
  199. package/src/router/server/route-registry.js +262 -0
  200. package/src/services/README.md +28 -0
  201. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  202. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  203. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  204. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  205. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  208. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  209. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  210. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  211. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  212. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  213. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  214. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  215. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  216. package/src/services/assets/asset-processing-service/index.js +6 -0
  217. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  218. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  219. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  220. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  221. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  222. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  223. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  224. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  225. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  226. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  227. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
  228. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
  229. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  230. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  231. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  232. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  233. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  234. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  235. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  236. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  237. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  238. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  239. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  240. package/src/services/assets/browser-bundle.service.js +41 -0
  241. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  242. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  243. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  244. package/src/services/html/html-rewriter-provider.service.js +68 -0
  245. package/src/services/html/html-transformer.service.d.ts +96 -0
  246. package/src/services/html/html-transformer.service.js +287 -0
  247. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  248. package/src/services/invalidation/development-invalidation.service.js +190 -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 +24 -0
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
  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/node-bootstrap-plugin.d.ts +38 -0
  258. package/src/services/module-loading/node-bootstrap-plugin.js +215 -0
  259. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  260. package/src/services/module-loading/page-module-import.service.js +191 -0
  261. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  262. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  263. package/src/services/module-loading/source-module-support.d.ts +5 -0
  264. package/src/services/module-loading/source-module-support.js +8 -0
  265. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  266. package/src/services/runtime-state/dev-graph.service.js +162 -0
  267. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  268. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  269. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  270. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  271. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  272. package/src/static-site-generator/README.md +26 -0
  273. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  274. package/src/static-site-generator/static-site-generator.js +182 -138
  275. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  276. package/src/types/internal-types.js +0 -0
  277. package/src/{public-types.d.ts → types/public-types.d.ts} +239 -31
  278. package/src/types/public-types.js +0 -0
  279. package/src/utils/html-escaping.d.ts +7 -0
  280. package/src/utils/html-escaping.js +6 -0
  281. package/src/utils/locals-utils.d.ts +1 -1
  282. package/src/utils/parse-cli-args.d.ts +4 -1
  283. package/src/utils/parse-cli-args.js +16 -1
  284. package/src/utils/resolve-work-dir.d.ts +11 -0
  285. package/src/utils/resolve-work-dir.js +31 -0
  286. package/src/watchers/project-watcher.d.ts +11 -7
  287. package/src/watchers/project-watcher.js +69 -75
  288. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  289. package/src/watchers/project-watcher.test-helpers.js +6 -5
  290. package/CHANGELOG.md +0 -94
  291. package/src/adapters/abstract/application-adapter.ts +0 -337
  292. package/src/adapters/abstract/router-adapter.ts +0 -30
  293. package/src/adapters/abstract/server-adapter.ts +0 -79
  294. package/src/adapters/bun/client-bridge.ts +0 -62
  295. package/src/adapters/bun/create-app.ts +0 -189
  296. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  297. package/src/adapters/bun/define-api-handler.ts +0 -114
  298. package/src/adapters/bun/hmr-manager.ts +0 -276
  299. package/src/adapters/bun/index.ts +0 -3
  300. package/src/adapters/bun/server-adapter.ts +0 -492
  301. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  302. package/src/adapters/bun/server-lifecycle.js +0 -120
  303. package/src/adapters/bun/server-lifecycle.ts +0 -154
  304. package/src/adapters/index.ts +0 -6
  305. package/src/adapters/node/create-app.ts +0 -179
  306. package/src/adapters/node/index.d.ts +0 -4
  307. package/src/adapters/node/index.js +0 -8
  308. package/src/adapters/node/index.ts +0 -9
  309. package/src/adapters/node/node-client-bridge.ts +0 -79
  310. package/src/adapters/node/node-hmr-manager.ts +0 -271
  311. package/src/adapters/node/server-adapter.ts +0 -561
  312. package/src/adapters/node/static-content-server.ts +0 -203
  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/explicit-static-route-matcher.ts +0 -134
  316. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  317. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  318. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  319. package/src/adapters/shared/render-context.ts +0 -105
  320. package/src/adapters/shared/server-adapter.ts +0 -442
  321. package/src/adapters/shared/server-route-handler.ts +0 -166
  322. package/src/adapters/shared/server-static-builder.ts +0 -82
  323. package/src/build/build-adapter.ts +0 -133
  324. package/src/build/build-types.ts +0 -83
  325. package/src/build/esbuild-build-adapter.ts +0 -511
  326. package/src/config/config-builder.ts +0 -474
  327. package/src/constants.ts +0 -39
  328. package/src/create-app.ts +0 -87
  329. package/src/define-api-handler.js +0 -15
  330. package/src/define-api-handler.ts +0 -66
  331. package/src/dev/sc-server.ts +0 -143
  332. package/src/eco/component-render-context.d.ts +0 -105
  333. package/src/eco/component-render-context.js +0 -77
  334. package/src/eco/component-render-context.ts +0 -202
  335. package/src/eco/eco.ts +0 -221
  336. package/src/eco/eco.types.ts +0 -202
  337. package/src/eco/eco.utils.ts +0 -89
  338. package/src/eco/global-injector-map.ts +0 -112
  339. package/src/eco/lazy-injector-map.ts +0 -120
  340. package/src/eco/module-dependencies.ts +0 -75
  341. package/src/errors/http-error.ts +0 -72
  342. package/src/errors/index.ts +0 -2
  343. package/src/errors/locals-access-error.ts +0 -7
  344. package/src/global/app-logger.ts +0 -4
  345. package/src/hmr/client/hmr-runtime.ts +0 -121
  346. package/src/hmr/hmr-strategy.ts +0 -172
  347. package/src/hmr/hmr.test.e2e.ts +0 -75
  348. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  349. package/src/hmr/strategies/js-hmr-strategy.ts +0 -327
  350. package/src/index.browser.ts +0 -3
  351. package/src/index.ts +0 -5
  352. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  353. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  354. package/src/internal-types.ts +0 -212
  355. package/src/plugins/alias-resolver-plugin.ts +0 -45
  356. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  357. package/src/plugins/integration-plugin.ts +0 -184
  358. package/src/plugins/processor.ts +0 -220
  359. package/src/public-types.ts +0 -1255
  360. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  361. package/src/route-renderer/component-graph-executor.js +0 -31
  362. package/src/route-renderer/component-graph-executor.ts +0 -84
  363. package/src/route-renderer/component-graph.d.ts +0 -42
  364. package/src/route-renderer/component-graph.js +0 -72
  365. package/src/route-renderer/component-graph.ts +0 -159
  366. package/src/route-renderer/component-marker.d.ts +0 -52
  367. package/src/route-renderer/component-marker.js +0 -46
  368. package/src/route-renderer/component-marker.ts +0 -117
  369. package/src/route-renderer/dependency-resolver.js +0 -428
  370. package/src/route-renderer/dependency-resolver.ts +0 -596
  371. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  372. package/src/route-renderer/html-post-processing.service.js +0 -86
  373. package/src/route-renderer/html-post-processing.service.ts +0 -103
  374. package/src/route-renderer/integration-renderer.d.ts +0 -339
  375. package/src/route-renderer/integration-renderer.js +0 -526
  376. package/src/route-renderer/integration-renderer.ts +0 -696
  377. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  378. package/src/route-renderer/marker-graph-resolver.js +0 -93
  379. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  380. package/src/route-renderer/page-module-loader.d.ts +0 -61
  381. package/src/route-renderer/page-module-loader.ts +0 -153
  382. package/src/route-renderer/render-execution.service.d.ts +0 -69
  383. package/src/route-renderer/render-execution.service.js +0 -91
  384. package/src/route-renderer/render-execution.service.ts +0 -158
  385. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  386. package/src/route-renderer/render-preparation.service.js +0 -243
  387. package/src/route-renderer/render-preparation.service.ts +0 -358
  388. package/src/route-renderer/route-renderer.ts +0 -80
  389. package/src/router/fs-router-scanner.d.ts +0 -41
  390. package/src/router/fs-router-scanner.js +0 -155
  391. package/src/router/fs-router-scanner.ts +0 -217
  392. package/src/router/fs-router.d.ts +0 -26
  393. package/src/router/fs-router.js +0 -100
  394. package/src/router/fs-router.ts +0 -122
  395. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  396. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  397. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  398. package/src/services/asset-processing-service/assets.types.ts +0 -112
  399. package/src/services/asset-processing-service/index.d.ts +0 -3
  400. package/src/services/asset-processing-service/index.js +0 -3
  401. package/src/services/asset-processing-service/index.ts +0 -3
  402. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  403. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  404. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  405. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  406. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  407. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  408. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  409. package/src/services/asset-processing-service/processors/index.js +0 -5
  410. package/src/services/asset-processing-service/processors/index.ts +0 -5
  411. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  412. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  413. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  414. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  415. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  416. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  417. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  418. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  419. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  420. package/src/services/cache/cache.types.ts +0 -126
  421. package/src/services/cache/index.ts +0 -18
  422. package/src/services/cache/memory-cache-store.ts +0 -130
  423. package/src/services/cache/page-cache-service.ts +0 -202
  424. package/src/services/html-transformer.service.d.ts +0 -50
  425. package/src/services/html-transformer.service.js +0 -163
  426. package/src/services/html-transformer.service.ts +0 -217
  427. package/src/services/page-module-import.service.d.ts +0 -37
  428. package/src/services/page-module-import.service.js +0 -88
  429. package/src/services/page-module-import.service.ts +0 -129
  430. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  431. package/src/services/schema-validation-service.ts +0 -204
  432. package/src/services/validation/standard-schema.types.ts +0 -68
  433. package/src/static-site-generator/static-site-generator.ts +0 -359
  434. package/src/utils/css.d.ts +0 -1
  435. package/src/utils/css.js +0 -7
  436. package/src/utils/css.ts +0 -5
  437. package/src/utils/deep-merge.ts +0 -47
  438. package/src/utils/hash.ts +0 -5
  439. package/src/utils/html.ts +0 -1
  440. package/src/utils/invariant.ts +0 -15
  441. package/src/utils/locals-utils.ts +0 -37
  442. package/src/utils/parse-cli-args.ts +0 -83
  443. package/src/utils/path-utils.module.ts +0 -14
  444. package/src/utils/runtime.ts +0 -44
  445. package/src/utils/server-utils.module.ts +0 -67
  446. package/src/watchers/project-watcher.test-helpers.ts +0 -40
  447. package/src/watchers/project-watcher.ts +0 -364
  448. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  449. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  450. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  451. /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
  452. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  453. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  454. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -1,219 +1,47 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { RESOLVED_ASSETS_DIR } from "../../constants.js";
5
- import { defaultBuildAdapter } from "../../build/build-adapter.js";
6
- import { fileSystem } from "@ecopages/file-system";
7
- import { DefaultHmrStrategy } from "../../hmr/strategies/default-hmr-strategy.js";
8
- import { JsHmrStrategy } from "../../hmr/strategies/js-hmr-strategy.js";
9
1
  import { appLogger } from "../../global/app-logger.js";
10
- class NodeHmrManager {
11
- appConfig;
12
- bridge;
13
- watchers = /* @__PURE__ */ new Map();
14
- watchedFiles = /* @__PURE__ */ new Map();
15
- specifierMap = /* @__PURE__ */ new Map();
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 {
16
7
  /**
17
- * Node-only reverse invalidation index: dependency file -> affected entrypoints.
18
- */
19
- dependencyEntrypoints = /* @__PURE__ */ new Map();
20
- /**
21
- * Node-only forward index: entrypoint -> latest dependency set.
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.
22
15
  */
23
- entrypointDependencies = /* @__PURE__ */ new Map();
24
- distDir;
25
- plugins = [];
26
- enabled = true;
27
- strategies = [];
28
16
  constructor({ appConfig, bridge }) {
29
- this.appConfig = appConfig;
30
- this.bridge = bridge;
31
- this.distDir = path.join(this.appConfig.absolutePaths.distDir, RESOLVED_ASSETS_DIR, "_hmr");
32
- this.cleanDistDir();
33
- this.initializeStrategies();
17
+ super({ appConfig, bridge });
34
18
  }
35
19
  /**
36
- * Ensures the HMR output directory exists.
37
- *
38
- * This must not remove the directory because multiple app processes
39
- * can share the same dist path during e2e runs.
20
+ * Reuses the shared in-memory dependency graph when the app already has one and
21
+ * otherwise creates the default Node development graph.
40
22
  */
41
- cleanDistDir() {
42
- fileSystem.ensureDir(this.distDir);
43
- }
44
- initializeStrategies() {
45
- const jsContext = {
46
- getWatchedFiles: () => this.watchedFiles,
47
- getSpecifierMap: () => this.specifierMap,
48
- getDependencyEntrypoints: (filePath) => new Set(this.dependencyEntrypoints.get(path.resolve(filePath)) ?? []),
49
- setEntrypointDependencies: (entrypointPath, dependencies) => this.setEntrypointDependencies(entrypointPath, dependencies),
50
- getDistDir: () => this.distDir,
51
- getPlugins: () => this.plugins,
52
- getSrcDir: () => this.appConfig.absolutePaths.srcDir
53
- };
54
- this.strategies = [new JsHmrStrategy(jsContext), new DefaultHmrStrategy()];
55
- }
56
- registerStrategy(strategy) {
57
- this.strategies.push(strategy);
58
- }
59
- setPlugins(plugins) {
60
- this.plugins = [...plugins];
61
- }
62
- setEnabled(enabled) {
63
- this.enabled = enabled;
64
- }
65
- isEnabled() {
66
- return this.enabled;
67
- }
68
- registerSpecifierMap(map) {
69
- for (const [specifier, url] of Object.entries(map)) {
70
- this.specifierMap.set(specifier, url);
71
- }
72
- }
73
- async buildRuntime() {
74
- const currentDir = path.dirname(fileURLToPath(import.meta.url));
75
- const runtimeSource = path.resolve(currentDir, "../../hmr/client/hmr-runtime.js");
76
- const result = await defaultBuildAdapter.build({
77
- entrypoints: [runtimeSource],
78
- outdir: this.distDir,
79
- naming: "_hmr_runtime.js",
80
- minify: false,
81
- ...defaultBuildAdapter.getTranspileOptions("hmr-runtime"),
82
- plugins: this.plugins
83
- });
84
- if (!result.success) {
85
- appLogger.error("[HMR] Failed to build runtime script:", result.logs);
86
- }
87
- }
88
- getRuntimePath() {
89
- return path.join(this.distDir, "_hmr_runtime.js");
90
- }
91
- broadcast(event) {
92
- appLogger.debug(
93
- `[HMR] Broadcasting ${event.type} event, path=${event.path || "all"}, subscribers=${this.bridge.subscriberCount}`
94
- );
95
- this.bridge.broadcast(event);
96
- }
97
- async handleFileChange(filePath) {
98
- const sorted = [...this.strategies].sort((a, b) => b.priority - a.priority);
99
- const strategy = sorted.find((s) => {
100
- try {
101
- return s.matches(filePath);
102
- } catch (err) {
103
- appLogger.error(err);
104
- return false;
105
- }
106
- });
107
- if (!strategy) {
108
- appLogger.warn(`[HMR] No strategy found for ${filePath}`);
109
- return;
110
- }
111
- appLogger.debug(`[NodeHmrManager] Selected strategy: ${strategy.constructor.name}`);
112
- const action = await strategy.process(filePath);
113
- if (action.type === "broadcast") {
114
- if (action.events) {
115
- for (const event of action.events) {
116
- this.broadcast(event);
117
- }
118
- }
119
- }
120
- }
121
- getOutputUrl(entrypointPath) {
122
- return this.watchedFiles.get(entrypointPath);
123
- }
124
- getWatchedFiles() {
125
- return this.watchedFiles;
126
- }
127
- getSpecifierMap() {
128
- return this.specifierMap;
129
- }
130
- getDistDir() {
131
- return this.distDir;
132
- }
133
- getPlugins() {
134
- return this.plugins;
135
- }
136
- getDefaultContext() {
137
- return {
138
- getWatchedFiles: () => this.watchedFiles,
139
- getSpecifierMap: () => this.specifierMap,
140
- getDistDir: () => this.distDir,
141
- getPlugins: () => this.plugins,
142
- getSrcDir: () => this.appConfig.absolutePaths.srcDir,
143
- getLayoutsDir: () => this.appConfig.absolutePaths.layoutsDir,
144
- getPagesDir: () => this.appConfig.absolutePaths.pagesDir
145
- };
23
+ createEntrypointDependencyGraph(existingEntrypointDependencyGraph) {
24
+ return existingEntrypointDependencyGraph instanceof InMemoryEntrypointDependencyGraph ? existingEntrypointDependencyGraph : new InMemoryEntrypointDependencyGraph();
146
25
  }
147
26
  /**
148
- * Updates Node HMR dependency indexes for selective invalidation.
27
+ * Tells the shared HMR manager to ignore missing-file events during Node watch
28
+ * mode.
149
29
  *
150
30
  * @remarks
151
- * Graph data comes from Node/esbuild build metadata and does not affect Bun
152
- * HMR behavior.
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.
153
34
  */
154
- setEntrypointDependencies(entrypointPath, dependencies) {
155
- const normalizedEntrypoint = path.resolve(entrypointPath);
156
- const previousDependencies = this.entrypointDependencies.get(normalizedEntrypoint);
157
- if (previousDependencies) {
158
- for (const dependencyPath of previousDependencies) {
159
- const entrypoints = this.dependencyEntrypoints.get(dependencyPath);
160
- if (!entrypoints) {
161
- continue;
162
- }
163
- entrypoints.delete(normalizedEntrypoint);
164
- if (entrypoints.size === 0) {
165
- this.dependencyEntrypoints.delete(dependencyPath);
166
- }
167
- }
168
- }
169
- const normalizedDependencies = /* @__PURE__ */ new Set([
170
- normalizedEntrypoint,
171
- ...dependencies.map((dependencyPath) => path.resolve(dependencyPath))
172
- ]);
173
- this.entrypointDependencies.set(normalizedEntrypoint, normalizedDependencies);
174
- for (const dependencyPath of normalizedDependencies) {
175
- const entrypoints = this.dependencyEntrypoints.get(dependencyPath) ?? /* @__PURE__ */ new Set();
176
- entrypoints.add(normalizedEntrypoint);
177
- this.dependencyEntrypoints.set(dependencyPath, entrypoints);
178
- }
179
- }
180
- async registerEntrypoint(entrypointPath) {
181
- if (this.watchedFiles.has(entrypointPath)) {
182
- return this.watchedFiles.get(entrypointPath);
183
- }
184
- const srcDir = this.appConfig.absolutePaths.srcDir;
185
- const relativePath = path.relative(srcDir, entrypointPath);
186
- const relativePathJs = relativePath.replace(/\.(tsx?|jsx?|mdx?)$/, ".js");
187
- const encodedPathJs = this.encodeDynamicSegments(relativePathJs);
188
- const urlPath = encodedPathJs.split(path.sep).join("/");
189
- const outputUrl = `/${path.join(RESOLVED_ASSETS_DIR, "_hmr", urlPath)}`;
190
- const outputPath = path.join(this.distDir, urlPath);
191
- this.watchedFiles.set(entrypointPath, outputUrl);
192
- await this.handleFileChange(entrypointPath);
193
- if (!fileSystem.exists(outputPath)) {
194
- const fallback = await defaultBuildAdapter.build({
195
- entrypoints: [entrypointPath],
196
- outdir: this.distDir,
197
- naming: encodedPathJs,
198
- minify: false,
199
- external: Array.from(this.specifierMap.keys()),
200
- ...defaultBuildAdapter.getTranspileOptions("hmr-entrypoint"),
201
- plugins: this.plugins
202
- });
203
- if (!fallback.success) {
204
- appLogger.error(`[HMR] Fallback build failed for ${entrypointPath}:`, fallback.logs);
205
- }
206
- }
207
- return outputUrl;
35
+ shouldSkipMissingFileChange(_filePath) {
36
+ return true;
208
37
  }
209
- encodeDynamicSegments(filepath) {
210
- return filepath.replace(/\[([^\]]+)\]/g, "_$1_");
211
- }
212
- stop() {
213
- for (const watcher of this.watchers.values()) {
214
- watcher.close();
215
- }
216
- this.watchers.clear();
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);
217
45
  }
218
46
  }
219
47
  export {
@@ -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
+ };
@@ -1,8 +1,11 @@
1
1
  import { type Server as NodeHttpServer } from 'node:http';
2
- import type { EcoPagesAppConfig } from '../../internal-types.js';
3
- import type { ApiHandler, ErrorHandler, StaticRoute } from '../../public-types.js';
2
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
3
+ import type { ApiHandler, ErrorHandler, StaticRoute } from '../../types/public-types.js';
4
4
  import { SharedServerAdapter } from '../shared/server-adapter.js';
5
5
  import type { ServerAdapterResult } from '../abstract/server-adapter.js';
6
+ import { NodeHttpRequestBridge } from './http-request-bridge.js';
7
+ import type { StaticPreviewHost } from '../shared/static-preview-host.js';
8
+ import { type NodeServerDevRuntimeFactory } from './server-adapter-dependencies.js';
6
9
  export type NodeServerInstance = NodeHttpServer;
7
10
  export type NodeServeAdapterServerOptions = {
8
11
  port?: number;
@@ -19,6 +22,9 @@ export interface NodeServerAdapterParams {
19
22
  options?: {
20
23
  watch?: boolean;
21
24
  };
25
+ previewHost?: StaticPreviewHost;
26
+ requestBridge?: NodeHttpRequestBridge;
27
+ devRuntimeFactory?: NodeServerDevRuntimeFactory;
22
28
  }
23
29
  export interface NodeServerAdapterResult extends ServerAdapterResult {
24
30
  completeInitialization: (server: NodeServerInstance) => Promise<void>;
@@ -50,10 +56,14 @@ export declare class NodeServerAdapter extends SharedServerAdapter<NodeServerAda
50
56
  private apiHandlers;
51
57
  private staticRoutes;
52
58
  private errorHandler?;
53
- private previewServer;
54
59
  private bridge;
55
60
  private hmrManager;
56
- private processorBuildPlugins;
61
+ private readonly previewHost;
62
+ private readonly requestBridge;
63
+ private readonly devRuntimeFactory;
64
+ private shouldInjectHmrScript;
65
+ private isHtmlResponse;
66
+ private maybeInjectHmrScript;
57
67
  constructor(options: NodeServerAdapterParams);
58
68
  /**
59
69
  * Prepares the adapter for use.
@@ -69,75 +79,13 @@ export declare class NodeServerAdapter extends SharedServerAdapter<NodeServerAda
69
79
  * processors during their `setup()` calls.
70
80
  */
71
81
  initialize(): Promise<void>;
72
- /**
73
- * Registers every configured file loader as a build plugin on the shared
74
- * `defaultBuildAdapter`.
75
- *
76
- * Loaders are registered on the *shared* adapter (not on a per-build instance)
77
- * because they must be available globally to both the SSR build and any dynamic
78
- * transpile passes that happen outside of a top-level `build()` call (e.g. HMR
79
- * incremental rebuilds).
80
- */
81
- private setupLoaders;
82
- private copyPublicDir;
83
- /**
84
- * Sets up all configured processors and integrations in two distinct phases.
85
- *
86
- * **Phase 1 — Processors:**
87
- * Each processor's `setup()` is called first. A processor may expose two
88
- * plugin lists:
89
- * - `plugins` — transform plugins used during SSR rendering (e.g. PostCSS).
90
- * - `buildPlugins` — esbuild plugins used during the client bundle step.
91
- * Both are registered on `defaultBuildAdapter` so later build calls pick them up.
92
- *
93
- * **Phase 2 — Integrations:**
94
- * Integrations receive the fully-resolved app config, the runtime origin, and
95
- * (if already initialised) the HMR manager before their own `setup()` is called.
96
- * This ordering ensures integrations can query config values that processors
97
- * may have mutated during phase 1.
98
- */
99
- private initializePlugins;
82
+ private prepareRuntimePublicDir;
100
83
  getServerOptions(): NodeServeAdapterServerOptions;
101
84
  buildStatic(options?: {
102
85
  preview?: boolean;
103
86
  }): Promise<void>;
104
- /**
105
- * Converts a Node.js `IncomingMessage` into a Web API `Request`.
106
- *
107
- * Multi-value headers (e.g. `set-cookie`) are appended individually so no
108
- * value is silently dropped.
109
- *
110
- * For methods that carry a body (`POST`, `PUT`, `PATCH`, …), the raw
111
- * `IncomingMessage` stream is wrapped in a `ReadableStream` rather than
112
- * cast directly to `BodyInit`. See the inline doc block inside the `if`
113
- * branch for the rationale (client-abort handling).
114
- *
115
- * `duplex: 'half'` is required by the `fetch` spec when a streaming body is
116
- * provided — without it Node.js 18+ throws a `TypeError`.
117
- */
118
- private createWebRequest;
119
- /**
120
- * Writes a Web `Response` back to a Node.js `ServerResponse`.
121
- *
122
- * The entire body is buffered via `arrayBuffer()` before writing. This is
123
- * intentional for the current use-case (SSR pages and API routes), where
124
- * responses are typically small and fully materialised. Streaming responses
125
- * are not yet supported.
126
- */
127
- private sendNodeResponse;
128
- /**
129
- * Starts an ephemeral HTTP server used *only* during a static site generation
130
- * run.
131
- *
132
- * Static generation works by having the `StaticSiteGenerator` issue real HTTP
133
- * requests to a live server for each route, capturing the rendered HTML. This
134
- * approach reuses the normal request pipeline (middleware, caching, API
135
- * handlers) without any special-casing for the build path.
136
- *
137
- * The server is torn down immediately after generation completes via
138
- * `stopBuildRuntimeServer`, so it never overlaps with the actual dev/prod server.
139
- */
140
87
  private startBuildRuntimeServer;
88
+ private getListeningServerOrigin;
141
89
  /**
142
90
  * Gracefully shuts down the ephemeral build runtime server.
143
91
  *
@@ -161,7 +109,7 @@ export declare class NodeServerAdapter extends SharedServerAdapter<NodeServerAda
161
109
  * underlying socket closes early — into a 499 response so it does not
162
110
  * incorrectly surface as a 500 in application logs.
163
111
  */
164
- handleRequest(_request: Request): Promise<Response>;
112
+ handleRequest(request: Request): Promise<Response>;
165
113
  /**
166
114
  * Called once the HTTP server is bound and listening.
167
115
  *
@@ -172,13 +120,13 @@ export declare class NodeServerAdapter extends SharedServerAdapter<NodeServerAda
172
120
  * broadcast + heartbeat cleanup.
173
121
  * - `NodeHmrManager` watches the filesystem and triggers incremental esbuild
174
122
  * rebuilds, notifying connected clients via the bridge.
175
- * - `ProjectWatcher` listens for route-level file changes and refreshes the
176
- * router and response handlers when pages are added or removed.
123
+ * - Shared watcher bootstrapping listens for route-level file changes and
124
+ * refreshes the router and response handlers when pages are added or removed.
177
125
  *
178
126
  * WebSocket upgrade requests that do not target `/_hmr` are rejected with an
179
127
  * immediate socket destroy to prevent unhandled upgrade leaks.
180
128
  */
181
- completeInitialization(_server: NodeServerInstance): Promise<void>;
129
+ completeInitialization(server: NodeServerInstance): Promise<void>;
182
130
  }
183
131
  /**
184
132
  * Factory function that creates and fully initialises a `NodeServerAdapter`.