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

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 (456) hide show
  1. package/README.md +267 -14
  2. package/package.json +98 -108
  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 +98 -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/browser-runtime-import-rewrite-plugin.d.ts +26 -0
  74. package/src/build/browser-runtime-import-rewrite-plugin.js +162 -0
  75. package/src/build/browser-runtime-manifest.d.ts +31 -0
  76. package/src/build/browser-runtime-manifest.js +61 -0
  77. package/src/build/build-adapter.d.ts +175 -3
  78. package/src/build/build-adapter.js +633 -16
  79. package/src/build/build-manifest.d.ts +33 -0
  80. package/src/build/build-manifest.js +52 -0
  81. package/src/build/dev-build-coordinator.d.ts +72 -0
  82. package/src/build/dev-build-coordinator.js +154 -0
  83. package/src/build/esbuild-build-adapter.d.ts +16 -6
  84. package/src/build/esbuild-build-adapter.js +205 -75
  85. package/src/build/runtime-build-executor.d.ts +14 -0
  86. package/src/build/runtime-build-executor.js +22 -0
  87. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  88. package/src/build/runtime-specifier-alias-plugin.js +31 -0
  89. package/src/config/README.md +36 -0
  90. package/src/config/config-builder.d.ts +54 -29
  91. package/src/config/config-builder.js +256 -50
  92. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  93. package/src/{constants.js → config/constants.js} +4 -0
  94. package/src/declarations.d.ts +19 -14
  95. package/src/dev/host-runtime.d.ts +10 -0
  96. package/src/dev/host-runtime.js +24 -0
  97. package/src/dev/sc-server.d.ts +1 -1
  98. package/src/dev/sc-server.js +1 -1
  99. package/src/eco/README.md +70 -16
  100. package/src/eco/eco.browser.d.ts +2 -0
  101. package/src/eco/eco.browser.js +88 -0
  102. package/src/eco/eco.js +63 -54
  103. package/src/eco/eco.types.d.ts +69 -6
  104. package/src/eco/eco.utils.d.ts +1 -40
  105. package/src/eco/eco.utils.js +5 -35
  106. package/src/eco/global-injector-map.d.ts +3 -3
  107. package/src/eco/global-injector-map.js +2 -2
  108. package/src/eco/lazy-injector-map.d.ts +2 -2
  109. package/src/errors/index.d.ts +1 -0
  110. package/src/errors/index.js +3 -1
  111. package/src/hmr/README.md +26 -0
  112. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  113. package/src/hmr/client/hmr-runtime.js +38 -7
  114. package/src/hmr/hmr-strategy.d.ts +16 -13
  115. package/src/hmr/hmr-strategy.js +22 -7
  116. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  117. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  118. package/src/hmr/hmr.test.e2e.js +26 -33
  119. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  120. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  121. package/src/hmr/strategies/js-hmr-strategy.d.ts +40 -42
  122. package/src/hmr/strategies/js-hmr-strategy.js +24 -43
  123. package/src/index.browser.d.ts +2 -2
  124. package/src/index.browser.js +1 -1
  125. package/src/index.d.ts +4 -3
  126. package/src/index.js +16 -5
  127. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  128. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  129. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  130. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  131. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  132. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  133. package/src/plugins/README.md +35 -0
  134. package/src/plugins/alias-resolver-plugin.d.ts +1 -0
  135. package/src/plugins/alias-resolver-plugin.js +27 -5
  136. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  137. package/src/plugins/eco-component-meta-plugin.js +42 -24
  138. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  139. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  140. package/src/plugins/integration-plugin.d.ts +157 -29
  141. package/src/plugins/integration-plugin.js +115 -14
  142. package/src/plugins/processor.d.ts +17 -2
  143. package/src/plugins/processor.js +22 -3
  144. package/src/plugins/runtime-capability.d.ts +9 -0
  145. package/src/plugins/source-transform.d.ts +46 -0
  146. package/src/plugins/source-transform.js +71 -0
  147. package/src/route-renderer/GRAPH.md +83 -325
  148. package/src/route-renderer/README.md +73 -90
  149. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  150. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  151. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  152. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  153. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  154. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  155. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  156. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  157. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  158. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  159. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  160. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  161. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  162. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  163. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  164. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  165. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  166. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  167. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  168. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  169. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  170. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  171. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  172. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  173. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  174. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  175. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  176. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  177. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  178. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  179. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  180. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  181. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  182. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  183. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  184. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  185. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  186. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  187. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  188. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  189. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  190. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  191. package/src/route-renderer/route-renderer.d.ts +57 -14
  192. package/src/route-renderer/route-renderer.js +30 -18
  193. package/src/router/README.md +94 -0
  194. package/src/router/client/link-intent.d.ts +53 -0
  195. package/src/router/client/link-intent.js +34 -0
  196. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  197. package/src/router/client/link-intent.test.browser.js +43 -0
  198. package/src/router/client/navigation-coordinator.d.ts +169 -0
  199. package/src/router/client/navigation-coordinator.js +215 -0
  200. package/src/router/server/route-registry.d.ts +78 -0
  201. package/src/router/server/route-registry.js +262 -0
  202. package/src/services/README.md +28 -0
  203. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  204. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  205. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  208. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  209. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  210. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  211. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +57 -0
  212. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  215. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  216. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  217. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  218. package/src/services/assets/asset-processing-service/index.js +6 -0
  219. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  220. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  221. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  222. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  223. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  229. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
  230. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
  231. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  235. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  236. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  237. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  239. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  240. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  241. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  242. package/src/services/assets/browser-bundle.service.js +41 -0
  243. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  244. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  245. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  246. package/src/services/html/html-rewriter-provider.service.js +68 -0
  247. package/src/services/html/html-transformer.service.d.ts +96 -0
  248. package/src/services/html/html-transformer.service.js +287 -0
  249. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  250. package/src/services/invalidation/development-invalidation.service.js +190 -0
  251. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  252. package/src/services/module-loading/app-module-loader.service.js +0 -0
  253. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  254. package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
  255. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  256. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  257. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  258. package/src/services/module-loading/module-loading-types.js +0 -0
  259. package/src/services/module-loading/node-bootstrap-plugin.d.ts +38 -0
  260. package/src/services/module-loading/node-bootstrap-plugin.js +215 -0
  261. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  262. package/src/services/module-loading/page-module-import.service.js +191 -0
  263. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  264. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  265. package/src/services/module-loading/source-module-support.d.ts +5 -0
  266. package/src/services/module-loading/source-module-support.js +8 -0
  267. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  268. package/src/services/runtime-state/dev-graph.service.js +162 -0
  269. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  270. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  271. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  272. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  273. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  274. package/src/static-site-generator/README.md +26 -0
  275. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  276. package/src/static-site-generator/static-site-generator.js +182 -138
  277. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  278. package/src/types/internal-types.js +0 -0
  279. package/src/{public-types.d.ts → types/public-types.d.ts} +239 -31
  280. package/src/types/public-types.js +0 -0
  281. package/src/utils/html-escaping.d.ts +7 -0
  282. package/src/utils/html-escaping.js +6 -0
  283. package/src/utils/locals-utils.d.ts +1 -1
  284. package/src/utils/parse-cli-args.d.ts +4 -1
  285. package/src/utils/parse-cli-args.js +16 -1
  286. package/src/utils/resolve-work-dir.d.ts +11 -0
  287. package/src/utils/resolve-work-dir.js +31 -0
  288. package/src/watchers/project-watcher.d.ts +11 -7
  289. package/src/watchers/project-watcher.js +69 -75
  290. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  291. package/src/watchers/project-watcher.test-helpers.js +6 -5
  292. package/CHANGELOG.md +0 -94
  293. package/src/adapters/abstract/application-adapter.ts +0 -337
  294. package/src/adapters/abstract/router-adapter.ts +0 -30
  295. package/src/adapters/abstract/server-adapter.ts +0 -79
  296. package/src/adapters/bun/client-bridge.ts +0 -62
  297. package/src/adapters/bun/create-app.ts +0 -189
  298. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  299. package/src/adapters/bun/define-api-handler.ts +0 -114
  300. package/src/adapters/bun/hmr-manager.ts +0 -276
  301. package/src/adapters/bun/index.ts +0 -3
  302. package/src/adapters/bun/server-adapter.ts +0 -492
  303. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  304. package/src/adapters/bun/server-lifecycle.js +0 -120
  305. package/src/adapters/bun/server-lifecycle.ts +0 -154
  306. package/src/adapters/index.ts +0 -6
  307. package/src/adapters/node/create-app.ts +0 -179
  308. package/src/adapters/node/index.d.ts +0 -4
  309. package/src/adapters/node/index.js +0 -8
  310. package/src/adapters/node/index.ts +0 -9
  311. package/src/adapters/node/node-client-bridge.ts +0 -79
  312. package/src/adapters/node/node-hmr-manager.ts +0 -271
  313. package/src/adapters/node/server-adapter.ts +0 -561
  314. package/src/adapters/node/static-content-server.ts +0 -203
  315. package/src/adapters/shared/api-response.ts +0 -104
  316. package/src/adapters/shared/application-adapter.ts +0 -199
  317. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  318. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  319. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  320. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  321. package/src/adapters/shared/render-context.ts +0 -105
  322. package/src/adapters/shared/server-adapter.ts +0 -442
  323. package/src/adapters/shared/server-route-handler.ts +0 -166
  324. package/src/adapters/shared/server-static-builder.ts +0 -82
  325. package/src/build/build-adapter.ts +0 -133
  326. package/src/build/build-types.ts +0 -83
  327. package/src/build/esbuild-build-adapter.ts +0 -511
  328. package/src/config/config-builder.ts +0 -474
  329. package/src/constants.ts +0 -39
  330. package/src/create-app.ts +0 -87
  331. package/src/define-api-handler.js +0 -15
  332. package/src/define-api-handler.ts +0 -66
  333. package/src/dev/sc-server.ts +0 -143
  334. package/src/eco/component-render-context.d.ts +0 -105
  335. package/src/eco/component-render-context.js +0 -77
  336. package/src/eco/component-render-context.ts +0 -202
  337. package/src/eco/eco.ts +0 -221
  338. package/src/eco/eco.types.ts +0 -202
  339. package/src/eco/eco.utils.ts +0 -89
  340. package/src/eco/global-injector-map.ts +0 -112
  341. package/src/eco/lazy-injector-map.ts +0 -120
  342. package/src/eco/module-dependencies.ts +0 -75
  343. package/src/errors/http-error.ts +0 -72
  344. package/src/errors/index.ts +0 -2
  345. package/src/errors/locals-access-error.ts +0 -7
  346. package/src/global/app-logger.ts +0 -4
  347. package/src/hmr/client/hmr-runtime.ts +0 -121
  348. package/src/hmr/hmr-strategy.ts +0 -172
  349. package/src/hmr/hmr.test.e2e.ts +0 -75
  350. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  351. package/src/hmr/strategies/js-hmr-strategy.ts +0 -327
  352. package/src/index.browser.ts +0 -3
  353. package/src/index.ts +0 -5
  354. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  355. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  356. package/src/internal-types.ts +0 -212
  357. package/src/plugins/alias-resolver-plugin.ts +0 -45
  358. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  359. package/src/plugins/integration-plugin.ts +0 -184
  360. package/src/plugins/processor.ts +0 -220
  361. package/src/public-types.ts +0 -1255
  362. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  363. package/src/route-renderer/component-graph-executor.js +0 -31
  364. package/src/route-renderer/component-graph-executor.ts +0 -84
  365. package/src/route-renderer/component-graph.d.ts +0 -42
  366. package/src/route-renderer/component-graph.js +0 -72
  367. package/src/route-renderer/component-graph.ts +0 -159
  368. package/src/route-renderer/component-marker.d.ts +0 -52
  369. package/src/route-renderer/component-marker.js +0 -46
  370. package/src/route-renderer/component-marker.ts +0 -117
  371. package/src/route-renderer/dependency-resolver.js +0 -428
  372. package/src/route-renderer/dependency-resolver.ts +0 -596
  373. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  374. package/src/route-renderer/html-post-processing.service.js +0 -86
  375. package/src/route-renderer/html-post-processing.service.ts +0 -103
  376. package/src/route-renderer/integration-renderer.d.ts +0 -339
  377. package/src/route-renderer/integration-renderer.js +0 -526
  378. package/src/route-renderer/integration-renderer.ts +0 -696
  379. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  380. package/src/route-renderer/marker-graph-resolver.js +0 -93
  381. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  382. package/src/route-renderer/page-module-loader.d.ts +0 -61
  383. package/src/route-renderer/page-module-loader.ts +0 -153
  384. package/src/route-renderer/render-execution.service.d.ts +0 -69
  385. package/src/route-renderer/render-execution.service.js +0 -91
  386. package/src/route-renderer/render-execution.service.ts +0 -158
  387. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  388. package/src/route-renderer/render-preparation.service.js +0 -243
  389. package/src/route-renderer/render-preparation.service.ts +0 -358
  390. package/src/route-renderer/route-renderer.ts +0 -80
  391. package/src/router/fs-router-scanner.d.ts +0 -41
  392. package/src/router/fs-router-scanner.js +0 -155
  393. package/src/router/fs-router-scanner.ts +0 -217
  394. package/src/router/fs-router.d.ts +0 -26
  395. package/src/router/fs-router.js +0 -100
  396. package/src/router/fs-router.ts +0 -122
  397. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  398. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  399. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  400. package/src/services/asset-processing-service/assets.types.ts +0 -112
  401. package/src/services/asset-processing-service/index.d.ts +0 -3
  402. package/src/services/asset-processing-service/index.js +0 -3
  403. package/src/services/asset-processing-service/index.ts +0 -3
  404. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  405. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  406. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  407. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  408. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  409. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  410. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  411. package/src/services/asset-processing-service/processors/index.js +0 -5
  412. package/src/services/asset-processing-service/processors/index.ts +0 -5
  413. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  414. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  415. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  416. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  417. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  418. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  419. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  420. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  421. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  422. package/src/services/cache/cache.types.ts +0 -126
  423. package/src/services/cache/index.ts +0 -18
  424. package/src/services/cache/memory-cache-store.ts +0 -130
  425. package/src/services/cache/page-cache-service.ts +0 -202
  426. package/src/services/html-transformer.service.d.ts +0 -50
  427. package/src/services/html-transformer.service.js +0 -163
  428. package/src/services/html-transformer.service.ts +0 -217
  429. package/src/services/page-module-import.service.d.ts +0 -37
  430. package/src/services/page-module-import.service.js +0 -88
  431. package/src/services/page-module-import.service.ts +0 -129
  432. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  433. package/src/services/schema-validation-service.ts +0 -204
  434. package/src/services/validation/standard-schema.types.ts +0 -68
  435. package/src/static-site-generator/static-site-generator.ts +0 -359
  436. package/src/utils/css.d.ts +0 -1
  437. package/src/utils/css.js +0 -7
  438. package/src/utils/css.ts +0 -5
  439. package/src/utils/deep-merge.ts +0 -47
  440. package/src/utils/hash.ts +0 -5
  441. package/src/utils/html.ts +0 -1
  442. package/src/utils/invariant.ts +0 -15
  443. package/src/utils/locals-utils.ts +0 -37
  444. package/src/utils/parse-cli-args.ts +0 -83
  445. package/src/utils/path-utils.module.ts +0 -14
  446. package/src/utils/runtime.ts +0 -44
  447. package/src/utils/server-utils.module.ts +0 -67
  448. package/src/watchers/project-watcher.test-helpers.ts +0 -40
  449. package/src/watchers/project-watcher.ts +0 -364
  450. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  451. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  452. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  453. /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
  454. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  455. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  456. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -0,0 +1,39 @@
