@ecopages/core 0.2.0-beta.4 → 0.2.0-beta.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 (611) hide show
  1. package/README.md +40 -9
  2. package/package.json +371 -33
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +115 -6
  5. package/src/adapters/abstract/application-adapter.js +261 -120
  6. package/src/adapters/abstract/router-adapter.js +12 -4
  7. package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
  8. package/src/adapters/abstract/segment-path-matcher.js +147 -0
  9. package/src/adapters/abstract/server-adapter.d.ts +16 -2
  10. package/src/adapters/abstract/server-adapter.js +22 -14
  11. package/src/adapters/abstract/ws-pattern-matcher.d.ts +12 -0
  12. package/src/adapters/abstract/ws-pattern-matcher.js +28 -0
  13. package/src/adapters/bun/bun-user-websocket-lifecycle.d.ts +22 -0
  14. package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
  15. package/src/adapters/bun/client-bridge.d.ts +1 -0
  16. package/src/adapters/bun/client-bridge.js +51 -47
  17. package/src/adapters/bun/create-app.d.ts +9 -6
  18. package/src/adapters/bun/create-app.js +171 -130
  19. package/src/adapters/bun/hmr-manager.d.ts +1 -1
  20. package/src/adapters/bun/hmr-manager.js +62 -57
  21. package/src/adapters/bun/index.d.ts +1 -1
  22. package/src/adapters/bun/index.js +2 -8
  23. package/src/adapters/bun/runtime-host.d.ts +1 -1
  24. package/src/adapters/bun/runtime-host.js +61 -54
  25. package/src/adapters/bun/server-adapter.d.ts +91 -41
  26. package/src/adapters/bun/server-adapter.js +566 -426
  27. package/src/adapters/bun/static-preview-host.d.ts +1 -1
  28. package/src/adapters/bun/static-preview-host.js +43 -41
  29. package/src/adapters/create-app.d.ts +13 -11
  30. package/src/adapters/create-app.js +11 -63
  31. package/src/adapters/index.d.ts +2 -2
  32. package/src/adapters/index.js +2 -8
  33. package/src/adapters/node/create-app.d.ts +8 -3
  34. package/src/adapters/node/create-app.js +126 -84
  35. package/src/adapters/node/http-request-bridge.js +147 -106
  36. package/src/adapters/node/node-client-bridge.d.ts +1 -0
  37. package/src/adapters/node/node-client-bridge.js +62 -61
  38. package/src/adapters/node/node-hmr-manager.d.ts +1 -1
  39. package/src/adapters/node/node-hmr-manager.js +58 -48
  40. package/src/adapters/node/runtime-host.d.ts +1 -1
  41. package/src/adapters/node/runtime-host.js +96 -89
  42. package/src/adapters/node/server-adapter-dependencies.js +18 -17
  43. package/src/adapters/node/server-adapter.d.ts +63 -23
  44. package/src/adapters/node/server-adapter.js +346 -297
  45. package/src/adapters/node/static-content-server.d.ts +1 -0
  46. package/src/adapters/node/static-content-server.js +172 -183
  47. package/src/adapters/node/static-preview-host.d.ts +1 -1
  48. package/src/adapters/node/static-preview-host.js +88 -64
  49. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  50. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  51. package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
  52. package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
  53. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
  54. package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
  55. package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
  56. package/src/adapters/shared/http/api-request-pipeline.js +132 -0
  57. package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
  58. package/src/adapters/shared/http/api-response.js +79 -0
  59. package/src/adapters/shared/http/create-body-response.d.ts +12 -0
  60. package/src/adapters/shared/http/create-body-response.js +26 -0
  61. package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
  62. package/src/adapters/shared/http/define-api-handler.js +49 -0
  63. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  64. package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
  65. package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
  66. package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
  67. package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
  68. package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
  69. package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
  70. package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
  71. package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
  72. package/src/adapters/shared/http/fs-server-response-matcher.js +258 -0
  73. package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
  74. package/src/adapters/shared/http/run-middleware-chain.js +17 -0
  75. package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
  76. package/src/adapters/shared/runtime/application-adapter.js +75 -0
  77. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
  78. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
  79. package/src/adapters/shared/runtime/copy-runtime-public-dir.d.ts +6 -0
  80. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
  81. package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
  82. package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
  83. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  84. package/src/adapters/shared/runtime/port-manager.js +226 -0
  85. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  86. package/src/adapters/shared/runtime/render-context.js +99 -0
  87. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -3
  88. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
  89. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
  90. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
  91. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
  92. package/src/adapters/shared/runtime/server-adapter.js +301 -0
  93. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  94. package/src/adapters/shared/runtime/server-route-handler.js +77 -0
  95. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +27 -35
  96. package/src/adapters/shared/runtime/server-static-builder.js +172 -0
  97. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  98. package/src/adapters/shared/ws/node-http-websocket-upgrades.d.ts +21 -0
  99. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
  100. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  101. package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
  102. package/src/build/README.md +191 -31
  103. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  104. package/src/build/app-build-manifest-runtime.js +145 -0
  105. package/src/build/browser/browser-runtime-manifest.js +58 -0
  106. package/src/build/browser/browser-runtime-plugin-helpers.js +34 -0
  107. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +1 -1
  108. package/src/build/browser/browser-runtime-plugin.js +216 -0
  109. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  110. package/src/build/browser/jsx-ownership-plugins.js +55 -0
  111. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  112. package/src/build/browser/lit-static-render-worker-context.js +4 -0
  113. package/src/build/build-adapter.d.ts +29 -334
  114. package/src/build/build-adapter.js +273 -237
  115. package/src/build/cache/build-input-fingerprint.d.ts +28 -0
  116. package/src/build/cache/build-input-fingerprint.js +33 -0
  117. package/src/build/cache/cache-constants.d.ts +4 -0
  118. package/src/build/cache/cache-constants.js +4 -0
  119. package/src/build/cache/cache-keys.d.ts +22 -0
  120. package/src/build/cache/cache-keys.js +71 -0
  121. package/src/build/cache/pages-unified-graph-build.d.ts +31 -0
  122. package/src/build/cache/pages-unified-graph-build.js +199 -0
  123. package/src/build/cache/production-build-cache.d.ts +21 -0
  124. package/src/build/cache/production-build-cache.js +56 -0
  125. package/src/build/cache/server-entry-build-cache.d.ts +43 -0
  126. package/src/build/cache/server-entry-build-cache.js +153 -0
  127. package/src/build/contracts/build-contracts.d.ts +96 -0
  128. package/src/build/contracts/build-contracts.js +1 -0
  129. package/src/build/contracts/build-manifest.d.ts +90 -0
  130. package/src/build/contracts/build-manifest.js +64 -0
  131. package/src/build/contracts/build-types.js +1 -0
  132. package/src/build/contracts/content-virtual-modules.d.ts +12 -0
  133. package/src/build/contracts/content-virtual-modules.js +29 -0
  134. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
  135. package/src/build/rolldown/rolldown-adapter-helpers.js +458 -0
  136. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  137. package/src/build/rolldown/rolldown-build-adapter.js +57 -0
  138. package/src/build/rolldown/rolldown-build-invocation-metrics.d.ts +12 -0
  139. package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
  140. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
  141. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  142. package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
  143. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  144. package/src/build/rolldown/runtime-build-output-normalizer.d.ts +10 -0
  145. package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
  146. package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
  147. package/src/build/runtime/build-profile-options.d.ts +7 -0
  148. package/src/build/runtime/build-profile-options.js +37 -0
  149. package/src/build/runtime/build-request-identity.d.ts +17 -0
  150. package/src/build/runtime/build-request-identity.js +79 -0
  151. package/src/build/runtime/build-request-policy.d.ts +58 -0
  152. package/src/build/runtime/build-request-policy.js +84 -0
  153. package/src/build/runtime/build-runtime.d.ts +28 -0
  154. package/src/build/runtime/build-runtime.js +75 -0
  155. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  156. package/src/build/runtime/deduping-build-executor.js +40 -0
  157. package/src/build/runtime/parallel-build-executor.d.ts +21 -0
  158. package/src/build/runtime/parallel-build-executor.js +60 -0
  159. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  160. package/src/build/runtime/serialized-build-executor.js +79 -0
  161. package/src/cache/index.d.ts +2 -1
  162. package/src/cache/index.js +7 -6
  163. package/src/cache/module-parse-cache.d.ts +5 -0
  164. package/src/cache/module-parse-cache.js +122 -67
  165. package/src/cache/module-transform-profiler.d.ts +8 -0
  166. package/src/cache/module-transform-profiler.js +8 -0
  167. package/src/client/navigation-scripts/classification.d.ts +16 -0
  168. package/src/client/navigation-scripts/classification.js +49 -0
  169. package/src/client/navigation-scripts/index.d.ts +3 -0
  170. package/src/client/navigation-scripts/index.js +3 -0
  171. package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
  172. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
  173. package/src/client/navigation-scripts/registry.d.ts +11 -0
  174. package/src/client/navigation-scripts/registry.js +16 -0
  175. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  176. package/src/client/navigation-scripts/rerun-queue.js +90 -0
  177. package/src/client/scroll.d.ts +17 -0
  178. package/src/client/scroll.js +33 -0
  179. package/src/client/scroll.test.browser.d.ts +1 -0
  180. package/src/client/scroll.test.browser.js +31 -0
  181. package/src/client/view-transitions.d.ts +32 -0
  182. package/src/client/view-transitions.js +120 -0
  183. package/src/client/view-transitions.test.browser.d.ts +1 -0
  184. package/src/client/view-transitions.test.browser.js +56 -0
  185. package/src/config/config-builder.d.ts +40 -10
  186. package/src/config/config-builder.js +647 -600
  187. package/src/config/constants.d.ts +1 -0
  188. package/src/config/constants.js +44 -23
  189. package/src/declarations.d.ts +1 -0
  190. package/src/dev/README.md +24 -0
  191. package/src/dev/client-bridge-registry.d.ts +5 -0
  192. package/src/dev/client-bridge-registry.js +10 -0
  193. package/src/dev/dev-client-ownership.d.ts +7 -0
  194. package/src/dev/dev-client-ownership.js +8 -0
  195. package/src/dev/hmr-manager-registry.d.ts +8 -0
  196. package/src/dev/hmr-manager-registry.js +10 -0
  197. package/src/dev/host-runtime.d.ts +3 -0
  198. package/src/dev/host-runtime.js +25 -23
  199. package/src/dev/runtime-server-started-message.d.ts +2 -0
  200. package/src/dev/runtime-server-started-message.js +3 -0
  201. package/src/dev/sc-server.js +106 -103
  202. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  203. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  204. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  205. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  206. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  207. package/src/dev/transform-server/dev-transform-import-rewriter.js +126 -0
  208. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  209. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  210. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  211. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  212. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  213. package/src/dev/transform-server/dev-transform-server.js +191 -0
  214. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  215. package/src/dev/transform-server/dev-transform-url.js +58 -0
  216. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
  217. package/src/dev/transform-server/dev-transform-vendor-registry.js +158 -0
  218. package/src/dev/transform-server/index.d.ts +6 -0
  219. package/src/dev/transform-server/index.js +4 -0
  220. package/src/dev/transform-server/types.d.ts +15 -0
  221. package/src/dev/transform-server/types.js +1 -0
  222. package/src/dev-toolbar/README.md +52 -0
  223. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  224. package/src/dev-toolbar/define-dev-tool.js +9 -0
  225. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  226. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  227. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  228. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  229. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  230. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  231. package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
  232. package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
  233. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  234. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  235. package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
  236. package/src/dev-toolbar/dev-toolbar-package.js +78 -0
  237. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  238. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  239. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  240. package/src/diagnostics/request-build-dedupe.js +39 -0
  241. package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
  242. package/src/diagnostics/request-pipeline-metrics.js +121 -0
  243. package/src/diagnostics/startup-trace.d.ts +81 -0
  244. package/src/diagnostics/startup-trace.js +281 -0
  245. package/src/eco/README.md +17 -0
  246. package/src/eco/component-identity.d.ts +13 -0
  247. package/src/eco/component-identity.js +18 -0
  248. package/src/eco/eco-declared-component.d.ts +15 -0
  249. package/src/eco/eco-declared-component.js +23 -0
  250. package/src/eco/eco.browser.js +63 -70
  251. package/src/eco/eco.js +163 -97
  252. package/src/eco/eco.types.d.ts +47 -8
  253. package/src/eco/eco.types.js +5 -0
  254. package/src/eco/eco.utils.d.ts +1 -1
  255. package/src/eco/eco.utils.js +1 -10
  256. package/src/eco/global-injector-map.js +55 -41
  257. package/src/eco/lazy-injector-map.js +90 -60
  258. package/src/eco/module-dependencies.js +52 -44
  259. package/src/eco/page-layout-normalization.d.ts +21 -0
  260. package/src/eco/page-layout-normalization.js +69 -0
  261. package/src/env.d.ts +2 -0
  262. package/src/errors/http-error.d.ts +8 -0
  263. package/src/errors/http-error.js +66 -49
  264. package/src/errors/index.d.ts +1 -0
  265. package/src/errors/index.js +3 -6
  266. package/src/errors/locals-access-error.js +5 -8
  267. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  268. package/src/errors/undeclared-component-dependency-error.js +17 -0
  269. package/src/global/app-logger.js +3 -6
  270. package/src/hmr/README.md +21 -0
  271. package/src/hmr/client/hmr-runtime.js +119 -110
  272. package/src/hmr/client/module-update.d.ts +13 -0
  273. package/src/hmr/client/module-update.js +39 -0
  274. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  275. package/src/hmr/hmr-asset-paths.js +22 -0
  276. package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
  277. package/src/hmr/hmr-entrypoint-output.js +34 -0
  278. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  279. package/src/hmr/hmr-file-change-prep.js +14 -0
  280. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  281. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  282. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  283. package/src/hmr/hmr-runtime-paths.js +13 -0
  284. package/src/hmr/hmr-strategy.d.ts +9 -0
  285. package/src/hmr/hmr-strategy.js +113 -42
  286. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  287. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
  288. package/src/hmr/strategies/js-hmr-strategy.js +107 -167
  289. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  290. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
  291. package/src/index.browser.d.ts +1 -0
  292. package/src/index.browser.js +2 -4
  293. package/src/index.d.ts +4 -1
  294. package/src/index.js +7 -21
  295. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -6
  296. package/src/integrations/ghtml/ghtml-renderer.js +12 -56
  297. package/src/integrations/ghtml/ghtml.constants.js +1 -4
  298. package/src/integrations/ghtml/ghtml.plugin.d.ts +3 -16
  299. package/src/integrations/ghtml/ghtml.plugin.js +10 -20
  300. package/src/islands/README.md +25 -0
  301. package/src/islands/island-host.d.ts +37 -0
  302. package/src/islands/island-host.js +55 -0
  303. package/src/plugins/README.md +2 -1
  304. package/src/plugins/alias-resolver-cache.d.ts +6 -9
  305. package/src/plugins/alias-resolver-cache.js +114 -97
  306. package/src/plugins/alias-resolver-plugin.d.ts +3 -3
  307. package/src/plugins/alias-resolver-plugin.js +35 -62
  308. package/src/plugins/define-integration.d.ts +26 -0
  309. package/src/plugins/define-integration.js +20 -0
  310. package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
  311. package/src/plugins/eco-component-meta-plugin.js +120 -162
  312. package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
  313. package/src/plugins/foreign-jsx-override-plugin.js +49 -37
  314. package/src/plugins/integration-plugin.d.ts +43 -14
  315. package/src/plugins/integration-plugin.js +212 -190
  316. package/src/plugins/jsx-import-source.utils.d.ts +8 -0
  317. package/src/plugins/jsx-import-source.utils.js +21 -0
  318. package/src/plugins/processor.d.ts +71 -12
  319. package/src/plugins/processor.js +168 -130
  320. package/src/plugins/runtime-capability.js +1 -0
  321. package/src/plugins/source-transform.d.ts +32 -1
  322. package/src/plugins/source-transform.js +112 -60
  323. package/src/plugins/tsconfig-import-resolver.d.ts +35 -0
  324. package/src/plugins/tsconfig-import-resolver.js +235 -0
  325. package/src/route-renderer/GRAPH.md +26 -32
  326. package/src/route-renderer/README.md +54 -33
  327. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  328. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
  329. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
  330. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
  331. package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
  332. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
  333. package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +17 -7
  334. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +191 -0
  335. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
  336. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
  337. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
  338. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
  339. package/src/route-renderer/orchestration/integration-renderer.d.ts +41 -151
  340. package/src/route-renderer/orchestration/integration-renderer.js +798 -988
  341. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
  342. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
  343. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
  344. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
  345. package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
  346. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
  347. package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
  348. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
  349. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
  350. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
  351. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
  352. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
  353. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
  354. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
  355. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
  356. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
  357. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
  358. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
  359. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
  360. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +232 -0
  361. package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
  362. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
  363. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
  364. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
  365. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
  366. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
  367. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
  368. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
  369. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
  370. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
  371. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
  372. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
  373. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
  374. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +49 -0
  375. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
  376. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
  377. package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
  378. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
  379. package/src/route-renderer/orchestration/string-markup-renderer.d.ts +14 -0
  380. package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
  381. package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
  382. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  383. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  384. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
  385. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
  386. package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
  387. package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
  388. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  389. package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
  390. package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
  391. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  392. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  393. package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
  394. package/src/route-renderer/page-loading/page-module-loader.js +136 -124
  395. package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
  396. package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
  397. package/src/route-renderer/route-renderer.js +74 -76
  398. package/src/router/README.md +31 -0
  399. package/src/router/client/link-intent.d.ts +11 -21
  400. package/src/router/client/link-intent.js +56 -30
  401. package/src/router/client/link-intent.test.browser.js +50 -39
  402. package/src/router/client/link-navigation-policy.d.ts +45 -0
  403. package/src/router/client/link-navigation-policy.js +122 -0
  404. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  405. package/src/router/client/link-navigation-policy.test.browser.js +82 -0
  406. package/src/router/client/navigation-coordinator.d.ts +1 -1
  407. package/src/router/client/navigation-coordinator.js +235 -201
  408. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  409. package/src/router/client/navigation-lifecycle.js +50 -0
  410. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  411. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  412. package/src/router/server/route-registry.js +237 -242
  413. package/src/services/README.md +5 -0
  414. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  415. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
  416. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +7 -1
  417. package/src/services/assets/asset-processing-service/asset-processing.service.js +308 -268
  418. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  419. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  420. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  421. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -1
  422. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -45
  423. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  424. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
  425. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +4 -2
  426. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -38
  427. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  428. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
  429. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  430. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
  431. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  432. package/src/services/assets/asset-processing-service/index.js +8 -6
  433. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  434. package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
  435. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  436. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
  437. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  438. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  439. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  440. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  441. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  442. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
  443. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  444. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  445. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
  446. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  447. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
  448. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -121
  449. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  450. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
  451. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  452. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
  453. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  454. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
  455. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  456. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
  457. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  458. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
  459. package/src/services/assets/browser-bundle.service.d.ts +28 -30
  460. package/src/services/assets/browser-bundle.service.js +54 -40
  461. package/src/services/cache/cache.types.d.ts +4 -2
  462. package/src/services/cache/cache.types.js +5 -0
  463. package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
  464. package/src/services/cache/html-page-cache-dependency-index.js +88 -0
  465. package/src/services/cache/index.d.ts +2 -0
  466. package/src/services/cache/index.js +8 -7
  467. package/src/services/cache/memory-cache-store.js +101 -89
  468. package/src/services/cache/page-cache-service.d.ts +31 -1
  469. package/src/services/cache/page-cache-service.js +237 -150
  470. package/src/services/cache/page-request-cache-coordinator.service.js +106 -102
  471. package/src/services/html/html-rewriter-provider.service.js +61 -61
  472. package/src/services/html/html-transformer.service.d.ts +1 -1
  473. package/src/services/html/html-transformer.service.js +249 -266
  474. package/src/services/invalidation/development-invalidation.service.d.ts +25 -2
  475. package/src/services/invalidation/development-invalidation.service.js +239 -175
  476. package/src/services/module-loading/README.md +52 -0
  477. package/src/services/module-loading/app-module-loader.service.js +1 -0
  478. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  479. package/src/services/module-loading/app-server-module-transpiler.service.js +103 -118
  480. package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
  481. package/src/services/module-loading/collection-server-module-build.service.js +83 -0
  482. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  483. package/src/services/module-loading/module-loading-types.js +1 -0
  484. package/src/services/module-loading/page-module-import.service.d.ts +11 -13
  485. package/src/services/module-loading/page-module-import.service.js +222 -184
  486. package/src/services/module-loading/route-module-build-cache-registry.d.ts +24 -0
  487. package/src/services/module-loading/route-module-build-cache-registry.js +51 -0
  488. package/src/services/module-loading/route-module-build-cache.d.ts +4 -0
  489. package/src/services/module-loading/route-module-build-cache.js +3 -0
  490. package/src/services/module-loading/route-module-build-cache.store.d.ts +57 -0
  491. package/src/services/module-loading/route-module-build-cache.store.js +202 -0
  492. package/src/services/module-loading/route-module-build-manifest.d.ts +57 -0
  493. package/src/services/module-loading/route-module-build-manifest.js +60 -0
  494. package/src/services/module-loading/route-module-dependency-hasher.d.ts +81 -0
  495. package/src/services/module-loading/route-module-dependency-hasher.js +148 -0
  496. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
  497. package/src/services/module-loading/server-module-transpiler.service.js +65 -62
  498. package/src/services/module-loading/source-module-support.js +15 -7
  499. package/src/services/runtime-state/dev-graph.service.js +165 -157
  500. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  501. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  502. package/src/services/validation/schema-validation-service.d.ts +1 -4
  503. package/src/services/validation/schema-validation-service.js +156 -95
  504. package/src/services/validation/standard-schema.types.d.ts +9 -62
  505. package/src/services/validation/standard-schema.types.js +1 -0
  506. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  507. package/src/services/validation/validate-standard-schema.js +14 -0
  508. package/src/static-site-generator/README.md +41 -0
  509. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
  510. package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
  511. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  512. package/src/static-site-generator/sitemap-routes.js +36 -0
  513. package/src/static-site-generator/sitemap.d.ts +15 -0
  514. package/src/static-site-generator/sitemap.js +42 -0
  515. package/src/static-site-generator/static-build-invalidation.d.ts +10 -0
  516. package/src/static-site-generator/static-build-invalidation.js +37 -0
  517. package/src/static-site-generator/static-export-context.d.ts +30 -0
  518. package/src/static-site-generator/static-export-context.js +1 -0
  519. package/src/static-site-generator/static-site-generator.d.ts +43 -25
  520. package/src/static-site-generator/static-site-generator.js +536 -294
  521. package/src/types/internal-types.d.ts +59 -13
  522. package/src/types/internal-types.js +1 -0
  523. package/src/types/public-types.d.ts +310 -95
  524. package/src/types/public-types.js +1 -0
  525. package/src/utils/deep-merge.js +39 -26
  526. package/src/utils/ecopages-route-info.d.ts +26 -0
  527. package/src/utils/ecopages-route-info.js +30 -0
  528. package/src/utils/hash.js +3 -6
  529. package/src/utils/html-escaping.d.ts +7 -0
  530. package/src/utils/html-escaping.js +22 -5
  531. package/src/utils/html.js +1 -4
  532. package/src/utils/invariant.js +11 -10
  533. package/src/utils/locals-utils.js +32 -22
  534. package/src/utils/parse-cli-args.d.ts +2 -0
  535. package/src/utils/parse-cli-args.js +73 -59
  536. package/src/utils/path-pattern.d.ts +23 -0
  537. package/src/utils/path-pattern.js +42 -0
  538. package/src/utils/path-utils.module.js +8 -11
  539. package/src/utils/resolve-entry-file.js +70 -38
  540. package/src/utils/resolve-work-dir.js +23 -27
  541. package/src/utils/runtime.js +24 -33
  542. package/src/utils/server-utils.module.d.ts +3 -2
  543. package/src/utils/server-utils.module.js +60 -53
  544. package/src/utils/static-file-extensions.d.ts +12 -0
  545. package/src/utils/static-file-extensions.js +54 -0
  546. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  547. package/src/watchers/project-watcher-ignore.js +17 -0
  548. package/src/watchers/project-watcher.d.ts +29 -6
  549. package/src/watchers/project-watcher.js +402 -257
  550. package/src/watchers/project-watcher.test-helpers.js +45 -50
  551. package/src/adapters/shared/api-response.js +0 -96
  552. package/src/adapters/shared/application-adapter.js +0 -90
  553. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  554. package/src/adapters/shared/define-api-handler.js +0 -15
  555. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  556. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  557. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  558. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  559. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  560. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  561. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  562. package/src/adapters/shared/hmr-html-response.js +0 -33
  563. package/src/adapters/shared/render-context.js +0 -93
  564. package/src/adapters/shared/runtime-app-bootstrap.js +0 -46
  565. package/src/adapters/shared/runtime-host.js +0 -0
  566. package/src/adapters/shared/server-adapter.js +0 -436
  567. package/src/adapters/shared/server-route-handler.js +0 -111
  568. package/src/adapters/shared/server-static-builder.js +0 -162
  569. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
  570. package/src/adapters/shared/shared-hmr-manager.js +0 -241
  571. package/src/adapters/shared/static-preview-host.js +0 -0
  572. package/src/build/browser-runtime-manifest.js +0 -61
  573. package/src/build/browser-runtime-plugin-helpers.js +0 -14
  574. package/src/build/browser-runtime-plugin.js +0 -173
  575. package/src/build/build-manifest.d.ts +0 -33
  576. package/src/build/build-manifest.js +0 -49
  577. package/src/build/build-types.js +0 -0
  578. package/src/build/rolldown-adapter-helpers.js +0 -265
  579. package/src/build/rolldown-build-adapter.js +0 -65
  580. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  581. package/src/build/rolldown-dev-build-adapter.js +0 -166
  582. package/src/build/rolldown-plugin-bridge.js +0 -199
  583. package/src/build/runtime-build-executor.d.ts +0 -21
  584. package/src/build/runtime-build-executor.js +0 -19
  585. package/src/build/runtime-build-output-normalizer.d.ts +0 -3
  586. package/src/build/runtime-build-output-normalizer.js +0 -111
  587. package/src/build/serialized-build-executor.js +0 -63
  588. package/src/build/server-side-css-shim-plugin.js +0 -35
  589. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  590. package/src/hmr/hmr.test.e2e.js +0 -43
  591. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  592. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  593. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  594. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -233
  595. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  596. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  597. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  598. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  599. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  600. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  601. package/src/route-renderer/orchestration/render-output.utils.js +0 -171
  602. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
  603. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  604. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  605. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  606. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  607. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  608. /package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +0 -0
  609. /package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +0 -0
  610. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  611. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
