@ecopages/core 0.2.0-alpha.9 → 0.2.1-beta.0

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 (471) hide show
  1. package/README.md +79 -28
  2. package/package.json +94 -116
  3. package/src/adapters/README.md +2 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +19 -115
  12. package/src/adapters/bun/hmr-manager.js +25 -301
  13. package/src/adapters/bun/index.d.ts +1 -1
  14. package/src/adapters/bun/index.js +2 -2
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +100 -32
  18. package/src/adapters/bun/server-adapter.js +142 -65
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +1 -5
  24. package/src/adapters/index.js +1 -7
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +22 -103
  31. package/src/adapters/node/node-hmr-manager.js +26 -289
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +19 -42
  37. package/src/adapters/node/server-adapter.js +94 -139
  38. package/src/adapters/node/static-content-server.d.ts +1 -1
  39. package/src/adapters/node/static-content-server.js +1 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/adapters/shared/define-api-handler.d.ts +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
  53. package/src/adapters/shared/fs-server-response-matcher.js +72 -46
  54. package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
  55. package/src/adapters/shared/hmr-html-response.d.ts +1 -1
  56. package/src/adapters/shared/hmr-html-response.js +4 -3
  57. package/src/adapters/shared/render-context.d.ts +5 -3
  58. package/src/adapters/shared/render-context.js +24 -1
  59. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  60. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  61. package/src/adapters/shared/runtime-host.d.ts +12 -0
  62. package/src/adapters/shared/server-adapter.d.ts +22 -11
  63. package/src/adapters/shared/server-adapter.js +183 -133
  64. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  65. package/src/adapters/shared/server-route-handler.js +4 -4
  66. package/src/adapters/shared/server-static-builder.d.ts +8 -7
  67. package/src/adapters/shared/server-static-builder.js +6 -5
  68. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  69. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  70. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  71. package/src/build/README.md +57 -67
  72. package/src/build/browser-runtime-manifest.d.ts +31 -0
  73. package/src/build/browser-runtime-manifest.js +61 -0
  74. package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
  75. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  76. package/src/build/browser-runtime-plugin.d.ts +78 -0
  77. package/src/build/browser-runtime-plugin.js +173 -0
  78. package/src/build/build-adapter.d.ts +384 -63
  79. package/src/build/build-adapter.js +129 -54
  80. package/src/build/build-manifest.d.ts +6 -0
  81. package/src/build/build-manifest.js +21 -2
  82. package/src/build/build-types.d.ts +2 -2
  83. package/src/build/rolldown-adapter-helpers.d.ts +58 -0
  84. package/src/build/rolldown-adapter-helpers.js +265 -0
  85. package/src/build/rolldown-build-adapter.d.ts +28 -0
  86. package/src/build/rolldown-build-adapter.js +65 -0
  87. package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
  88. package/src/build/rolldown-dev-build-adapter.js +166 -0
  89. package/src/build/rolldown-plugin-bridge.d.ts +59 -0
  90. package/src/build/rolldown-plugin-bridge.js +199 -0
  91. package/src/build/runtime-build-executor.d.ts +15 -7
  92. package/src/build/runtime-build-executor.js +8 -9
  93. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  94. package/src/build/runtime-build-output-normalizer.js +111 -0
  95. package/src/build/serialized-build-executor.d.ts +64 -0
  96. package/src/build/serialized-build-executor.js +63 -0
  97. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  98. package/src/build/server-side-css-shim-plugin.js +35 -0
  99. package/src/cache/index.d.ts +6 -0
  100. package/src/cache/index.js +6 -0
  101. package/src/cache/module-parse-cache.d.ts +65 -0
  102. package/src/cache/module-parse-cache.js +75 -0
  103. package/src/config/README.md +5 -2
  104. package/src/config/config-builder.d.ts +41 -13
  105. package/src/config/config-builder.js +62 -24
  106. package/src/declarations.d.ts +1 -1
  107. package/src/dev/host-runtime.d.ts +10 -0
  108. package/src/dev/host-runtime.js +24 -0
  109. package/src/dev/sc-server.d.ts +1 -1
  110. package/src/dev/sc-server.js +1 -1
  111. package/src/eco/eco.browser.d.ts +2 -0
  112. package/src/eco/eco.browser.js +88 -0
  113. package/src/eco/eco.js +50 -45
  114. package/src/eco/eco.types.d.ts +60 -8
  115. package/src/eco/eco.utils.d.ts +1 -40
  116. package/src/eco/eco.utils.js +5 -35
  117. package/src/eco/global-injector-map.d.ts +3 -3
  118. package/src/eco/global-injector-map.js +2 -2
  119. package/src/eco/lazy-injector-map.d.ts +2 -2
  120. package/src/errors/index.d.ts +1 -0
  121. package/src/errors/index.js +3 -1
  122. package/src/hmr/client/hmr-runtime.js +9 -1
  123. package/src/hmr/hmr-strategy.d.ts +16 -13
  124. package/src/hmr/hmr-strategy.js +22 -7
  125. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  126. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  127. package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
  128. package/src/hmr/strategies/js-hmr-strategy.js +5 -10
  129. package/src/index.browser.d.ts +2 -2
  130. package/src/index.browser.js +1 -1
  131. package/src/index.d.ts +3 -2
  132. package/src/index.js +15 -4
  133. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
  134. package/src/integrations/ghtml/ghtml-renderer.js +24 -29
  135. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  136. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  137. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  138. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  139. package/src/plugins/README.md +1 -0
  140. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  141. package/src/plugins/alias-resolver-cache.js +106 -0
  142. package/src/plugins/alias-resolver-plugin.d.ts +5 -1
  143. package/src/plugins/alias-resolver-plugin.js +19 -7
  144. package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
  145. package/src/plugins/eco-component-meta-plugin.js +43 -25
  146. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  147. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  148. package/src/plugins/integration-plugin.d.ts +136 -42
  149. package/src/plugins/integration-plugin.js +99 -31
  150. package/src/plugins/processor.d.ts +4 -2
  151. package/src/plugins/processor.js +8 -3
  152. package/src/plugins/source-transform.d.ts +46 -0
  153. package/src/plugins/source-transform.js +71 -0
  154. package/src/route-renderer/GRAPH.md +80 -318
  155. package/src/route-renderer/README.md +74 -78
  156. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  157. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  158. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  159. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  160. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  161. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  162. package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
  163. package/src/route-renderer/orchestration/integration-renderer.js +660 -258
  164. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  165. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  166. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  167. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  168. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  169. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  170. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  171. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  172. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  173. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  174. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  175. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  176. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  177. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  178. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  179. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  180. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  181. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  182. package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
  183. package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
  184. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  185. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  186. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  187. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  188. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  189. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  190. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  191. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  192. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  193. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  194. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  195. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  196. package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
  197. package/src/route-renderer/page-loading/page-module-loader.js +8 -5
  198. package/src/route-renderer/route-renderer.d.ts +31 -23
  199. package/src/route-renderer/route-renderer.js +17 -24
  200. package/src/router/README.md +76 -8
  201. package/src/router/client/navigation-coordinator.d.ts +20 -0
  202. package/src/router/client/navigation-coordinator.js +2 -2
  203. package/src/router/server/route-registry.d.ts +78 -0
  204. package/src/router/server/route-registry.js +262 -0
  205. package/src/services/README.md +1 -2
  206. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  207. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  208. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
  209. package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
  210. package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
  211. package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
  212. package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
  215. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  216. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  217. package/src/services/assets/asset-processing-service/index.d.ts +6 -5
  218. package/src/services/assets/asset-processing-service/index.js +6 -5
  219. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  220. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  221. package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
  222. package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
  223. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  229. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
  230. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
  231. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
  235. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  236. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
  237. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
  239. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  240. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  241. package/src/services/assets/browser-bundle.service.d.ts +44 -3
  242. package/src/services/assets/browser-bundle.service.js +15 -7
  243. package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
  244. package/src/services/html/html-rewriter-provider.service.js +4 -1
  245. package/src/services/html/html-transformer.service.d.ts +22 -3
  246. package/src/services/html/html-transformer.service.js +101 -35
  247. package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
  248. package/src/services/invalidation/development-invalidation.service.js +1 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/page-module-import.service.d.ts +32 -8
  258. package/src/services/module-loading/page-module-import.service.js +83 -22
  259. package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
  260. package/src/services/module-loading/server-module-transpiler.service.js +5 -2
  261. package/src/services/module-loading/source-module-support.d.ts +5 -0
  262. package/src/services/module-loading/source-module-support.js +8 -0
  263. package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
  264. package/src/services/runtime-state/dev-graph.service.js +10 -10
  265. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
  266. package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
  267. package/src/static-site-generator/static-site-generator.d.ts +23 -28
  268. package/src/static-site-generator/static-site-generator.js +119 -156
  269. package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
  270. package/src/types/internal-types.js +0 -0
  271. package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
  272. package/src/types/public-types.js +0 -0
  273. package/src/utils/html-escaping.d.ts +7 -0
  274. package/src/utils/html-escaping.js +6 -0
  275. package/src/utils/locals-utils.d.ts +1 -1
  276. package/src/utils/parse-cli-args.d.ts +4 -1
  277. package/src/utils/parse-cli-args.js +16 -1
  278. package/src/utils/resolve-work-dir.js +1 -1
  279. package/src/watchers/project-watcher.d.ts +4 -4
  280. package/src/watchers/project-watcher.js +35 -41
  281. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  282. package/src/watchers/project-watcher.test-helpers.js +5 -5
  283. package/CHANGELOG.md +0 -31
  284. package/src/adapters/abstract/application-adapter.ts +0 -337
  285. package/src/adapters/abstract/router-adapter.ts +0 -30
  286. package/src/adapters/abstract/server-adapter.ts +0 -79
  287. package/src/adapters/bun/client-bridge.ts +0 -62
  288. package/src/adapters/bun/create-app.ts +0 -189
  289. package/src/adapters/bun/hmr-manager.ts +0 -409
  290. package/src/adapters/bun/index.ts +0 -2
  291. package/src/adapters/bun/server-adapter.ts +0 -499
  292. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  293. package/src/adapters/bun/server-lifecycle.js +0 -92
  294. package/src/adapters/bun/server-lifecycle.ts +0 -124
  295. package/src/adapters/index.ts +0 -6
  296. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  297. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  298. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  299. package/src/adapters/node/create-app.ts +0 -179
  300. package/src/adapters/node/index.d.ts +0 -6
  301. package/src/adapters/node/index.js +0 -11
  302. package/src/adapters/node/index.ts +0 -16
  303. package/src/adapters/node/node-client-bridge.ts +0 -79
  304. package/src/adapters/node/node-hmr-manager.ts +0 -381
  305. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  306. package/src/adapters/node/runtime-adapter.js +0 -306
  307. package/src/adapters/node/runtime-adapter.ts +0 -439
  308. package/src/adapters/node/server-adapter.ts +0 -488
  309. package/src/adapters/node/static-content-server.ts +0 -239
  310. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  311. package/src/adapters/node/write-runtime-manifest.js +0 -12
  312. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/define-api-handler.ts +0 -66
  316. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  317. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  318. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  319. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  320. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  321. package/src/adapters/shared/hmr-html-response.ts +0 -52
  322. package/src/adapters/shared/render-context.ts +0 -120
  323. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  324. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  325. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  326. package/src/adapters/shared/server-adapter.ts +0 -489
  327. package/src/adapters/shared/server-route-handler.ts +0 -153
  328. package/src/adapters/shared/server-static-builder.ts +0 -166
  329. package/src/build/build-adapter.ts +0 -361
  330. package/src/build/build-manifest.ts +0 -54
  331. package/src/build/build-types.ts +0 -83
  332. package/src/build/dev-build-coordinator.d.ts +0 -74
  333. package/src/build/dev-build-coordinator.js +0 -161
  334. package/src/build/dev-build-coordinator.ts +0 -221
  335. package/src/build/esbuild-build-adapter.d.ts +0 -72
  336. package/src/build/esbuild-build-adapter.js +0 -422
  337. package/src/build/esbuild-build-adapter.ts +0 -559
  338. package/src/build/runtime-build-executor.ts +0 -34
  339. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  340. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  341. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  342. package/src/config/config-builder.ts +0 -706
  343. package/src/constants.ts +0 -54
  344. package/src/create-app.ts +0 -87
  345. package/src/dev/sc-server.ts +0 -143
  346. package/src/eco/component-render-context.d.ts +0 -105
  347. package/src/eco/component-render-context.js +0 -87
  348. package/src/eco/component-render-context.ts +0 -224
  349. package/src/eco/eco.ts +0 -242
  350. package/src/eco/eco.types.ts +0 -221
  351. package/src/eco/eco.utils.ts +0 -89
  352. package/src/eco/global-injector-map.ts +0 -112
  353. package/src/eco/lazy-injector-map.ts +0 -120
  354. package/src/eco/module-dependencies.ts +0 -75
  355. package/src/errors/http-error.ts +0 -72
  356. package/src/errors/index.ts +0 -2
  357. package/src/errors/locals-access-error.ts +0 -7
  358. package/src/global/app-logger.ts +0 -4
  359. package/src/hmr/client/hmr-runtime.ts +0 -152
  360. package/src/hmr/hmr-strategy.ts +0 -172
  361. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  362. package/src/hmr/hmr.test.e2e.ts +0 -66
  363. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  364. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  365. package/src/index.browser.ts +0 -3
  366. package/src/index.ts +0 -5
  367. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  368. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  369. package/src/internal-types.ts +0 -232
  370. package/src/plugins/alias-resolver-plugin.ts +0 -63
  371. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  372. package/src/plugins/integration-plugin.ts +0 -226
  373. package/src/plugins/processor.ts +0 -240
  374. package/src/plugins/runtime-capability.ts +0 -14
  375. package/src/public-types.ts +0 -1317
  376. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  377. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  378. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  379. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  380. package/src/route-renderer/component-graph/component-graph.js +0 -72
  381. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  382. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  383. package/src/route-renderer/component-graph/component-marker.js +0 -46
  384. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  385. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  386. package/src/route-renderer/component-graph/component-reference.js +0 -19
  387. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  388. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  389. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  390. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  391. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  392. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  393. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  394. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  395. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  396. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  397. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  398. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  399. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  400. package/src/route-renderer/route-renderer.ts +0 -115
  401. package/src/router/client/link-intent.test.browser.ts +0 -51
  402. package/src/router/client/link-intent.ts +0 -92
  403. package/src/router/client/navigation-coordinator.ts +0 -433
  404. package/src/router/server/fs-router-scanner.d.ts +0 -41
  405. package/src/router/server/fs-router-scanner.js +0 -156
  406. package/src/router/server/fs-router-scanner.ts +0 -219
  407. package/src/router/server/fs-router.d.ts +0 -26
  408. package/src/router/server/fs-router.js +0 -100
  409. package/src/router/server/fs-router.ts +0 -122
  410. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  411. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  412. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  413. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  414. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  415. package/src/services/assets/asset-processing-service/index.ts +0 -5
  416. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  417. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  418. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  419. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  420. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  421. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  422. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  423. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  424. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  425. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  426. package/src/services/assets/browser-bundle.service.ts +0 -53
  427. package/src/services/cache/cache.types.ts +0 -126
  428. package/src/services/cache/index.ts +0 -18
  429. package/src/services/cache/memory-cache-store.ts +0 -130
  430. package/src/services/cache/page-cache-service.ts +0 -202
  431. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  432. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  433. package/src/services/html/html-transformer.service.ts +0 -279
  434. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  435. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  436. package/src/services/module-loading/page-module-import.service.ts +0 -200
  437. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  438. package/src/services/module-loading/server-loader.service.js +0 -32
  439. package/src/services/module-loading/server-loader.service.ts +0 -130
  440. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  441. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  442. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  444. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  445. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  446. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  447. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  448. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  449. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  450. package/src/services/validation/schema-validation-service.ts +0 -204
  451. package/src/services/validation/standard-schema.types.ts +0 -68
  452. package/src/static-site-generator/static-site-generator.ts +0 -462
  453. package/src/utils/css.d.ts +0 -1
  454. package/src/utils/css.js +0 -7
  455. package/src/utils/css.ts +0 -5
  456. package/src/utils/deep-merge.ts +0 -47
  457. package/src/utils/hash.ts +0 -5
  458. package/src/utils/html.ts +0 -1
  459. package/src/utils/invariant.ts +0 -15
  460. package/src/utils/locals-utils.ts +0 -37
  461. package/src/utils/parse-cli-args.ts +0 -83
  462. package/src/utils/path-utils.module.ts +0 -14
  463. package/src/utils/resolve-work-dir.ts +0 -45
  464. package/src/utils/runtime.ts +0 -44
  465. package/src/utils/server-utils.module.ts +0 -67
  466. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  467. package/src/watchers/project-watcher.ts +0 -363
  468. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  469. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  470. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  471. /package/src/{constants.js → config/constants.js} +0 -0
