@ecopages/core 0.2.0-alpha.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 (342) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/LICENSE +21 -0
  3. package/README.md +32 -0
  4. package/package.json +279 -0
  5. package/src/adapters/abstract/application-adapter.d.ts +168 -0
  6. package/src/adapters/abstract/application-adapter.js +109 -0
  7. package/src/adapters/abstract/application-adapter.ts +337 -0
  8. package/src/adapters/abstract/router-adapter.d.ts +26 -0
  9. package/src/adapters/abstract/router-adapter.js +5 -0
  10. package/src/adapters/abstract/router-adapter.ts +30 -0
  11. package/src/adapters/abstract/server-adapter.d.ts +69 -0
  12. package/src/adapters/abstract/server-adapter.js +15 -0
  13. package/src/adapters/abstract/server-adapter.ts +79 -0
  14. package/src/adapters/bun/client-bridge.d.ts +34 -0
  15. package/src/adapters/bun/client-bridge.js +48 -0
  16. package/src/adapters/bun/client-bridge.ts +62 -0
  17. package/src/adapters/bun/create-app.d.ts +60 -0
  18. package/src/adapters/bun/create-app.js +117 -0
  19. package/src/adapters/bun/create-app.ts +189 -0
  20. package/src/adapters/bun/define-api-handler.d.ts +61 -0
  21. package/src/adapters/bun/define-api-handler.js +15 -0
  22. package/src/adapters/bun/define-api-handler.ts +114 -0
  23. package/src/adapters/bun/hmr-manager.d.ts +84 -0
  24. package/src/adapters/bun/hmr-manager.js +227 -0
  25. package/src/adapters/bun/hmr-manager.ts +281 -0
  26. package/src/adapters/bun/index.d.ts +3 -0
  27. package/src/adapters/bun/index.js +8 -0
  28. package/src/adapters/bun/index.ts +3 -0
  29. package/src/adapters/bun/server-adapter.d.ts +155 -0
  30. package/src/adapters/bun/server-adapter.js +368 -0
  31. package/src/adapters/bun/server-adapter.ts +492 -0
  32. package/src/adapters/bun/server-lifecycle.d.ts +52 -0
  33. package/src/adapters/bun/server-lifecycle.js +120 -0
  34. package/src/adapters/bun/server-lifecycle.ts +154 -0
  35. package/src/adapters/index.d.ts +6 -0
  36. package/src/adapters/index.js +14 -0
  37. package/src/adapters/index.ts +6 -0
  38. package/src/adapters/node/create-app.d.ts +21 -0
  39. package/src/adapters/node/create-app.js +143 -0
  40. package/src/adapters/node/create-app.ts +179 -0
  41. package/src/adapters/node/index.d.ts +4 -0
  42. package/src/adapters/node/index.js +8 -0
  43. package/src/adapters/node/index.ts +9 -0
  44. package/src/adapters/node/node-client-bridge.d.ts +26 -0
  45. package/src/adapters/node/node-client-bridge.js +66 -0
  46. package/src/adapters/node/node-client-bridge.ts +79 -0
  47. package/src/adapters/node/node-hmr-manager.d.ts +62 -0
  48. package/src/adapters/node/node-hmr-manager.js +221 -0
  49. package/src/adapters/node/node-hmr-manager.ts +271 -0
  50. package/src/adapters/node/server-adapter.d.ts +190 -0
  51. package/src/adapters/node/server-adapter.js +420 -0
  52. package/src/adapters/node/server-adapter.ts +561 -0
  53. package/src/adapters/node/static-content-server.d.ts +24 -0
  54. package/src/adapters/node/static-content-server.js +166 -0
  55. package/src/adapters/node/static-content-server.ts +203 -0
  56. package/src/adapters/shared/api-response.d.ts +52 -0
  57. package/src/adapters/shared/api-response.js +96 -0
  58. package/src/adapters/shared/api-response.ts +104 -0
  59. package/src/adapters/shared/application-adapter.d.ts +18 -0
  60. package/src/adapters/shared/application-adapter.js +90 -0
  61. package/src/adapters/shared/application-adapter.ts +199 -0
  62. package/src/adapters/shared/explicit-static-route-matcher.d.ts +38 -0
  63. package/src/adapters/shared/explicit-static-route-matcher.js +100 -0
  64. package/src/adapters/shared/explicit-static-route-matcher.ts +134 -0
  65. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +65 -0
  66. package/src/adapters/shared/file-route-middleware-pipeline.js +98 -0
  67. package/src/adapters/shared/file-route-middleware-pipeline.ts +123 -0
  68. package/src/adapters/shared/fs-server-response-factory.d.ts +19 -0
  69. package/src/adapters/shared/fs-server-response-factory.js +97 -0
  70. package/src/adapters/shared/fs-server-response-factory.ts +118 -0
  71. package/src/adapters/shared/fs-server-response-matcher.d.ts +71 -0
  72. package/src/adapters/shared/fs-server-response-matcher.js +155 -0
  73. package/src/adapters/shared/fs-server-response-matcher.ts +198 -0
  74. package/src/adapters/shared/render-context.d.ts +14 -0
  75. package/src/adapters/shared/render-context.js +69 -0
  76. package/src/adapters/shared/render-context.ts +105 -0
  77. package/src/adapters/shared/server-adapter.d.ts +87 -0
  78. package/src/adapters/shared/server-adapter.js +353 -0
  79. package/src/adapters/shared/server-adapter.ts +442 -0
  80. package/src/adapters/shared/server-route-handler.d.ts +89 -0
  81. package/src/adapters/shared/server-route-handler.js +120 -0
  82. package/src/adapters/shared/server-route-handler.ts +166 -0
  83. package/src/adapters/shared/server-static-builder.d.ts +38 -0
  84. package/src/adapters/shared/server-static-builder.js +46 -0
  85. package/src/adapters/shared/server-static-builder.ts +82 -0
  86. package/src/build/build-adapter.d.ts +74 -0
  87. package/src/build/build-adapter.js +54 -0
  88. package/src/build/build-adapter.ts +132 -0
  89. package/src/build/build-types.d.ts +57 -0
  90. package/src/build/build-types.js +0 -0
  91. package/src/build/build-types.ts +83 -0
  92. package/src/build/esbuild-build-adapter.d.ts +69 -0
  93. package/src/build/esbuild-build-adapter.js +390 -0
  94. package/src/build/esbuild-build-adapter.ts +510 -0
  95. package/src/config/config-builder.d.ts +227 -0
  96. package/src/config/config-builder.js +392 -0
  97. package/src/config/config-builder.ts +474 -0
  98. package/src/constants.d.ts +32 -0
  99. package/src/constants.js +21 -0
  100. package/src/constants.ts +39 -0
  101. package/src/create-app.d.ts +17 -0
  102. package/src/create-app.js +66 -0
  103. package/src/create-app.ts +87 -0
  104. package/src/declarations.d.ts +26 -0
  105. package/src/define-api-handler.d.ts +25 -0
  106. package/src/define-api-handler.js +15 -0
  107. package/src/define-api-handler.ts +66 -0
  108. package/src/dev/sc-server.d.ts +30 -0
  109. package/src/dev/sc-server.js +111 -0
  110. package/src/dev/sc-server.ts +143 -0
  111. package/src/eco/README.md +636 -0
  112. package/src/eco/component-render-context.d.ts +105 -0
  113. package/src/eco/component-render-context.js +77 -0
  114. package/src/eco/component-render-context.ts +202 -0
  115. package/src/eco/eco.d.ts +9 -0
  116. package/src/eco/eco.js +110 -0
  117. package/src/eco/eco.ts +221 -0
  118. package/src/eco/eco.types.d.ts +170 -0
  119. package/src/eco/eco.types.js +0 -0
  120. package/src/eco/eco.types.ts +202 -0
  121. package/src/eco/eco.utils.d.ts +40 -0
  122. package/src/eco/eco.utils.js +40 -0
  123. package/src/eco/eco.utils.ts +89 -0
  124. package/src/eco/global-injector-map.d.ts +16 -0
  125. package/src/eco/global-injector-map.js +80 -0
  126. package/src/eco/global-injector-map.ts +112 -0
  127. package/src/eco/lazy-injector-map.d.ts +8 -0
  128. package/src/eco/lazy-injector-map.js +70 -0
  129. package/src/eco/lazy-injector-map.ts +120 -0
  130. package/src/eco/module-dependencies.d.ts +18 -0
  131. package/src/eco/module-dependencies.js +49 -0
  132. package/src/eco/module-dependencies.ts +75 -0
  133. package/src/env.d.ts +20 -0
  134. package/src/errors/http-error.d.ts +31 -0
  135. package/src/errors/http-error.js +50 -0
  136. package/src/errors/http-error.ts +72 -0
  137. package/src/errors/index.d.ts +2 -0
  138. package/src/errors/index.js +4 -0
  139. package/src/errors/index.ts +2 -0
  140. package/src/errors/locals-access-error.d.ts +4 -0
  141. package/src/errors/locals-access-error.js +9 -0
  142. package/src/errors/locals-access-error.ts +7 -0
  143. package/src/global/app-logger.d.ts +2 -0
  144. package/src/global/app-logger.js +6 -0
  145. package/src/global/app-logger.ts +4 -0
  146. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
  147. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  148. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  149. package/src/hmr/client/hmr-runtime.d.ts +10 -0
  150. package/src/hmr/client/hmr-runtime.js +86 -0
  151. package/src/hmr/client/hmr-runtime.ts +121 -0
  152. package/src/hmr/hmr-strategy.d.ts +159 -0
  153. package/src/hmr/hmr-strategy.js +29 -0
  154. package/src/hmr/hmr-strategy.ts +172 -0
  155. package/src/hmr/hmr.test.e2e.d.ts +1 -0
  156. package/src/hmr/hmr.test.e2e.js +50 -0
  157. package/src/hmr/hmr.test.e2e.ts +75 -0
  158. package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
  159. package/src/hmr/strategies/default-hmr-strategy.js +34 -0
  160. package/src/hmr/strategies/default-hmr-strategy.ts +60 -0
  161. package/src/hmr/strategies/js-hmr-strategy.d.ts +136 -0
  162. package/src/hmr/strategies/js-hmr-strategy.js +179 -0
  163. package/src/hmr/strategies/js-hmr-strategy.ts +308 -0
  164. package/src/index.browser.d.ts +3 -0
  165. package/src/index.browser.js +4 -0
  166. package/src/index.browser.ts +3 -0
  167. package/src/index.d.ts +5 -0
  168. package/src/index.js +10 -0
  169. package/src/index.ts +5 -0
  170. package/src/integrations/ghtml/ghtml-renderer.d.ts +15 -0
  171. package/src/integrations/ghtml/ghtml-renderer.js +60 -0
  172. package/src/integrations/ghtml/ghtml-renderer.ts +93 -0
  173. package/src/integrations/ghtml/ghtml.plugin.d.ts +20 -0
  174. package/src/integrations/ghtml/ghtml.plugin.js +21 -0
  175. package/src/integrations/ghtml/ghtml.plugin.ts +32 -0
  176. package/src/internal-types.d.ts +200 -0
  177. package/src/internal-types.js +0 -0
  178. package/src/internal-types.ts +212 -0
  179. package/src/plugins/alias-resolver-plugin.d.ts +2 -0
  180. package/src/plugins/alias-resolver-plugin.js +39 -0
  181. package/src/plugins/alias-resolver-plugin.ts +45 -0
  182. package/src/plugins/eco-component-meta-plugin.d.ts +95 -0
  183. package/src/plugins/eco-component-meta-plugin.js +157 -0
  184. package/src/plugins/eco-component-meta-plugin.ts +474 -0
  185. package/src/plugins/integration-plugin.d.ts +102 -0
  186. package/src/plugins/integration-plugin.js +100 -0
  187. package/src/plugins/integration-plugin.ts +184 -0
  188. package/src/plugins/processor.d.ts +82 -0
  189. package/src/plugins/processor.js +122 -0
  190. package/src/plugins/processor.ts +220 -0
  191. package/src/public-types.d.ts +1094 -0
  192. package/src/public-types.js +0 -0
  193. package/src/public-types.ts +1255 -0
  194. package/src/route-renderer/GRAPH.md +387 -0
  195. package/src/route-renderer/README.md +135 -0
  196. package/src/route-renderer/component-graph-executor.d.ts +32 -0
  197. package/src/route-renderer/component-graph-executor.js +31 -0
  198. package/src/route-renderer/component-graph-executor.ts +84 -0
  199. package/src/route-renderer/component-graph.d.ts +42 -0
  200. package/src/route-renderer/component-graph.js +72 -0
  201. package/src/route-renderer/component-graph.ts +159 -0
  202. package/src/route-renderer/component-marker.d.ts +52 -0
  203. package/src/route-renderer/component-marker.js +46 -0
  204. package/src/route-renderer/component-marker.ts +117 -0
  205. package/src/route-renderer/dependency-resolver.d.ts +24 -0
  206. package/src/route-renderer/dependency-resolver.js +428 -0
  207. package/src/route-renderer/dependency-resolver.ts +596 -0
  208. package/src/route-renderer/html-post-processing.service.d.ts +40 -0
  209. package/src/route-renderer/html-post-processing.service.js +86 -0
  210. package/src/route-renderer/html-post-processing.service.ts +103 -0
  211. package/src/route-renderer/integration-renderer.d.ts +339 -0
  212. package/src/route-renderer/integration-renderer.js +526 -0
  213. package/src/route-renderer/integration-renderer.ts +696 -0
  214. package/src/route-renderer/marker-graph-resolver.d.ts +76 -0
  215. package/src/route-renderer/marker-graph-resolver.js +93 -0
  216. package/src/route-renderer/marker-graph-resolver.ts +153 -0
  217. package/src/route-renderer/page-module-loader.d.ts +61 -0
  218. package/src/route-renderer/page-module-loader.js +102 -0
  219. package/src/route-renderer/page-module-loader.ts +153 -0
  220. package/src/route-renderer/render-execution.service.d.ts +69 -0
  221. package/src/route-renderer/render-execution.service.js +91 -0
  222. package/src/route-renderer/render-execution.service.ts +158 -0
  223. package/src/route-renderer/render-preparation.service.d.ts +112 -0
  224. package/src/route-renderer/render-preparation.service.js +243 -0
  225. package/src/route-renderer/render-preparation.service.ts +358 -0
  226. package/src/route-renderer/route-renderer.d.ts +26 -0
  227. package/src/route-renderer/route-renderer.js +68 -0
  228. package/src/route-renderer/route-renderer.ts +80 -0
  229. package/src/router/fs-router-scanner.d.ts +41 -0
  230. package/src/router/fs-router-scanner.js +155 -0
  231. package/src/router/fs-router-scanner.ts +217 -0
  232. package/src/router/fs-router.d.ts +26 -0
  233. package/src/router/fs-router.js +100 -0
  234. package/src/router/fs-router.ts +122 -0
  235. package/src/services/asset-processing-service/asset-processing.service.d.ts +41 -0
  236. package/src/services/asset-processing-service/asset-processing.service.js +250 -0
  237. package/src/services/asset-processing-service/asset-processing.service.ts +306 -0
  238. package/src/services/asset-processing-service/asset.factory.d.ts +17 -0
  239. package/src/services/asset-processing-service/asset.factory.js +82 -0
  240. package/src/services/asset-processing-service/asset.factory.ts +105 -0
  241. package/src/services/asset-processing-service/assets.types.d.ts +88 -0
  242. package/src/services/asset-processing-service/assets.types.js +0 -0
  243. package/src/services/asset-processing-service/assets.types.ts +112 -0
  244. package/src/services/asset-processing-service/index.d.ts +3 -0
  245. package/src/services/asset-processing-service/index.js +3 -0
  246. package/src/services/asset-processing-service/index.ts +3 -0
  247. package/src/services/asset-processing-service/processor.interface.d.ts +22 -0
  248. package/src/services/asset-processing-service/processor.interface.js +6 -0
  249. package/src/services/asset-processing-service/processor.interface.ts +27 -0
  250. package/src/services/asset-processing-service/processor.registry.d.ts +8 -0
  251. package/src/services/asset-processing-service/processor.registry.js +15 -0
  252. package/src/services/asset-processing-service/processor.registry.ts +18 -0
  253. package/src/services/asset-processing-service/processors/base/base-processor.d.ts +24 -0
  254. package/src/services/asset-processing-service/processors/base/base-processor.js +59 -0
  255. package/src/services/asset-processing-service/processors/base/base-processor.ts +76 -0
  256. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +16 -0
  257. package/src/services/asset-processing-service/processors/base/base-script-processor.js +80 -0
  258. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +105 -0
  259. package/src/services/asset-processing-service/processors/index.d.ts +5 -0
  260. package/src/services/asset-processing-service/processors/index.js +5 -0
  261. package/src/services/asset-processing-service/processors/index.ts +5 -0
  262. package/src/services/asset-processing-service/processors/script/content-script.processor.d.ts +5 -0
  263. package/src/services/asset-processing-service/processors/script/content-script.processor.js +57 -0
  264. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +66 -0
  265. package/src/services/asset-processing-service/processors/script/file-script.processor.d.ts +8 -0
  266. package/src/services/asset-processing-service/processors/script/file-script.processor.js +76 -0
  267. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +88 -0
  268. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +7 -0
  269. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +74 -0
  270. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +84 -0
  271. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -0
  272. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +25 -0
  273. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +27 -0
  274. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
  275. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +63 -0
  276. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +77 -0
  277. package/src/services/cache/cache.types.d.ts +107 -0
  278. package/src/services/cache/cache.types.js +0 -0
  279. package/src/services/cache/cache.types.ts +126 -0
  280. package/src/services/cache/index.d.ts +7 -0
  281. package/src/services/cache/index.js +7 -0
  282. package/src/services/cache/index.ts +18 -0
  283. package/src/services/cache/memory-cache-store.d.ts +42 -0
  284. package/src/services/cache/memory-cache-store.js +98 -0
  285. package/src/services/cache/memory-cache-store.ts +130 -0
  286. package/src/services/cache/page-cache-service.d.ts +70 -0
  287. package/src/services/cache/page-cache-service.js +152 -0
  288. package/src/services/cache/page-cache-service.ts +202 -0
  289. package/src/services/html-transformer.service.d.ts +50 -0
  290. package/src/services/html-transformer.service.js +163 -0
  291. package/src/services/html-transformer.service.ts +217 -0
  292. package/src/services/page-module-import.service.d.ts +37 -0
  293. package/src/services/page-module-import.service.js +88 -0
  294. package/src/services/page-module-import.service.ts +129 -0
  295. package/src/services/page-request-cache-coordinator.service.d.ts +75 -0
  296. package/src/services/page-request-cache-coordinator.service.js +107 -0
  297. package/src/services/page-request-cache-coordinator.service.ts +128 -0
  298. package/src/services/schema-validation-service.d.ts +122 -0
  299. package/src/services/schema-validation-service.js +101 -0
  300. package/src/services/schema-validation-service.ts +204 -0
  301. package/src/services/validation/standard-schema.types.d.ts +65 -0
  302. package/src/services/validation/standard-schema.types.js +0 -0
  303. package/src/services/validation/standard-schema.types.ts +68 -0
  304. package/src/static-site-generator/static-site-generator.d.ts +57 -0
  305. package/src/static-site-generator/static-site-generator.js +272 -0
  306. package/src/static-site-generator/static-site-generator.ts +359 -0
  307. package/src/utils/css.d.ts +1 -0
  308. package/src/utils/css.js +7 -0
  309. package/src/utils/css.ts +5 -0
  310. package/src/utils/deep-merge.d.ts +14 -0
  311. package/src/utils/deep-merge.js +32 -0
  312. package/src/utils/deep-merge.ts +47 -0
  313. package/src/utils/hash.d.ts +1 -0
  314. package/src/utils/hash.js +7 -0
  315. package/src/utils/hash.ts +5 -0
  316. package/src/utils/html.d.ts +1 -0
  317. package/src/utils/html.js +4 -0
  318. package/src/utils/html.ts +1 -0
  319. package/src/utils/invariant.d.ts +5 -0
  320. package/src/utils/invariant.js +11 -0
  321. package/src/utils/invariant.ts +15 -0
  322. package/src/utils/locals-utils.d.ts +15 -0
  323. package/src/utils/locals-utils.js +24 -0
  324. package/src/utils/locals-utils.ts +37 -0
  325. package/src/utils/parse-cli-args.d.ts +24 -0
  326. package/src/utils/parse-cli-args.js +47 -0
  327. package/src/utils/parse-cli-args.ts +83 -0
  328. package/src/utils/path-utils.module.d.ts +5 -0
  329. package/src/utils/path-utils.module.js +14 -0
  330. package/src/utils/path-utils.module.ts +14 -0
  331. package/src/utils/runtime.d.ts +11 -0
  332. package/src/utils/runtime.js +40 -0
  333. package/src/utils/runtime.ts +44 -0
  334. package/src/utils/server-utils.module.d.ts +19 -0
  335. package/src/utils/server-utils.module.js +56 -0
  336. package/src/utils/server-utils.module.ts +67 -0
  337. package/src/watchers/project-watcher.d.ts +120 -0
  338. package/src/watchers/project-watcher.js +238 -0
  339. package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
  340. package/src/watchers/project-watcher.test-helpers.js +51 -0
  341. package/src/watchers/project-watcher.test-helpers.ts +40 -0
  342. package/src/watchers/project-watcher.ts +306 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,89 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@ecopages/core` are documented here.
4
+
5
+ > **Note:** Changelog tracking begins at version `0.2.0`. Changes prior to this release are not recorded here but are available in the git history.
6
+
7
+ ## [UNRELEASED] — TBD
8
+
9
+ ### Features
10
+
11
+ #### Node.js Runtime Support
12
+
13
+ - **Node server adapter** — Full HTTP server adapter for Node.js via `packages/core/src/adapters/node/`, including request bridging, route handling, static content serving, and graceful shutdown.
14
+ - **Node static build pipeline** — Static-site build and preview server for Node.js runtime (`ab22f167`, `a47b4da3`, `435dc250`).
15
+ - **Node API handler pipeline** — `define-api-handler` now works cross-runtime; Node adapter wires API handler execution end-to-end (`73e57d87`, `f46aa528`).
16
+ - **Node client bridge** — `NodeClientBridge` with SSE-based HMR stream and heartbeat mechanism for connection health (`3361445f`).
17
+ - **Node HMR manager** — `NodeHmrManager` that mirrors Bun HMR capabilities on the Node runtime.
18
+ - **`createApp` universal factory** — Top-level `createApp` export that selects the correct adapter (Bun or Node) at runtime (`ce691bdf`, `2f1b1109`).
19
+
20
+ #### Build System
21
+
22
+ - **`EsbuildBuildAdapter`** — A new build backend backed by esbuild, replacing the Bun-only transpilation path. Includes module resolution routing, plugin registration, and transpilation defaults (`f503e86e`, `94c37d38`, `e4e124a1`).
23
+ - **Build dependency graph** — `BuildDependencyGraph` interface for tracking entrypoints and their asset dependencies, enabling more accurate HMR invalidation (`e7653c9b`).
24
+ - **Build adapter abstraction** — `build-adapter.ts` and `build-types.ts` decouple build and plugin contracts from Bun-specific types (`11b03bcc`).
25
+
26
+ #### Rendering & Orchestration
27
+
28
+ - **Boundary rendering policy** — Cross-integration component boundaries are now explicitly enforced (`ec1e4d66`).
29
+ - **Full orchestration mode** — Legacy rendering mode branches removed; the engine always runs in unified orchestration mode (`f652fa0a`).
30
+ - **Extracted render services** — The render pipeline is decomposed into focused services:
31
+ - `RenderExecutionService`
32
+ - `HtmlPostProcessingService`
33
+ - `RenderPreparationService`
34
+ - `MarkerGraphResolver`
35
+ - `FileRouteMiddlewarePipeline`
36
+ - `PageRequestCacheCoordinator`
37
+ - `PageModuleImportService`
38
+ - **Component render context** — New `ComponentRenderContext` consolidates component-level state during rendering (`eco/component-render-context.ts`).
39
+ - **Worker-tools HTML rewriter fallback** — `html-transformer` adopts `@worker-tools/html-rewriter` as a fallback for non-Bun environments (`54056d4f`).
40
+
41
+ #### Dependency & Injection
42
+
43
+ - **Global injector map** — `GlobalInjectorMap` and `LazyInjectorMap` provide structured, testable dependency injection for global and lazy assets (`c3a25072`).
44
+ - **Lazy dependency resolution** — SSR lazy script resolution now uses dedicated utility functions for dependency entry attributes and content generation (`71ce2f4f`).
45
+ - **Dependency entry type refactor** — Unified types for script and stylesheet dependency entries, with improved error messages (`1e02dba6`).
46
+ - **Module dependencies** — New `module-dependencies.ts` tracks explicit module-level asset relationships.
47
+ - **Eco utils extraction** — Shared utilities moved to `eco.utils.ts` to remove runtime metadata fallbacks (`bdc60d50`).
48
+
49
+ #### API Handlers
50
+
51
+ - **Unified typed API handler context** — `defineApiHandler` now exposes a fully typed, runtime-agnostic context object. The Bun-specific adapter is slimmed down to a thin wrapper (`2f1b1109`, `08e194b4`).
52
+ - **Portable root runtime API** — Core exposes a portable API surface that avoids runtime escape hatches (`ce691bdf`, `1ec42c02`).
53
+
54
+ ### Refactoring
55
+
56
+ - **Bun adapter isolation** — Bun-specific types (`serve` options, file reads, env access, argv/hash helpers) are routed through dedicated helpers, making the remaining adapter code portable (`73668f52`, `0c90ced1`, `73fb904a`, `5eb0957b`, `4bdc74a9`, `e9ce163c`, `22f9de4a`, `f7b3d95e`).
57
+ - **Shared server adapter** — Common server adapter logic extracted to `adapters/shared/application-adapter.ts` and `adapters/shared/server-adapter.ts`, shared between Bun and Node adapters (`5a872eda`).
58
+ - **Route assets isolation** — Route-level assets are now isolated per-request, hardening dependency processing (`3fd76a12`).
59
+ - **Shared matcher error constants** — Matcher error strings are now constants shared across test and source (`ff4db106`).
60
+ - **App registration & fetch pipeline** — App creation and request handling consolidated into a single unified pipeline (`86e20a3d`).
61
+ - **Adapter escape hatch surface** trimmed — Public adapter API is narrowed to reduce surface area (`1ec42c02`).
62
+
63
+ ### Bug Fixes
64
+
65
+ - Fixed invariant checks for route paths with improved error messaging in `AbstractApplicationAdapter` (`9c2a6242`).
66
+ - Fixed dependency import name extraction in `extractEcopagesVirtualImports` (`39bbc472`).
67
+ - Removed an invalid npm export entry that pointed to a non-existent `utils/ecopages-url-resolver` declaration target.
68
+
69
+ ### Tests
70
+
71
+ - Added node static content server test coverage (`435dc250`).
72
+ - Strengthened HTML transformer mode matrix coverage (`286c1253`).
73
+ - Aligned integration and dependency processing tests to new orchestration model (`7cc73316`).
74
+ - Added `EsbuildBuildAdapter` test suite with 500+ lines (`build-adapter.test.ts`).
75
+ - Added `file-route-middleware-pipeline` tests.
76
+
77
+ ### Documentation
78
+
79
+ - Updated rendering graph documentation to cover extracted rendering services (`8bfcfd21`).
80
+ - Refreshed server handler and module dependency guidance (`3494f44d`).
81
+
82
+ ---
83
+
84
+ ## Migration Notes
85
+
86
+ - **`createApp`** is now the recommended entrypoint (previously `EcopagesApp`). Import from `@ecopages/core`.
87
+ - **`defineApiHandler`** signature is unchanged but the handler context object now carries explicit runtime-agnostic types. No breaking changes for existing handlers.
88
+ - Bun adapter still works as before; the new Node adapter is additive.
89
+ - The old explicit `renderingMode` config option has been removed — full orchestration is always active.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-present Andrea Zanenghi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # Ecopages
2
+
3
+ Ecopages is a static site generator designed with the goal of simplifying the process of creating websites. It is suitable for a range of projects, from blogs to portfolios, emphasizing ease of use and flexibility.
4
+
5
+ This project is built on a commitment to clarity and simplicity in web development, utilizing modern web technologies without obscuring the process with unnecessary complexity.
6
+
7
+ Ecopages relies on a minimal set of dependencies, carefully chosen to support its core functionality.
8
+
9
+ Ecopages is built on the [Bun](https://bun.sh/) runtime, primarily utilizing [Kita](https://kitajs.org/html/) and [Mdx](https://mdxjs.com/) for rendering. Additionally, it supports [Lit Elements](https://lit.dev/) and offers experimental integration with [React](https://react.dev/). This setup allows for the extension of the platform with custom rendering functions, providing flexibility to cater to the specific needs of each project. The integrations are designed to be extensible, with no limit to the customization and expansion possibilities.
10
+
11
+ For styling, [Tailwind CSS](https://tailwindcss.com/) and [PostCSS](https://postcss.org/) have been integrated. Notably, we recommend using `css` stylesheets and `@apply` directives with Tailwind CSS, diverging from its usual inline styling approach to better suit the structure of Ecopages.
12
+
13
+ As a project in its early stages, Ecopages is continuously evolving. Users may encounter limitations or areas in need of refinement. We welcome feedback and issue reports via our [GitHub repository](https://github.com/ecopages/ecopages).
14
+
15
+ ## Install
16
+
17
+ ```bash
18
+ bunx jsr add @ecopages/core
19
+ ```
20
+
21
+ ## Portable imports first
22
+
23
+ Use the root package exports for normal Ecopages authoring:
24
+
25
+ ```ts
26
+ import { EcopagesApp, defineApiHandler, defineGroupHandler } from '@ecopages/core';
27
+ ```
28
+
29
+ Use runtime-specific subpaths only as advanced escape hatches when you explicitly need Bun- or Node-native APIs:
30
+
31
+ - `@ecopages/core/bun`
32
+ - `@ecopages/core/node`
package/package.json ADDED
@@ -0,0 +1,279 @@
1
+ {
2
+ "name": "@ecopages/core",
3
+ "version": "0.2.0-alpha.1",
4
+ "description": "Core package for Ecopages",
5
+ "keywords": [
6
+ "ecopages",
7
+ "core",
8
+ "ssg"
9
+ ],
10
+ "license": "MIT",
11
+ "main": "./src/index.js",
12
+ "type": "module",
13
+ "sideEffects": false,
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/ecopages/ecopages.git",
17
+ "directory": "packages/core"
18
+ },
19
+ "dependencies": {
20
+ "@ecopages/file-system": "0.2.0-alpha.1",
21
+ "@ecopages/logger": "latest",
22
+ "@ecopages/scripts-injector": "^0.1.3",
23
+ "@worker-tools/html-rewriter": "0.1.0-pre.19",
24
+ "chokidar": "^4.0.3",
25
+ "esbuild": "^0.27.3",
26
+ "ghtml": "^4.0.2",
27
+ "oxc-parser": "^0.110.0",
28
+ "ws": "^8.18.0"
29
+ },
30
+ "exports": {
31
+ ".": {
32
+ "browser": "./src/index.browser.js",
33
+ "import": "./src/index.js",
34
+ "types": "./src/index.d.ts",
35
+ "default": "./src/index.js"
36
+ },
37
+ "./create-app": {
38
+ "types": "./src/create-app.d.ts",
39
+ "default": "./src/create-app.js"
40
+ },
41
+ "./route-renderer/integration-renderer": {
42
+ "types": "./src/route-renderer/integration-renderer.d.ts",
43
+ "default": "./src/route-renderer/integration-renderer.js"
44
+ },
45
+ "./errors/locals-access-error": {
46
+ "types": "./src/errors/locals-access-error.d.ts",
47
+ "default": "./src/errors/locals-access-error.js"
48
+ },
49
+ "./eco": {
50
+ "types": "./src/eco/eco.d.ts",
51
+ "default": "./src/eco/eco.js"
52
+ },
53
+ "./declarations": {
54
+ "types": "./src/declarations.d.ts"
55
+ },
56
+ "./env": {
57
+ "types": "./src/env.d.ts"
58
+ },
59
+ "./config-builder": {
60
+ "types": "./src/config/config-builder.d.ts",
61
+ "default": "./src/config/config-builder.js"
62
+ },
63
+ "./constants": {
64
+ "types": "./src/constants.d.ts",
65
+ "default": "./src/constants.js"
66
+ },
67
+ "./bun": {
68
+ "types": "./src/adapters/bun/index.d.ts",
69
+ "default": "./src/adapters/bun/index.js"
70
+ },
71
+ "./bun/create-app": {
72
+ "types": "./src/adapters/bun/create-app.d.ts",
73
+ "default": "./src/adapters/bun/create-app.js"
74
+ },
75
+ "./bun/define-api-handler": {
76
+ "types": "./src/adapters/bun/define-api-handler.d.ts",
77
+ "default": "./src/adapters/bun/define-api-handler.js"
78
+ },
79
+ "./hmr/hmr-strategy": {
80
+ "types": "./src/hmr/hmr-strategy.d.ts",
81
+ "default": "./src/hmr/hmr-strategy.js"
82
+ },
83
+ "./internal-types": {
84
+ "types": "./src/internal-types.d.ts"
85
+ },
86
+ "./services/asset-processing-service": {
87
+ "types": "./src/services/asset-processing-service/index.d.ts",
88
+ "default": "./src/services/asset-processing-service/index.js"
89
+ },
90
+ "./utils/deep-merge": {
91
+ "types": "./src/utils/deep-merge.d.ts",
92
+ "default": "./src/utils/deep-merge.js"
93
+ },
94
+ "./utils/invariant": {
95
+ "types": "./src/utils/invariant.d.ts",
96
+ "default": "./src/utils/invariant.js"
97
+ },
98
+ "./utils/parse-cli-args": {
99
+ "types": "./src/utils/parse-cli-args.d.ts",
100
+ "default": "./src/utils/parse-cli-args.js"
101
+ },
102
+ "./plugins/processor": {
103
+ "types": "./src/plugins/processor.d.ts",
104
+ "default": "./src/plugins/processor.js"
105
+ },
106
+ "./plugins/integration-plugin": {
107
+ "types": "./src/plugins/integration-plugin.d.ts",
108
+ "default": "./src/plugins/integration-plugin.js"
109
+ },
110
+ "./build/build-types": {
111
+ "types": "./src/build/build-types.d.ts",
112
+ "default": "./src/build/build-types.js"
113
+ },
114
+ "./build/build-adapter": {
115
+ "types": "./src/build/build-adapter.d.ts",
116
+ "default": "./src/build/build-adapter.js"
117
+ },
118
+ "./adapters/bun/client-bridge": {
119
+ "types": "./src/adapters/bun/client-bridge.d.ts",
120
+ "default": "./src/adapters/bun/client-bridge.js"
121
+ },
122
+ "./node": {
123
+ "types": "./src/adapters/node/index.d.ts",
124
+ "default": "./src/adapters/node/index.js"
125
+ },
126
+ "./node/server-adapter": {
127
+ "types": "./src/adapters/node/server-adapter.d.ts",
128
+ "default": "./src/adapters/node/server-adapter.js"
129
+ },
130
+ "./node/create-app": {
131
+ "types": "./src/adapters/node/create-app.d.ts",
132
+ "default": "./src/adapters/node/create-app.js"
133
+ },
134
+ "./html": {
135
+ "import": "./src/utils/html.js",
136
+ "default": "./src/utils/html.js",
137
+ "types": "./src/utils/html.d.ts"
138
+ },
139
+ "./css": {
140
+ "import": "./src/utils/css.js",
141
+ "default": "./src/utils/css.js",
142
+ "types": "./src/utils/css.d.ts"
143
+ },
144
+ "./hash": {
145
+ "import": "./src/utils/hash.js",
146
+ "default": "./src/utils/hash.js",
147
+ "types": "./src/utils/hash.d.ts"
148
+ },
149
+ "./errors": {
150
+ "types": "./src/errors/index.d.ts",
151
+ "default": "./src/errors/index.js"
152
+ },
153
+ "./integrations/ghtml": {
154
+ "types": "./src/integrations/ghtml/ghtml.plugin.d.ts",
155
+ "default": "./src/integrations/ghtml/ghtml.plugin.js"
156
+ },
157
+ "./create-app.ts": {
158
+ "types": "./src/create-app.d.ts",
159
+ "default": "./src/create-app.js"
160
+ },
161
+ "./route-renderer/integration-renderer.ts": {
162
+ "types": "./src/route-renderer/integration-renderer.d.ts",
163
+ "default": "./src/route-renderer/integration-renderer.js"
164
+ },
165
+ "./errors/locals-access-error.ts": {
166
+ "types": "./src/errors/locals-access-error.d.ts",
167
+ "default": "./src/errors/locals-access-error.js"
168
+ },
169
+ "./eco.ts": {
170
+ "types": "./src/eco/eco.d.ts",
171
+ "default": "./src/eco/eco.js"
172
+ },
173
+ "./declarations.ts": {
174
+ "types": "./src/declarations.d.ts"
175
+ },
176
+ "./env.ts": {
177
+ "types": "./src/env.d.ts"
178
+ },
179
+ "./config-builder.ts": {
180
+ "types": "./src/config/config-builder.d.ts",
181
+ "default": "./src/config/config-builder.js"
182
+ },
183
+ "./constants.ts": {
184
+ "types": "./src/constants.d.ts",
185
+ "default": "./src/constants.js"
186
+ },
187
+ "./bun.ts": {
188
+ "types": "./src/adapters/bun/index.d.ts",
189
+ "default": "./src/adapters/bun/index.js"
190
+ },
191
+ "./bun/create-app.ts": {
192
+ "types": "./src/adapters/bun/create-app.d.ts",
193
+ "default": "./src/adapters/bun/create-app.js"
194
+ },
195
+ "./bun/define-api-handler.ts": {
196
+ "types": "./src/adapters/bun/define-api-handler.d.ts",
197
+ "default": "./src/adapters/bun/define-api-handler.js"
198
+ },
199
+ "./hmr/hmr-strategy.ts": {
200
+ "types": "./src/hmr/hmr-strategy.d.ts",
201
+ "default": "./src/hmr/hmr-strategy.js"
202
+ },
203
+ "./internal-types.ts": {
204
+ "types": "./src/internal-types.d.ts"
205
+ },
206
+ "./services/asset-processing-service.ts": {
207
+ "types": "./src/services/asset-processing-service/index.d.ts",
208
+ "default": "./src/services/asset-processing-service/index.js"
209
+ },
210
+ "./utils/deep-merge.ts": {
211
+ "types": "./src/utils/deep-merge.d.ts",
212
+ "default": "./src/utils/deep-merge.js"
213
+ },
214
+ "./utils/invariant.ts": {
215
+ "types": "./src/utils/invariant.d.ts",
216
+ "default": "./src/utils/invariant.js"
217
+ },
218
+ "./utils/parse-cli-args.ts": {
219
+ "types": "./src/utils/parse-cli-args.d.ts",
220
+ "default": "./src/utils/parse-cli-args.js"
221
+ },
222
+ "./plugins/processor.ts": {
223
+ "types": "./src/plugins/processor.d.ts",
224
+ "default": "./src/plugins/processor.js"
225
+ },
226
+ "./plugins/integration-plugin.ts": {
227
+ "types": "./src/plugins/integration-plugin.d.ts",
228
+ "default": "./src/plugins/integration-plugin.js"
229
+ },
230
+ "./build/build-types.ts": {
231
+ "types": "./src/build/build-types.d.ts",
232
+ "default": "./src/build/build-types.js"
233
+ },
234
+ "./build/build-adapter.ts": {
235
+ "types": "./src/build/build-adapter.d.ts",
236
+ "default": "./src/build/build-adapter.js"
237
+ },
238
+ "./adapters/bun/client-bridge.ts": {
239
+ "types": "./src/adapters/bun/client-bridge.d.ts",
240
+ "default": "./src/adapters/bun/client-bridge.js"
241
+ },
242
+ "./node.ts": {
243
+ "types": "./src/adapters/node/index.d.ts",
244
+ "default": "./src/adapters/node/index.js"
245
+ },
246
+ "./node/server-adapter.ts": {
247
+ "types": "./src/adapters/node/server-adapter.d.ts",
248
+ "default": "./src/adapters/node/server-adapter.js"
249
+ },
250
+ "./node/create-app.ts": {
251
+ "types": "./src/adapters/node/create-app.d.ts",
252
+ "default": "./src/adapters/node/create-app.js"
253
+ },
254
+ "./html.ts": {
255
+ "import": "./src/utils/html.js",
256
+ "default": "./src/utils/html.js",
257
+ "types": "./src/utils/html.d.ts"
258
+ },
259
+ "./css.ts": {
260
+ "import": "./src/utils/css.js",
261
+ "default": "./src/utils/css.js",
262
+ "types": "./src/utils/css.d.ts"
263
+ },
264
+ "./hash.ts": {
265
+ "import": "./src/utils/hash.js",
266
+ "default": "./src/utils/hash.js",
267
+ "types": "./src/utils/hash.d.ts"
268
+ },
269
+ "./errors.ts": {
270
+ "types": "./src/errors/index.d.ts",
271
+ "default": "./src/errors/index.js"
272
+ },
273
+ "./integrations/ghtml.ts": {
274
+ "types": "./src/integrations/ghtml/ghtml.plugin.d.ts",
275
+ "default": "./src/integrations/ghtml/ghtml.plugin.js"
276
+ }
277
+ },
278
+ "types": "./src/index.d.ts"
279
+ }
@@ -0,0 +1,168 @@
1
+ /**
2
+ * This file defines the abstract class for application adapters in EcoPages.
3
+ * It provides a common interface for different runtimes (e.g., Node.js, Deno) to implement.
4
+ * The class includes methods for handling HTTP requests and managing application state.
5
+ * It also includes a method for parsing command-line arguments.
6
+ *
7
+ * @module ApplicationAdapter
8
+ */
9
+ import type { EcoPagesAppConfig } from '../../internal-types.js';
10
+ import type { ApiHandler, ApiHandlerContext, ErrorHandler, Middleware, RouteOptions, StaticRoute, ViewLoader } from '../../public-types.js';
11
+ import { type ReturnParseCliArgs } from '../../utils/parse-cli-args.js';
12
+ /**
13
+ * Configuration options for application adapters
14
+ */
15
+ export interface ApplicationAdapterOptions {
16
+ appConfig: EcoPagesAppConfig;
17
+ serverOptions?: Record<string, any>;
18
+ /**
19
+ * Options for clearing the output directory before starting the server
20
+ * @default false
21
+ */
22
+ clearOutput?: boolean;
23
+ }
24
+ /**
25
+ * Common interface for application adapters
26
+ */
27
+ export interface ApplicationAdapter<T = any> {
28
+ start(): Promise<T | void>;
29
+ }
30
+ /**
31
+ * Handler function type for route handlers
32
+ */
33
+ export type RouteHandler<TRequest extends Request = Request, TServer = any, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>> = (context: TContext) => Promise<Response> | Response;
34
+ export type RouteGroupDefinition<TRequest extends Request = Request, TServer = any> = {
35
+ prefix: string;
36
+ middleware?: readonly Middleware<TRequest, TServer, any>[];
37
+ routes: readonly ApiHandler<string, TRequest, TServer>[];
38
+ };
39
+ /**
40
+ * Abstract base class for application adapters across different runtimes
41
+ */
42
+ export declare abstract class AbstractApplicationAdapter<TOptions extends ApplicationAdapterOptions = ApplicationAdapterOptions, TServer = any, TRequest extends Request = any> implements ApplicationAdapter<TServer> {
43
+ protected appConfig: EcoPagesAppConfig;
44
+ protected serverOptions: Record<string, any>;
45
+ protected cliArgs: ReturnParseCliArgs;
46
+ protected apiHandlers: ApiHandler[];
47
+ protected staticRoutes: StaticRoute[];
48
+ protected errorHandler?: ErrorHandler;
49
+ constructor(options: TOptions);
50
+ private clearDistFolder;
51
+ /**
52
+ * Register a GET route handler.
53
+ *
54
+ * Use verb methods for inline route definitions.
55
+ * For dynamic HTTP method registration, use `route(...)`.
56
+ */
57
+ abstract get<P extends string, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>>(path: P, handler: RouteHandler<TRequest, TServer, TContext>, options?: RouteOptions<TRequest, TServer, TContext>): this;
58
+ /**
59
+ * Register a POST route handler
60
+ */
61
+ abstract post<P extends string, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>>(path: P, handler: RouteHandler<TRequest, TServer, TContext>, options?: RouteOptions<TRequest, TServer, TContext>): this;
62
+ /**
63
+ * Register a PUT route handler
64
+ */
65
+ abstract put<P extends string, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>>(path: P, handler: RouteHandler<TRequest, TServer, TContext>, options?: RouteOptions<TRequest, TServer, TContext>): this;
66
+ /**
67
+ * Register a DELETE route handler
68
+ */
69
+ abstract delete<P extends string, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>>(path: P, handler: RouteHandler<TRequest, TServer, TContext>, options?: RouteOptions<TRequest, TServer, TContext>): this;
70
+ /**
71
+ * Register a PATCH route handler
72
+ */
73
+ abstract patch<P extends string, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>>(path: P, handler: RouteHandler<TRequest, TServer, TContext>, options?: RouteOptions<TRequest, TServer, TContext>): this;
74
+ /**
75
+ * Register an OPTIONS route handler
76
+ */
77
+ abstract options<P extends string, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>>(path: P, handler: RouteHandler<TRequest, TServer, TContext>, options?: RouteOptions<TRequest, TServer, TContext>): this;
78
+ /**
79
+ * Register a HEAD route handler
80
+ */
81
+ abstract head<P extends string, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>>(path: P, handler: RouteHandler<TRequest, TServer, TContext>, options?: RouteOptions<TRequest, TServer, TContext>): this;
82
+ /**
83
+ * Register a route with an explicit HTTP method.
84
+ *
85
+ * This is useful when the method is determined programmatically, or when
86
+ * registering a pre-built route declaration object by forwarding its
87
+ * `path`, `method`, and `handler` fields.
88
+ */
89
+ abstract route<P extends string>(path: P, method: ApiHandler['method'], handler: RouteHandler<TRequest, TServer>, options?: RouteOptions<TRequest, TServer>): this;
90
+ /**
91
+ * Register a pre-built API handler declaration.
92
+ */
93
+ abstract add(handler: ApiHandler<string, TRequest, TServer>): this;
94
+ /**
95
+ * Internal method to add route handlers to the API handlers array
96
+ */
97
+ protected addRouteHandler<P extends string, TSpecRequest extends TRequest = TRequest, TSpecServer extends TServer = TServer, TContext extends ApiHandlerContext<TSpecRequest, TSpecServer> = ApiHandlerContext<TSpecRequest, TSpecServer>>(path: P, method: ApiHandler['method'], handler: RouteHandler<TSpecRequest, TSpecServer, TContext>, middleware?: Middleware<TSpecRequest, TSpecServer, TContext>[], schema?: ApiHandler['schema']): this;
98
+ /**
99
+ * Create a route group with shared prefix and middleware.
100
+ * Routes defined within the group inherit the prefix and middleware.
101
+ *
102
+ * Each adapter implements this with its own builder type to support
103
+ * runtime-specific features (e.g., Bun's path parameter inference).
104
+ * Implementations may also support passing a pre-built group object.
105
+ *
106
+ * @param prefix - URL prefix for all routes in the group (e.g., '/api/v1')
107
+ * @param callback - Function that receives a builder to define routes
108
+ * @param options - Optional group-level middleware
109
+ */
110
+ abstract group(prefix: string, callback: (builder: unknown) => void, options?: {
111
+ middleware?: readonly Middleware<TRequest, TServer, any>[];
112
+ }): this;
113
+ abstract group(group: RouteGroupDefinition<TRequest, TServer>): this;
114
+ /**
115
+ * Get all registered API handlers
116
+ */
117
+ getApiHandlers(): ApiHandler[];
118
+ /**
119
+ * Register a view for static generation at build time.
120
+ * The view must have staticPaths defined for dynamic routes.
121
+ *
122
+ * Uses a loader function to enable HMR in development.
123
+ *
124
+ * @param path - URL path pattern (e.g., '/posts/:slug')
125
+ * @param loader - A function that dynamically imports the eco.page view module
126
+ * @example
127
+ * ```typescript
128
+ * app.static('/login', () => import('./src/views/login.kita'))
129
+ * app.static('/posts/:slug', () => import('./src/views/post-view.kita'))
130
+ * ```
131
+ */
132
+ static<P>(path: string, loader: ViewLoader<P>): this;
133
+ /**
134
+ * Get all registered static routes
135
+ */
136
+ getStaticRoutes(): StaticRoute[];
137
+ /**
138
+ * Register a global error handler for all routes.
139
+ * Useful for logging, monitoring integration, and custom error formatting.
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * app.onError(async (error, ctx) => {
144
+ * logger.error(error);
145
+ * return ctx.response.status(500).json({ error: 'Something went wrong' });
146
+ * });
147
+ * ```
148
+ */
149
+ onError(handler: ErrorHandler<TRequest, TServer>): this;
150
+ /**
151
+ * Get the registered error handler
152
+ */
153
+ getErrorHandler(): ErrorHandler | undefined;
154
+ /**
155
+ * Initialize the server adapter based on the runtime
156
+ */
157
+ protected abstract initializeServerAdapter(): Promise<any>;
158
+ /**
159
+ * Start the application server
160
+ */
161
+ abstract start(): Promise<TServer | void>;
162
+ /**
163
+ * Handles a standard Web request without requiring a bound network server.
164
+ * This is the primary interoperability surface for embedding Ecopages inside
165
+ * other runtimes and frameworks.
166
+ */
167
+ abstract fetch(request: TRequest): Promise<Response>;
168
+ }