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

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 (418) hide show
  1. package/README.md +213 -12
  2. package/package.json +100 -188
  3. package/src/adapters/README.md +39 -0
  4. package/src/adapters/bun/hmr-manager.test.ts +267 -0
  5. package/src/adapters/bun/hmr-manager.ts +180 -47
  6. package/src/adapters/bun/index.ts +1 -2
  7. package/src/adapters/bun/server-adapter.ts +41 -34
  8. package/src/adapters/bun/server-lifecycle.ts +40 -70
  9. package/src/adapters/index.ts +1 -1
  10. package/src/adapters/node/bootstrap-dependency-resolver.test.ts +282 -0
  11. package/src/adapters/node/bootstrap-dependency-resolver.ts +301 -0
  12. package/src/adapters/node/index.ts +7 -0
  13. package/src/adapters/node/node-client-bridge.test.ts +198 -0
  14. package/src/adapters/node/node-hmr-manager.test.ts +322 -0
  15. package/src/adapters/node/node-hmr-manager.ts +207 -97
  16. package/src/adapters/node/runtime-adapter.test.ts +868 -0
  17. package/src/adapters/node/runtime-adapter.ts +439 -0
  18. package/src/adapters/node/server-adapter.ts +31 -104
  19. package/src/adapters/node/static-content-server.test.ts +60 -0
  20. package/src/adapters/node/static-content-server.ts +36 -0
  21. package/src/adapters/node/write-runtime-manifest.ts +38 -0
  22. package/src/adapters/shared/api-response.test.ts +97 -0
  23. package/src/{define-api-handler.ts → adapters/shared/define-api-handler.ts} +1 -1
  24. package/src/adapters/shared/explicit-static-route-matcher.test.ts +381 -0
  25. package/src/adapters/shared/explicit-static-route-matcher.ts +7 -1
  26. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +90 -0
  27. package/src/adapters/shared/file-route-middleware-pipeline.ts +6 -2
  28. package/src/adapters/shared/fs-server-response-factory.test.ts +187 -0
  29. package/src/adapters/shared/fs-server-response-matcher.test.ts +286 -0
  30. package/src/adapters/shared/fs-server-response-matcher.ts +17 -10
  31. package/src/adapters/shared/hmr-entrypoint-registrar.ts +149 -0
  32. package/src/adapters/shared/hmr-html-response.ts +52 -0
  33. package/src/adapters/shared/hmr-manager.contract.test.ts +196 -0
  34. package/src/adapters/shared/hmr-manager.dispatch.test.ts +220 -0
  35. package/src/adapters/shared/render-context.test.ts +146 -0
  36. package/src/adapters/shared/render-context.ts +21 -6
  37. package/src/adapters/shared/runtime-bootstrap.ts +79 -0
  38. package/src/adapters/shared/server-adapter.test.ts +77 -0
  39. package/src/adapters/shared/server-adapter.ts +51 -4
  40. package/src/adapters/shared/server-route-handler.test.ts +110 -0
  41. package/src/adapters/shared/server-route-handler.ts +5 -18
  42. package/src/adapters/shared/server-static-builder.test.ts +316 -0
  43. package/src/adapters/shared/server-static-builder.ts +92 -8
  44. package/src/build/README.md +101 -0
  45. package/src/build/build-adapter-serialization.test.ts +268 -0
  46. package/src/build/build-adapter.test.ts +815 -0
  47. package/src/build/build-adapter.ts +234 -6
  48. package/src/build/build-manifest.ts +54 -0
  49. package/src/build/dev-build-coordinator.ts +221 -0
  50. package/src/build/esbuild-build-adapter.ts +132 -84
  51. package/src/build/runtime-build-executor.ts +34 -0
  52. package/src/build/runtime-specifier-alias-plugin.test.ts +43 -0
  53. package/src/build/runtime-specifier-alias-plugin.ts +58 -0
  54. package/src/config/README.md +33 -0
  55. package/src/config/config-builder.test.ts +410 -0
  56. package/src/config/config-builder.ts +281 -49
  57. package/src/constants.ts +15 -0
  58. package/src/declarations.d.ts +18 -13
  59. package/src/eco/README.md +70 -16
  60. package/src/eco/component-render-context.ts +39 -17
  61. package/src/eco/eco.test.ts +678 -0
  62. package/src/eco/eco.ts +29 -8
  63. package/src/eco/eco.types.ts +20 -1
  64. package/src/eco/eco.utils.test.ts +124 -0
  65. package/src/eco/global-injector-map.test.ts +42 -0
  66. package/src/eco/lazy-injector-map.test.ts +66 -0
  67. package/src/eco/module-dependencies.test.ts +30 -0
  68. package/src/errors/http-error.test.ts +134 -0
  69. package/src/global/utils.test.ts +12 -0
  70. package/src/hmr/README.md +26 -0
  71. 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
  72. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  73. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  74. package/src/hmr/client/hmr-runtime.ts +38 -7
  75. package/src/hmr/hmr-strategy.test.ts +124 -0
  76. package/src/hmr/hmr.postcss.test.e2e.ts +41 -0
  77. package/src/hmr/hmr.test.e2e.ts +29 -38
  78. package/src/hmr/strategies/js-hmr-strategy.test.ts +335 -0
  79. package/src/hmr/strategies/js-hmr-strategy.ts +71 -78
  80. package/src/index.ts +1 -1
  81. package/src/integrations/ghtml/ghtml-renderer.test.ts +63 -0
  82. package/src/integrations/ghtml/ghtml-renderer.ts +4 -1
  83. package/src/internal-types.ts +39 -19
  84. package/src/plugins/README.md +34 -0
  85. package/src/plugins/alias-resolver-plugin.test.ts +41 -0
  86. package/src/plugins/alias-resolver-plugin.ts +21 -3
  87. package/src/plugins/eco-component-meta-plugin.test.ts +380 -0
  88. package/src/plugins/eco-component-meta-plugin.ts +10 -3
  89. package/src/plugins/integration-plugin.test.ts +111 -0
  90. package/src/plugins/integration-plugin.ts +45 -3
  91. package/src/plugins/processor.test.ts +148 -0
  92. package/src/plugins/processor.ts +22 -2
  93. package/src/plugins/runtime-capability.ts +14 -0
  94. package/src/public-types.ts +73 -11
  95. package/src/route-renderer/GRAPH.md +16 -20
  96. package/src/route-renderer/README.md +8 -21
  97. package/src/route-renderer/component-graph/component-graph-executor.test.ts +41 -0
  98. package/src/route-renderer/component-graph/component-graph.test.ts +63 -0
  99. package/src/route-renderer/component-graph/component-marker.test.ts +73 -0
  100. package/src/route-renderer/component-graph/component-reference.ts +29 -0
  101. package/src/route-renderer/component-graph/marker-graph-resolver.test.ts +135 -0
  102. package/src/route-renderer/{marker-graph-resolver.ts → component-graph/marker-graph-resolver.ts} +11 -9
  103. package/src/route-renderer/orchestration/integration-renderer.test.ts +936 -0
  104. package/src/route-renderer/{integration-renderer.ts → orchestration/integration-renderer.ts} +113 -19
  105. package/src/route-renderer/orchestration/render-execution.service.test.ts +97 -0
  106. package/src/route-renderer/{render-execution.service.ts → orchestration/render-execution.service.ts} +109 -37
  107. package/src/route-renderer/orchestration/render-preparation.service.test.ts +235 -0
  108. package/src/route-renderer/{render-preparation.service.ts → orchestration/render-preparation.service.ts} +127 -9
  109. package/src/route-renderer/page-loading/dependency-resolver.test.ts +345 -0
  110. package/src/route-renderer/{dependency-resolver.ts → page-loading/dependency-resolver.ts} +28 -12
  111. package/src/route-renderer/page-loading/page-module-loader.test.ts +96 -0
  112. package/src/route-renderer/{page-module-loader.ts → page-loading/page-module-loader.ts} +49 -21
  113. package/src/route-renderer/route-renderer.ts +36 -1
  114. package/src/router/README.md +26 -0
  115. package/src/router/client/link-intent.d.ts +53 -0
  116. package/src/router/client/link-intent.test.browser.ts +51 -0
  117. package/src/router/client/link-intent.ts +92 -0
  118. package/src/router/client/navigation-coordinator.test.ts +237 -0
  119. package/src/router/client/navigation-coordinator.ts +433 -0
  120. package/src/router/server/fs-router-scanner.test.ts +83 -0
  121. package/src/router/{fs-router-scanner.ts → server/fs-router-scanner.ts} +12 -10
  122. package/src/router/server/fs-router.test.ts +214 -0
  123. package/src/router/{fs-router.ts → server/fs-router.ts} +2 -2
  124. package/src/services/README.md +29 -0
  125. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +385 -0
  126. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.ts +101 -6
  127. package/src/services/assets/asset-processing-service/asset.factory.test.ts +63 -0
  128. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.ts +2 -2
  129. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.ts +2 -1
  130. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +72 -0
  131. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +95 -0
  132. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +67 -0
  133. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +78 -0
  134. package/src/services/{asset-processing-service → assets/asset-processing-service}/index.ts +2 -0
  135. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.ts +1 -1
  136. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +59 -0
  137. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.ts +11 -5
  138. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.ts +17 -27
  139. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +286 -0
  140. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.ts +3 -3
  141. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +227 -0
  142. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.ts +5 -4
  143. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +199 -0
  144. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.ts +4 -1
  145. package/src/services/assets/browser-bundle.service.test.ts +36 -0
  146. package/src/services/assets/browser-bundle.service.ts +53 -0
  147. package/src/services/cache/index.ts +3 -3
  148. package/src/services/cache/memory-cache-store.test.ts +225 -0
  149. package/src/services/cache/memory-cache-store.ts +1 -1
  150. package/src/services/cache/page-cache-service.test.ts +175 -0
  151. package/src/services/cache/page-cache-service.ts +3 -3
  152. package/src/services/cache/page-request-cache-coordinator.service.test.ts +79 -0
  153. package/src/services/{page-request-cache-coordinator.service.ts → cache/page-request-cache-coordinator.service.ts} +9 -6
  154. package/src/services/html/html-rewriter-provider.service.test.ts +183 -0
  155. package/src/services/html/html-rewriter-provider.service.ts +103 -0
  156. package/src/services/html/html-transformer.service.test.ts +378 -0
  157. package/src/services/html/html-transformer.service.ts +279 -0
  158. package/src/services/invalidation/development-invalidation.service.test.ts +77 -0
  159. package/src/services/invalidation/development-invalidation.service.ts +261 -0
  160. package/src/services/module-loading/app-server-module-transpiler.service.ts +52 -0
  161. package/src/services/module-loading/page-module-import.service.test.ts +253 -0
  162. package/src/services/module-loading/page-module-import.service.ts +200 -0
  163. package/src/services/module-loading/server-loader.service.test.ts +161 -0
  164. package/src/services/module-loading/server-loader.service.ts +130 -0
  165. package/src/services/module-loading/server-module-transpiler.service.test.ts +115 -0
  166. package/src/services/module-loading/server-module-transpiler.service.ts +105 -0
  167. package/src/services/runtime-manifest/node-runtime-manifest.service.test.ts +95 -0
  168. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +101 -0
  169. package/src/services/runtime-state/dev-graph.service.ts +217 -0
  170. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +136 -0
  171. package/src/services/runtime-state/runtime-specifier-registry.service.ts +96 -0
  172. package/src/services/runtime-state/server-invalidation-state.service.ts +68 -0
  173. package/src/services/validation/schema-validation-service.test.ts +223 -0
  174. package/src/services/{schema-validation-service.ts → validation/schema-validation-service.ts} +1 -1
  175. package/src/static-site-generator/README.md +26 -0
  176. package/src/static-site-generator/static-site-generator.test.ts +307 -0
  177. package/src/static-site-generator/static-site-generator.ts +109 -6
  178. package/src/utils/deep-merge.test.ts +114 -0
  179. package/src/utils/invariant.test.ts +22 -0
  180. package/src/utils/path-utils.test.ts +15 -0
  181. package/src/utils/resolve-work-dir.ts +45 -0
  182. package/src/utils/server-utils.test.ts +38 -0
  183. package/src/watchers/project-watcher.integration.test.ts +337 -0
  184. package/src/watchers/project-watcher.test-helpers.ts +1 -0
  185. package/src/watchers/project-watcher.test.ts +678 -0
  186. package/src/watchers/project-watcher.ts +49 -50
  187. package/CHANGELOG.md +0 -94
  188. package/src/adapters/abstract/application-adapter.d.ts +0 -168
  189. package/src/adapters/abstract/application-adapter.js +0 -109
  190. package/src/adapters/abstract/router-adapter.d.ts +0 -26
  191. package/src/adapters/abstract/router-adapter.js +0 -5
  192. package/src/adapters/abstract/server-adapter.d.ts +0 -69
  193. package/src/adapters/abstract/server-adapter.js +0 -15
  194. package/src/adapters/bun/client-bridge.d.ts +0 -34
  195. package/src/adapters/bun/client-bridge.js +0 -48
  196. package/src/adapters/bun/create-app.d.ts +0 -60
  197. package/src/adapters/bun/create-app.js +0 -117
  198. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  199. package/src/adapters/bun/define-api-handler.js +0 -15
  200. package/src/adapters/bun/define-api-handler.ts +0 -114
  201. package/src/adapters/bun/hmr-manager.d.ts +0 -79
  202. package/src/adapters/bun/hmr-manager.js +0 -222
  203. package/src/adapters/bun/index.d.ts +0 -3
  204. package/src/adapters/bun/index.js +0 -8
  205. package/src/adapters/bun/server-adapter.d.ts +0 -155
  206. package/src/adapters/bun/server-adapter.js +0 -368
  207. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  208. package/src/adapters/bun/server-lifecycle.js +0 -120
  209. package/src/adapters/index.d.ts +0 -6
  210. package/src/adapters/index.js +0 -14
  211. package/src/adapters/node/create-app.d.ts +0 -21
  212. package/src/adapters/node/create-app.js +0 -143
  213. package/src/adapters/node/index.d.ts +0 -4
  214. package/src/adapters/node/index.js +0 -8
  215. package/src/adapters/node/node-client-bridge.d.ts +0 -26
  216. package/src/adapters/node/node-client-bridge.js +0 -66
  217. package/src/adapters/node/node-hmr-manager.d.ts +0 -62
  218. package/src/adapters/node/node-hmr-manager.js +0 -221
  219. package/src/adapters/node/server-adapter.d.ts +0 -190
  220. package/src/adapters/node/server-adapter.js +0 -420
  221. package/src/adapters/node/static-content-server.d.ts +0 -24
  222. package/src/adapters/node/static-content-server.js +0 -166
  223. package/src/adapters/shared/api-response.d.ts +0 -52
  224. package/src/adapters/shared/api-response.js +0 -96
  225. package/src/adapters/shared/application-adapter.d.ts +0 -18
  226. package/src/adapters/shared/application-adapter.js +0 -90
  227. package/src/adapters/shared/explicit-static-route-matcher.d.ts +0 -38
  228. package/src/adapters/shared/explicit-static-route-matcher.js +0 -100
  229. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +0 -65
  230. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -98
  231. package/src/adapters/shared/fs-server-response-factory.d.ts +0 -19
  232. package/src/adapters/shared/fs-server-response-factory.js +0 -97
  233. package/src/adapters/shared/fs-server-response-matcher.d.ts +0 -71
  234. package/src/adapters/shared/fs-server-response-matcher.js +0 -155
  235. package/src/adapters/shared/render-context.d.ts +0 -14
  236. package/src/adapters/shared/render-context.js +0 -69
  237. package/src/adapters/shared/server-adapter.d.ts +0 -87
  238. package/src/adapters/shared/server-adapter.js +0 -353
  239. package/src/adapters/shared/server-route-handler.d.ts +0 -89
  240. package/src/adapters/shared/server-route-handler.js +0 -120
  241. package/src/adapters/shared/server-static-builder.d.ts +0 -38
  242. package/src/adapters/shared/server-static-builder.js +0 -46
  243. package/src/build/build-adapter.d.ts +0 -75
  244. package/src/build/build-adapter.js +0 -54
  245. package/src/build/build-types.d.ts +0 -57
  246. package/src/build/build-types.js +0 -0
  247. package/src/build/esbuild-build-adapter.d.ts +0 -69
  248. package/src/build/esbuild-build-adapter.js +0 -391
  249. package/src/config/config-builder.d.ts +0 -227
  250. package/src/config/config-builder.js +0 -392
  251. package/src/constants.d.ts +0 -32
  252. package/src/constants.js +0 -21
  253. package/src/create-app.d.ts +0 -17
  254. package/src/create-app.js +0 -66
  255. package/src/define-api-handler.d.ts +0 -25
  256. package/src/define-api-handler.js +0 -15
  257. package/src/dev/sc-server.d.ts +0 -30
  258. package/src/dev/sc-server.js +0 -111
  259. package/src/eco/component-render-context.d.ts +0 -105
  260. package/src/eco/component-render-context.js +0 -77
  261. package/src/eco/eco.d.ts +0 -9
  262. package/src/eco/eco.js +0 -110
  263. package/src/eco/eco.types.d.ts +0 -170
  264. package/src/eco/eco.types.js +0 -0
  265. package/src/eco/eco.utils.d.ts +0 -40
  266. package/src/eco/eco.utils.js +0 -40
  267. package/src/eco/global-injector-map.d.ts +0 -16
  268. package/src/eco/global-injector-map.js +0 -80
  269. package/src/eco/lazy-injector-map.d.ts +0 -8
  270. package/src/eco/lazy-injector-map.js +0 -70
  271. package/src/eco/module-dependencies.d.ts +0 -18
  272. package/src/eco/module-dependencies.js +0 -49
  273. package/src/errors/http-error.d.ts +0 -31
  274. package/src/errors/http-error.js +0 -50
  275. package/src/errors/index.d.ts +0 -2
  276. package/src/errors/index.js +0 -4
  277. package/src/errors/locals-access-error.d.ts +0 -4
  278. package/src/errors/locals-access-error.js +0 -9
  279. package/src/global/app-logger.d.ts +0 -2
  280. package/src/global/app-logger.js +0 -6
  281. package/src/hmr/client/hmr-runtime.d.ts +0 -10
  282. package/src/hmr/client/hmr-runtime.js +0 -86
  283. package/src/hmr/hmr-strategy.d.ts +0 -159
  284. package/src/hmr/hmr-strategy.js +0 -29
  285. package/src/hmr/hmr.test.e2e.d.ts +0 -1
  286. package/src/hmr/hmr.test.e2e.js +0 -50
  287. package/src/hmr/strategies/default-hmr-strategy.d.ts +0 -43
  288. package/src/hmr/strategies/default-hmr-strategy.js +0 -34
  289. package/src/hmr/strategies/js-hmr-strategy.d.ts +0 -136
  290. package/src/hmr/strategies/js-hmr-strategy.js +0 -192
  291. package/src/index.browser.d.ts +0 -3
  292. package/src/index.browser.js +0 -4
  293. package/src/index.d.ts +0 -5
  294. package/src/index.js +0 -10
  295. package/src/integrations/ghtml/ghtml-renderer.d.ts +0 -15
  296. package/src/integrations/ghtml/ghtml-renderer.js +0 -60
  297. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -20
  298. package/src/integrations/ghtml/ghtml.plugin.js +0 -21
  299. package/src/internal-types.d.ts +0 -200
  300. package/src/internal-types.js +0 -0
  301. package/src/plugins/alias-resolver-plugin.d.ts +0 -2
  302. package/src/plugins/alias-resolver-plugin.js +0 -39
  303. package/src/plugins/eco-component-meta-plugin.d.ts +0 -95
  304. package/src/plugins/eco-component-meta-plugin.js +0 -157
  305. package/src/plugins/integration-plugin.d.ts +0 -102
  306. package/src/plugins/integration-plugin.js +0 -100
  307. package/src/plugins/processor.d.ts +0 -82
  308. package/src/plugins/processor.js +0 -122
  309. package/src/public-types.d.ts +0 -1094
  310. package/src/public-types.js +0 -0
  311. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  312. package/src/route-renderer/component-graph-executor.js +0 -31
  313. package/src/route-renderer/component-graph.d.ts +0 -42
  314. package/src/route-renderer/component-graph.js +0 -72
  315. package/src/route-renderer/component-marker.d.ts +0 -52
  316. package/src/route-renderer/component-marker.js +0 -46
  317. package/src/route-renderer/dependency-resolver.d.ts +0 -24
  318. package/src/route-renderer/dependency-resolver.js +0 -428
  319. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  320. package/src/route-renderer/html-post-processing.service.js +0 -86
  321. package/src/route-renderer/html-post-processing.service.ts +0 -103
  322. package/src/route-renderer/integration-renderer.d.ts +0 -339
  323. package/src/route-renderer/integration-renderer.js +0 -526
  324. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  325. package/src/route-renderer/marker-graph-resolver.js +0 -93
  326. package/src/route-renderer/page-module-loader.d.ts +0 -61
  327. package/src/route-renderer/page-module-loader.js +0 -102
  328. package/src/route-renderer/render-execution.service.d.ts +0 -69
  329. package/src/route-renderer/render-execution.service.js +0 -91
  330. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  331. package/src/route-renderer/render-preparation.service.js +0 -243
  332. package/src/route-renderer/route-renderer.d.ts +0 -26
  333. package/src/route-renderer/route-renderer.js +0 -68
  334. package/src/router/fs-router-scanner.d.ts +0 -41
  335. package/src/router/fs-router-scanner.js +0 -155
  336. package/src/router/fs-router.d.ts +0 -26
  337. package/src/router/fs-router.js +0 -100
  338. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  339. package/src/services/asset-processing-service/asset-processing.service.js +0 -250
  340. package/src/services/asset-processing-service/asset.factory.d.ts +0 -17
  341. package/src/services/asset-processing-service/asset.factory.js +0 -82
  342. package/src/services/asset-processing-service/assets.types.d.ts +0 -88
  343. package/src/services/asset-processing-service/assets.types.js +0 -0
  344. package/src/services/asset-processing-service/index.d.ts +0 -3
  345. package/src/services/asset-processing-service/index.js +0 -3
  346. package/src/services/asset-processing-service/processor.interface.d.ts +0 -22
  347. package/src/services/asset-processing-service/processor.interface.js +0 -6
  348. package/src/services/asset-processing-service/processor.registry.d.ts +0 -8
  349. package/src/services/asset-processing-service/processor.registry.js +0 -15
  350. package/src/services/asset-processing-service/processors/base/base-processor.d.ts +0 -24
  351. package/src/services/asset-processing-service/processors/base/base-processor.js +0 -59
  352. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  353. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  354. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  355. package/src/services/asset-processing-service/processors/index.js +0 -5
  356. package/src/services/asset-processing-service/processors/script/content-script.processor.d.ts +0 -5
  357. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  358. package/src/services/asset-processing-service/processors/script/file-script.processor.d.ts +0 -8
  359. package/src/services/asset-processing-service/processors/script/file-script.processor.js +0 -76
  360. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  361. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  362. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -5
  363. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  364. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -9
  365. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +0 -63
  366. package/src/services/cache/cache.types.d.ts +0 -107
  367. package/src/services/cache/cache.types.js +0 -0
  368. package/src/services/cache/index.d.ts +0 -7
  369. package/src/services/cache/index.js +0 -7
  370. package/src/services/cache/memory-cache-store.d.ts +0 -42
  371. package/src/services/cache/memory-cache-store.js +0 -98
  372. package/src/services/cache/page-cache-service.d.ts +0 -70
  373. package/src/services/cache/page-cache-service.js +0 -152
  374. package/src/services/html-transformer.service.d.ts +0 -50
  375. package/src/services/html-transformer.service.js +0 -163
  376. package/src/services/html-transformer.service.ts +0 -217
  377. package/src/services/page-module-import.service.d.ts +0 -37
  378. package/src/services/page-module-import.service.js +0 -88
  379. package/src/services/page-module-import.service.ts +0 -129
  380. package/src/services/page-request-cache-coordinator.service.d.ts +0 -75
  381. package/src/services/page-request-cache-coordinator.service.js +0 -107
  382. package/src/services/schema-validation-service.d.ts +0 -122
  383. package/src/services/schema-validation-service.js +0 -101
  384. package/src/services/validation/standard-schema.types.d.ts +0 -65
  385. package/src/services/validation/standard-schema.types.js +0 -0
  386. package/src/static-site-generator/static-site-generator.d.ts +0 -57
  387. package/src/static-site-generator/static-site-generator.js +0 -272
  388. package/src/utils/css.d.ts +0 -1
  389. package/src/utils/css.js +0 -7
  390. package/src/utils/deep-merge.d.ts +0 -14
  391. package/src/utils/deep-merge.js +0 -32
  392. package/src/utils/hash.d.ts +0 -1
  393. package/src/utils/hash.js +0 -7
  394. package/src/utils/html.d.ts +0 -1
  395. package/src/utils/html.js +0 -4
  396. package/src/utils/invariant.d.ts +0 -5
  397. package/src/utils/invariant.js +0 -11
  398. package/src/utils/locals-utils.d.ts +0 -15
  399. package/src/utils/locals-utils.js +0 -24
  400. package/src/utils/parse-cli-args.d.ts +0 -24
  401. package/src/utils/parse-cli-args.js +0 -47
  402. package/src/utils/path-utils.module.d.ts +0 -5
  403. package/src/utils/path-utils.module.js +0 -14
  404. package/src/utils/runtime.d.ts +0 -11
  405. package/src/utils/runtime.js +0 -40
  406. package/src/utils/server-utils.module.d.ts +0 -19
  407. package/src/utils/server-utils.module.js +0 -56
  408. package/src/watchers/project-watcher.d.ts +0 -132
  409. package/src/watchers/project-watcher.js +0 -281
  410. package/src/watchers/project-watcher.test-helpers.d.ts +0 -4
  411. package/src/watchers/project-watcher.test-helpers.js +0 -51
  412. /package/src/route-renderer/{component-graph-executor.ts → component-graph/component-graph-executor.ts} +0 -0
  413. /package/src/route-renderer/{component-graph.ts → component-graph/component-graph.ts} +0 -0
  414. /package/src/route-renderer/{component-marker.ts → component-graph/component-marker.ts} +0 -0
  415. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.ts +0 -0
  416. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/index.ts +0 -0
  417. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.ts +0 -0
  418. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.ts +0 -0
