@ecopages/core 0.2.0-alpha.9 → 0.2.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/README.md +79 -28
  2. package/package.json +94 -116
  3. package/src/adapters/README.md +2 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +19 -115
  12. package/src/adapters/bun/hmr-manager.js +25 -301
  13. package/src/adapters/bun/index.d.ts +1 -1
  14. package/src/adapters/bun/index.js +2 -2
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +100 -32
  18. package/src/adapters/bun/server-adapter.js +142 -65
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +1 -5
  24. package/src/adapters/index.js +1 -7
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +22 -103
  31. package/src/adapters/node/node-hmr-manager.js +26 -289
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +19 -42
  37. package/src/adapters/node/server-adapter.js +94 -139
  38. package/src/adapters/node/static-content-server.d.ts +1 -1
  39. package/src/adapters/node/static-content-server.js +1 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/adapters/shared/define-api-handler.d.ts +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
  53. package/src/adapters/shared/fs-server-response-matcher.js +72 -46
  54. package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
  55. package/src/adapters/shared/hmr-html-response.d.ts +1 -1
  56. package/src/adapters/shared/hmr-html-response.js +4 -3
  57. package/src/adapters/shared/render-context.d.ts +5 -3
  58. package/src/adapters/shared/render-context.js +24 -1
  59. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  60. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  61. package/src/adapters/shared/runtime-host.d.ts +12 -0
  62. package/src/adapters/shared/server-adapter.d.ts +22 -11
  63. package/src/adapters/shared/server-adapter.js +183 -133
  64. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  65. package/src/adapters/shared/server-route-handler.js +4 -4
  66. package/src/adapters/shared/server-static-builder.d.ts +8 -7
  67. package/src/adapters/shared/server-static-builder.js +6 -5
  68. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  69. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  70. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  71. package/src/build/README.md +57 -67
  72. package/src/build/browser-runtime-manifest.d.ts +31 -0
  73. package/src/build/browser-runtime-manifest.js +61 -0
  74. package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
  75. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  76. package/src/build/browser-runtime-plugin.d.ts +78 -0
  77. package/src/build/browser-runtime-plugin.js +173 -0
  78. package/src/build/build-adapter.d.ts +384 -63
  79. package/src/build/build-adapter.js +129 -54
  80. package/src/build/build-manifest.d.ts +6 -0
  81. package/src/build/build-manifest.js +21 -2
  82. package/src/build/build-types.d.ts +2 -2
  83. package/src/build/rolldown-adapter-helpers.d.ts +58 -0
  84. package/src/build/rolldown-adapter-helpers.js +265 -0
  85. package/src/build/rolldown-build-adapter.d.ts +28 -0
  86. package/src/build/rolldown-build-adapter.js +65 -0
  87. package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
  88. package/src/build/rolldown-dev-build-adapter.js +166 -0
  89. package/src/build/rolldown-plugin-bridge.d.ts +59 -0
  90. package/src/build/rolldown-plugin-bridge.js +199 -0
  91. package/src/build/runtime-build-executor.d.ts +15 -7
  92. package/src/build/runtime-build-executor.js +8 -9
  93. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  94. package/src/build/runtime-build-output-normalizer.js +111 -0
  95. package/src/build/serialized-build-executor.d.ts +64 -0
  96. package/src/build/serialized-build-executor.js +63 -0
  97. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  98. package/src/build/server-side-css-shim-plugin.js +35 -0
  99. package/src/cache/index.d.ts +6 -0
  100. package/src/cache/index.js +6 -0
  101. package/src/cache/module-parse-cache.d.ts +65 -0
  102. package/src/cache/module-parse-cache.js +75 -0
  103. package/src/config/README.md +5 -2
  104. package/src/config/config-builder.d.ts +41 -13
  105. package/src/config/config-builder.js +62 -24
  106. package/src/declarations.d.ts +1 -1
  107. package/src/dev/host-runtime.d.ts +10 -0
  108. package/src/dev/host-runtime.js +24 -0
  109. package/src/dev/sc-server.d.ts +1 -1
  110. package/src/dev/sc-server.js +1 -1
  111. package/src/eco/eco.browser.d.ts +2 -0
  112. package/src/eco/eco.browser.js +88 -0
  113. package/src/eco/eco.js +50 -45
  114. package/src/eco/eco.types.d.ts +60 -8
  115. package/src/eco/eco.utils.d.ts +1 -40
  116. package/src/eco/eco.utils.js +5 -35
  117. package/src/eco/global-injector-map.d.ts +3 -3
  118. package/src/eco/global-injector-map.js +2 -2
  119. package/src/eco/lazy-injector-map.d.ts +2 -2
  120. package/src/errors/index.d.ts +1 -0
  121. package/src/errors/index.js +3 -1
  122. package/src/hmr/client/hmr-runtime.js +9 -1
  123. package/src/hmr/hmr-strategy.d.ts +16 -13
  124. package/src/hmr/hmr-strategy.js +22 -7
  125. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  126. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  127. package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
  128. package/src/hmr/strategies/js-hmr-strategy.js +5 -10
  129. package/src/index.browser.d.ts +2 -2
  130. package/src/index.browser.js +1 -1
  131. package/src/index.d.ts +3 -2
  132. package/src/index.js +15 -4
  133. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
  134. package/src/integrations/ghtml/ghtml-renderer.js +24 -29
  135. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  136. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  137. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  138. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  139. package/src/plugins/README.md +1 -0
  140. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  141. package/src/plugins/alias-resolver-cache.js +106 -0
  142. package/src/plugins/alias-resolver-plugin.d.ts +5 -1
  143. package/src/plugins/alias-resolver-plugin.js +19 -7
  144. package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
  145. package/src/plugins/eco-component-meta-plugin.js +43 -25
  146. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  147. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  148. package/src/plugins/integration-plugin.d.ts +136 -42
  149. package/src/plugins/integration-plugin.js +99 -31
  150. package/src/plugins/processor.d.ts +4 -2
  151. package/src/plugins/processor.js +8 -3
  152. package/src/plugins/source-transform.d.ts +46 -0
  153. package/src/plugins/source-transform.js +71 -0
  154. package/src/route-renderer/GRAPH.md +80 -318
  155. package/src/route-renderer/README.md +74 -78
  156. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  157. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  158. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  159. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  160. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  161. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  162. package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
  163. package/src/route-renderer/orchestration/integration-renderer.js +660 -258
  164. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  165. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  166. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  167. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  168. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  169. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  170. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  171. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  172. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  173. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  174. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  175. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  176. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  177. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  178. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  179. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  180. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  181. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  182. package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
  183. package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
  184. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  185. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  186. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  187. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  188. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  189. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  190. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  191. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  192. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  193. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  194. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  195. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  196. package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
  197. package/src/route-renderer/page-loading/page-module-loader.js +8 -5
  198. package/src/route-renderer/route-renderer.d.ts +31 -23
  199. package/src/route-renderer/route-renderer.js +17 -24
  200. package/src/router/README.md +76 -8
  201. package/src/router/client/navigation-coordinator.d.ts +20 -0
  202. package/src/router/client/navigation-coordinator.js +2 -2
  203. package/src/router/server/route-registry.d.ts +78 -0
  204. package/src/router/server/route-registry.js +262 -0
  205. package/src/services/README.md +1 -2
  206. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  207. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  208. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
  209. package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
  210. package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
  211. package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
  212. package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
  215. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  216. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  217. package/src/services/assets/asset-processing-service/index.d.ts +6 -5
  218. package/src/services/assets/asset-processing-service/index.js +6 -5
  219. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  220. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  221. package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
  222. package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
  223. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  229. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
  230. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
  231. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
  235. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  236. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
  237. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
  239. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  240. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  241. package/src/services/assets/browser-bundle.service.d.ts +44 -3
  242. package/src/services/assets/browser-bundle.service.js +15 -7
  243. package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
  244. package/src/services/html/html-rewriter-provider.service.js +4 -1
  245. package/src/services/html/html-transformer.service.d.ts +22 -3
  246. package/src/services/html/html-transformer.service.js +101 -35
  247. package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
  248. package/src/services/invalidation/development-invalidation.service.js +1 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/page-module-import.service.d.ts +32 -8
  258. package/src/services/module-loading/page-module-import.service.js +83 -22
  259. package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
  260. package/src/services/module-loading/server-module-transpiler.service.js +5 -2
  261. package/src/services/module-loading/source-module-support.d.ts +5 -0
  262. package/src/services/module-loading/source-module-support.js +8 -0
  263. package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
  264. package/src/services/runtime-state/dev-graph.service.js +10 -10
  265. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
  266. package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
  267. package/src/static-site-generator/static-site-generator.d.ts +23 -28
  268. package/src/static-site-generator/static-site-generator.js +119 -156
  269. package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
  270. package/src/types/internal-types.js +0 -0
  271. package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
  272. package/src/types/public-types.js +0 -0
  273. package/src/utils/html-escaping.d.ts +7 -0
  274. package/src/utils/html-escaping.js +6 -0
  275. package/src/utils/locals-utils.d.ts +1 -1
  276. package/src/utils/parse-cli-args.d.ts +4 -1
  277. package/src/utils/parse-cli-args.js +16 -1
  278. package/src/utils/resolve-work-dir.js +1 -1
  279. package/src/watchers/project-watcher.d.ts +4 -4
  280. package/src/watchers/project-watcher.js +35 -41
  281. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  282. package/src/watchers/project-watcher.test-helpers.js +5 -5
  283. package/CHANGELOG.md +0 -31
  284. package/src/adapters/abstract/application-adapter.ts +0 -337
  285. package/src/adapters/abstract/router-adapter.ts +0 -30
  286. package/src/adapters/abstract/server-adapter.ts +0 -79
  287. package/src/adapters/bun/client-bridge.ts +0 -62
  288. package/src/adapters/bun/create-app.ts +0 -189
  289. package/src/adapters/bun/hmr-manager.ts +0 -409
  290. package/src/adapters/bun/index.ts +0 -2
  291. package/src/adapters/bun/server-adapter.ts +0 -499
  292. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  293. package/src/adapters/bun/server-lifecycle.js +0 -92
  294. package/src/adapters/bun/server-lifecycle.ts +0 -124
  295. package/src/adapters/index.ts +0 -6
  296. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  297. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  298. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  299. package/src/adapters/node/create-app.ts +0 -179
  300. package/src/adapters/node/index.d.ts +0 -6
  301. package/src/adapters/node/index.js +0 -11
  302. package/src/adapters/node/index.ts +0 -16
  303. package/src/adapters/node/node-client-bridge.ts +0 -79
  304. package/src/adapters/node/node-hmr-manager.ts +0 -381
  305. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  306. package/src/adapters/node/runtime-adapter.js +0 -306
  307. package/src/adapters/node/runtime-adapter.ts +0 -439
  308. package/src/adapters/node/server-adapter.ts +0 -488
  309. package/src/adapters/node/static-content-server.ts +0 -239
  310. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  311. package/src/adapters/node/write-runtime-manifest.js +0 -12
  312. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/define-api-handler.ts +0 -66
  316. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  317. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  318. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  319. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  320. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  321. package/src/adapters/shared/hmr-html-response.ts +0 -52
  322. package/src/adapters/shared/render-context.ts +0 -120
  323. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  324. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  325. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  326. package/src/adapters/shared/server-adapter.ts +0 -489
  327. package/src/adapters/shared/server-route-handler.ts +0 -153
  328. package/src/adapters/shared/server-static-builder.ts +0 -166
  329. package/src/build/build-adapter.ts +0 -361
  330. package/src/build/build-manifest.ts +0 -54
  331. package/src/build/build-types.ts +0 -83
  332. package/src/build/dev-build-coordinator.d.ts +0 -74
  333. package/src/build/dev-build-coordinator.js +0 -161
  334. package/src/build/dev-build-coordinator.ts +0 -221
  335. package/src/build/esbuild-build-adapter.d.ts +0 -72
  336. package/src/build/esbuild-build-adapter.js +0 -422
  337. package/src/build/esbuild-build-adapter.ts +0 -559
  338. package/src/build/runtime-build-executor.ts +0 -34
  339. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  340. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  341. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  342. package/src/config/config-builder.ts +0 -706
  343. package/src/constants.ts +0 -54
  344. package/src/create-app.ts +0 -87
  345. package/src/dev/sc-server.ts +0 -143
  346. package/src/eco/component-render-context.d.ts +0 -105
  347. package/src/eco/component-render-context.js +0 -87
  348. package/src/eco/component-render-context.ts +0 -224
  349. package/src/eco/eco.ts +0 -242
  350. package/src/eco/eco.types.ts +0 -221
  351. package/src/eco/eco.utils.ts +0 -89
  352. package/src/eco/global-injector-map.ts +0 -112
  353. package/src/eco/lazy-injector-map.ts +0 -120
  354. package/src/eco/module-dependencies.ts +0 -75
  355. package/src/errors/http-error.ts +0 -72
  356. package/src/errors/index.ts +0 -2
  357. package/src/errors/locals-access-error.ts +0 -7
  358. package/src/global/app-logger.ts +0 -4
  359. package/src/hmr/client/hmr-runtime.ts +0 -152
  360. package/src/hmr/hmr-strategy.ts +0 -172
  361. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  362. package/src/hmr/hmr.test.e2e.ts +0 -66
  363. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  364. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  365. package/src/index.browser.ts +0 -3
  366. package/src/index.ts +0 -5
  367. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  368. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  369. package/src/internal-types.ts +0 -232
  370. package/src/plugins/alias-resolver-plugin.ts +0 -63
  371. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  372. package/src/plugins/integration-plugin.ts +0 -226
  373. package/src/plugins/processor.ts +0 -240
  374. package/src/plugins/runtime-capability.ts +0 -14
  375. package/src/public-types.ts +0 -1317
  376. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  377. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  378. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  379. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  380. package/src/route-renderer/component-graph/component-graph.js +0 -72
  381. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  382. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  383. package/src/route-renderer/component-graph/component-marker.js +0 -46
  384. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  385. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  386. package/src/route-renderer/component-graph/component-reference.js +0 -19
  387. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  388. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  389. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  390. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  391. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  392. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  393. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  394. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  395. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  396. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  397. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  398. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  399. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  400. package/src/route-renderer/route-renderer.ts +0 -115
  401. package/src/router/client/link-intent.test.browser.ts +0 -51
  402. package/src/router/client/link-intent.ts +0 -92
  403. package/src/router/client/navigation-coordinator.ts +0 -433
  404. package/src/router/server/fs-router-scanner.d.ts +0 -41
  405. package/src/router/server/fs-router-scanner.js +0 -156
  406. package/src/router/server/fs-router-scanner.ts +0 -219
  407. package/src/router/server/fs-router.d.ts +0 -26
  408. package/src/router/server/fs-router.js +0 -100
  409. package/src/router/server/fs-router.ts +0 -122
  410. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  411. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  412. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  413. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  414. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  415. package/src/services/assets/asset-processing-service/index.ts +0 -5
  416. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  417. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  418. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  419. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  420. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  421. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  422. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  423. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  424. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  425. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  426. package/src/services/assets/browser-bundle.service.ts +0 -53
  427. package/src/services/cache/cache.types.ts +0 -126
  428. package/src/services/cache/index.ts +0 -18
  429. package/src/services/cache/memory-cache-store.ts +0 -130
  430. package/src/services/cache/page-cache-service.ts +0 -202
  431. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  432. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  433. package/src/services/html/html-transformer.service.ts +0 -279
  434. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  435. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  436. package/src/services/module-loading/page-module-import.service.ts +0 -200
  437. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  438. package/src/services/module-loading/server-loader.service.js +0 -32
  439. package/src/services/module-loading/server-loader.service.ts +0 -130
  440. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  441. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  442. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  444. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  445. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  446. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  447. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  448. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  449. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  450. package/src/services/validation/schema-validation-service.ts +0 -204
  451. package/src/services/validation/standard-schema.types.ts +0 -68
  452. package/src/static-site-generator/static-site-generator.ts +0 -462
  453. package/src/utils/css.d.ts +0 -1
  454. package/src/utils/css.js +0 -7
  455. package/src/utils/css.ts +0 -5
  456. package/src/utils/deep-merge.ts +0 -47
  457. package/src/utils/hash.ts +0 -5
  458. package/src/utils/html.ts +0 -1
  459. package/src/utils/invariant.ts +0 -15
  460. package/src/utils/locals-utils.ts +0 -37
  461. package/src/utils/parse-cli-args.ts +0 -83
  462. package/src/utils/path-utils.module.ts +0 -14
  463. package/src/utils/resolve-work-dir.ts +0 -45
  464. package/src/utils/runtime.ts +0 -44
  465. package/src/utils/server-utils.module.ts +0 -67
  466. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  467. package/src/watchers/project-watcher.ts +0 -363
  468. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  469. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  470. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  471. /package/src/{constants.js → config/constants.js} +0 -0
