@ecopages/core 0.2.0-alpha.4 → 0.2.0-alpha.41

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 -68
  12. package/src/adapters/bun/hmr-manager.js +30 -212
  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 -49
  31. package/src/adapters/node/node-hmr-manager.js +31 -219
  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 +176 -3
  74. package/src/build/build-adapter.js +619 -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 -74
  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 +46 -48
  120. package/src/hmr/strategies/js-hmr-strategy.js +60 -75
  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 +986 -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 +134 -0
  166. package/src/route-renderer/orchestration/route-render-orchestrator.js +442 -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 +119 -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 +42 -0
  258. package/src/services/module-loading/node-bootstrap-plugin.js +297 -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 -35
  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 +40 -29
  287. package/src/watchers/project-watcher.js +126 -116
  288. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  289. package/src/watchers/project-watcher.test-helpers.js +6 -6
  290. package/CHANGELOG.md +0 -91
  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 -296
  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 -289
  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 -132
  324. package/src/build/build-types.ts +0 -83
  325. package/src/build/esbuild-build-adapter.ts +0 -510
  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 -320
  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 -1260
  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 -41
  447. package/src/watchers/project-watcher.ts +0 -344
  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,28 +1,44 @@
1
+ import path from "node:path";
2
+ import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
3
+ import { RESOLVED_ASSETS_DIR } from "../../config/constants.js";
1
4
  import { appLogger } from "../../global/app-logger.js";
2
5
  import { HttpError } from "../../errors/http-error.js";
3
6
  import { createRequire } from "../../utils/locals-utils.js";
4
7
  import { fileSystem } from "@ecopages/file-system";
8
+ import { getAppBrowserBuildPlugins, setupAppRuntimePlugins } from "../../build/build-adapter.js";
9
+ import { installAppRuntimeBuildExecutor } from "../../build/runtime-build-executor.js";
10
+ import { StaticSiteGenerator } from "../../static-site-generator/static-site-generator.js";
11
+ import { ProjectWatcher } from "../../watchers/project-watcher.js";
5
12
  import { SharedServerAdapter } from "../shared/server-adapter.js";
6
13
  import { ApiResponseBuilder } from "../shared/api-response.js";
