@ecopages/core 0.2.0-alpha.3 → 0.2.0-alpha.31

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 (436) hide show
  1. package/CHANGELOG.md +66 -66
  2. package/README.md +268 -14
  3. package/package.json +72 -108
  4. package/src/adapters/README.md +39 -0
  5. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  6. package/src/adapters/abstract/application-adapter.js +14 -2
  7. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  8. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  9. package/src/adapters/bun/client-bridge.d.ts +1 -1
  10. package/src/adapters/bun/create-app.d.ts +5 -12
  11. package/src/adapters/bun/create-app.js +43 -7
  12. package/src/adapters/bun/hmr-manager.d.ts +72 -26
  13. package/src/adapters/bun/hmr-manager.js +153 -81
  14. package/src/adapters/bun/index.d.ts +2 -3
  15. package/src/adapters/bun/index.js +3 -3
  16. package/src/adapters/bun/server-adapter.d.ts +5 -5
  17. package/src/adapters/bun/server-adapter.js +63 -38
  18. package/src/adapters/bun/server-lifecycle.d.ts +28 -17
  19. package/src/adapters/bun/server-lifecycle.js +34 -62
  20. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  21. package/src/{create-app.js → adapters/create-app.js} +4 -4
  22. package/src/adapters/index.d.ts +2 -6
  23. package/src/adapters/index.js +2 -8
  24. package/src/adapters/node/create-app.d.ts +6 -9
  25. package/src/adapters/node/create-app.js +12 -6
  26. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  27. package/src/adapters/node/node-hmr-manager.d.ts +79 -21
  28. package/src/adapters/node/node-hmr-manager.js +167 -114
  29. package/src/adapters/node/server-adapter.d.ts +7 -35
  30. package/src/adapters/node/server-adapter.js +55 -107
  31. package/src/adapters/node/static-content-server.d.ts +37 -1
  32. package/src/adapters/node/static-content-server.js +29 -1
  33. package/src/adapters/shared/application-adapter.d.ts +1 -1
  34. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  35. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  36. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  37. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  38. package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
  39. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  40. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
  41. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  42. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  43. package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
  44. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  45. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  46. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  47. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  48. package/src/adapters/shared/hmr-html-response.js +32 -0
  49. package/src/adapters/shared/render-context.d.ts +4 -3
  50. package/src/adapters/shared/render-context.js +6 -3
  51. package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
  52. package/src/adapters/shared/runtime-bootstrap.js +43 -0
  53. package/src/adapters/shared/server-adapter.d.ts +33 -12
  54. package/src/adapters/shared/server-adapter.js +208 -132
  55. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  56. package/src/adapters/shared/server-route-handler.js +7 -16
  57. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  58. package/src/adapters/shared/server-static-builder.js +65 -11
  59. package/src/build/README.md +107 -0
  60. package/src/build/build-adapter.d.ts +168 -3
  61. package/src/build/build-adapter.js +604 -16
  62. package/src/build/build-manifest.d.ts +27 -0
  63. package/src/build/build-manifest.js +30 -0
  64. package/src/build/dev-build-coordinator.d.ts +72 -0
  65. package/src/build/dev-build-coordinator.js +154 -0
  66. package/src/build/esbuild-build-adapter.d.ts +15 -6
  67. package/src/build/esbuild-build-adapter.js +189 -74
  68. package/src/build/runtime-build-executor.d.ts +14 -0
  69. package/src/build/runtime-build-executor.js +22 -0
  70. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  71. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  72. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  73. package/src/build/runtime-specifier-aliases.js +95 -0
  74. package/src/config/README.md +36 -0
  75. package/src/config/config-builder.d.ts +54 -29
  76. package/src/config/config-builder.js +255 -49
  77. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  78. package/src/{constants.js → config/constants.js} +4 -0
  79. package/src/declarations.d.ts +19 -14
  80. package/src/dev/host-runtime.d.ts +10 -0
  81. package/src/dev/host-runtime.js +24 -0
  82. package/src/dev/sc-server.d.ts +1 -1
  83. package/src/dev/sc-server.js +1 -1
  84. package/src/eco/README.md +70 -16
  85. package/src/eco/eco.browser.d.ts +2 -0
  86. package/src/eco/eco.browser.js +83 -0
  87. package/src/eco/eco.js +32 -57
  88. package/src/eco/eco.types.d.ts +14 -6
  89. package/src/eco/eco.utils.d.ts +1 -40
  90. package/src/eco/eco.utils.js +5 -35
  91. package/src/eco/global-injector-map.d.ts +3 -3
  92. package/src/eco/global-injector-map.js +2 -2
  93. package/src/eco/lazy-injector-map.d.ts +2 -2
  94. package/src/errors/index.d.ts +1 -0
  95. package/src/errors/index.js +3 -1
  96. package/src/hmr/README.md +26 -0
  97. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  98. package/src/hmr/client/hmr-runtime.js +38 -7
  99. package/src/hmr/hmr-strategy.d.ts +16 -13
  100. package/src/hmr/hmr-strategy.js +22 -7
  101. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  102. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  103. package/src/hmr/hmr.test.e2e.js +26 -33
  104. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  105. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  106. package/src/hmr/strategies/js-hmr-strategy.d.ts +46 -48
  107. package/src/hmr/strategies/js-hmr-strategy.js +64 -74
  108. package/src/index.browser.d.ts +2 -2
  109. package/src/index.browser.js +1 -1
  110. package/src/index.d.ts +4 -3
  111. package/src/index.js +16 -5
  112. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  113. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  114. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  115. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  116. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  117. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  118. package/src/plugins/README.md +35 -0
  119. package/src/plugins/alias-resolver-plugin.js +17 -3
  120. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  121. package/src/plugins/eco-component-meta-plugin.js +27 -22
  122. package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
  123. package/src/plugins/foreign-jsx-override-plugin.js +35 -0
  124. package/src/plugins/integration-plugin.d.ts +142 -29
  125. package/src/plugins/integration-plugin.js +103 -14
  126. package/src/plugins/processor.d.ts +17 -2
  127. package/src/plugins/processor.js +22 -3
  128. package/src/plugins/runtime-capability.d.ts +9 -0
  129. package/src/plugins/source-transform.d.ts +46 -0
  130. package/src/plugins/source-transform.js +71 -0
  131. package/src/route-renderer/GRAPH.md +83 -325
  132. package/src/route-renderer/README.md +73 -90
  133. package/src/route-renderer/orchestration/component-render-context.d.ts +89 -0
  134. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  135. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  136. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  137. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +108 -0
  138. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +206 -0
  139. package/src/route-renderer/orchestration/integration-renderer.d.ts +516 -0
  140. package/src/route-renderer/orchestration/integration-renderer.js +909 -0
  141. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  142. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  143. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  144. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  145. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +2 -0
  146. package/src/route-renderer/orchestration/processed-asset-dedupe.js +23 -0
  147. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +90 -0
  148. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +158 -0
  149. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  150. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  151. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +120 -0
  152. package/src/route-renderer/orchestration/route-render-orchestrator.js +388 -0
  153. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  154. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  155. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  156. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  157. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  158. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  159. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  160. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  161. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  162. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  163. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  164. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  165. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  166. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  167. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  168. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  169. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  170. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  171. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  172. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  173. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  174. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  175. package/src/route-renderer/route-renderer.d.ts +57 -14
  176. package/src/route-renderer/route-renderer.js +30 -18
  177. package/src/router/README.md +94 -0
  178. package/src/router/client/link-intent.d.ts +53 -0
  179. package/src/router/client/link-intent.js +34 -0
  180. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  181. package/src/router/client/link-intent.test.browser.js +43 -0
  182. package/src/router/client/navigation-coordinator.d.ts +169 -0
  183. package/src/router/client/navigation-coordinator.js +215 -0
  184. package/src/router/server/route-registry.d.ts +78 -0
  185. package/src/router/server/route-registry.js +262 -0
  186. package/src/services/README.md +28 -0
  187. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  188. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  189. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  190. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  191. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  192. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  193. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  194. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  195. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  196. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  197. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  198. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  199. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  200. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  201. package/src/services/assets/asset-processing-service/index.js +6 -0
  202. package/src/services/assets/asset-processing-service/page-package.d.ts +3 -0
  203. package/src/services/assets/asset-processing-service/page-package.js +74 -0
  204. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  205. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  208. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  209. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  210. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  211. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  212. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
  213. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +119 -0
  214. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  215. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  216. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.d.ts +3 -3
  217. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.js +12 -7
  218. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  219. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  220. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  221. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  222. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  223. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  224. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  225. package/src/services/assets/browser-bundle.service.js +41 -0
  226. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  227. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  228. package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
  229. package/src/services/html/html-rewriter-provider.service.js +68 -0
  230. package/src/services/html/html-transformer.service.d.ts +87 -0
  231. package/src/services/html/html-transformer.service.js +216 -0
  232. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  233. package/src/services/invalidation/development-invalidation.service.js +190 -0
  234. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  235. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  236. package/src/services/module-loading/app-server-module-transpiler.service.js +115 -0
  237. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  238. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  239. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  240. package/src/services/module-loading/module-loading-types.js +0 -0
  241. package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
  242. package/src/services/module-loading/node-bootstrap-plugin.js +216 -0
  243. package/src/services/module-loading/page-module-import.service.d.ts +76 -0
  244. package/src/services/module-loading/page-module-import.service.js +170 -0
  245. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  246. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  247. package/src/services/module-loading/source-module-support.d.ts +5 -0
  248. package/src/services/module-loading/source-module-support.js +8 -0
  249. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  250. package/src/services/runtime-state/dev-graph.service.js +162 -0
  251. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  252. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  253. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  254. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  255. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  256. package/src/static-site-generator/README.md +26 -0
  257. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  258. package/src/static-site-generator/static-site-generator.js +182 -138
  259. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  260. package/src/types/internal-types.js +0 -0
  261. package/src/{public-types.d.ts → types/public-types.d.ts} +201 -32
  262. package/src/types/public-types.js +0 -0
  263. package/src/utils/html-escaping.d.ts +7 -0
  264. package/src/utils/html-escaping.js +6 -0
  265. package/src/utils/locals-utils.d.ts +1 -1
  266. package/src/utils/parse-cli-args.d.ts +4 -1
  267. package/src/utils/parse-cli-args.js +16 -1
  268. package/src/utils/resolve-work-dir.d.ts +11 -0
  269. package/src/utils/resolve-work-dir.js +31 -0
  270. package/src/watchers/project-watcher.d.ts +40 -29
  271. package/src/watchers/project-watcher.js +126 -116
  272. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  273. package/src/watchers/project-watcher.test-helpers.js +6 -6
  274. package/src/adapters/abstract/application-adapter.ts +0 -337
  275. package/src/adapters/abstract/router-adapter.ts +0 -30
  276. package/src/adapters/abstract/server-adapter.ts +0 -79
  277. package/src/adapters/bun/client-bridge.ts +0 -62
  278. package/src/adapters/bun/create-app.ts +0 -189
  279. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  280. package/src/adapters/bun/define-api-handler.ts +0 -114
  281. package/src/adapters/bun/hmr-manager.ts +0 -296
  282. package/src/adapters/bun/index.ts +0 -3
  283. package/src/adapters/bun/server-adapter.ts +0 -492
  284. package/src/adapters/bun/server-lifecycle.ts +0 -154
  285. package/src/adapters/index.ts +0 -6
  286. package/src/adapters/node/create-app.ts +0 -179
  287. package/src/adapters/node/index.d.ts +0 -4
  288. package/src/adapters/node/index.js +0 -8
  289. package/src/adapters/node/index.ts +0 -9
  290. package/src/adapters/node/node-client-bridge.ts +0 -79
  291. package/src/adapters/node/node-hmr-manager.ts +0 -289
  292. package/src/adapters/node/server-adapter.ts +0 -561
  293. package/src/adapters/node/static-content-server.ts +0 -203
  294. package/src/adapters/shared/api-response.ts +0 -104
  295. package/src/adapters/shared/application-adapter.ts +0 -199
  296. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  297. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  298. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  299. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  300. package/src/adapters/shared/render-context.ts +0 -105
  301. package/src/adapters/shared/server-adapter.ts +0 -442
  302. package/src/adapters/shared/server-route-handler.ts +0 -166
  303. package/src/adapters/shared/server-static-builder.ts +0 -82
  304. package/src/build/build-adapter.ts +0 -132
  305. package/src/build/build-types.ts +0 -83
  306. package/src/build/esbuild-build-adapter.ts +0 -510
  307. package/src/config/config-builder.ts +0 -474
  308. package/src/constants.ts +0 -39
  309. package/src/create-app.ts +0 -87
  310. package/src/define-api-handler.js +0 -15
  311. package/src/define-api-handler.ts +0 -66
  312. package/src/dev/sc-server.ts +0 -143
  313. package/src/eco/component-render-context.d.ts +0 -105
  314. package/src/eco/component-render-context.js +0 -77
  315. package/src/eco/component-render-context.ts +0 -202
  316. package/src/eco/eco.ts +0 -221
  317. package/src/eco/eco.types.ts +0 -202
  318. package/src/eco/eco.utils.ts +0 -89
  319. package/src/eco/global-injector-map.ts +0 -112
  320. package/src/eco/lazy-injector-map.ts +0 -120
  321. package/src/eco/module-dependencies.ts +0 -75
  322. package/src/errors/http-error.ts +0 -72
  323. package/src/errors/index.ts +0 -2
  324. package/src/errors/locals-access-error.ts +0 -7
  325. package/src/global/app-logger.ts +0 -4
  326. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
  327. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
  328. package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
  329. package/src/hmr/client/hmr-runtime.ts +0 -121
  330. package/src/hmr/hmr-strategy.ts +0 -172
  331. package/src/hmr/hmr.test.e2e.ts +0 -75
  332. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  333. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  334. package/src/index.browser.ts +0 -3
  335. package/src/index.ts +0 -5
  336. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  337. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  338. package/src/internal-types.ts +0 -212
  339. package/src/plugins/alias-resolver-plugin.ts +0 -45
  340. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  341. package/src/plugins/integration-plugin.ts +0 -184
  342. package/src/plugins/processor.ts +0 -220
  343. package/src/public-types.ts +0 -1260
  344. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  345. package/src/route-renderer/component-graph-executor.js +0 -31
  346. package/src/route-renderer/component-graph-executor.ts +0 -84
  347. package/src/route-renderer/component-graph.d.ts +0 -42
  348. package/src/route-renderer/component-graph.js +0 -72
  349. package/src/route-renderer/component-graph.ts +0 -159
  350. package/src/route-renderer/component-marker.d.ts +0 -52
  351. package/src/route-renderer/component-marker.js +0 -46
  352. package/src/route-renderer/component-marker.ts +0 -117
  353. package/src/route-renderer/dependency-resolver.js +0 -428
  354. package/src/route-renderer/dependency-resolver.ts +0 -596
  355. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  356. package/src/route-renderer/html-post-processing.service.js +0 -86
  357. package/src/route-renderer/html-post-processing.service.ts +0 -103
  358. package/src/route-renderer/integration-renderer.d.ts +0 -339
  359. package/src/route-renderer/integration-renderer.js +0 -526
  360. package/src/route-renderer/integration-renderer.ts +0 -696
  361. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  362. package/src/route-renderer/marker-graph-resolver.js +0 -93
  363. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  364. package/src/route-renderer/page-module-loader.d.ts +0 -61
  365. package/src/route-renderer/page-module-loader.ts +0 -153
  366. package/src/route-renderer/render-execution.service.d.ts +0 -69
  367. package/src/route-renderer/render-execution.service.js +0 -91
  368. package/src/route-renderer/render-execution.service.ts +0 -158
  369. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  370. package/src/route-renderer/render-preparation.service.js +0 -243
  371. package/src/route-renderer/render-preparation.service.ts +0 -358
  372. package/src/route-renderer/route-renderer.ts +0 -80
  373. package/src/router/fs-router-scanner.d.ts +0 -41
  374. package/src/router/fs-router-scanner.js +0 -155
  375. package/src/router/fs-router-scanner.ts +0 -217
  376. package/src/router/fs-router.d.ts +0 -26
  377. package/src/router/fs-router.js +0 -100
  378. package/src/router/fs-router.ts +0 -122
  379. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  380. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  381. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  382. package/src/services/asset-processing-service/assets.types.ts +0 -112
  383. package/src/services/asset-processing-service/index.d.ts +0 -3
  384. package/src/services/asset-processing-service/index.js +0 -3
  385. package/src/services/asset-processing-service/index.ts +0 -3
  386. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  387. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  388. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  389. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  390. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  391. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  392. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  393. package/src/services/asset-processing-service/processors/index.js +0 -5
  394. package/src/services/asset-processing-service/processors/index.ts +0 -5
  395. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  396. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  397. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  398. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  399. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  400. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  401. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  402. package/src/services/cache/cache.types.ts +0 -126
  403. package/src/services/cache/index.ts +0 -18
  404. package/src/services/cache/memory-cache-store.ts +0 -130
  405. package/src/services/cache/page-cache-service.ts +0 -202
  406. package/src/services/html-transformer.service.d.ts +0 -50
  407. package/src/services/html-transformer.service.js +0 -163
  408. package/src/services/html-transformer.service.ts +0 -217
  409. package/src/services/page-module-import.service.d.ts +0 -37
  410. package/src/services/page-module-import.service.js +0 -88
  411. package/src/services/page-module-import.service.ts +0 -129
  412. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  413. package/src/services/schema-validation-service.ts +0 -204
  414. package/src/services/validation/standard-schema.types.ts +0 -68
  415. package/src/static-site-generator/static-site-generator.ts +0 -359
  416. package/src/utils/css.d.ts +0 -1
  417. package/src/utils/css.js +0 -7
  418. package/src/utils/css.ts +0 -5
  419. package/src/utils/deep-merge.ts +0 -47
  420. package/src/utils/hash.ts +0 -5
  421. package/src/utils/html.ts +0 -1
  422. package/src/utils/invariant.ts +0 -15
  423. package/src/utils/locals-utils.ts +0 -37
  424. package/src/utils/parse-cli-args.ts +0 -83
  425. package/src/utils/path-utils.module.ts +0 -14
  426. package/src/utils/runtime.ts +0 -44
  427. package/src/utils/server-utils.module.ts +0 -67
  428. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  429. package/src/watchers/project-watcher.ts +0 -344
  430. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  431. /package/src/{internal-types.js → plugins/runtime-capability.js} +0 -0
  432. /package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.js +0 -0
  433. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  434. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  435. /package/src/{public-types.js → services/module-loading/app-module-loader.service.js} +0 -0
  436. /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);
@@ -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";