@@ -1,8 +1,6 @@
1
- import type { Middleware, ApiHandlerContext, RequestLocals } from '../../public-types.js';
1
+ import type { FileRouteMiddleware, FileRouteMiddlewareContext, RequestLocals } from '../../types/public-types.js';
2
2
  import type { PageCacheService } from '../../services/cache/page-cache-service.js';
3
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
4
  readonly middlewareRequiresDynamic: (filePath: string) => string;
7
5
  };
8
6
  /**
@@ -26,7 +24,7 @@ export declare class FileRouteMiddlewarePipeline {
26
24
  * @throws LocalsAccessError When middleware is configured for a non-dynamic page.
27
25
  */
28
26
  assertValidConfiguration(input: {
29
- middleware: Middleware[];
27
+ middleware: FileRouteMiddleware[];
30
28
  pageCacheStrategy: 'static' | 'dynamic' | {
31
29
  revalidate: number;
32
30
  tags?: string[];
@@ -36,9 +34,8 @@ export declare class FileRouteMiddlewarePipeline {
36
34
  /**
37
35
  * Creates the request-scoped middleware context used by page middleware.
38
36
  *
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.
37
+ * The context intentionally omits `render()` and `renderPartial()` because
38
+ * rendering is owned by the page route pipeline, not by middleware stages.
42
39
  *
43
40
  * @param input Request details and the mutable locals store.
44
41
  * @returns Middleware execution context.
@@ -47,7 +44,7 @@ export declare class FileRouteMiddlewarePipeline {
47
44
  request: Request;
48
45
  params: Record<string, string>;
49
46
  locals: RequestLocals;
50
- }): ApiHandlerContext;
47
+ }): FileRouteMiddlewareContext;
51
48
  /**
52
49
  * Runs the middleware chain and eventually delegates to the render callback.
53
50
  *
@@ -58,8 +55,8 @@ export declare class FileRouteMiddlewarePipeline {
58
55
  * @returns Response from middleware or final render stage.
59
56
  */
60
57
  run(input: {
61
- middleware: Middleware[];
62
- context: ApiHandlerContext;
58
+ middleware: FileRouteMiddleware[];
59
+ context: FileRouteMiddlewareContext;
63
60
  renderResponse: () => Promise<Response>;
64
61
  }): Promise<Response>;
65
62
  }
@@ -2,8 +2,6 @@ import { createRequire } from "../../utils/locals-utils.js";
2
2
  import { ApiResponseBuilder } from "./api-response.js";
3
3
  import { LocalsAccessError } from "../../errors/locals-access-error.js";
4
4
  const FILE_ROUTE_MIDDLEWARE_PIPELINE_ERRORS = {
5
- CTX_RENDER_UNAVAILABLE: "[ecopages] ctx.render is not available in file-route middleware",
6
- CTX_RENDER_PARTIAL_UNAVAILABLE: "[ecopages] ctx.renderPartial is not available in file-route middleware",
7
5
  middlewareRequiresDynamic: (filePath) => `[ecopages] Page middleware requires cache: 'dynamic'. Page: ${filePath}`
8
6
  };
9
7
  class FileRouteMiddlewarePipeline {
@@ -30,9 +28,8 @@ class FileRouteMiddlewarePipeline {
30
28
  /**
31
29
  * Creates the request-scoped middleware context used by page middleware.
32
30
  *
33
- * The context intentionally disables `render()` and `renderPartial()` inside
34
- * file-route middleware because rendering is owned by the page route pipeline,
35
- * not by middleware stages.
31
+ * The context intentionally omits `render()` and `renderPartial()` because
32
+ * rendering is owned by the page route pipeline, not by middleware stages.
36
33
  *
37
34
  * @param input Request details and the mutable locals store.
38
35
  * @returns Middleware execution context.
@@ -48,12 +45,6 @@ class FileRouteMiddlewarePipeline {
48
45
  },
49
46
  locals: input.locals,
50
47
  require: createRequire(() => context.locals),
51
- render: async () => {
52
- throw new Error(FILE_ROUTE_MIDDLEWARE_PIPELINE_ERRORS.CTX_RENDER_UNAVAILABLE);
53
- },
54
- renderPartial: async () => {
55
- throw new Error(FILE_ROUTE_MIDDLEWARE_PIPELINE_ERRORS.CTX_RENDER_PARTIAL_UNAVAILABLE);
56
- },
57
48
  json: (data, options) => {
58
49
  const builder = new ApiResponseBuilder();
59
50
  if (options?.status) builder.status(options.status);
@@ -1,19 +1,23 @@
1
- import type { EcoPagesAppConfig, FileSystemServerOptions } from '../../internal-types.js';
2
- import type { RouteRendererBody } from '../../public-types.js';
3
- import type { RouteRendererFactory } from '../../route-renderer/route-renderer.js';
1
+ import type { FileSystemServerOptions } from '../../types/internal-types.js';
2
+ import type { RouteRendererBody } from '../../types/public-types.js';
3
+ /**
4
+ * Builds HTTP responses for static files and shared file-system fallbacks.
5
+ */
4
6
  export declare class FileSystemServerResponseFactory {
5
- private appConfig;
6
- private routeRendererFactory;
7
7
  private options;
8
- constructor({ appConfig, routeRendererFactory, options, }: {
9
- appConfig: EcoPagesAppConfig;
10
- routeRendererFactory: RouteRendererFactory;
8
+ constructor({ options }: {
11
9
  options: FileSystemServerOptions;
12
10
  });
13
11
  isHtml(contentType: string): contentType is "text/html";
14
12
  shouldEnableGzip(contentType: string): boolean;
15
13
  createResponseWithBody(body: RouteRendererBody, init?: ResponseInit): Promise<Response>;
16
14
  createDefaultNotFoundResponse(): Promise<Response>;
17
- createCustomNotFoundResponse(): Promise<Response>;
18
- createFileResponse(filePath: string, contentType: string): Promise<Response>;
15
+ /**
16
+ * Wraps already-rendered HTML in a 404 response envelope.
17
+ */
18
+ createHtmlNotFoundResponse(body: RouteRendererBody): Promise<Response>;
19
+ /**
20
+ * Reads a static file response, returning `null` when the file is missing.
21
+ */
22
+ createFileResponse(filePath: string, contentType: string): Promise<Response | null>;
19
23
  }
@@ -1,17 +1,9 @@
1
- import { STATUS_MESSAGE } from "../../constants.js";
1
+ import { STATUS_MESSAGE } from "../../config/constants.js";
2
2
  import { appLogger } from "../../global/app-logger.js";
3
3
  import { fileSystem } from "@ecopages/file-system";
4
4
  class FileSystemServerResponseFactory {
5
- appConfig;
6
- routeRendererFactory;
7
5
  options;
8
- constructor({
9
- appConfig,
10
- routeRendererFactory,
11
- options
12
- }) {
13
- this.appConfig = appConfig;
14
- this.routeRendererFactory = routeRendererFactory;
6
+ constructor({ options }) {
15
7
  this.options = options;
16
8
  }
17
9
  isHtml(contentType) {
@@ -34,22 +26,11 @@ class FileSystemServerResponseFactory {
34
26
  status: 404
35
27
  });
36
28
  }
37
- async createCustomNotFoundResponse() {
38
- const error404TemplatePath = this.appConfig.absolutePaths.error404TemplatePath;
39
- try {
40
- fileSystem.verifyFileExists(error404TemplatePath);
41
- } catch {
42
- appLogger.debug(
43
- "Custom 404 template not found, falling back to default 404 response",
44
- error404TemplatePath
45
- );
46
- return this.createDefaultNotFoundResponse();
47
- }
48
- const routeRenderer = this.routeRendererFactory.createRenderer(error404TemplatePath);
49
- const result = await routeRenderer.createRoute({
50
- file: error404TemplatePath
51
- });
52
- return await this.createResponseWithBody(result.body, {
29
+ /**
30
+ * Wraps already-rendered HTML in a 404 response envelope.
31
+ */
32
+ async createHtmlNotFoundResponse(body) {
33
+ return await this.createResponseWithBody(body, {
53
34
  status: 404,
54
35
  statusText: STATUS_MESSAGE[404],
55
36
  headers: {
@@ -57,6 +38,9 @@ class FileSystemServerResponseFactory {
57
38
  }
58
39
  });
59
40
  }
41
+ /**
42
+ * Reads a static file response, returning `null` when the file is missing.
43
+ */
60
44
  async createFileResponse(filePath, contentType) {
61
45
  try {
62
46
  let file;
@@ -88,7 +72,7 @@ class FileSystemServerResponseFactory {
88
72
  } else {
89
73
  appLogger.error("Error reading file", filePath, err);
90
74
  }
91
- return this.createCustomNotFoundResponse();
75
+ return null;
92
76
  }
93
77
  }
94
78
  }
@@ -1,17 +1,14 @@
1
- import type { EcoPagesAppConfig, MatchResult } from '../../internal-types.js';
2
- import type { RouteRendererFactory } from '../../route-renderer/route-renderer.js';
3
- import type { FSRouter } from '../../router/server/fs-router.js';
1
+ import type { EcoPagesAppConfig, MatchResult } from '../../types/internal-types.js';
2
+ import type { PageRendererResolver } from '../../route-renderer/route-renderer.js';
3
+ import type { RouteRegistry } from '../../router/server/route-registry.js';
4
4
  import type { PageCacheService } from '../../services/cache/page-cache-service.js';
5
5
  import type { CacheStrategy } from '../../services/cache/cache.types.js';
6
6
  import type { FileSystemServerResponseFactory } from './fs-server-response-factory.js';
7
- export declare const FILE_SYSTEM_RESPONSE_MATCHER_ERRORS: {
8
- readonly transpilePageModuleFailed: (details: string) => string;
9
- readonly noTranspiledOutputForPageModule: (filePath: string) => string;
10
- };
11
7
  export interface FileSystemResponseMatcherOptions {
12
8
  appConfig: EcoPagesAppConfig;
13
- router: FSRouter;
14
- routeRendererFactory: RouteRendererFactory;
9
+ assetPrefix: string;
10
+ router: RouteRegistry;
11
+ routeRendererFactory: PageRendererResolver;
15
12
  fileSystemResponseFactory: FileSystemServerResponseFactory;
16
13
  /** Optional cache service. When null, caching is disabled. */
17
14
  cacheService?: PageCacheService | null;
@@ -21,24 +18,22 @@ export interface FileSystemResponseMatcherOptions {
21
18
  /**
22
19
  * Matches file-system routes to rendered HTML responses.
23
20
  *
24
- * This class sits at the request-time boundary between router matches and the
25
- * render pipeline. It coordinates page module inspection, request-local policy,
21
+ * This render pipeline coordinates page module inspection, request-local policy,
26
22
  * renderer invocation, middleware execution, cache integration, and fallback
27
23
  * error translation.
28
24
  */
29
25
  export declare class FileSystemResponseMatcher {
30
26
  private appConfig;
27
+ private assetPrefix;
31
28
  private router;
32
29
  private routeRendererFactory;
33
30
  private fileSystemResponseFactory;
34
- private serverModuleTranspiler;
35
31
  private pageRequestCacheCoordinator;
36
32
  private fileRouteMiddlewarePipeline;
37
- constructor({ appConfig, router, routeRendererFactory, fileSystemResponseFactory, cacheService, defaultCacheStrategy, }: FileSystemResponseMatcherOptions);
33
+ constructor({ appConfig, assetPrefix, router, routeRendererFactory, fileSystemResponseFactory, cacheService, defaultCacheStrategy, }: FileSystemResponseMatcherOptions);
38
34
  /**
39
35
  * Resolves unmatched paths either as static asset requests or as the custom
40
36
  * not-found page.
41
- *
42
37
  * @param requestUrl Incoming pathname.
43
38
  * @returns Static file response or rendered 404 response.
44
39
  */
@@ -55,14 +50,19 @@ export declare class FileSystemResponseMatcher {
55
50
  * @returns Final response for the matched route.
56
51
  */
57
52
  handleMatch(match: MatchResult, request?: Request): Promise<Response>;
53
+ /**
54
+ * Renders the app-owned custom 404 page, falling back to the default text 404
55
+ * when the page template cannot be resolved.
56
+ */
57
+ private renderCustomNotFoundResponse;
58
+ private createExecutionPlan;
58
59
  /**
59
60
  * Loads the matched page module for request-time inspection.
60
61
  *
61
62
  * The matcher needs access to page-level metadata such as `cache` and
62
- * `middleware` before full rendering starts, so it uses the shared module
63
- * import service directly rather than going through route rendering. The
64
- * app config is injected explicitly so build ownership stays at the adapter
65
- * boundary instead of leaking through nested router collaborators.
63
+ * `middleware` before full rendering starts, so it asks the owning route
64
+ * renderer to load the page module. That preserves integration-specific page
65
+ * import setup for request-time inspection as well as for full rendering.
66
66
  *
67
67
  * @param filePath Absolute page module path.
68
68
  * @returns Imported page module.
@@ -1,26 +1,21 @@
1
1
  import path from "node:path";
2
2
  import { appLogger } from "../../global/app-logger.js";
3
3
  import { PageRequestCacheCoordinator } from "../../services/cache/page-request-cache-coordinator.service.js";
4
- import { getAppServerModuleTranspiler } from "../../services/module-loading/app-server-module-transpiler.service.js";
5
- import { resolveInternalExecutionDir } from "../../utils/resolve-work-dir.js";
6
4
  import { ServerUtils } from "../../utils/server-utils.module.js";
7
5
  import { FileRouteMiddlewarePipeline } from "./file-route-middleware-pipeline.js";
8
6
  import { LocalsAccessError } from "../../errors/locals-access-error.js";
9
7
  import { isDevelopmentRuntime } from "../../utils/runtime.js";
10
- const FILE_SYSTEM_RESPONSE_MATCHER_ERRORS = {
11
- transpilePageModuleFailed: (details) => `Error transpiling page module: ${details}`,
12
- noTranspiledOutputForPageModule: (filePath) => `No transpiled output generated for page module: ${filePath}`
13
- };
14
8
  class FileSystemResponseMatcher {
15
9
  appConfig;
10
+ assetPrefix;
16
11
  router;
17
12
  routeRendererFactory;
18
13
  fileSystemResponseFactory;
19
- serverModuleTranspiler;
20
14
  pageRequestCacheCoordinator;
21
15
  fileRouteMiddlewarePipeline;
22
16
  constructor({
23
17
  appConfig,
18
+ assetPrefix,
24
19
  router,
25
20
  routeRendererFactory,
26
21
  fileSystemResponseFactory,
@@ -28,29 +23,29 @@ class FileSystemResponseMatcher {
28
23
  defaultCacheStrategy = "static"
29
24
  }) {
30
25
  this.appConfig = appConfig;
26
+ this.assetPrefix = assetPrefix;
31
27
  this.router = router;
32
28
  this.routeRendererFactory = routeRendererFactory;
33
29
  this.fileSystemResponseFactory = fileSystemResponseFactory;
34
- this.serverModuleTranspiler = getAppServerModuleTranspiler(appConfig);
35
30
  this.pageRequestCacheCoordinator = new PageRequestCacheCoordinator(cacheService, defaultCacheStrategy);
36
31
  this.fileRouteMiddlewarePipeline = new FileRouteMiddlewarePipeline(cacheService);
37
32
  }
38
33
  /**
39
34
  * Resolves unmatched paths either as static asset requests or as the custom
40
35
  * not-found page.
41
- *
42
36
  * @param requestUrl Incoming pathname.
43
37
  * @returns Static file response or rendered 404 response.
44
38
  */
45
39
  async handleNoMatch(requestUrl) {
46
40
  const isStaticFileRequest = ServerUtils.hasKnownExtension(requestUrl);
47
41
  if (!isStaticFileRequest) {
48
- return this.fileSystemResponseFactory.createCustomNotFoundResponse();
42
+ return this.renderCustomNotFoundResponse();
49
43
  }
50
44
  const relativeUrl = requestUrl.startsWith("/") ? requestUrl.slice(1) : requestUrl;
51
- const filePath = path.join(this.router.assetPrefix, relativeUrl);
45
+ const filePath = path.join(this.assetPrefix, relativeUrl);
52
46
  const contentType = ServerUtils.getContentType(filePath);
53
- return this.fileSystemResponseFactory.createFileResponse(filePath, contentType);
47
+ const response = await this.fileSystemResponseFactory.createFileResponse(filePath, contentType);
48
+ return response ?? this.renderCustomNotFoundResponse();
54
49
  }
55
50
  /**
56
51
  * Handles a matched file-system page route.
@@ -64,34 +59,25 @@ class FileSystemResponseMatcher {
64
59
  * @returns Final response for the matched route.
65
60
  */
66
61
  async handleMatch(match, request) {
67
- const cacheKey = this.pageRequestCacheCoordinator.buildCacheKey(match);
68
62
  try {
69
- const resolvedRequest = request ?? new Request(new URL(cacheKey, this.router.origin).toString(), {
70
- method: "GET"
71
- });
72
- const localsStore = {};
73
- const pageModule = await this.importPageModule(match.filePath);
74
- const Page = pageModule?.default;
75
- const pageMiddleware = Page?.middleware ?? [];
76
- const pageCacheStrategy = Page?.cache ?? this.pageRequestCacheCoordinator.getDefaultCacheStrategy();
77
- const localsForRender = pageCacheStrategy === "dynamic" ? localsStore : void 0;
63
+ const executionPlan = await this.createExecutionPlan(match, request);
78
64
  this.fileRouteMiddlewarePipeline.assertValidConfiguration({
79
- middleware: pageMiddleware,
80
- pageCacheStrategy,
81
- filePath: match.filePath
65
+ middleware: executionPlan.pageMiddleware,
66
+ pageCacheStrategy: executionPlan.pageCacheStrategy,
67
+ filePath: executionPlan.pageFilePath
82
68
  });
83
- const routeRenderer = this.routeRendererFactory.createRenderer(match.filePath);
69
+ const routeRenderer = this.routeRendererFactory.getPageRenderer(executionPlan.pageFilePath);
84
70
  const middlewareContext = this.fileRouteMiddlewarePipeline.createContext({
85
- request: resolvedRequest,
71
+ request: executionPlan.request,
86
72
  params: match.params,
87
- locals: localsStore
73
+ locals: executionPlan.localsStore
88
74
  });
89
75
  const renderFn = async () => {
90
- const result = await routeRenderer.createRoute({
91
- file: match.filePath,
76
+ const result = await routeRenderer.execute({
77
+ file: executionPlan.pageFilePath,
92
78
  params: match.params,
93
79
  query: match.query,
94
- locals: localsForRender
80
+ locals: executionPlan.localsForRender
95
81
  });
96
82
  const html = await this.pageRequestCacheCoordinator.bodyToString(result.body);
97
83
  const strategy = result.cacheStrategy ?? this.pageRequestCacheCoordinator.getDefaultCacheStrategy();
@@ -99,13 +85,13 @@ class FileSystemResponseMatcher {
99
85
  };
100
86
  const renderResponse = async () => {
101
87
  return this.pageRequestCacheCoordinator.render({
102
- cacheKey,
103
- pageCacheStrategy,
88
+ cacheKey: executionPlan.cacheKey,
89
+ pageCacheStrategy: executionPlan.pageCacheStrategy,
104
90
  renderFn
105
91
  });
106
92
  };
107
93
  return await this.fileRouteMiddlewarePipeline.run({
108
- middleware: pageMiddleware,
94
+ middleware: executionPlan.pageMiddleware,
109
95
  context: middlewareContext,
110
96
  renderResponse
111
97
  });
@@ -121,30 +107,71 @@ class FileSystemResponseMatcher {
121
107
  }
122
108
  if (error instanceof Error) {
123
109
  if (isDevelopmentRuntime() || appLogger.isDebugEnabled()) {
124
- appLogger.error(`[FileSystemResponseMatcher] ${error.message} at ${match.pathname}`);
110
+ appLogger.error(`[FileSystemResponseMatcher] ${error.message} at ${match.requestedPathname}`);
125
111
  }
126
112
  }
127
- return this.fileSystemResponseFactory.createCustomNotFoundResponse();
113
+ return this.renderCustomNotFoundResponse();
114
+ }
115
+ }
116
+ /**
117
+ * Renders the app-owned custom 404 page, falling back to the default text 404
118
+ * when the page template cannot be resolved.
119
+ */
120
+ async renderCustomNotFoundResponse() {
121
+ const error404TemplatePath = this.appConfig.absolutePaths.error404TemplatePath;
122
+ try {
123
+ const routeRenderer = this.routeRendererFactory.getPageRenderer(error404TemplatePath);
124
+ const result = await routeRenderer.execute({
125
+ file: error404TemplatePath
126
+ });
127
+ return this.fileSystemResponseFactory.createHtmlNotFoundResponse(result.body);
128
+ } catch {
129
+ appLogger.debug(
130
+ "Custom 404 template not found, falling back to default 404 response",
131
+ error404TemplatePath
132
+ );
133
+ return this.fileSystemResponseFactory.createDefaultNotFoundResponse();
128
134
  }
129
135
  }
136
+ async createExecutionPlan(match, request) {
137
+ const cacheKey = this.pageRequestCacheCoordinator.buildCacheKey({
138
+ pathname: match.requestedPathname,
139
+ query: match.query
140
+ });
141
+ const resolvedRequest = request ?? new Request(new URL(cacheKey, this.router.origin).toString(), {
142
+ method: "GET"
143
+ });
144
+ const localsStore = {};
145
+ const pageFilePath = match.templateRoute.filePath;
146
+ const pageModule = await this.importPageModule(pageFilePath);
147
+ const Page = pageModule?.default;
148
+ const pageMiddleware = Page?.middleware ?? [];
149
+ const pageCacheStrategy = Page?.cache ?? this.pageRequestCacheCoordinator.getDefaultCacheStrategy();
150
+ return {
151
+ cacheKey,
152
+ request: resolvedRequest,
153
+ pageFilePath,
154
+ pageMiddleware,
155
+ pageCacheStrategy,
156
+ localsStore,
157
+ localsForRender: pageCacheStrategy === "dynamic" ? localsStore : void 0
158
+ };
159
+ }
130
160
  /**
131
161
  * Loads the matched page module for request-time inspection.
132
162
  *
133
163
  * The matcher needs access to page-level metadata such as `cache` and
134
- * `middleware` before full rendering starts, so it uses the shared module
135
- * import service directly rather than going through route rendering. The
136
- * app config is injected explicitly so build ownership stays at the adapter
137
- * boundary instead of leaking through nested router collaborators.
164
+ * `middleware` before full rendering starts, so it asks the owning route
165
+ * renderer to load the page module. That preserves integration-specific page
166
+ * import setup for request-time inspection as well as for full rendering.
138
167
  *
139
168
  * @param filePath Absolute page module path.
140
169
  * @returns Imported page module.
141
170
  */
142
171
  async importPageModule(filePath) {
143
- return this.serverModuleTranspiler.importModule({
144
- filePath,
145
- outdir: path.join(resolveInternalExecutionDir(this.appConfig), ".server-modules-meta"),
146
- transpileErrorMessage: FILE_SYSTEM_RESPONSE_MATCHER_ERRORS.transpilePageModuleFailed,
147
- noOutputMessage: FILE_SYSTEM_RESPONSE_MATCHER_ERRORS.noTranspiledOutputForPageModule
172
+ const routeRenderer = this.routeRendererFactory.getPageRenderer(filePath);
173
+ return routeRenderer.loadPageModule(filePath, {
174
+ cacheScope: "request-metadata"
148
175
  });
149
176
  }
150
177
  /**
@@ -155,6 +182,5 @@ class FileSystemResponseMatcher {
155
182
  }
156
183
  }
157
184
  export {
158
- FILE_SYSTEM_RESPONSE_MATCHER_ERRORS,
159
185
  FileSystemResponseMatcher
160
186
  };
@@ -1,7 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { fileSystem } from "@ecopages/file-system";
3
3
  import { appLogger } from "../../global/app-logger.js";
4
- import { RESOLVED_ASSETS_DIR } from "../../constants.js";
4
+ import { RESOLVED_ASSETS_DIR } from "../../config/constants.js";
5
5
  class HmrEntrypointRegistrar {
6
6
  options;
7
7
  constructor(options) {
@@ -1,4 +1,4 @@
1
- import type { IHmrManager } from '../../public-types';
1
+ import type { IHmrManager } from '../../types/public-types.js';
2
2
  /**
3
3
  * Returns whether a response is HTML and therefore eligible for development HMR
4
4
  * runtime injection.
@@ -9,16 +9,17 @@ function shouldInjectHmrHtmlResponse(watch, hmrManager) {
9
9
  }
10
10
  async function injectHmrRuntimeIntoHtmlResponse(response) {
11
11
  const html = await response.text();
12
+ const headers = new Headers(response.headers);
13
+ headers.set("Cache-Control", "no-store, must-revalidate");
14
+ headers.delete("Content-Length");
12
15
  if (html.includes(HMR_RUNTIME_IMPORT)) {
13
16
  return new Response(html, {
14
17
  status: response.status,
15
18
  statusText: response.statusText,
16
- headers: response.headers
19
+ headers
17
20
  });
18
21
  }
19
22
  const updatedHtml = html.replace(/<\/html>/i, `${HMR_RUNTIME_SCRIPT}</html>`);
20
- const headers = new Headers(response.headers);
21
- headers.delete("Content-Length");
22
23
  return new Response(updatedHtml, {
23
24
  status: response.status,
24
25
  statusText: response.statusText,
@@ -1,7 +1,9 @@
1
- import type { RenderContext } from '../../public-types.js';
2
- import type { IntegrationPlugin } from '../../plugins/integration-plugin.js';
1
+ import type { RenderContext } from '../../types/public-types.js';
2
+ import type { AnyIntegrationPlugin } from '../../plugins/integration-plugin.js';
3
3
  export interface CreateRenderContextOptions {
4
- integrations: IntegrationPlugin[];
4
+ integrations: AnyIntegrationPlugin[];
5
+ rendererModules?: unknown;
6
+ importServerModule?: (filePath: string) => Promise<unknown>;
5
7
  }
6
8
  /**
7
9
  * Creates a render context for route handlers.
@@ -1,4 +1,8 @@
1
+ import { fileURLToPath } from "node:url";
1
2
  import { invariant } from "../../utils/invariant.js";
3
+ function resolveServerModulePath(filePath) {
4
+ return filePath instanceof URL ? fileURLToPath(filePath) : filePath;
5
+ }
2
6
  function mergePropsWithLocals(props, locals) {
3
7
  if (!locals || typeof props !== "object" || props === null) {
4
8
  return props;
@@ -15,9 +19,28 @@ function createRenderContext(options) {
15
19
  );
16
20
  const integration = integrations.find((i) => i.name === integrationName);
17
21
  invariant(!!integration, `No integration found for: ${integrationName}`);
18
- return integration.initializeRenderer();
22
+ return integration.initializeRenderer({
23
+ rendererModules: options.rendererModules
24
+ });
19
25
  };
20
26
  const renderContext = {
27
+ importServerModule: async (filePath) => {
28
+ invariant(!!options.importServerModule, "Server module importing is not available in this render context.");
29
+ return await options.importServerModule(resolveServerModulePath(filePath));
30
+ },
31
+ async renderServerModule(filePath, props, renderOptions) {
32
+ const module = await renderContext.importServerModule(filePath);
33
+ const view = module.default;
34
+ const locals = this?.locals;
35
+ const mergedProps = mergePropsWithLocals(props ?? {}, locals);
36
+ const renderer = getRendererForView(view);
37
+ const ctx = {
38
+ partial: false,
39
+ status: renderOptions?.status,
40
+ headers: renderOptions?.headers
41
+ };
42
+ return await renderer.renderToResponse(view, mergedProps, ctx);
43
+ },
21
44
  async render(view, props, renderOptions) {
22
45
  const locals = this?.locals;
23
46
  const mergedProps = mergePropsWithLocals(props ?? {}, locals);
@@ -0,0 +1,26 @@
1
+ import type { ReturnParseCliArgs } from '../../utils/parse-cli-args.js';
2
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
3
+ export type RuntimeBinding = {
4
+ preferredPort: number;
5
+ preferredHostname: string;
6
+ runtimeOrigin: string;
7
+ serveOptions: Record<string, unknown>;
8
+ watch: boolean;
9
+ };
10
+ export type StaticRuntimeMode = {
11
+ requiresFetchRuntime: boolean;
12
+ canBuildWithoutRuntimeServer: boolean;
13
+ };
14
+ export declare function resolveServeRuntimeOrigin(serveOptions: {
15
+ hostname?: string;
16
+ port?: number | string;
17
+ }): string;
18
+ export declare function resolveRuntimeBinding(options: {
19
+ cliArgs: ReturnParseCliArgs;
20
+ serverOptions?: Record<string, unknown>;
21
+ env?: NodeJS.ProcessEnv;
22
+ }): RuntimeBinding;
23
+ export declare function resolveStaticRuntimeMode(options: {
24
+ appConfig: EcoPagesAppConfig;
25
+ cliArgs: ReturnParseCliArgs;
26
+ }): StaticRuntimeMode;
@@ -0,0 +1,46 @@
1
+ import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
2
+ function normalizeOriginHostname(hostname) {
3
+ if (hostname.includes(":") && !hostname.startsWith("[") && !hostname.endsWith("]")) {
4
+ return `[${hostname}]`;
5
+ }
6
+ return hostname;
7
+ }
8
+ function resolveServeRuntimeOrigin(serveOptions) {
9
+ const hostname = normalizeOriginHostname(String(serveOptions.hostname ?? DEFAULT_ECOPAGES_HOSTNAME));
10
+ const port = Number(serveOptions.port ?? DEFAULT_ECOPAGES_PORT);
11
+ return `http://${hostname}:${port}`;
12
+ }
13
+ function resolveRuntimeBinding(options) {
14
+ const env = options.env ?? process.env;
15
+ const preferredPort = options.cliArgs.port ?? (env.ECOPAGES_PORT ? Number(env.ECOPAGES_PORT) : void 0) ?? DEFAULT_ECOPAGES_PORT;
16
+ const preferredHostname = options.cliArgs.hostname ?? env.ECOPAGES_HOSTNAME ?? DEFAULT_ECOPAGES_HOSTNAME;
17
+ return {
18
+ preferredPort,
19
+ preferredHostname,
20
+ runtimeOrigin: resolveServeRuntimeOrigin({
21
+ hostname: preferredHostname,
22
+ port: preferredPort
23
+ }),
24
+ serveOptions: {
25
+ port: preferredPort,
26
+ hostname: preferredHostname,
27
+ ...options.serverOptions ?? {}
28
+ },
29
+ watch: options.cliArgs.dev
30
+ };
31
+ }
32
+ function resolveStaticRuntimeMode(options) {
33
+ const requiresFetchRuntime = options.appConfig.integrations.some(
34
+ (integration) => integration.staticBuildStep === "fetch"
35
+ );
36
+ const canBuildWithoutRuntimeServer = (options.cliArgs.build || options.cliArgs.preview) && !requiresFetchRuntime;
37
+ return {
38
+ requiresFetchRuntime,
39
+ canBuildWithoutRuntimeServer
40
+ };
41
+ }
42
+ export {
43
+ resolveRuntimeBinding,
44
+ resolveServeRuntimeOrigin,
45
+ resolveStaticRuntimeMode
46
+ };
@@ -0,0 +1,12 @@
1
+ export interface RuntimeHost<TServer, TServeOptions> {
2
+ start(options: RuntimeHostStartOptions<TServeOptions>): Promise<TServer>;
3
+ stop(server: TServer, options?: {
4
+ force?: boolean;
5
+ }): Promise<void>;
6
+ getOrigin(server: TServer, fallbackServeOptions: TServeOptions): string;
7
+ }
8
+ export interface RuntimeHostStartOptions<TServeOptions> {
9
+ serveOptions: TServeOptions;
10
+ handleRequest(request: Request): Promise<Response>;
11
+ onError(error: Error): Promise<void> | void;
12
+ }