- import type { EcoBuildPlugin } from '../build/build-types.js';
1
+ import type { EcoBuildPlugin } from '../build/contracts/build-types.js';
2
2
  import { AliasResolverCache } from './alias-resolver-cache.js';
3
- export declare function resolveAppSourceAliasPath(srcDir: string, specifier: string): string | undefined;
4
- export declare function createAliasResolverPlugin(srcDir: string, options?: {
3
+ export declare function createAliasResolverPlugin(projectRoot: string, options?: {
5
4
  cache?: AliasResolverCache;
6
5
  }): EcoBuildPlugin;
6
+ export { isBarePackageImportSpecifier, matchesTsconfigPathPrefix, loadTsconfigPathPrefixes, resolveProjectImportPath, resolveProjectModulePath, } from './tsconfig-import-resolver.js';
@@ -1,65 +1,38 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import path from "node:path";
3
- import { AliasResolverCache } from "./alias-resolver-cache.js";
4
- const RESOLVABLE_EXTENSIONS = [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mdx", ".css", ".scss", ".sass", ".less"];
5
- function findResolvablePath(candidate) {
6
- if (path.extname(candidate)) {
7
- if (existsSync(candidate)) {
8
- return candidate;
9
- }
10
- }
11
- for (const extension of RESOLVABLE_EXTENSIONS) {
12
- const fileCandidate = `${candidate}${extension}`;
13
- if (existsSync(fileCandidate)) {
14
- return fileCandidate;
15
- }
16
- }
17
- for (const extension of RESOLVABLE_EXTENSIONS) {
18
- const indexCandidate = path.join(candidate, `index${extension}`);
19
- if (existsSync(indexCandidate)) {
20
- return indexCandidate;
21
- }
22
- }
23
- return void 0;
1
+ import { AliasResolverCache } from './alias-resolver-cache.js';
2
+ import { loadTsconfigPathPrefixes, resolveProjectImportPath } from './tsconfig-import-resolver.js';
3
+ function escapeRegExp(value) {
4
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
24
5
  }
25
- function resolveAliasedBarrelTarget(resolvedPath) {
26
- if (!path.basename(resolvedPath).startsWith("index.")) {
27
- return resolvedPath;
28
- }
29
- const source = readFileSync(resolvedPath, "utf8").trim();
30
- const match = source.match(/^export\s+\*\s+from\s+['"]([^'"]+)['"]\s*;?$/);
31
- if (!match?.[1]?.startsWith(".")) {
32
- return resolvedPath;
33
- }
34
- const target = findResolvablePath(path.resolve(path.dirname(resolvedPath), match[1]));
35
- return target ?? resolvedPath;
36
- }
37
- function resolveAppSourceAliasPath(srcDir, specifier) {
38
- if (!specifier.startsWith("@/")) {
39
- return void 0;
40
- }
41
- const candidate = path.join(srcDir, specifier.slice(2));
42
- const resolved = findResolvablePath(candidate);
43
- return resolved ? resolveAliasedBarrelTarget(resolved) : void 0;
44
- }
45
- function createAliasResolverPlugin(srcDir, options) {
46
- const cache = options?.cache ?? new AliasResolverCache();
47
- return {
48
- name: "ecopages-alias-resolver",
49
- setup(build) {
50
- build.onResolve({ filter: /^@\// }, (args) => {
51
- const cached = cache.get(srcDir, args.path);
52
- if (cached.hit) {
53
- return cached.resolved ? { path: cached.resolved } : {};
54
- }
55
- const resolved = resolveAppSourceAliasPath(srcDir, args.path);
56
- cache.set(srcDir, args.path, resolved);
57
- return resolved ? { path: resolved } : {};
58
- });
6
+ function buildPathPrefixFilter(prefix) {
7
+ if (prefix.endsWith('/')) {
8
+ return new RegExp(`^${escapeRegExp(prefix)}`);
59
9
  }
60
- };
10
+ return new RegExp(`^${escapeRegExp(prefix)}(?:/|$)`);
11
+ }
12
+ export function createAliasResolverPlugin(projectRoot, options) {
13
+ const cache = options?.cache ?? new AliasResolverCache();
14
+ const pathPrefixes = loadTsconfigPathPrefixes(projectRoot);
15
+ return {
16
+ name: 'ecopages-alias-resolver',
17
+ setup(build) {
18
+ if (pathPrefixes.length === 0) {
19
+ return;
20
+ }
21
+ for (const prefix of pathPrefixes) {
22
+ build.onResolve({ filter: buildPathPrefixFilter(prefix) }, (args) => {
23
+ if (!args.importer) {
24
+ return undefined;
25
+ }
26
+ const cached = cache.get(projectRoot, args.path);
27
+ if (cached.hit) {
28
+ return cached.resolved ? { path: cached.resolved } : undefined;
29
+ }
30
+ const resolved = resolveProjectImportPath(projectRoot, args.importer, args.path);
31
+ cache.set(projectRoot, args.path, resolved);
32
+ return resolved ? { path: resolved } : undefined;
33
+ });
34
+ }
35
+ },
36
+ };
61
37
  }
62
- export {
63
- createAliasResolverPlugin,
64
- resolveAppSourceAliasPath
65
- };
38
+ export { isBarePackageImportSpecifier, matchesTsconfigPathPrefix, loadTsconfigPathPrefixes, resolveProjectImportPath, resolveProjectModulePath, } from './tsconfig-import-resolver.js';
@@ -0,0 +1,26 @@
1
+ import type { EcoPagesAppConfig } from '../types/internal-types.js';
2
+ import type { AssetProcessingService } from '../services/assets/asset-processing-service/asset-processing.service.js';
3
+ import type { ProcessedAsset } from '../services/assets/asset-processing-service/assets.types.js';
4
+ import type { EcoPagesElement } from '../types/public-types.js';
5
+ import type { IntegrationRenderer } from '../route-renderer/orchestration/integration-renderer.js';
6
+ import { IntegrationPlugin, type IntegrationPluginConfig } from './integration-plugin.js';
7
+ type RendererClass<C> = new (options: {
8
+ appConfig: EcoPagesAppConfig;
9
+ assetProcessingService: AssetProcessingService;
10
+ resolvedIntegrationDependencies: ProcessedAsset[];
11
+ rendererModules?: unknown;
12
+ runtimeOrigin: string;
13
+ }) => IntegrationRenderer<C>;
14
+ export interface DefineIntegrationDefinition<C = EcoPagesElement> extends IntegrationPluginConfig {
15
+ renderer: RendererClass<C>;
16
+ }
17
+ export interface DefinedIntegration<C = EcoPagesElement> {
18
+ (options?: Omit<IntegrationPluginConfig, 'name'>): IntegrationPlugin<C>;
19
+ Plugin: new (options?: Omit<IntegrationPluginConfig, 'name'>) => IntegrationPlugin<C>;
20
+ }
21
+ /**
22
+ * Creates a typed integration plugin factory for integrations that only need
23
+ * declarative config and a renderer class.
24
+ */
25
+ export declare function defineIntegration<C = EcoPagesElement>(definition: DefineIntegrationDefinition<C>): DefinedIntegration<C>;
26
+ export {};
@@ -0,0 +1,20 @@
1
+ import { IntegrationPlugin } from './integration-plugin.js';
2
+ /**
3
+ * Creates a typed integration plugin factory for integrations that only need
4
+ * declarative config and a renderer class.
5
+ */
6
+ export function defineIntegration(definition) {
7
+ const { renderer, ...defaultConfig } = definition;
8
+ class DefinedIntegrationPlugin extends IntegrationPlugin {
9
+ renderer = renderer;
10
+ constructor(options) {
11
+ super({
12
+ ...defaultConfig,
13
+ ...options,
14
+ });
15
+ }
16
+ }
17
+ const factory = ((options) => new DefinedIntegrationPlugin(options));
18
+ factory.Plugin = DefinedIntegrationPlugin;
19
+ return factory;
20
+ }
@@ -1,108 +1,12 @@
1
- /**
2
- * Bun plugin that auto-injects `__eco` metadata into EcoComponent config objects.
3
- *
4
- * This plugin uses AST parsing (via oxc-parser) to reliably inject the `__eco` property
5
- * into EcoComponent config objects at import time. The injected metadata contains:
6
- * - `dir`: The directory path of the component file (used for dependency resolution)
7
- * - `integration`: The integration type (e.g., 'react', 'kitajs', 'ghtml', 'lit')
8
- *
9
- * The plugin intercepts file loading for all configured integration extensions and
10
- * transforms component configs before they are executed.
11
- *
12
- * @example
13
- * ```typescript
14
- * // Before transformation:
15
- * export default eco.page({
16
- * render: () => '<div>Hello</div>',
17
- * });
18
- *
19
- * // After transformation:
20
- * export default eco.page({
21
- * __eco: { id: "<hash>", file: "/path/to/pages/index.tsx", integration: "react" },
22
- * render: () => '<div>Hello</div>',
23
- * });
24
- * ```
25
- *
26
- * @module eco-component-meta-plugin
27
- */
28
- import type { EcoBuildPlugin } from '../build/build-types.js';
29
1
  import type { EcoPagesAppConfig } from '../types/internal-types.js';
30
- import { type EcoSourceTransform, type EcoViteCompatiblePlugin } from './source-transform.js';
31
- /**
32
- * Options for creating the eco-component-meta-plugin.
33
- */
2
+ import type { EcoSourceTransform, EcoViteCompatiblePlugin } from './source-transform.js';
3
+ import type { EcoBuildPlugin } from '../build/contracts/build-types.js';
34
4
  export interface EcoComponentDirPluginOptions {
35
- /** The EcoPages application configuration containing integration settings */
36
5
  config: EcoPagesAppConfig;
37
6
  }
38
- /**
39
- * Creates the bundler-neutral metadata transform used by Ecopages loaders and
40
- * Vite-compatible adapters.
41
- */
7
+ /** Attributes real `eco.*()` factory calls with canonical component identity. */
8
+ export declare function attributeComponentIdentity(contents: string, filePath: string, integration: string): string;
42
9
  export declare function createEcoComponentMetaTransform(options: EcoComponentDirPluginOptions): EcoSourceTransform;
43
- /**
44
- * Creates a build plugin that auto-injects `__eco` metadata into EcoComponent config objects.
45
- *
46
- * This plugin intercepts file loading for all integration-compatible files and:
47
- * 1. Strips any query string from the file path (for dev mode cache-busting)
48
- * 2. Reads the file contents
49
- * 3. Parses the AST using oxc-parser to find injection points
50
- * 4. Injects `__eco: { id: "...", file: "...", integration: "..." }` into config objects
51
- * 5. Returns the transformed content with the appropriate loader
52
- *
53
- * Supported patterns:
54
- * - `eco.page({ ... })` - Page component declarations
55
- * - `eco.component({ ... })` - Reusable component declarations
56
- * - `eco.html({ ... })` - HTML shell declarations
57
- * - `eco.layout({ ... })` - Layout declarations
58
- * - `Component.config = { ... }` - Config assignment pattern
59
- * - `config: { ... }` - Config property in object literals
60
- * - `export const config = { ... }` - Exported config declarations
61
- *
62
- * @param options - Plugin options containing the EcoPages config
63
- * @returns A build plugin instance ready for registration
64
- *
65
- * @example
66
- * ```typescript
67
- * import { createEcoComponentMetaPlugin } from '@ecopages/core';
68
- *
69
- * const plugin = createEcoComponentMetaPlugin({ config: appConfig });
70
- * appConfig.loaders.set(plugin.name, plugin);
71
- * ```
72
- */
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
10
  export declare function createEcoComponentMetaVitePlugin(options: EcoComponentDirPluginOptions): EcoViteCompatiblePlugin;
79
- /**
80
- * Injects `__eco` metadata into EcoComponent config objects in file content.
81
- *
82
- * Uses oxc-parser for robust AST-based code analysis, which handles edge cases
83
- * that regex-based approaches would miss (e.g., complex generics, nested objects,
84
- * comments, string literals containing similar patterns).
85
- *
86
- * The injection is performed by:
87
- * 1. Parsing the source code into an AST
88
- * 2. Walking the AST to find all config object patterns
89
- * 3. Collecting insertion points (sorted in reverse order to preserve positions)
90
- * 4. Inserting the `__eco` property at each point
91
- *
92
- * @param contents - The source code content to transform
93
- * @param filePath - Absolute path to the file (used to derive the directory)
94
- * @param integration - The integration identifier for this file type
95
- * @returns Transformed source code with `__eco` injected, or original if no patterns found
96
- *
97
- * @example
98
- * ```typescript
99
- * const result = injectEcoMeta(
100
- * 'export default eco.page({ render: () => "<div>Hi</div>" });',
101
- * '/app/src/pages/index.tsx',
102
- * 'react'
103
- * );
104
- * // Result: 'export default eco.page({ __eco: { id: "<hash>", file: "/app/src/pages/index.tsx", integration: "react" }, render: () => "<div>Hi</div>" });'
105
- * ```
106
- */
107
- export declare function injectEcoMeta(contents: string, filePath: string, integration: string): string;
108
- export default createEcoComponentMetaPlugin;
11
+ export declare function createEcoComponentMetaPlugin(options: EcoComponentDirPluginOptions): EcoBuildPlugin;
12
+ export default createEcoComponentMetaTransform;
@@ -1,175 +1,133 @@
1
- import { cachedParseSync } from "../cache/module-parse-cache.js";
2
- import { rapidhash } from "../utils/hash.js";
3
- import {
4
- createEcoBuildPluginFromSourceTransform,
5
- createVitePluginFromSourceTransform
6
- } from "./source-transform.js";
7
- const REGEX_SPECIAL_CHARS = /[.*+?^${}()|[\]\\]/g;
8
- const VALID_LOADER_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx"]);
9
- function hasValidLoaderExtension(ext) {
10
- for (const validExt of VALID_LOADER_EXTENSIONS) {
11
- if (ext.endsWith(validExt)) {
12
- return true;
13
- }
14
- }
15
- return false;
16
- }
17
- function buildExtensionToIntegrationMap(integrations) {
18
- const mapping = [];
19
- for (const integration of integrations) {
20
- for (const ext of integration.extensions) {
21
- mapping.push([
22
- ext,
23
- {
24
- name: integration.name,
25
- jsxImportSource: integration.jsxImportSource
26
- }
27
- ]);
28
- }
29
- }
30
- mapping.sort((a, b) => b[0].length - a[0].length);
31
- return mapping;
1
+ import { prependJsxImportSourceIfMissing } from './jsx-import-source.utils.js';
2
+ import { createEcoBuildPluginFromSourceTransform, createVitePluginFromSourceTransform } from './source-transform.js';
3
+ import { cachedParseSync } from '../cache/module-parse-cache.js';
4
+ import { rapidhash } from '../utils/hash.js';
5
+ function integrationForFile(filePath, config) {
6
+ const candidates = config.integrations
7
+ .flatMap((integration) => integration.extensions.map((extension) => [extension, integration]))
8
+ .sort(([left], [right]) => right.length - left.length);
9
+ const match = candidates.find(([extension]) => filePath.endsWith(extension));
10
+ return match ? { name: match[1].name, jsxImportSource: match[1].jsxImportSource } : { name: 'ghtml' };
32
11
  }
33
- function detectIntegration(filePath, extensionToIntegration) {
34
- for (const [ext, integration] of extensionToIntegration) {
35
- if (filePath.endsWith(ext)) {
36
- return integration;
37
- }
38
- }
39
- return { name: "ghtml" };
12
+ function isAstNode(value) {
13
+ return typeof value === 'object' && value !== null;
40
14
  }
41
- function prependJsxImportSource(code, jsxImportSource) {
42
- if (!jsxImportSource || code.includes("@jsxImportSource")) {
43
- return code;
44
- }
45
- return `/** @jsxImportSource ${jsxImportSource} */
46
- ${code}`;
15
+ function isEcoFactoryCall(node) {
16
+ if (node.type !== 'CallExpression' || !isAstNode(node.callee))
17
+ return false;
18
+ const callee = node.callee;
19
+ if (callee.type !== 'MemberExpression' && callee.type !== 'StaticMemberExpression')
20
+ return false;
21
+ if (!isAstNode(callee.object) || callee.object.type !== 'Identifier' || callee.object.name !== 'eco')
22
+ return false;
23
+ if (!isAstNode(callee.property) || callee.property.type !== 'Identifier')
24
+ return false;
25
+ return ['page', 'component', 'layout', 'html'].includes(String(callee.property.name));
47
26
  }
48
- function createExtensionPattern(extensions) {
49
- if (extensions.length === 0) {
50
- throw new Error("[eco-component-meta-plugin] No extensions configured. At least one integration is required.");
51
- }
52
- const uniqueExtensions = [...new Set(extensions)];
53
- const escaped = uniqueExtensions.map((ext) => ext.replace(REGEX_SPECIAL_CHARS, "\\$&"));
54
- return new RegExp(`(${escaped.join("|")})(\\?.*)?$`);
27
+ function isIdentityBinding(node) {
28
+ if (!isAstNode(node) || node.type !== 'CallExpression' || !isAstNode(node.callee))
29
+ return false;
30
+ return node.callee.type === 'Identifier' && node.callee.name === 'bindComponentIdentity';
55
31
  }
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);
63
- return {
64
- name: "eco-component-meta-plugin",
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
- };
32
+ function walkAst(node, visit) {
33
+ if (Array.isArray(node)) {
34
+ for (const child of node)
35
+ walkAst(child, visit);
36
+ return;
72
37
  }
73
- };
74
- }
75
- function createEcoComponentMetaPlugin(options) {
76
- return createEcoBuildPluginFromSourceTransform(createEcoComponentMetaTransform(options));
77
- }
78
- function createEcoComponentMetaVitePlugin(options) {
79
- return createVitePluginFromSourceTransform(createEcoComponentMetaTransform(options));
38
+ if (!isAstNode(node))
39
+ return;
40
+ visit(node);
41
+ for (const value of Object.values(node))
42
+ walkAst(value, visit);
80
43
  }
81
- function findInjectionPoints(node, insertions, injection, isInsideEcoComponent = false) {
82
- if (!node || typeof node !== "object") return;
83
- const n = node;
84
- if (n.type === "CallExpression") {
85
- const callee = n.callee;
86
- if (callee?.type === "MemberExpression" || callee?.type === "StaticMemberExpression") {
87
- const obj = callee.object;
88
- const prop = callee.property;
89
- if (obj?.type === "Identifier" && obj?.name === "eco" && (prop?.name === "page" || prop?.name === "component" || prop?.name === "html" || prop?.name === "layout")) {
90
- const args = n.arguments;
91
- const firstArg = args?.[0];
92
- if (firstArg?.type === "ObjectExpression") {
93
- const start = firstArg.start;
94
- if (typeof start === "number") {
95
- insertions.push({ position: start + 1, text: injection });
96
- }
97
- }
98
- }
44
+ function addIdentityBindingImport(contents, program) {
45
+ const imports = program.body.filter((node) => isAstNode(node) &&
46
+ node.type === 'ImportDeclaration' &&
47
+ isAstNode(node.source) &&
48
+ node.source.value === '@ecopages/core');
49
+ const valueImport = imports.find((node) => node.importKind !== 'type');
50
+ if (!valueImport)
51
+ return `import { bindComponentIdentity } from '@ecopages/core';\n${contents}`;
52
+ const specifiers = Array.isArray(valueImport.specifiers) ? valueImport.specifiers.filter(isAstNode) : [];
53
+ if (specifiers.some((specifier) => specifier.type === 'ImportSpecifier' &&
54
+ isAstNode(specifier.imported) &&
55
+ specifier.imported.name === 'bindComponentIdentity')) {
56
+ return contents;
99
57
  }
100
- }
101
- if (n.type === "AssignmentExpression") {
102
- const left = n.left;
103
- const right = n.right;
104
- if (left?.type === "MemberExpression" || left?.type === "StaticMemberExpression") {
105
- const prop = left.property;
106
- if (prop?.name === "config" && right?.type === "ObjectExpression") {
107
- const start = right.start;
108
- if (typeof start === "number") {
109
- insertions.push({ position: start + 1, text: injection });
110
- }
111
- }
58
+ const namedSpecifiers = specifiers.filter((specifier) => specifier.type === 'ImportSpecifier');
59
+ if (namedSpecifiers.length > 0) {
60
+ const lastSpecifier = namedSpecifiers[namedSpecifiers.length - 1];
61
+ return `${contents.slice(0, lastSpecifier.end)}, bindComponentIdentity${contents.slice(lastSpecifier.end)}`;
112
62
  }
113
- }
114
- if (n.type === "ObjectProperty" || n.type === "Property") {
115
- const key = n.key;
116
- const value = n.value;
117
- if ((key?.type === "Identifier" || key?.type === "IdentifierName") && key?.name === "config" && value?.type === "ObjectExpression" && isInsideEcoComponent) {
118
- const start = value.start;
119
- if (typeof start === "number") {
120
- insertions.push({ position: start + 1, text: injection });
121
- }
63
+ if (specifiers.some((specifier) => specifier.type === 'ImportNamespaceSpecifier')) {
64
+ return `import { bindComponentIdentity } from '@ecopages/core';\n${contents}`;
122
65
  }
123
- }
124
- let childIsInsideEcoComponent = isInsideEcoComponent;
125
- if (n.type === "VariableDeclarator") {
126
- const id = n.id;
127
- const typeAnnotation = id?.typeAnnotation;
128
- if (typeAnnotation) {
129
- const typeStr = JSON.stringify(typeAnnotation);
130
- if (typeStr.includes("EcoComponent")) {
131
- childIsInsideEcoComponent = true;
132
- }
66
+ const defaultSpecifier = specifiers.find((specifier) => specifier.type === 'ImportDefaultSpecifier');
67
+ if (defaultSpecifier) {
68
+ return `${contents.slice(0, defaultSpecifier.end)}, { bindComponentIdentity }${contents.slice(defaultSpecifier.end)}`;
133
69
  }
134
- }
135
- for (const key in n) {
136
- if (key === "start" || key === "end" || key === "type") continue;
137
- const value = n[key];
138
- if (Array.isArray(value)) {
139
- for (const child of value) {
140
- findInjectionPoints(child, insertions, injection, childIsInsideEcoComponent);
141
- }
142
- } else if (typeof value === "object" && value !== null) {
143
- findInjectionPoints(value, insertions, injection, childIsInsideEcoComponent);
70
+ return `import { bindComponentIdentity } from '@ecopages/core';\n${contents}`;
71
+ }
72
+ /** Attributes real `eco.*()` factory calls with canonical component identity. */
73
+ export function attributeComponentIdentity(contents, filePath, integration) {
74
+ if (!contents.includes('eco.'))
75
+ return contents;
76
+ let program;
77
+ try {
78
+ program = cachedParseSync(filePath, contents, { sourceType: 'module' }).program;
79
+ }
80
+ catch {
81
+ return contents;
82
+ }
83
+ const identityLiteral = `{ id: ${JSON.stringify(rapidhash(filePath).toString(36))}, file: ${JSON.stringify(filePath)}, integration: ${JSON.stringify(integration)} }`;
84
+ const edits = [];
85
+ walkAst(program, (node) => {
86
+ if (!isEcoFactoryCall(node) || !Array.isArray(node.arguments))
87
+ return;
88
+ const firstArgument = node.arguments[0];
89
+ if (!isAstNode(firstArgument) || isIdentityBinding(firstArgument))
90
+ return;
91
+ if (typeof firstArgument.start !== 'number' || typeof firstArgument.end !== 'number')
92
+ return;
93
+ edits.push({
94
+ start: firstArgument.start,
95
+ end: firstArgument.end,
96
+ replacement: `bindComponentIdentity(${identityLiteral}, ${contents.slice(firstArgument.start, firstArgument.end)})`,
97
+ });
98
+ });
99
+ if (edits.length === 0)
100
+ return contents;
101
+ let transformed = contents;
102
+ for (const edit of edits.sort((left, right) => right.start - left.start)) {
103
+ transformed = `${transformed.slice(0, edit.start)}${edit.replacement}${transformed.slice(edit.end)}`;
144
104
  }
145
- }
105
+ return addIdentityBindingImport(transformed, program);
106
+ }
107
+ export function createEcoComponentMetaTransform(options) {
108
+ const extensions = options.config.integrations
109
+ .flatMap((integration) => integration.extensions)
110
+ .filter((extension) => ['.ts', '.tsx', '.js', '.jsx'].some((suffix) => extension.endsWith(suffix)))
111
+ .map((extension) => extension.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
112
+ const filter = new RegExp(`(${extensions.join('|')})(\\?.*)?$`);
113
+ return {
114
+ name: 'eco-component-identity-attribution',
115
+ enforce: 'pre',
116
+ filter,
117
+ transform(code, id) {
118
+ if (id.endsWith('.mdx'))
119
+ return { code };
120
+ const integration = integrationForFile(id, options.config);
121
+ return {
122
+ code: prependJsxImportSourceIfMissing(attributeComponentIdentity(code, id, integration.name), integration.jsxImportSource),
123
+ };
124
+ },
125
+ };
126
+ }
127
+ export function createEcoComponentMetaVitePlugin(options) {
128
+ return createVitePluginFromSourceTransform(createEcoComponentMetaTransform(options));
146
129
  }
147
- function injectEcoMeta(contents, filePath, integration) {
148
- const result = cachedParseSync(filePath, contents);
149
- if (result.errors.length > 0) {
150
- console.warn(`[eco-component-meta-plugin] Parse errors in ${filePath}:`, result.errors);
151
- return contents;
152
- }
153
- const ast = result.program;
154
- const id = rapidhash(filePath).toString(36);
155
- const injection = ` __eco: { id: "${id}", file: "${filePath}", integration: "${integration}" },`;
156
- const insertions = [];
157
- findInjectionPoints(ast, insertions, injection);
158
- if (insertions.length === 0) {
159
- return contents;
160
- }
161
- insertions.sort((a, b) => b.position - a.position);
162
- let transformed = contents;
163
- for (const { position, text } of insertions) {
164
- transformed = transformed.slice(0, position) + text + transformed.slice(position);
165
- }
166
- return transformed;
130
+ export function createEcoComponentMetaPlugin(options) {
131
+ return createEcoBuildPluginFromSourceTransform(createEcoComponentMetaTransform(options));
167
132
  }
168
- var eco_component_meta_plugin_default = createEcoComponentMetaPlugin;
169
- export {
170
- createEcoComponentMetaPlugin,
171
- createEcoComponentMetaTransform,
172
- createEcoComponentMetaVitePlugin,
173
- eco_component_meta_plugin_default as default,
174
- injectEcoMeta
175
- };
133
+ export default createEcoComponentMetaTransform;
@@ -1,4 +1,4 @@
1
- import type { EcoBuildPlugin } from '../build/build-types.js';
1
+ import type { EcoBuildPlugin } from '../build/contracts/build-types.js';
2
2
  /**
3
3
  * Options for the shared foreign-JSX override build plugin.
4
4
  */