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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/README.md +79 -28
  2. package/package.json +94 -116
  3. package/src/adapters/README.md +2 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +19 -115
  12. package/src/adapters/bun/hmr-manager.js +25 -301
  13. package/src/adapters/bun/index.d.ts +1 -1
  14. package/src/adapters/bun/index.js +2 -2
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +100 -32
  18. package/src/adapters/bun/server-adapter.js +142 -65
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +1 -5
  24. package/src/adapters/index.js +1 -7
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +22 -103
  31. package/src/adapters/node/node-hmr-manager.js +26 -289
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +19 -42
  37. package/src/adapters/node/server-adapter.js +94 -139
  38. package/src/adapters/node/static-content-server.d.ts +1 -1
  39. package/src/adapters/node/static-content-server.js +1 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/adapters/shared/define-api-handler.d.ts +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
  53. package/src/adapters/shared/fs-server-response-matcher.js +72 -46
  54. package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
  55. package/src/adapters/shared/hmr-html-response.d.ts +1 -1
  56. package/src/adapters/shared/hmr-html-response.js +4 -3
  57. package/src/adapters/shared/render-context.d.ts +5 -3
  58. package/src/adapters/shared/render-context.js +24 -1
  59. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  60. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  61. package/src/adapters/shared/runtime-host.d.ts +12 -0
  62. package/src/adapters/shared/server-adapter.d.ts +22 -11
  63. package/src/adapters/shared/server-adapter.js +183 -133
  64. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  65. package/src/adapters/shared/server-route-handler.js +4 -4
  66. package/src/adapters/shared/server-static-builder.d.ts +8 -7
  67. package/src/adapters/shared/server-static-builder.js +6 -5
  68. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  69. package/src/adapters/shared/shared-hmr-manager.js +241 -0
  70. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  71. package/src/build/README.md +57 -67
  72. package/src/build/browser-runtime-manifest.d.ts +31 -0
  73. package/src/build/browser-runtime-manifest.js +61 -0
  74. package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
  75. package/src/build/browser-runtime-plugin-helpers.js +14 -0
  76. package/src/build/browser-runtime-plugin.d.ts +78 -0
  77. package/src/build/browser-runtime-plugin.js +173 -0
  78. package/src/build/build-adapter.d.ts +384 -63
  79. package/src/build/build-adapter.js +129 -54
  80. package/src/build/build-manifest.d.ts +6 -0
  81. package/src/build/build-manifest.js +21 -2
  82. package/src/build/build-types.d.ts +2 -2
  83. package/src/build/rolldown-adapter-helpers.d.ts +58 -0
  84. package/src/build/rolldown-adapter-helpers.js +265 -0
  85. package/src/build/rolldown-build-adapter.d.ts +28 -0
  86. package/src/build/rolldown-build-adapter.js +65 -0
  87. package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
  88. package/src/build/rolldown-dev-build-adapter.js +166 -0
  89. package/src/build/rolldown-plugin-bridge.d.ts +59 -0
  90. package/src/build/rolldown-plugin-bridge.js +199 -0
  91. package/src/build/runtime-build-executor.d.ts +15 -7
  92. package/src/build/runtime-build-executor.js +8 -9
  93. package/src/build/runtime-build-output-normalizer.d.ts +3 -0
  94. package/src/build/runtime-build-output-normalizer.js +111 -0
  95. package/src/build/serialized-build-executor.d.ts +64 -0
  96. package/src/build/serialized-build-executor.js +63 -0
  97. package/src/build/server-side-css-shim-plugin.d.ts +41 -0
  98. package/src/build/server-side-css-shim-plugin.js +35 -0
  99. package/src/cache/index.d.ts +6 -0
  100. package/src/cache/index.js +6 -0
  101. package/src/cache/module-parse-cache.d.ts +65 -0
  102. package/src/cache/module-parse-cache.js +75 -0
  103. package/src/config/README.md +5 -2
  104. package/src/config/config-builder.d.ts +41 -13
  105. package/src/config/config-builder.js +62 -24
  106. package/src/declarations.d.ts +1 -1
  107. package/src/dev/host-runtime.d.ts +10 -0
  108. package/src/dev/host-runtime.js +24 -0
  109. package/src/dev/sc-server.d.ts +1 -1
  110. package/src/dev/sc-server.js +1 -1
  111. package/src/eco/eco.browser.d.ts +2 -0
  112. package/src/eco/eco.browser.js +88 -0
  113. package/src/eco/eco.js +50 -45
  114. package/src/eco/eco.types.d.ts +60 -8
  115. package/src/eco/eco.utils.d.ts +1 -40
  116. package/src/eco/eco.utils.js +5 -35
  117. package/src/eco/global-injector-map.d.ts +3 -3
  118. package/src/eco/global-injector-map.js +2 -2
  119. package/src/eco/lazy-injector-map.d.ts +2 -2
  120. package/src/errors/index.d.ts +1 -0
  121. package/src/errors/index.js +3 -1
  122. package/src/hmr/client/hmr-runtime.js +9 -1
  123. package/src/hmr/hmr-strategy.d.ts +16 -13
  124. package/src/hmr/hmr-strategy.js +22 -7
  125. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  126. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  127. package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
  128. package/src/hmr/strategies/js-hmr-strategy.js +5 -10
  129. package/src/index.browser.d.ts +2 -2
  130. package/src/index.browser.js +1 -1
  131. package/src/index.d.ts +3 -2
  132. package/src/index.js +15 -4
  133. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
  134. package/src/integrations/ghtml/ghtml-renderer.js +24 -29
  135. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  136. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  137. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  138. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  139. package/src/plugins/README.md +1 -0
  140. package/src/plugins/alias-resolver-cache.d.ts +68 -0
  141. package/src/plugins/alias-resolver-cache.js +106 -0
  142. package/src/plugins/alias-resolver-plugin.d.ts +5 -1
  143. package/src/plugins/alias-resolver-plugin.js +19 -7
  144. package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
  145. package/src/plugins/eco-component-meta-plugin.js +43 -25
  146. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  147. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  148. package/src/plugins/integration-plugin.d.ts +136 -42
  149. package/src/plugins/integration-plugin.js +99 -31
  150. package/src/plugins/processor.d.ts +4 -2
  151. package/src/plugins/processor.js +8 -3
  152. package/src/plugins/source-transform.d.ts +46 -0
  153. package/src/plugins/source-transform.js +71 -0
  154. package/src/route-renderer/GRAPH.md +80 -318
  155. package/src/route-renderer/README.md +74 -78
  156. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  157. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  158. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  159. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  160. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  161. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  162. package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
  163. package/src/route-renderer/orchestration/integration-renderer.js +660 -258
  164. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  165. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  166. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  167. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  168. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  169. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  170. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  171. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  172. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  173. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  174. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  175. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  176. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  177. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  178. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  179. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  180. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  181. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  182. package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
  183. package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
  184. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  185. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  186. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  187. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  188. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  189. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  190. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  191. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  192. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  193. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  194. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  195. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  196. package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
  197. package/src/route-renderer/page-loading/page-module-loader.js +8 -5
  198. package/src/route-renderer/route-renderer.d.ts +31 -23
  199. package/src/route-renderer/route-renderer.js +17 -24
  200. package/src/router/README.md +76 -8
  201. package/src/router/client/navigation-coordinator.d.ts +20 -0
  202. package/src/router/client/navigation-coordinator.js +2 -2
  203. package/src/router/server/route-registry.d.ts +78 -0
  204. package/src/router/server/route-registry.js +262 -0
  205. package/src/services/README.md +1 -2
  206. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  207. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  208. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
  209. package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
  210. package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
  211. package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
  212. package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
  215. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  216. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  217. package/src/services/assets/asset-processing-service/index.d.ts +6 -5
  218. package/src/services/assets/asset-processing-service/index.js +6 -5
  219. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  220. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  221. package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
  222. package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
  223. package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  229. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
  230. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
  231. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
  235. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  236. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
  237. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
  239. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  240. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  241. package/src/services/assets/browser-bundle.service.d.ts +44 -3
  242. package/src/services/assets/browser-bundle.service.js +15 -7
  243. package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
  244. package/src/services/html/html-rewriter-provider.service.js +4 -1
  245. package/src/services/html/html-transformer.service.d.ts +22 -3
  246. package/src/services/html/html-transformer.service.js +101 -35
  247. package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
  248. package/src/services/invalidation/development-invalidation.service.js +1 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/page-module-import.service.d.ts +32 -8
  258. package/src/services/module-loading/page-module-import.service.js +83 -22
  259. package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
  260. package/src/services/module-loading/server-module-transpiler.service.js +5 -2
  261. package/src/services/module-loading/source-module-support.d.ts +5 -0
  262. package/src/services/module-loading/source-module-support.js +8 -0
  263. package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
  264. package/src/services/runtime-state/dev-graph.service.js +10 -10
  265. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
  266. package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
  267. package/src/static-site-generator/static-site-generator.d.ts +23 -28
  268. package/src/static-site-generator/static-site-generator.js +119 -156
  269. package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
  270. package/src/types/internal-types.js +0 -0
  271. package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
  272. package/src/types/public-types.js +0 -0
  273. package/src/utils/html-escaping.d.ts +7 -0
  274. package/src/utils/html-escaping.js +6 -0
  275. package/src/utils/locals-utils.d.ts +1 -1
  276. package/src/utils/parse-cli-args.d.ts +4 -1
  277. package/src/utils/parse-cli-args.js +16 -1
  278. package/src/utils/resolve-work-dir.js +1 -1
  279. package/src/watchers/project-watcher.d.ts +4 -4
  280. package/src/watchers/project-watcher.js +35 -41
  281. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  282. package/src/watchers/project-watcher.test-helpers.js +5 -5
  283. package/CHANGELOG.md +0 -31
  284. package/src/adapters/abstract/application-adapter.ts +0 -337
  285. package/src/adapters/abstract/router-adapter.ts +0 -30
  286. package/src/adapters/abstract/server-adapter.ts +0 -79
  287. package/src/adapters/bun/client-bridge.ts +0 -62
  288. package/src/adapters/bun/create-app.ts +0 -189
  289. package/src/adapters/bun/hmr-manager.ts +0 -409
  290. package/src/adapters/bun/index.ts +0 -2
  291. package/src/adapters/bun/server-adapter.ts +0 -499
  292. package/src/adapters/bun/server-lifecycle.d.ts +0 -63
  293. package/src/adapters/bun/server-lifecycle.js +0 -92
  294. package/src/adapters/bun/server-lifecycle.ts +0 -124
  295. package/src/adapters/index.ts +0 -6
  296. package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
  297. package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
  298. package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
  299. package/src/adapters/node/create-app.ts +0 -179
  300. package/src/adapters/node/index.d.ts +0 -6
  301. package/src/adapters/node/index.js +0 -11
  302. package/src/adapters/node/index.ts +0 -16
  303. package/src/adapters/node/node-client-bridge.ts +0 -79
  304. package/src/adapters/node/node-hmr-manager.ts +0 -381
  305. package/src/adapters/node/runtime-adapter.d.ts +0 -46
  306. package/src/adapters/node/runtime-adapter.js +0 -306
  307. package/src/adapters/node/runtime-adapter.ts +0 -439
  308. package/src/adapters/node/server-adapter.ts +0 -488
  309. package/src/adapters/node/static-content-server.ts +0 -239
  310. package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
  311. package/src/adapters/node/write-runtime-manifest.js +0 -12
  312. package/src/adapters/node/write-runtime-manifest.ts +0 -38
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/define-api-handler.ts +0 -66
  316. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
  317. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
  318. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  319. package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
  320. package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
  321. package/src/adapters/shared/hmr-html-response.ts +0 -52
  322. package/src/adapters/shared/render-context.ts +0 -120
  323. package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
  324. package/src/adapters/shared/runtime-bootstrap.js +0 -43
  325. package/src/adapters/shared/runtime-bootstrap.ts +0 -79
  326. package/src/adapters/shared/server-adapter.ts +0 -489
  327. package/src/adapters/shared/server-route-handler.ts +0 -153
  328. package/src/adapters/shared/server-static-builder.ts +0 -166
  329. package/src/build/build-adapter.ts +0 -361
  330. package/src/build/build-manifest.ts +0 -54
  331. package/src/build/build-types.ts +0 -83
  332. package/src/build/dev-build-coordinator.d.ts +0 -74
  333. package/src/build/dev-build-coordinator.js +0 -161
  334. package/src/build/dev-build-coordinator.ts +0 -221
  335. package/src/build/esbuild-build-adapter.d.ts +0 -72
  336. package/src/build/esbuild-build-adapter.js +0 -422
  337. package/src/build/esbuild-build-adapter.ts +0 -559
  338. package/src/build/runtime-build-executor.ts +0 -34
  339. package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
  340. package/src/build/runtime-specifier-alias-plugin.js +0 -31
  341. package/src/build/runtime-specifier-alias-plugin.ts +0 -58
  342. package/src/config/config-builder.ts +0 -706
  343. package/src/constants.ts +0 -54
  344. package/src/create-app.ts +0 -87
  345. package/src/dev/sc-server.ts +0 -143
  346. package/src/eco/component-render-context.d.ts +0 -105
  347. package/src/eco/component-render-context.js +0 -87
  348. package/src/eco/component-render-context.ts +0 -224
  349. package/src/eco/eco.ts +0 -242
  350. package/src/eco/eco.types.ts +0 -221
  351. package/src/eco/eco.utils.ts +0 -89
  352. package/src/eco/global-injector-map.ts +0 -112
  353. package/src/eco/lazy-injector-map.ts +0 -120
  354. package/src/eco/module-dependencies.ts +0 -75
  355. package/src/errors/http-error.ts +0 -72
  356. package/src/errors/index.ts +0 -2
  357. package/src/errors/locals-access-error.ts +0 -7
  358. package/src/global/app-logger.ts +0 -4
  359. package/src/hmr/client/hmr-runtime.ts +0 -152
  360. package/src/hmr/hmr-strategy.ts +0 -172
  361. package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
  362. package/src/hmr/hmr.test.e2e.ts +0 -66
  363. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  364. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  365. package/src/index.browser.ts +0 -3
  366. package/src/index.ts +0 -5
  367. package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
  368. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  369. package/src/internal-types.ts +0 -232
  370. package/src/plugins/alias-resolver-plugin.ts +0 -63
  371. package/src/plugins/eco-component-meta-plugin.ts +0 -481
  372. package/src/plugins/integration-plugin.ts +0 -226
  373. package/src/plugins/processor.ts +0 -240
  374. package/src/plugins/runtime-capability.ts +0 -14
  375. package/src/public-types.ts +0 -1317
  376. package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
  377. package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
  378. package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
  379. package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
  380. package/src/route-renderer/component-graph/component-graph.js +0 -72
  381. package/src/route-renderer/component-graph/component-graph.ts +0 -159
  382. package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
  383. package/src/route-renderer/component-graph/component-marker.js +0 -46
  384. package/src/route-renderer/component-graph/component-marker.ts +0 -117
  385. package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
  386. package/src/route-renderer/component-graph/component-reference.js +0 -19
  387. package/src/route-renderer/component-graph/component-reference.ts +0 -29
  388. package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
  389. package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
  390. package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
  391. package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
  392. package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
  393. package/src/route-renderer/orchestration/render-execution.service.js +0 -121
  394. package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
  395. package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
  396. package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
  397. package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
  398. package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
  399. package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
  400. package/src/route-renderer/route-renderer.ts +0 -115
  401. package/src/router/client/link-intent.test.browser.ts +0 -51
  402. package/src/router/client/link-intent.ts +0 -92
  403. package/src/router/client/navigation-coordinator.ts +0 -433
  404. package/src/router/server/fs-router-scanner.d.ts +0 -41
  405. package/src/router/server/fs-router-scanner.js +0 -156
  406. package/src/router/server/fs-router-scanner.ts +0 -219
  407. package/src/router/server/fs-router.d.ts +0 -26
  408. package/src/router/server/fs-router.js +0 -100
  409. package/src/router/server/fs-router.ts +0 -122
  410. package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
  411. package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
  412. package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
  413. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
  414. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
  415. package/src/services/assets/asset-processing-service/index.ts +0 -5
  416. package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
  417. package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
  418. package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
  419. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
  420. package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
  421. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  422. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  423. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
  424. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  425. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
  426. package/src/services/assets/browser-bundle.service.ts +0 -53
  427. package/src/services/cache/cache.types.ts +0 -126
  428. package/src/services/cache/index.ts +0 -18
  429. package/src/services/cache/memory-cache-store.ts +0 -130
  430. package/src/services/cache/page-cache-service.ts +0 -202
  431. package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
  432. package/src/services/html/html-rewriter-provider.service.ts +0 -103
  433. package/src/services/html/html-transformer.service.ts +0 -279
  434. package/src/services/invalidation/development-invalidation.service.ts +0 -261
  435. package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
  436. package/src/services/module-loading/page-module-import.service.ts +0 -200
  437. package/src/services/module-loading/server-loader.service.d.ts +0 -96
  438. package/src/services/module-loading/server-loader.service.js +0 -32
  439. package/src/services/module-loading/server-loader.service.ts +0 -130
  440. package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
  441. package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
  442. package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
  443. package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
  444. package/src/services/runtime-state/dev-graph.service.ts +0 -217
  445. package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
  446. package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
  447. package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
  448. package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
  449. package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
  450. package/src/services/validation/schema-validation-service.ts +0 -204
  451. package/src/services/validation/standard-schema.types.ts +0 -68
  452. package/src/static-site-generator/static-site-generator.ts +0 -462
  453. package/src/utils/css.d.ts +0 -1
  454. package/src/utils/css.js +0 -7
  455. package/src/utils/css.ts +0 -5
  456. package/src/utils/deep-merge.ts +0 -47
  457. package/src/utils/hash.ts +0 -5
  458. package/src/utils/html.ts +0 -1
  459. package/src/utils/invariant.ts +0 -15
  460. package/src/utils/locals-utils.ts +0 -37
  461. package/src/utils/parse-cli-args.ts +0 -83
  462. package/src/utils/path-utils.module.ts +0 -14
  463. package/src/utils/resolve-work-dir.ts +0 -45
  464. package/src/utils/runtime.ts +0 -44
  465. package/src/utils/server-utils.module.ts +0 -67
  466. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  467. package/src/watchers/project-watcher.ts +0 -363
  468. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  469. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  470. /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
  471. /package/src/{constants.js → config/constants.js} +0 -0