1
+ # Runtime Adapters
2
+
3
+ This directory contains the runtime-host integration layer for Ecopages.
4
+
5
+ ## Purpose
6
+
7
+ Adapters translate app-owned core services into concrete runtime behavior at the host boundary. Bun remains the direct core runtime, while Node compatibility is driven by the Ecopages CLI thin-host path and reuses internal adapter pieces here.
8
+
9
+ They are responsible for:
10
+
11
+ - starting and stopping runtime-specific servers or thin hosts
12
+ - delegating startup into framework-owned loaders and services
13
+ - bridging runtime-specific request/response or HMR transport details
14
+ - keeping host/runtime transport details out of generic core orchestration
15
+
16
+ They are not responsible for:
17
+
18
+ - deciding plugin lifecycle ordering
19
+ - owning server-module semantics
20
+ - owning browser bundling policy
21
+ - owning route rendering semantics
22
+
23
+ ## Main Areas
24
+
25
+ - `bun/`: Bun server adapter, lifecycle coordination, bridge, and HMR transport
26
+ - `node/`: internal Node compatibility adapter pieces used by the CLI thin-host path
27
+ - `shared/`: runtime-neutral adapter helpers used by both hosts
28
+
29
+ ## Ownership Boundary
30
+
31
+ The adapter layer is transport-oriented.
32
+
33
+ Core services still own:
34
+
35
+ - config finalization
36
+ - build-manifest assembly
37
+ - server loading
38
+ - invalidation classification
39
+ - route rendering orchestration
@@ -6,15 +6,40 @@
6
6
  *