@@ -4,6 +4,7 @@ import { fileSystem } from '@ecopages/file-system';
4
4
  import { appLogger } from '../global/app-logger.ts';
5
5
  import type { EcoPagesAppConfig, IHmrManager, IClientBridge } from '../internal-types.ts';
6
6
  import type { ProcessorWatchConfig, ProcessorWatchContext } from '../plugins/processor.ts';
7
+ import { DevelopmentInvalidationService } from '../services/invalidation/development-invalidation.service.ts';
7
8
 
8
9
  /**
9
10
  * Configuration options for the ProjectWatcher
@@ -48,6 +49,7 @@ export class ProjectWatcher {
48
49
  private refreshRouterRoutesCallback: () => void;
49
50
  private hmrManager: IHmrManager;
50
51
  private bridge: IClientBridge;
52
+ private readonly invalidationService: DevelopmentInvalidationService;
51
53
  private watcher: FSWatcher | null = null;
52
54
  private lastHandledChange = new Map<string, number>();
53
55
  private changeQueue: Promise<void> = Promise.resolve();
@@ -57,6 +59,7 @@ export class ProjectWatcher {
57
59
  this.refreshRouterRoutesCallback = refreshRouterRoutesCallback;
58
60
  this.hmrManager = hmrManager;
59
61
  this.bridge = bridge;
62
+ this.invalidationService = new DevelopmentInvalidationService(config);
60
63
  this.triggerRouterRefresh = this.triggerRouterRefresh.bind(this);
61
64
  this.handleError = this.handleError.bind(this);
62
65
  this.handleFileChange = this.handleFileChange.bind(this);
@@ -80,6 +83,14 @@ export class ProjectWatcher {
80
83
  }
81
84
  }
82
85
 
86
+ private isRouteSourceFile(filePath: string): boolean {
87
+ return this.invalidationService.isRouteSourceFile(filePath);
88
+ }
89
+
90
+ private isIncludeSourceFile(filePath: string): boolean {
91
+ return this.invalidationService.isIncludeSourceFile(filePath);
92
+ }
93
+
83
94
  /**
84
95
  * Handles public directory file changes by copying only the changed file.
85
96
  * @param filePath - Absolute path of the changed file
@@ -113,11 +124,12 @@ export class ProjectWatcher {
113
124
 
114
125
  /**
115
126
  * Handles file changes by uncaching modules, refreshing routes, and delegating appropriately.
116
- * Follows 4-rule priority:
127
+ * Follows 5-rule priority:
117
128
  * 0. Public directory match? -> copy file and reload
118
129
  * 1. additionalWatchPaths match? -> reload
119
- * 2. Processor-owned asset? -> processor already handled it via notification, skip HMR
120
- * 3. Otherwise -> HMR strategies
130
+ * 2. Include template source? -> reload after processor notifications
131
+ * 3. Processor-owned asset? -> processor already handled it via notification, skip HMR
132
+ * 4. Otherwise -> HMR strategies
121
133
  *
122
134
  * Processors that watch a file extension as a dependency (e.g. PostCSS watching
123
135
  * .tsx for Tailwind class scanning) are always notified first, but do not
@@ -138,30 +150,41 @@ export class ProjectWatcher {
138
150
  this.lastHandledChange.set(filePath, now);
139
151
 
140
152
  try {
141
- if (this.isPublicDirFile(filePath)) {
153
+ const plan = this.invalidationService.planFileChange(filePath);
154
+
155
+ if (plan.category === 'public-asset') {
142
156
  await this.handlePublicDirFileChange(filePath);
143
157
  return;
144
158
  }
145
159
 
146
160
  this.uncacheModules();
147
- const isPageFile = filePath.startsWith(this.appConfig.absolutePaths.pagesDir);
161
+ if (plan.invalidateServerModules) {
162
+ this.invalidationService.invalidateServerModules([filePath]);
163
+ }
148
164
 
149
- if (isPageFile) {
165
+ if (plan.refreshRoutes) {
150
166
  this.refreshRouterRoutesCallback();
151
167
  }
152
168
 
153
- if (this.matchesAdditionalWatchPaths(filePath)) {
169
+ if (plan.category === 'additional-watch') {
154
170
  this.bridge.reload();
155
171
  return;
156
172
  }
157
173
 
158
174
  await this.notifyProcessors(filePath, event);
159
175
 
160
- if (this.isHandledByProcessor(filePath)) {
176
+ if (plan.category === 'include-source') {
177
+ this.bridge.reload();
161
178
  return;
162
179
  }
163
180
 
164
- await this.hmrManager.handleFileChange(filePath);
181
+ if (plan.processorHandledAsset) {
182
+ return;
183
+ }
184
+
185
+ if (plan.delegateToHmr) {
186
+ await this.hmrManager.handleFileChange(filePath);
187
+ }
165
188
  } catch (error) {
166
189
  if (error instanceof Error) {
167
190
  this.bridge.error(error.message);
@@ -213,25 +236,14 @@ export class ProjectWatcher {
213
236
  * Checks if a file is in the public directory.
214
237
  */