@@ -1,15 +1,21 @@
1
1
  import { AbstractServerAdapter } from '../abstract/server-adapter.js';
2
2
  import type { ServerAdapterOptions, ServerAdapterResult } from '../abstract/server-adapter.js';
3
3
  import { RouteRendererFactory } from '../../route-renderer/route-renderer.js';
4
- import { FSRouter } from '../../router/server/fs-router.js';
4
+ import { RouteRegistry } from '../../router/server/route-registry.js';
5
5
  import { SchemaValidationService } from '../../services/validation/schema-validation-service.js';
6
6
  import { StaticSiteGenerator } from '../../static-site-generator/static-site-generator.js';
7
7
  import { ServerStaticBuilder } from './server-static-builder.js';
8
8
  import { FileSystemResponseMatcher } from './fs-server-response-matcher.js';
9
9
  import { ServerRouteHandler } from './server-route-handler.js';
10
- import type { ApiHandler, CacheInvalidator, ErrorHandler, RenderContext, StaticRoute } from '../../public-types.js';
10
+ import type { ApiHandler, CacheInvalidator, ErrorHandler, RenderContext, StaticRoute } from '../../types/public-types.js';
11
+ type SharedRequestContext = {
12
+ apiHandlers: ApiHandler[];
13
+ errorHandler?: ErrorHandler;
14
+ serverInstance?: any;
15
+ hmrManager?: any;
16
+ };
11
17
  export declare abstract class SharedServerAdapter<TOptions extends ServerAdapterOptions, TResult extends ServerAdapterResult> extends AbstractServerAdapter<TOptions, TResult> {
12
- protected router: FSRouter;
18
+ protected router: RouteRegistry;
13
19
  protected fileSystemResponseMatcher: FileSystemResponseMatcher;
14
20
  protected routeRendererFactory: RouteRendererFactory;
15
21
  protected routeHandler: ServerRouteHandler;
@@ -27,14 +33,15 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
27
33
  onError?: (error: Error) => Promise<void> | void;
28
34
  }): () => Promise<void>;
