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

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 +181 -68
  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 +208 -116
  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 +235 -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 -83
  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 +115 -115
  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 -16
  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 -1
  185. package/src/watchers/project-watcher.test.ts +678 -0
  186. package/src/watchers/project-watcher.ts +130 -111
  187. package/CHANGELOG.md +0 -91
  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 -85
  202. package/src/adapters/bun/hmr-manager.js +0 -240
  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 -63
  218. package/src/adapters/node/node-hmr-manager.js +0 -237
  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 -74
  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 -390
  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 -188
  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 -1098
  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 -125
  409. package/src/watchers/project-watcher.js +0 -265
  410. package/src/watchers/project-watcher.test-helpers.d.ts +0 -4
  411. package/src/watchers/project-watcher.test-helpers.js +0 -52
  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
@@ -1,166 +0,0 @@
1
- import { createServer } from "node:http";
2
- import { extname, join, normalize, sep } from "node:path";
3
- import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT, STATUS_MESSAGE } from "../../constants.js";
4
- import { fileSystem } from "@ecopages/file-system";
5
- import { ServerUtils } from "../../utils/server-utils.module.js";
6
- class NodeStaticContentServer {
7
- appConfig;
8
- options;
9
- server = null;
10
- constructor({ appConfig, options }) {
11
- this.appConfig = appConfig;
12
- this.options = {
13
- hostname: options?.hostname ?? DEFAULT_ECOPAGES_HOSTNAME,
14
- port: options?.port ?? DEFAULT_ECOPAGES_PORT
15
- };
16
- }
17
- shouldServeGzip(contentType) {
18
- return ["text/javascript", "text/css"].includes(contentType);
19
- }
20
- sanitizePath(pathname) {
21
- const withoutLeadingSlash = pathname.replace(/^\/+/, "");
22
- const normalizedPath = normalize(withoutLeadingSlash);
23
- if (normalizedPath.startsWith("..") || normalizedPath.includes(`..${sep}`)) {
24
- return null;
25
- }
26
- return normalizedPath;
27
- }
28
- sendResponse(res, status, headers, body) {
29
- res.statusCode = status;
30
- for (const [key, value] of Object.entries(headers)) {
31
- res.setHeader(key, value);
32
- }
33
- if (!body) {
34
- res.end();
35
- return;
36
- }
37
- res.end(body);
38
- }
39
- sendNotFoundPage(req, res) {
40
- const error404TemplatePath = join(this.appConfig.absolutePaths.distDir, "404.html");
41
- const isHead = (req.method ?? "GET").toUpperCase() === "HEAD";
42
- if (!fileSystem.exists(error404TemplatePath)) {
43
- this.sendResponse(
44
- res,
45
- 404,
46
- { "Content-Type": "text/plain" },
47
- isHead ? void 0 : Buffer.from(STATUS_MESSAGE[404])
48
- );
49
- return;
50
- }
51
- const file = fileSystem.readFileAsBuffer(error404TemplatePath);
52
- this.sendResponse(res, 404, { "Content-Type": "text/html" }, isHead ? void 0 : file);
53
- }
54
- serveFile(req, res, filePath, status = 200) {
55
- const contentType = ServerUtils.getContentType(extname(filePath));
56
- const acceptsGzip = req.headers["accept-encoding"]?.includes("gzip");
57
- const isHead = (req.method ?? "GET").toUpperCase() === "HEAD";
58
- if (acceptsGzip && this.shouldServeGzip(contentType)) {
59
- const gzipPath = `${filePath}.gz`;
60
- if (fileSystem.exists(gzipPath)) {
61
- const file2 = fileSystem.readFileAsBuffer(gzipPath);
62
- this.sendResponse(
63
- res,
64
- status,
65
- {
66
- "Content-Type": contentType,
67
- "Content-Encoding": "gzip",
68
- Vary: "Accept-Encoding"
69
- },
70
- isHead ? void 0 : file2
71
- );
72
- return;
73
- }
74
- }
75
- if (!fileSystem.exists(filePath)) {
76
- this.sendNotFoundPage(req, res);
77
- return;
78
- }
79
- const file = fileSystem.readFileAsBuffer(filePath);
80
- this.sendResponse(res, status, { "Content-Type": contentType }, isHead ? void 0 : file);
81
- }
82
- handleRequest(req, res) {
83
- const method = (req.method ?? "GET").toUpperCase();
84
- const isHead = method === "HEAD";
85
- if (method !== "GET" && method !== "HEAD") {
86
- this.sendResponse(
87
- res,
88
- 405,
89
- { Allow: "GET, HEAD", "Content-Type": "text/plain" },
90
- isHead ? void 0 : Buffer.from("Method Not Allowed")
91
- );
92
- return;
93
- }
94
- const url = new URL(req.url ?? "/", "http://localhost");
95
- let decodedPathname = "/";
96
- try {
97
- decodedPathname = decodeURIComponent(url.pathname);
98
- } catch {
99
- this.sendResponse(
100
- res,
101
- 400,
102
- { "Content-Type": "text/plain" },
103
- isHead ? void 0 : Buffer.from("Invalid path")
104
- );
105
- return;
106
- }
107
- const pathname = decodedPathname === "/" ? "/index.html" : decodedPathname;
108
- const relativePath = this.sanitizePath(pathname);
109
- if (!relativePath) {
110
- this.sendResponse(
111
- res,
112
- 400,
113
- { "Content-Type": "text/plain" },
114
- isHead ? void 0 : Buffer.from("Invalid path")
115
- );
116
- return;
117
- }
118
- const basePath = join(this.appConfig.absolutePaths.distDir, relativePath);
119
- if (pathname.includes(".")) {
120
- this.serveFile(req, res, basePath);
121
- return;
122
- }
123
- const htmlCandidates = [`${basePath}.html`, join(basePath, "index.html")];
124
- for (const candidate of htmlCandidates) {
125
- if (fileSystem.exists(candidate)) {
126
- this.serveFile(req, res, candidate);
127
- return;
128
- }
129
- }
130
- this.sendNotFoundPage(req, res);
131
- }
132
- async start() {
133
- if (this.server) {
134
- return this.server;
135
- }
136
- this.server = createServer(this.handleRequest.bind(this));
137
- const hostname = this.options.hostname ?? DEFAULT_ECOPAGES_HOSTNAME;
138
- const port = this.options.port ?? DEFAULT_ECOPAGES_PORT;
139
- await new Promise((resolve) => {
140
- this.server.listen(port, hostname, () => resolve());
141
- });
142
- return this.server;
143
- }
144
- async stop(force = true) {
145
- if (!this.server) {
146
- return;
147
- }
148
- const activeServer = this.server;
149
- this.server = null;
150
- await new Promise((resolve, reject) => {
151
- activeServer.close((error) => {
152
- if (error) {
153
- reject(error);
154
- return;
155
- }
156
- resolve();
157
- });
158
- if (force) {
159
- activeServer.closeAllConnections();
160
- }
161
- });
162
- }
163
- }
164
- export {
165
- NodeStaticContentServer
166
- };
@@ -1,52 +0,0 @@
1
- /**
2
- * A builder class for creating Response objects fluently.
3
- */
4
- export declare class ApiResponseBuilder {
5
- private _status;
6
- private _headers;
7
- /**
8
- * Sets the HTTP status code for the response.
9
- * @param code - The HTTP status code.
10
- * @returns The builder instance for chaining.
11
- */
12
- status(code: Response['status']): this;
13
- /**
14
- * Adds or merges headers for the response.
15
- * @param headersInit - Headers to add or merge.
16
- * @returns The builder instance for chaining.
17
- */
18
- headers(headersInit: HeadersInit): this;
19
- /**
20
- * Creates a JSON response using the configured status and headers.
21
- * @param data - The data to serialize.
22
- * @returns A Response object.
23
- */
24
- json(data: any): Response;
25
- /**
26
- * Creates a plain text response using the configured status and headers.
27
- * @param data - The text content.
28
- * @returns A Response object.
29
- */
30
- text(data: string): Response;
31
- /**
32
- * Creates an HTML response using the configured status and headers.
33
- * @param data - The HTML content.
34
- * @returns A Response object.
35
- */
36
- html(data: string): Response;
37
- /**
38
- * Creates a redirect response.
39
- * @param url - The URL to redirect to.
40
- * @param explicitStatus - Optional explicit status code (overrides status() if provided). Defaults to 302 if not set via status().
41
- * @returns A Response object.
42
- */
43
- redirect(url: string, explicitStatus?: Response['status']): Response;
44
- /**
45
- * Creates an error response using the configured status and headers.
46
- * If data is an object, it's treated as JSON, otherwise as text.
47
- * @param data - The error data (string or object).
48
- * @param explicitStatus - Optional explicit status code (overrides status() if provided). Defaults to 500 if not set via status().
49
- * @returns A Response object.
50
- */
51
- error(data: string | object, explicitStatus?: Response['status']): Response;
52
- }
@@ -1,96 +0,0 @@
1
- class ApiResponseBuilder {
2
- _status = 200;
3
- _headers = new Headers();
4
- /**
5
- * Sets the HTTP status code for the response.
6
- * @param code - The HTTP status code.
7
- * @returns The builder instance for chaining.
8
- */
9
- status(code) {
10
- this._status = code;
11
- return this;
12
- }
13
- /**
14
- * Adds or merges headers for the response.
15
- * @param headersInit - Headers to add or merge.
16
- * @returns The builder instance for chaining.
17
- */
18
- headers(headersInit) {
19
- const inputHeaders = new Headers(headersInit);
20
- inputHeaders.forEach((value, key) => {
21
- this._headers.set(key, value);
22
- });
23
- return this;
24
- }
25
- /**
26
- * Creates a JSON response using the configured status and headers.
27
- * @param data - The data to serialize.
28
- * @returns A Response object.
29
- */
30
- json(data) {
31
- if (!this._headers.has("Content-Type")) {
32
- this._headers.set("Content-Type", "application/json; charset=utf-8");
33
- }
34
- return new Response(JSON.stringify(data), { status: this._status, headers: this._headers });
35
- }
36
- /**
37
- * Creates a plain text response using the configured status and headers.
38
- * @param data - The text content.
39
- * @returns A Response object.
40
- */
41
- text(data) {
42
- if (!this._headers.has("Content-Type")) {
43
- this._headers.set("Content-Type", "text/plain; charset=utf-8");
44
- }
45
- return new Response(data, { status: this._status, headers: this._headers });
46
- }
47
- /**
48
- * Creates an HTML response using the configured status and headers.
49
- * @param data - The HTML content.
50
- * @returns A Response object.
51
- */
52
- html(data) {
53
- if (!this._headers.has("Content-Type")) {
54
- this._headers.set("Content-Type", "text/html; charset=utf-8");
55
- }
56
- return new Response(data, { status: this._status, headers: this._headers });
57
- }
58
- /**
59
- * Creates a redirect response.
60
- * @param url - The URL to redirect to.
61
- * @param explicitStatus - Optional explicit status code (overrides status() if provided). Defaults to 302 if not set via status().
62
- * @returns A Response object.
63
- */
64
- redirect(url, explicitStatus) {
65
- const redirectStatus = explicitStatus ?? (this._status === 200 ? 302 : this._status);
66
- this._headers.set("Location", url);
67
- return new Response(null, { status: redirectStatus, headers: this._headers });
68
- }
69
- /**
70
- * Creates an error response using the configured status and headers.
71
- * If data is an object, it's treated as JSON, otherwise as text.
72
- * @param data - The error data (string or object).
73
- * @param explicitStatus - Optional explicit status code (overrides status() if provided). Defaults to 500 if not set via status().
74
- * @returns A Response object.
75
- */
76
- error(data, explicitStatus) {
77
- const errorStatus = explicitStatus ?? (this._status === 200 ? 500 : this._status);
78
- this.status(errorStatus);
79
- if (typeof data === "object" && data !== null) {
80
- if (!this._headers.has("Content-Type")) {
81
- this._headers.set("Content-Type", "application/json; charset=utf-8");
82
- }
83
- return new Response(JSON.stringify({ error: data }), {
84
- status: this._status,
85
- headers: this._headers
86
- });
87
- }
88
- if (!this._headers.has("Content-Type")) {
89
- this._headers.set("Content-Type", "text/plain; charset=utf-8");
90
- }
91
- return new Response(String(data), { status: this._status, headers: this._headers });
92
- }
93
- }
94
- export {
95
- ApiResponseBuilder
96
- };
@@ -1,18 +0,0 @@
1
- import type { ApiHandler, ApiHandlerContext, Middleware, RouteGroupBuilder, RouteOptions } from '../../public-types.js';
2
- import { AbstractApplicationAdapter, type ApplicationAdapterOptions, type RouteGroupDefinition, type RouteHandler } from '../abstract/application-adapter.js';
3
- export declare abstract class SharedApplicationAdapter<TOptions extends ApplicationAdapterOptions = ApplicationAdapterOptions, TServer = any, TRequest extends Request = Request> extends AbstractApplicationAdapter<TOptions, TServer, TRequest> {
4
- protected register<P extends string, TContext extends ApiHandlerContext<TRequest, TServer> = ApiHandlerContext<TRequest, TServer>>(path: P, method: ApiHandler['method'], handler: RouteHandler<TRequest, TServer, TContext>, options?: RouteOptions<TRequest, TServer, TContext>): this;
5
- 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;
6
- 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;
7
- 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;
8
- 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;
9
- 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;
10
- 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;
11
- 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;
12
- route<P extends string>(path: P, method: ApiHandler['method'], handler: RouteHandler<TRequest, TServer>, options?: RouteOptions<TRequest, TServer>): this;
13
- add(handler: ApiHandler<string, TRequest, TServer>): this;
14
- group<TMiddleware extends readonly Middleware<TRequest, TServer, any>[] = []>(prefixOrGroup: string | RouteGroupDefinition<TRequest, TServer>, callback?: (builder: TMiddleware extends readonly Middleware<TRequest, TServer, infer TContext>[] ? RouteGroupBuilder<TRequest, TServer, TContext> : RouteGroupBuilder<TRequest, TServer>) => void, options?: {
15
- middleware?: TMiddleware;
16
- }): this;
17
- private registerGroup;
18
- }
@@ -1,90 +0,0 @@
1
- import {
2
- AbstractApplicationAdapter
3
- } from "../abstract/application-adapter.js";
4
- class SharedApplicationAdapter extends AbstractApplicationAdapter {
5
- register(path, method, handler, options) {
6
- return this.addRouteHandler(path, method, handler, options?.middleware, options?.schema);
7
- }
8
- get(path, handler, options) {
9
- return this.register(path, "GET", handler, options);
10
- }
11
- post(path, handler, options) {
12
- return this.register(path, "POST", handler, options);
13
- }
14
- put(path, handler, options) {
15
- return this.register(path, "PUT", handler, options);
16
- }
17
- delete(path, handler, options) {
18
- return this.register(path, "DELETE", handler, options);
19
- }
20
- patch(path, handler, options) {
21
- return this.register(path, "PATCH", handler, options);
22
- }
23
- options(path, handler, options) {
24
- return this.register(path, "OPTIONS", handler, options);
25
- }
26
- head(path, handler, options) {
27
- return this.register(path, "HEAD", handler, options);
28
- }
29
- route(path, method, handler, options) {
30
- return this.register(path, method, handler, options);
31
- }
32
- add(handler) {
33
- return this.addRouteHandler(handler.path, handler.method, handler.handler, handler.middleware, handler.schema);
34
- }
35
- group(prefixOrGroup, callback, options) {
36
- if (typeof prefixOrGroup === "object") {
37
- return this.registerGroup(prefixOrGroup);
38
- }
39
- const normalizedPrefix = prefixOrGroup.endsWith("/") ? prefixOrGroup.slice(0, -1) : prefixOrGroup;
40
- const groupMiddleware = options?.middleware ?? [];
41
- const createHandler = (method) => {
42
- return ((path, handler, routeOptions) => {
43
- const combinedMiddleware = [
44
- ...groupMiddleware,
45
- ...routeOptions?.middleware ?? []
46
- ];
47
- const fullPath = path === "/" ? normalizedPrefix : `${normalizedPrefix}${path}`;
48
- this.addRouteHandler(
49
- fullPath,
50
- method,
51
- handler,
52
- combinedMiddleware.length > 0 ? combinedMiddleware : void 0,
53
- routeOptions?.schema
54
- );
55
- return builder;
56
- });
57
- };
58
- const builder = {
59
- get: createHandler("GET"),
60
- post: createHandler("POST"),
61
- put: createHandler("PUT"),
62
- delete: createHandler("DELETE"),
63
- patch: createHandler("PATCH"),
64
- options: createHandler("OPTIONS"),
65
- head: createHandler("HEAD")
66
- };
67
- callback?.(builder);
68
- return this;
69
- }
70
- registerGroup(group) {
71
- const normalizedPrefix = group.prefix.endsWith("/") ? group.prefix.slice(0, -1) : group.prefix;
72
- const groupMiddleware = group.middleware ?? [];
73
- for (const route of group.routes) {
74
- const normalizedPath = route.path.startsWith("/") ? route.path : `/${route.path}`;
75
- const fullPath = route.path === "/" ? normalizedPrefix : `${normalizedPrefix}${normalizedPath}`;
76
- const combinedMiddleware = [...groupMiddleware, ...route.middleware ?? []];
77
- this.addRouteHandler(
78
- fullPath,
79
- route.method,
80
- route.handler,
81
- combinedMiddleware.length > 0 ? combinedMiddleware : void 0,
82
- route.schema
83
- );
84
- }
85
- return this;
86
- }
87
- }
88
- export {
89
- SharedApplicationAdapter
90
- };
@@ -1,38 +0,0 @@
1
- import type { EcoPagesAppConfig } from '../../internal-types.js';
2
- import type { StaticRoute } from '../../public-types.js';
3
- import type { RouteRendererFactory } from '../../route-renderer/route-renderer.js';
4
- export declare const EXPLICIT_STATIC_ROUTE_MATCHER_ERRORS: {
5
- readonly missingIntegration: (routePath: string) => string;
6
- readonly noRendererForIntegration: (integrationName: string) => string;
7
- };
8
- export interface ExplicitStaticRouteMatcherOptions {
9
- appConfig: EcoPagesAppConfig;
10
- routeRendererFactory: RouteRendererFactory;
11
- staticRoutes: StaticRoute[];
12
- }
13
- export interface ExplicitRouteMatch {
14
- route: StaticRoute;
15
- params: Record<string, string>;
16
- }
17
- export declare class ExplicitStaticRouteMatcher {
18
- private readonly appConfig;
19
- private readonly routeRendererFactory;
20
- private readonly staticRoutes;
21
- constructor({ appConfig, routeRendererFactory, staticRoutes }: ExplicitStaticRouteMatcherOptions);
22
- /**
23
- * Match a request URL against explicit static routes.
24
- * Returns the matched route and extracted params, or null if no match.
25
- */
26
- match(url: string): ExplicitRouteMatch | null;
27
- /**
28
- * Match a route pattern against a pathname.
29
- * Supports :param and [param] syntax.
30
- * Returns extracted params or null if no match.
31
- */
32
- private matchRoute;
33
- /**
34
- * Handle a matched explicit static route.
35
- * Resolves the loader and renders the view using the appropriate integration renderer.
36
- */
37
- handleMatch(match: ExplicitRouteMatch): Promise<Response>;
38
- }
@@ -1,100 +0,0 @@
1
- import { appLogger } from "../../global/app-logger.js";
2
- const EXPLICIT_STATIC_ROUTE_MATCHER_ERRORS = {
3
- missingIntegration: (routePath) => `View at ${routePath} is missing __eco.integration. Ensure it's defined with eco.page() and exported as default.`,
4
- noRendererForIntegration: (integrationName) => `No renderer found for integration: ${integrationName}`
5
- };
6
- class ExplicitStaticRouteMatcher {
7
- appConfig;
8
- routeRendererFactory;
9
- staticRoutes;
10
- constructor({ appConfig, routeRendererFactory, staticRoutes }) {
11
- this.appConfig = appConfig;
12
- this.routeRendererFactory = routeRendererFactory;
13
- this.staticRoutes = staticRoutes;
14
- }
15
- /**
16
- * Match a request URL against explicit static routes.
17
- * Returns the matched route and extracted params, or null if no match.
18
- */
19
- match(url) {
20
- const pathname = new URL(url).pathname;
21
- for (const route of this.staticRoutes) {
22
- const params = this.matchRoute(route.path, pathname);
23
- if (params !== null) {
24
- return { route, params };
25
- }
26
- }
27
- return null;
28
- }
29
- /**
30
- * Match a route pattern against a pathname.
31
- * Supports :param and [param] syntax.
32
- * Returns extracted params or null if no match.
33
- */
34
- matchRoute(pattern, pathname) {
35
- const patternSegments = pattern.split("/").filter(Boolean);
36
- const pathSegments = pathname.split("/").filter(Boolean);
37
- if (patternSegments.length !== pathSegments.length) {
38
- const lastPattern = patternSegments[patternSegments.length - 1];
39
- const isCatchAll = lastPattern?.startsWith("[...") || lastPattern?.startsWith(":...");
40
- if (!isCatchAll) {
41
- return null;
42
- }
43
- }
44
- const params = {};
45
- for (let i = 0; i < patternSegments.length; i++) {
46
- const patternPart = patternSegments[i];
47
- const pathPart = pathSegments[i];
48
- if (patternPart.startsWith(":...") || patternPart.startsWith("[...")) {
49
- const paramName = patternPart.replace(/^(:\.\.\.|\[\.\.\.)/, "").replace(/\]$/, "");
50
- params[paramName] = pathSegments.slice(i).join("/");
51
- return params;
52
- }
53
- if (patternPart.startsWith(":")) {
54
- const paramName = patternPart.slice(1);
55
- params[paramName] = pathPart;
56
- } else if (patternPart.startsWith("[") && patternPart.endsWith("]")) {
57
- const paramName = patternPart.slice(1, -1);
58
- params[paramName] = pathPart;
59
- } else if (patternPart !== pathPart) {
60
- return null;
61
- }
62
- }
63
- return params;
64
- }
65
- /**
66
- * Handle a matched explicit static route.
67
- * Resolves the loader and renders the view using the appropriate integration renderer.
68
- */
69
- async handleMatch(match) {
70
- const { route, params } = match;
71
- try {
72
- const mod = await route.loader();
73
- const view = mod.default;
74
- const integrationName = view.config?.__eco?.integration;
75
- if (!integrationName) {
76
- throw new Error(EXPLICIT_STATIC_ROUTE_MATCHER_ERRORS.missingIntegration(route.path));
77
- }
78
- const renderer = this.routeRendererFactory.getRendererByIntegration(integrationName);
79
- if (!renderer) {
80
- throw new Error(EXPLICIT_STATIC_ROUTE_MATCHER_ERRORS.noRendererForIntegration(integrationName));
81
- }
82
- const props = view.staticProps ? (await view.staticProps({
83
- pathname: { params },
84
- appConfig: this.appConfig,
85
- runtimeOrigin: this.appConfig.baseUrl
86
- })).props : {};
87
- return renderer.renderToResponse(view, props, {});
88
- } catch (error) {
89
- appLogger.error(
90
- `Error rendering explicit static route ${route.path}:`,
91
- error instanceof Error ? error : String(error)
92
- );
93
- throw error;
94
- }
95
- }
96
- }
97
- export {
98
- EXPLICIT_STATIC_ROUTE_MATCHER_ERRORS,
99
- ExplicitStaticRouteMatcher
100
- };
@@ -1,65 +0,0 @@
1
- import type { Middleware, ApiHandlerContext, RequestLocals } from '../../public-types.js';
2
- import type { PageCacheService } from '../../services/cache/page-cache-service.js';
3
- export declare const FILE_ROUTE_MIDDLEWARE_PIPELINE_ERRORS: {
4
- readonly CTX_RENDER_UNAVAILABLE: "[ecopages] ctx.render is not available in file-route middleware";
5
- readonly CTX_RENDER_PARTIAL_UNAVAILABLE: "[ecopages] ctx.renderPartial is not available in file-route middleware";
6
- readonly middlewareRequiresDynamic: (filePath: string) => string;
7
- };
8
- /**
9
- * Executes middleware for file-based page routes.
10
- *
11
- * This pipeline owns the middleware-specific rules that are distinct from route
12
- * matching and rendering, including request-local storage, the middleware
13
- * execution context, and the invariant that page middleware only runs for
14
- * request-time dynamic rendering.
15
- */
16
- export declare class FileRouteMiddlewarePipeline {
17
- private cacheService;
18
- constructor(cacheService: PageCacheService | null);
19
- /**
20
- * Enforces the current middleware contract for file-routed pages.
21
- *
22
- * Middleware depends on request-scoped locals and therefore must not run when
23
- * the page is treated as statically cacheable.
24
- *
25
- * @param input Middleware list, effective cache strategy, and page path.
26
- * @throws LocalsAccessError When middleware is configured for a non-dynamic page.
27
- */
28
- assertValidConfiguration(input: {
29
- middleware: Middleware[];
30
- pageCacheStrategy: 'static' | 'dynamic' | {
31
- revalidate: number;
32
- tags?: string[];
33
- };
34
- filePath: string;
35
- }): void;
36
- /**
37
- * Creates the request-scoped middleware context used by page middleware.
38
- *
39
- * The context intentionally disables `render()` and `renderPartial()` inside
40
- * file-route middleware because rendering is owned by the page route pipeline,
41
- * not by middleware stages.
42
- *
43
- * @param input Request details and the mutable locals store.
44
- * @returns Middleware execution context.
45
- */
46
- createContext(input: {
47
- request: Request;
48
- params: Record<string, string>;
49
- locals: RequestLocals;
50
- }): ApiHandlerContext;
51
- /**
52
- * Runs the middleware chain and eventually delegates to the render callback.
53
- *
54
- * Middleware may short-circuit by returning a response directly. If the chain
55
- * completes, the supplied `renderResponse` callback is executed exactly once.
56
- *
57
- * @param input Middleware context, chain, and terminal render callback.
58
- * @returns Response from middleware or final render stage.
59
- */
60
- run(input: {
61
- middleware: Middleware[];
62
- context: ApiHandlerContext;
63
- renderResponse: () => Promise<Response>;
64
- }): Promise<Response>;
65
- }