7
- import { ServerRouteHandler } from "../shared/server-route-handler.js";
8
- import { ServerStaticBuilder } from "../shared/server-static-builder";
9
- import { ClientBridge } from "./client-bridge";
10
- import { HmrManager } from "./hmr-manager";
11
- import { ServerLifecycle } from "./server-lifecycle.js";
14
+ import { ServerStaticBuilder } from "../shared/server-static-builder.js";
15
+ import {
16
+ injectHmrRuntimeIntoHtmlResponse,
17
+ isHtmlResponse,
18
+ shouldInjectHmrHtmlResponse
19
+ } from "../shared/hmr-html-response.js";
20
+ import { resolveServeRuntimeOrigin } from "../shared/runtime-app-bootstrap.js";
21
+ import { ClientBridge } from "./client-bridge.js";
22
+ import { HmrManager } from "./hmr-manager.js";
23
+ import { BunStaticPreviewHost } from "./static-preview-host.js";
12
24
  class BunServerAdapter extends SharedServerAdapter {
13
25
  apiHandlers;
14
26
  staticRoutes;
15
27
  errorHandler;
16
28
  bridge;
17
- lifecycle;
18
29
  hmrManager;
19
30
  initializationPromise = null;
20
31
  fullyInitialized = false;
21
- lifecycleFactory;
22
- staticBuilderFactory;
23
- routeHandlerFactory;
24
- hmrManagerFactory;
25
- bridgeFactory;
32
+ previewHost;
33
+ /**
34
+ * Creates a Bun server adapter with already-resolved runtime collaborators.
35
+ *
36
+ * @remarks
37
+ * The public params interface keeps `hmrManager`, `bridge`, and `previewHost`
38
+ * optional so factory callers can omit them. By the time the concrete adapter
39
+ * is constructed, those collaborators are mandatory because the adapter cannot
40
+ * initialize Bun HMR or preview flows without them.
41
+ */
26
42
  constructor({
27
43
  appConfig,
28
44
  runtimeOrigin,
@@ -31,35 +47,35 @@ class BunServerAdapter extends SharedServerAdapter {
31
47
  staticRoutes,
32
48
  errorHandler,
33
49
  options,
34
- lifecycle,
35
- staticBuilderFactory,
36
- routeHandlerFactory,
37
50
  hmrManager,
38
- bridge
51
+ bridge,
52
+ previewHost
39
53
  }) {
40
54
  super({ appConfig, runtimeOrigin, serveOptions, options });
41
55
  this.apiHandlers = apiHandlers || [];
42
56
  this.staticRoutes = staticRoutes || [];
43
57
  this.errorHandler = errorHandler;
44
- this.lifecycleFactory = lifecycle;
45
- this.staticBuilderFactory = staticBuilderFactory;
46
- this.routeHandlerFactory = routeHandlerFactory;
47
- this.hmrManagerFactory = hmrManager;
48
- this.bridgeFactory = bridge;
58
+ this.bridge = bridge;
59
+ this.hmrManager = hmrManager;
60
+ this.previewHost = previewHost;
49
61
  }
50
62
  /**
51
- * Determines if HMR script should be injected.
52
- * Only injects in watch mode when HMR manager is enabled.
63
+ * Returns whether adapter-level HTML responses still need HMR runtime injection.
64
+ *
65
+ * @remarks
66
+ * Filesystem-routed pages are wrapped later in the shared route layer. This
67
+ * adapter-level check exists for explicit API handlers that return HTML and
68
+ * would otherwise bypass the route wrapper entirely.
53
69
  */
54
70
  shouldInjectHmrScript() {
55
- return this.options?.watch === true && this.hmrManager?.isEnabled() === true;
71
+ return shouldInjectHmrHtmlResponse(this.options?.watch === true, this.hmrManager);
56
72
  }
57
73
  /**
58
- * Checks if a response contains HTML content.
74
+ * Delegates the HTML-response test to the shared response helper used by both
75
+ * adapters.
59
76
  */
60
77
  isHtmlResponse(response) {
61
- const contentType = response.headers.get("Content-Type");
62
- return contentType !== null && contentType.startsWith("text/html");
78
+ return isHtmlResponse(response);
63
79
  }
64
80
  /**
65
81
  * Injects HMR script into HTML responses in development mode.
@@ -67,72 +83,109 @@ class BunServerAdapter extends SharedServerAdapter {
67
83
  */
68
84
  async maybeInjectHmrScript(response) {
69
85
  if (this.shouldInjectHmrScript() && this.isHtmlResponse(response)) {
70
- const html = await response.text();
71
- const hmrScript = `<script type="module">import '/_hmr_runtime.js';<\/script>`;
72
- const updatedHtml = html.replace(/<\/html>/i, `${hmrScript}</html>`);
73
- const headers = new Headers(response.headers);
74
- headers.delete("Content-Length");
75
- return new Response(updatedHtml, {
76
- status: response.status,
77
- statusText: response.statusText,
78
- headers
79
- });
86
+ return injectHmrRuntimeIntoHtmlResponse(response);
80
87
  }
81
88
  return response;
82
89
  }
83
90
  /**
84
- * Initializes the server adapter's core components.
85
- * Delegates to ServerLifecycle for setup.
91
+ * Initializes the server adapter's core runtime components.
86
92
  */
87
93
  async initialize() {
88
- this.bridge = this.bridgeFactory ?? new ClientBridge();
89
- this.hmrManager = this.hmrManagerFactory ?? new HmrManager({ appConfig: this.appConfig, bridge: this.bridge });
90
- this.lifecycle = this.lifecycleFactory ?? new ServerLifecycle({
91
- appConfig: this.appConfig,
92
- runtimeOrigin: this.runtimeOrigin,
93
- hmrManager: this.hmrManager,
94
- bridge: this.bridge
94
+ installAppRuntimeBuildExecutor(this.appConfig, {
95
+ development: this.options?.watch === true
95
96
  });
96
- this.staticSiteGenerator = await this.lifecycle.initialize();
97
+ this.staticSiteGenerator = new StaticSiteGenerator({ appConfig: this.appConfig });
98
+ await this.hmrManager.buildRuntime();
99
+ this.prepareRuntimePublicDir();
97
100
  const staticBuilderOptions = {
98
101
  appConfig: this.appConfig,
99
102
  staticSiteGenerator: this.staticSiteGenerator,
100
- serveOptions: this.serveOptions
103
+ serveOptions: this.serveOptions,
104
+ apiHandlers: this.apiHandlers
101
105
  };
102
- this.staticBuilder = this.staticBuilderFactory ? this.staticBuilderFactory(staticBuilderOptions) : new ServerStaticBuilder(staticBuilderOptions);
103
- await this.lifecycle.initializePlugins({ watch: this.options?.watch });
106
+ this.staticBuilder = new ServerStaticBuilder(staticBuilderOptions);
107
+ await this.initializeRuntimePlugins({ watch: this.options?.watch });
108
+ }
109
+ /**
110
+ * Copies the source `public` directory into the runtime output and ensures the
111
+ * HMR assets directory exists before any runtime bundles are emitted.
112
+ */
113
+ prepareRuntimePublicDir() {
114
+ const srcPublicDir = path.join(this.appConfig.rootDir, this.appConfig.srcDir, this.appConfig.publicDir);
115
+ if (fileSystem.exists(srcPublicDir)) {
116
+ fileSystem.copyDir(srcPublicDir, path.join(this.appConfig.rootDir, this.appConfig.distDir));
117
+ }
118
+ fileSystem.ensureDir(path.join(this.appConfig.absolutePaths.distDir, RESOLVED_ASSETS_DIR));
119
+ }
120
+ /**
121
+ * Registers runtime plugins and propagates the final HMR manager into each
122
+ * integration.
123
+ *
124
+ * @remarks
125
+ * This is where Bun's runtime-plugin registration path meets the integration
126
+ * lifecycle. A failure here leaves the runtime partially bootstrapped, so the
127
+ * method logs the underlying error and rethrows instead of trying to limp on.
128
+ */
129
+ async initializeRuntimePlugins(options) {
130
+ try {
131
+ this.hmrManager.setEnabled(Boolean(options?.watch));
132
+ await setupAppRuntimePlugins({
133
+ appConfig: this.appConfig,
134
+ runtimeOrigin: this.runtimeOrigin,
135
+ hmrManager: this.hmrManager,
136
+ onRuntimePlugin: (plugin) => {
137
+ Bun.plugin(plugin);
138
+ }
139
+ });
140
+ const browserBuildPlugins = getAppBrowserBuildPlugins(this.appConfig);
141
+ this.hmrManager.setPlugins(browserBuildPlugins);
142
+ for (const integration of this.appConfig.integrations) {
143
+ integration.setHmrManager(this.hmrManager);
144
+ }
145
+ } catch (error) {
146
+ appLogger.error(`Failed to initialize plugins: ${error instanceof Error ? error.message : String(error)}`);
147
+ throw error;
148
+ }
104
149
  }
105
150
  /**
106
- * Refreshes the router routes during watch mode.
151
+ * Rebuilds the shared routing state and hot-reloads the live Bun server when a
152
+ * watched route file changes.
107
153
  */
108
154
  async refreshRouterRoutes() {
109
- if (this.serverInstance && typeof this.serverInstance.reload === "function") {
110
- try {
111
- await this.initSharedRouter();
112
- this.configureSharedResponseHandlers(this.staticRoutes, this.hmrManager);
155
+ if (!this.serverInstance || typeof this.serverInstance.reload !== "function") {
156
+ appLogger.error("Server instance is not available for reloading");
157
+ return;
158
+ }
159
+ await this.createSharedWatchRefreshCallback({
160
+ staticRoutes: this.staticRoutes,
161
+ hmrManager: this.hmrManager,
162
+ onRoutesReady: () => {
113
163
  const options = this.getServerOptions({ enableHmr: true });
114
164
  this.serverInstance.reload(options);
115
165
  appLogger.debug("Server routes updated with dynamic routes");
116
- } catch (error) {
117
- if (error instanceof Error) {
118
- this.hmrManager.broadcast({ type: "error", message: error.message });
119
- appLogger.error("Failed to refresh router routes:", error);
120
- }
166
+ },
167
+ onError: (error) => {
168
+ this.hmrManager.broadcast({ type: "error", message: error.message });
169
+ appLogger.error("Failed to refresh router routes:", error);
121
170
  }
122
- } else {
123
- appLogger.error("Server instance is not available for reloading");
124
- }
171
+ })();
125
172
  }
126
173
  async watch() {
127
- await this.lifecycle.startWatching({
128
- refreshRouterRoutesCallback: this.refreshRouterRoutes.bind(this)
174
+ const watcher = new ProjectWatcher({
175
+ config: this.appConfig,
176
+ refreshRouterRoutesCallback: this.refreshRouterRoutes.bind(this),
177
+ hmrManager: this.hmrManager,
178
+ bridge: this.bridge
129
179
  });
180
+ await watcher.createWatcherSubscription();
130
181
  }
131
182
  /**
132
- * Retrieves the current server options, optionally enabling HMR.
133
- * If HMR is enabled, modifies fetch to handle WebSocket upgrades and serve HMR runtime.
134
- * Ensures original fetch logic is preserved and called for non-HMR requests.
135
- * @param options.enableHmr Whether to enable Hot Module Replacement
183
+ * Builds the `Bun.serve()` options for the current adapter state.
184
+ *
185
+ * @remarks
186
+ * The HMR-enabled variant wraps the base fetch handler so one Bun server can
187
+ * serve normal requests, accept HMR websocket upgrades, and expose the HMR
188
+ * runtime asset without splitting responsibility across separate listeners.
136
189
  */
137
190
  getServerOptions({ enableHmr = false } = {}) {
138
191
  appLogger.debug(`[BunServerAdapter] getServerOptions called with enableHmr: ${enableHmr}`);
@@ -188,8 +241,12 @@ class BunServerAdapter extends SharedServerAdapter {
188
241
  return void 0;
189
242
  }
190
243
  /**
191
- * Creates complete server configuration with request handling.
192
- * @returns Server options ready for Bun.serve()
244
+ * Composes the base Bun server settings that all runtime modes build from.
245
+ *
246
+ * @remarks
247
+ * This method centralizes the Bun-specific error boundary. It preserves the
248
+ * shared route pipeline while still allowing adapter-level custom error-handler
249
+ * execution and `HttpError` passthrough.
193
250
  */
194
251
  buildServerSettings() {
195
252
  const serverOptions = { ...this.serveOptions };
@@ -246,14 +303,34 @@ class BunServerAdapter extends SharedServerAdapter {
246
303
  */
247
304
  async buildStatic(options) {
248
305
  if (!this.fullyInitialized) {
249
- await this.initSharedRouter();
250
- this.configureSharedResponseHandlers(this.staticRoutes, this.hmrManager);
306
+ await this.initializeSharedRouteHandling({
307
+ staticRoutes: this.staticRoutes,
308
+ hmrManager: this.hmrManager
309
+ });
310
+ }
311
+ const buildRuntimeOrigin = this.serverInstance ? `http://${this.serverInstance.hostname || DEFAULT_ECOPAGES_HOSTNAME}:${this.serverInstance.port || DEFAULT_ECOPAGES_PORT}` : void 0;
312
+ await this.staticBuilder.build(
313
+ { ...options, preview: false, baseUrl: buildRuntimeOrigin },
314
+ {
315
+ router: this.router,
316
+ routeRendererFactory: this.routeRendererFactory,
317
+ staticRoutes: this.staticRoutes
318
+ }
319
+ );
320
+ if (!options?.preview) {
321
+ return;
251
322
  }
252
- await this.staticBuilder.build(options, {
253
- router: this.router,
254
- routeRendererFactory: this.routeRendererFactory,
255
- staticRoutes: this.staticRoutes
323
+ const previewHostname = this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME;
324
+ const previewPort = Number(this.serveOptions.port || DEFAULT_ECOPAGES_PORT);
325
+ const activePreviewPort = await this.previewHost.start({
326
+ appConfig: this.appConfig,
327
+ hostname: String(previewHostname),
328
+ port: previewPort
256
329
  });
330
+ if (activePreviewPort) {
331
+ appLogger.info(`Preview running at http://${previewHostname}:${activePreviewPort}`);
332
+ return;
333
+ }
257
334
  }
258
335
  /**
259
336
  * Initializes the server with dynamic routes after server creation.
@@ -273,13 +350,20 @@ class BunServerAdapter extends SharedServerAdapter {
273
350
  return this.initializationPromise;
274
351
  }
275
352
  /**
276
- * Performs complete server setup including routing, watchers, and HMR.
353
+ * Performs the one-time post-bind initialization path for Bun servers.
354
+ *
355
+ * @remarks
356
+ * This is intentionally split from `initialize()` because shared route handling
357
+ * and file watching need the live server instance to exist before Bun can
358
+ * reload updated route handlers in place.
277
359
  */
278
360
  async _performInitialization(server) {
279
361
  this.serverInstance = server;
280
362
  appLogger.debug("Completing server initialization with dynamic routes");
281
- await this.initSharedRouter();
282
- this.configureSharedResponseHandlers(this.staticRoutes, this.hmrManager);
363
+ await this.initializeSharedRouteHandling({
364
+ staticRoutes: this.staticRoutes,
365
+ hmrManager: this.hmrManager
366
+ });
283
367
  this.fullyInitialized = true;
284
368
  if (this.options?.watch) await this.watch();
285
369
  if (server && typeof server.reload === "function") {
@@ -342,23 +426,16 @@ class BunServerAdapter extends SharedServerAdapter {
342
426
  }
343
427
  }
344
428
  async function createBunServerAdapter(params) {
345
- const runtimeOrigin = params.runtimeOrigin ?? `http://${params.serveOptions.hostname || "localhost"}:${params.serveOptions.port || 3e3}`;
429
+ const runtimeOrigin = params.runtimeOrigin ?? resolveServeRuntimeOrigin(params.serveOptions);
346
430
  const bridge = params.bridge ?? new ClientBridge();
347
431
  const hmrManager = params.hmrManager ?? new HmrManager({ appConfig: params.appConfig, bridge });
348
- const lifecycle = params.lifecycle ?? new ServerLifecycle({
349
- appConfig: params.appConfig,
350
- runtimeOrigin,
351
- hmrManager,
352
- bridge
353
- });
432
+ const previewHost = params.previewHost ?? new BunStaticPreviewHost();
354
433
  const adapter = new BunServerAdapter({
355
434
  ...params,
356
435
  runtimeOrigin,
357
436
  bridge,
358
437
  hmrManager,
359
- lifecycle,
360
- staticBuilderFactory: params.staticBuilderFactory ?? ((opts) => new ServerStaticBuilder(opts)),
361
- routeHandlerFactory: params.routeHandlerFactory ?? ((p) => new ServerRouteHandler(p))
438
+ previewHost
362
439
  });
363
440
  return adapter.createAdapter();
364
441
  }
@@ -0,0 +1,28 @@
1
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
2
+ import type { StaticPreviewHost, StaticPreviewHostStartOptions } from '../shared/static-preview-host.js';
3
+ type BunStaticPreviewServer = {
4
+ server: {
5
+ port?: number;
6
+ } | null;
7
+ stop(): void;
8
+ };
9
+ type BunStaticPreviewServerFactory = {
10
+ createServer(args: {
11
+ appConfig: EcoPagesAppConfig;
12
+ options: {
13
+ port: number;
14
+ };
15
+ }): BunStaticPreviewServer;
16
+ };
17
+ type BunStaticPreviewLogger = {
18
+ error(message: string): unknown;
19
+ };
20
+ export declare class BunStaticPreviewHost implements StaticPreviewHost {
21
+ private readonly previewServerFactory;
22
+ private readonly logger;
23
+ private previewServer;
24
+ constructor(previewServerFactory?: BunStaticPreviewServerFactory, logger?: BunStaticPreviewLogger);
25
+ start(options: StaticPreviewHostStartOptions): Promise<number | null>;
26
+ stop(): Promise<void>;
27
+ }
28
+ export {};
@@ -0,0 +1,45 @@
1
+ import { StaticContentServer } from "../../dev/sc-server.js";
2
+ import { appLogger } from "../../global/app-logger.js";
3
+ class BunStaticPreviewHost {
4
+ constructor(previewServerFactory = StaticContentServer, logger = appLogger) {
5
+ this.previewServerFactory = previewServerFactory;
6
+ this.logger = logger;
7
+ }
8
+ previewServerFactory;
9
+ logger;
10
+ previewServer = null;
11
+ async start(options) {
12
+ await this.stop();
13
+ await new Promise((resolve) => setTimeout(resolve, 100));
14
+ for (let attempt = 0; attempt < 20; attempt += 1) {
15
+ try {
16
+ this.previewServer = this.previewServerFactory.createServer({
17
+ appConfig: options.appConfig,
18
+ options: { port: options.port }
19
+ });
20
+ const previewPort = this.previewServer.server?.port;
21
+ if (previewPort) {
22
+ return previewPort;
23
+ }
24
+ break;
25
+ } catch (error) {
26
+ const errorMessage = error instanceof Error ? error.message : String(error);
27
+ const errorCode = typeof error === "object" && error !== null && "code" in error ? String(error.code) : void 0;
28
+ const isPortReleaseRace = errorCode === "EADDRINUSE" || errorMessage.includes("EADDRINUSE");
29
+ if (!isPortReleaseRace || attempt === 19) {
30
+ throw error;
31
+ }
32
+ await new Promise((resolve) => setTimeout(resolve, 100));
33
+ }
34
+ }
35
+ this.logger.error("Failed to start preview server");
36
+ return null;
37
+ }
38
+ async stop() {
39
+ this.previewServer?.stop();
40
+ this.previewServer = null;
41
+ }
42
+ }
43
+ export {
44
+ BunStaticPreviewHost
45
+ };
@@ -1,9 +1,12 @@
1
- import type { EcopagesAppOptions as BunOptions } from './adapters/bun/create-app.js';
2
- import type { EcopagesAppOptions as NodeOptions } from './adapters/node/create-app.js';
3
- import { AbstractApplicationAdapter } from './adapters/abstract/application-adapter.js';
4
- import { SharedApplicationAdapter } from './adapters/shared/application-adapter.js';
5
- export type EcopagesAppOptions = BunOptions | NodeOptions;
6
- export type UniversalEcopagesApp = AbstractApplicationAdapter<EcopagesAppOptions, any, Request>;
1
+ import type { EcoPagesAppConfig } from '../types/internal-types.js';
2
+ import { AbstractApplicationAdapter } from './abstract/application-adapter.js';
3
+ import type { ApplicationAdapterOptions } from './abstract/application-adapter.js';
4
+ import { SharedApplicationAdapter } from './shared/application-adapter.js';
5
+ export interface EcopagesAppOptions extends ApplicationAdapterOptions {
6
+ appConfig: EcoPagesAppConfig;
7
+ serverOptions?: Record<string, any>;
8
+ }
9
+ export type UniversalEcopagesApp = AbstractApplicationAdapter<EcopagesAppOptions, unknown, Request>;
7
10
  export declare function createApp<WebSocketData = undefined>(options: EcopagesAppOptions): Promise<UniversalEcopagesApp>;
8
11
  export declare class EcopagesApp extends SharedApplicationAdapter<EcopagesAppOptions, unknown, Request> {
9
12
  private readonly appOptions;
@@ -1,12 +1,12 @@
1
- import { AbstractApplicationAdapter } from "./adapters/abstract/application-adapter.js";
2
- import { SharedApplicationAdapter } from "./adapters/shared/application-adapter.js";
1
+ import { AbstractApplicationAdapter } from "./abstract/application-adapter.js";
2
+ import { SharedApplicationAdapter } from "./shared/application-adapter.js";
3
+ import { createApp as createBunApp } from "./bun/create-app.js";
4
+ import { createNodeApp } from "./node/create-app.js";
3
5
  async function createRuntimeApp(options) {
4
6
  const bun = globalThis.Bun;
5
7
  if (bun) {
6
- const { createApp: createBunApp } = await import("./adapters/bun/create-app.js");
7
8
  return await createBunApp(options);
8
9
  }
9
- const { createNodeApp } = await import("./adapters/node/create-app.js");
10
10
  return await createNodeApp(options);
11
11
  }
12
12
  async function createApp(options) {
@@ -1,6 +1,2 @@
1
- export { EcopagesApp, createApp } from './bun/create-app.js';
2
- export { defineApiHandler, defineGroupHandler } from './bun/define-api-handler.js';
3
- export { NodeServerAdapter, createNodeServerAdapter } from './node/server-adapter.js';
4
- export { EcopagesApp as NodeAdapterEcopagesApp, createNodeApp } from './node/create-app.js';
5
- export type { NodeServerAdapterParams, NodeServerAdapterResult } from './node/server-adapter.js';
6
- export type { EcopagesAppOptions as NodeEcopagesAppOptions } from './node/create-app.js';
1
+ export { EcopagesApp, createApp } from './create-app.js';
2
+ export { defineApiHandler, defineGroupHandler, type GroupHandler } from './shared/define-api-handler.js';
@@ -1,14 +1,8 @@
1
- import { EcopagesApp, createApp } from "./bun/create-app.js";
2
- import { defineApiHandler, defineGroupHandler } from "./bun/define-api-handler.js";
3
- import { NodeServerAdapter, createNodeServerAdapter } from "./node/server-adapter.js";
4
- import { EcopagesApp as EcopagesApp2, createNodeApp } from "./node/create-app.js";
1
+ import { EcopagesApp, createApp } from "./create-app.js";
2
+ import { defineApiHandler, defineGroupHandler } from "./shared/define-api-handler.js";
5
3
  export {
6
4
  EcopagesApp,
7
- EcopagesApp2 as NodeAdapterEcopagesApp,
8
- NodeServerAdapter,
9
5
  createApp,
10
- createNodeApp,
11
- createNodeServerAdapter,
12
6
  defineApiHandler,
13
7
  defineGroupHandler
14
8
  };
@@ -1,21 +1,24 @@
1
- import { type Server as NodeServerInstance } from 'node:http';
2
- import type { EcoPagesAppConfig } from '../../internal-types.js';
3
- import { type ApplicationAdapterOptions } from '../abstract/application-adapter.js';
4
1
  import { SharedApplicationAdapter } from '../shared/application-adapter.js';
5
- import { type NodeServerAdapterResult } from './server-adapter.js';
6
- export interface EcopagesAppOptions extends ApplicationAdapterOptions {
7
- appConfig: EcoPagesAppConfig;
8
- serverOptions?: Record<string, any>;
9
- }
10
- export declare class EcopagesApp extends SharedApplicationAdapter<EcopagesAppOptions, NodeServerInstance, Request> {
2
+ import type { RuntimeHost } from '../shared/runtime-host.js';
3
+ import type { EcopagesAppOptions } from '../create-app.js';
4
+ import { type NodeServerAdapterResult, createNodeServerAdapter } from './server-adapter.js';
5
+ import type { NodeServerInstance } from './server-adapter.js';
6
+ export declare class NodeEcopagesApp extends SharedApplicationAdapter<EcopagesAppOptions, NodeServerInstance, Request> {
11
7
  serverAdapter: NodeServerAdapterResult | undefined;
12
8
  private server;
13
9
  private runtimeOrigin;
10
+ private readonly runtimeHost;
11
+ constructor(options: EcopagesAppOptions, dependencies: {
12
+ runtimeHost: RuntimeHost<NodeServerInstance, {
13
+ port?: number;
14
+ hostname?: string;
15
+ }>;
16
+ });
17
+ protected createServerAdapter(params: Parameters<typeof createNodeServerAdapter>[0]): Promise<NodeServerAdapterResult>;
14
18
  stop(force?: boolean): Promise<void>;
15
19
  protected initializeServerAdapter(): Promise<NodeServerAdapterResult>;
16
20
  start(): Promise<NodeServerInstance | void>;
17
- private createWebRequest;
18
- private sendNodeResponse;
19
21
  fetch(request: Request): Promise<Response>;
20
22
  }
21
- export declare function createNodeApp(options: EcopagesAppOptions): Promise<EcopagesApp>;
23
+ export declare function createNodeApp(options: EcopagesAppOptions): Promise<NodeEcopagesApp>;
24
+ export declare function createApp(options: EcopagesAppOptions): Promise<NodeEcopagesApp>;