@ecopages/core 0.2.0-alpha.25 → 0.2.0-alpha.26

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 (543) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/package.json +226 -93
  3. package/src/adapters/abstract/application-adapter.d.ts +194 -0
  4. package/src/adapters/abstract/application-adapter.js +121 -0
  5. package/src/adapters/abstract/router-adapter.d.ts +26 -0
  6. package/src/adapters/abstract/router-adapter.js +5 -0
  7. package/src/adapters/abstract/server-adapter.d.ts +69 -0
  8. package/src/adapters/abstract/server-adapter.js +15 -0
  9. package/src/adapters/bun/client-bridge.d.ts +34 -0
  10. package/src/adapters/bun/client-bridge.js +48 -0
  11. package/src/adapters/bun/create-app.d.ts +52 -0
  12. package/src/adapters/bun/create-app.js +116 -0
  13. package/src/adapters/bun/hmr-manager.d.ts +143 -0
  14. package/src/adapters/bun/hmr-manager.js +333 -0
  15. package/src/adapters/bun/index.d.ts +2 -0
  16. package/src/adapters/bun/index.js +8 -0
  17. package/src/adapters/bun/server-adapter.d.ts +155 -0
  18. package/src/adapters/bun/server-adapter.js +374 -0
  19. package/src/adapters/bun/server-lifecycle.d.ts +63 -0
  20. package/src/adapters/bun/server-lifecycle.js +92 -0
  21. package/src/adapters/create-app.d.ts +20 -0
  22. package/src/adapters/create-app.js +66 -0
  23. package/src/adapters/index.d.ts +2 -0
  24. package/src/adapters/index.js +8 -0
  25. package/src/adapters/node/create-app.d.ts +18 -0
  26. package/src/adapters/node/create-app.js +149 -0
  27. package/src/adapters/node/node-client-bridge.d.ts +26 -0
  28. package/src/adapters/node/node-client-bridge.js +66 -0
  29. package/src/adapters/node/node-hmr-manager.d.ts +133 -0
  30. package/src/adapters/node/node-hmr-manager.js +311 -0
  31. package/src/adapters/node/server-adapter.d.ts +162 -0
  32. package/src/adapters/node/server-adapter.js +368 -0
  33. package/src/adapters/node/static-content-server.d.ts +60 -0
  34. package/src/adapters/node/static-content-server.js +194 -0
  35. package/src/adapters/shared/api-response.d.ts +52 -0
  36. package/src/adapters/shared/api-response.js +96 -0
  37. package/src/adapters/shared/application-adapter.d.ts +18 -0
  38. package/src/adapters/shared/application-adapter.js +90 -0
  39. package/src/adapters/shared/define-api-handler.d.ts +25 -0
  40. package/src/adapters/shared/define-api-handler.js +15 -0
  41. package/src/adapters/shared/explicit-static-route-matcher.d.ts +38 -0
  42. package/src/adapters/shared/explicit-static-route-matcher.js +103 -0
  43. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +65 -0
  44. package/src/adapters/shared/file-route-middleware-pipeline.js +99 -0
  45. package/src/adapters/shared/fs-server-response-factory.d.ts +19 -0
  46. package/src/adapters/shared/fs-server-response-factory.js +97 -0
  47. package/src/adapters/shared/fs-server-response-matcher.d.ts +67 -0
  48. package/src/adapters/shared/fs-server-response-matcher.js +147 -0
  49. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  50. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  51. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  52. package/src/adapters/shared/hmr-html-response.js +32 -0
  53. package/src/adapters/shared/render-context.d.ts +15 -0
  54. package/src/adapters/shared/render-context.js +72 -0
  55. package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
  56. package/src/adapters/shared/runtime-bootstrap.js +43 -0
  57. package/src/adapters/shared/server-adapter.d.ts +97 -0
  58. package/src/adapters/shared/server-adapter.js +390 -0
  59. package/src/adapters/shared/server-route-handler.d.ts +89 -0
  60. package/src/adapters/shared/server-route-handler.js +111 -0
  61. package/src/adapters/shared/server-static-builder.d.ts +71 -0
  62. package/src/adapters/shared/server-static-builder.js +100 -0
  63. package/src/build/build-adapter.d.ts +239 -0
  64. package/src/build/build-adapter.js +642 -0
  65. package/src/build/build-manifest.d.ts +27 -0
  66. package/src/build/build-manifest.js +30 -0
  67. package/src/build/build-types.d.ts +57 -0
  68. package/src/build/build-types.js +0 -0
  69. package/src/build/dev-build-coordinator.d.ts +72 -0
  70. package/src/build/dev-build-coordinator.js +154 -0
  71. package/src/build/esbuild-build-adapter.d.ts +78 -0
  72. package/src/build/esbuild-build-adapter.js +505 -0
  73. package/src/build/runtime-build-executor.d.ts +14 -0
  74. package/src/build/runtime-build-executor.js +22 -0
  75. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  76. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  77. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  78. package/src/build/runtime-specifier-aliases.js +95 -0
  79. package/src/config/config-builder.d.ts +252 -0
  80. package/src/config/config-builder.js +603 -0
  81. package/src/config/{constants.ts → constants.d.ts} +13 -22
  82. package/src/config/constants.js +25 -0
  83. package/src/dev/sc-server.d.ts +30 -0
  84. package/src/dev/sc-server.js +111 -0
  85. package/src/eco/eco.browser.d.ts +2 -0
  86. package/src/eco/eco.browser.js +83 -0
  87. package/src/eco/eco.d.ts +9 -0
  88. package/src/eco/eco.js +85 -0
  89. package/src/eco/eco.types.d.ts +178 -0
  90. package/src/eco/eco.types.js +0 -0
  91. package/src/eco/eco.utils.d.ts +1 -0
  92. package/src/eco/eco.utils.js +10 -0
  93. package/src/eco/global-injector-map.d.ts +16 -0
  94. package/src/eco/global-injector-map.js +80 -0
  95. package/src/eco/lazy-injector-map.d.ts +8 -0
  96. package/src/eco/lazy-injector-map.js +70 -0
  97. package/src/eco/module-dependencies.d.ts +18 -0
  98. package/src/eco/module-dependencies.js +49 -0
  99. package/src/errors/http-error.d.ts +31 -0
  100. package/src/errors/http-error.js +50 -0
  101. package/src/errors/{index.ts → index.d.ts} +2 -2
  102. package/src/errors/index.js +4 -0
  103. package/src/errors/locals-access-error.d.ts +4 -0
  104. package/src/errors/locals-access-error.js +9 -0
  105. package/src/global/app-logger.d.ts +2 -0
  106. package/src/global/app-logger.js +6 -0
  107. package/src/hmr/client/hmr-runtime.d.ts +5 -0
  108. package/src/hmr/client/hmr-runtime.js +117 -0
  109. package/src/hmr/hmr-strategy.d.ts +162 -0
  110. package/src/hmr/hmr-strategy.js +44 -0
  111. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  112. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  113. package/src/hmr/hmr.test.e2e.d.ts +1 -0
  114. package/src/hmr/hmr.test.e2e.js +43 -0
  115. package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
  116. package/src/hmr/strategies/default-hmr-strategy.js +34 -0
  117. package/src/hmr/strategies/js-hmr-strategy.d.ts +139 -0
  118. package/src/hmr/strategies/js-hmr-strategy.js +178 -0
  119. package/src/index.browser.d.ts +3 -0
  120. package/src/index.browser.js +4 -0
  121. package/src/index.d.ts +6 -0
  122. package/src/index.js +21 -0
  123. package/src/integrations/ghtml/ghtml-renderer.d.ts +20 -0
  124. package/src/integrations/ghtml/ghtml-renderer.js +63 -0
  125. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  126. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  127. package/src/integrations/ghtml/ghtml.plugin.d.ts +16 -0
  128. package/src/integrations/ghtml/ghtml.plugin.js +20 -0
  129. package/src/plugins/alias-resolver-plugin.d.ts +2 -0
  130. package/src/plugins/alias-resolver-plugin.js +53 -0
  131. package/src/plugins/eco-component-meta-plugin.d.ts +108 -0
  132. package/src/plugins/eco-component-meta-plugin.js +163 -0
  133. package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
  134. package/src/plugins/foreign-jsx-override-plugin.js +35 -0
  135. package/src/plugins/integration-plugin.d.ts +219 -0
  136. package/src/plugins/integration-plugin.js +196 -0
  137. package/src/plugins/processor.d.ts +95 -0
  138. package/src/plugins/processor.js +136 -0
  139. package/src/plugins/{runtime-capability.ts → runtime-capability.d.ts} +3 -8
  140. package/src/plugins/runtime-capability.js +0 -0
  141. package/src/plugins/source-transform.d.ts +46 -0
  142. package/src/plugins/source-transform.js +71 -0
  143. package/src/route-renderer/orchestration/boundary-planning.service.d.ts +25 -0
  144. package/src/route-renderer/orchestration/boundary-planning.service.js +97 -0
  145. package/src/route-renderer/orchestration/component-render-context.d.ts +83 -0
  146. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  147. package/src/route-renderer/orchestration/integration-renderer.d.ts +556 -0
  148. package/src/route-renderer/orchestration/integration-renderer.js +932 -0
  149. package/src/route-renderer/orchestration/page-packaging.service.d.ts +16 -0
  150. package/src/route-renderer/orchestration/page-packaging.service.js +66 -0
  151. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +2 -0
  152. package/src/route-renderer/orchestration/processed-asset-dedupe.js +23 -0
  153. package/src/route-renderer/orchestration/queued-boundary-runtime.service.d.ts +89 -0
  154. package/src/route-renderer/orchestration/queued-boundary-runtime.service.js +155 -0
  155. package/src/route-renderer/orchestration/render-execution.service.d.ts +43 -0
  156. package/src/route-renderer/orchestration/render-execution.service.js +106 -0
  157. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  158. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  159. package/src/route-renderer/orchestration/render-preparation.service.d.ts +120 -0
  160. package/src/route-renderer/orchestration/render-preparation.service.js +364 -0
  161. package/src/route-renderer/orchestration/route-shell-composer.service.d.ts +50 -0
  162. package/src/route-renderer/orchestration/route-shell-composer.service.js +81 -0
  163. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  164. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  165. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  166. package/src/route-renderer/page-loading/component-dependency-collection.js +125 -0
  167. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  168. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  169. package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
  170. package/src/route-renderer/page-loading/dependency-resolver.js +117 -0
  171. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  172. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  173. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  174. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  175. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  176. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  177. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  178. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  179. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  180. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  181. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  182. package/src/route-renderer/page-loading/page-dependency-bundling.js +115 -0
  183. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  184. package/src/route-renderer/page-loading/page-module-loader.js +127 -0
  185. package/src/route-renderer/route-renderer.d.ts +67 -0
  186. package/src/route-renderer/route-renderer.js +103 -0
  187. package/src/router/client/link-intent.js +34 -0
  188. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  189. package/src/router/client/link-intent.test.browser.js +43 -0
  190. package/src/router/client/navigation-coordinator.d.ts +169 -0
  191. package/src/router/client/navigation-coordinator.js +215 -0
  192. package/src/router/server/fs-router-scanner.d.ts +41 -0
  193. package/src/router/server/fs-router-scanner.js +161 -0
  194. package/src/router/server/fs-router.d.ts +26 -0
  195. package/src/router/server/fs-router.js +100 -0
  196. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  197. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  198. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  199. package/src/services/assets/asset-processing-service/asset-processing.service.js +285 -0
  200. package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
  201. package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
  202. package/src/services/assets/asset-processing-service/assets.types.d.ts +100 -0
  203. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  204. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  205. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  206. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  207. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  208. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  209. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  210. package/src/services/assets/asset-processing-service/index.d.ts +5 -0
  211. package/src/services/assets/asset-processing-service/index.js +5 -0
  212. package/src/services/assets/asset-processing-service/{processor.interface.ts → processor.interface.d.ts} +5 -10
  213. package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
  214. package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
  215. package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
  216. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
  217. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +65 -0
  218. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  219. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  220. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  221. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  222. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +6 -0
  223. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +116 -0
  224. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +9 -0
  225. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +91 -0
  226. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +7 -0
  227. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +77 -0
  228. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +8 -0
  229. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +58 -0
  230. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
  231. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +67 -0
  232. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  233. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  234. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  235. package/src/services/assets/browser-bundle.service.js +41 -0
  236. package/src/services/cache/cache.types.d.ts +107 -0
  237. package/src/services/cache/cache.types.js +0 -0
  238. package/src/services/cache/index.d.ts +7 -0
  239. package/src/services/cache/index.js +7 -0
  240. package/src/services/cache/memory-cache-store.d.ts +42 -0
  241. package/src/services/cache/memory-cache-store.js +98 -0
  242. package/src/services/cache/page-cache-service.d.ts +70 -0
  243. package/src/services/cache/page-cache-service.js +152 -0
  244. package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
  245. package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
  246. package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
  247. package/src/services/html/html-rewriter-provider.service.js +68 -0
  248. package/src/services/html/html-transformer.service.d.ts +87 -0
  249. package/src/services/html/html-transformer.service.js +216 -0
  250. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  251. package/src/services/invalidation/development-invalidation.service.js +190 -0
  252. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  253. package/src/services/module-loading/app-module-loader.service.js +0 -0
  254. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  255. package/src/services/module-loading/app-server-module-transpiler.service.js +115 -0
  256. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  257. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  258. package/src/services/module-loading/{module-loading-types.ts → module-loading-types.d.ts} +0 -1
  259. package/src/services/module-loading/module-loading-types.js +0 -0
  260. package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
  261. package/src/services/module-loading/node-bootstrap-plugin.js +204 -0
  262. package/src/services/module-loading/page-module-import.service.d.ts +76 -0
  263. package/src/services/module-loading/page-module-import.service.js +170 -0
  264. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  265. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  266. package/src/services/module-loading/source-module-support.d.ts +5 -0
  267. package/src/services/module-loading/source-module-support.js +8 -0
  268. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  269. package/src/services/runtime-state/dev-graph.service.js +162 -0
  270. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  271. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  272. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +69 -0
  273. package/src/services/runtime-state/runtime-specifier-registry.service.js +37 -0
  274. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  275. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  276. package/src/services/validation/schema-validation-service.d.ts +122 -0
  277. package/src/services/validation/schema-validation-service.js +101 -0
  278. package/src/services/validation/{standard-schema.types.ts → standard-schema.types.d.ts} +17 -20
  279. package/src/services/validation/standard-schema.types.js +0 -0
  280. package/src/static-site-generator/static-site-generator.d.ts +105 -0
  281. package/src/static-site-generator/static-site-generator.js +349 -0
  282. package/src/types/internal-types.d.ts +231 -0
  283. package/src/types/internal-types.js +0 -0
  284. package/src/types/public-types.d.ts +1257 -0
  285. package/src/types/public-types.js +0 -0
  286. package/src/utils/deep-merge.d.ts +14 -0
  287. package/src/utils/deep-merge.js +32 -0
  288. package/src/utils/hash.d.ts +1 -0
  289. package/src/utils/hash.js +7 -0
  290. package/src/utils/html-escaping.d.ts +7 -0
  291. package/src/utils/html-escaping.js +6 -0
  292. package/src/utils/html.js +4 -0
  293. package/src/utils/invariant.d.ts +5 -0
  294. package/src/utils/invariant.js +11 -0
  295. package/src/utils/locals-utils.d.ts +15 -0
  296. package/src/utils/locals-utils.js +24 -0
  297. package/src/utils/parse-cli-args.d.ts +27 -0
  298. package/src/utils/parse-cli-args.js +62 -0
  299. package/src/utils/path-utils.module.d.ts +5 -0
  300. package/src/utils/path-utils.module.js +14 -0
  301. package/src/utils/resolve-work-dir.d.ts +11 -0
  302. package/src/utils/resolve-work-dir.js +31 -0
  303. package/src/utils/runtime.d.ts +11 -0
  304. package/src/utils/runtime.js +40 -0
  305. package/src/utils/server-utils.module.d.ts +19 -0
  306. package/src/utils/server-utils.module.js +56 -0
  307. package/src/watchers/project-watcher.d.ts +136 -0
  308. package/src/watchers/project-watcher.js +275 -0
  309. package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
  310. package/src/watchers/project-watcher.test-helpers.js +52 -0
  311. package/src/adapters/abstract/application-adapter.test.ts +0 -172
  312. package/src/adapters/abstract/application-adapter.ts +0 -379
  313. package/src/adapters/abstract/router-adapter.ts +0 -30
  314. package/src/adapters/abstract/server-adapter.ts +0 -79
  315. package/src/adapters/bun/client-bridge.ts +0 -62
  316. package/src/adapters/bun/create-app.ts +0 -180
  317. package/src/adapters/bun/hmr-manager.test.ts +0 -267
  318. package/src/adapters/bun/hmr-manager.ts +0 -406
  319. package/src/adapters/bun/index.ts +0 -2
  320. package/src/adapters/bun/server-adapter.ts +0 -500
  321. package/src/adapters/bun/server-lifecycle.ts +0 -124
  322. package/src/adapters/create-app.test.ts +0 -10
  323. package/src/adapters/create-app.ts +0 -91
  324. package/src/adapters/index.ts +0 -2
  325. package/src/adapters/node/create-app.test.ts +0 -53
  326. package/src/adapters/node/create-app.ts +0 -183
  327. package/src/adapters/node/node-client-bridge.test.ts +0 -198
  328. package/src/adapters/node/node-client-bridge.ts +0 -79
  329. package/src/adapters/node/node-hmr-manager.test.ts +0 -322
  330. package/src/adapters/node/node-hmr-manager.ts +0 -378
  331. package/src/adapters/node/server-adapter.ts +0 -502
  332. package/src/adapters/node/static-content-server.test.ts +0 -60
  333. package/src/adapters/node/static-content-server.ts +0 -239
  334. package/src/adapters/shared/api-response.test.ts +0 -97
  335. package/src/adapters/shared/api-response.ts +0 -104
  336. package/src/adapters/shared/application-adapter.ts +0 -199
  337. package/src/adapters/shared/define-api-handler.ts +0 -66
  338. package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
  339. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  340. package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -90
  341. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  342. package/src/adapters/shared/fs-server-response-factory.test.ts +0 -187
  343. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  344. package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -285
  345. package/src/adapters/shared/fs-server-response-matcher.ts +0 -189
  346. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  347. package/src/adapters/shared/hmr-html-response.ts +0 -52
  348. package/src/adapters/shared/hmr-manager.contract.test.ts +0 -232
  349. package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -220
  350. package/src/adapters/shared/render-context.test.ts +0 -150
  351. package/src/adapters/shared/render-context.ts +0 -123
  352. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  353. package/src/adapters/shared/server-adapter.test.ts +0 -77
  354. package/src/adapters/shared/server-adapter.ts +0 -493
  355. package/src/adapters/shared/server-route-handler.test.ts +0 -110
  356. package/src/adapters/shared/server-route-handler.ts +0 -153
  357. package/src/adapters/shared/server-static-builder.test.ts +0 -338
  358. package/src/adapters/shared/server-static-builder.ts +0 -170
  359. package/src/build/build-adapter-serialization.test.ts +0 -281
  360. package/src/build/build-adapter.test.ts +0 -1240
  361. package/src/build/build-adapter.ts +0 -1012
  362. package/src/build/build-manifest.ts +0 -54
  363. package/src/build/build-types.ts +0 -83
  364. package/src/build/dev-build-coordinator.ts +0 -220
  365. package/src/build/esbuild-build-adapter.ts +0 -660
  366. package/src/build/runtime-build-executor.test.ts +0 -81
  367. package/src/build/runtime-build-executor.ts +0 -40
  368. package/src/build/runtime-specifier-alias-plugin.test.ts +0 -67
  369. package/src/build/runtime-specifier-alias-plugin.ts +0 -62
  370. package/src/build/runtime-specifier-aliases.ts +0 -135
  371. package/src/config/config-builder.test.ts +0 -443
  372. package/src/config/config-builder.ts +0 -742
  373. package/src/config/config-builder.typecheck.test.ts +0 -96
  374. package/src/dev/sc-server.ts +0 -143
  375. package/src/eco/eco.browser.test.ts +0 -43
  376. package/src/eco/eco.browser.ts +0 -118
  377. package/src/eco/eco.test.ts +0 -654
  378. package/src/eco/eco.ts +0 -205
  379. package/src/eco/eco.types.ts +0 -221
  380. package/src/eco/eco.utils.test.ts +0 -219
  381. package/src/eco/eco.utils.ts +0 -5
  382. package/src/eco/global-injector-map.test.ts +0 -42
  383. package/src/eco/global-injector-map.ts +0 -112
  384. package/src/eco/lazy-injector-map.test.ts +0 -66
  385. package/src/eco/lazy-injector-map.ts +0 -120
  386. package/src/eco/module-dependencies.test.ts +0 -30
  387. package/src/eco/module-dependencies.ts +0 -75
  388. package/src/errors/http-error.test.ts +0 -134
  389. package/src/errors/http-error.ts +0 -72
  390. package/src/errors/locals-access-error.ts +0 -7
  391. package/src/global/app-logger.ts +0 -4
  392. package/src/global/utils.test.ts +0 -12
  393. 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
  394. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  395. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  396. package/src/hmr/client/hmr-runtime.ts +0 -160
  397. package/src/hmr/hmr-strategy.test.ts +0 -124
  398. package/src/hmr/hmr-strategy.ts +0 -177
  399. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  400. package/src/hmr/hmr.test.e2e.ts +0 -66
  401. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  402. package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -335
  403. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  404. package/src/index.browser.ts +0 -3
  405. package/src/index.ts +0 -15
  406. package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -253
  407. package/src/integrations/ghtml/ghtml-renderer.ts +0 -97
  408. package/src/integrations/ghtml/ghtml.constants.ts +0 -1
  409. package/src/integrations/ghtml/ghtml.plugin.ts +0 -28
  410. package/src/plugins/alias-resolver-plugin.test.ts +0 -41
  411. package/src/plugins/alias-resolver-plugin.ts +0 -63
  412. package/src/plugins/eco-component-meta-plugin.test.ts +0 -406
  413. package/src/plugins/eco-component-meta-plugin.ts +0 -495
  414. package/src/plugins/foreign-jsx-override-plugin.test.ts +0 -65
  415. package/src/plugins/foreign-jsx-override-plugin.ts +0 -67
  416. package/src/plugins/integration-plugin.test.ts +0 -156
  417. package/src/plugins/integration-plugin.ts +0 -311
  418. package/src/plugins/processor.test.ts +0 -148
  419. package/src/plugins/processor.ts +0 -240
  420. package/src/plugins/source-transform.test.ts +0 -82
  421. package/src/plugins/source-transform.ts +0 -123
  422. package/src/route-renderer/orchestration/boundary-planning.service.ts +0 -146
  423. package/src/route-renderer/orchestration/component-render-context.ts +0 -318
  424. package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -2088
  425. package/src/route-renderer/orchestration/integration-renderer.ts +0 -1285
  426. package/src/route-renderer/orchestration/page-packaging.service.test.ts +0 -76
  427. package/src/route-renderer/orchestration/page-packaging.service.ts +0 -85
  428. package/src/route-renderer/orchestration/processed-asset-dedupe.ts +0 -25
  429. package/src/route-renderer/orchestration/queued-boundary-runtime.service.test.ts +0 -319
  430. package/src/route-renderer/orchestration/queued-boundary-runtime.service.ts +0 -289
  431. package/src/route-renderer/orchestration/render-execution.service.test.ts +0 -196
  432. package/src/route-renderer/orchestration/render-execution.service.ts +0 -182
  433. package/src/route-renderer/orchestration/render-output.utils.ts +0 -302
  434. package/src/route-renderer/orchestration/render-preparation.service.test.ts +0 -569
  435. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -508
  436. package/src/route-renderer/orchestration/route-shell-composer.service.ts +0 -162
  437. package/src/route-renderer/orchestration/template-serialization.test.ts +0 -110
  438. package/src/route-renderer/orchestration/template-serialization.ts +0 -117
  439. package/src/route-renderer/page-loading/component-dependency-collection.ts +0 -196
  440. package/src/route-renderer/page-loading/declared-asset-collection.ts +0 -156
  441. package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -665
  442. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -150
  443. package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +0 -75
  444. package/src/route-renderer/page-loading/lazy-entry-collection.ts +0 -167
  445. package/src/route-renderer/page-loading/lazy-trigger-planning.ts +0 -74
  446. package/src/route-renderer/page-loading/module-declaration-aggregation.ts +0 -60
  447. package/src/route-renderer/page-loading/module-declaration-scripts.ts +0 -16
  448. package/src/route-renderer/page-loading/page-dependency-bundling.ts +0 -205
  449. package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -183
  450. package/src/route-renderer/page-loading/page-module-loader.ts +0 -184
  451. package/src/route-renderer/route-renderer.ts +0 -136
  452. package/src/router/client/link-intent.test.browser.ts +0 -51
  453. package/src/router/client/link-intent.ts +0 -92
  454. package/src/router/client/navigation-coordinator.test.ts +0 -237
  455. package/src/router/client/navigation-coordinator.ts +0 -453
  456. package/src/router/server/fs-router-scanner.test.ts +0 -83
  457. package/src/router/server/fs-router-scanner.ts +0 -224
  458. package/src/router/server/fs-router.test.ts +0 -214
  459. package/src/router/server/fs-router.ts +0 -122
  460. package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +0 -66
  461. package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -476
  462. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -345
  463. package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
  464. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  465. package/src/services/assets/asset-processing-service/assets.types.ts +0 -125
  466. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -74
  467. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -96
  468. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
  469. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  470. package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +0 -104
  471. package/src/services/assets/asset-processing-service/index.ts +0 -5
  472. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  473. package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
  474. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -83
  475. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -174
  476. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  477. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +0 -192
  478. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -134
  479. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -326
  480. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -110
  481. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -227
  482. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -87
  483. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -261
  484. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -71
  485. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -81
  486. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +0 -65
  487. package/src/services/assets/browser-bundle.service.test.ts +0 -66
  488. package/src/services/assets/browser-bundle.service.ts +0 -109
  489. package/src/services/cache/cache.types.ts +0 -126
  490. package/src/services/cache/index.ts +0 -18
  491. package/src/services/cache/memory-cache-store.test.ts +0 -225
  492. package/src/services/cache/memory-cache-store.ts +0 -130
  493. package/src/services/cache/page-cache-service.test.ts +0 -175
  494. package/src/services/cache/page-cache-service.ts +0 -202
  495. package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
  496. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  497. package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
  498. package/src/services/html/html-rewriter-provider.service.ts +0 -104
  499. package/src/services/html/html-transformer.service.test.ts +0 -479
  500. package/src/services/html/html-transformer.service.ts +0 -275
  501. package/src/services/invalidation/development-invalidation.service.test.ts +0 -87
  502. package/src/services/invalidation/development-invalidation.service.ts +0 -262
  503. package/src/services/module-loading/app-module-loader.service.ts +0 -9
  504. package/src/services/module-loading/app-server-module-transpiler.service.test.ts +0 -130
  505. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -143
  506. package/src/services/module-loading/host-module-loader-registry.ts +0 -15
  507. package/src/services/module-loading/node-bootstrap-plugin.test.ts +0 -335
  508. package/src/services/module-loading/node-bootstrap-plugin.ts +0 -297
  509. package/src/services/module-loading/page-module-import.service.test.ts +0 -504
  510. package/src/services/module-loading/page-module-import.service.ts +0 -252
  511. package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -243
  512. package/src/services/module-loading/server-module-transpiler.service.ts +0 -104
  513. package/src/services/module-loading/source-module-support.ts +0 -19
  514. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  515. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  516. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  517. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  518. package/src/services/validation/schema-validation-service.test.ts +0 -223
  519. package/src/services/validation/schema-validation-service.ts +0 -204
  520. package/src/static-site-generator/static-site-generator.test.ts +0 -316
  521. package/src/static-site-generator/static-site-generator.ts +0 -462
  522. package/src/types/internal-types.ts +0 -242
  523. package/src/types/public-types.ts +0 -1443
  524. package/src/utils/deep-merge.test.ts +0 -114
  525. package/src/utils/deep-merge.ts +0 -47
  526. package/src/utils/hash.ts +0 -5
  527. package/src/utils/html-escaping.ts +0 -9
  528. package/src/utils/invariant.test.ts +0 -22
  529. package/src/utils/invariant.ts +0 -15
  530. package/src/utils/locals-utils.ts +0 -37
  531. package/src/utils/parse-cli-args.test.ts +0 -69
  532. package/src/utils/parse-cli-args.ts +0 -105
  533. package/src/utils/path-utils.module.ts +0 -14
  534. package/src/utils/path-utils.test.ts +0 -15
  535. package/src/utils/resolve-work-dir.ts +0 -45
  536. package/src/utils/runtime.ts +0 -44
  537. package/src/utils/server-utils.module.ts +0 -67
  538. package/src/utils/server-utils.test.ts +0 -38
  539. package/src/watchers/project-watcher.integration.test.ts +0 -337
  540. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  541. package/src/watchers/project-watcher.test.ts +0 -768
  542. package/src/watchers/project-watcher.ts +0 -357
  543. /package/src/utils/{html.ts → html.d.ts} +0 -0