29
35
  /**
30
- * Scans the filesystem and dynamically constructs the universal router map.
36
+ * Scans the filesystem and dynamically constructs the Route Registry.
31
37
  *
32
38
  * This process runs identically across both Bun and Node wrappers. It analyzes the configured pages
33
39
  * directory, building a map of all available UI routes and API endpoints.
34
- * The resulting `FSRouter` instance becomes the central nervous system for mapping WinterCG incoming
40
+ * The resulting `RouteRegistry` instance becomes the central nervous system for mapping WinterCG incoming
35
41
  * Web Requests (`Request`) to their corresponding internal execution paths.
36
42
  */
37
43
  protected initSharedRouter(): Promise<void>;
44
+ private createRouteRegistryPageModuleAdapter;
38
45
  /**
39
46
  * Sets up the unified rendering pipeline and response matching chain.
40
47
  *
@@ -50,6 +57,8 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
50
57
  * @param hmrManager - The runtime-specific Hot Module Replacement orchestrator (if watching).
51
58
  */
52
59
  protected configureSharedResponseHandlers(staticRoutes: StaticRoute[], hmrManager?: any): void;
60
+ private createSharedResponseHandlerDependencies;
61
+ private createSharedPageCacheService;
53
62
  protected getCacheService(): CacheInvalidator | null;
