@ecopages/core 0.2.0-alpha.4 → 0.2.0-alpha.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/README.md +268 -14
  2. package/package.json +84 -110
  3. package/src/adapters/README.md +39 -0
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +30 -68
  12. package/src/adapters/bun/hmr-manager.js +30 -212
  13. package/src/adapters/bun/index.d.ts +2 -3
  14. package/src/adapters/bun/index.js +3 -3
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +93 -32
  18. package/src/adapters/bun/server-adapter.js +166 -89
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +2 -6
  24. package/src/adapters/index.js +2 -8
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +38 -49
  31. package/src/adapters/node/node-hmr-manager.js +31 -219
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +20 -72
  37. package/src/adapters/node/server-adapter.js +99 -203
  38. package/src/adapters/node/static-content-server.d.ts +37 -1
  39. package/src/adapters/node/static-content-server.js +29 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
  53. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  54. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  56. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  57. package/src/adapters/shared/hmr-html-response.js +33 -0
  58. package/src/adapters/shared/render-context.d.ts +5 -3
  59. package/src/adapters/shared/render-context.js +27 -3
  60. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  61. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  62. package/src/adapters/shared/runtime-host.d.ts +12 -0
  63. package/src/adapters/shared/server-adapter.d.ts +33 -12
  64. package/src/adapters/shared/server-adapter.js +215 -132
  65. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  66. package/src/adapters/shared/server-route-handler.js +7 -16
  67. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  68. package/src/adapters/shared/server-static-builder.js +65 -11
  69. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  70. package/src/adapters/shared/shared-hmr-manager.js +239 -0
  71. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  72. package/src/build/README.md +107 -0
  73. package/src/build/build-adapter.d.ts +176 -3
  74. package/src/build/build-adapter.js +619 -16
  75. package/src/build/build-manifest.d.ts +27 -0
  76. package/src/build/build-manifest.js +30 -0
  77. package/src/build/dev-build-coordinator.d.ts +72 -0
  78. package/src/build/dev-build-coordinator.js +154 -0
  79. package/src/build/esbuild-build-adapter.d.ts +16 -6
  80. package/src/build/esbuild-build-adapter.js +202 -74
  81. package/src/build/runtime-build-executor.d.ts +14 -0
  82. package/src/build/runtime-build-executor.js +22 -0
  83. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  84. package/src/build/runtime-specifier-alias-plugin.js +35 -0
  85. package/src/build/runtime-specifier-aliases.d.ts +5 -0
  86. package/src/build/runtime-specifier-aliases.js +95 -0
  87. package/src/config/README.md +36 -0
  88. package/src/config/config-builder.d.ts +54 -29
  89. package/src/config/config-builder.js +256 -50
  90. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  91. package/src/{constants.js → config/constants.js} +4 -0
  92. package/src/declarations.d.ts +19 -14
  93. package/src/dev/host-runtime.d.ts +10 -0
  94. package/src/dev/host-runtime.js +24 -0
  95. package/src/dev/sc-server.d.ts +1 -1
  96. package/src/dev/sc-server.js +1 -1
  97. package/src/eco/README.md +70 -16
  98. package/src/eco/eco.browser.d.ts +2 -0
  99. package/src/eco/eco.browser.js +88 -0
  100. package/src/eco/eco.js +63 -54
  101. package/src/eco/eco.types.d.ts +69 -6
  102. package/src/eco/eco.utils.d.ts +1 -40
  103. package/src/eco/eco.utils.js +5 -35
  104. package/src/eco/global-injector-map.d.ts +3 -3
  105. package/src/eco/global-injector-map.js +2 -2
  106. package/src/eco/lazy-injector-map.d.ts +2 -2
  107. package/src/errors/index.d.ts +1 -0
  108. package/src/errors/index.js +3 -1
  109. package/src/hmr/README.md +26 -0
  110. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  111. package/src/hmr/client/hmr-runtime.js +38 -7
  112. package/src/hmr/hmr-strategy.d.ts +16 -13
  113. package/src/hmr/hmr-strategy.js +22 -7
  114. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  115. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  116. package/src/hmr/hmr.test.e2e.js +26 -33
  117. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  118. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  119. package/src/hmr/strategies/js-hmr-strategy.d.ts +46 -48
  120. package/src/hmr/strategies/js-hmr-strategy.js +60 -75
  121. package/src/index.browser.d.ts +2 -2
  122. package/src/index.browser.js +1 -1
  123. package/src/index.d.ts +4 -3
  124. package/src/index.js +16 -5
  125. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  126. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  127. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  128. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  129. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  130. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  131. package/src/plugins/README.md +35 -0
  132. package/src/plugins/alias-resolver-plugin.d.ts +1 -0
  133. package/src/plugins/alias-resolver-plugin.js +27 -5
  134. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  135. package/src/plugins/eco-component-meta-plugin.js +42 -24
  136. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  137. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  138. package/src/plugins/integration-plugin.d.ts +147 -29
  139. package/src/plugins/integration-plugin.js +103 -14
  140. package/src/plugins/processor.d.ts +17 -2
  141. package/src/plugins/processor.js +22 -3
  142. package/src/plugins/runtime-capability.d.ts +9 -0
  143. package/src/plugins/source-transform.d.ts +46 -0
  144. package/src/plugins/source-transform.js +71 -0
  145. package/src/route-renderer/GRAPH.md +83 -325
  146. package/src/route-renderer/README.md +73 -90
  147. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  148. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  149. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  150. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  151. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  152. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  153. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  154. package/src/route-renderer/orchestration/integration-renderer.js +986 -0
  155. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  156. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  157. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  158. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  159. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  160. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  161. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  162. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  163. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  164. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  165. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +134 -0
  166. package/src/route-renderer/orchestration/route-render-orchestrator.js +437 -0
  167. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  168. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  169. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  170. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  171. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  172. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  173. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  174. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  175. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  176. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  177. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  178. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  179. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  180. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  181. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  182. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  183. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  184. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  185. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  186. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  187. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  188. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  189. package/src/route-renderer/route-renderer.d.ts +57 -14
  190. package/src/route-renderer/route-renderer.js +30 -18
  191. package/src/router/README.md +94 -0
  192. package/src/router/client/link-intent.d.ts +53 -0
  193. package/src/router/client/link-intent.js +34 -0
  194. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  195. package/src/router/client/link-intent.test.browser.js +43 -0
  196. package/src/router/client/navigation-coordinator.d.ts +169 -0
  197. package/src/router/client/navigation-coordinator.js +215 -0
  198. package/src/router/server/route-registry.d.ts +78 -0
  199. package/src/router/server/route-registry.js +262 -0
  200. package/src/services/README.md +28 -0
  201. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  202. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  203. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  204. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  205. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  208. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  209. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
  210. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  211. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  212. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
  213. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
  214. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
  215. package/src/services/assets/asset-processing-service/index.d.ts +6 -0
  216. package/src/services/assets/asset-processing-service/index.js +6 -0
  217. package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
  218. package/src/services/assets/asset-processing-service/page-package.js +80 -0
  219. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  220. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  221. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  222. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  223. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  224. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  225. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  226. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  227. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
  228. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +119 -0
  229. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  230. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  231. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  232. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  233. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
  234. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
  235. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  236. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  237. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
  238. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
  239. package/src/services/assets/browser-bundle.service.d.ts +73 -0
  240. package/src/services/assets/browser-bundle.service.js +41 -0
  241. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  242. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  243. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  244. package/src/services/html/html-rewriter-provider.service.js +68 -0
  245. package/src/services/html/html-transformer.service.d.ts +96 -0
  246. package/src/services/html/html-transformer.service.js +287 -0
  247. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  248. package/src/services/invalidation/development-invalidation.service.js +190 -0
  249. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  250. package/src/services/module-loading/app-module-loader.service.js +0 -0
  251. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  252. package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
  253. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  254. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  255. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  256. package/src/services/module-loading/module-loading-types.js +0 -0
  257. package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
  258. package/src/services/module-loading/node-bootstrap-plugin.js +297 -0
  259. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  260. package/src/services/module-loading/page-module-import.service.js +191 -0
  261. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  262. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  263. package/src/services/module-loading/source-module-support.d.ts +5 -0
  264. package/src/services/module-loading/source-module-support.js +8 -0
  265. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  266. package/src/services/runtime-state/dev-graph.service.js +162 -0
  267. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  268. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  269. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  270. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  271. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  272. package/src/static-site-generator/README.md +26 -0
  273. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  274. package/src/static-site-generator/static-site-generator.js +182 -138
  275. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  276. package/src/types/internal-types.js +0 -0
  277. package/src/{public-types.d.ts → types/public-types.d.ts} +239 -35
  278. package/src/types/public-types.js +0 -0
  279. package/src/utils/html-escaping.d.ts +7 -0
  280. package/src/utils/html-escaping.js +6 -0
  281. package/src/utils/locals-utils.d.ts +1 -1
  282. package/src/utils/parse-cli-args.d.ts +4 -1
  283. package/src/utils/parse-cli-args.js +16 -1
  284. package/src/utils/resolve-work-dir.d.ts +11 -0
  285. package/src/utils/resolve-work-dir.js +31 -0
  286. package/src/watchers/project-watcher.d.ts +40 -29
  287. package/src/watchers/project-watcher.js +126 -116
  288. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  289. package/src/watchers/project-watcher.test-helpers.js +6 -6
  290. package/CHANGELOG.md +0 -91
  291. package/src/adapters/abstract/application-adapter.ts +0 -337
  292. package/src/adapters/abstract/router-adapter.ts +0 -30
  293. package/src/adapters/abstract/server-adapter.ts +0 -79
  294. package/src/adapters/bun/client-bridge.ts +0 -62
  295. package/src/adapters/bun/create-app.ts +0 -189
  296. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  297. package/src/adapters/bun/define-api-handler.ts +0 -114
  298. package/src/adapters/bun/hmr-manager.ts +0 -296
  299. package/src/adapters/bun/index.ts +0 -3
  300. package/src/adapters/bun/server-adapter.ts +0 -492
  301. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  302. package/src/adapters/bun/server-lifecycle.js +0 -120
  303. package/src/adapters/bun/server-lifecycle.ts +0 -154
  304. package/src/adapters/index.ts +0 -6
  305. package/src/adapters/node/create-app.ts +0 -179
  306. package/src/adapters/node/index.d.ts +0 -4
  307. package/src/adapters/node/index.js +0 -8
  308. package/src/adapters/node/index.ts +0 -9
  309. package/src/adapters/node/node-client-bridge.ts +0 -79
  310. package/src/adapters/node/node-hmr-manager.ts +0 -289
  311. package/src/adapters/node/server-adapter.ts +0 -561
  312. package/src/adapters/node/static-content-server.ts +0 -203
  313. package/src/adapters/shared/api-response.ts +0 -104
  314. package/src/adapters/shared/application-adapter.ts +0 -199
  315. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  316. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  317. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  318. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  319. package/src/adapters/shared/render-context.ts +0 -105
  320. package/src/adapters/shared/server-adapter.ts +0 -442
  321. package/src/adapters/shared/server-route-handler.ts +0 -166
  322. package/src/adapters/shared/server-static-builder.ts +0 -82
  323. package/src/build/build-adapter.ts +0 -132
  324. package/src/build/build-types.ts +0 -83
  325. package/src/build/esbuild-build-adapter.ts +0 -510
  326. package/src/config/config-builder.ts +0 -474
  327. package/src/constants.ts +0 -39
  328. package/src/create-app.ts +0 -87
  329. package/src/define-api-handler.js +0 -15
  330. package/src/define-api-handler.ts +0 -66
  331. package/src/dev/sc-server.ts +0 -143
  332. package/src/eco/component-render-context.d.ts +0 -105
  333. package/src/eco/component-render-context.js +0 -77
  334. package/src/eco/component-render-context.ts +0 -202
  335. package/src/eco/eco.ts +0 -221
  336. package/src/eco/eco.types.ts +0 -202
  337. package/src/eco/eco.utils.ts +0 -89
  338. package/src/eco/global-injector-map.ts +0 -112
  339. package/src/eco/lazy-injector-map.ts +0 -120
  340. package/src/eco/module-dependencies.ts +0 -75
  341. package/src/errors/http-error.ts +0 -72
  342. package/src/errors/index.ts +0 -2
  343. package/src/errors/locals-access-error.ts +0 -7
  344. package/src/global/app-logger.ts +0 -4
  345. package/src/hmr/client/hmr-runtime.ts +0 -121
  346. package/src/hmr/hmr-strategy.ts +0 -172
  347. package/src/hmr/hmr.test.e2e.ts +0 -75
  348. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  349. package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
  350. package/src/index.browser.ts +0 -3
  351. package/src/index.ts +0 -5
  352. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  353. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  354. package/src/internal-types.ts +0 -212
  355. package/src/plugins/alias-resolver-plugin.ts +0 -45
  356. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  357. package/src/plugins/integration-plugin.ts +0 -184
  358. package/src/plugins/processor.ts +0 -220
  359. package/src/public-types.ts +0 -1260
  360. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  361. package/src/route-renderer/component-graph-executor.js +0 -31
  362. package/src/route-renderer/component-graph-executor.ts +0 -84
  363. package/src/route-renderer/component-graph.d.ts +0 -42
  364. package/src/route-renderer/component-graph.js +0 -72
  365. package/src/route-renderer/component-graph.ts +0 -159
  366. package/src/route-renderer/component-marker.d.ts +0 -52
  367. package/src/route-renderer/component-marker.js +0 -46
  368. package/src/route-renderer/component-marker.ts +0 -117
  369. package/src/route-renderer/dependency-resolver.js +0 -428
  370. package/src/route-renderer/dependency-resolver.ts +0 -596
  371. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  372. package/src/route-renderer/html-post-processing.service.js +0 -86
  373. package/src/route-renderer/html-post-processing.service.ts +0 -103
  374. package/src/route-renderer/integration-renderer.d.ts +0 -339
  375. package/src/route-renderer/integration-renderer.js +0 -526
  376. package/src/route-renderer/integration-renderer.ts +0 -696
  377. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  378. package/src/route-renderer/marker-graph-resolver.js +0 -93
  379. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  380. package/src/route-renderer/page-module-loader.d.ts +0 -61
  381. package/src/route-renderer/page-module-loader.ts +0 -153
  382. package/src/route-renderer/render-execution.service.d.ts +0 -69
  383. package/src/route-renderer/render-execution.service.js +0 -91
  384. package/src/route-renderer/render-execution.service.ts +0 -158
  385. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  386. package/src/route-renderer/render-preparation.service.js +0 -243
  387. package/src/route-renderer/render-preparation.service.ts +0 -358
  388. package/src/route-renderer/route-renderer.ts +0 -80
  389. package/src/router/fs-router-scanner.d.ts +0 -41
  390. package/src/router/fs-router-scanner.js +0 -155
  391. package/src/router/fs-router-scanner.ts +0 -217
  392. package/src/router/fs-router.d.ts +0 -26
  393. package/src/router/fs-router.js +0 -100
  394. package/src/router/fs-router.ts +0 -122
  395. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  396. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  397. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  398. package/src/services/asset-processing-service/assets.types.ts +0 -112
  399. package/src/services/asset-processing-service/index.d.ts +0 -3
  400. package/src/services/asset-processing-service/index.js +0 -3
  401. package/src/services/asset-processing-service/index.ts +0 -3
  402. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  403. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  404. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  405. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  406. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  407. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  408. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  409. package/src/services/asset-processing-service/processors/index.js +0 -5
  410. package/src/services/asset-processing-service/processors/index.ts +0 -5
  411. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  412. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  413. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  414. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  415. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  416. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  417. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  418. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  419. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  420. package/src/services/cache/cache.types.ts +0 -126
  421. package/src/services/cache/index.ts +0 -18
  422. package/src/services/cache/memory-cache-store.ts +0 -130
  423. package/src/services/cache/page-cache-service.ts +0 -202
  424. package/src/services/html-transformer.service.d.ts +0 -50
  425. package/src/services/html-transformer.service.js +0 -163
  426. package/src/services/html-transformer.service.ts +0 -217
  427. package/src/services/page-module-import.service.d.ts +0 -37
  428. package/src/services/page-module-import.service.js +0 -88
  429. package/src/services/page-module-import.service.ts +0 -129
  430. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  431. package/src/services/schema-validation-service.ts +0 -204
  432. package/src/services/validation/standard-schema.types.ts +0 -68
  433. package/src/static-site-generator/static-site-generator.ts +0 -359
  434. package/src/utils/css.d.ts +0 -1
  435. package/src/utils/css.js +0 -7
  436. package/src/utils/css.ts +0 -5
  437. package/src/utils/deep-merge.ts +0 -47
  438. package/src/utils/hash.ts +0 -5
  439. package/src/utils/html.ts +0 -1
  440. package/src/utils/invariant.ts +0 -15
  441. package/src/utils/locals-utils.ts +0 -37
  442. package/src/utils/parse-cli-args.ts +0 -83
  443. package/src/utils/path-utils.module.ts +0 -14
  444. package/src/utils/runtime.ts +0 -44
  445. package/src/utils/server-utils.module.ts +0 -67
  446. package/src/watchers/project-watcher.test-helpers.ts +0 -41
  447. package/src/watchers/project-watcher.ts +0 -344
  448. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  449. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  450. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  451. /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
  452. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  453. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  454. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