@@ -1,2 +1,3 @@
1
1
  export { HttpError } from './http-error.js';
2
2
  export type { HttpErrorDetails, HttpErrorJson } from './http-error.js';
3
+ export { LocalsAccessError } from './locals-access-error.js';
@@ -1,4 +1,6 @@
1
1
  import { HttpError } from "./http-error.js";
2
+ import { LocalsAccessError } from "./locals-access-error.js";
2
3
  export {
3
- HttpError
4
+ HttpError,
5
+ LocalsAccessError
4
6
  };
@@ -33,7 +33,7 @@ import { getEcoNavigationRuntime } from "../../router/client/navigation-coordina
33
33
  break;
34
34
  case "layout-update": {
35
35
  await waitForNavigationToSettle(navigationRuntime);
36
- if (await navigationRuntime.reloadCurrentPage({ clearCache: true })) {
36
+ if (await navigationRuntime.reloadCurrentPage({ clearCache: true, moduleUrl: getActiveHmrModuleUrl() })) {
37
37
  } else {
38
38
  location.reload();
39
39
  }
@@ -71,6 +71,14 @@ import { getEcoNavigationRuntime } from "../../router/client/navigation-coordina
71
71
  console.error("[ecopages] Failed to apply HMR update:", e);
72
72
  }
73
73
  }
