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

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 (454) hide show
  1. package/README.md +268 -14
  2. package/package.json +92 -110
  3. package/src/adapters/README.md +39 -0
  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 +30 -62
  12. package/src/adapters/bun/hmr-manager.js +30 -194
  13. package/src/adapters/bun/index.d.ts +2 -3
  14. package/src/adapters/bun/index.js +3 -3
  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 +93 -32
  18. package/src/adapters/bun/server-adapter.js +166 -89
  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 +2 -6
  24. package/src/adapters/index.js +2 -8
  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 +38 -48
  31. package/src/adapters/node/node-hmr-manager.js +31 -203
  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 +20 -72
  37. package/src/adapters/node/server-adapter.js +99 -203
  38. package/src/adapters/node/static-content-server.d.ts +37 -1
  39. package/src/adapters/node/static-content-server.js +29 -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/{define-api-handler.d.ts → 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 -13
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -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 +20 -16
  53. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  54. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  56. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  57. package/src/adapters/shared/hmr-html-response.js +33 -0
  58. package/src/adapters/shared/render-context.d.ts +5 -3
  59. package/src/adapters/shared/render-context.js +27 -3
  60. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  61. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  62. package/src/adapters/shared/runtime-host.d.ts +12 -0
  63. package/src/adapters/shared/server-adapter.d.ts +33 -12
  64. package/src/adapters/shared/server-adapter.js +215 -132
  65. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  66. package/src/adapters/shared/server-route-handler.js +7 -16
  67. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  68. package/src/adapters/shared/server-static-builder.js +65 -11
  69. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  70. package/src/adapters/shared/shared-hmr-manager.js +240 -0
  71. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  72. package/src/build/README.md +107 -0
  73. package/src/build/build-adapter.d.ts +175 -3
  74. package/src/build/build-adapter.js +625 -16
  75. package/src/build/build-manifest.d.ts +27 -0
  76. package/src/build/build-manifest.js +30 -0
  77. package/src/build/dev-build-coordinator.d.ts +72 -0
  78. package/src/build/dev-build-coordinator.js +154 -0
  79. package/src/build/esbuild-build-adapter.d.ts +16 -6
  80. package/src/build/esbuild-build-adapter.js +202 -75
  81. package/src/build/runtime-build-executor.d.ts +14 -0
  82. package/src/build/runtime-build-executor.js +22 -0
  83. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  84. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  85. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  86. package/src/build/runtime-specifier-aliases.js +95 -0
  87. package/src/config/README.md +36 -0
  88. package/src/config/config-builder.d.ts +54 -29
  89. package/src/config/config-builder.js +256 -50
  90. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  91. package/src/{constants.js → config/constants.js} +4 -0
  92. package/src/declarations.d.ts +19 -14
  93. package/src/dev/host-runtime.d.ts +10 -0
  94. package/src/dev/host-runtime.js +24 -0
  95. package/src/dev/sc-server.d.ts +1 -1
  96. package/src/dev/sc-server.js +1 -1
  97. package/src/eco/README.md +70 -16
  98. package/src/eco/eco.browser.d.ts +2 -0
  99. package/src/eco/eco.browser.js +88 -0
  100. package/src/eco/eco.js +63 -54
  101. package/src/eco/eco.types.d.ts +69 -6
  102. package/src/eco/eco.utils.d.ts +1 -40
  103. package/src/eco/eco.utils.js +5 -35
  104. package/src/eco/global-injector-map.d.ts +3 -3
  105. package/src/eco/global-injector-map.js +2 -2
  106. package/src/eco/lazy-injector-map.d.ts +2 -2
  107. package/src/errors/index.d.ts +1 -0
  108. package/src/errors/index.js +3 -1
  109. package/src/hmr/README.md +26 -0
  110. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  111. package/src/hmr/client/hmr-runtime.js +38 -7
  112. package/src/hmr/hmr-strategy.d.ts +16 -13
  113. package/src/hmr/hmr-strategy.js +22 -7
  114. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  115. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  116. package/src/hmr/hmr.test.e2e.js +26 -33
  117. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  118. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  119. package/src/hmr/strategies/js-hmr-strategy.d.ts +40 -42
  120. package/src/hmr/strategies/js-hmr-strategy.js +24 -43
  121. package/src/index.browser.d.ts +2 -2
  122. package/src/index.browser.js +1 -1
  123. package/src/index.d.ts +4 -3
  124. package/src/index.js +16 -5
  125. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  126. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  127. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  128. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  129. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  130. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  131. package/src/plugins/README.md +35 -0
  132. package/src/plugins/alias-resolver-plugin.d.ts +1 -0
  133. package/src/plugins/alias-resolver-plugin.js +27 -5
  134. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  135. package/src/plugins/eco-component-meta-plugin.js +42 -24
  136. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  137. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  138. package/src/plugins/integration-plugin.d.ts +147 -29
  139. package/src/plugins/integration-plugin.js +103 -14
  140. package/src/plugins/processor.d.ts +17 -2
  141. package/src/plugins/processor.js +22 -3
  142. package/src/plugins/runtime-capability.d.ts +9 -0
  143. package/src/plugins/source-transform.d.ts +46 -0
  144. package/src/plugins/source-transform.js +71 -0
  145. package/src/route-renderer/GRAPH.md +83 -325
  146. package/src/route-renderer/README.md +73 -90
  147. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  148. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  149. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  150. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  151. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  152. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  153. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  154. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  155. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  156. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  157. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  158. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  159. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  160. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  161. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  162. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  163. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  164. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  165. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  166. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  167. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  168. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  169. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  170. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  171. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  172. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  173. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  174. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  175. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  176. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  177. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  178. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  179. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  180. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  181. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  182. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  183. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  184. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  185. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  186. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  187. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  188. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  189. package/src/route-renderer/route-renderer.d.ts +57 -14
  190. package/src/route-renderer/route-renderer.js +30 -18
  191. package/src/router/README.md +94 -0
  192. package/src/router/client/link-intent.d.ts +53 -0
  193. package/src/router/client/link-intent.js +34 -0
  194. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  195. package/src/router/client/link-intent.test.browser.js +43 -0
  196. package/src/router/client/navigation-coordinator.d.ts +169 -0
  197. package/src/router/client/navigation-coordinator.js +215 -0
  198. package/src/router/server/route-registry.d.ts +78 -0
  199. package/src/router/server/route-registry.js +262 -0
  200. package/src/services/README.md +28 -0
  201. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  202. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  203. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  204. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  205. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  208. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  209. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  210. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  211. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  212. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  213. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  214. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  215. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  216. package/src/services/assets/asset-processing-service/index.js +6 -0
  217. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  218. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  219. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  220. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  221. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  222. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  223. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  224. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  225. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  226. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  227. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
  228. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
  229. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  230. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  231. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  232. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  233. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  234. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  235. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  236. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  237. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  238. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  239. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  240. package/src/services/assets/browser-bundle.service.js +41 -0
  241. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  242. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  243. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  244. package/src/services/html/html-rewriter-provider.service.js +68 -0
  245. package/src/services/html/html-transformer.service.d.ts +96 -0
  246. package/src/services/html/html-transformer.service.js +287 -0
  247. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  248. package/src/services/invalidation/development-invalidation.service.js +190 -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 +24 -0
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
  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/node-bootstrap-plugin.d.ts +38 -0
  258. package/src/services/module-loading/node-bootstrap-plugin.js +215 -0
  259. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  260. package/src/services/module-loading/page-module-import.service.js +191 -0
  261. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  262. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  263. package/src/services/module-loading/source-module-support.d.ts +5 -0
  264. package/src/services/module-loading/source-module-support.js +8 -0
  265. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  266. package/src/services/runtime-state/dev-graph.service.js +162 -0
  267. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  268. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  269. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  270. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  271. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  272. package/src/static-site-generator/README.md +26 -0
  273. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  274. package/src/static-site-generator/static-site-generator.js +182 -138
  275. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  276. package/src/types/internal-types.js +0 -0
  277. package/src/{public-types.d.ts → types/public-types.d.ts} +239 -31
  278. package/src/types/public-types.js +0 -0
  279. package/src/utils/html-escaping.d.ts +7 -0
  280. package/src/utils/html-escaping.js +6 -0
  281. package/src/utils/locals-utils.d.ts +1 -1
  282. package/src/utils/parse-cli-args.d.ts +4 -1
  283. package/src/utils/parse-cli-args.js +16 -1
  284. package/src/utils/resolve-work-dir.d.ts +11 -0
  285. package/src/utils/resolve-work-dir.js +31 -0
  286. package/src/watchers/project-watcher.d.ts +11 -7
  287. package/src/watchers/project-watcher.js +69 -75
  288. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  289. package/src/watchers/project-watcher.test-helpers.js +6 -5
  290. package/CHANGELOG.md +0 -94
  291. package/src/adapters/abstract/application-adapter.ts +0 -337
  292. package/src/adapters/abstract/router-adapter.ts +0 -30
  293. package/src/adapters/abstract/server-adapter.ts +0 -79
  294. package/src/adapters/bun/client-bridge.ts +0 -62
  295. package/src/adapters/bun/create-app.ts +0 -189
  296. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  297. package/src/adapters/bun/define-api-handler.ts +0 -114
  298. package/src/adapters/bun/hmr-manager.ts +0 -276
  299. package/src/adapters/bun/index.ts +0 -3
  300. package/src/adapters/bun/server-adapter.ts +0 -492
  301. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  302. package/src/adapters/bun/server-lifecycle.js +0 -120
  303. package/src/adapters/bun/server-lifecycle.ts +0 -154
  304. package/src/adapters/index.ts +0 -6
  305. package/src/adapters/node/create-app.ts +0 -179
  306. package/src/adapters/node/index.d.ts +0 -4
  307. package/src/adapters/node/index.js +0 -8
  308. package/src/adapters/node/index.ts +0 -9
  309. package/src/adapters/node/node-client-bridge.ts +0 -79
  310. package/src/adapters/node/node-hmr-manager.ts +0 -271
  311. package/src/adapters/node/server-adapter.ts +0 -561
  312. package/src/adapters/node/static-content-server.ts +0 -203
  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/explicit-static-route-matcher.ts +0 -134
  316. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  317. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  318. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  319. package/src/adapters/shared/render-context.ts +0 -105
  320. package/src/adapters/shared/server-adapter.ts +0 -442
  321. package/src/adapters/shared/server-route-handler.ts +0 -166
  322. package/src/adapters/shared/server-static-builder.ts +0 -82
  323. package/src/build/build-adapter.ts +0 -133
  324. package/src/build/build-types.ts +0 -83
  325. package/src/build/esbuild-build-adapter.ts +0 -511
  326. package/src/config/config-builder.ts +0 -474
  327. package/src/constants.ts +0 -39
  328. package/src/create-app.ts +0 -87
  329. package/src/define-api-handler.js +0 -15
  330. package/src/define-api-handler.ts +0 -66
  331. package/src/dev/sc-server.ts +0 -143
  332. package/src/eco/component-render-context.d.ts +0 -105
  333. package/src/eco/component-render-context.js +0 -77
  334. package/src/eco/component-render-context.ts +0 -202
  335. package/src/eco/eco.ts +0 -221
  336. package/src/eco/eco.types.ts +0 -202
  337. package/src/eco/eco.utils.ts +0 -89
  338. package/src/eco/global-injector-map.ts +0 -112
  339. package/src/eco/lazy-injector-map.ts +0 -120
  340. package/src/eco/module-dependencies.ts +0 -75
  341. package/src/errors/http-error.ts +0 -72
  342. package/src/errors/index.ts +0 -2
  343. package/src/errors/locals-access-error.ts +0 -7
  344. package/src/global/app-logger.ts +0 -4
  345. package/src/hmr/client/hmr-runtime.ts +0 -121
  346. package/src/hmr/hmr-strategy.ts +0 -172
  347. package/src/hmr/hmr.test.e2e.ts +0 -75
  348. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  349. package/src/hmr/strategies/js-hmr-strategy.ts +0 -327
  350. package/src/index.browser.ts +0 -3
  351. package/src/index.ts +0 -5
  352. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  353. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  354. package/src/internal-types.ts +0 -212
  355. package/src/plugins/alias-resolver-plugin.ts +0 -45
  356. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  357. package/src/plugins/integration-plugin.ts +0 -184
  358. package/src/plugins/processor.ts +0 -220
  359. package/src/public-types.ts +0 -1255
  360. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  361. package/src/route-renderer/component-graph-executor.js +0 -31
  362. package/src/route-renderer/component-graph-executor.ts +0 -84
  363. package/src/route-renderer/component-graph.d.ts +0 -42
  364. package/src/route-renderer/component-graph.js +0 -72
  365. package/src/route-renderer/component-graph.ts +0 -159
  366. package/src/route-renderer/component-marker.d.ts +0 -52
  367. package/src/route-renderer/component-marker.js +0 -46
  368. package/src/route-renderer/component-marker.ts +0 -117
  369. package/src/route-renderer/dependency-resolver.js +0 -428
  370. package/src/route-renderer/dependency-resolver.ts +0 -596
  371. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  372. package/src/route-renderer/html-post-processing.service.js +0 -86
  373. package/src/route-renderer/html-post-processing.service.ts +0 -103
  374. package/src/route-renderer/integration-renderer.d.ts +0 -339
  375. package/src/route-renderer/integration-renderer.js +0 -526
  376. package/src/route-renderer/integration-renderer.ts +0 -696
  377. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  378. package/src/route-renderer/marker-graph-resolver.js +0 -93
  379. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  380. package/src/route-renderer/page-module-loader.d.ts +0 -61
  381. package/src/route-renderer/page-module-loader.ts +0 -153
  382. package/src/route-renderer/render-execution.service.d.ts +0 -69
  383. package/src/route-renderer/render-execution.service.js +0 -91
  384. package/src/route-renderer/render-execution.service.ts +0 -158
  385. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  386. package/src/route-renderer/render-preparation.service.js +0 -243
  387. package/src/route-renderer/render-preparation.service.ts +0 -358
  388. package/src/route-renderer/route-renderer.ts +0 -80
  389. package/src/router/fs-router-scanner.d.ts +0 -41
  390. package/src/router/fs-router-scanner.js +0 -155
  391. package/src/router/fs-router-scanner.ts +0 -217
  392. package/src/router/fs-router.d.ts +0 -26
  393. package/src/router/fs-router.js +0 -100
  394. package/src/router/fs-router.ts +0 -122
  395. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  396. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  397. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  398. package/src/services/asset-processing-service/assets.types.ts +0 -112
  399. package/src/services/asset-processing-service/index.d.ts +0 -3
  400. package/src/services/asset-processing-service/index.js +0 -3
  401. package/src/services/asset-processing-service/index.ts +0 -3
  402. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  403. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  404. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  405. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  406. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  407. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  408. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  409. package/src/services/asset-processing-service/processors/index.js +0 -5
  410. package/src/services/asset-processing-service/processors/index.ts +0 -5
  411. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  412. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  413. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  414. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  415. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  416. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  417. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  418. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  419. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  420. package/src/services/cache/cache.types.ts +0 -126
  421. package/src/services/cache/index.ts +0 -18
  422. package/src/services/cache/memory-cache-store.ts +0 -130
  423. package/src/services/cache/page-cache-service.ts +0 -202
  424. package/src/services/html-transformer.service.d.ts +0 -50
  425. package/src/services/html-transformer.service.js +0 -163
  426. package/src/services/html-transformer.service.ts +0 -217
  427. package/src/services/page-module-import.service.d.ts +0 -37
  428. package/src/services/page-module-import.service.js +0 -88
  429. package/src/services/page-module-import.service.ts +0 -129
  430. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  431. package/src/services/schema-validation-service.ts +0 -204
  432. package/src/services/validation/standard-schema.types.ts +0 -68
  433. package/src/static-site-generator/static-site-generator.ts +0 -359
  434. package/src/utils/css.d.ts +0 -1
  435. package/src/utils/css.js +0 -7
  436. package/src/utils/css.ts +0 -5
  437. package/src/utils/deep-merge.ts +0 -47
  438. package/src/utils/hash.ts +0 -5
  439. package/src/utils/html.ts +0 -1
  440. package/src/utils/invariant.ts +0 -15
  441. package/src/utils/locals-utils.ts +0 -37
  442. package/src/utils/parse-cli-args.ts +0 -83
  443. package/src/utils/path-utils.module.ts +0 -14
  444. package/src/utils/runtime.ts +0 -44
  445. package/src/utils/server-utils.module.ts +0 -67
  446. package/src/watchers/project-watcher.test-helpers.ts +0 -40
  447. package/src/watchers/project-watcher.ts +0 -364
  448. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  449. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  450. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  451. /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
  452. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  453. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  454. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -1,17 +1,47 @@
1
1
  import path from "node:path";
2
- import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../constants.js";
3
- import { GHTML_PLUGIN_NAME, ghtmlPlugin } from "../integrations/ghtml/ghtml.plugin.js";
2
+ import {
3
+ DEFAULT_ECOPAGES_DIST_DIR,
4
+ DEFAULT_ECOPAGES_HOSTNAME,
5
+ DEFAULT_ECOPAGES_PORT,
6
+ DEFAULT_ECOPAGES_WORK_DIR
7
+ } from "../config/constants.js";
8
+ import {
9
+ collectConfiguredAppBuildManifestContributions,
10
+ createBuildAdapter,
11
+ getAppServerBuildPlugins,
12
+ setAppBuildAdapter,
13
+ setAppBuildExecutor,
14
+ updateAppBuildManifest
15
+ } from "../build/build-adapter.js";
16
+ import { createAppBuildExecutor } from "../build/dev-build-coordinator.js";
17
+ import { GHTML_PLUGIN_NAME } from "../integrations/ghtml/ghtml.constants.js";
18
+ import { ghtmlPlugin } from "../integrations/ghtml/ghtml.plugin.js";
4
19
  import { createEcoComponentMetaPlugin } from "../plugins/eco-component-meta-plugin.js";
20
+ import { createEcoComponentMetaTransform } from "../plugins/eco-component-meta-plugin.js";
21
+ import {
22
+ NoopEntrypointDependencyGraph,
23
+ setAppEntrypointDependencyGraph
24
+ } from "../services/runtime-state/entrypoint-dependency-graph.service.js";
25
+ import {
26
+ CounterServerInvalidationState,
27
+ setAppServerInvalidationState
28
+ } from "../services/runtime-state/server-invalidation-state.service.js";
5
29
  import { invariant } from "../utils/invariant.js";
6
30
  import { appLogger } from "../global/app-logger.js";
31
+ import { fileSystem } from "@ecopages/file-system";
7
32
  const CONFIG_BUILDER_ERRORS = {
8
33
  DUPLICATE_INTEGRATION_NAMES: "Integrations names must be unique",
9
34
  DUPLICATE_INTEGRATION_EXTENSIONS: "Integrations extensions must be unique",
10
35
  MIXED_JSX_ENGINES: "Both kitajs and react integrations are enabled. Use per-file JSX import source/pragma consistently (e.g. `/** @jsxImportSource react */` for React files and `/** @jsxImportSource @kitajs/html */` for Kita files).",
11
36
  duplicateProcessorName: (name) => `Processor with name "${name}" already exists`,
12
- duplicateLoaderName: (name) => `Loader with name "${name}" already exists`
37
+ duplicateLoaderName: (name) => `Loader with name "${name}" already exists`,
38
+ duplicateSemanticTemplate: (kind, matches) => `Multiple ${kind} templates found: ${matches.join(", ")}`,
39
+ incompatibleRuntimeCapability: (kind, name, runtime, reason) => `Cannot enable ${kind} "${name}" on ${runtime}: ${reason}`,
40
+ unsupportedRuntimeVersion: (kind, name, runtime, current, min) => `Cannot enable ${kind} "${name}" on ${runtime} ${current}: requires runtime version ${min} or newer`,
41
+ invalidRuntimeVersion: (kind, name, version) => `Cannot validate ${kind} "${name}" runtimeCapability.minRuntimeVersion "${version}" because it is not a dot-separated numeric version`
13
42
  };
14
43
  class ConfigBuilder {
44
+ buildOwnership = "bun-native";
15
45
  config = {
16
46
  baseUrl: "",
17
47
  rootDir: ".",
@@ -21,12 +51,6 @@ class ConfigBuilder {
21
51
  componentsDir: "components",
22
52
  layoutsDir: "layouts",
23
53
  publicDir: "public",
24
- includesTemplates: {
25
- head: "head.ghtml.ts",
26
- html: "html.ghtml.ts",
27
- seo: "seo.ghtml.ts"
28
- },
29
- error404Template: "404.ghtml.ts",
30
54
  robotsTxt: {
31
55
  preferences: {
32
56
  "*": []
@@ -34,7 +58,7 @@ class ConfigBuilder {
34
58
  },
35
59
  integrations: [],
36
60
  integrationsDependencies: [],
37
- distDir: ".eco",
61
+ distDir: DEFAULT_ECOPAGES_DIST_DIR,
38
62
  defaultMetadata: {
39
63
  title: "Ecopages",
40
64
  description: "This is a static site generated with Ecopages"
@@ -45,6 +69,7 @@ class ConfigBuilder {
45
69
  config: "",
46
70
  componentsDir: "",
47
71
  distDir: "",
72
+ workDir: "",
48
73
  includesDir: "",
49
74
  layoutsDir: "",
50
75
  pagesDir: "",
@@ -55,7 +80,9 @@ class ConfigBuilder {
55
80
  error404TemplatePath: ""
56
81
  },
57
82
  processors: /* @__PURE__ */ new Map(),
58
- loaders: /* @__PURE__ */ new Map()
83
+ loaders: /* @__PURE__ */ new Map(),
84
+ sourceTransforms: /* @__PURE__ */ new Map(),
85
+ workDir: DEFAULT_ECOPAGES_WORK_DIR
59
86
  };
60
87
  /**
61
88
  * Sets the base URL for the application.
@@ -79,6 +106,18 @@ class ConfigBuilder {
79
106
  this.config.rootDir = rootDir;
80
107
  return this;
81
108
  }
109
+ /**
110
+ * Sets which runtime path owns build execution for the finalized app config.
111
+ *
112
+ * @remarks
113
+ * Bun-native remains the default. Vite-host ownership should be selected only
114
+ * for host-driven compatibility flows where core must not silently fall back to
115
+ * Bun build execution.
116
+ */
117
+ setBuildOwnership(buildOwnership) {
118
+ this.buildOwnership = buildOwnership;
119
+ return this;
120
+ }
82
121
  /**
83
122
  * Sets the source directory relative to the root directory.
84
123
  * This directory contains all the source files for the application.
@@ -145,27 +184,6 @@ class ConfigBuilder {
145
184
  this.config.publicDir = publicDir;
146
185
  return this;
147
186
  }
148
- /**
149
- * Sets the templates used for includes.
150
- * These templates are used to build the HTML structure of pages.
151
- *
152
- * @param includesTemplates - An object containing the template file names
153
- * @returns The ConfigBuilder instance for method chaining
154
- */
155
- setIncludesTemplates(includesTemplates) {
156
- this.config.includesTemplates = includesTemplates;
157
- return this;
158
- }
159
- /**
160
- * Sets the template file for the 404 error page.
161
- *
162
- * @param error404Template - The file name of the 404 error template (default: '404.ghtml.ts')
163
- * @returns The ConfigBuilder instance for method chaining
164
- */
165
- setError404Template(error404Template) {
166
- this.config.error404Template = error404Template;
167
- return this;
168
- }
169
187
  /**
170
188
  * Sets the robots.txt configuration.
171
189
  * This determines which paths are allowed/disallowed for search engines.
@@ -191,13 +209,28 @@ class ConfigBuilder {
191
209
  /**
192
210
  * Sets the output directory for the built application.
193
211
  *
194
- * @param distDir - The distribution directory name (default: '.eco')
212
+ * @param distDir - The distribution directory name (default: 'dist')
195
213
  * @returns The ConfigBuilder instance for method chaining
196
214
  */
197
215
  setDistDir(distDir) {
198
216
  this.config.distDir = distDir;
199
217
  return this;
200
218
  }
219
+ /**
220
+ * Sets the internal work directory for runtime-only artifacts.
221
+ *
222
+ * @remarks
223
+ * Use this when deployable output should stay clean while Ecopages still
224
+ * needs a separate workspace for server transpilation caches, runtime
225
+ * manifests, and other internal build products.
226
+ *
227
+ * @param workDir - The internal work directory name
228
+ * @returns The ConfigBuilder instance for method chaining
229
+ */
230
+ setWorkDir(workDir) {
231
+ this.config.workDir = workDir;
232
+ return this;
233
+ }
201
234
  /**
202
235
  * Sets the default metadata for pages.
203
236
  * This is used when a page doesn't specify its own metadata.
@@ -264,6 +297,17 @@ class ConfigBuilder {
264
297
  }
265
298
  return this;
266
299
  }
300
+ /**
301
+ * Sets the source transforms to use for transform-first bundlers such as Vite.
302
+ * This replaces any existing source transforms.
303
+ */
304
+ setSourceTransforms(sourceTransforms) {
305
+ this.config.sourceTransforms.clear();
306
+ for (const sourceTransform of sourceTransforms) {
307
+ this.addSourceTransform(sourceTransform.name, sourceTransform);
308
+ }
309
+ return this;
310
+ }
267
311
  /**
268
312
  * Adds a loader to the application.
269
313
  *
@@ -279,6 +323,18 @@ class ConfigBuilder {
279
323
  this.config.loaders.set(name, loader);
280
324
  return this;
281
325
  }
326
+ /**
327
+ * Adds a source transform to the application.
328
+ *
329
+ * @throws Error if a source transform with the same name already exists.
330
+ */
331
+ addSourceTransform(name, sourceTransform) {
332
+ if (this.config.sourceTransforms.has(name)) {
333
+ throw new Error(CONFIG_BUILDER_ERRORS.duplicateLoaderName(name));
334
+ }
335
+ this.config.sourceTransforms.set(name, sourceTransform);
336
+ return this;
337
+ }
282
338
  /**
283
339
  * Sets the cache configuration for ISR and page caching.
284
340
  *
@@ -294,35 +350,44 @@ class ConfigBuilder {
294
350
  return this;
295
351
  }
296
352
  createAbsolutePaths(config) {
297
- const {
298
- srcDir,
299
- componentsDir,
300
- includesDir,
301
- layoutsDir,
302
- pagesDir,
303
- publicDir,
304
- distDir,
305
- includesTemplates,
306
- error404Template
307
- } = config;
353
+ const { srcDir, componentsDir, includesDir, layoutsDir, pagesDir, publicDir, distDir, workDir } = config;
308
354
  const projectDir = config.rootDir;
309
355
  const absoluteSrcDir = path.resolve(projectDir, srcDir);
310
356
  const absoluteDistDir = path.resolve(projectDir, distDir);
357
+ const absoluteWorkDir = path.resolve(projectDir, workDir);
358
+ const absoluteIncludesDir = path.join(absoluteSrcDir, includesDir);
359
+ const absolutePagesDir = path.join(absoluteSrcDir, pagesDir);
311
360
  this.config.absolutePaths = {
312
361
  config: path.join(projectDir, "eco.config.ts"),
313
362
  projectDir,
314
363
  srcDir: absoluteSrcDir,
315
364
  distDir: absoluteDistDir,
365
+ workDir: absoluteWorkDir,
316
366
  componentsDir: path.join(absoluteSrcDir, componentsDir),
317
- includesDir: path.join(absoluteSrcDir, includesDir),
367
+ includesDir: absoluteIncludesDir,
318
368
  layoutsDir: path.join(absoluteSrcDir, layoutsDir),
319
- pagesDir: path.join(absoluteSrcDir, pagesDir),
369
+ pagesDir: absolutePagesDir,
320
370
  publicDir: path.join(absoluteSrcDir, publicDir),
321
- htmlTemplatePath: path.join(absoluteSrcDir, includesDir, includesTemplates.html),
322
- error404TemplatePath: path.join(absoluteSrcDir, pagesDir, error404Template)
371
+ htmlTemplatePath: this.resolveSemanticTemplatePath({
372
+ dirPath: absoluteIncludesDir,
373
+ basename: "html"
374
+ }),
375
+ error404TemplatePath: this.resolveSemanticTemplatePath({
376
+ dirPath: absolutePagesDir,
377
+ basename: "404"
378
+ })
323
379
  };
324
380
  return this;
325
381
  }
382
+ resolveSemanticTemplatePath({ dirPath, basename }) {
383
+ const extensions = this.config.templatesExt.length > 0 ? this.config.templatesExt : [".ghtml.ts"];
384
+ const matches = extensions.map((extension) => path.join(dirPath, `${basename}${extension}`)).filter((candidate) => fileSystem.exists(candidate));
385
+ invariant(matches.length <= 1, CONFIG_BUILDER_ERRORS.duplicateSemanticTemplate(basename, matches));
386
+ if (matches.length === 1) {
387
+ return matches[0];
388
+ }
389
+ return path.join(dirPath, `${basename}${extensions[0]}`);
390
+ }
326
391
  createIntegrationTemplatesExt(integrations) {
327
392
  const integrationName = integrations.map((integration) => integration.name);
328
393
  const uniqueName = new Set(integrationName);
@@ -330,7 +395,7 @@ class ConfigBuilder {
330
395
  const hasKitaJs = uniqueName.has("kitajs");
331
396
  const hasReact = uniqueName.has("react");
332
397
  if (hasKitaJs && hasReact) {
333
- appLogger.warn(CONFIG_BUILDER_ERRORS.MIXED_JSX_ENGINES);
398
+ appLogger.debug(CONFIG_BUILDER_ERRORS.MIXED_JSX_ENGINES);
334
399
  }
335
400
  const integrationsExtensions = integrations.flatMap((integration) => integration.extensions);
336
401
  const uniqueExtensions = new Set(integrationsExtensions);
@@ -345,11 +410,138 @@ class ConfigBuilder {
345
410
  processor.setContext(this.config);
346
411
  }
347
412
  }
413
+ validateRuntimeCapabilities() {
414
+ const runtimeEnvironment = this.detectRuntimeEnvironment();
415
+ const contributors = [
416
+ ...this.config.integrations.map((integration) => ({
417
+ kind: "integration",
418
+ name: integration.name,
419
+ runtimeCapability: integration.runtimeCapability
420
+ })),
421
+ ...Array.from(this.config.processors.values(), (processor) => ({
422
+ kind: "processor",
423
+ name: processor.name,
424
+ runtimeCapability: processor.runtimeCapability
425
+ }))
426
+ ];
427
+ for (const contributor of contributors) {
428
+ this.validateRuntimeCapability(contributor, runtimeEnvironment);
429
+ }
430
+ }
431
+ validateRuntimeCapability(contributor, environment) {
432
+ const declaration = contributor.runtimeCapability;
433
+ if (!declaration) {
434
+ return;
435
+ }
436
+ for (const tag of declaration.tags) {
437
+ if (environment.supportedTags.has(tag)) {
438
+ continue;
439
+ }
440
+ throw new Error(
441
+ CONFIG_BUILDER_ERRORS.incompatibleRuntimeCapability(
442
+ contributor.kind,
443
+ contributor.name,
444
+ environment.runtime,
445
+ this.describeUnsupportedRuntimeTag(tag)
446
+ )
447
+ );
448
+ }
449
+ if (!declaration.minRuntimeVersion) {
450
+ return;
451
+ }
452
+ const minVersion = this.parseVersion(declaration.minRuntimeVersion);
453
+ if (!minVersion) {
454
+ throw new Error(
455
+ CONFIG_BUILDER_ERRORS.invalidRuntimeVersion(
456
+ contributor.kind,
457
+ contributor.name,
458
+ declaration.minRuntimeVersion
459
+ )
460
+ );
461
+ }
462
+ const currentVersion = this.parseVersion(environment.version);
463
+ if (!currentVersion) {
464
+ return;
465
+ }
466
+ if (this.compareVersions(currentVersion, minVersion) >= 0) {
467
+ return;
468
+ }
469
+ throw new Error(
470
+ CONFIG_BUILDER_ERRORS.unsupportedRuntimeVersion(
471
+ contributor.kind,
472
+ contributor.name,
473
+ environment.runtime,
474
+ environment.version,
475
+ declaration.minRuntimeVersion
476
+ )
477
+ );
478
+ }
479
+ detectRuntimeEnvironment() {
480
+ const bunVersion = this.getBunVersion();
481
+ if (bunVersion) {
482
+ return {
483
+ runtime: "bun",
484
+ version: bunVersion,
485
+ supportedTags: /* @__PURE__ */ new Set([
486
+ "bun-only",
487
+ "node-compatible",
488
+ "requires-native-bun-api",
489
+ "requires-node-builtins"
490
+ ])
491
+ };
492
+ }
493
+ return {
494
+ runtime: "node",
495
+ version: process.versions.node,
496
+ supportedTags: /* @__PURE__ */ new Set(["node-compatible", "requires-node-builtins"])
497
+ };
498
+ }
499
+ getBunVersion() {
500
+ const bun = globalThis;
501
+ return typeof bun.Bun?.version === "string" ? bun.Bun.version : void 0;
502
+ }
503
+ describeUnsupportedRuntimeTag(tag) {
504
+ switch (tag) {
505
+ case "bun-only":
506
+ return "it is Bun-only";
507
+ case "requires-native-bun-api":
508
+ return "it requires the native Bun API";
509
+ case "requires-node-builtins":
510
+ return "it requires Node builtins";
511
+ case "node-compatible":
512
+ return "it requires a Node-compatible runtime";
513
+ }
514
+ }
515
+ parseVersion(version) {
516
+ const normalized = version.trim().replace(/^v/i, "");
517
+ if (!/^\d+(?:\.\d+)*$/.test(normalized)) {
518
+ return void 0;
519
+ }
520
+ return normalized.split(".").map((segment) => Number(segment));
521
+ }
522
+ compareVersions(left, right) {
523
+ const maxLength = Math.max(left.length, right.length);
524
+ for (let index = 0; index < maxLength; index += 1) {
525
+ const leftValue = left[index] ?? 0;
526
+ const rightValue = right[index] ?? 0;
527
+ if (leftValue > rightValue) {
528
+ return 1;
529
+ }
530
+ if (leftValue < rightValue) {
531
+ return -1;
532
+ }
533
+ }
534
+ return 0;
535
+ }
348
536
  /**
349
537
  * Initializes default loaders that are required for EcoPages to function.
350
538
  * This includes the eco-component-meta-plugin which auto-injects __eco metadata into component configs.
351
539
  */
352
540
  async initializeDefaultLoaders() {
541
+ const componentMetaTransform = createEcoComponentMetaTransform({ config: this.config });
542
+ if (!this.config.sourceTransforms.has(componentMetaTransform.name)) {
543
+ this.config.sourceTransforms.set(componentMetaTransform.name, componentMetaTransform);
544
+ }
353
545
  const componentMetaPlugin = createEcoComponentMetaPlugin({ config: this.config });
354
546
  if (!this.config.loaders.has(componentMetaPlugin.name)) {
355
547
  this.config.loaders.set(componentMetaPlugin.name, componentMetaPlugin);
@@ -379,10 +571,24 @@ class ConfigBuilder {
379
571
  if (!this.config.integrations.some((integration) => integration.name === GHTML_PLUGIN_NAME)) {
380
572
  this.config.integrations.push(ghtmlPlugin());
381
573
  }
382
- this.createAbsolutePaths(this.config);
383
574
  this.createIntegrationTemplatesExt(this.config.integrations);
575
+ this.createAbsolutePaths(this.config);
384
576
  await this.initializeDefaultLoaders();
385
577
  this.initializeProcessors();
578
+ this.validateRuntimeCapabilities();
579
+ const buildAdapter = createBuildAdapter({ ownership: this.buildOwnership });
580
+ setAppBuildAdapter(this.config, buildAdapter);
581
+ updateAppBuildManifest(this.config, await collectConfiguredAppBuildManifestContributions(this.config));
582
+ setAppServerInvalidationState(this.config, new CounterServerInvalidationState());
583
+ setAppEntrypointDependencyGraph(this.config, new NoopEntrypointDependencyGraph());
584
+ setAppBuildExecutor(
585
+ this.config,
586
+ createAppBuildExecutor({
587
+ development: false,
588
+ adapter: buildAdapter,
589
+ getPlugins: () => getAppServerBuildPlugins(this.config)
590
+ })
591
+ );
386
592
  return this.config;
387
593
  }
388
594
  }
@@ -30,3 +30,16 @@ export declare const GENERATED_BASE_PATHS: {
30
30
  };
31
31
  export declare const DEFAULT_ECOPAGES_PORT = 3000;
32
32
  export declare const DEFAULT_ECOPAGES_HOSTNAME = "localhost";
33
+ /**
34
+ * Default directory used for deployable output.
35
+ */
36
+ export declare const DEFAULT_ECOPAGES_DIST_DIR = "dist";
37
+ /**
38
+ * Default internal working directory used for runtime-only artifacts.
39
+ *
40
+ * @remarks
41
+ * This directory is a local tool workspace and is not intended for deployment.
42
+ * It owns transpiled server modules, runtime manifests, and processor caches
43
+ * so the export directory can remain a clean deployable tree.
44
+ */
45
+ export declare const DEFAULT_ECOPAGES_WORK_DIR = ".eco";
@@ -10,9 +10,13 @@ const GENERATED_BASE_PATHS = {
10
10
  };
11
11
  const DEFAULT_ECOPAGES_PORT = 3e3;
12
12
  const DEFAULT_ECOPAGES_HOSTNAME = "localhost";
13
+ const DEFAULT_ECOPAGES_DIST_DIR = "dist";
14
+ const DEFAULT_ECOPAGES_WORK_DIR = ".eco";
13
15
  export {
16
+ DEFAULT_ECOPAGES_DIST_DIR,
14
17
  DEFAULT_ECOPAGES_HOSTNAME,
15
18
  DEFAULT_ECOPAGES_PORT,
19
+ DEFAULT_ECOPAGES_WORK_DIR,
16
20
  GENERATED_BASE_PATHS,
17
21
  IS_BUN,
18
22
  RESOLVED_ASSETS_DIR,
@@ -1,22 +1,27 @@
1
- import type { EcoPagesAppConfig } from './internal-types';
1
+ import type { EcoPagesAppConfig } from './types/internal-types';
2
+ import type { EcoNavigationRuntime } from './router/client/navigation-coordinator';
2
3
 
3
4
  type HMRHandler = (url: string) => Promise<void>;
4
-
5
- type ReloadPageFunction = (options: { clearCache: boolean }) => Promise<void>;
5
+ type CleanupPageRootFunction = () => void;
6
+ type EcoPageRoot = { render: (node: unknown) => void; unmount: () => void };
7
+ type EcoPageData = {
8
+ module: string;
9
+ props: Record<string, unknown>;
10
+ };
11
+ type EcoPagesWindowRuntime = {
12
+ hmrHandlers?: Record<string, HMRHandler>;
13
+ navigation?: EcoNavigationRuntime;
14
+ react?: {
15
+ cleanupPageRoot?: CleanupPageRootFunction;
16
+ pageRoot?: EcoPageRoot | null;
17
+ };
18
+ page?: EcoPageData;
19
+ };
6
20
 
7
21
  declare global {
8
- var ecoConfig: EcoPagesAppConfig;
9
-
10
22
  interface Window {
11
- /** Registered HMR handlers for specific module paths */
12
- __ecopages_hmr_handlers__?: Record<string, HMRHandler>;
13
- /** Function to reload the current page, used for layout updates */
14
- __ecopages_reload_current_page__?: ReloadPageFunction;
15
- /** Page data registry - contains module path and props for current page */
16
- __ECO_PAGE__?: {
17
- module: string;
18
- props: Record<string, unknown>;
19
- };
23
+ /** Shared Ecopages browser runtime state */
24
+ __ECO_PAGES__?: EcoPagesWindowRuntime;
20
25
  }
21
26
  }
22
27
 
@@ -0,0 +1,10 @@
1
+ import type { EcoPagesAppConfig } from '../types/public-types.js';
2
+ import { type DevelopmentInvalidationPlan } from '../services/invalidation/development-invalidation.service.js';
3
+ export type HostRuntimeModuleLoader = (id: string) => Promise<unknown>;
4
+ export interface DevelopmentHostRuntime {
5
+ registerHostModuleLoader(loader: HostRuntimeModuleLoader): void;
6
+ planFileChange(filePath: string): DevelopmentInvalidationPlan;
7
+ invalidateServerModules(changedFiles?: string[]): void;
8
+ resetRuntimeState(changedFiles?: string[]): void;
9
+ }
10
+ export declare function createDevelopmentHostRuntime(appConfig: EcoPagesAppConfig): DevelopmentHostRuntime;
@@ -0,0 +1,24 @@
1
+ import {
2
+ DevelopmentInvalidationService
3
+ } from "../services/invalidation/development-invalidation.service.js";
4
+ import { setHostModuleLoader } from "../services/module-loading/host-module-loader-registry.js";
5
+ function createDevelopmentHostRuntime(appConfig) {
6
+ const invalidationService = new DevelopmentInvalidationService(appConfig);
7
+ return {
8
+ registerHostModuleLoader(loader) {
9
+ setHostModuleLoader(loader);
10
+ },
11
+ planFileChange(filePath) {
12
+ return invalidationService.planFileChange(filePath);
13
+ },
14
+ invalidateServerModules(changedFiles) {
15
+ invalidationService.invalidateServerModules(changedFiles);
16
+ },
17
+ resetRuntimeState(changedFiles) {
18
+ invalidationService.resetRuntimeState(changedFiles);
19
+ }
20
+ };
21
+ }
22
+ export {
23
+ createDevelopmentHostRuntime
24
+ };
@@ -1,5 +1,5 @@
1
1
  import type { Server } from 'bun';
2
- import type { EcoPagesAppConfig } from '../internal-types.js';
2
+ import type { EcoPagesAppConfig } from '../types/internal-types.js';
3
3
  type StaticContentServerOptions = {
4
4
  port?: number;
5
5
  };
@@ -1,5 +1,5 @@
1
1
  import { extname, join } from "node:path";
2
- import { STATUS_MESSAGE } from "../constants.js";
2
+ import { STATUS_MESSAGE } from "../config/constants.js";
3
3
  import { fileSystem } from "@ecopages/file-system";
4
4
  import { ServerUtils } from "../utils/server-utils.module.js";
5
5
  import { getRequiredBunRuntime } from "../utils/runtime.js";