@@ -1,14 +1,14 @@
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";
5
- import { defaultBuildAdapter } from "../../build/build-adapter.js";
3
+ import { HmrStrategy, HmrStrategyType } from "../hmr-strategy.js";
4
+ import { appLogger } from "../../global/app-logger.js";
6
5
  class JsHmrStrategy extends HmrStrategy {
6
+ type = HmrStrategyType.SCRIPT;
7
+ context;
7
8
  constructor(context) {
8
9
  super();
9
10
  this.context = context;
10
11
  }
11
- type = HmrStrategyType.SCRIPT;
12
12
  /**
13
13
  * Determines if the file is a JS/TS file that could affect registered entrypoints.
14
14
  *
@@ -23,18 +23,19 @@ 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 isIntegrationTemplate = this.context.getTemplateExtensions().some((extension) => filePath.endsWith(extension));
26
27
  if (watchedFiles.size === 0) {
27
28
  return false;
28
29
  }
29
30
  if (!isJsTs || !isInSrc) {
30
31
  return false;
31
32
  }
33
+ if (isIntegrationTemplate) {
34
+ return false;
35
+ }
32
36
  if (watchedFiles.has(filePath)) {
33
37
  return true;
34
38
  }
35
- if (this.context.getDependencyEntrypoints) {
36
- return this.context.getDependencyEntrypoints(filePath).size > 0;
37
- }
38
39
  return true;
39
40
  }
40
41
  /**
@@ -45,6 +46,8 @@ class JsHmrStrategy extends HmrStrategy {
45
46
  * @remarks
46
47
  * If runtime-specific dependency graph hooks are unavailable, this strategy
47
48
  * falls back to rebuilding all watched entrypoints.
49
+ * When multiple entrypoints are impacted they are bundled in a single esbuild
50
+ * invocation to share AST parsing and chunk deduplication.
48
51
  * @returns Action to broadcast update events
49
52
  */
50
53
  async process(filePath) {
@@ -54,24 +57,37 @@ class JsHmrStrategy extends HmrStrategy {
54
57
  appLogger.debug(`[JsHmrStrategy] No watched files to rebuild`);
55
58
  return { type: "none" };
56
59
  }
57
- const updates = [];
58
- let reloadRequired = false;
59
- const dependencyHits = this.context.getDependencyEntrypoints?.(filePath) ?? /* @__PURE__ */ new Set();
60
+ const dependencyHits = this.context.getEntrypointDependencyGraph().getDependencyEntrypoints(filePath);
60
61
  const hasDependencyHit = dependencyHits.size > 0;
61
62
  const impactedEntrypoints = hasDependencyHit ? Array.from(dependencyHits).filter((entrypoint) => watchedFiles.has(entrypoint)) : Array.from(watchedFiles.keys());
63
+ const buildableEntrypoints = impactedEntrypoints.filter(
64
+ (entrypoint) => this.context.shouldProcessEntrypoint?.(entrypoint) ?? true
65
+ );
62
66
  if (!hasDependencyHit) {
63
67
  appLogger.debug("[JsHmrStrategy] Dependency graph miss, rebuilding all watched entrypoints");
64
68
  }
65
- for (const entrypoint of impactedEntrypoints) {
69
+ if (buildableEntrypoints.length === 0) {
70
+ return { type: "none" };
71
+ }
72
+ const buildResult = await this.bundleEntrypoints(buildableEntrypoints);
73
+ if (!buildResult.success) {
74
+ return { type: "none" };
75
+ }
76
+ const updates = [];
77
+ let reloadRequired = false;
78
+ for (const entrypoint of buildableEntrypoints) {
66
79
  const outputUrl = watchedFiles.get(entrypoint);
67
- if (!outputUrl) {
68
- continue;
80
+ if (!outputUrl) continue;
81
+ if (buildResult.dependencies) {
82
+ const entrypointDeps = buildResult.dependencies.get(path.resolve(entrypoint)) ?? [];
83
+ this.context.getEntrypointDependencyGraph().setEntrypointDependencies(entrypoint, entrypointDeps);
69
84
  }
70
- const result = await this.bundleEntrypoint(entrypoint, outputUrl);
85
+ const srcDir = this.context.getSrcDir();
86
+ const relativePath = path.relative(srcDir, entrypoint);
87
+ const relativePathJs = relativePath.replace(/\.(tsx?|jsx?|mdx?)$/, ".js");
88
+ const outputPath = path.join(this.context.getDistDir(), relativePathJs);
89
+ const result = await this.processOutput(outputPath, outputUrl);
71
90
  if (result.success) {
72
- if (result.dependencies && this.context.setEntrypointDependencies) {
73
- this.context.setEntrypointDependencies(entrypoint, result.dependencies);
74
- }
75
91
  updates.push(outputUrl);
76
92
  if (result.requiresReload) {
77
93
  reloadRequired = true;
@@ -83,18 +99,14 @@ class JsHmrStrategy extends HmrStrategy {
83
99
  appLogger.debug(`[JsHmrStrategy] Full reload required (no HMR accept found)`);
84
100
  return {
85
101
  type: "broadcast",
86
- events: [
87
- {
88
- type: "reload"
89
- }
90
- ]
102
+ events: [{ type: "reload" }]
91
103
  };
92
104
  }
93
105
  return {
94
106
  type: "broadcast",
95
- events: updates.map((path2) => ({
107
+ events: updates.map((p) => ({
96
108
  type: "update",
97
- path: path2,
109
+ path: p,
98
110
  timestamp: Date.now()
99
111
  }))
100
112
  };
@@ -102,44 +114,40 @@ class JsHmrStrategy extends HmrStrategy {
102
114
  return { type: "none" };
103
115
  }
104
116
  /**
105
- * Bundles a single entrypoint and processes the output.
106
- *
107
- * @param entrypointPath - Absolute path to the source file
108
- * @param outputUrl - URL path for the bundled file
109
- * @returns True if bundling was successful
117
+ * Bundles one or more entrypoints in a single esbuild invocation.
118
+ * Uses the source directory as the output base so that the directory structure
119
+ * is preserved under the HMR dist folder.
110
120
  */
111
- async bundleEntrypoint(entrypointPath, outputUrl) {
121
+ async bundleEntrypoints(entrypoints) {
112
122
  try {
113
- const srcDir = this.context.getSrcDir();
114
- const relativePath = path.relative(srcDir, entrypointPath);
115
- const relativePathJs = relativePath.replace(/\.(tsx?|jsx?)$/, ".js");
116
- const outputPath = path.join(this.context.getDistDir(), relativePathJs);
117
- const result = await defaultBuildAdapter.build({
118
- entrypoints: [entrypointPath],
123
+ const result = await this.context.getBrowserBundleService().bundle({
124
+ profile: "hmr-entrypoint",
125
+ entrypoints,
119
126
  outdir: this.context.getDistDir(),
120
- naming: relativePathJs,
121
- ...defaultBuildAdapter.getTranspileOptions("hmr-entrypoint"),
127
+ outbase: this.context.getSrcDir(),
128
+ naming: "[dir]/[name]",
122
129
  plugins: this.context.getPlugins(),
123
- minify: false,
124
- external: ["react", "react-dom"]
130
+ minify: false
125
131
  });
126
132
  if (!result.success) {
127
- appLogger.error(`[JsHmrStrategy] Failed to build ${entrypointPath}:`, result.logs);
128
- return { success: false, requiresReload: false, dependencies: void 0 };
133
+ appLogger.error("[JsHmrStrategy] Batched build failed:", result.logs);
134
+ return { success: false };
129
135
  }
130
- const dependencyGraph = result.dependencyGraph?.entrypoints?.[path.resolve(entrypointPath)] ?? [];
131
- const output = await this.processOutput(outputPath, outputUrl);
132
- return {
133
- ...output,
134
- dependencies: dependencyGraph
135
- };
136
+ const dependencies = /* @__PURE__ */ new Map();
137
+ if (result.dependencyGraph?.entrypoints) {
138
+ for (const [entrypoint, deps] of Object.entries(result.dependencyGraph.entrypoints)) {
139
+ dependencies.set(path.resolve(entrypoint), deps);
140
+ }
141
+ }
142
+ return { success: true, dependencies };
136
143
  } catch (error) {
137
- appLogger.error(`[JsHmrStrategy] Error bundling ${entrypointPath}:`, error);
138
- return { success: false, requiresReload: false, dependencies: void 0 };
144
+ appLogger.error("[JsHmrStrategy] Error in batched build:", error);
145
+ return { success: false };
139
146
  }
140
147
  }
141
148
  /**
142
- * Processes bundled output by replacing specifiers and injecting HMR code.
149
+ * Processes bundled output and determines whether the browser can hot-accept
150
+ * the update or must fall back to a full reload.
143
151
  *
144
152
  * @param filepath - Path to the bundled output file
145
153
  * @param url - URL path for the bundled file
@@ -147,12 +155,10 @@ class JsHmrStrategy extends HmrStrategy {
147
155
  */
148
156
  async processOutput(filepath, url) {
149
157
  try {
150
- let code = await fileSystem.readFile(filepath);
158
+ const code = await fileSystem.readFile(filepath);
151
159
  if (code.includes("/* [ecopages] hmr */")) {
152
160
  return { success: true, requiresReload: !code.includes("import.meta.hot.accept") };
153
161
  }
154
- code = this.replaceBareSpecifiers(code);
155
- await fileSystem.writeAsync(filepath, code);
156
162
  appLogger.debug(`[JsHmrStrategy] Processed ${url}`);
157
163
  const hasHmrAccept = code.includes("import.meta.hot.accept");
158
164
  return { success: true, requiresReload: !hasHmrAccept };
@@ -161,27 +167,6 @@ class JsHmrStrategy extends HmrStrategy {
161
167
  return { success: false, requiresReload: false };
162
168
  }
163
169
  }
164
- /**
165
- * Replaces bare specifiers with vendor URLs.
166
- *
167
- * Handles both static imports and dynamic imports.
168
- *
169
- * @param code - The bundled code to transform
170
- * @returns The transformed code with vendor URLs
171
- */
172
- replaceBareSpecifiers(code) {
173
- const specifierMap = this.context.getSpecifierMap();
174
- if (specifierMap.size === 0) {
175
- return code;
176
- }
177
- let result = code;
178
- for (const [bareSpec, vendorUrl] of specifierMap.entries()) {
179
- const escaped = bareSpec.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
180
- result = result.replace(new RegExp(`from\\s*["']${escaped}["']`, "g"), `from "${vendorUrl}"`);
181
- result = result.replace(new RegExp(`import\\(["']${escaped}["']\\)`, "g"), `import("${vendorUrl}")`);
182
- }
183
- return result;
184
- }
185
170
  }
186
171
  export {
187
172
  JsHmrStrategy
@@ -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
- export { defineApiHandler, defineGroupHandler, type GroupHandler } from './define-api-handler.js';
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
- import { defineApiHandler, defineGroupHandler } from "./define-api-handler.js";
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,14 +2,15 @@
2
2
  * This module contains the ghtml renderer
3
3
  * @module
4
4
  */
5
- import type { EcoComponent, EcoPagesElement, IntegrationRendererRenderOptions, RouteRendererBody } from '../../public-types.js';
6
- import { IntegrationRenderer, type RenderToResponseContext } from '../../route-renderer/integration-renderer.js';
5
+ import type { ComponentRenderInput, ComponentRenderResult, EcoComponent, EcoPagesElement, IntegrationRendererRenderOptions, RouteRendererBody } from '../../types/public-types.js';
6
+ import { IntegrationRenderer, type RenderToResponseContext } from '../../route-renderer/orchestration/integration-renderer.js';
7
7
  /**
8
8
  * A renderer for the ghtml integration.
9
9
  * It renders a page using the HtmlTemplate and Page components.
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,7 +1,15 @@
1
- import { IntegrationRenderer } from "../../route-renderer/integration-renderer.js";
2
- import { GHTML_PLUGIN_NAME } from "./ghtml.plugin.js";
1
+ import {
2
+ IntegrationRenderer
3
+ } from "../../route-renderer/orchestration/integration-renderer.js";
4
+ import { GHTML_PLUGIN_NAME } from "./ghtml.constants.js";
3
5
  class GhtmlRenderer extends IntegrationRenderer {
4
6
  name = GHTML_PLUGIN_NAME;
7
+ async renderComponent(input) {
8
+ return this.renderStringComponentWithQueuedForeignSubtrees(
9
+ input,
10
+ input.component
11
+ );
12
+ }
5
13
  async render({
6
14
  params,
7
15
  query,
@@ -14,42 +22,31 @@ class GhtmlRenderer extends IntegrationRenderer {
14
22
  HtmlTemplate
15
23
  }) {
16
24
  try {
17
- const pageContent = await Page({ params, query, ...props, locals: pageLocals });
18
- const children = Layout && typeof Layout === "function" ? await Layout({ children: pageContent, locals }) : pageContent;
19
- 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,
20
35
  metadata,
21
- children,
22
- pageProps: props || {}
36
+ pageProps: props ?? {}
23
37
  });
24
- return this.DOC_TYPE + body;
25
38
  } catch (error) {
26
39
  throw this.createRenderError("Error rendering page", error);
27
40
  }
28
41
  }
29
42
  async renderToResponse(view, props, ctx) {
30
43
  try {
31
- const Layout = view.config?.layout;
32
- const viewFn = view;
33
- const pageContent = await viewFn(props);
34
- let body;
35
- if (ctx.partial) {
36
- body = pageContent;
37
- } else {
38
- const children = Layout ? await Layout({ children: pageContent }) : pageContent;
39
- const HtmlTemplate = await this.getHtmlTemplate();
40
- const metadata = view.metadata ? await view.metadata({
41
- params: {},
42
- query: {},
43
- props,
44
- appConfig: this.appConfig
45
- }) : this.appConfig.defaultMetadata;
46
- body = this.DOC_TYPE + await HtmlTemplate({
47
- metadata,
48
- children,
49
- pageProps: props
50
- });
51
- }
52
- return this.createHtmlResponse(body, ctx);
44
+ return await this.renderViewWithDocumentShell({
45
+ view,
46
+ props,
47
+ ctx,
48
+ layout: view.config?.layout
49
+ });
53
50
  } catch (error) {
54
51
  throw this.createRenderError("Error rendering view", error);
55
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
  };
@@ -0,0 +1,35 @@
1
+ # Plugin Contracts
2
+
3
+ This directory contains the authoring contracts for Ecopages integrations, processors, and related plugin-facing runtime declarations.
4
+
5
+ ## Purpose
6
+
7
+ The plugin layer defines what packages are allowed to declare about themselves, while core retains orchestration ownership.
8
+
9
+ These contracts are responsible for:
10
+
11
+ - integration registration and lifecycle hooks
12
+ - processor registration and asset capability declaration
13
+ - runtime capability declaration and validation input
14
+ - shared build-plugin bridge types used by integrations and processors
15
+
16
+ ## Main Files
17
+
18
+ - `integration-plugin.ts`: framework-semantics contract for render integrations
19
+ - `processor.ts`: asset-transformation contract for processors
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
22
+ - `eco-component-meta-plugin.ts`: shared metadata transform used by core loading/build paths
23
+
24
+ ## Ownership Rules
25
+
26
+ - Integrations own rendering semantics, hydration behavior, and integration-specific HMR strategy.
27
+ - Processors own asset semantics, cache ownership, and processor-specific watch behavior.
28
+ - Core owns lifecycle ordering, startup orchestration, and manifest assembly.
29
+
30
+ ## Lifecycle Summary
31
+
32
+ 1. Config build validates and prepares plugin contributions.
33
+ 2. Core seals the app-owned build manifest.
34
+ 3. Runtime startup calls runtime-only setup hooks.
35
+ 4. Request-time rendering and development invalidation reuse those finalized contracts.
@@ -1,2 +1,3 @@
1
1
  import type { EcoBuildPlugin } from '../build/build-types.js';
2
+ export declare function resolveAppSourceAliasPath(srcDir: string, specifier: string): string | undefined;
2
3
  export declare function createAliasResolverPlugin(srcDir: string): EcoBuildPlugin;
@@ -1,9 +1,11 @@
1
- import { existsSync } from "node:fs";
1
+ import { existsSync, readFileSync } from "node:fs";
2
2
  import path from "node:path";
3
3
  const RESOLVABLE_EXTENSIONS = [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mdx", ".css", ".scss", ".sass", ".less"];
4
4
  function findResolvablePath(candidate) {
5
5
  if (path.extname(candidate)) {
6
- return existsSync(candidate) ? candidate : void 0;
6
+ if (existsSync(candidate)) {
7
+ return candidate;
8
+ }
7
9
  }
8
10
  for (const extension of RESOLVABLE_EXTENSIONS) {
9
11
  const fileCandidate = `${candidate}${extension}`;
@@ -19,13 +21,32 @@ function findResolvablePath(candidate) {
19
21
  }
20
22
  return void 0;
21
23
  }
24
+ function resolveAliasedBarrelTarget(resolvedPath) {
25
+ if (!path.basename(resolvedPath).startsWith("index.")) {
26
+ return resolvedPath;
27
+ }
28
+ const source = readFileSync(resolvedPath, "utf8").trim();
29
+ const match = source.match(/^export\s+\*\s+from\s+['"]([^'"]+)['"]\s*;?$/);
30
+ if (!match?.[1]?.startsWith(".")) {
31
+ return resolvedPath;
32
+ }
33
+ const target = findResolvablePath(path.resolve(path.dirname(resolvedPath), match[1]));
34
+ return target ?? resolvedPath;
35
+ }
36
+ function resolveAppSourceAliasPath(srcDir, specifier) {
37
+ if (!specifier.startsWith("@/")) {
38
+ return void 0;
39
+ }
40
+ const candidate = path.join(srcDir, specifier.slice(2));
41
+ const resolved = findResolvablePath(candidate);
42
+ return resolved ? resolveAliasedBarrelTarget(resolved) : void 0;
43
+ }
22
44
  function createAliasResolverPlugin(srcDir) {
23
45
  return {
24
46
  name: "ecopages-alias-resolver",
25
47
  setup(build) {
26
48
  build.onResolve({ filter: /^@\// }, (args) => {
27
- const candidate = path.join(srcDir, args.path.slice(2));
28
- const resolved = findResolvablePath(candidate);
49
+ const resolved = resolveAppSourceAliasPath(srcDir, args.path);
29
50
  if (resolved) {
30
51
  return { path: resolved };
31
52
  }
@@ -35,5 +56,6 @@ function createAliasResolverPlugin(srcDir) {
35
56
  };
36
57
  }
37
58
  export {
38
- createAliasResolverPlugin
59
+ createAliasResolverPlugin,
60
+ resolveAppSourceAliasPath
39
61
  };
@@ -26,7 +26,8 @@
26
26
  * @module eco-component-meta-plugin
27
27
  */
28
28
  import type { EcoBuildPlugin } from '../build/build-types.js';
29
- import type { EcoPagesAppConfig } from '../internal-types.js';
29
+ import type { EcoPagesAppConfig } from '../types/internal-types.js';
30
+ import { type EcoSourceTransform, type EcoViteCompatiblePlugin } from './source-transform.js';
30
31
  /**
31
32
  * Options for creating the eco-component-meta-plugin.
32
33
  */
@@ -34,6 +35,11 @@ export interface EcoComponentDirPluginOptions {
34
35
  /** The EcoPages application configuration containing integration settings */
35
36
  config: EcoPagesAppConfig;
36
37
  }
38
+ /**
39
+ * Creates the bundler-neutral metadata transform used by Ecopages loaders and
40
+ * Vite-compatible adapters.
41
+ */
42
+ export declare function createEcoComponentMetaTransform(options: EcoComponentDirPluginOptions): EcoSourceTransform;
37
43
  /**
38
44
  * Creates a build plugin that auto-injects `__eco` metadata into EcoComponent config objects.
39
45
  *
@@ -47,6 +53,8 @@ export interface EcoComponentDirPluginOptions {
47
53
  * Supported patterns:
48
54
  * - `eco.page({ ... })` - Page component declarations
49
55
  * - `eco.component({ ... })` - Reusable component declarations
56
+ * - `eco.html({ ... })` - HTML shell declarations
57
+ * - `eco.layout({ ... })` - Layout declarations
50
58
  * - `Component.config = { ... }` - Config assignment pattern
51
59
  * - `config: { ... }` - Config property in object literals
52
60
  * - `export const config = { ... }` - Exported config declarations
@@ -63,6 +71,11 @@ export interface EcoComponentDirPluginOptions {
63
71
  * ```
64
72
  */
65
73
  export declare function createEcoComponentMetaPlugin(options: EcoComponentDirPluginOptions): EcoBuildPlugin;
74
+ /**
75
+ * Creates a Vite-compatible metadata injection plugin from the shared
76
+ * Ecopages source-transform primitive.
77
+ */
78
+ export declare function createEcoComponentMetaVitePlugin(options: EcoComponentDirPluginOptions): EcoViteCompatiblePlugin;
66
79
  /**
67
80
  * Injects `__eco` metadata into EcoComponent config objects in file content.
68
81
  *