74
+ function getActiveHmrModuleUrl() {
75
+ const pageModule = window.__ECO_PAGES__?.page?.module;
76
+ if (pageModule && pageModule.includes("/assets/_hmr/")) {
77
+ return pageModule.split("?")[0];
78
+ }
79
+ const handlerPaths = Object.keys(window.__ECO_PAGES__?.hmrHandlers ?? {});
80
+ return handlerPaths[handlerPaths.length - 1];
81
+ }
74
82
  async function waitForNavigationToSettle(navigationRuntime) {
75
83
  if (!navigationRuntime.hasPendingNavigationTransaction()) {
76
84
  return;
@@ -1,4 +1,4 @@
1
- import type { ClientBridgeEvent } from '../public-types';
1
+ import type { ClientBridgeEvent } from '../types/public-types.js';
2
2
  /**
3
3
  * HMR Strategy Pattern
4
4
  *
@@ -18,11 +18,13 @@ import type { ClientBridgeEvent } from '../public-types';
18
18
  * async process(filePath: string): Promise<HmrAction> {
19
19
  * return {
20
20
  * type: 'broadcast',
21
- * events: [{ type: 'update', path: filePath, timestamp: Date.now() }]
21
+ * events: [{ type: 'update', path: filePath, timestamp: Date.now() }],
22
22
  * };
23
23
  * }
24
24
  * }
25
-
25
+ * ```
26
+ */
27
+ /**
26
28
  * Defines the category of an HMR strategy, which determines its execution priority.
27
29
  * Strategies are evaluated in descending order: INTEGRATION → ASSET → SCRIPT → FALLBACK.
28
30
  *
@@ -30,28 +32,29 @@ import type { ClientBridgeEvent } from '../public-types';
30
32
  * The numeric values represent base priorities. Strategies can fine-tune their priority
31
33
  * using the `priorityOffset` property.
32
34
  */
33
- export declare enum HmrStrategyType {
35
+ export declare const HmrStrategyType: {
34
36
  /**
35
37
  * Integration-specific strategies (React, Lit, etc.)
36
38
  * Highest priority to allow framework-specific HMR handling.
37
39
  */
38
- INTEGRATION = 100,
40
+ readonly INTEGRATION: 100;
39
41
  /**
40
42
  * Asset processing strategies (CSS, images, etc.)
41
43
  * High priority for specialized asset handling.
42
44
  */
43
- ASSET = 50,
45
+ readonly ASSET: 50;
44
46
  /**
45
47
  * Generic script bundling strategies (JS/TS)
46
48
  * Medium priority for standard script processing.
47
49
  */
48
- SCRIPT = 25,
50
+ readonly SCRIPT: 25;
49
51
  /**
50
52
  * Fallback strategy for unhandled file types.
51
53
  * Lowest priority, triggers full page reload.
52
54
  */
53
- FALLBACK = 0
54
- }
55
+ readonly FALLBACK: 0;
56
+ };
57
+ export type HmrStrategyType = (typeof HmrStrategyType)[keyof typeof HmrStrategyType];
55
58
  /**
56
59
  * Represents an action to be taken after processing a file change.
57
60
  */
@@ -62,7 +65,7 @@ export interface HmrAction {
62
65
  type: 'broadcast' | 'none';
63
66
  /**
64
67
  * The HMR events to broadcast, if type is 'broadcast'.
65
- * capable of broadcasting multiple events at once.
68
+ * Multiple events may be broadcast in one action.
66
69
  */
67
70
  events?: ClientBridgeEvent[];
68
71
  }
@@ -74,8 +77,8 @@ export interface HmrAction {
74
77
  * whether they match the changed file path.
75
78
  *
76
79
  * @remarks
77
- * Strategies should be stateless and idempotent. The same file change should always
78
- * produce the same result when processed by the same strategy.
80
+ * Strategies are expected to be stateless and idempotent. The same file change
81
+ * should produce the same result when processed by the same strategy.
79
82
  *
80
83
  * @example
81
84
  * ```typescript
@@ -120,7 +123,7 @@ export declare abstract class HmrStrategy {
120
123
  * Determines if this strategy can handle the given file path.
121
124
  *
122
125
  * @param filePath - Absolute path to the changed file
123
- * @returns True if this strategy should process the file
126
+ * @returns `true` when this strategy should process the file
124
127
  *
125
128
  * @example
126
129
  * ```typescript
@@ -1,10 +1,25 @@
1
- var HmrStrategyType = /* @__PURE__ */ ((HmrStrategyType2) => {
2
- HmrStrategyType2[HmrStrategyType2["INTEGRATION"] = 100] = "INTEGRATION";
3
- HmrStrategyType2[HmrStrategyType2["ASSET"] = 50] = "ASSET";
4
- HmrStrategyType2[HmrStrategyType2["SCRIPT"] = 25] = "SCRIPT";
5
- HmrStrategyType2[HmrStrategyType2["FALLBACK"] = 0] = "FALLBACK";
6
- return HmrStrategyType2;
7
- })(HmrStrategyType || {});
1
+ const HmrStrategyType = {
2
+ /**
3
+ * Integration-specific strategies (React, Lit, etc.)
4
+ * Highest priority to allow framework-specific HMR handling.
5
+ */
6
+ INTEGRATION: 100,
7
+ /**
8
+ * Asset processing strategies (CSS, images, etc.)
9
+ * High priority for specialized asset handling.
10
+ */
11
+ ASSET: 50,
12
+ /**
13
+ * Generic script bundling strategies (JS/TS)
14
+ * Medium priority for standard script processing.
15
+ */
16
+ SCRIPT: 25,
17
+ /**
18
+ * Fallback strategy for unhandled file types.
19
+ * Lowest priority, triggers full page reload.
20
+ */
21
+ FALLBACK: 0
22
+ };
8
23
  class HmrStrategy {
9
24
  /**
10
25
  * Optional offset to fine-tune priority within the same category.
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module
8
8
  */
9
- import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy';
9
+ import { HmrStrategy, type HmrAction } from '../hmr-strategy.js';
10
10
  /**
11
11
  * Default fallback strategy for unhandled file types.
12
12
  *
@@ -25,7 +25,7 @@ import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy';
25
25
  * ```
26
26
  */
27
27
  export declare class DefaultHmrStrategy extends HmrStrategy {
28
- readonly type = HmrStrategyType.FALLBACK;
28
+ readonly type: 0;
29
29
  /**
30
30
  * Matches all file paths.
31
31
  *
@@ -1,4 +1,4 @@
1
- import { HmrStrategy, HmrStrategyType } from "../hmr-strategy";
1
+ import { HmrStrategy, HmrStrategyType } from "../hmr-strategy.js";
2
2
  class DefaultHmrStrategy extends HmrStrategy {
3
3
  type = HmrStrategyType.FALLBACK;
4
4
  /**
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * @module
9
9
  */
10
- import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy';
10
+ import { HmrStrategy, type HmrAction } from '../hmr-strategy.js';
11
11
  import type { EcoBuildPlugin } from '../../build/build-types.js';
12
12
  import type { BrowserBundleExecutor } from '../../services/assets/browser-bundle.service.js';
13
13
  import type { EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.js';
@@ -20,10 +20,6 @@ export interface JsHmrContext {
20
20
  * Map of registered entrypoints to their output URLs.
21
21
  */
22
22
  getWatchedFiles(): Map<string, string>;
23
- /**
24
- * Map of bare specifiers to vendor URLs for import resolution.
25
- */
26
- getSpecifierMap(): Map<string, string>;
27
23
  getEntrypointDependencyGraph(): EntrypointDependencyGraph;
28
24
  /**
29
25
  * Directory where HMR bundles are written.
@@ -85,7 +81,6 @@ export interface JsHmrContext {
85
81
  * ```typescript
86
82
  * const context = {
87
83
  * getWatchedFiles: () => watchedFilesMap,
88
- * getSpecifierMap: () => specifierMap,
89
84
  * getDistDir: () => '/path/to/dist/_hmr',
90
85
  * getPlugins: () => [],
91
86
  * getSrcDir: () => '/path/to/src'
@@ -94,7 +89,7 @@ export interface JsHmrContext {
94
89
  * ```
95
90
  */
96
91
  export declare class JsHmrStrategy extends HmrStrategy {
97
- readonly type = HmrStrategyType.SCRIPT;
92
+ readonly type: 25;
98
93
  private context;
99
94
  constructor(context: JsHmrContext);
100
95
  /**
@@ -116,13 +111,13 @@ export declare class JsHmrStrategy extends HmrStrategy {
116
111
  * @remarks
117
112
  * If runtime-specific dependency graph hooks are unavailable, this strategy
118
113
  * falls back to rebuilding all watched entrypoints.
119
- * When multiple entrypoints are impacted they are bundled in a single esbuild
114
+ * When multiple entrypoints are impacted they are bundled in a single
120
115
  * invocation to share AST parsing and chunk deduplication.
121
116
  * @returns Action to broadcast update events
122
117
  */
123
118
  process(filePath: string): Promise<HmrAction>;
124
119
  /**
125
- * Bundles one or more entrypoints in a single esbuild invocation.
120
+ * Bundles one or more entrypoints in a single build invocation.
126
121
  * Uses the source directory as the output base so that the directory structure
127
122
  * is preserved under the HMR dist folder.
128
123
  */
@@ -1,7 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { fileSystem } from "@ecopages/file-system";
3
- import { HmrStrategy, HmrStrategyType } from "../hmr-strategy";
4
- import { appLogger } from "../../global/app-logger";
3
+ import { HmrStrategy, HmrStrategyType } from "../hmr-strategy.js";
4
+ import { appLogger } from "../../global/app-logger.js";
5
5
  class JsHmrStrategy extends HmrStrategy {
6
6
  type = HmrStrategyType.SCRIPT;
7
7
  context;
@@ -23,8 +23,7 @@ class JsHmrStrategy extends HmrStrategy {
23
23
  const watchedFiles = this.context.getWatchedFiles();
24
24
  const isJsTs = /\.(ts|tsx|js|jsx)$/.test(filePath);
25
25
  const isInSrc = filePath.startsWith(this.context.getSrcDir());
26
- const isRouteTemplate = filePath.startsWith(this.context.getPagesDir()) || filePath.startsWith(this.context.getLayoutsDir());
27
- const isIntegrationTemplate = isRouteTemplate && this.context.getTemplateExtensions().some((extension) => filePath.endsWith(extension));
26
+ const isIntegrationTemplate = this.context.getTemplateExtensions().some((extension) => filePath.endsWith(extension));
28
27
  if (watchedFiles.size === 0) {
29
28
  return false;
30
29
  }
@@ -37,10 +36,6 @@ class JsHmrStrategy extends HmrStrategy {
37
36
  if (watchedFiles.has(filePath)) {
38
37
  return true;
39
38
  }
40
- const entrypointDependencyGraph = this.context.getEntrypointDependencyGraph();
41
- if (entrypointDependencyGraph.supportsSelectiveInvalidation()) {
42
- return entrypointDependencyGraph.getDependencyEntrypoints(filePath).size > 0;
43
- }
44
39
  return true;
45
40
  }
46
41
  /**
@@ -51,7 +46,7 @@ class JsHmrStrategy extends HmrStrategy {
51
46
  * @remarks
52
47
  * If runtime-specific dependency graph hooks are unavailable, this strategy
53
48
  * falls back to rebuilding all watched entrypoints.
54
- * When multiple entrypoints are impacted they are bundled in a single esbuild
49
+ * When multiple entrypoints are impacted they are bundled in a single
55
50
  * invocation to share AST parsing and chunk deduplication.
56
51
  * @returns Action to broadcast update events
57
52
  */
@@ -119,7 +114,7 @@ class JsHmrStrategy extends HmrStrategy {
119
114
  return { type: "none" };
120
115
  }
121
116
  /**
122
- * Bundles one or more entrypoints in a single esbuild invocation.
117
+ * Bundles one or more entrypoints in a single build invocation.
123
118
  * Uses the source directory as the output base so that the directory structure
124
119
  * is preserved under the HMR dist folder.
125
120
  */
@@ -1,3 +1,3 @@
1
- export type * from './public-types.js';
1
+ export type * from './types/public-types.js';
2
2
  export type * from './eco/eco.types.js';
3
- export { eco } from './eco/eco.js';
3
+ export { eco } from './eco/eco.browser.js';
@@ -1,4 +1,4 @@
1
- import { eco } from "./eco/eco.js";
1
+ import { eco } from "./eco/eco.browser.js";
2
2
  export {
3
3
  eco
4
4
  };
package/src/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- export type * from './public-types.js';
1
+ export type * from './types/public-types.js';
2
2
  export type * from './eco/eco.types.js';
3
3
  export { eco } from './eco/eco.js';
4
- export { EcopagesApp, createApp, type EcopagesAppOptions } from './create-app.js';
5
4
  export { defineApiHandler, defineGroupHandler, type GroupHandler } from './adapters/shared/define-api-handler.js';
5
+ export { createEcoBuildPluginFromSourceTransform, createVitePluginsFromAppSourceTransforms, getAppSourceTransforms, createVitePluginFromSourceTransform, normalizeTransformId, type EcoSourceTransform, type EcoSourceTransformResult, type EcoViteCompatiblePlugin, } from './plugins/source-transform.js';
6
+ export { createEcoComponentMetaTransform } from './plugins/eco-component-meta-plugin.js';
package/src/index.js CHANGED
@@ -1,10 +1,21 @@
1
1
  import { eco } from "./eco/eco.js";
2
- import { EcopagesApp, createApp } from "./create-app.js";
3
2
  import { defineApiHandler, defineGroupHandler } from "./adapters/shared/define-api-handler.js";
3
+ import {
4
+ createEcoBuildPluginFromSourceTransform,
5
+ createVitePluginsFromAppSourceTransforms,
6
+ getAppSourceTransforms,
7
+ createVitePluginFromSourceTransform,
8
+ normalizeTransformId
9
+ } from "./plugins/source-transform.js";
10
+ import { createEcoComponentMetaTransform } from "./plugins/eco-component-meta-plugin.js";
4
11
  export {
5
- EcopagesApp,
6
- createApp,
12
+ createEcoBuildPluginFromSourceTransform,
13
+ createEcoComponentMetaTransform,
14
+ createVitePluginFromSourceTransform,
15
+ createVitePluginsFromAppSourceTransforms,
7
16
  defineApiHandler,
8
17
  defineGroupHandler,
9
- eco
18
+ eco,
19
+ getAppSourceTransforms,
20
+ normalizeTransformId
10
21
  };
@@ -2,7 +2,7 @@
2
2
  * This module contains the ghtml renderer
3
3
  * @module
4
4
  */
5
- import type { EcoComponent, EcoPagesElement, IntegrationRendererRenderOptions, RouteRendererBody } from '../../public-types.js';
5
+ import type { ComponentRenderInput, ComponentRenderResult, EcoComponent, EcoPagesElement, IntegrationRendererRenderOptions, RouteRendererBody } from '../../types/public-types.js';
6
6
  import { IntegrationRenderer, type RenderToResponseContext } from '../../route-renderer/orchestration/integration-renderer.js';
7
7
  /**
8
8
  * A renderer for the ghtml integration.
@@ -10,6 +10,7 @@ import { IntegrationRenderer, type RenderToResponseContext } from '../../route-r
10
10
  */
11
11
  export declare class GhtmlRenderer extends IntegrationRenderer<EcoPagesElement> {
12
12
  name: string;
13
+ renderComponent(input: ComponentRenderInput): Promise<ComponentRenderResult>;
13
14
  render({ params, query, props, locals, pageLocals, metadata, Page, Layout, HtmlTemplate, }: IntegrationRendererRenderOptions): Promise<RouteRendererBody>;
14
15
  renderToResponse<P = Record<string, unknown>>(view: EcoComponent<P>, props: P, ctx: RenderToResponseContext): Promise<Response>;
15
16
  }
@@ -1,9 +1,15 @@
1
1
  import {
2
2
  IntegrationRenderer
3
3
  } from "../../route-renderer/orchestration/integration-renderer.js";
4
- import { GHTML_PLUGIN_NAME } from "./ghtml.plugin.js";
4
+ import { GHTML_PLUGIN_NAME } from "./ghtml.constants.js";
5
5
  class GhtmlRenderer extends IntegrationRenderer {
6
6
  name = GHTML_PLUGIN_NAME;
7
+ async renderComponent(input) {
8
+ return this.renderStringComponentWithQueuedForeignSubtrees(
9
+ input,
10
+ input.component
11
+ );
12
+ }
7
13
  async render({
8
14
  params,
9
15
  query,
@@ -16,42 +22,31 @@ class GhtmlRenderer extends IntegrationRenderer {
16
22
  HtmlTemplate
17
23
  }) {
18
24
  try {
19
- const pageContent = await Page({ params, query, ...props, locals: pageLocals });
20
- const children = Layout && typeof Layout === "function" ? await Layout({ children: pageContent, locals }) : pageContent;
21
- const body = await HtmlTemplate({
25
+ return await this.renderPageWithDocumentShell({
26
+ page: {
27
+ component: Page,
28
+ props: { params, query, ...props, locals: pageLocals }
29
+ },
30
+ layout: Layout ? {
31
+ component: Layout,
32
+ props: locals ? { locals } : {}
33
+ } : void 0,
34
+ htmlTemplate: HtmlTemplate,
22
35
  metadata,
23
- children,
24
- pageProps: props || {}
36
+ pageProps: props ?? {}
25
37
  });
26
- return this.DOC_TYPE + body;
27
38
  } catch (error) {
28
39
  throw this.createRenderError("Error rendering page", error);
29
40
  }
30
41
  }
31
42
  async renderToResponse(view, props, ctx) {
32
43
  try {
33
- const Layout = view.config?.layout;
34
- const viewFn = view;
35
- const pageContent = await viewFn(props);
36
- let body;
37
- if (ctx.partial) {
38
- body = pageContent;
39
- } else {
40
- const children = Layout ? await Layout({ children: pageContent }) : pageContent;
41
- const HtmlTemplate = await this.getHtmlTemplate();
42
- const metadata = view.metadata ? await view.metadata({
43
- params: {},
44
- query: {},
45
- props,
46
- appConfig: this.appConfig
47
- }) : this.appConfig.defaultMetadata;
48
- body = this.DOC_TYPE + await HtmlTemplate({
49
- metadata,
50
- children,
51
- pageProps: props
52
- });
53
- }
54
- return this.createHtmlResponse(body, ctx);
44
+ return await this.renderViewWithDocumentShell({
45
+ view,
46
+ props,
47
+ ctx,
48
+ layout: view.config?.layout
49
+ });
55
50
  } catch (error) {
56
51
  throw this.createRenderError("Error rendering view", error);
57
52
  }
@@ -0,0 +1 @@
1
+ export declare const GHTML_PLUGIN_NAME = "ghtml";
@@ -0,0 +1,4 @@
1
+ const GHTML_PLUGIN_NAME = "ghtml";
2
+ export {
3
+ GHTML_PLUGIN_NAME
4
+ };
@@ -1,9 +1,5 @@
1
- import { IntegrationPlugin, type IntegrationPluginConfig } from '../../plugins/integration-plugin';
2
- import { GhtmlRenderer } from './ghtml-renderer';
3
- /**
4
- * The name of the ghtml plugin
5
- */
6
- export declare const GHTML_PLUGIN_NAME = "ghtml";
1
+ import { IntegrationPlugin, type IntegrationPluginConfig } from '../../plugins/integration-plugin.js';
2
+ import { GhtmlRenderer } from './ghtml-renderer.js';
7
3
  /**
8
4
  * The Ghtml plugin class
9
5
  * This plugin provides support for ghtml components in Ecopages
@@ -1,6 +1,6 @@
1
- import { IntegrationPlugin } from "../../plugins/integration-plugin";
2
- import { GhtmlRenderer } from "./ghtml-renderer";
3
- const GHTML_PLUGIN_NAME = "ghtml";
1
+ import { IntegrationPlugin } from "../../plugins/integration-plugin.js";
2
+ import { GhtmlRenderer } from "./ghtml-renderer.js";
3
+ import { GHTML_PLUGIN_NAME } from "./ghtml.constants.js";
4
4
  class GhtmlPlugin extends IntegrationPlugin {
5
5
  renderer = GhtmlRenderer;
6
6
  constructor(options) {
@@ -15,7 +15,6 @@ function ghtmlPlugin(options) {
15
15
  return new GhtmlPlugin(options);
16
16
  }
17
17
  export {
18
- GHTML_PLUGIN_NAME,
19
18
  GhtmlPlugin,
20
19
  ghtmlPlugin
21
20
  };
@@ -18,6 +18,7 @@ These contracts are responsible for:
18
18
  - `integration-plugin.ts`: framework-semantics contract for render integrations
19
19
  - `processor.ts`: asset-transformation contract for processors
20
20
  - `runtime-capability.ts`: runtime compatibility declaration types
21
+ - `source-transform.ts`: bundler-neutral source-transform primitive with Ecopages adapters plus app-level Vite plugin composition helpers
21
22
  - `eco-component-meta-plugin.ts`: shared metadata transform used by core loading/build paths
22
23
 
23
24
  ## Ownership Rules
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Per-plugin cache for `@/...` alias resolution.
3
+ *
4
+ * @remarks
5
+ * The `ecopages-alias-resolver` plugin resolves project aliases like
6
+ * `@/components/Button` to concrete file paths under the app's `srcDir`.
7
+ * Each resolution can trigger up to 22 `existsSync` calls and (when
8
+ * the resolved path is a barrel) a `readFileSync` to detect
9
+ * `export * from './...'` forwarding.
10
+ *
11
+ * This cache memoizes the result keyed by `(srcDir, specifier)`. It is
12
+ * process-local and not currently invalidated by the file watcher —
13
+ * `srcDir` contents are assumed to be stable for the lifetime of the
14
+ * process.
15
+ */
16
+ export declare class AliasResolverCache {
17
+ private readonly entries;
18
+ private readonly maxEntries;
19
+ private hits;
20
+ private misses;
21
+ constructor(maxEntries?: number);
22
+ /**
23
+ * Look up a previously-computed resolution for `(srcDir, specifier)`.
24
+ *
25
+ * Returns `{ hit: true, resolved }` on cache hit (resolved may be
26
+ * `undefined` for an unresolvable specifier), or `{ hit: false }` on
27
+ * miss. The caller is responsible for re-running the resolver and
28
+ * calling `set` to store the new entry.
29
+ */
30
+ get(srcDir: string, specifier: string): {
31
+ hit: true;
32
+ resolved: string | undefined;
33
+ } | {
34
+ hit: false;
35
+ };
36
+ /**
37
+ * Store a resolution result.
38
+ *
39
+ * Pass `undefined` for `resolved` to memoize the negative case
40
+ * (specifier did not resolve) and avoid repeating the FS walk on
41
+ * every `@/...` import.
42
+ */
43
+ set(srcDir: string, specifier: string, resolved: string | undefined): void;
44
+ /**
45
+ * Drop all entries whose `srcDir` is under `rootDir`. Use this from
46
+ * the file watcher when files are added or removed under the app's
47
+ * source tree.
48
+ *
49
+ * Path comparison is path-aware (handles both POSIX `/` and
50
+ * Windows `\` separators) via `path.relative` so cached entries
51
+ * normalized on one platform still match the watcher's `rootDir`
52
+ * on another. Without this, a Windows build that sees
53
+ * `entry.srcDir === 'C:\app\src'` would miss
54
+ * `entry.srcDir.startsWith('C:/app/src/')` and leave stale entries.
55
+ */
56
+ invalidateUnder(rootDir: string): number;
57
+ /** Clear all entries. */
58
+ clear(): void;
59
+ /** Current cache size. */
60
+ get size(): number;
61
+ /** Hit/miss counters for observability. */
62
+ stats(): {
63
+ hits: number;
64
+ misses: number;
65
+ size: number;
66
+ hitRate: number;
67
+ };
68
+ }
@@ -0,0 +1,106 @@
1
+ import path from "node:path";
2
+ const DEFAULT_MAX_ENTRIES = 2e3;
3
+ class AliasResolverCache {
4
+ entries = /* @__PURE__ */ new Map();
5
+ maxEntries;
6
+ hits = 0;
7
+ misses = 0;
8
+ constructor(maxEntries = DEFAULT_MAX_ENTRIES) {
9
+ if (maxEntries <= 0) {
10
+ throw new Error(`AliasResolverCache: maxEntries must be > 0, got ${maxEntries}`);
11
+ }
12
+ this.maxEntries = maxEntries;
13
+ }
14
+ /**
15
+ * Look up a previously-computed resolution for `(srcDir, specifier)`.
16
+ *
17
+ * Returns `{ hit: true, resolved }` on cache hit (resolved may be
18
+ * `undefined` for an unresolvable specifier), or `{ hit: false }` on
19
+ * miss. The caller is responsible for re-running the resolver and
20
+ * calling `set` to store the new entry.
21
+ */
22
+ get(srcDir, specifier) {
23
+ const key = makeKey(srcDir, specifier);
24
+ const existing = this.entries.get(key);
25
+ if (existing) {
26
+ this.hits += 1;
27
+ this.entries.delete(key);
28
+ this.entries.set(key, existing);
29
+ return { hit: true, resolved: existing.resolved };
30
+ }
31
+ this.misses += 1;
32
+ return { hit: false };
33
+ }
34
+ /**
35
+ * Store a resolution result.
36
+ *
37
+ * Pass `undefined` for `resolved` to memoize the negative case
38
+ * (specifier did not resolve) and avoid repeating the FS walk on
39
+ * every `@/...` import.
40
+ */
41
+ set(srcDir, specifier, resolved) {
42
+ const key = makeKey(srcDir, specifier);
43
+ this.entries.set(key, { srcDir, resolved });
44
+ if (this.entries.size > this.maxEntries) {
45
+ const oldestKey = this.entries.keys().next().value;
46
+ if (oldestKey !== void 0) {
47
+ this.entries.delete(oldestKey);
48
+ }
49
+ }
50
+ }
51
+ /**
52
+ * Drop all entries whose `srcDir` is under `rootDir`. Use this from
53
+ * the file watcher when files are added or removed under the app's
54
+ * source tree.
55
+ *
56
+ * Path comparison is path-aware (handles both POSIX `/` and
57
+ * Windows `\` separators) via `path.relative` so cached entries
58
+ * normalized on one platform still match the watcher's `rootDir`
59
+ * on another. Without this, a Windows build that sees
60
+ * `entry.srcDir === 'C:\app\src'` would miss
61
+ * `entry.srcDir.startsWith('C:/app/src/')` and leave stale entries.
62
+ */
63
+ invalidateUnder(rootDir) {
64
+ const normalizedRoot = path.resolve(rootDir);
65
+ let removed = 0;
66
+ for (const [key, entry] of this.entries) {
67
+ if (isUnderDirectory(path.resolve(entry.srcDir), normalizedRoot)) {
68
+ this.entries.delete(key);
69
+ removed += 1;
70
+ }
71
+ }
72
+ return removed;
73
+ }
74
+ /** Clear all entries. */
75
+ clear() {
76
+ this.entries.clear();
77
+ this.hits = 0;
78
+ this.misses = 0;
79
+ }
80
+ /** Current cache size. */
81
+ get size() {
82
+ return this.entries.size;
83
+ }
84
+ /** Hit/miss counters for observability. */
85
+ stats() {
86
+ const total = this.hits + this.misses;
87
+ return {
88
+ hits: this.hits,
89
+ misses: this.misses,
90
+ size: this.entries.size,
91
+ hitRate: total === 0 ? 0 : this.hits / total
92
+ };
93
+ }
94
+ }
95
+ function makeKey(srcDir, specifier) {
96
+ return `${srcDir} ${specifier}`;
97
+ }
98
+ function isUnderDirectory(candidate, parent) {
99
+ if (candidate === parent) return true;
100
+ const rel = path.relative(parent, candidate);
101
+ if (!rel || rel.startsWith("..") || path.isAbsolute(rel)) return false;
102
+ return true;
103
+ }
104
+ export {
105
+ AliasResolverCache
106
+ };
@@ -1,2 +1,6 @@
1
1
  import type { EcoBuildPlugin } from '../build/build-types.js';
2
- export declare function createAliasResolverPlugin(srcDir: string): EcoBuildPlugin;
2
+ import { AliasResolverCache } from './alias-resolver-cache.js';
3
+ export declare function resolveAppSourceAliasPath(srcDir: string, specifier: string): string | undefined;
4
+ export declare function createAliasResolverPlugin(srcDir: string, options?: {
5
+ cache?: AliasResolverCache;
6
+ }): EcoBuildPlugin;