215
238
  private isPublicDirFile(filePath: string): boolean {
216
- return filePath.startsWith(this.appConfig.absolutePaths.publicDir);
239
+ return this.invalidationService.isPublicDirFile(filePath);
217
240
  }
218
241
 
219
242
  /**
220
243
  * Checks if file path matches any additionalWatchPaths patterns.
221
244
  */
222
245
  private matchesAdditionalWatchPaths(filePath: string): boolean {
223
- const patterns = this.appConfig.additionalWatchPaths;
224
- if (!patterns.length) return false;
225
-
226
- for (const pattern of patterns) {
227
- if (pattern.includes('*')) {
228
- const ext = pattern.replace(/\*\*?\/\*/, '');
229
- if (filePath.endsWith(ext)) return true;
230
- } else {
231
- if (filePath.endsWith(pattern) || filePath === path.resolve(pattern)) return true;
232
- }
233
- }
234
- return false;
246
+ return this.invalidationService.matchesAdditionalWatchPaths(filePath);
235
247
  }
236
248
 
237
249
  /**
@@ -240,31 +252,7 @@ export class ProjectWatcher {
240
252
  * Processors without capabilities fall back to checking watch extensions.
241
253
  */
242
254
  private isHandledByProcessor(filePath: string): boolean {
243
- for (const processor of this.appConfig.processors.values()) {
244
- const capabilities = processor.getAssetCapabilities?.() ?? [];
245
- if (capabilities.length > 0) {
246
- const matchesConfiguredAsset =
247
- typeof processor.matchesFileFilter !== 'function' || processor.matchesFileFilter(filePath);
248
-
249
- if (
250
- matchesConfiguredAsset &&
251
- capabilities.some((capability) => processor.canProcessAsset?.(capability.kind, filePath))
252
- ) {
253
- return true;
254
- }
255
-
256
- continue;
257
- }
258
-
259
- const watchConfig = processor.getWatchConfig();
260
- if (!watchConfig) continue;
261
-
262
- const { extensions = [] } = watchConfig;
263
- if (extensions.length && extensions.some((ext) => filePath.endsWith(ext))) {
264
- return true;
265
- }
266
- }
267
- return false;
255
+ return this.invalidationService.isProcessorOwnedAsset(filePath);
268
256
  }