54
63
  protected getRenderContext(): RenderContext;
55
64
  /**
@@ -70,6 +79,10 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
70
79
  * @returns The resulting Web standard `Response` constructed by the user's handler.
71
80
  */
72
81
  protected executeApiHandler(request: Request, params: Record<string, string | string[]>, routeConfig: ApiHandler, serverInstance: any, errorHandler?: ErrorHandler): Promise<Response>;
82
+ private createApiHandlerContext;
83
+ private normalizeApiParams;
84
+ private applyApiRequestSchema;
85
+ private runApiMiddlewareChain;
73
86
  private normalizePath;
74
87
  private matchApiPath;
75
88
  private getApiPathScore;
@@ -77,6 +90,8 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
77
90
  routeConfig: ApiHandler;
78
91
  params: Record<string, string | string[]>;
79
92
  } | null;
93
+ private tryHandleSharedHmrRequest;
94
+ private tryHandleSharedApiRequest;
80
95
  /**
81
96
  * Universally processes an incoming WinterCG Web standard Request.
82
97
  *
@@ -88,10 +103,6 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
88
103
  * Both Bun and Node bindings fall back to this exact function once they have mapped their
89
104
  * native HTTP objects into Web Standard Requests.
90
105
  */
91
- handleSharedRequest(request: Request, context: {
92
- apiHandlers: ApiHandler[];
93
- errorHandler?: ErrorHandler;
94
- serverInstance?: any;
95
- hmrManager?: any;
96
- }): Promise<Response>;
106
+ handleSharedRequest(request: Request, context: SharedRequestContext): Promise<Response>;
97
107
  }
108
+ export {};
@@ -1,8 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { AbstractServerAdapter } from "../abstract/server-adapter.js";
3
3
  import { RouteRendererFactory } from "../../route-renderer/route-renderer.js";
4
- import { FSRouter } from "../../router/server/fs-router.js";
5
- import { FSRouterScanner } from "../../router/server/fs-router-scanner.js";
4
+ import { RouteRegistry } from "../../router/server/route-registry.js";
6
5
  import { MemoryCacheStore } from "../../services/cache/memory-cache-store.js";
7
6
  import { PageCacheService } from "../../services/cache/page-cache-service.js";
8
7
  import { SchemaValidationService } from "../../services/validation/schema-validation-service.js";
@@ -18,6 +17,8 @@ import { HttpError } from "../../errors/http-error.js";
18
17
  import { ApiResponseBuilder } from "./api-response.js";
19
18
  import { appLogger } from "../../global/app-logger.js";
20
19
  import { fileSystem } from "@ecopages/file-system";
20
+ import { getAppServerModuleTranspiler } from "../../services/module-loading/app-server-module-transpiler.service.js";
21
+ import { resolveInternalExecutionDir } from "../../utils/resolve-work-dir.js";
21
22
  class SharedServerAdapter extends AbstractServerAdapter {
22
23
  router;
23
24
  fileSystemResponseMatcher;
@@ -50,30 +51,43 @@ class SharedServerAdapter extends AbstractServerAdapter {
50
51
  };
51
52
  }
52
53
  /**
53
- * Scans the filesystem and dynamically constructs the universal router map.
54
+ * Scans the filesystem and dynamically constructs the Route Registry.
54
55
  *
55
56
  * This process runs identically across both Bun and Node wrappers. It analyzes the configured pages
56
57
  * directory, building a map of all available UI routes and API endpoints.
57
- * The resulting `FSRouter` instance becomes the central nervous system for mapping WinterCG incoming
58
+ * The resulting `RouteRegistry` instance becomes the central nervous system for mapping WinterCG incoming
58
59
  * Web Requests (`Request`) to their corresponding internal execution paths.
59
60
  */