@@ -0,0 +1,194 @@
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 "../../config/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
+ /**
11
+ * Creates the Node static-content server for one built app output directory.
12
+ */
13
+ constructor({ appConfig, options }) {
14
+ this.appConfig = appConfig;
15
+ this.options = {
16
+ hostname: options?.hostname ?? DEFAULT_ECOPAGES_HOSTNAME,
17
+ port: options?.port ?? DEFAULT_ECOPAGES_PORT
18
+ };
19
+ }
20
+ /**
21
+ * Returns whether the given content type should be served from a pre-gzipped
22
+ * companion file when available.
23
+ */
24
+ shouldServeGzip(contentType) {
25
+ return ["text/javascript", "text/css"].includes(contentType);
26
+ }
27
+ /**
28
+ * Normalizes a request pathname and rejects directory traversal attempts.
29
+ */
30
+ sanitizePath(pathname) {
31
+ const withoutLeadingSlash = pathname.replace(/^\/+/, "");
32
+ const normalizedPath = normalize(withoutLeadingSlash);
33
+ if (normalizedPath.startsWith("..") || normalizedPath.includes(`..${sep}`)) {
34
+ return null;
35
+ }
36
+ return normalizedPath;
37
+ }
38
+ /**
39
+ * Writes one HTTP response with the provided headers and optional body.
40
+ */
41
+ sendResponse(res, status, headers, body) {
42
+ res.statusCode = status;
43
+ for (const [key, value] of Object.entries(headers)) {
44
+ res.setHeader(key, value);
45
+ }
46
+ if (!body) {
47
+ res.end();
48
+ return;
49
+ }
50
+ res.end(body);
51
+ }
52
+ /**
53
+ * Serves the generated 404 page when present, or a plain-text fallback.
54
+ */
55
+ sendNotFoundPage(req, res) {
56
+ const error404TemplatePath = join(this.appConfig.absolutePaths.distDir, "404.html");
57
+ const isHead = (req.method ?? "GET").toUpperCase() === "HEAD";
58
+ if (!fileSystem.exists(error404TemplatePath)) {
59
+ this.sendResponse(
60
+ res,
61
+ 404,
62
+ { "Content-Type": "text/plain" },
63
+ isHead ? void 0 : Buffer.from(STATUS_MESSAGE[404])
64
+ );
65
+ return;
66
+ }
67
+ const file = fileSystem.readFileAsBuffer(error404TemplatePath);
68
+ this.sendResponse(res, 404, { "Content-Type": "text/html" }, isHead ? void 0 : file);
69
+ }
70
+ /**
71
+ * Serves one concrete file path, honoring gzip and HEAD semantics.
72
+ */
73
+ serveFile(req, res, filePath, status = 200) {
74
+ const contentType = ServerUtils.getContentType(extname(filePath));
75
+ const acceptsGzip = req.headers["accept-encoding"]?.includes("gzip");
76
+ const isHead = (req.method ?? "GET").toUpperCase() === "HEAD";
77
+ if (acceptsGzip && this.shouldServeGzip(contentType)) {
78
+ const gzipPath = `${filePath}.gz`;
79
+ if (fileSystem.exists(gzipPath)) {
80
+ const file2 = fileSystem.readFileAsBuffer(gzipPath);
81
+ this.sendResponse(
82
+ res,
83
+ status,
84
+ {
85
+ "Content-Type": contentType,
86
+ "Content-Encoding": "gzip",
87
+ Vary: "Accept-Encoding"
88
+ },
89
+ isHead ? void 0 : file2
90
+ );
91
+ return;
92
+ }
93
+ }
94
+ if (!fileSystem.exists(filePath)) {
95
+ this.sendNotFoundPage(req, res);
96
+ return;
97
+ }
98
+ const file = fileSystem.readFileAsBuffer(filePath);
99
+ this.sendResponse(res, status, { "Content-Type": contentType }, isHead ? void 0 : file);
100
+ }
101
+ /**
102
+ * Handles one incoming Node HTTP request against the built static output tree.
103
+ */
104
+ handleRequest(req, res) {
105
+ const method = (req.method ?? "GET").toUpperCase();
106
+ const isHead = method === "HEAD";
107
+ if (method !== "GET" && method !== "HEAD") {
108
+ this.sendResponse(
109
+ res,
110
+ 405,
111
+ { Allow: "GET, HEAD", "Content-Type": "text/plain" },
112
+ isHead ? void 0 : Buffer.from("Method Not Allowed")
113
+ );
114
+ return;
115
+ }
116
+ const url = new URL(req.url ?? "/", "http://localhost");
117
+ let decodedPathname = "/";
118
+ try {
119
+ decodedPathname = decodeURIComponent(url.pathname);
120
+ } catch {
121
+ this.sendResponse(
122
+ res,
123
+ 400,
124
+ { "Content-Type": "text/plain" },
125
+ isHead ? void 0 : Buffer.from("Invalid path")
126
+ );
127
+ return;
128
+ }
129
+ const pathname = decodedPathname === "/" ? "/index.html" : decodedPathname;
130
+ const relativePath = this.sanitizePath(pathname);
131
+ if (!relativePath) {
132
+ this.sendResponse(
133
+ res,
134
+ 400,
135
+ { "Content-Type": "text/plain" },
136
+ isHead ? void 0 : Buffer.from("Invalid path")
137
+ );
138
+ return;
139
+ }
140
+ const basePath = join(this.appConfig.absolutePaths.distDir, relativePath);
141
+ if (pathname.includes(".")) {
142
+ this.serveFile(req, res, basePath);
143
+ return;
144
+ }
145
+ const htmlCandidates = [`${basePath}.html`, join(basePath, "index.html")];
146
+ for (const candidate of htmlCandidates) {
147
+ if (fileSystem.exists(candidate)) {
148
+ this.serveFile(req, res, candidate);
149
+ return;
150
+ }
151
+ }
152
+ this.sendNotFoundPage(req, res);
153
+ }
154
+ /**
155
+ * Starts the static preview server.
156
+ */
157
+ async start() {
158
+ if (this.server) {
159
+ return this.server;
160
+ }
161
+ this.server = createServer(this.handleRequest.bind(this));
162
+ const hostname = this.options.hostname ?? DEFAULT_ECOPAGES_HOSTNAME;
163
+ const port = this.options.port ?? DEFAULT_ECOPAGES_PORT;
164
+ await new Promise((resolve) => {
165
+ this.server.listen(port, hostname, () => resolve());
166
+ });
167
+ return this.server;
168
+ }
169
+ /**
170
+ * Stops the static preview server and optionally closes active connections.
171
+ */
172
+ async stop(force = true) {
173
+ if (!this.server) {
174
+ return;
175
+ }
176
+ const activeServer = this.server;
177
+ this.server = null;
178
+ await new Promise((resolve, reject) => {
179
+ activeServer.close((error) => {
180
+ if (error) {
181
+ reject(error);
182
+ return;
183
+ }
184
+ resolve();
185
+ });
186
+ if (force) {
187
+ activeServer.closeAllConnections();
188
+ }
189
+ });
190
+ }
191
+ }
192
+ export {
193
+ NodeStaticContentServer
194
+ };
@@ -0,0 +1,52 @@
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
+ }
@@ -0,0 +1,96 @@
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
+ };
@@ -0,0 +1,18 @@
1
+ import type { ApiHandler, ApiHandlerContext, Middleware, RouteGroupBuilder, RouteOptions } from '../../types/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
+ }
@@ -0,0 +1,90 @@
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
+ };
@@ -0,0 +1,25 @@
1
+ import type { ApiHandler, ApiHandlerContext, Middleware, RouteSchema, TypedGroupHandlerContext } from '../../types/public-types.js';
2
+ type UniversalContext = ApiHandlerContext<Request, unknown>;
3
+ type SchemaHandlerContext<TSchema extends RouteSchema | undefined, TContext extends UniversalContext> = TSchema extends RouteSchema ? TypedGroupHandlerContext<TSchema, TContext> : TContext;
4
+ export declare function defineApiHandler<TPath extends string, TSchema extends RouteSchema | undefined = undefined, TContext extends UniversalContext = UniversalContext>(handler: Omit<ApiHandler<TPath, Request, unknown>, 'handler' | 'middleware' | 'schema'> & {
5
+ handler: (context: SchemaHandlerContext<TSchema, TContext>) => Promise<Response> | Response;
6
+ middleware?: Middleware<Request, unknown, TContext>[];
7
+ schema?: TSchema;
8
+ }): ApiHandler<TPath, Request, unknown>;
9
+ export interface GroupHandler<TPrefix extends string = string> {
10
+ prefix: TPrefix;
11
+ middleware?: readonly Middleware<Request, unknown, any>[];
12
+ routes: readonly ApiHandler<string, Request, unknown>[];
13
+ }
14
+ type GroupDefineHandler<TContext extends UniversalContext> = <const TPath extends string, TSchema extends RouteSchema | undefined = undefined>(handler: Omit<ApiHandler<TPath, Request, unknown>, 'handler' | 'middleware' | 'schema'> & {
15
+ path: TPath;
16
+ handler: (context: SchemaHandlerContext<TSchema, TContext>) => Promise<Response> | Response;
17
+ middleware?: Middleware<Request, unknown, TContext>[];
18
+ schema?: TSchema;
19
+ }) => ApiHandler<TPath, Request, unknown>;
20
+ export declare function defineGroupHandler<TPrefix extends string, TMiddleware extends readonly Middleware<Request, unknown, any>[] = [], TContext extends UniversalContext = TMiddleware extends readonly Middleware<Request, unknown, infer TGroupContext>[] ? TGroupContext : UniversalContext>(config: {
21
+ prefix: TPrefix;
22
+ middleware?: TMiddleware;
23
+ routes: (define: GroupDefineHandler<TContext>) => readonly ApiHandler<string, Request, unknown>[];
24
+ }): GroupHandler<TPrefix>;
25
+ export {};
@@ -0,0 +1,15 @@
1
+ function defineApiHandler(handler) {
2
+ return handler;
3
+ }
4
+ function defineGroupHandler(config) {
5
+ const define = ((handler) => handler);
6
+ return {
7
+ prefix: config.prefix,
8
+ middleware: config.middleware,
9
+ routes: config.routes(define)
10
+ };
11
+ }
12
+ export {
13
+ defineApiHandler,
14
+ defineGroupHandler
15
+ };
@@ -0,0 +1,38 @@
1
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
2
+ import type { StaticRoute } from '../../types/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
+ }
@@ -0,0 +1,103 @@
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
+ function getViewIntegrationName(view) {
7
+ return view.config?.integration ?? view.config?.__eco?.integration;
8
+ }
9
+ class ExplicitStaticRouteMatcher {
10
+ appConfig;
11
+ routeRendererFactory;
12
+ staticRoutes;
13
+ constructor({ appConfig, routeRendererFactory, staticRoutes }) {
14
+ this.appConfig = appConfig;
15
+ this.routeRendererFactory = routeRendererFactory;
16
+ this.staticRoutes = staticRoutes;
17
+ }
18
+ /**
19
+ * Match a request URL against explicit static routes.
20
+ * Returns the matched route and extracted params, or null if no match.
21
+ */
22
+ match(url) {
23
+ const pathname = new URL(url).pathname;
24
+ for (const route of this.staticRoutes) {
25
+ const params = this.matchRoute(route.path, pathname);
26
+ if (params !== null) {
27
+ return { route, params };
28
+ }
29
+ }
30
+ return null;
31
+ }
32
+ /**
33
+ * Match a route pattern against a pathname.
34
+ * Supports :param and [param] syntax.
35
+ * Returns extracted params or null if no match.
36
+ */
37
+ matchRoute(pattern, pathname) {
38
+ const patternSegments = pattern.split("/").filter(Boolean);
39
+ const pathSegments = pathname.split("/").filter(Boolean);
40
+ if (patternSegments.length !== pathSegments.length) {
41
+ const lastPattern = patternSegments[patternSegments.length - 1];
42
+ const isCatchAll = lastPattern?.startsWith("[...") || lastPattern?.startsWith(":...");
43
+ if (!isCatchAll) {
44
+ return null;
45
+ }
46
+ }
47
+ const params = {};
48
+ for (let i = 0; i < patternSegments.length; i++) {
49
+ const patternPart = patternSegments[i];
50
+ const pathPart = pathSegments[i];
51
+ if (patternPart.startsWith(":...") || patternPart.startsWith("[...")) {
52
+ const paramName = patternPart.replace(/^(:\.\.\.|\[\.\.\.)/, "").replace(/\]$/, "");
53
+ params[paramName] = pathSegments.slice(i).join("/");
54
+ return params;
55
+ }
56
+ if (patternPart.startsWith(":")) {
57
+ const paramName = patternPart.slice(1);
58
+ params[paramName] = pathPart;
59
+ } else if (patternPart.startsWith("[") && patternPart.endsWith("]")) {
60
+ const paramName = patternPart.slice(1, -1);
61
+ params[paramName] = pathPart;
62
+ } else if (patternPart !== pathPart) {
63
+ return null;
64
+ }
65
+ }
66
+ return params;
67
+ }
68
+ /**
69
+ * Handle a matched explicit static route.
70
+ * Resolves the loader and renders the view using the appropriate integration renderer.
71
+ */
72
+ async handleMatch(match) {
73
+ const { route, params } = match;
74
+ try {
75
+ const mod = await route.loader();
76
+ const view = mod.default;
77
+ const integrationName = getViewIntegrationName(view);
78
+ if (!integrationName) {
79
+ throw new Error(EXPLICIT_STATIC_ROUTE_MATCHER_ERRORS.missingIntegration(route.path));
80
+ }
81
+ const renderer = this.routeRendererFactory.getRendererByIntegration(integrationName);
82
+ if (!renderer) {
83
+ throw new Error(EXPLICIT_STATIC_ROUTE_MATCHER_ERRORS.noRendererForIntegration(integrationName));
84
+ }
85
+ const props = view.staticProps ? (await view.staticProps({
86
+ pathname: { params },
87
+ appConfig: this.appConfig,
88
+ runtimeOrigin: this.appConfig.baseUrl
89
+ })).props : {};
90
+ return renderer.renderToResponse(view, props, {});
91
+ } catch (error) {
92
+ appLogger.error(
93
+ `Error rendering explicit static route ${route.path}:`,
94
+ error instanceof Error ? error : String(error)
95
+ );
96
+ throw error;
97
+ }
98
+ }
99
+ }
100
+ export {
101
+ EXPLICIT_STATIC_ROUTE_MATCHER_ERRORS,
102
+ ExplicitStaticRouteMatcher
103
+ };