@ecopages/core 0.2.0-alpha.9 → 0.2.0-beta.1

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 (473) hide show
  1. package/README.md +79 -28
  2. package/package.json +104 -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 +32 -8
  67. package/src/adapters/shared/server-static-builder.js +69 -6
  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-entry-file.d.ts +72 -0
  279. package/src/utils/resolve-entry-file.js +41 -0
  280. package/src/utils/resolve-work-dir.js +1 -1
  281. package/src/watchers/project-watcher.d.ts +4 -4
  282. package/src/watchers/project-watcher.js +35 -41
  283. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  284. package/src/watchers/project-watcher.test-helpers.js +5 -5
  285. package/CHANGELOG.md +0 -31
  286. package/src/adapters/abstract/application-adapter.ts +0 -337
  287. package/src/adapters/abstract/router-adapter.ts +0 -30
  288. package/src/adapters/abstract/server-adapter.ts +0 -79
  289. package/src/adapters/bun/client-bridge.ts +0 -62
  290. package/src/adapters/bun/create-app.ts +0 -189
  291. package/src/adapters/bun/hmr-manager.ts +0 -409
  292. package/src/adapters/bun/index.ts +0 -2
  293. package/src/adapters/bun/server-adapter.ts +0 -499
  294. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  295. package/src/adapters/bun/server-lifecycle.js +0 -92
  296. package/src/adapters/bun/server-lifecycle.ts +0 -124
  297. package/src/adapters/index.ts +0 -6
  298. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  299. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  300. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  301. package/src/adapters/node/create-app.ts +0 -179
  302. package/src/adapters/node/index.d.ts +0 -6
  303. package/src/adapters/node/index.js +0 -11
  304. package/src/adapters/node/index.ts +0 -16
  305. package/src/adapters/node/node-client-bridge.ts +0 -79
  306. package/src/adapters/node/node-hmr-manager.ts +0 -381
  307. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  308. package/src/adapters/node/runtime-adapter.js +0 -306
  309. package/src/adapters/node/runtime-adapter.ts +0 -439
  310. package/src/adapters/node/server-adapter.ts +0 -488
  311. package/src/adapters/node/static-content-server.ts +0 -239
  312. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  313. package/src/adapters/node/write-runtime-manifest.js +0 -12
  314. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  315. package/src/adapters/shared/api-response.ts +0 -104
  316. package/src/adapters/shared/application-adapter.ts +0 -199
  317. package/src/adapters/shared/define-api-handler.ts +0 -66
  318. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  319. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  320. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  321. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  322. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  323. package/src/adapters/shared/hmr-html-response.ts +0 -52
  324. package/src/adapters/shared/render-context.ts +0 -120
  325. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  326. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  327. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  328. package/src/adapters/shared/server-adapter.ts +0 -489
  329. package/src/adapters/shared/server-route-handler.ts +0 -153
  330. package/src/adapters/shared/server-static-builder.ts +0 -166
  331. package/src/build/build-adapter.ts +0 -361
  332. package/src/build/build-manifest.ts +0 -54
  333. package/src/build/build-types.ts +0 -83
  334. package/src/build/dev-build-coordinator.d.ts +0 -74
  335. package/src/build/dev-build-coordinator.js +0 -161
  336. package/src/build/dev-build-coordinator.ts +0 -221
  337. package/src/build/esbuild-build-adapter.d.ts +0 -72
  338. package/src/build/esbuild-build-adapter.js +0 -422
  339. package/src/build/esbuild-build-adapter.ts +0 -559
  340. package/src/build/runtime-build-executor.ts +0 -34
  341. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  342. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  343. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  344. package/src/config/config-builder.ts +0 -706
  345. package/src/constants.ts +0 -54
  346. package/src/create-app.ts +0 -87
  347. package/src/dev/sc-server.ts +0 -143
  348. package/src/eco/component-render-context.d.ts +0 -105
  349. package/src/eco/component-render-context.js +0 -87
  350. package/src/eco/component-render-context.ts +0 -224
  351. package/src/eco/eco.ts +0 -242
  352. package/src/eco/eco.types.ts +0 -221
  353. package/src/eco/eco.utils.ts +0 -89
  354. package/src/eco/global-injector-map.ts +0 -112
  355. package/src/eco/lazy-injector-map.ts +0 -120
  356. package/src/eco/module-dependencies.ts +0 -75
  357. package/src/errors/http-error.ts +0 -72
  358. package/src/errors/index.ts +0 -2
  359. package/src/errors/locals-access-error.ts +0 -7
  360. package/src/global/app-logger.ts +0 -4
  361. package/src/hmr/client/hmr-runtime.ts +0 -152
  362. package/src/hmr/hmr-strategy.ts +0 -172
  363. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  364. package/src/hmr/hmr.test.e2e.ts +0 -66
  365. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  366. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  367. package/src/index.browser.ts +0 -3
  368. package/src/index.ts +0 -5
  369. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  370. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  371. package/src/internal-types.ts +0 -232
  372. package/src/plugins/alias-resolver-plugin.ts +0 -63
  373. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  374. package/src/plugins/integration-plugin.ts +0 -226
  375. package/src/plugins/processor.ts +0 -240
  376. package/src/plugins/runtime-capability.ts +0 -14
  377. package/src/public-types.ts +0 -1317
  378. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  379. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  380. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  381. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  382. package/src/route-renderer/component-graph/component-graph.js +0 -72
  383. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  384. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  385. package/src/route-renderer/component-graph/component-marker.js +0 -46
  386. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  387. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  388. package/src/route-renderer/component-graph/component-reference.js +0 -19
  389. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  390. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  391. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  392. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  393. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  394. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  395. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  396. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  397. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  398. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  399. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  400. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  401. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  402. package/src/route-renderer/route-renderer.ts +0 -115
  403. package/src/router/client/link-intent.test.browser.ts +0 -51
  404. package/src/router/client/link-intent.ts +0 -92
  405. package/src/router/client/navigation-coordinator.ts +0 -433
  406. package/src/router/server/fs-router-scanner.d.ts +0 -41
  407. package/src/router/server/fs-router-scanner.js +0 -156
  408. package/src/router/server/fs-router-scanner.ts +0 -219
  409. package/src/router/server/fs-router.d.ts +0 -26
  410. package/src/router/server/fs-router.js +0 -100
  411. package/src/router/server/fs-router.ts +0 -122
  412. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  413. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  414. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  415. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  416. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  417. package/src/services/assets/asset-processing-service/index.ts +0 -5
  418. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  419. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  420. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  421. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  422. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  423. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  424. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  425. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  426. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  427. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  428. package/src/services/assets/browser-bundle.service.ts +0 -53
  429. package/src/services/cache/cache.types.ts +0 -126
  430. package/src/services/cache/index.ts +0 -18
  431. package/src/services/cache/memory-cache-store.ts +0 -130
  432. package/src/services/cache/page-cache-service.ts +0 -202
  433. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  434. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  435. package/src/services/html/html-transformer.service.ts +0 -279
  436. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  437. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  438. package/src/services/module-loading/page-module-import.service.ts +0 -200
  439. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  440. package/src/services/module-loading/server-loader.service.js +0 -32
  441. package/src/services/module-loading/server-loader.service.ts +0 -130
  442. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  444. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  445. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  446. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  447. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  448. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  449. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  450. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  451. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  452. package/src/services/validation/schema-validation-service.ts +0 -204
  453. package/src/services/validation/standard-schema.types.ts +0 -68
  454. package/src/static-site-generator/static-site-generator.ts +0 -462
  455. package/src/utils/css.d.ts +0 -1
  456. package/src/utils/css.js +0 -7
  457. package/src/utils/css.ts +0 -5
  458. package/src/utils/deep-merge.ts +0 -47
  459. package/src/utils/hash.ts +0 -5
  460. package/src/utils/html.ts +0 -1
  461. package/src/utils/invariant.ts +0 -15
  462. package/src/utils/locals-utils.ts +0 -37
  463. package/src/utils/parse-cli-args.ts +0 -83
  464. package/src/utils/path-utils.module.ts +0 -14
  465. package/src/utils/resolve-work-dir.ts +0 -45
  466. package/src/utils/runtime.ts +0 -44
  467. package/src/utils/server-utils.module.ts +0 -67
  468. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  469. package/src/watchers/project-watcher.ts +0 -363
  470. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  471. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  472. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  473. /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;
