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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/README.md +79 -28
  2. package/package.json +94 -116
  3. package/src/adapters/README.md +2 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +19 -115
  12. package/src/adapters/bun/hmr-manager.js +25 -301
  13. package/src/adapters/bun/index.d.ts +1 -1
  14. package/src/adapters/bun/index.js +2 -2
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +100 -32
  18. package/src/adapters/bun/server-adapter.js +142 -65
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +1 -5
  24. package/src/adapters/index.js +1 -7
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +22 -103
  31. package/src/adapters/node/node-hmr-manager.js +26 -289
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +19 -42
  37. package/src/adapters/node/server-adapter.js +94 -139
  38. package/src/adapters/node/static-content-server.d.ts +1 -1
  39. package/src/adapters/node/static-content-server.js +1 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/adapters/shared/define-api-handler.d.ts +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
  53. package/src/adapters/shared/fs-server-response-matcher.js +72 -46
  54. package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
  55. package/src/adapters/shared/hmr-html-response.d.ts +1 -1
  56. package/src/adapters/shared/hmr-html-response.js +4 -3
  57. package/src/adapters/shared/render-context.d.ts +5 -3
  58. package/src/adapters/shared/render-context.js +24 -1
  59. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  60. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  61. package/src/adapters/shared/runtime-host.d.ts +12 -0
  62. package/src/adapters/shared/server-adapter.d.ts +22 -11
  63. package/src/adapters/shared/server-adapter.js +183 -133
  64. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  65. package/src/adapters/shared/server-route-handler.js +4 -4
  66. package/src/adapters/shared/server-static-builder.d.ts +8 -7
  67. package/src/adapters/shared/server-static-builder.js +6 -5
  68. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  69. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  70. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  71. package/src/build/README.md +57 -67
  72. package/src/build/browser-runtime-manifest.d.ts +31 -0
  73. package/src/build/browser-runtime-manifest.js +61 -0
  74. package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
  75. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  76. package/src/build/browser-runtime-plugin.d.ts +78 -0
  77. package/src/build/browser-runtime-plugin.js +173 -0
  78. package/src/build/build-adapter.d.ts +384 -63
  79. package/src/build/build-adapter.js +129 -54
  80. package/src/build/build-manifest.d.ts +6 -0
  81. package/src/build/build-manifest.js +21 -2
  82. package/src/build/build-types.d.ts +2 -2
  83. package/src/build/rolldown-adapter-helpers.d.ts +58 -0
  84. package/src/build/rolldown-adapter-helpers.js +265 -0
  85. package/src/build/rolldown-build-adapter.d.ts +28 -0
  86. package/src/build/rolldown-build-adapter.js +65 -0
  87. package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
  88. package/src/build/rolldown-dev-build-adapter.js +166 -0
  89. package/src/build/rolldown-plugin-bridge.d.ts +59 -0
  90. package/src/build/rolldown-plugin-bridge.js +199 -0
  91. package/src/build/runtime-build-executor.d.ts +15 -7
  92. package/src/build/runtime-build-executor.js +8 -9
  93. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  94. package/src/build/runtime-build-output-normalizer.js +111 -0
  95. package/src/build/serialized-build-executor.d.ts +64 -0
  96. package/src/build/serialized-build-executor.js +63 -0
  97. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  98. package/src/build/server-side-css-shim-plugin.js +35 -0
  99. package/src/cache/index.d.ts +6 -0
  100. package/src/cache/index.js +6 -0
  101. package/src/cache/module-parse-cache.d.ts +65 -0
  102. package/src/cache/module-parse-cache.js +75 -0
  103. package/src/config/README.md +5 -2
  104. package/src/config/config-builder.d.ts +41 -13
  105. package/src/config/config-builder.js +62 -24
  106. package/src/declarations.d.ts +1 -1
  107. package/src/dev/host-runtime.d.ts +10 -0
  108. package/src/dev/host-runtime.js +24 -0
  109. package/src/dev/sc-server.d.ts +1 -1
  110. package/src/dev/sc-server.js +1 -1
  111. package/src/eco/eco.browser.d.ts +2 -0
  112. package/src/eco/eco.browser.js +88 -0
  113. package/src/eco/eco.js +50 -45
  114. package/src/eco/eco.types.d.ts +60 -8
  115. package/src/eco/eco.utils.d.ts +1 -40
  116. package/src/eco/eco.utils.js +5 -35
  117. package/src/eco/global-injector-map.d.ts +3 -3
  118. package/src/eco/global-injector-map.js +2 -2
  119. package/src/eco/lazy-injector-map.d.ts +2 -2
  120. package/src/errors/index.d.ts +1 -0
  121. package/src/errors/index.js +3 -1
  122. package/src/hmr/client/hmr-runtime.js +9 -1
  123. package/src/hmr/hmr-strategy.d.ts +16 -13
  124. package/src/hmr/hmr-strategy.js +22 -7
  125. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  126. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  127. package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
  128. package/src/hmr/strategies/js-hmr-strategy.js +5 -10
  129. package/src/index.browser.d.ts +2 -2
  130. package/src/index.browser.js +1 -1
  131. package/src/index.d.ts +3 -2
  132. package/src/index.js +15 -4
  133. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
  134. package/src/integrations/ghtml/ghtml-renderer.js +24 -29
  135. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  136. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  137. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  138. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  139. package/src/plugins/README.md +1 -0
  140. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  141. package/src/plugins/alias-resolver-cache.js +106 -0
  142. package/src/plugins/alias-resolver-plugin.d.ts +5 -1
  143. package/src/plugins/alias-resolver-plugin.js +19 -7
  144. package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
  145. package/src/plugins/eco-component-meta-plugin.js +43 -25
  146. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  147. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  148. package/src/plugins/integration-plugin.d.ts +136 -42
  149. package/src/plugins/integration-plugin.js +99 -31
  150. package/src/plugins/processor.d.ts +4 -2
  151. package/src/plugins/processor.js +8 -3
  152. package/src/plugins/source-transform.d.ts +46 -0
  153. package/src/plugins/source-transform.js +71 -0
  154. package/src/route-renderer/GRAPH.md +80 -318
  155. package/src/route-renderer/README.md +74 -78
  156. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  157. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  158. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  159. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  160. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  161. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  162. package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
  163. package/src/route-renderer/orchestration/integration-renderer.js +660 -258
  164. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  165. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  166. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  167. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  168. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  169. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  170. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  171. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  172. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  173. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  174. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  175. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  176. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  177. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  178. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  179. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  180. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  181. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  182. package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
  183. package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
  184. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  185. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  186. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  187. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  188. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  189. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  190. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  191. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  192. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  193. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  194. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  195. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  196. package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
  197. package/src/route-renderer/page-loading/page-module-loader.js +8 -5
  198. package/src/route-renderer/route-renderer.d.ts +31 -23
  199. package/src/route-renderer/route-renderer.js +17 -24
  200. package/src/router/README.md +76 -8
  201. package/src/router/client/navigation-coordinator.d.ts +20 -0
  202. package/src/router/client/navigation-coordinator.js +2 -2
  203. package/src/router/server/route-registry.d.ts +78 -0
  204. package/src/router/server/route-registry.js +262 -0
  205. package/src/services/README.md +1 -2
  206. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  207. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  208. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
  209. package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
  210. package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
  211. package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
  212. package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
  215. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  216. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  217. package/src/services/assets/asset-processing-service/index.d.ts +6 -5
  218. package/src/services/assets/asset-processing-service/index.js +6 -5
  219. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  220. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  221. package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
  222. package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
  223. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  229. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
  230. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
  231. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
  235. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  236. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
  237. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
  239. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  240. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  241. package/src/services/assets/browser-bundle.service.d.ts +44 -3
  242. package/src/services/assets/browser-bundle.service.js +15 -7
  243. package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
  244. package/src/services/html/html-rewriter-provider.service.js +4 -1
  245. package/src/services/html/html-transformer.service.d.ts +22 -3
  246. package/src/services/html/html-transformer.service.js +101 -35
  247. package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
  248. package/src/services/invalidation/development-invalidation.service.js +1 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/page-module-import.service.d.ts +32 -8
  258. package/src/services/module-loading/page-module-import.service.js +83 -22
  259. package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
  260. package/src/services/module-loading/server-module-transpiler.service.js +5 -2
  261. package/src/services/module-loading/source-module-support.d.ts +5 -0
  262. package/src/services/module-loading/source-module-support.js +8 -0
  263. package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
  264. package/src/services/runtime-state/dev-graph.service.js +10 -10
  265. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
  266. package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
  267. package/src/static-site-generator/static-site-generator.d.ts +23 -28
  268. package/src/static-site-generator/static-site-generator.js +119 -156
  269. package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
  270. package/src/types/internal-types.js +0 -0
  271. package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
  272. package/src/types/public-types.js +0 -0
  273. package/src/utils/html-escaping.d.ts +7 -0
  274. package/src/utils/html-escaping.js +6 -0
  275. package/src/utils/locals-utils.d.ts +1 -1
  276. package/src/utils/parse-cli-args.d.ts +4 -1
  277. package/src/utils/parse-cli-args.js +16 -1
  278. package/src/utils/resolve-work-dir.js +1 -1
  279. package/src/watchers/project-watcher.d.ts +4 -4
  280. package/src/watchers/project-watcher.js +35 -41
  281. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  282. package/src/watchers/project-watcher.test-helpers.js +5 -5
  283. package/CHANGELOG.md +0 -31
  284. package/src/adapters/abstract/application-adapter.ts +0 -337
  285. package/src/adapters/abstract/router-adapter.ts +0 -30
  286. package/src/adapters/abstract/server-adapter.ts +0 -79
  287. package/src/adapters/bun/client-bridge.ts +0 -62
  288. package/src/adapters/bun/create-app.ts +0 -189
  289. package/src/adapters/bun/hmr-manager.ts +0 -409
  290. package/src/adapters/bun/index.ts +0 -2
  291. package/src/adapters/bun/server-adapter.ts +0 -499
  292. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  293. package/src/adapters/bun/server-lifecycle.js +0 -92
  294. package/src/adapters/bun/server-lifecycle.ts +0 -124
  295. package/src/adapters/index.ts +0 -6
  296. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  297. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  298. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  299. package/src/adapters/node/create-app.ts +0 -179
  300. package/src/adapters/node/index.d.ts +0 -6
  301. package/src/adapters/node/index.js +0 -11
  302. package/src/adapters/node/index.ts +0 -16
  303. package/src/adapters/node/node-client-bridge.ts +0 -79
  304. package/src/adapters/node/node-hmr-manager.ts +0 -381
  305. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  306. package/src/adapters/node/runtime-adapter.js +0 -306
  307. package/src/adapters/node/runtime-adapter.ts +0 -439
  308. package/src/adapters/node/server-adapter.ts +0 -488
  309. package/src/adapters/node/static-content-server.ts +0 -239
  310. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  311. package/src/adapters/node/write-runtime-manifest.js +0 -12
  312. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/define-api-handler.ts +0 -66
  316. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  317. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  318. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  319. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  320. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  321. package/src/adapters/shared/hmr-html-response.ts +0 -52
  322. package/src/adapters/shared/render-context.ts +0 -120
  323. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  324. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  325. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  326. package/src/adapters/shared/server-adapter.ts +0 -489
  327. package/src/adapters/shared/server-route-handler.ts +0 -153
  328. package/src/adapters/shared/server-static-builder.ts +0 -166
  329. package/src/build/build-adapter.ts +0 -361
  330. package/src/build/build-manifest.ts +0 -54
  331. package/src/build/build-types.ts +0 -83
  332. package/src/build/dev-build-coordinator.d.ts +0 -74
  333. package/src/build/dev-build-coordinator.js +0 -161
  334. package/src/build/dev-build-coordinator.ts +0 -221
  335. package/src/build/esbuild-build-adapter.d.ts +0 -72
  336. package/src/build/esbuild-build-adapter.js +0 -422
  337. package/src/build/esbuild-build-adapter.ts +0 -559
  338. package/src/build/runtime-build-executor.ts +0 -34
  339. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  340. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  341. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  342. package/src/config/config-builder.ts +0 -706
  343. package/src/constants.ts +0 -54
  344. package/src/create-app.ts +0 -87
  345. package/src/dev/sc-server.ts +0 -143
  346. package/src/eco/component-render-context.d.ts +0 -105
  347. package/src/eco/component-render-context.js +0 -87
  348. package/src/eco/component-render-context.ts +0 -224
  349. package/src/eco/eco.ts +0 -242
  350. package/src/eco/eco.types.ts +0 -221
  351. package/src/eco/eco.utils.ts +0 -89
  352. package/src/eco/global-injector-map.ts +0 -112
  353. package/src/eco/lazy-injector-map.ts +0 -120
  354. package/src/eco/module-dependencies.ts +0 -75
  355. package/src/errors/http-error.ts +0 -72
  356. package/src/errors/index.ts +0 -2
  357. package/src/errors/locals-access-error.ts +0 -7
  358. package/src/global/app-logger.ts +0 -4
  359. package/src/hmr/client/hmr-runtime.ts +0 -152
  360. package/src/hmr/hmr-strategy.ts +0 -172
  361. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  362. package/src/hmr/hmr.test.e2e.ts +0 -66
  363. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  364. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  365. package/src/index.browser.ts +0 -3
  366. package/src/index.ts +0 -5
  367. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  368. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  369. package/src/internal-types.ts +0 -232
  370. package/src/plugins/alias-resolver-plugin.ts +0 -63
  371. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  372. package/src/plugins/integration-plugin.ts +0 -226
  373. package/src/plugins/processor.ts +0 -240
  374. package/src/plugins/runtime-capability.ts +0 -14
  375. package/src/public-types.ts +0 -1317
  376. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  377. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  378. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  379. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  380. package/src/route-renderer/component-graph/component-graph.js +0 -72
  381. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  382. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  383. package/src/route-renderer/component-graph/component-marker.js +0 -46
  384. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  385. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  386. package/src/route-renderer/component-graph/component-reference.js +0 -19
  387. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  388. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  389. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  390. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  391. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  392. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  393. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  394. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  395. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  396. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  397. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  398. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  399. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  400. package/src/route-renderer/route-renderer.ts +0 -115
  401. package/src/router/client/link-intent.test.browser.ts +0 -51
  402. package/src/router/client/link-intent.ts +0 -92
  403. package/src/router/client/navigation-coordinator.ts +0 -433
  404. package/src/router/server/fs-router-scanner.d.ts +0 -41
  405. package/src/router/server/fs-router-scanner.js +0 -156
  406. package/src/router/server/fs-router-scanner.ts +0 -219
  407. package/src/router/server/fs-router.d.ts +0 -26
  408. package/src/router/server/fs-router.js +0 -100
  409. package/src/router/server/fs-router.ts +0 -122
  410. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  411. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  412. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  413. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  414. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  415. package/src/services/assets/asset-processing-service/index.ts +0 -5
  416. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  417. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  418. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  419. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  420. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  421. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  422. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  423. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  424. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  425. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  426. package/src/services/assets/browser-bundle.service.ts +0 -53
  427. package/src/services/cache/cache.types.ts +0 -126
  428. package/src/services/cache/index.ts +0 -18
  429. package/src/services/cache/memory-cache-store.ts +0 -130
  430. package/src/services/cache/page-cache-service.ts +0 -202
  431. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  432. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  433. package/src/services/html/html-transformer.service.ts +0 -279
  434. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  435. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  436. package/src/services/module-loading/page-module-import.service.ts +0 -200
  437. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  438. package/src/services/module-loading/server-loader.service.js +0 -32
  439. package/src/services/module-loading/server-loader.service.ts +0 -130
  440. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  441. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  442. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  444. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  445. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  446. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  447. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  448. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  449. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  450. package/src/services/validation/schema-validation-service.ts +0 -204
  451. package/src/services/validation/standard-schema.types.ts +0 -68
  452. package/src/static-site-generator/static-site-generator.ts +0 -462
  453. package/src/utils/css.d.ts +0 -1
  454. package/src/utils/css.js +0 -7
  455. package/src/utils/css.ts +0 -5
  456. package/src/utils/deep-merge.ts +0 -47
  457. package/src/utils/hash.ts +0 -5
  458. package/src/utils/html.ts +0 -1
  459. package/src/utils/invariant.ts +0 -15
  460. package/src/utils/locals-utils.ts +0 -37
  461. package/src/utils/parse-cli-args.ts +0 -83
  462. package/src/utils/path-utils.module.ts +0 -14
  463. package/src/utils/resolve-work-dir.ts +0 -45
  464. package/src/utils/runtime.ts +0 -44
  465. package/src/utils/server-utils.module.ts +0 -67
  466. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  467. package/src/watchers/project-watcher.ts +0 -363
  468. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  469. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  470. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  471. /package/src/{constants.js → config/constants.js} +0 -0
