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

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 (456) hide show
  1. package/README.md +267 -14
  2. package/package.json +98 -108
  3. package/src/adapters/README.md +39 -0
  4. package/src/adapters/abstract/application-adapter.d.ts +28 -2
  5. package/src/adapters/abstract/application-adapter.js +14 -2
  6. package/src/adapters/abstract/router-adapter.d.ts +1 -1
  7. package/src/adapters/abstract/server-adapter.d.ts +2 -2
  8. package/src/adapters/bun/client-bridge.d.ts +1 -1
  9. package/src/adapters/bun/create-app.d.ts +12 -12
  10. package/src/adapters/bun/create-app.js +64 -41
  11. package/src/adapters/bun/hmr-manager.d.ts +30 -62
  12. package/src/adapters/bun/hmr-manager.js +30 -194
  13. package/src/adapters/bun/index.d.ts +2 -3
  14. package/src/adapters/bun/index.js +3 -3
  15. package/src/adapters/bun/runtime-host.d.ts +52 -0
  16. package/src/adapters/bun/runtime-host.js +56 -0
  17. package/src/adapters/bun/server-adapter.d.ts +93 -32
  18. package/src/adapters/bun/server-adapter.js +166 -89
  19. package/src/adapters/bun/static-preview-host.d.ts +28 -0
  20. package/src/adapters/bun/static-preview-host.js +45 -0
  21. package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
  22. package/src/{create-app.js → adapters/create-app.js} +4 -4
  23. package/src/adapters/index.d.ts +2 -6
  24. package/src/adapters/index.js +2 -8
  25. package/src/adapters/node/create-app.d.ts +15 -12
  26. package/src/adapters/node/create-app.js +34 -85
  27. package/src/adapters/node/http-request-bridge.d.ts +57 -0
  28. package/src/adapters/node/http-request-bridge.js +118 -0
  29. package/src/adapters/node/node-client-bridge.d.ts +1 -1
  30. package/src/adapters/node/node-hmr-manager.d.ts +38 -48
  31. package/src/adapters/node/node-hmr-manager.js +31 -203
  32. package/src/adapters/node/runtime-host.d.ts +57 -0
  33. package/src/adapters/node/runtime-host.js +92 -0
  34. package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
  35. package/src/adapters/node/server-adapter-dependencies.js +18 -0
  36. package/src/adapters/node/server-adapter.d.ts +20 -72
  37. package/src/adapters/node/server-adapter.js +98 -203
  38. package/src/adapters/node/static-content-server.d.ts +37 -1
  39. package/src/adapters/node/static-content-server.js +29 -1
  40. package/src/adapters/node/static-preview-host.d.ts +55 -0
  41. package/src/adapters/node/static-preview-host.js +68 -0
  42. package/src/adapters/shared/application-adapter.d.ts +1 -1
  43. package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
  44. package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
  45. package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
  46. package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
  47. package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
  48. package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
  49. package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
  50. package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
  51. package/src/adapters/shared/fs-server-response-factory.js +11 -27
  52. package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
  53. package/src/adapters/shared/fs-server-response-matcher.js +76 -45
  54. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
  55. package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
  56. package/src/adapters/shared/hmr-html-response.d.ts +22 -0
  57. package/src/adapters/shared/hmr-html-response.js +33 -0
  58. package/src/adapters/shared/render-context.d.ts +5 -3
  59. package/src/adapters/shared/render-context.js +27 -3
  60. package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
  61. package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
  62. package/src/adapters/shared/runtime-host.d.ts +12 -0
  63. package/src/adapters/shared/server-adapter.d.ts +33 -12
  64. package/src/adapters/shared/server-adapter.js +215 -132
  65. package/src/adapters/shared/server-route-handler.d.ts +5 -5
  66. package/src/adapters/shared/server-route-handler.js +7 -16
  67. package/src/adapters/shared/server-static-builder.d.ts +41 -8
  68. package/src/adapters/shared/server-static-builder.js +65 -11
  69. package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
  70. package/src/adapters/shared/shared-hmr-manager.js +240 -0
  71. package/src/adapters/shared/static-preview-host.d.ts +10 -0
  72. package/src/build/README.md +107 -0
  73. package/src/build/browser-runtime-import-rewrite-plugin.d.ts +26 -0
  74. package/src/build/browser-runtime-import-rewrite-plugin.js +162 -0
  75. package/src/build/browser-runtime-manifest.d.ts +31 -0
  76. package/src/build/browser-runtime-manifest.js +61 -0
  77. package/src/build/build-adapter.d.ts +175 -3
  78. package/src/build/build-adapter.js +633 -16
  79. package/src/build/build-manifest.d.ts +33 -0
  80. package/src/build/build-manifest.js +52 -0
  81. package/src/build/dev-build-coordinator.d.ts +72 -0
  82. package/src/build/dev-build-coordinator.js +154 -0
  83. package/src/build/esbuild-build-adapter.d.ts +16 -6
  84. package/src/build/esbuild-build-adapter.js +205 -75
  85. package/src/build/runtime-build-executor.d.ts +14 -0
  86. package/src/build/runtime-build-executor.js +22 -0
  87. package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
  88. package/src/build/runtime-specifier-alias-plugin.js +31 -0
  89. package/src/config/README.md +36 -0
  90. package/src/config/config-builder.d.ts +54 -29
  91. package/src/config/config-builder.js +256 -50
  92. package/src/{constants.d.ts → config/constants.d.ts} +13 -0
  93. package/src/{constants.js → config/constants.js} +4 -0
  94. package/src/declarations.d.ts +19 -14
  95. package/src/dev/host-runtime.d.ts +10 -0
  96. package/src/dev/host-runtime.js +24 -0
  97. package/src/dev/sc-server.d.ts +1 -1
  98. package/src/dev/sc-server.js +1 -1
  99. package/src/eco/README.md +70 -16
  100. package/src/eco/eco.browser.d.ts +2 -0
  101. package/src/eco/eco.browser.js +88 -0
  102. package/src/eco/eco.js +63 -54
  103. package/src/eco/eco.types.d.ts +69 -6
  104. package/src/eco/eco.utils.d.ts +1 -40
  105. package/src/eco/eco.utils.js +5 -35
  106. package/src/eco/global-injector-map.d.ts +3 -3
  107. package/src/eco/global-injector-map.js +2 -2
  108. package/src/eco/lazy-injector-map.d.ts +2 -2
  109. package/src/errors/index.d.ts +1 -0
  110. package/src/errors/index.js +3 -1
  111. package/src/hmr/README.md +26 -0
  112. package/src/hmr/client/hmr-runtime.d.ts +1 -6
  113. package/src/hmr/client/hmr-runtime.js +38 -7
  114. package/src/hmr/hmr-strategy.d.ts +16 -13
  115. package/src/hmr/hmr-strategy.js +22 -7
  116. package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
  117. package/src/hmr/hmr.postcss.test.e2e.js +31 -0
  118. package/src/hmr/hmr.test.e2e.js +26 -33
  119. package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
  120. package/src/hmr/strategies/default-hmr-strategy.js +1 -1
  121. package/src/hmr/strategies/js-hmr-strategy.d.ts +40 -42
  122. package/src/hmr/strategies/js-hmr-strategy.js +24 -43
  123. package/src/index.browser.d.ts +2 -2
  124. package/src/index.browser.js +1 -1
  125. package/src/index.d.ts +4 -3
  126. package/src/index.js +16 -5
  127. package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
  128. package/src/integrations/ghtml/ghtml-renderer.js +27 -30
  129. package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
  130. package/src/integrations/ghtml/ghtml.constants.js +4 -0
  131. package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
  132. package/src/integrations/ghtml/ghtml.plugin.js +3 -4
  133. package/src/plugins/README.md +35 -0
  134. package/src/plugins/alias-resolver-plugin.d.ts +1 -0
  135. package/src/plugins/alias-resolver-plugin.js +27 -5
  136. package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
  137. package/src/plugins/eco-component-meta-plugin.js +42 -24
  138. package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
  139. package/src/plugins/foreign-jsx-override-plugin.js +41 -0
  140. package/src/plugins/integration-plugin.d.ts +157 -29
  141. package/src/plugins/integration-plugin.js +115 -14
  142. package/src/plugins/processor.d.ts +17 -2
  143. package/src/plugins/processor.js +22 -3
  144. package/src/plugins/runtime-capability.d.ts +9 -0
  145. package/src/plugins/source-transform.d.ts +46 -0
  146. package/src/plugins/source-transform.js +71 -0
  147. package/src/route-renderer/GRAPH.md +83 -325
  148. package/src/route-renderer/README.md +73 -90
  149. package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
  150. package/src/route-renderer/orchestration/component-render-context.js +147 -0
  151. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
  152. package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
  153. package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
  154. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
  155. package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
  156. package/src/route-renderer/orchestration/integration-renderer.js +991 -0
  157. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
  158. package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
  159. package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
  160. package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
  161. package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
  162. package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
  163. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
  164. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
  165. package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
  166. package/src/route-renderer/orchestration/render-output.utils.js +171 -0
  167. package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
  168. package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
  169. package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
  170. package/src/route-renderer/orchestration/template-serialization.js +45 -0
  171. package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
  172. package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
  173. package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
  174. package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
  175. package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
  176. package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
  177. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
  178. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
  179. package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
  180. package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
  181. package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
  182. package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
  183. package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
  184. package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
  185. package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
  186. package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
  187. package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
  188. package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
  189. package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
  190. package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
  191. package/src/route-renderer/route-renderer.d.ts +57 -14
  192. package/src/route-renderer/route-renderer.js +30 -18
  193. package/src/router/README.md +94 -0
  194. package/src/router/client/link-intent.d.ts +53 -0
  195. package/src/router/client/link-intent.js +34 -0
  196. package/src/router/client/link-intent.test.browser.d.ts +1 -0
  197. package/src/router/client/link-intent.test.browser.js +43 -0
  198. package/src/router/client/navigation-coordinator.d.ts +169 -0
  199. package/src/router/client/navigation-coordinator.js +215 -0
  200. package/src/router/server/route-registry.d.ts +78 -0
  201. package/src/router/server/route-registry.js +262 -0
  202. package/src/services/README.md +28 -0
  203. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
  204. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
  205. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
  206. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
  207. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
  208. package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
  209. package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
  210. package/src/services/assets/asset-processing-service/assets.types.js +0 -0
  211. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +57 -0
  212. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
  213. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
  214. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -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 -0
  218. package/src/services/assets/asset-processing-service/index.js +6 -0
  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/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
  222. package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
  223. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
  224. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
  225. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
  226. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
  227. package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
  228. package/src/services/assets/asset-processing-service/processors/index.js +5 -0
  229. package/src/services/{asset-processing-service → 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 +120 -0
  231. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
  232. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
  233. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
  234. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
  235. package/src/services/{asset-processing-service → 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 +59 -0
  237. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
  238. package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
  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 +73 -0
  242. package/src/services/assets/browser-bundle.service.js +41 -0
  243. package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
  244. package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
  245. package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
  246. package/src/services/html/html-rewriter-provider.service.js +68 -0
  247. package/src/services/html/html-transformer.service.d.ts +96 -0
  248. package/src/services/html/html-transformer.service.js +287 -0
  249. package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
  250. package/src/services/invalidation/development-invalidation.service.js +190 -0
  251. package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
  252. package/src/services/module-loading/app-module-loader.service.js +0 -0
  253. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
  254. package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
  255. package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
  256. package/src/services/module-loading/host-module-loader-registry.js +15 -0
  257. package/src/services/module-loading/module-loading-types.d.ts +2 -0
  258. package/src/services/module-loading/module-loading-types.js +0 -0
  259. package/src/services/module-loading/node-bootstrap-plugin.d.ts +38 -0
  260. package/src/services/module-loading/node-bootstrap-plugin.js +215 -0
  261. package/src/services/module-loading/page-module-import.service.d.ts +95 -0
  262. package/src/services/module-loading/page-module-import.service.js +191 -0
  263. package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
  264. package/src/services/module-loading/server-module-transpiler.service.js +64 -0
  265. package/src/services/module-loading/source-module-support.d.ts +5 -0
  266. package/src/services/module-loading/source-module-support.js +8 -0
  267. package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
  268. package/src/services/runtime-state/dev-graph.service.js +162 -0
  269. package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
  270. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
  271. package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
  272. package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
  273. package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
  274. package/src/static-site-generator/README.md +26 -0
  275. package/src/static-site-generator/static-site-generator.d.ts +67 -20
  276. package/src/static-site-generator/static-site-generator.js +182 -138
  277. package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
  278. package/src/types/internal-types.js +0 -0
  279. package/src/{public-types.d.ts → types/public-types.d.ts} +239 -31
  280. package/src/types/public-types.js +0 -0
  281. package/src/utils/html-escaping.d.ts +7 -0
  282. package/src/utils/html-escaping.js +6 -0
  283. package/src/utils/locals-utils.d.ts +1 -1
  284. package/src/utils/parse-cli-args.d.ts +4 -1
  285. package/src/utils/parse-cli-args.js +16 -1
  286. package/src/utils/resolve-work-dir.d.ts +11 -0
  287. package/src/utils/resolve-work-dir.js +31 -0
  288. package/src/watchers/project-watcher.d.ts +11 -7
  289. package/src/watchers/project-watcher.js +69 -75
  290. package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
  291. package/src/watchers/project-watcher.test-helpers.js +6 -5
  292. package/CHANGELOG.md +0 -94
  293. package/src/adapters/abstract/application-adapter.ts +0 -337
  294. package/src/adapters/abstract/router-adapter.ts +0 -30
  295. package/src/adapters/abstract/server-adapter.ts +0 -79
  296. package/src/adapters/bun/client-bridge.ts +0 -62
  297. package/src/adapters/bun/create-app.ts +0 -189
  298. package/src/adapters/bun/define-api-handler.d.ts +0 -61
  299. package/src/adapters/bun/define-api-handler.ts +0 -114
  300. package/src/adapters/bun/hmr-manager.ts +0 -276
  301. package/src/adapters/bun/index.ts +0 -3
  302. package/src/adapters/bun/server-adapter.ts +0 -492
  303. package/src/adapters/bun/server-lifecycle.d.ts +0 -52
  304. package/src/adapters/bun/server-lifecycle.js +0 -120
  305. package/src/adapters/bun/server-lifecycle.ts +0 -154
  306. package/src/adapters/index.ts +0 -6
  307. package/src/adapters/node/create-app.ts +0 -179
  308. package/src/adapters/node/index.d.ts +0 -4
  309. package/src/adapters/node/index.js +0 -8
  310. package/src/adapters/node/index.ts +0 -9
  311. package/src/adapters/node/node-client-bridge.ts +0 -79
  312. package/src/adapters/node/node-hmr-manager.ts +0 -271
  313. package/src/adapters/node/server-adapter.ts +0 -561
  314. package/src/adapters/node/static-content-server.ts +0 -203
  315. package/src/adapters/shared/api-response.ts +0 -104
  316. package/src/adapters/shared/application-adapter.ts +0 -199
  317. package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
  318. package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
  319. package/src/adapters/shared/fs-server-response-factory.ts +0 -118
  320. package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
  321. package/src/adapters/shared/render-context.ts +0 -105
  322. package/src/adapters/shared/server-adapter.ts +0 -442
  323. package/src/adapters/shared/server-route-handler.ts +0 -166
  324. package/src/adapters/shared/server-static-builder.ts +0 -82
  325. package/src/build/build-adapter.ts +0 -133
  326. package/src/build/build-types.ts +0 -83
  327. package/src/build/esbuild-build-adapter.ts +0 -511
  328. package/src/config/config-builder.ts +0 -474
  329. package/src/constants.ts +0 -39
  330. package/src/create-app.ts +0 -87
  331. package/src/define-api-handler.js +0 -15
  332. package/src/define-api-handler.ts +0 -66
  333. package/src/dev/sc-server.ts +0 -143
  334. package/src/eco/component-render-context.d.ts +0 -105
  335. package/src/eco/component-render-context.js +0 -77
  336. package/src/eco/component-render-context.ts +0 -202
  337. package/src/eco/eco.ts +0 -221
  338. package/src/eco/eco.types.ts +0 -202
  339. package/src/eco/eco.utils.ts +0 -89
  340. package/src/eco/global-injector-map.ts +0 -112
  341. package/src/eco/lazy-injector-map.ts +0 -120
  342. package/src/eco/module-dependencies.ts +0 -75
  343. package/src/errors/http-error.ts +0 -72
  344. package/src/errors/index.ts +0 -2
  345. package/src/errors/locals-access-error.ts +0 -7
  346. package/src/global/app-logger.ts +0 -4
  347. package/src/hmr/client/hmr-runtime.ts +0 -121
  348. package/src/hmr/hmr-strategy.ts +0 -172
  349. package/src/hmr/hmr.test.e2e.ts +0 -75
  350. package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
  351. package/src/hmr/strategies/js-hmr-strategy.ts +0 -327
  352. package/src/index.browser.ts +0 -3
  353. package/src/index.ts +0 -5
  354. package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
  355. package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
  356. package/src/internal-types.ts +0 -212
  357. package/src/plugins/alias-resolver-plugin.ts +0 -45
  358. package/src/plugins/eco-component-meta-plugin.ts +0 -474
  359. package/src/plugins/integration-plugin.ts +0 -184
  360. package/src/plugins/processor.ts +0 -220
  361. package/src/public-types.ts +0 -1255
  362. package/src/route-renderer/component-graph-executor.d.ts +0 -32
  363. package/src/route-renderer/component-graph-executor.js +0 -31
  364. package/src/route-renderer/component-graph-executor.ts +0 -84
  365. package/src/route-renderer/component-graph.d.ts +0 -42
  366. package/src/route-renderer/component-graph.js +0 -72
  367. package/src/route-renderer/component-graph.ts +0 -159
  368. package/src/route-renderer/component-marker.d.ts +0 -52
  369. package/src/route-renderer/component-marker.js +0 -46
  370. package/src/route-renderer/component-marker.ts +0 -117
  371. package/src/route-renderer/dependency-resolver.js +0 -428
  372. package/src/route-renderer/dependency-resolver.ts +0 -596
  373. package/src/route-renderer/html-post-processing.service.d.ts +0 -40
  374. package/src/route-renderer/html-post-processing.service.js +0 -86
  375. package/src/route-renderer/html-post-processing.service.ts +0 -103
  376. package/src/route-renderer/integration-renderer.d.ts +0 -339
  377. package/src/route-renderer/integration-renderer.js +0 -526
  378. package/src/route-renderer/integration-renderer.ts +0 -696
  379. package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
  380. package/src/route-renderer/marker-graph-resolver.js +0 -93
  381. package/src/route-renderer/marker-graph-resolver.ts +0 -153
  382. package/src/route-renderer/page-module-loader.d.ts +0 -61
  383. package/src/route-renderer/page-module-loader.ts +0 -153
  384. package/src/route-renderer/render-execution.service.d.ts +0 -69
  385. package/src/route-renderer/render-execution.service.js +0 -91
  386. package/src/route-renderer/render-execution.service.ts +0 -158
  387. package/src/route-renderer/render-preparation.service.d.ts +0 -112
  388. package/src/route-renderer/render-preparation.service.js +0 -243
  389. package/src/route-renderer/render-preparation.service.ts +0 -358
  390. package/src/route-renderer/route-renderer.ts +0 -80
  391. package/src/router/fs-router-scanner.d.ts +0 -41
  392. package/src/router/fs-router-scanner.js +0 -155
  393. package/src/router/fs-router-scanner.ts +0 -217
  394. package/src/router/fs-router.d.ts +0 -26
  395. package/src/router/fs-router.js +0 -100
  396. package/src/router/fs-router.ts +0 -122
  397. package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
  398. package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
  399. package/src/services/asset-processing-service/asset.factory.ts +0 -105
  400. package/src/services/asset-processing-service/assets.types.ts +0 -112
  401. package/src/services/asset-processing-service/index.d.ts +0 -3
  402. package/src/services/asset-processing-service/index.js +0 -3
  403. package/src/services/asset-processing-service/index.ts +0 -3
  404. package/src/services/asset-processing-service/processor.interface.ts +0 -27
  405. package/src/services/asset-processing-service/processor.registry.ts +0 -18
  406. package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
  407. package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
  408. package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
  409. package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
  410. package/src/services/asset-processing-service/processors/index.d.ts +0 -5
  411. package/src/services/asset-processing-service/processors/index.js +0 -5
  412. package/src/services/asset-processing-service/processors/index.ts +0 -5
  413. package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
  414. package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
  415. package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
  416. package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
  417. package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
  418. package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
  419. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
  420. package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
  421. package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
  422. package/src/services/cache/cache.types.ts +0 -126
  423. package/src/services/cache/index.ts +0 -18
  424. package/src/services/cache/memory-cache-store.ts +0 -130
  425. package/src/services/cache/page-cache-service.ts +0 -202
  426. package/src/services/html-transformer.service.d.ts +0 -50
  427. package/src/services/html-transformer.service.js +0 -163
  428. package/src/services/html-transformer.service.ts +0 -217
  429. package/src/services/page-module-import.service.d.ts +0 -37
  430. package/src/services/page-module-import.service.js +0 -88
  431. package/src/services/page-module-import.service.ts +0 -129
  432. package/src/services/page-request-cache-coordinator.service.ts +0 -128
  433. package/src/services/schema-validation-service.ts +0 -204
  434. package/src/services/validation/standard-schema.types.ts +0 -68
  435. package/src/static-site-generator/static-site-generator.ts +0 -359
  436. package/src/utils/css.d.ts +0 -1
  437. package/src/utils/css.js +0 -7
  438. package/src/utils/css.ts +0 -5
  439. package/src/utils/deep-merge.ts +0 -47
  440. package/src/utils/hash.ts +0 -5
  441. package/src/utils/html.ts +0 -1
  442. package/src/utils/invariant.ts +0 -15
  443. package/src/utils/locals-utils.ts +0 -37
  444. package/src/utils/parse-cli-args.ts +0 -83
  445. package/src/utils/path-utils.module.ts +0 -14
  446. package/src/utils/runtime.ts +0 -44
  447. package/src/utils/server-utils.module.ts +0 -67
  448. package/src/watchers/project-watcher.test-helpers.ts +0 -40
  449. package/src/watchers/project-watcher.ts +0 -364
  450. /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
  451. /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
  452. /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
  453. /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
  454. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
  455. /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
  456. /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
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
  *
@@ -1,7 +1,9 @@
1
- import path from "node:path";
2
1
  import { parseSync } from "oxc-parser";
3
- import { fileSystem } from "@ecopages/file-system";
4
2
  import { rapidhash } from "../utils/hash.js";
3
+ import {
4
+ createEcoBuildPluginFromSourceTransform,
5
+ createVitePluginFromSourceTransform
6
+ } from "./source-transform.js";
5
7
  const REGEX_SPECIAL_CHARS = /[.*+?^${}()|[\]\\]/g;
6
8
  const VALID_LOADER_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx"]);
7
9
  function hasValidLoaderExtension(ext) {
@@ -16,7 +18,13 @@ function buildExtensionToIntegrationMap(integrations) {
16
18
  const mapping = [];
17
19
  for (const integration of integrations) {
18
20
  for (const ext of integration.extensions) {
19
- mapping.push([ext, integration.name]);
21
+ mapping.push([
22
+ ext,
23
+ {
24
+ name: integration.name,
25
+ jsxImportSource: integration.jsxImportSource
26
+ }
27
+ ]);
20
28
  }
21
29
  }
22
30
  mapping.sort((a, b) => b[0].length - a[0].length);
@@ -28,7 +36,14 @@ function detectIntegration(filePath, extensionToIntegration) {
28
36
  return integration;
29
37
  }
30
38
  }
31
- return "ghtml";
39
+ return { name: "ghtml" };
40
+ }
41
+ function prependJsxImportSource(code, jsxImportSource) {
42
+ if (!jsxImportSource || code.includes("@jsxImportSource")) {
43
+ return code;
44
+ }
45
+ return `/** @jsxImportSource ${jsxImportSource} */
46
+ ${code}`;
32
47
  }
33
48
  function createExtensionPattern(extensions) {
34
49
  if (extensions.length === 0) {
@@ -38,30 +53,31 @@ function createExtensionPattern(extensions) {
38
53
  const escaped = uniqueExtensions.map((ext) => ext.replace(REGEX_SPECIAL_CHARS, "\\$&"));
39
54
  return new RegExp(`(${escaped.join("|")})(\\?.*)?$`);
40
55
  }
41
- function createEcoComponentMetaPlugin(options) {
56
+ function createEcoComponentMetaTransform(options) {
57
+ const allExtensions = options.config.integrations.flatMap((integration) => integration.extensions).filter(hasValidLoaderExtension);
58
+ if (allExtensions.length === 0) {
59
+ throw new Error("[eco-component-meta-plugin] No extensions configured. At least one integration is required.");
60
+ }
61
+ const extensionPattern = createExtensionPattern(allExtensions);
62
+ const extensionToIntegration = buildExtensionToIntegrationMap(options.config.integrations);
42
63
  return {
43
64
  name: "eco-component-meta-plugin",
44
- setup(build) {
45
- const allExtensions = options.config.integrations.flatMap((integration) => integration.extensions).filter(hasValidLoaderExtension);
46
- if (allExtensions.length === 0) {
47
- return;
48
- }
49
- const extensionPattern = createExtensionPattern(allExtensions);
50
- const extensionToIntegration = buildExtensionToIntegrationMap(options.config.integrations);
51
- build.onLoad({ filter: extensionPattern }, (args) => {
52
- const filePath = args.path.split("?")[0];
53
- const contents = fileSystem.readFileSync(filePath);
54
- const integration = detectIntegration(filePath, extensionToIntegration);
55
- const transformedContents = injectEcoMeta(contents, filePath, integration);
56
- const ext = path.extname(filePath).slice(1);
57
- return {
58
- contents: transformedContents,
59
- loader: ext || "ts"
60
- };
61
- });
65
+ enforce: "pre",
66
+ filter: extensionPattern,
67
+ transform(code, id) {
68
+ const integration = detectIntegration(id, extensionToIntegration);
69
+ return {
70
+ code: prependJsxImportSource(injectEcoMeta(code, id, integration.name), integration.jsxImportSource)
71
+ };
62
72
  }
63
73
  };
64
74
  }
75
+ function createEcoComponentMetaPlugin(options) {
76
+ return createEcoBuildPluginFromSourceTransform(createEcoComponentMetaTransform(options));
77
+ }
78
+ function createEcoComponentMetaVitePlugin(options) {
79
+ return createVitePluginFromSourceTransform(createEcoComponentMetaTransform(options));
80
+ }
65
81
  function findInjectionPoints(node, insertions, injection, isInsideEcoComponent = false) {
66
82
  if (!node || typeof node !== "object") return;
67
83
  const n = node;
@@ -70,7 +86,7 @@ function findInjectionPoints(node, insertions, injection, isInsideEcoComponent =
70
86
  if (callee?.type === "MemberExpression" || callee?.type === "StaticMemberExpression") {
71
87
  const obj = callee.object;
72
88
  const prop = callee.property;
73
- if (obj?.type === "Identifier" && obj?.name === "eco" && (prop?.name === "page" || prop?.name === "component")) {
89
+ if (obj?.type === "Identifier" && obj?.name === "eco" && (prop?.name === "page" || prop?.name === "component" || prop?.name === "html" || prop?.name === "layout")) {
74
90
  const args = n.arguments;
75
91
  const firstArg = args?.[0];
76
92
  if (firstArg?.type === "ObjectExpression") {
@@ -152,6 +168,8 @@ function injectEcoMeta(contents, filePath, integration) {
152
168
  var eco_component_meta_plugin_default = createEcoComponentMetaPlugin;
153
169
  export {
154
170
  createEcoComponentMetaPlugin,
171
+ createEcoComponentMetaTransform,
172
+ createEcoComponentMetaVitePlugin,
155
173
  eco_component_meta_plugin_default as default,
156
174
  injectEcoMeta
157
175
  };
@@ -0,0 +1,33 @@
1
+ import type { EcoBuildPlugin } from '../build/build-types.js';
2
+ /**
3
+ * Options for the shared foreign-JSX override build plugin.
4
+ */
5
+ export interface ForeignJsxOverrideOptions {
6
+ /** JSX runtime that should own the transformed foreign files. */
7
+ hostJsxImportSource: string;
8
+ /** Extensions claimed by other JSX integrations that may appear in the host graph. */
9
+ foreignExtensions: string[];
10
+ /** More specific owned suffixes that must not be claimed by this override. */
11
+ excludeExtensions?: string[];
12
+ /** Optional plugin name override for debug output. */
13
+ name?: string;
14
+ }
15
+ /**
16
+ * Build plugin that prepends a `@jsxImportSource` pragma to foreign integration
17
+ * files bundled into a host integration's client graph.
18
+ *
19
+ * When a host integration (e.g. React) bundles a component file that belongs to
20
+ * another JSX integration (e.g. `.kita.tsx`), that file inherits the project
21
+ * `tsconfig` JSX runtime which produces the wrong output (HTML strings instead
22
+ * of framework elements). This plugin rewrites the source to explicitly target
23
+ * the host's JSX factory so esbuild compiles every JSX expression into the
24
+ * correct element creation calls.
25
+ *
26
+ * The plugin is intentionally framework-agnostic: any integration that does
27
+ * client-side bundling can use it by passing its own `jsxImportSource` and the
28
+ * set of foreign extensions collected from the app config.
29
+ *
30
+ * When no JSX-bearing foreign extensions are present, the returned plugin is a
31
+ * no-op so integrations can register it unconditionally.
32
+ */
33
+ export declare function createForeignJsxOverridePlugin(options: ForeignJsxOverrideOptions): EcoBuildPlugin;
@@ -0,0 +1,41 @@
1
+ import { readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ function createForeignJsxOverridePlugin(options) {
4
+ const extensions = options.foreignExtensions.filter((ext) => ext.endsWith(".tsx") || ext.endsWith(".jsx"));
5
+ const excludedExtensions = (options.excludeExtensions ?? []).filter(
6
+ (ext) => ext.endsWith(".tsx") || ext.endsWith(".jsx")
7
+ );
8
+ if (extensions.length === 0) {
9
+ return {
10
+ name: options.name ?? "foreign-jsx-override",
11
+ setup() {
12
+ }
13
+ };
14
+ }
15
+ const pragma = `/** @jsxImportSource ${options.hostJsxImportSource} */
16
+ `;
17
+ const filter = new RegExp(`(${extensions.map((e) => e.replace(".", "\\.")).join("|")})$`);
18
+ return {
19
+ name: options.name ?? "foreign-jsx-override",
20
+ setup(build) {
21
+ build.onLoad({ filter }, (args) => {
22
+ if (excludedExtensions.some((extension) => args.path.endsWith(extension))) {
23
+ return void 0;
24
+ }
25
+ const source = readFileSync(args.path, "utf-8");
26
+ const loader = args.path.endsWith(".jsx") ? "jsx" : "tsx";
27
+ if (source.includes("@jsxImportSource")) {
28
+ return void 0;
29
+ }
30
+ return {
31
+ contents: pragma + source,
32
+ loader,
33
+ resolveDir: path.dirname(args.path)
34
+ };
35
+ });
36
+ }
37
+ };
38
+ }
39
+ export {
40
+ createForeignJsxOverridePlugin
41
+ };