7
7
  * @module ApplicationAdapter
8
8
  */
9
- import type { EcoPagesAppConfig } from '../../internal-types.js';
10
- import type { ApiHandler, ApiHandlerContext, ErrorHandler, Middleware, RouteOptions, StaticRoute, ViewLoader } from '../../public-types.js';
9
+ import type { SourceModuleLoader } from '../../services/module-loading/module-loading-types.js';
10
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
11
+ import type { ApiHandler, ApiHandlerContext, ErrorHandler, Middleware, RouteOptions, StaticRoute, ViewLoader } from '../../types/public-types.js';
11
12
  import { type ReturnParseCliArgs } from '../../utils/parse-cli-args.js';
13
+ /**
14
+ * Runtime bootstrap options layered on top of the app config.
15
+ *
16
+ * These options let a host runtime embed Ecopages without mutating process
17
+ * globals or app runtime state before calling `createApp()`.
18
+ */
19
+ export interface ApplicationRuntimeOptions {
20
+ /**
21
+ * Forces the app into the embedded-runtime CLI mode used by host
22
+ * environments.
23
+ *
24
+ * When enabled and no explicit `hostModuleLoader` is provided, the
25
+ * adapter auto-detects a host module loader from the global scope.
26
+ */
27
+ embedded?: boolean;
28
+ /**
29
+ * Explicit source module loader for request-time imports.
30
+ *
31
+ * When omitted in embedded mode, the adapter attempts automatic
32
+ * detection from globals set by the host environment.
33
+ */
34
+ hostModuleLoader?: SourceModuleLoader;
35
+ }
12
36
  /**
13
37
  * Configuration options for application adapters
14
38
  */