@@ -0,0 +1,111 @@
1
+ import { createRequire } from "node:module";
2
+ import { readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ const corePackageRequire = createRequire(new URL("../../package.json", import.meta.url));
6
+ const appDeclaredPackageCache = /* @__PURE__ */ new Map();
7
+ function tryResolveRuntimeImport(specifier, resolver) {
8
+ try {
9
+ return resolver.resolve(specifier);
10
+ } catch {
11
+ return void 0;
12
+ }
13
+ }
14
+ function isBareRuntimeImport(specifier) {
15
+ return !specifier.startsWith(".") && !path.isAbsolute(specifier) && !specifier.startsWith("/") && !specifier.startsWith("node:") && !specifier.startsWith("@/") && !specifier.startsWith("~/") && !specifier.startsWith("#") && !specifier.includes(":");
16
+ }
17
+ function getPackageNameFromSpecifier(specifier) {
18
+ if (specifier.startsWith("@")) {
19
+ return specifier.split("/").slice(0, 2).join("/");
20
+ }
21
+ return specifier.split("/")[0] ?? specifier;
22
+ }
23
+ function getDeclaredAppPackages(rootDir) {
24
+ const cacheKey = path.resolve(rootDir);
25
+ const cached = appDeclaredPackageCache.get(cacheKey);
26
+ if (cached) {
27
+ return cached;
28
+ }
29
+ const packageJsonPath = path.resolve(rootDir, "package.json");
30
+ const declaredPackages = /* @__PURE__ */ new Set();
31
+ try {
32
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
33
+ for (const field of ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"]) {
34
+ const entries = packageJson[field];
35
+ if (!entries || typeof entries !== "object") {
36
+ continue;
37
+ }
38
+ for (const packageName of Object.keys(entries)) {
39
+ declaredPackages.add(packageName);
40
+ }
41
+ }
42
+ } catch {
43
+ appDeclaredPackageCache.set(cacheKey, declaredPackages);
44
+ return declaredPackages;
45
+ }
46
+ appDeclaredPackageCache.set(cacheKey, declaredPackages);
47
+ return declaredPackages;
48
+ }
49
+ function isDeclaredAppPackageImport(specifier, rootDir) {
50
+ return getDeclaredAppPackages(rootDir).has(getPackageNameFromSpecifier(specifier));
51
+ }
52
+ function rewriteRuntimeImportSpecifier(specifier, quote, rootDir) {
53
+ if (!isBareRuntimeImport(specifier)) {
54
+ return void 0;
55
+ }
56
+ if (isDeclaredAppPackageImport(specifier, rootDir)) {
57
+ return void 0;
58
+ }
59
+ const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
60
+ if (!resolvedPath || !/\.(?:[cm]?[jt]s|tsx|jsx)$/u.test(resolvedPath)) {
61
+ return void 0;
62
+ }
63
+ return `${quote}${pathToFileURL(resolvedPath).href}${quote}`;
64
+ }
65
+ function rewriteRuntimeBuildOutputImports(code, rootDir) {
66
+ const rewriteSpecifier = (prefix, quote, specifier) => {
67
+ const rewrittenSpecifier = rewriteRuntimeImportSpecifier(specifier, quote, rootDir);
68
+ return `${prefix}${rewrittenSpecifier ?? `${quote}${specifier}${quote}`}`;
69
+ };
70
+ const withResolvedPackages = code.replace(
71
+ /(\bfrom\s+)(['"])([^'"\\]+)\2/g,
72
+ (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
73
+ ).replace(
74
+ /(\bimport\s+)(['"])([^'"\\]+)\2/g,
75
+ (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
76
+ ).replace(
77
+ /(\bimport\s*\(\s*)(['"])([^'"\\]+)\2/g,
78
+ (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
79
+ );
80
+ return withResolvedPackages.replace(
81
+ /(['"])(@oxc-project\/runtime\/(?:helpers(?:\/esm)?\/[^'"\\]+))\1/g,
82
+ (match, quote, specifier) => {
83
+ const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
84
+ return resolvedPath ? `${quote}${pathToFileURL(resolvedPath).href}${quote}` : match;
85
+ }
86
+ );
87
+ }
88
+ function normalizeNodeRuntimeBuildOutputFile(filePath, rootDir) {
89
+ if (!/\.(?:[cm]?js)$/u.test(filePath)) {
90
+ return;
91
+ }
92
+ const fileSystem = corePackageRequire("node:fs");
93
+ if (!fileSystem.existsSync(filePath)) {
94
+ return;
95
+ }
96
+ const code = fileSystem.readFileSync(filePath, "utf-8");
97
+ const rewritten = rewriteRuntimeBuildOutputImports(code, rootDir);
98
+ if (rewritten !== code) {
99
+ fileSystem.writeFileSync(filePath, rewritten);
100
+ }
101
+ }
102
+ function normalizeNodeRuntimeBuildOutputs(outputPaths, rootDir) {
103
+ for (const outputPath of outputPaths) {
104
+ normalizeNodeRuntimeBuildOutputFile(outputPath, rootDir);
105
+ }
106
+ }
107
+ export {
108
+ isDeclaredAppPackageImport,
109
+ normalizeNodeRuntimeBuildOutputFile,
110
+ normalizeNodeRuntimeBuildOutputs
111
+ };
@@ -0,0 +1,64 @@
1
+ import type { BuildExecutor, BuildOptions, BuildResult } from './build-adapter.js';
2
+ /**
3
+ * FIFO-serialized build executor wrapper.
4
+ *
5
+ * @remarks
6
+ * Wraps any `BuildExecutor` and ensures that no two builds run
7
+ * concurrently. The next build waits for the previous one to finish
8
+ * (success or failure) before starting.
9
+ *
10
+ * This is a bundler-agnostic primitive. It is unaware of bundler
11
+ * lifecycle events and exists purely to enforce one build at a time.
12
+ * Use it from the dev watch pipeline, the static preview path, or any
13
+ * caller that issues builds concurrently.
14
+ */
15
+ /**
16
+ * FIFO-serialized wrapper around a {@link BuildExecutor}.
17
+ *
18
+ * Every `build()` call enqueues onto the wrapper's internal queue. A
19
+ * build only starts after the previous build's promise has settled.
20
+ */
21
+ export declare class SerializedBuildExecutor implements BuildExecutor {
22
+ private readonly inner;
23
+ private tail;
24
+ constructor(inner: BuildExecutor);
25
+ /**
26
+ * Run a build through the serialized queue. The returned promise
27
+ * resolves with the inner executor's `BuildResult`. A rejected
28
+ * inner build does not block the queue — the next caller can
29
+ * proceed.
30
+ */
31
+ build(options: BuildOptions): Promise<BuildResult>;
32
+ /**
33
+ * Run an arbitrary async operation through the serialized queue.
34
+ *
35
+ * Use this when the work is not a `build()` call against a wrapped
36
+ * executor (e.g. when composing with a coordinator that needs to
37
+ * inject recovery around the inner call). The returned promise
38
+ * resolves with the operation's result. A rejected operation does
39
+ * not block the queue.
40
+ */
41
+ run<T>(operation: () => Promise<T>): Promise<T>;
42
+ /**
43
+ * Returns the wrapped executor. Tests use this to assert the
44
+ * delegation chain.
45
+ */
46
+ unwrap(): BuildExecutor;
47
+ /**
48
+ * Reset the queue to an empty state. Tests use this to recover
49
+ * from a poisoned tail.
50
+ */
51
+ resetForTests(): void;
52
+ /**
53
+ * Overrides the internal queue tail for fault-recovery tests. The
54
+ * supplied promise is awaited before the next enqueued operation
55
+ * starts.
56
+ */
57
+ setBuildQueueForTests(queue: Promise<unknown>): void;
58
+ /**
59
+ * Returns the current internal queue tail for fault-recovery
60
+ * tests. Tests await this to assert that recovery has cleared a
61
+ * wedged queue.
62
+ */
63
+ getBuildQueueForTests(): Promise<unknown>;
64
+ }
@@ -0,0 +1,63 @@
1
+ class SerializedBuildExecutor {
2
+ inner;
3
+ tail = Promise.resolve();
4
+ constructor(inner) {
5
+ this.inner = inner;
6
+ }
7
+ /**
8
+ * Run a build through the serialized queue. The returned promise
9
+ * resolves with the inner executor's `BuildResult`. A rejected
10
+ * inner build does not block the queue — the next caller can
11
+ * proceed.
12
+ */
13
+ build(options) {
14
+ return this.run(() => this.inner.build(options));
15
+ }
16
+ /**
17
+ * Run an arbitrary async operation through the serialized queue.
18
+ *
19
+ * Use this when the work is not a `build()` call against a wrapped
20
+ * executor (e.g. when composing with a coordinator that needs to
21
+ * inject recovery around the inner call). The returned promise
22
+ * resolves with the operation's result. A rejected operation does
23
+ * not block the queue.
24
+ */
25
+ run(operation) {
26
+ const next = this.tail.catch(() => void 0).then(() => operation());
27
+ this.tail = next.catch(() => void 0);
28
+ return next;
29
+ }
30
+ /**
31
+ * Returns the wrapped executor. Tests use this to assert the
32
+ * delegation chain.
33
+ */
34
+ unwrap() {
35
+ return this.inner;
36
+ }
37
+ /**
38
+ * Reset the queue to an empty state. Tests use this to recover
39
+ * from a poisoned tail.
40
+ */
41
+ resetForTests() {
42
+ this.tail = Promise.resolve();
43
+ }
44
+ /**
45
+ * Overrides the internal queue tail for fault-recovery tests. The
46
+ * supplied promise is awaited before the next enqueued operation
47
+ * starts.
48
+ */
49
+ setBuildQueueForTests(queue) {
50
+ this.tail = queue;
51
+ }
52
+ /**
53
+ * Returns the current internal queue tail for fault-recovery
54
+ * tests. Tests await this to assert that recovery has cleared a
55
+ * wedged queue.
56
+ */
57
+ getBuildQueueForTests() {
58
+ return this.tail;
59
+ }
60
+ }
61
+ export {
62
+ SerializedBuildExecutor
63
+ };
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Server-side CSS shim plugin for the bundler adapter.
3
+ *
4
+ * @remarks
5
+ * Page modules imported by the server (so the framework can read
6
+ * `getStaticProps` / `staticPaths` / page metadata) commonly have
7
+ * `import './style.css'` at the top. The bundler does not bundle
8
+ * CSS, and the server only needs the JS exports — the CSS itself
9
+ * is delivered to the browser via the page's `dependencies.stylesheets`
10
+ * declarations. This plugin:
11
+ *
12
+ * - Resolves `.css` imports to the absolute on-disk path.
13
+ * - Loads them and returns an empty ESM module with
14
+ * `moduleSideEffects: true` so the bundler keeps the import in
15
+ * the dependency graph without trying to bundle the bytes.
16
+ *
17
+ * The plugin is added by the adapter on every server-side build.
18
+ * Browser-side builds that want real CSS bundling should keep using
19
+ * a dedicated CSS pipeline (e.g. the postcss processor's output)
20
+ * and continue to declare stylesheets in `dependencies.stylesheets`
21
+ * — the shim is intentionally inert for those flows.
22
+ */
23
+ type RolldownPluginLike = {
24
+ name: string;
25
+ resolveId: (source: string, importer: string | undefined) => Promise<string | null> | string | null;
26
+ load: (id: string) => Promise<{
27
+ code: string;
28
+ moduleType: 'js';
29
+ moduleSideEffects: boolean;
30
+ } | null> | {
31
+ code: string;
32
+ moduleType: 'js';
33
+ moduleSideEffects: boolean;
34
+ } | null;
35
+ };
36
+ /**
37
+ * Builds a Rolldown plugin that turns `.css` imports into no-op ESM
38
+ * modules while preserving the dependency graph.
39
+ */
40
+ export declare function createServerSideCssShimPlugin(): RolldownPluginLike;
41
+ export {};
@@ -0,0 +1,35 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ const CSS_PATH = /\.css$/u;
4
+ const CSS_QUERY = "?ecopages-css-shim";
5
+ function stripShimQuery(id) {
6
+ const queryIndex = id.indexOf("?");
7
+ return queryIndex === -1 ? id : id.slice(0, queryIndex);
8
+ }
9
+ function createServerSideCssShimPlugin() {
10
+ return {
11
+ name: "ecopages:server-side-css-shim",
12
+ async resolveId(source, importer) {
13
+ if (!CSS_PATH.test(source)) {
14
+ return null;
15
+ }
16
+ const resolved = importer ? path.resolve(path.dirname(importer), source) : path.resolve(source);
17
+ return existsSync(resolved) ? `${resolved}${CSS_QUERY}` : null;
18
+ },
19
+ async load(id) {
20
+ if (!id.endsWith(CSS_QUERY)) {
21
+ return null;
22
+ }
23
+ const realPath = stripShimQuery(id);
24
+ readFileSync(realPath, "utf-8");
25
+ return {
26
+ code: 'export default "";',
27
+ moduleType: "js",
28
+ moduleSideEffects: true
29
+ };
30
+ }
31
+ };
32
+ }
33
+ export {
34
+ createServerSideCssShimPlugin
35
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Public cache exports for the bundler plugin chain.
3
+ *
4
+ * @module @ecopages/core/cache
5
+ */
6
+ export { ModuleParseCache, moduleParseCache, cachedParseSync, type ModuleParseOptions } from './module-parse-cache.js';
@@ -0,0 +1,6 @@
1
+ import { ModuleParseCache, moduleParseCache, cachedParseSync } from "./module-parse-cache.js";
2
+ export {
3
+ ModuleParseCache,
4
+ cachedParseSync,
5
+ moduleParseCache
6
+ };
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Process-wide parse cache for `oxc-parser.parseSync`.
3
+ *
4
+ * @remarks
5
+ * Several build plugins (eco-component-meta, client-graph-boundary,
6
+ * browser-runtime) each call `parseSync` on the same source file with
7
+ * overlapping options. This cache memoizes the parse result keyed by
8
+ * `(absolute path, source, options)`. When the source is unchanged,
9
+ * subsequent calls return the cached result without re-parsing.
10
+ *
11
+ * The cache is LRU-bounded (10 000 entries) and key-stable across a
12
+ * single HMR session. It is **content-hashed** rather than
13
+ * mtime-hashed so that `touch`/`utimes` does not invalidate a
14
+ * still-valid parse.
15
+ */
16
+ import { type ParseResult, type ParserOptions } from 'oxc-parser';
17
+ export type ModuleParseOptions = ParserOptions & {
18
+ /**
19
+ * Optional parser language override. If omitted, derived from the file
20
+ * extension at lookup time. Set this explicitly if your caller already
21
+ * computed the language (avoids re-deriving inside the cache).
22
+ */
23
+ lang?: ParserOptions['lang'];
24
+ };
25
+ /**
26
+ * LRU-bounded module parse cache.
27
+ *
28
+ * Single instance shared across the process. Constructed lazily; use
29
+ * {@link moduleParseCache} for the default shared instance.
30
+ */
31
+ export declare class ModuleParseCache {
32
+ private readonly entries;
33
+ private readonly maxEntries;
34
+ private hits;
35
+ private misses;
36
+ constructor(maxEntries?: number);
37
+ /**
38
+ * Parse `source` for `filePath`, memoizing by (filePath, source, options).
39
+ *
40
+ * @returns the {@link ParseResult} from `oxc-parser.parseSync`.
41
+ */
42
+ getOrParse(filePath: string, source: string, options?: ModuleParseOptions): ParseResult;
43
+ /** Clear all cached entries. Useful in tests and on full-rebuild signals. */
44
+ clear(): void;
45
+ /** Current cache size (for observability). */
46
+ get size(): number;
47
+ /** Cumulative hit/miss counters (for observability). */
48
+ stats(): {
49
+ hits: number;
50
+ misses: number;
51
+ size: number;
52
+ hitRate: number;
53
+ };
54
+ }
55
+ /**
56
+ * Default shared cache. Use this from plugin code so the cache is
57
+ * amortized across plugins and build invocations.
58
+ */
59
+ export declare const moduleParseCache: ModuleParseCache;
60
+ /**
61
+ * Drop-in replacement for `oxc-parser.parseSync` that uses the shared
62
+ * {@link moduleParseCache}. Use everywhere we currently call `parseSync`
63
+ * on user/source files during a build.
64
+ */
65
+ export declare function cachedParseSync(filePath: string, source: string, options?: ModuleParseOptions): ParseResult;
@@ -0,0 +1,75 @@
1
+ import { parseSync } from "oxc-parser";
2
+ import { rapidhash } from "../utils/hash.js";
3
+ const DEFAULT_MAX_ENTRIES = 1e4;
4
+ class ModuleParseCache {
5
+ entries = /* @__PURE__ */ new Map();
6
+ maxEntries;
7
+ hits = 0;
8
+ misses = 0;
9
+ constructor(maxEntries = DEFAULT_MAX_ENTRIES) {
10
+ if (maxEntries <= 0) {
11
+ throw new Error(`ModuleParseCache: maxEntries must be > 0, got ${maxEntries}`);
12
+ }
13
+ this.maxEntries = maxEntries;
14
+ }
15
+ /**
16
+ * Parse `source` for `filePath`, memoizing by (filePath, source, options).
17
+ *
18
+ * @returns the {@link ParseResult} from `oxc-parser.parseSync`.
19
+ */
20
+ getOrParse(filePath, source, options = {}) {
21
+ const hash = rapidhash(source);
22
+ const key = makeKey(filePath, hash, options);
23
+ const existing = this.entries.get(key);
24
+ if (existing && existing.hash === hash) {
25
+ this.hits += 1;
26
+ this.entries.delete(key);
27
+ this.entries.set(key, existing);
28
+ return existing.result;
29
+ }
30
+ this.misses += 1;
31
+ const result = parseSync(filePath, source, options);
32
+ this.entries.set(key, { hash, result });
33
+ if (this.entries.size > this.maxEntries) {
34
+ const oldestKey = this.entries.keys().next().value;
35
+ if (oldestKey !== void 0) {
36
+ this.entries.delete(oldestKey);
37
+ }
38
+ }
39
+ return result;
40
+ }
41
+ /** Clear all cached entries. Useful in tests and on full-rebuild signals. */
42
+ clear() {
43
+ this.entries.clear();
44
+ this.hits = 0;
45
+ this.misses = 0;
46
+ }
47
+ /** Current cache size (for observability). */
48
+ get size() {
49
+ return this.entries.size;
50
+ }
51
+ /** Cumulative hit/miss counters (for observability). */
52
+ stats() {
53
+ const total = this.hits + this.misses;
54
+ return {
55
+ hits: this.hits,
56
+ misses: this.misses,
57
+ size: this.entries.size,
58
+ hitRate: total === 0 ? 0 : this.hits / total
59
+ };
60
+ }
61
+ }
62
+ const moduleParseCache = new ModuleParseCache();
63
+ function cachedParseSync(filePath, source, options = {}) {
64
+ return moduleParseCache.getOrParse(filePath, source, options);
65
+ }
66
+ function makeKey(filePath, sourceHash, options) {
67
+ const lang = options.lang ?? "";
68
+ const sourceType = options.sourceType ?? "";
69
+ return `${filePath} ${sourceHash.toString(36)} ${lang} ${sourceType}`;
70
+ }
71
+ export {
72
+ ModuleParseCache,
73
+ cachedParseSync,
74
+ moduleParseCache
75
+ };
@@ -12,8 +12,9 @@ It is responsible for:
12
12
 
13
13
  - validating integration, processor, and loader registration
14
14
  - resolving semantic paths such as `html` and `404` templates
15
- - creating app-owned runtime state such as the build adapter, build executor, build manifest, dev graph service, runtime specifier registry, and Node runtime manifest
15
+ - selecting explicit build ownership and creating app-owned runtime state such as the build adapter, build executor, build manifest, dev graph service, and remaining compatibility-only runtime state
16
16
  - enforcing runtime capability requirements before startup
17
+ - carrying host-injected runtime dependencies only through abstract slots such as host module loaders, never through bundler-specific core defaults
17
18
 
18
19
  ## Main Files
19
20
 
@@ -23,9 +24,11 @@ It is responsible for:
23
24
  ## Ownership Rules
24
25
 
25
26
  - Integrations and processors declare contributions.
26
- - `ConfigBuilder.build()` decides ordering and validates compatibility.
27
+ - `ConfigBuilder.build()` decides ordering, validates compatibility, and seals build ownership for the finalized app config.
27
28
  - Runtime startup reuses finalized config/build state; it should not recompute manifest ownership.
28
29
 
30
+ App-owned is the default ownership path. Host-owned is explicit and should be selected during config construction when a host-driven compatibility flow must avoid silently falling back to app build execution.
31
+
29
32
  ## Output
30
33
 
31
34
  The result of this layer is a built `EcoPagesAppConfig` with resolved absolute paths and app-owned runtime services attached under `appConfig.runtime`.
@@ -2,11 +2,13 @@
2
2
  * This module contains the ConfigBuilder class, which is used to build the EcoPagesAppConfig object.
3
3
  * @module
4
4
  */
5
+ import { type BuildOwnership } from '../build/build-adapter.js';
5
6
  import type { EcoBuildPlugin } from '../build/build-types.js';
6
- import type { EcoPagesAppConfig, RobotsPreference } from '../internal-types.js';
7
- import type { IntegrationPlugin } from '../plugins/integration-plugin.js';
7
+ import type { EcoPagesAppConfig, RobotsPreference } from '../types/internal-types.js';
8
+ import type { AnyIntegrationPlugin } from '../plugins/integration-plugin.js';
8
9
  import type { Processor } from '../plugins/processor.js';
9
- import type { PageMetadataProps } from '../public-types.js';
10
+ import type { EcoSourceTransform } from '../plugins/source-transform.js';
11
+ import type { PageMetadataProps } from '../types/public-types.js';
10
12
  import type { CacheConfig } from '../services/cache/cache.types.js';
11
13
  export declare const CONFIG_BUILDER_ERRORS: {
12
14
  readonly DUPLICATE_INTEGRATION_NAMES: "Integrations names must be unique";
@@ -25,15 +27,6 @@ type RuntimeKind = 'node' | 'bun';
25
27
  * Provides a fluent interface for setting various configuration options and managing
26
28
  * application settings.
27
29
  *
28
- * @example
29
- * ```typescript
30
- * const config = new ConfigBuilder()
31
- * .setBaseUrl('https://example.com')
32
- * .setRootDir('./myproject')
33
- * .setSrcDir('source')
34
- * .build();
35
- * ```
36
- *
37
30
  * @remarks
38
31
  * The ConfigBuilder follows the builder pattern and allows for:
39
32
  * - Setting directory paths for various components (pages, includes, layouts, etc.)
@@ -51,6 +44,7 @@ type RuntimeKind = 'node' | 'bun';
51
44
  * @throws {Error} When adding duplicate processors or loaders
52
45
  */
53
46
  export declare class ConfigBuilder {
47
+ private buildOwnership;
54
48
  config: EcoPagesAppConfig;
55
49
  /**
56
50
  * Sets the base URL for the application.
@@ -68,6 +62,29 @@ export declare class ConfigBuilder {
68
62
  * @returns The ConfigBuilder instance for method chaining
69
63
  */
70
64
  setRootDir(rootDir: string): this;
65
+ /**
66
+ * Sets which runtime path owns build execution for the finalized app config.
67
+ *
68
+ * @remarks
69
+ * Three ownership values are accepted:
70
+ *
71
+ * - `'rolldown'` (default): Ecopages runs builds through
72
+ * {@link RolldownBuildAdapter}, creating a new `rolldown()` instance
73
+ * per build. Best for one-shot production builds and benchmarks.
74
+ * - `'rolldown-dev'`: Ecopages runs builds through
75
+ * {@link RolldownDevBuildAdapter}, which wraps Rolldown's experimental
76
+ * `DevEngine` and reuses the cached module graph, resolver, and
77
+ * transform cache across rebuilds. Best for HMR and watch mode where
78
+ * the same entrypoints are rebuilt repeatedly.
79
+ * - `'vite-host'`: a host runtime owns the build. Ecopages exposes a
80
+ * {@link ViteHostBuildAdapter} boundary marker that throws on direct
81
+ * use. Select this only for host-driven compatibility flows where
82
+ * core must not silently fall back to app build execution.
83
+ *
84
+ * Defaults to `'rolldown'` when {@link ConfigBuilder.build} runs
85
+ * without an explicit ownership.
86
+ */
87
+ setBuildOwnership(buildOwnership: BuildOwnership): this;
71
88
  /**
72
89
  * Sets the source directory relative to the root directory.
73
90
  * This directory contains all the source files for the application.
@@ -133,7 +150,7 @@ export declare class ConfigBuilder {
133
150
  * @param integrations - An array of integration plugins
134
151
  * @returns The ConfigBuilder instance for method chaining
135
152
  */
136
- setIntegrations(integrations: IntegrationPlugin<unknown>[]): this;
153
+ setIntegrations(integrations: AnyIntegrationPlugin[]): this;
137
154
  /**
138
155
  * Sets the output directory for the built application.
139
156
  *
@@ -192,6 +209,11 @@ export declare class ConfigBuilder {
192
209
  * @returns The ConfigBuilder instance for method chaining
193
210
  */
194
211
  setLoaders(loaders: EcoBuildPlugin[]): this;
212
+ /**
213
+ * Sets the source transforms to use for transform-first bundlers such as Vite.
214
+ * This replaces any existing source transforms.
215
+ */
216
+ setSourceTransforms(sourceTransforms: EcoSourceTransform[]): this;
195
217
  /**
196
218
  * Adds a loader to the application.
197
219
  *
@@ -201,6 +223,12 @@ export declare class ConfigBuilder {
201
223
  * @throws Error if a loader with the same name already exists
202
224
  */
203
225
  addLoader(name: string, loader: EcoBuildPlugin): this;
226
+ /**
227
+ * Adds a source transform to the application.
228
+ *
229
+ * @throws Error if a source transform with the same name already exists.
230
+ */
231
+ addSourceTransform(name: string, sourceTransform: EcoSourceTransform): this;
204
232
  /**
205
233
  * Sets the cache configuration for ISR and page caching.
206
234
  *