60
61
  async initSharedRouter() {
61
- const scanner = new FSRouterScanner({
62
- dir: path.join(this.appConfig.rootDir, this.appConfig.srcDir, this.appConfig.pagesDir),
62
+ this.router = new RouteRegistry({
63
+ pagesDir: path.join(this.appConfig.rootDir, this.appConfig.srcDir, this.appConfig.pagesDir),
63
64
  appConfig: this.appConfig,
64
65
  origin: this.runtimeOrigin,
65
66
  templatesExt: this.appConfig.templatesExt,
66
- options: {
67
- buildMode: !this.options?.watch
68
- }
69
- });
70
- this.router = new FSRouter({
71
- origin: this.runtimeOrigin,
72
- assetPrefix: path.join(this.appConfig.rootDir, this.appConfig.distDir),
73
- scanner
67
+ buildMode: !this.options?.watch,
68
+ pageModuleAdapter: this.createRouteRegistryPageModuleAdapter()
74
69
  });
75
70
  await this.router.init();
76
71
  }
72
+ createRouteRegistryPageModuleAdapter() {
73
+ const serverModuleTranspiler = getAppServerModuleTranspiler(this.appConfig);
74
+ return {
75
+ loadPageModule: async (filePath) => {
76
+ const module = await serverModuleTranspiler.importModule({
77
+ filePath,
78
+ outdir: path.join(resolveInternalExecutionDir(this.appConfig), ".server-route-modules"),
79
+ externalPackages: false,
80
+ transpileErrorMessage: (details) => `Error transpiling route module: ${details}`,
81
+ noOutputMessage: (targetFilePath) => `No transpiled output generated for route module: ${targetFilePath}`
82
+ });
83
+ const page = module.default;
84
+ return {
85
+ staticPaths: page?.staticPaths ?? module.getStaticPaths,
86
+ staticProps: page?.staticProps ?? module.getStaticProps
87
+ };
88
+ }
89
+ };
90
+ }
77
91
  /**
78
92
  * Sets up the unified rendering pipeline and response matching chain.
79
93
  *
@@ -91,48 +105,69 @@ class SharedServerAdapter extends AbstractServerAdapter {
91
105
  configureSharedResponseHandlers(staticRoutes, hmrManager) {
92
106
  this.routeRendererFactory = new RouteRendererFactory({
93
107
  appConfig: this.appConfig,
108
+ rendererModules: this.appConfig.runtime?.rendererModuleContext,
94
109
  runtimeOrigin: this.runtimeOrigin
95
110
  });
111
+ const { fileSystemResponseMatcher, explicitStaticRouteMatcher } = this.createSharedResponseHandlerDependencies(staticRoutes);
112
+ this.fileSystemResponseMatcher = fileSystemResponseMatcher;
113
+ this.routeHandler = new ServerRouteHandler({
114
+ router: this.router,
115
+ fileSystemResponseMatcher: this.fileSystemResponseMatcher,
116
+ explicitStaticRouteMatcher,
117
+ watch: !!this.options?.watch,
118
+ hmrManager
119
+ });
120
+ }
121
+ createSharedResponseHandlerDependencies(staticRoutes) {
96
122
  const fileSystemResponseFactory = new FileSystemServerResponseFactory({
97
- appConfig: this.appConfig,
98
- routeRendererFactory: this.routeRendererFactory,
99
123
  options: {
100
124
  watchMode: !!this.options?.watch
101
125
  }
102
126
  });
103
- const cacheConfig = this.appConfig.cache;
104
- const isCacheEnabled = cacheConfig?.enabled ?? !this.options?.watch;
105
- let cacheService = null;
106
- if (isCacheEnabled) {
107
- const store = cacheConfig?.store === "memory" || !cacheConfig?.store ? new MemoryCacheStore({ maxEntries: cacheConfig?.maxEntries }) : cacheConfig.store;
108
- cacheService = new PageCacheService({ store, enabled: true });
109
- }
110
- this.fileSystemResponseMatcher = new FileSystemResponseMatcher({
127
+ const cacheService = this.createSharedPageCacheService();
128
+ const fileSystemResponseMatcher = new FileSystemResponseMatcher({
111
129
  appConfig: this.appConfig,
130
+ assetPrefix: path.join(this.appConfig.rootDir, this.appConfig.distDir),
112
131
  router: this.router,
113
132
  routeRendererFactory: this.routeRendererFactory,
114
133
  fileSystemResponseFactory,
115
134
  cacheService,
116
- defaultCacheStrategy: cacheConfig?.defaultStrategy ?? "static"
117
- });
118
- const explicitStaticRouteMatcher = staticRoutes.length > 0 ? new ExplicitStaticRouteMatcher({
119
- appConfig: this.appConfig,
120
- routeRendererFactory: this.routeRendererFactory,
121
- staticRoutes
122
- }) : void 0;
123
- this.routeHandler = new ServerRouteHandler({
124
- router: this.router,
125
- fileSystemResponseMatcher: this.fileSystemResponseMatcher,
126
- explicitStaticRouteMatcher,
127
- watch: !!this.options?.watch,
128
- hmrManager
135
+ defaultCacheStrategy: this.appConfig.cache?.defaultStrategy ?? "static"
129
136
  });
137
+ return {
138
+ cacheService,
139
+ fileSystemResponseMatcher,
140
+ explicitStaticRouteMatcher: staticRoutes.length > 0 ? new ExplicitStaticRouteMatcher({
141
+ appConfig: this.appConfig,
142
+ routeRendererFactory: this.routeRendererFactory,
143
+ staticRoutes
144
+ }) : void 0
145
+ };
146
+ }
147
+ createSharedPageCacheService() {
148
+ const cacheConfig = this.appConfig.cache;
149
+ const isCacheEnabled = cacheConfig?.enabled ?? !this.options?.watch;
150
+ if (!isCacheEnabled) {
151
+ return null;
152
+ }
153
+ const store = cacheConfig?.store === "memory" || !cacheConfig?.store ? new MemoryCacheStore({ maxEntries: cacheConfig?.maxEntries }) : cacheConfig.store;
154
+ return new PageCacheService({ store, enabled: true });
130
155
  }
131
156
  getCacheService() {
132
157
  return this.fileSystemResponseMatcher?.getCacheService() ?? null;
133
158
  }
134
159
  getRenderContext() {
135
- return createRenderContext({ integrations: this.appConfig.integrations });
160
+ const serverModuleTranspiler = getAppServerModuleTranspiler(this.appConfig);
161
+ return createRenderContext({
162
+ integrations: this.appConfig.integrations,
163
+ rendererModules: this.appConfig.runtime?.rendererModuleContext,
164
+ importServerModule: async (filePath) => await serverModuleTranspiler.importModule({
165
+ filePath,
166
+ outdir: path.join(resolveInternalExecutionDir(this.appConfig), ".server-modules"),
167
+ externalPackages: true,
168
+ bypassCache: this.options?.watch === true
169
+ })
170
+ });
136
171
  }
137
172
  /**
138
173
  * Executes an Application Programming Interface (API) handler in an environment-agnostic manner.
@@ -154,87 +189,18 @@ class SharedServerAdapter extends AbstractServerAdapter {
154
189
  async executeApiHandler(request, params, routeConfig, serverInstance, errorHandler) {
155
190
  let context;
156
191
  try {
157
- const middleware = routeConfig.middleware || [];
158
- const schema = routeConfig.schema;
159
- const locals = {};
160
- const normalizedParams = Object.fromEntries(
161
- Object.entries(params).map(([key, value]) => [key, Array.isArray(value) ? value.join("/") : value])
162
- );
163
- context = {
164
- request,
165
- params: normalizedParams,
166
- response: new ApiResponseBuilder(),
167
- server: serverInstance,
168
- locals,
169
- require: createRequire(() => locals),
170
- services: {
171
- cache: this.getCacheService()
172
- },
173
- ...this.getRenderContext()
174
- };
175
- if (schema) {
176
- const url = new URL(request.url);
177
- const queryParams = Object.fromEntries(url.searchParams);
178
- const headers = Object.fromEntries(request.headers);
179
- let body;
180
- if (schema.body) {
181
- try {
182
- const contentType = request.headers.get("Content-Type") || "";
183
- if (contentType.includes("application/json")) body = await request.clone().json();
184
- else if (contentType.includes("text/plain")) body = await request.clone().text();
185
- } catch {
186
- return context.response.status(400).json({ error: "Invalid request body" });
187
- }
188
- }
189
- const validationResult = await this.schemaValidator.validateRequest(
190
- { body, query: queryParams, headers, params: normalizedParams },
191
- schema
192
- );
193
- if (!validationResult.success) {
194
- return context.response.status(400).json({
195
- error: "Validation failed",
196
- issues: validationResult.errors
197
- });
198
- }
199
- const validated = validationResult.data;
200
- if (validated.body !== void 0) context.body = validated.body;
201
- if (validated.query !== void 0) context.query = validated.query;
202
- if (validated.headers !== void 0) context.headers = validated.headers;
203
- if (validated.params !== void 0) context.params = validated.params;
204
- }
205
- if (middleware.length === 0) {
206
- return await routeConfig.handler(context);
192
+ context = this.createApiHandlerContext(request, params, serverInstance);
193
+ const schemaResponse = await this.applyApiRequestSchema(context, routeConfig.schema);
194
+ if (schemaResponse) {
195
+ return schemaResponse;
207
196
  }
208
- let index = 0;
209
- const executeNext = async () => {
210
- if (index < middleware.length) {
211
- const currentMiddleware = middleware[index++];
212
- return await currentMiddleware(context, executeNext);
213
- }
214
- return await routeConfig.handler(context);
215
- };
216
- return await executeNext();
197
+ return await this.runApiMiddlewareChain(context, routeConfig);
217
198
  } catch (error) {
218
199
  if (error instanceof Response) return error;
219
200
  if (errorHandler) {
220
201
  try {
221
202
  if (!context) {
222
- const locals = {};
223
- context = {
224
- request,
225
- params: Object.fromEntries(
226
- Object.entries(params).map(([key, value]) => [
227
- key,
228
- Array.isArray(value) ? value.join("/") : value
229
- ])
230
- ),
231
- response: new ApiResponseBuilder(),
232
- server: serverInstance,
233
- locals,
234
- require: createRequire(() => locals),
235
- services: { cache: this.getCacheService() },
236
- ...this.getRenderContext()
237
- };
203
+ context = this.createApiHandlerContext(request, params, serverInstance);
238
204
  }
239
205
  return await errorHandler(error, context);
240
206
  } catch (handlerError) {
@@ -246,6 +212,76 @@ class SharedServerAdapter extends AbstractServerAdapter {
246
212
  return new Response("Internal Server Error", { status: 500 });
247
213
  }
248
214
  }
215
+ createApiHandlerContext(request, params, serverInstance) {
216
+ const locals = {};
217
+ const normalizedParams = this.normalizeApiParams(params);
218
+ return {
219
+ request,
220
+ params: normalizedParams,
221
+ response: new ApiResponseBuilder(),
222
+ server: serverInstance,
223
+ locals,
224
+ require: createRequire(() => locals),
225
+ services: {
226
+ cache: this.getCacheService()
227
+ },
228
+ ...this.getRenderContext()
229
+ };
230
+ }
231
+ normalizeApiParams(params) {
232
+ return Object.fromEntries(
233
+ Object.entries(params).map(([key, value]) => [key, Array.isArray(value) ? value.join("/") : value])
234
+ );
235
+ }
236
+ async applyApiRequestSchema(context, schema) {
237
+ if (!schema) {
238
+ return void 0;
239
+ }
240
+ const url = new URL(context.request.url);
241
+ const queryParams = Object.fromEntries(url.searchParams);
242
+ const headers = Object.fromEntries(context.request.headers);
243
+ let body;
244
+ if (schema.body) {
245
+ try {
246
+ const contentType = context.request.headers.get("Content-Type") || "";
247
+ if (contentType.includes("application/json")) body = await context.request.clone().json();
248
+ else if (contentType.includes("text/plain")) body = await context.request.clone().text();
249
+ } catch {
250
+ return context.response.status(400).json({ error: "Invalid request body" });
251
+ }
252
+ }
253
+ const validationResult = await this.schemaValidator.validateRequest(
254
+ { body, query: queryParams, headers, params: context.params },
255
+ schema
256
+ );
257
+ if (!validationResult.success) {
258
+ return context.response.status(400).json({
259
+ error: "Validation failed",
260
+ issues: validationResult.errors
261
+ });
262
+ }
263
+ const validated = validationResult.data;
264
+ if (validated.body !== void 0) context.body = validated.body;
265
+ if (validated.query !== void 0) context.query = validated.query;
266
+ if (validated.headers !== void 0) context.headers = validated.headers;
267
+ if (validated.params !== void 0) context.params = validated.params;
268
+ return void 0;
269
+ }
270
+ async runApiMiddlewareChain(context, routeConfig) {
271
+ const middleware = routeConfig.middleware || [];
272
+ if (middleware.length === 0) {
273
+ return await routeConfig.handler(context);
274
+ }
275
+ let index = 0;
276
+ const executeNext = async () => {
277
+ if (index < middleware.length) {
278
+ const currentMiddleware = middleware[index++];
279
+ return await currentMiddleware(context, executeNext);
280
+ }
281
+ return await routeConfig.handler(context);
282
+ };
283
+ return await executeNext();
284
+ }
249
285
  normalizePath(pathname) {
250
286
  if (pathname.length > 1 && pathname.endsWith("/")) {
251
287
  return pathname.slice(0, -1);
@@ -338,18 +374,7 @@ class SharedServerAdapter extends AbstractServerAdapter {
338
374
  }
339
375
  return null;
340
376
  }
341
- /**
342
- * Universally processes an incoming WinterCG Web standard Request.
343
- *
344
- * 1. Resolves static Hot Module Replacement runtime blobs if development.
345
- * 2. Checks if the incoming request matches any parsed API route schemas.
346
- * - Routes through `executeApiHandler` which performs strict validation.
347
- * 3. Falls through to standard `ServerRouteHandler` for React/Lit filesystem pages.
348
- *
349
- * Both Bun and Node bindings fall back to this exact function once they have mapped their
350
- * native HTTP objects into Web Standard Requests.
351
- */
352
- async handleSharedRequest(request, context) {
377
+ tryHandleSharedHmrRequest(request, context) {
353
378
  const url = new URL(request.url);
354
379
  if (url.pathname === "/_hmr_runtime.js" && context.hmrManager) {
355
380
  const runtimePath = context.hmrManager.getRuntimePath();
@@ -368,15 +393,40 @@ class SharedServerAdapter extends AbstractServerAdapter {
368
393
  });
369
394
  }
370
395
  }
396
+ return null;
397
+ }
398
+ async tryHandleSharedApiRequest(request, context) {
371
399
  const apiMatch = this.matchApiHandler(request, context.apiHandlers);
372
- if (apiMatch) {
373
- return this.executeApiHandler(
374
- request,
375
- apiMatch.params,
376
- apiMatch.routeConfig,
377
- context.serverInstance,
378
- context.errorHandler
379
- );
400
+ if (!apiMatch) {
401
+ return null;
402
+ }
403
+ return await this.executeApiHandler(
404
+ request,
405
+ apiMatch.params,
406
+ apiMatch.routeConfig,
407
+ context.serverInstance,
408
+ context.errorHandler
409
+ );
410
+ }
411
+ /**
412
+ * Universally processes an incoming WinterCG Web standard Request.
413
+ *
414
+ * 1. Resolves static Hot Module Replacement runtime blobs if development.
415
+ * 2. Checks if the incoming request matches any parsed API route schemas.
416
+ * - Routes through `executeApiHandler` which performs strict validation.
417
+ * 3. Falls through to standard `ServerRouteHandler` for React/Lit filesystem pages.
418
+ *
419
+ * Both Bun and Node bindings fall back to this exact function once they have mapped their
420
+ * native HTTP objects into Web Standard Requests.
421
+ */
422
+ async handleSharedRequest(request, context) {
423
+ const hmrResponse = this.tryHandleSharedHmrRequest(request, context);
424
+ if (hmrResponse) {
425
+ return hmrResponse;
426
+ }
427
+ const apiResponse = await this.tryHandleSharedApiRequest(request, context);
428
+ if (apiResponse) {
429
+ return apiResponse;
380
430
  }
381
431
  return this.routeHandler.handleResponse(request);
382
432
  }
@@ -1,13 +1,13 @@
1
- import type { IHmrManager } from '../../public-types';
2
- import type { FSRouter } from '../../router/server/fs-router';
3
- import type { ExplicitStaticRouteMatcher } from './explicit-static-route-matcher';
4
- import type { FileSystemResponseMatcher } from './fs-server-response-matcher';
1
+ import type { IHmrManager } from '../../types/public-types.js';
2
+ import type { RouteRegistry } from '../../router/server/route-registry.js';
3
+ import type { ExplicitStaticRouteMatcher } from './explicit-static-route-matcher.js';
4
+ import type { FileSystemResponseMatcher } from './fs-server-response-matcher.js';
5
5
  /**
6
6
  * Configuration parameters for ServerRouteHandler.
7
7
  */
8
8
  export interface ServerRouteHandlerParams {
9
9
  /** File system router for matching request URLs to route handlers. */
10
- router: FSRouter;
10
+ router: RouteRegistry;
11
11
  /** Matcher for handling file system route responses. */
12
12
  fileSystemResponseMatcher: FileSystemResponseMatcher;
13
13
  /** Optional matcher for explicit static routes like processed images or sitemaps. */
@@ -1,6 +1,6 @@
1
- import { appLogger } from "../../global/app-logger";
2
- import { HttpError } from "../../errors/http-error";
3
- import { injectHmrRuntimeIntoHtmlResponse, isHtmlResponse, shouldInjectHmrHtmlResponse } from "./hmr-html-response";
1
+ import { appLogger } from "../../global/app-logger.js";
2
+ import { HttpError } from "../../errors/http-error.js";
3
+ import { injectHmrRuntimeIntoHtmlResponse, isHtmlResponse, shouldInjectHmrHtmlResponse } from "./hmr-html-response.js";
4
4
  class ServerRouteHandler {
5
5
  router;
6
6
  fileSystemResponseMatcher;
@@ -60,7 +60,7 @@ class ServerRouteHandler {
60
60
  const response2 = await this.explicitStaticRouteMatcher.handleMatch(explicitMatch);
61
61
  return this.maybeInjectHmrScript(response2);
62
62
  }
63
- const fsMatch = !pathname.includes(".") && this.router.match(request.url);
63
+ const fsMatch = !pathname.includes(".") && this.router.matchRequest(request.url);
64
64
  const response = await (fsMatch ? this.fileSystemResponseMatcher.handleMatch(fsMatch, request) : this.handleNoMatch(request));
65
65
  return this.maybeInjectHmrScript(response);
66
66
  }
@@ -1,10 +1,11 @@
1
- import type { EcoPagesAppConfig } from '../../internal-types';
2
- import type { ApiHandler, StaticRoute } from '../../public-types';
3
- import type { RouteRendererFactory } from '../../route-renderer/route-renderer';
4
- import type { FSRouter } from '../../router/server/fs-router';
5
- import type { StaticSiteGenerator } from '../../static-site-generator/static-site-generator';
1
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
2
+ import type { ApiHandler, StaticRoute } from '../../types/public-types.js';
3
+ import type { RouteRegistry } from '../../router/server/route-registry.js';
4
+ import type { StaticSiteGenerator } from '../../static-site-generator/static-site-generator.js';
5
+ import type { StaticGenerationRendererResolver } from '../../route-renderer/route-renderer.js';
6
6
  export interface StaticBuildOptions {
7
7
  preview?: boolean;
8
+ baseUrl?: string;
8
9
  }
9
10
  export interface ServeOptions {
10
11
  hostname?: string;
@@ -63,8 +64,8 @@ export declare class ServerStaticBuilder {
63
64
  * @param dependencies.staticRoutes - Explicit static routes registered via app.static()
64
65
  */
65
66
  build(options: StaticBuildOptions | undefined, dependencies: {
66
- router: FSRouter;
67
- routeRendererFactory: RouteRendererFactory;
67
+ router: RouteRegistry;
68
+ routeRendererFactory: StaticGenerationRendererResolver;
68
69
  staticRoutes?: StaticRoute[];
69
70
  }): Promise<void>;
70
71
  }
@@ -1,7 +1,8 @@
1
1
  import path from "node:path";
2
2
  import { fileSystem } from "@ecopages/file-system";
3
- import { StaticContentServer } from "../../dev/sc-server";
4
- import { appLogger } from "../../global/app-logger";
3
+ import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
4
+ import { StaticContentServer } from "../../dev/sc-server.js";
5
+ import { appLogger } from "../../global/app-logger.js";
5
6
  class ServerStaticBuilder {
6
7
  appConfig;
7
8
  staticSiteGenerator;
@@ -67,8 +68,8 @@ class ServerStaticBuilder {
67
68
  * @param dependencies.staticRoutes - Explicit static routes registered via app.static()
68
69
  */
69
70
  async build(options, dependencies) {
70
- const { preview = false } = options ?? {};
71
- const baseUrl = `http://${this.serveOptions.hostname || "localhost"}:${this.serveOptions.port || 3e3}`;
71
+ const { preview = false, baseUrl: explicitBaseUrl } = options ?? {};
72
+ const baseUrl = explicitBaseUrl ?? `http://${this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME}:${this.serveOptions.port || DEFAULT_ECOPAGES_PORT}`;
72
73
  this.warnApiHandlersUnavailableInStaticMode();
73
74
  this.prepareExportDirectory();
74
75
  await this.refreshRuntimeAssets();
@@ -82,7 +83,7 @@ class ServerStaticBuilder {
82
83
  this.logger.info("Build completed");
83
84
  return;
84
85
  }
85
- const previewPort = this.serveOptions.port || 3e3;
86
+ const previewPort = this.serveOptions.port || DEFAULT_ECOPAGES_PORT;
86
87
  const { server } = this.previewServerFactory.createServer({
87
88
  appConfig: this.appConfig,
88
89
  options: { port: Number(previewPort) }
@@ -0,0 +1,59 @@
1
+ import fs from 'node:fs';
2
+ import type { DefaultHmrContext, EcoPagesAppConfig, IHmrManager, IClientBridge } from '../../types/internal-types.js';
3
+ import type { EcoBuildPlugin } from '../../build/build-types.js';
4
+ import { type HmrStrategy } from '../../hmr/hmr-strategy.js';
5
+ import type { ClientBridgeEvent } from '../../types/public-types.js';
6
+ import { HmrEntrypointRegistrar } from './hmr-entrypoint-registrar.js';
7
+ import { BrowserBundleService } from '../../services/assets/browser-bundle.service.js';
8
+ import { type EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.js';
9
+ import type { ServerModuleTranspiler } from '../../services/module-loading/server-module-transpiler.service.js';
10
+ type HandleFileChangeOptions = {
11
+ broadcast?: boolean;
12
+ };
13
+ type SharedHmrManagerParams = {
14
+ appConfig: EcoPagesAppConfig;
15
+ bridge: IClientBridge;
16
+ registrationTimeoutMs?: number;
17
+ };
18
+ export declare abstract class SharedHmrManager implements IHmrManager {
19
+ readonly appConfig: EcoPagesAppConfig;
20
+ protected readonly bridge: IClientBridge;
21
+ protected watchers: Map<string, fs.FSWatcher>;
22
+ protected watchedFiles: Map<string, string>;
23
+ protected entrypointRegistrations: Map<string, Promise<string>>;
24
+ protected distDir: string;
25
+ protected plugins: EcoBuildPlugin[];
26
+ protected enabled: boolean;
27
+ protected strategies: HmrStrategy[];
28
+ protected readonly entrypointRegistrar: HmrEntrypointRegistrar;
29
+ protected readonly browserBundleService: BrowserBundleService;
30
+ protected readonly entrypointDependencyGraph: EntrypointDependencyGraph;
31
+ protected readonly serverModuleTranspiler: ServerModuleTranspiler;
32
+ constructor({ appConfig, bridge, registrationTimeoutMs }: SharedHmrManagerParams);
33
+ protected abstract createEntrypointDependencyGraph(existingEntrypointDependencyGraph: EntrypointDependencyGraph): EntrypointDependencyGraph;
34
+ protected shouldSkipMissingFileChange(_filePath: string): boolean;
35
+ protected onRuntimeBundleFailure(error: unknown): void;
36
+ protected ensureDistDir(): void;
37
+ protected shouldJsStrategyProcessEntrypoint(entrypointPath: string): boolean;
38
+ protected initializeStrategies(): void;
39
+ registerStrategy(strategy: HmrStrategy): void;
40
+ setPlugins(plugins: EcoBuildPlugin[]): void;
41
+ setEnabled(enabled: boolean): void;
42
+ isEnabled(): boolean;
43
+ buildRuntime(): Promise<void>;
44
+ getRuntimePath(): string;
45
+ broadcast(event: ClientBridgeEvent): void;
46
+ handleFileChange(filePath: string, options?: HandleFileChangeOptions): Promise<void>;
47
+ getOutputUrl(entrypointPath: string): string | undefined;
48
+ getWatchedFiles(): Map<string, string>;
49
+ getDistDir(): string;
50
+ getPlugins(): EcoBuildPlugin[];
51
+ getDefaultContext(): DefaultHmrContext;
52
+ protected clearFailedEntrypointRegistration(entrypointPath: string): void;
53
+ registerEntrypoint(entrypointPath: string): Promise<string>;
54
+ registerScriptEntrypoint(entrypointPath: string): Promise<string>;
55
+ protected emitStrictEntrypoint(entrypointPath: string): Promise<void>;
56
+ protected emitScriptEntrypoint(entrypointPath: string, outputPath: string): Promise<void>;
57
+ stop(): void;
58
+ }
59
+ export {};