@@ -17,6 +18,7 @@ export interface ServerStaticBuilderParams {
17
18
  apiHandlers?: ApiHandler[];
18
19
  logger?: ServerStaticBuilderLogger;
19
20
  previewServerFactory?: ServerStaticPreviewServerFactory;
21
+ entryFile?: string;
20
22
  }
21
23
  /**
22
24
  * Minimal logger dependency used by the static builder.
@@ -51,10 +53,32 @@ export declare class ServerStaticBuilder {
51
53
  private readonly apiHandlers;
52
54
  private readonly logger;
53
55
  private readonly previewServerFactory;
54
- constructor({ appConfig, staticSiteGenerator, serveOptions, apiHandlers, logger, previewServerFactory, }: ServerStaticBuilderParams);
56
+ private readonly entryFile;
57
+ constructor({ appConfig, staticSiteGenerator, serveOptions, apiHandlers, logger, previewServerFactory, entryFile, }: ServerStaticBuilderParams);
55
58
  private warnApiHandlersUnavailableInStaticMode;
56
59
  private prepareExportDirectory;
57
60
  private refreshRuntimeAssets;
61
+ /**
62
+ * Bundles the server entry file for production use.
63
+ *
64
+ * @remarks
65
+ * When the project has API endpoints, the entry file must be bundled
66
+ * into a single JS file so the production server can start without
67
+ * on-the-fly TypeScript transpilation. The bundle is output to
68
+ * `dist/{SERVER_BUNDLE_DIR}/{SERVER_BUNDLE_FILENAME}` and used by
69
+ * `ecopages start` in production.
70
+ *
71
+ * Package imports remain external so native addons and runtime-owned
72
+ * dependencies continue to load through the app's installed
73
+ * `node_modules` tree. Only the app entry graph is bundled.
74
+ *
75
+ * Skips silently when no API endpoints are registered (static-only site).
76
+ * Throws if the build adapter is unavailable, is owned by a host
77
+ * runtime, or bundling fails.
78
+ *
79
+ * @throws If the build adapter is unavailable, is host-owned, or bundling fails.
80
+ */
81
+ private bundleServerEntry;
58
82
  /**
59
83
  * Generates a static build of the site for deployment.
60
84
  * @param options.preview - If true, starts a preview server after build
@@ -63,8 +87,8 @@ export declare class ServerStaticBuilder {
63
87
  * @param dependencies.staticRoutes - Explicit static routes registered via app.static()
64
88
  */
65
89
  build(options: StaticBuildOptions | undefined, dependencies: {
66
- router: FSRouter;
67
- routeRendererFactory: RouteRendererFactory;
90
+ router: RouteRegistry;
91
+ routeRendererFactory: StaticGenerationRendererResolver;
68
92
  staticRoutes?: StaticRoute[];
69
93
  }): Promise<void>;
70
94
  }