269
257
 
270
258
  /**
@@ -273,9 +261,12 @@ export class ProjectWatcher {
273
261
  *
274
262
  * @param {string} path - Path of the changed directory
275
263
  */
276
- triggerRouterRefresh(path: string) {
277
- const isPageDir = path.startsWith(this.appConfig.absolutePaths.pagesDir);
278
- if (isPageDir) {
264
+ triggerRouterRefresh(changedPath: string) {
265
+ const resolvedPath = path.resolve(changedPath);
266
+ const isPageDir =
267
+ resolvedPath.startsWith(this.appConfig.absolutePaths.pagesDir) && path.extname(resolvedPath) === '';
268
+
269
+ if (isPageDir || this.isRouteSourceFile(resolvedPath)) {
279
270
  this.refreshRouterRoutesCallback();
280
271
  }
281
272
  }
@@ -314,6 +305,14 @@ export class ProjectWatcher {
314
305
  processorPaths.push(...watchConfig.paths);
315
306
  }
316
307
 
308
+ if (fileSystem.exists(this.appConfig.absolutePaths.includesDir)) {
309
+ processorPaths.push(this.appConfig.absolutePaths.includesDir);
310
+ }
311
+
312
+ if (fileSystem.exists(this.appConfig.absolutePaths.srcDir)) {
313
+ processorPaths.push(this.appConfig.absolutePaths.srcDir);
314
+ }
315
+
317
316
  if (fileSystem.exists(this.appConfig.absolutePaths.pagesDir)) {
318
317
  processorPaths.push(this.appConfig.absolutePaths.pagesDir);
319
318
  }
package/CHANGELOG.md DELETED
@@ -1,94 +0,0 @@
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
- - Fixed processor lifecycle hijacking where PostCSS watching TSX/HTML for Tailwind class scanning incorrectly prevented those files from reaching the HMR strategy pipeline.
69
- - Unified the file watcher event pipeline: processors are now notified inside `handleFileChange` instead of binding separate chokidar listeners, eliminating double-execution and race conditions.
70
- - Added async task queue to `ProjectWatcher` to serialize concurrent file change handling and prevent overlapping builds.
71
- - Batched `JsHmrStrategy` entrypoint builds into a single esbuild invocation for improved AST sharing and rebuild speed.
72
- - Added `outbase` support to `BuildOptions` for correct output directory structure with multi-entrypoint builds.
73
-
74
- ### Tests
75
-
76
- - Added node static content server test coverage (`435dc250`).
77
- - Strengthened HTML transformer mode matrix coverage (`286c1253`).
78
- - Aligned integration and dependency processing tests to new orchestration model (`7cc73316`).
79
- - Added `EsbuildBuildAdapter` test suite with 500+ lines (`build-adapter.test.ts`).
80
- - Added `file-route-middleware-pipeline` tests.
81
-
82
- ### Documentation
83
-
84
- - Updated rendering graph documentation to cover extracted rendering services (`8bfcfd21`).
85
- - Refreshed server handler and module dependency guidance (`3494f44d`).
86
-
87
- ---
88
-
89
- ## Migration Notes
90
-
91
- - **`createApp`** is now the recommended entrypoint (previously `EcopagesApp`). Import from `@ecopages/core`.
92
- - **`defineApiHandler`** signature is unchanged but the handler context object now carries explicit runtime-agnostic types. No breaking changes for existing handlers.
93
- - Bun adapter still works as before; the new Node adapter is additive.
94
- - The old explicit `renderingMode` config option has been removed — full orchestration is always active.
@@ -1,168 +0,0 @@
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
- }
@@ -1,109 +0,0 @@
1
- import { appLogger } from "../../global/app-logger.js";
2
- import { invariant } from "../../utils/invariant.js";
3
- import { fileSystem } from "@ecopages/file-system";
4
- import { parseCliArgs } from "../../utils/parse-cli-args.js";
5
- class AbstractApplicationAdapter {
6
- appConfig;
7
- serverOptions;
8
- cliArgs;
9
- apiHandlers = [];
10
- staticRoutes = [];
11
- errorHandler;
12
- constructor(options) {
13
- this.appConfig = options.appConfig;
14
- this.serverOptions = options.serverOptions || {};
15
- this.cliArgs = parseCliArgs();
16
- if (options.clearOutput) {
17
- this.clearDistFolder().catch((error) => {
18
- appLogger.error("Error clearing dist folder", error);
19
- });
20
- }
21
- }
22
- async clearDistFolder(_filter = []) {
23
- const distPath = this.appConfig.absolutePaths.distDir;
24
- const distExists = fileSystem.exists(distPath);
25
- if (!distExists) return;
26
- try {
27
- await fileSystem.removeAsync(distPath);
28
- appLogger.debug(`Cleared dist folder: ${distPath}`);
29
- } catch (error) {
30
- appLogger.error(`Error clearing dist folder: ${distPath}`, error);
31
- }
32
- }
33
- /**
34
- * Internal method to add route handlers to the API handlers array
35
- */
36
- addRouteHandler(path, method, handler, middleware, schema) {
37
- invariant(
38
- typeof path === "string",
39
- `Invalid route path for ${method}: expected a string path starting with "/" but received ${Object.prototype.toString.call(path)}. If you're passing a prebuilt ApiHandler, use app.add(handler).`
40
- );
41
- invariant(
42
- path.startsWith("/"),
43
- `Invalid route path for ${method}: "${path}". Route paths must start with '/'.`
44
- );
45
- this.apiHandlers.push({
46
- path,
47
- method,
48
- handler,
49
- middleware,
50
- schema
51
- });
52
- return this;
53
- }
54
- /**
55
- * Get all registered API handlers
56
- */
57
- getApiHandlers() {
58
- return this.apiHandlers;
59
- }
60
- /**
61
- * Register a view for static generation at build time.
62
- * The view must have staticPaths defined for dynamic routes.
63
- *
64
- * Uses a loader function to enable HMR in development.
65
- *
66
- * @param path - URL path pattern (e.g., '/posts/:slug')
67
- * @param loader - A function that dynamically imports the eco.page view module
68
- * @example
69
- * ```typescript
70
- * app.static('/login', () => import('./src/views/login.kita'))
71
- * app.static('/posts/:slug', () => import('./src/views/post-view.kita'))
72
- * ```
73
- */
74
- static(path, loader) {
75
- this.staticRoutes.push({ path, loader });
76
- return this;
77
- }
78
- /**
79
- * Get all registered static routes
80
- */
81
- getStaticRoutes() {
82
- return this.staticRoutes;
83
- }
84
- /**
85
- * Register a global error handler for all routes.
86
- * Useful for logging, monitoring integration, and custom error formatting.
87
- *
88
- * @example
89
- * ```typescript
90
- * app.onError(async (error, ctx) => {
91
- * logger.error(error);
92
- * return ctx.response.status(500).json({ error: 'Something went wrong' });
93
- * });
94
- * ```
95
- */
96
- onError(handler) {
97
- this.errorHandler = handler;
98
- return this;
99
- }
100
- /**
101
- * Get the registered error handler
102
- */
103
- getErrorHandler() {
104
- return this.errorHandler;
105
- }
106
- }
107
- export {
108
- AbstractApplicationAdapter
109
- };
@@ -1,26 +0,0 @@
1
- /**
2
- * This file contains the abstract router adapter class and its methods.
3
- * It is designed to be extended by specific router adapters for different runtimes.
4
- * The class provides methods for converting paths, creating route handlers,
5
- * and adapting routes to the expected format of the runtime.
6
- *
7
- * @module RouterAdapter
8
- */
9
- import type { Routes } from '../../internal-types.js';
10
- /**
11
- * Abstract base class for router adapters across different runtimes
12
- */
13
- export declare abstract class AbstractRouterAdapter<TRouteFormat = any> {
14
- /**
15
- * Convert a route path to the format expected by the runtime
16
- */
17
- protected abstract convertPath(pathname: string): string;
18
- /**
19
- * Create a route handler compatible with the runtime
20
- */
21
- protected abstract createRouteHandler(route: any): any;
22
- /**
23
- * Adapt framework routes to the format expected by the runtime
24
- */
25
- abstract adaptRoutes(routes: Routes): TRouteFormat;
26
- }
@@ -1,5 +0,0 @@
1
- class AbstractRouterAdapter {
2
- }
3
- export {
4
- AbstractRouterAdapter
5
- };
@@ -1,69 +0,0 @@
1
- /**
2
- * This file contains the abstract server adapter class and its related types.
3
- * It is designed to be extended by specific server adapters for different runtimes.
4
- * The class provides methods for initializing the server, creating server options,
5
- * building static files, and handling HTTP requests.
6
- *
7
- * @module ServerAdapter
8
- */
9
- import type { EcoPagesAppConfig } from '../../internal-types.js';
10
- import type { ApiHandler } from '../../public-types.js';
11
- /**
12
- * Configuration options for all server adapters
13
- */
14
- export interface ServerAdapterOptions {
15
- appConfig: EcoPagesAppConfig;
16
- apiHandlers?: ApiHandler<string, any>[];
17
- options?: {
18
- watch?: boolean;
19
- [key: string]: any;
20
- };
21
- serveOptions?: Record<string, any>;
22
- runtimeOrigin: string;
23
- }
24
- /**
25
- * Base adapter result containing common functionalities
26
- * across different runtime implementations
27
- */
28
- export interface ServerAdapterResult {
29
- getServerOptions: (options?: {
30
- enableHmr?: boolean;
31
- }) => any;
32
- buildStatic: (options?: {
33
- preview?: boolean;
34
- }) => Promise<void>;
35
- }
36
- /**
37
- * Abstract base class for server adapters across different runtimes
38
- */
39
- export declare abstract class AbstractServerAdapter<TOptions extends ServerAdapterOptions = ServerAdapterOptions, TResult extends ServerAdapterResult = ServerAdapterResult> {
40
- protected appConfig: EcoPagesAppConfig;
41
- protected options: TOptions['options'];
42
- protected serveOptions: TOptions['serveOptions'];
43
- protected runtimeOrigin: string;
44
- constructor(options: TOptions);
45
- /**
46
- * Initialize the server adapter
47
- */
48
- abstract initialize(): Promise<void>;
49
- /**
50
- * Create server options specific to the runtime
51
- */
52
- abstract getServerOptions(options?: {
53
- enableHmr?: boolean;
54
- }): any;
55
- /**
56
- * Build static files for the application
57
- */
58
- abstract buildStatic(options?: {
59
- preview?: boolean;
60
- }): Promise<void>;
61
- /**
62
- * Factory method to create a server adapter with runtime-specific functionality
63
- */
64
- abstract createAdapter(): Promise<TResult>;
65
- /**
66
- * Handle HTTP requests
67
- */
68
- abstract handleRequest(request: Request): Promise<Response>;
69
- }