15
39
  export interface ApplicationAdapterOptions {
16
40
  appConfig: EcoPagesAppConfig;
17
41
  serverOptions?: Record<string, any>;
42
+ runtime?: ApplicationRuntimeOptions;
18
43
  /**
19
44
  * Options for clearing the output directory before starting the server
20
45
  * @default false
@@ -43,6 +68,7 @@ export declare abstract class AbstractApplicationAdapter<TOptions extends Applic
43
68
  protected appConfig: EcoPagesAppConfig;
44
69
  protected serverOptions: Record<string, any>;
45
70
  protected cliArgs: ReturnParseCliArgs;
71
+ protected runtimeOptions: ApplicationRuntimeOptions;
46
72
  protected apiHandlers: ApiHandler[];
47
73
  protected staticRoutes: StaticRoute[];
48
74
  protected errorHandler?: ErrorHandler;
@@ -1,4 +1,9 @@
1
1
  import { appLogger } from "../../global/app-logger.js";
2
+ import {
3
+ getAppModuleLoader,
4
+ setAppHostModuleLoader
5
+ } from "../../services/module-loading/app-server-module-transpiler.service.js";
6
+ import { getHostModuleLoader } from "../../services/module-loading/host-module-loader-registry.js";
2
7
  import { invariant } from "../../utils/invariant.js";
3
8
  import { fileSystem } from "@ecopages/file-system";
4
9
  import { parseCliArgs } from "../../utils/parse-cli-args.js";
@@ -6,20 +11,27 @@ class AbstractApplicationAdapter {
6
11
  appConfig;
7
12
  serverOptions;
8
13
  cliArgs;
14
+ runtimeOptions;
9
15
  apiHandlers = [];
10
16
  staticRoutes = [];
11
17
  errorHandler;
12
18
  constructor(options) {
13
19
  this.appConfig = options.appConfig;
14
20
  this.serverOptions = options.serverOptions || {};
15
- this.cliArgs = parseCliArgs();
21
+ this.runtimeOptions = options.runtime ?? {};
22
+ this.cliArgs = parseCliArgs({ embeddedRuntime: this.runtimeOptions.embedded });
23
+ const hostModuleLoader = this.runtimeOptions.hostModuleLoader ?? (this.runtimeOptions.embedded ? getHostModuleLoader() : void 0);
24
+ if (hostModuleLoader) {
25
+ setAppHostModuleLoader(this.appConfig, hostModuleLoader);
26
+ }
27
+ getAppModuleLoader(this.appConfig);
16
28
  if (options.clearOutput) {
17
29
  this.clearDistFolder().catch((error) => {
18
30
  appLogger.error("Error clearing dist folder", error);
19
31
  });
20
32
  }
21
33
  }
22
- async clearDistFolder(_filter = []) {
34
+ async clearDistFolder() {
23
35
  const distPath = this.appConfig.absolutePaths.distDir;
24
36
  const distExists = fileSystem.exists(distPath);
25
37
  if (!distExists) return;
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module RouterAdapter
8
8
  */
9
- import type { Routes } from '../../internal-types.js';
9
+ import type { Routes } from '../../types/internal-types.js';
10
10
  /**
11
11
  * Abstract base class for router adapters across different runtimes
12
12
  */
@@ -6,8 +6,8 @@
6
6
  *
7
7
  * @module ServerAdapter
8
8
  */
9
- import type { EcoPagesAppConfig } from '../../internal-types.js';
10
- import type { ApiHandler } from '../../public-types.js';
9
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
10
+ import type { ApiHandler } from '../../types/public-types.js';
11
11
  /**
12
12
  * Configuration options for all server adapters
13
13
  */
@@ -1,5 +1,5 @@
1
1
  import type { ServerWebSocket } from 'bun';
2
- import type { ClientBridgeEvent, IClientBridge } from '../../public-types';
2
+ import type { ClientBridgeEvent, IClientBridge } from '../../types/public-types.js';
3
3
  type BunSocket = ServerWebSocket<unknown>;
4
4
  /**
5
5
  * Manages WebSocket subscribers and broadcasts development events.
@@ -8,18 +8,12 @@
8
8
  * @module EcopagesApp
9
9
  */
10
10
  import type { Server } from 'bun';
11
- import type { EcoPagesAppConfig } from '../../internal-types.js';
12
- import type { ApiHandlerContext, RouteGroupBuilder } from '../../public-types.js';
13
- import { type ApplicationAdapterOptions } from '../abstract/application-adapter.js';
11
+ import type { ApiHandlerContext, RouteGroupBuilder } from '../../types/public-types.js';
14
12
  import { SharedApplicationAdapter } from '../shared/application-adapter.js';
13
+ import type { RuntimeHost } from '../shared/runtime-host.js';
14
+ import type { StaticPreviewHost } from '../shared/static-preview-host.js';
15
+ import type { EcopagesAppOptions } from '../create-app.js';
15
16
  import { type BunServerAdapterResult } from './server-adapter.js';
16
- /**
17
- * Configuration options for the Bun application adapter
18
- */
19
- export interface EcopagesAppOptions extends ApplicationAdapterOptions {
20
- appConfig: EcoPagesAppConfig;
21
- serverOptions?: Record<string, any>;
22
- }
23
17
  /**
24
18
  * Bun-specific route group builder that properly infers route params from path patterns.
25
19
  * When you define a route like `/posts/:slug`, the handler context will have
@@ -34,9 +28,15 @@ export type BunRouteGroupBuilder<WebSocketData = undefined, TContext extends Api
34
28
  * This class extends the {@link AbstractApplicationAdapter}
35
29
  * and provides methods for handling HTTP requests and managing the server.
36
30
  */
37
- export declare class EcopagesApp<WebSocketData = undefined> extends SharedApplicationAdapter<EcopagesAppOptions, Server<WebSocketData>, Request> {
31
+ export declare class BunEcopagesApp<WebSocketData = undefined> extends SharedApplicationAdapter<EcopagesAppOptions, Server<WebSocketData>, Request> {
38
32
  serverAdapter: BunServerAdapterResult | undefined;
39
33
  private server;
34
+ private readonly runtimeHost;
35
+ private readonly previewHost;
36
+ constructor(options: EcopagesAppOptions, dependencies: {
37
+ runtimeHost: RuntimeHost<Server<WebSocketData>, Bun.Serve.Options<WebSocketData>>;
38
+ previewHost: StaticPreviewHost;
39
+ });
40
40
  fetch(request: Request): Promise<Response>;
41
41
  /**
42
42
  * Complete the initialization of the server adapter by processing dynamic routes
@@ -57,4 +57,4 @@ export declare class EcopagesApp<WebSocketData = undefined> extends SharedApplic
57
57
  /**
58
58
  * Factory function to create a Bun application
59
59
  */
60
- export declare function createApp<WebSocketData = undefined>(options: EcopagesAppOptions): Promise<EcopagesApp<WebSocketData>>;
60
+ export declare function createApp<WebSocketData = undefined>(options: EcopagesAppOptions): Promise<BunEcopagesApp<WebSocketData>>;
@@ -1,12 +1,20 @@
1
- import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../constants.js";
1
+ import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
2
2
  import { appLogger } from "../../global/app-logger.js";
3
- import { getBunRuntime } from "../../utils/runtime.js";
4
- import {} from "../abstract/application-adapter.js";
5
3
  import { SharedApplicationAdapter } from "../shared/application-adapter.js";
4
+ import { resolveRuntimeBinding, resolveStaticRuntimeMode } from "../shared/runtime-app-bootstrap.js";
6
5
  import { createBunServerAdapter } from "./server-adapter.js";
7
- class EcopagesApp extends SharedApplicationAdapter {
6
+ import { BunStaticPreviewHost } from "./static-preview-host.js";
7
+ import { BunRuntimeHost } from "./runtime-host.js";
8
+ class BunEcopagesApp extends SharedApplicationAdapter {
8
9
  serverAdapter;
9
10
  server = null;
11
+ runtimeHost;
12
+ previewHost;
13
+ constructor(options, dependencies) {
14
+ super(options);
15
+ this.runtimeHost = dependencies.runtimeHost;
16
+ this.previewHost = dependencies.previewHost;
17
+ }
10
18
  async fetch(request) {
11
19
  if (!this.serverAdapter) {
12
20
  this.serverAdapter = await this.initializeServerAdapter();
@@ -28,34 +36,28 @@ class EcopagesApp extends SharedApplicationAdapter {
28
36
  * Initialize the Bun server adapter
29
37
  */
30
38
  async initializeServerAdapter() {
31
- const { dev } = this.cliArgs;
32
- const { port: cliPort, hostname: cliHostname } = this.cliArgs;
33
- const envPort = process.env.ECOPAGES_PORT ? process.env.ECOPAGES_PORT : void 0;
34
- const envHostname = process.env.ECOPAGES_HOSTNAME;
35
- const preferredPort = cliPort ?? envPort ?? DEFAULT_ECOPAGES_PORT;
36
- const preferredHostname = cliHostname ?? envHostname ?? DEFAULT_ECOPAGES_HOSTNAME;
39
+ const binding = resolveRuntimeBinding({
40
+ cliArgs: this.cliArgs,
41
+ serverOptions: this.serverOptions
42
+ });
37
43
  appLogger.debug("initializeServerAdapter", {
38
- dev,
39
- cliPort,
40
- cliHostname,
41
- envPort,
42
- envHostname,
43
- preferredPort,
44
- preferredHostname,
45
- composedUrl: `http://${preferredHostname}:${preferredPort}`
44
+ dev: this.cliArgs.dev,
45
+ cliPort: this.cliArgs.port,
46
+ cliHostname: this.cliArgs.hostname,
47
+ envPort: process.env.ECOPAGES_PORT,
48
+ envHostname: process.env.ECOPAGES_HOSTNAME,
49
+ preferredPort: binding.preferredPort,
50
+ preferredHostname: binding.preferredHostname,
51
+ composedUrl: binding.runtimeOrigin
46
52
  });
47
53
  return await createBunServerAdapter({
48
- runtimeOrigin: `http://${preferredHostname}:${preferredPort}`,
54
+ runtimeOrigin: binding.runtimeOrigin,
49
55
  appConfig: this.appConfig,
50
56
  apiHandlers: this.apiHandlers,
51
57
  staticRoutes: this.staticRoutes,
52
58
  errorHandler: this.errorHandler,
53
- options: { watch: dev },
54
- serveOptions: {
55
- port: preferredPort,
56
- hostname: preferredHostname,
57
- ...this.serverOptions
58
- }
59
+ options: { watch: binding.watch },
60
+ serveOptions: binding.serveOptions
59
61
  });
60
62
  }
61
63
  /**
@@ -68,11 +70,11 @@ class EcopagesApp extends SharedApplicationAdapter {
68
70
  this.serverAdapter = await this.initializeServerAdapter();
69
71
  }
70
72
  const { dev, preview, build } = this.cliArgs;
71
- const requiresFetchRuntime = this.appConfig.integrations.some(
72
- (integration) => integration.staticBuildStep === "fetch"
73
- );
74
- const canBuildWithoutRuntimeServer = (build || preview) && !requiresFetchRuntime;
75
- if (canBuildWithoutRuntimeServer) {
73
+ const staticRuntimeMode = resolveStaticRuntimeMode({
74
+ appConfig: this.appConfig,
75
+ cliArgs: this.cliArgs
76
+ });
77
+ if (staticRuntimeMode.canBuildWithoutRuntimeServer) {
76
78
  appLogger.debugTime("Building static pages");
77
79
  await this.serverAdapter.buildStatic({ preview });
78
80
  appLogger.debugTimeEnd("Building static pages");
@@ -83,23 +85,41 @@ class EcopagesApp extends SharedApplicationAdapter {
83
85
  }
84
86
  const enableHmr = dev || !preview && !build;
85
87
  const serverOptions = this.serverAdapter.getServerOptions({ enableHmr });
86
- const bun = getBunRuntime();
87
- if (!bun) {
88
- throw new Error("Bun runtime is required for the Bun adapter");
89
- }
90
- const bunServer = bun.serve(serverOptions);
91
- this.server = bunServer;
88
+ const configuredHostname = String(serverOptions.hostname ?? DEFAULT_ECOPAGES_HOSTNAME);
89
+ const configuredPort = Number(serverOptions.port ?? DEFAULT_ECOPAGES_PORT);
90
+ const runtimeServerOptions = (preview || build) && staticRuntimeMode.requiresFetchRuntime ? {
91
+ ...serverOptions,
92
+ port: 0
93
+ } : serverOptions;
94
+ this.server = await this.runtimeHost.start({
95
+ serveOptions: runtimeServerOptions,
96
+ handleRequest: async () => new Response(null, { status: 500 }),
97
+ onError: async () => {
98
+ }
99
+ });
92
100
  await this.serverAdapter.completeInitialization(this.server).catch((error) => {
93
101
  appLogger.error(`Failed to complete initialization: ${error}`);
94
102
  });
95
103
  if (!this.server) {
96
104
  throw new Error("Server failed to start");
97
105
  }
98
- appLogger.info(`Server running at http://${this.server.hostname}:${this.server.port}`);
106
+ appLogger.info(
107
+ `Server running at ${this.runtimeHost.getOrigin(this.server, runtimeServerOptions)}`
108
+ );
99
109
  if (build || preview) {
100
110
  appLogger.debugTime("Building static pages");
101
- await this.serverAdapter.buildStatic({ preview });
102
- this.server.stop(true);
111
+ await this.serverAdapter.buildStatic({ preview: false });
112
+ await this.runtimeHost.stop(this.server, { force: true });
113
+ if (preview) {
114
+ const previewPort = await this.previewHost.start({
115
+ appConfig: this.appConfig,
116
+ hostname: configuredHostname,
117
+ port: configuredPort
118
+ });
119
+ if (previewPort) {
120
+ appLogger.info(`Preview running at http://${configuredHostname}:${previewPort}`);
121
+ }
122
+ }
103
123
  appLogger.debugTimeEnd("Building static pages");
104
124
  if (build) {
105
125
  process.exit(0);
@@ -109,9 +129,12 @@ class EcopagesApp extends SharedApplicationAdapter {
109
129
  }
110
130
  }
111
131
  async function createApp(options) {
112
- return new EcopagesApp(options);
132
+ return new BunEcopagesApp(options, {
133
+ runtimeHost: new BunRuntimeHost(),
134
+ previewHost: new BunStaticPreviewHost()
135
+ });
113
136
  }
114
137
  export {
115
- EcopagesApp,
138
+ BunEcopagesApp,
116
139
  createApp
117
140
  };
@@ -1,79 +1,47 @@
1
1
  import type { WebSocketHandler } from 'bun';
2
- import type { DefaultHmrContext, EcoPagesAppConfig, IHmrManager } from '../../internal-types';
3
- import type { EcoBuildPlugin } from '../../build/build-types.js';
4
- import type { HmrStrategy } from '../../hmr/hmr-strategy';
5
- import type { ClientBridge } from './client-bridge';
6
- import type { ClientBridgeEvent } from '../../public-types';
2
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
3
+ import type { ClientBridge } from './client-bridge.js';
4
+ import { InMemoryEntrypointDependencyGraph, type EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.js';
5
+ import { SharedHmrManager } from '../shared/shared-hmr-manager.js';
7
6
  type BunSocketHandler = WebSocketHandler<unknown>;
8
7
  export interface HmrManagerParams {
9
8
  appConfig: EcoPagesAppConfig;
10
9
  bridge: ClientBridge;
11
10
  }
12
- export declare class HmrManager implements IHmrManager {
13
- readonly appConfig: EcoPagesAppConfig;
14
- private readonly bridge;
15
- /** Keep track of watchers */
16
- private watchers;
17
- /** entrypoint -> output path */
18
- private watchedFiles;
19
- /** bare specifier -> runtime URL (e.g., 'react' -> '/assets/vendors/react.js') */
20
- private specifierMap;
21
- private distDir;
22
- private plugins;
23
- private enabled;
24
- private strategies;
11
+ /**
12
+ * Bun development HMR manager.
13
+ *
14
+ * @remarks
15
+ * Bun shares the same public contract as the Node manager: page entrypoints are
16
+ * strict integration-owned registrations, while generic script assets use their
17
+ * own explicit registration path.
18
+ */
19
+ export declare class HmrManager extends SharedHmrManager {
25
20
  private wsHandler;
26
- constructor({ appConfig, bridge }: HmrManagerParams);
27
21
  /**
28
- * Ensures the HMR output directory exists.
22
+ * Creates the Bun HMR manager around the shared HMR orchestration pipeline.
29
23
  *
30
- * This must not remove the directory because multiple app processes
31
- * can share the same dist path during e2e runs.
32
- */
33
- private cleanDistDir;
34
- /**
35
- * Initializes core HMR strategies.
36
- * Strategies are evaluated in priority order (highest first).
24
+ * @remarks
25
+ * Bun delegates route watching, rebuild dispatch, and runtime bundle
26
+ * generation to `SharedHmrManager`. The Bun subclass only supplies the
27
+ * transport-specific dependency graph policy and websocket hook surface.
37
28
  */
38
- private initializeStrategies;
29
+ constructor({ appConfig, bridge }: HmrManagerParams);
39
30
  /**
40
- * Registers a custom HMR strategy.
41
- * Used by integrations to provide framework-specific HMR handling.
42
- * @param strategy - The HMR strategy to register
31
+ * Reuses the shared in-memory dependency graph when possible and otherwise
32
+ * creates the Bun-compatible default graph implementation.
43
33
  */
44
- registerStrategy(strategy: HmrStrategy): void;
45
- setPlugins(plugins: EcoBuildPlugin[]): void;
46
- setEnabled(enabled: boolean): void;
47
- isEnabled(): boolean;
34
+ protected createEntrypointDependencyGraph(existingEntrypointDependencyGraph: EntrypointDependencyGraph): InMemoryEntrypointDependencyGraph;
48
35
  /**
49
- * Registers a mapping from bare specifiers to vendor URLs.
50
- * Used by integrations to provide their module resolution mappings.
51
- * @param map - Object mapping bare specifiers to vendor URLs
36
+ * Returns the Bun websocket hooks that attach and detach live HMR subscribers.
37
+ *
38
+ * @remarks
39
+ * `SharedHmrManager` stores the bridge behind the transport-agnostic
40
+ * `IClientBridge` contract because most HMR coordination only needs broadcast
41
+ * behavior. Bun connection lifecycle wiring is the point where that abstraction
42
+ * intentionally narrows back to the concrete Bun bridge so websocket instances
43
+ * can be tracked directly.
52
44
  */
53
- registerSpecifierMap(map: Record<string, string>): void;
54
45
  getWebSocketHandler(): BunSocketHandler;
55
- /**
56
- * Builds the client-side HMR runtime script.
57
- */
58
- buildRuntime(): Promise<void>;
59
- getRuntimePath(): string;
60
- broadcast(event: ClientBridgeEvent): void;
61
- handleFileChange(filePath: string): Promise<void>;
62
- /**
63
- * Registers a client entrypoint to be built and watched by Bun.
64
- */
65
- getOutputUrl(entrypointPath: string): string | undefined;
66
- getWatchedFiles(): Map<string, string>;
67
- getSpecifierMap(): Map<string, string>;
68
- getDistDir(): string;
69
- getPlugins(): EcoBuildPlugin[];
70
- getDefaultContext(): DefaultHmrContext;
71
- registerEntrypoint(entrypointPath: string): Promise<string>;
72
- /**
73
- * Encodes dynamic route segments (brackets) in file paths.
74
- * Converts `[slug]` to `_slug_` to avoid filesystem/URL issues.
75
- */
76
- private encodeDynamicSegments;
77
- stop(): void;
78
46
  }
79
47
  export {};