@ecopages/core 0.2.0-beta.9 → 0.2.0-rc.1

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 (624) hide show
  1. package/README.md +44 -14
  2. package/package.json +368 -57
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +57 -5
  5. package/src/adapters/abstract/application-adapter.js +261 -203
  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 +13 -2
  10. package/src/adapters/abstract/server-adapter.js +22 -14
  11. package/src/adapters/abstract/ws-pattern-matcher.d.ts +2 -50
  12. package/src/adapters/abstract/ws-pattern-matcher.js +24 -57
  13. package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
  14. package/src/adapters/bun/client-bridge.js +51 -50
  15. package/src/adapters/bun/create-app.d.ts +5 -7
  16. package/src/adapters/bun/create-app.js +169 -154
  17. package/src/adapters/bun/hmr-manager.d.ts +2 -3
  18. package/src/adapters/bun/hmr-manager.js +62 -57
  19. package/src/adapters/bun/index.d.ts +1 -1
  20. package/src/adapters/bun/index.js +2 -8
  21. package/src/adapters/bun/runtime-host.d.ts +1 -1
  22. package/src/adapters/bun/runtime-host.js +61 -54
  23. package/src/adapters/bun/server-adapter.d.ts +34 -53
  24. package/src/adapters/bun/server-adapter.js +557 -637
  25. package/src/adapters/bun/static-preview-host.d.ts +1 -1
  26. package/src/adapters/bun/static-preview-host.js +43 -41
  27. package/src/adapters/create-app.d.ts +1 -12
  28. package/src/adapters/create-app.js +11 -72
  29. package/src/adapters/index.d.ts +2 -2
  30. package/src/adapters/index.js +2 -8
  31. package/src/adapters/node/create-app.d.ts +4 -3
  32. package/src/adapters/node/create-app.js +123 -98
  33. package/src/adapters/node/http-request-bridge.js +147 -106
  34. package/src/adapters/node/node-client-bridge.js +62 -64
  35. package/src/adapters/node/node-hmr-manager.d.ts +2 -3
  36. package/src/adapters/node/node-hmr-manager.js +58 -48
  37. package/src/adapters/node/runtime-host.d.ts +1 -1
  38. package/src/adapters/node/runtime-host.js +96 -89
  39. package/src/adapters/node/server-adapter-dependencies.js +18 -17
  40. package/src/adapters/node/server-adapter.d.ts +28 -8
  41. package/src/adapters/node/server-adapter.js +349 -302
  42. package/src/adapters/node/static-content-server.js +172 -186
  43. package/src/adapters/node/static-preview-host.d.ts +1 -1
  44. package/src/adapters/node/static-preview-host.js +88 -64
  45. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  46. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  47. package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
  48. package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
  49. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
  50. package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
  51. package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
  52. package/src/adapters/shared/http/api-request-pipeline.js +132 -0
  53. package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
  54. package/src/adapters/shared/http/api-response.js +79 -0
  55. package/src/adapters/shared/http/create-body-response.d.ts +12 -0
  56. package/src/adapters/shared/http/create-body-response.js +26 -0
  57. package/src/adapters/shared/http/define-api-handler.d.ts +48 -0
  58. package/src/adapters/shared/http/define-api-handler.js +49 -0
  59. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  60. package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
  61. package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
  62. package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
  63. package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
  64. package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
  65. package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
  66. package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
  67. package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
  68. package/src/adapters/shared/http/fs-server-response-matcher.js +260 -0
  69. package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
  70. package/src/adapters/shared/http/run-middleware-chain.js +17 -0
  71. package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
  72. package/src/adapters/shared/runtime/application-adapter.js +75 -0
  73. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
  74. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
  75. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
  76. package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
  77. package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
  78. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  79. package/src/adapters/shared/runtime/port-manager.js +226 -0
  80. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  81. package/src/adapters/shared/runtime/render-context.js +99 -0
  82. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -2
  83. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
  84. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
  85. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
  86. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
  87. package/src/adapters/shared/runtime/server-adapter.js +301 -0
  88. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  89. package/src/adapters/shared/runtime/server-route-handler.js +77 -0
  90. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +26 -31
  91. package/src/adapters/shared/runtime/server-static-builder.js +172 -0
  92. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  93. package/src/adapters/shared/{node-http-websocket-upgrades.d.ts → ws/node-http-websocket-upgrades.d.ts} +1 -1
  94. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
  95. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  96. package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
  97. package/src/build/README.md +165 -45
  98. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  99. package/src/build/app-build-manifest-runtime.js +145 -0
  100. package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +4 -0
  101. package/src/build/browser/browser-runtime-manifest.js +65 -0
  102. package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +3 -5
  103. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -0
  104. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +12 -13
  105. package/src/build/browser/browser-runtime-plugin.js +218 -0
  106. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  107. package/src/build/browser/jsx-ownership-plugins.js +55 -0
  108. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  109. package/src/build/browser/lit-static-render-worker-context.js +4 -0
  110. package/src/build/build-adapter.d.ts +25 -355
  111. package/src/build/build-adapter.js +258 -265
  112. package/src/build/{build-input-fingerprint.d.ts → cache/build-input-fingerprint.d.ts} +3 -3
  113. package/src/build/cache/build-input-fingerprint.js +33 -0
  114. package/src/build/cache/cache-constants.d.ts +4 -0
  115. package/src/build/cache/cache-constants.js +4 -0
  116. package/src/build/cache/cache-keys.d.ts +22 -0
  117. package/src/build/cache/cache-keys.js +71 -0
  118. package/src/build/{pages-unified-graph-build.d.ts → cache/pages-unified-graph-build.d.ts} +1 -1
  119. package/src/build/cache/pages-unified-graph-build.js +199 -0
  120. package/src/build/cache/production-build-cache.d.ts +21 -0
  121. package/src/build/cache/production-build-cache.js +56 -0
  122. package/src/build/{server-entry-build-cache.d.ts → cache/server-entry-build-cache.d.ts} +3 -4
  123. package/src/build/cache/server-entry-build-cache.js +153 -0
  124. package/src/build/contracts/build-contracts.d.ts +96 -0
  125. package/src/build/contracts/build-contracts.js +1 -0
  126. package/src/build/contracts/build-manifest.d.ts +90 -0
  127. package/src/build/contracts/build-manifest.js +64 -0
  128. package/src/build/contracts/build-types.js +1 -0
  129. package/src/build/contracts/content-virtual-modules.d.ts +12 -0
  130. package/src/build/contracts/content-virtual-modules.js +29 -0
  131. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
  132. package/src/build/rolldown/rolldown-adapter-helpers.js +472 -0
  133. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  134. package/src/build/rolldown/rolldown-build-adapter.js +57 -0
  135. package/src/build/{rolldown-build-invocation-metrics.d.ts → rolldown/rolldown-build-invocation-metrics.d.ts} +1 -1
  136. package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
  137. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +7 -2
  138. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  139. package/src/build/{rolldown-source-transform-pass.d.ts → rolldown/rolldown-source-transform-pass.d.ts} +1 -1
  140. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  141. package/src/build/rolldown/runtime-build-output-normalizer.js +227 -0
  142. package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
  143. package/src/build/runtime/build-profile-options.d.ts +7 -0
  144. package/src/build/runtime/build-profile-options.js +37 -0
  145. package/src/build/runtime/build-request-identity.d.ts +17 -0
  146. package/src/build/runtime/build-request-identity.js +79 -0
  147. package/src/build/runtime/build-request-policy.d.ts +58 -0
  148. package/src/build/runtime/build-request-policy.js +84 -0
  149. package/src/build/runtime/build-runtime.d.ts +28 -0
  150. package/src/build/runtime/build-runtime.js +75 -0
  151. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  152. package/src/build/runtime/deduping-build-executor.js +40 -0
  153. package/src/build/{parallel-build-executor.d.ts → runtime/parallel-build-executor.d.ts} +1 -1
  154. package/src/build/runtime/parallel-build-executor.js +60 -0
  155. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  156. package/src/build/runtime/serialized-build-executor.js +79 -0
  157. package/src/cache/index.d.ts +2 -1
  158. package/src/cache/index.js +7 -6
  159. package/src/cache/module-parse-cache.d.ts +5 -0
  160. package/src/cache/module-parse-cache.js +122 -67
  161. package/src/cache/module-transform-profiler.d.ts +8 -0
  162. package/src/cache/module-transform-profiler.js +8 -0
  163. package/src/client/navigation-scripts/classification.d.ts +16 -0
  164. package/src/client/navigation-scripts/classification.js +49 -0
  165. package/src/client/navigation-scripts/index.d.ts +3 -0
  166. package/src/client/navigation-scripts/index.js +3 -0
  167. package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
  168. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
  169. package/src/client/navigation-scripts/registry.d.ts +11 -0
  170. package/src/client/navigation-scripts/registry.js +16 -0
  171. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  172. package/src/client/navigation-scripts/rerun-queue.js +90 -0
  173. package/src/client/scroll.d.ts +17 -0
  174. package/src/client/scroll.js +33 -0
  175. package/src/client/scroll.test.browser.d.ts +1 -0
  176. package/src/client/scroll.test.browser.js +31 -0
  177. package/src/client/view-transitions.d.ts +32 -0
  178. package/src/client/view-transitions.js +120 -0
  179. package/src/client/view-transitions.test.browser.d.ts +1 -0
  180. package/src/client/view-transitions.test.browser.js +56 -0
  181. package/src/config/README.md +1 -1
  182. package/src/config/config-builder.d.ts +40 -20
  183. package/src/config/config-builder.js +645 -610
  184. package/src/config/constants.d.ts +1 -0
  185. package/src/config/constants.js +44 -23
  186. package/src/declarations.d.ts +1 -0
  187. package/src/dev/README.md +24 -0
  188. package/src/dev/client-bridge-registry.d.ts +5 -0
  189. package/src/dev/client-bridge-registry.js +10 -0
  190. package/src/dev/dev-client-ownership.d.ts +7 -0
  191. package/src/dev/dev-client-ownership.js +8 -0
  192. package/src/dev/hmr-manager-registry.d.ts +8 -0
  193. package/src/dev/hmr-manager-registry.js +10 -0
  194. package/src/dev/host-runtime.d.ts +3 -0
  195. package/src/dev/host-runtime.js +25 -23
  196. package/src/dev/runtime-server-started-message.d.ts +2 -0
  197. package/src/dev/runtime-server-started-message.js +3 -0
  198. package/src/dev/sc-server.js +106 -103
  199. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  200. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  201. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  202. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  203. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  204. package/src/dev/transform-server/dev-transform-import-rewriter.js +127 -0
  205. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  206. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  207. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  208. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  209. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  210. package/src/dev/transform-server/dev-transform-server.js +191 -0
  211. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  212. package/src/dev/transform-server/dev-transform-url.js +58 -0
  213. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
  214. package/src/dev/transform-server/dev-transform-vendor-registry.js +166 -0
  215. package/src/dev/transform-server/index.d.ts +6 -0
  216. package/src/dev/transform-server/index.js +4 -0
  217. package/src/dev/transform-server/types.d.ts +15 -0
  218. package/src/dev/transform-server/types.js +1 -0
  219. package/src/dev-toolbar/README.md +52 -0
  220. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  221. package/src/dev-toolbar/define-dev-tool.js +9 -0
  222. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  223. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  224. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  225. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  226. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  227. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  228. package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
  229. package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
  230. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  231. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  232. package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
  233. package/src/dev-toolbar/dev-toolbar-package.js +78 -0
  234. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  235. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  236. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  237. package/src/diagnostics/request-build-dedupe.js +39 -0
  238. package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
  239. package/src/diagnostics/request-pipeline-metrics.js +121 -0
  240. package/src/diagnostics/startup-trace.d.ts +81 -0
  241. package/src/diagnostics/startup-trace.js +281 -0
  242. package/src/eco/README.md +17 -0
  243. package/src/eco/component-identity.d.ts +13 -0
  244. package/src/eco/component-identity.js +18 -0
  245. package/src/eco/eco-declared-component.d.ts +15 -0
  246. package/src/eco/eco-declared-component.js +23 -0
  247. package/src/eco/eco.browser.js +63 -70
  248. package/src/eco/eco.js +163 -97
  249. package/src/eco/eco.types.d.ts +47 -8
  250. package/src/eco/eco.types.js +5 -0
  251. package/src/eco/eco.utils.d.ts +1 -1
  252. package/src/eco/eco.utils.js +1 -10
  253. package/src/eco/global-injector-map.js +55 -41
  254. package/src/eco/lazy-injector-map.js +90 -60
  255. package/src/eco/module-dependencies.js +52 -44
  256. package/src/eco/page-layout-normalization.d.ts +21 -0
  257. package/src/eco/page-layout-normalization.js +69 -0
  258. package/src/env.d.ts +2 -0
  259. package/src/errors/http-error.d.ts +8 -0
  260. package/src/errors/http-error.js +66 -49
  261. package/src/errors/index.d.ts +1 -0
  262. package/src/errors/index.js +3 -6
  263. package/src/errors/locals-access-error.js +5 -8
  264. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  265. package/src/errors/undeclared-component-dependency-error.js +17 -0
  266. package/src/global/app-logger.js +3 -6
  267. package/src/hmr/README.md +21 -0
  268. package/src/hmr/client/hmr-runtime.js +119 -110
  269. package/src/hmr/client/module-update.d.ts +13 -0
  270. package/src/hmr/client/module-update.js +39 -0
  271. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  272. package/src/hmr/hmr-asset-paths.js +22 -0
  273. package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
  274. package/src/hmr/hmr-entrypoint-output.js +34 -0
  275. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  276. package/src/hmr/hmr-file-change-prep.js +14 -0
  277. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  278. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  279. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  280. package/src/hmr/hmr-runtime-paths.js +13 -0
  281. package/src/hmr/hmr-strategy.d.ts +9 -0
  282. package/src/hmr/hmr-strategy.js +113 -42
  283. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  284. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
  285. package/src/hmr/strategies/js-hmr-strategy.js +107 -167
  286. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  287. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
  288. package/src/index.browser.d.ts +1 -0
  289. package/src/index.browser.js +2 -4
  290. package/src/index.d.ts +4 -1
  291. package/src/index.js +7 -21
  292. package/src/islands/README.md +25 -0
  293. package/src/islands/island-host.d.ts +37 -0
  294. package/src/islands/island-host.js +55 -0
  295. package/src/plugins/README.md +4 -2
  296. package/src/plugins/alias-resolver-cache.d.ts +6 -9
  297. package/src/plugins/alias-resolver-cache.js +114 -97
  298. package/src/plugins/alias-resolver-plugin.d.ts +3 -3
  299. package/src/plugins/alias-resolver-plugin.js +35 -62
  300. package/src/plugins/define-integration.d.ts +26 -0
  301. package/src/plugins/define-integration.js +20 -0
  302. package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
  303. package/src/plugins/eco-component-meta-plugin.js +123 -162
  304. package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
  305. package/src/plugins/foreign-jsx-override-plugin.js +49 -37
  306. package/src/plugins/integration-plugin.d.ts +28 -15
  307. package/src/plugins/integration-plugin.js +212 -195
  308. package/src/plugins/jsx-import-source.utils.d.ts +8 -0
  309. package/src/plugins/jsx-import-source.utils.js +21 -0
  310. package/src/plugins/package-specifier.d.ts +12 -0
  311. package/src/plugins/package-specifier.js +33 -0
  312. package/src/plugins/processor.d.ts +79 -12
  313. package/src/plugins/processor.js +188 -136
  314. package/src/plugins/runtime-capability.js +1 -0
  315. package/src/plugins/source-transform.d.ts +1 -1
  316. package/src/plugins/source-transform.js +109 -79
  317. package/src/plugins/tsconfig-import-resolver.d.ts +37 -0
  318. package/src/plugins/tsconfig-import-resolver.js +262 -0
  319. package/src/route-renderer/GRAPH.md +24 -30
  320. package/src/route-renderer/README.md +52 -32
  321. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  322. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
  323. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +32 -0
  324. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +52 -0
  325. package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
  326. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
  327. package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +20 -7
  328. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +195 -0
  329. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
  330. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
  331. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
  332. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
  333. package/src/route-renderer/orchestration/integration-renderer.d.ts +39 -153
  334. package/src/route-renderer/orchestration/integration-renderer.js +803 -1008
  335. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
  336. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
  337. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
  338. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
  339. package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
  340. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
  341. package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
  342. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
  343. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
  344. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
  345. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
  346. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
  347. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
  348. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
  349. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
  350. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
  351. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
  352. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
  353. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
  354. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +248 -0
  355. package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
  356. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
  357. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
  358. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
  359. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
  360. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
  361. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
  362. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
  363. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
  364. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
  365. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
  366. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
  367. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
  368. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +44 -0
  369. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
  370. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
  371. package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
  372. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
  373. package/src/{integrations/ghtml/ghtml-renderer.d.ts → route-renderer/orchestration/string-markup-renderer.d.ts} +8 -10
  374. package/src/route-renderer/orchestration/string-markup-renderer.js +53 -0
  375. package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
  376. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  377. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  378. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
  379. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
  380. package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
  381. package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
  382. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  383. package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
  384. package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
  385. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  386. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  387. package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
  388. package/src/route-renderer/page-loading/page-module-loader.js +136 -124
  389. package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
  390. package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
  391. package/src/route-renderer/route-renderer.js +74 -76
  392. package/src/router/README.md +31 -0
  393. package/src/router/client/link-intent.d.ts +11 -21
  394. package/src/router/client/link-intent.js +56 -30
  395. package/src/router/client/link-intent.test.browser.js +50 -39
  396. package/src/router/client/link-navigation-policy.d.ts +45 -0
  397. package/src/router/client/link-navigation-policy.js +122 -0
  398. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  399. package/src/router/client/link-navigation-policy.test.browser.js +82 -0
  400. package/src/router/client/navigation-coordinator.d.ts +1 -1
  401. package/src/router/client/navigation-coordinator.js +235 -211
  402. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  403. package/src/router/client/navigation-lifecycle.js +50 -0
  404. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  405. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  406. package/src/router/server/route-registry.js +237 -242
  407. package/src/services/README.md +5 -0
  408. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  409. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
  410. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +12 -1
  411. package/src/services/assets/asset-processing-service/asset-processing.service.js +335 -268
  412. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  413. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  414. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  415. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +1 -1
  416. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  417. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  418. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
  419. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -58
  420. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  421. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
  422. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  423. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
  424. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  425. package/src/services/assets/asset-processing-service/index.js +8 -6
  426. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  427. package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
  428. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  429. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
  430. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  431. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  432. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  433. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  434. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  435. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
  436. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  437. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  438. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
  439. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  440. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
  441. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  442. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  443. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
  444. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  445. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
  446. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  447. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
  448. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  449. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
  450. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  451. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
  452. package/src/services/assets/browser-bundle.service.d.ts +27 -31
  453. package/src/services/assets/browser-bundle.service.js +54 -49
  454. package/src/services/assets/browser-runtime-asset-generation.d.ts +17 -0
  455. package/src/services/assets/browser-runtime-asset-generation.js +28 -0
  456. package/src/services/cache/cache.types.d.ts +4 -2
  457. package/src/services/cache/cache.types.js +5 -0
  458. package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
  459. package/src/services/cache/html-page-cache-dependency-index.js +88 -0
  460. package/src/services/cache/index.d.ts +2 -0
  461. package/src/services/cache/index.js +8 -7
  462. package/src/services/cache/memory-cache-store.js +101 -89
  463. package/src/services/cache/page-cache-service.d.ts +31 -1
  464. package/src/services/cache/page-cache-service.js +237 -150
  465. package/src/services/cache/page-request-cache-coordinator.service.d.ts +2 -1
  466. package/src/services/cache/page-request-cache-coordinator.service.js +112 -102
  467. package/src/services/html/html-rewriter-provider.service.js +61 -61
  468. package/src/services/html/html-transformer.service.js +249 -266
  469. package/src/services/invalidation/development-invalidation.service.d.ts +15 -1
  470. package/src/services/invalidation/development-invalidation.service.js +241 -204
  471. package/src/services/module-loading/README.md +9 -6
  472. package/src/services/module-loading/app-module-loader.service.js +1 -0
  473. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  474. package/src/services/module-loading/app-server-module-transpiler.service.js +104 -106
  475. package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
  476. package/src/services/module-loading/collection-server-module-build.service.js +83 -0
  477. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  478. package/src/services/module-loading/module-loading-types.js +1 -0
  479. package/src/services/module-loading/page-module-import.service.d.ts +7 -12
  480. package/src/services/module-loading/page-module-import.service.js +232 -206
  481. package/src/services/module-loading/route-module-build-cache-registry.d.ts +2 -0
  482. package/src/services/module-loading/route-module-build-cache-registry.js +59 -33
  483. package/src/services/module-loading/route-module-build-cache.js +3 -38
  484. package/src/services/module-loading/route-module-build-cache.store.d.ts +10 -0
  485. package/src/services/module-loading/route-module-build-cache.store.js +213 -196
  486. package/src/services/module-loading/route-module-build-manifest.d.ts +10 -14
  487. package/src/services/module-loading/route-module-build-manifest.js +54 -118
  488. package/src/services/module-loading/route-module-dependency-hasher.d.ts +2 -2
  489. package/src/services/module-loading/route-module-dependency-hasher.js +136 -109
  490. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
  491. package/src/services/module-loading/server-module-transpiler.service.js +65 -62
  492. package/src/services/module-loading/source-module-support.js +15 -7
  493. package/src/services/runtime-state/dev-graph.service.js +165 -157
  494. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  495. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  496. package/src/services/validation/schema-validation-service.d.ts +1 -4
  497. package/src/services/validation/schema-validation-service.js +156 -95
  498. package/src/services/validation/standard-schema.types.d.ts +9 -62
  499. package/src/services/validation/standard-schema.types.js +1 -0
  500. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  501. package/src/services/validation/validate-standard-schema.js +14 -0
  502. package/src/static-site-generator/README.md +10 -2
  503. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
  504. package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
  505. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  506. package/src/static-site-generator/sitemap-routes.js +36 -0
  507. package/src/static-site-generator/sitemap.d.ts +15 -0
  508. package/src/static-site-generator/sitemap.js +42 -0
  509. package/src/static-site-generator/static-build-invalidation.d.ts +2 -2
  510. package/src/static-site-generator/static-build-invalidation.js +33 -74
  511. package/src/static-site-generator/static-export-context.d.ts +9 -1
  512. package/src/static-site-generator/static-export-context.js +1 -0
  513. package/src/static-site-generator/static-site-generator.d.ts +27 -6
  514. package/src/static-site-generator/static-site-generator.js +528 -389
  515. package/src/types/internal-types.d.ts +55 -17
  516. package/src/types/internal-types.js +1 -0
  517. package/src/types/public-types.d.ts +236 -95
  518. package/src/types/public-types.js +1 -0
  519. package/src/utils/deep-merge.js +39 -26
  520. package/src/utils/ecopages-route-info.d.ts +26 -0
  521. package/src/utils/ecopages-route-info.js +30 -0
  522. package/src/utils/hash.js +3 -6
  523. package/src/utils/html-escaping.d.ts +7 -0
  524. package/src/utils/html-escaping.js +22 -5
  525. package/src/utils/invariant.js +11 -10
  526. package/src/utils/locals-utils.js +32 -22
  527. package/src/utils/parse-cli-args.d.ts +1 -0
  528. package/src/utils/parse-cli-args.js +73 -62
  529. package/src/utils/path-pattern.d.ts +23 -0
  530. package/src/utils/path-pattern.js +42 -0
  531. package/src/utils/path-utils.module.js +8 -11
  532. package/src/utils/resolve-entry-file.js +70 -38
  533. package/src/utils/resolve-work-dir.js +23 -27
  534. package/src/utils/runtime.js +24 -33
  535. package/src/utils/server-utils.module.d.ts +3 -2
  536. package/src/utils/server-utils.module.js +60 -53
  537. package/src/utils/static-file-extensions.d.ts +12 -0
  538. package/src/utils/static-file-extensions.js +54 -0
  539. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  540. package/src/watchers/project-watcher-ignore.js +17 -0
  541. package/src/watchers/project-watcher.d.ts +21 -6
  542. package/src/watchers/project-watcher.js +402 -277
  543. package/src/watchers/project-watcher.test-helpers.js +45 -50
  544. package/src/adapters/shared/api-response.js +0 -96
  545. package/src/adapters/shared/application-adapter.js +0 -90
  546. package/src/adapters/shared/bun-user-websocket-lifecycle.js +0 -102
  547. package/src/adapters/shared/copy-runtime-public-dir.js +0 -24
  548. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  549. package/src/adapters/shared/define-api-handler.js +0 -15
  550. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  551. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  552. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  553. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  554. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  555. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  556. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  557. package/src/adapters/shared/hmr-html-response.js +0 -33
  558. package/src/adapters/shared/node-http-websocket-upgrades.js +0 -125
  559. package/src/adapters/shared/render-context.js +0 -93
  560. package/src/adapters/shared/runtime-app-bootstrap.js +0 -41
  561. package/src/adapters/shared/runtime-host.js +0 -0
  562. package/src/adapters/shared/server-adapter.js +0 -436
  563. package/src/adapters/shared/server-route-handler.js +0 -111
  564. package/src/adapters/shared/server-static-builder.js +0 -202
  565. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -61
  566. package/src/adapters/shared/shared-hmr-manager.js +0 -273
  567. package/src/adapters/shared/static-preview-host.js +0 -0
  568. package/src/adapters/shared/websocket-lifecycle.d.ts +0 -3
  569. package/src/adapters/shared/websocket-lifecycle.js +0 -19
  570. package/src/build/browser-runtime-manifest.js +0 -61
  571. package/src/build/browser-runtime-plugin-helpers.js +0 -14
  572. package/src/build/browser-runtime-plugin.js +0 -173
  573. package/src/build/build-input-fingerprint.js +0 -31
  574. package/src/build/build-manifest.d.ts +0 -33
  575. package/src/build/build-manifest.js +0 -49
  576. package/src/build/build-types.js +0 -0
  577. package/src/build/jsx-ownership-plugins.d.ts +0 -10
  578. package/src/build/jsx-ownership-plugins.js +0 -17
  579. package/src/build/pages-unified-graph-build.js +0 -208
  580. package/src/build/parallel-build-executor.js +0 -52
  581. package/src/build/rolldown-adapter-helpers.js +0 -310
  582. package/src/build/rolldown-build-adapter.js +0 -67
  583. package/src/build/rolldown-build-invocation-metrics.js +0 -43
  584. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  585. package/src/build/rolldown-dev-build-adapter.js +0 -182
  586. package/src/build/rolldown-plugin-bridge.js +0 -211
  587. package/src/build/rolldown-source-transform-pass.js +0 -58
  588. package/src/build/runtime-build-executor.d.ts +0 -15
  589. package/src/build/runtime-build-executor.js +0 -43
  590. package/src/build/runtime-build-output-normalizer.js +0 -203
  591. package/src/build/serialized-build-executor.js +0 -63
  592. package/src/build/server-entry-build-cache.js +0 -169
  593. package/src/build/server-side-css-shim-plugin.js +0 -35
  594. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  595. package/src/hmr/hmr.test.e2e.js +0 -54
  596. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  597. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  598. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  599. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  600. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  601. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  602. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  603. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  604. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
  605. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  606. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  607. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  608. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  609. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  610. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  611. package/src/route-renderer/orchestration/render-output.utils.js +0 -175
  612. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
  613. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  614. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  615. package/src/utils/html.d.ts +0 -1
  616. package/src/utils/html.js +0 -4
  617. /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
  618. /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
  619. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  620. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  621. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  622. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  623. /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
  624. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -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,136 @@
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 } : undefined;
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
+ if (!integration) {
122
+ return { code };
123
+ }
124
+ return {
125
+ code: prependJsxImportSourceIfMissing(attributeComponentIdentity(code, id, integration.name), integration.jsxImportSource),
126
+ };
127
+ },
128
+ };
129
+ }
130
+ export function createEcoComponentMetaVitePlugin(options) {
131
+ return createVitePluginFromSourceTransform(createEcoComponentMetaTransform(options));
146
132
  }
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;
133
+ export function createEcoComponentMetaPlugin(options) {
134
+ return createEcoBuildPluginFromSourceTransform(createEcoComponentMetaTransform(options));
167
135
  }
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
- };
136
+ 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
  */
@@ -1,41 +1,53 @@
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
- }
1
+ import { readFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { createJsxImportSourcePragma, filterJsxSourceExtensions } from './jsx-import-source.utils.js';
4
+ /**
5
+ * Build plugin that prepends a `@jsxImportSource` pragma to foreign integration
6
+ * files bundled into a host integration's client graph.
7
+ *
8
+ * When a host integration (e.g. React) bundles a component file that belongs to
9
+ * another JSX integration (e.g. `.kita.tsx`), that file inherits the project
10
+ * `tsconfig` JSX runtime which produces the wrong output (HTML strings instead
11
+ * of framework elements). This plugin rewrites the source to explicitly target
12
+ * the host's JSX factory so the bundler compiles every JSX expression into the
13
+ * correct element creation calls.
14
+ *
15
+ * The plugin is intentionally framework-agnostic: any integration that does
16
+ * client-side bundling can use it by passing its own `jsxImportSource` and the
17
+ * set of foreign extensions collected from the app config.
18
+ *
19
+ * When no JSX-bearing foreign extensions are present, the returned plugin is a
20
+ * no-op so integrations can register it unconditionally.
21
+ */
22
+ export function createForeignJsxOverridePlugin(options) {
23
+ const extensions = filterJsxSourceExtensions(options.foreignExtensions);
24
+ const excludedExtensions = filterJsxSourceExtensions(options.excludeExtensions ?? []);
25
+ if (extensions.length === 0) {
30
26
  return {
31
- contents: pragma + source,
32
- loader,
33
- resolveDir: path.dirname(args.path)
27
+ name: options.name ?? 'foreign-jsx-override',
28
+ setup() { },
34
29
  };
35
- });
36
30
  }
37
- };
31
+ const pragma = createJsxImportSourcePragma(options.hostJsxImportSource);
32
+ const filter = new RegExp(`(${extensions.map((e) => e.replace('.', '\\.')).join('|')})$`);
33
+ return {
34
+ name: options.name ?? 'foreign-jsx-override',
35
+ setup(build) {
36
+ build.onLoad({ filter }, (args) => {
37
+ if (excludedExtensions.some((extension) => args.path.endsWith(extension))) {
38
+ return undefined;
39
+ }
40
+ const source = readFileSync(args.path, 'utf-8');
41
+ const loader = args.path.endsWith('.jsx') ? 'jsx' : 'tsx';
42
+ if (source.includes('@jsxImportSource')) {
43
+ return undefined;
44
+ }
45
+ return {
46
+ contents: pragma + source,
47
+ loader,
48
+ resolveDir: path.dirname(args.path),
49
+ };
50
+ });
51
+ },
52
+ };
38
53
  }
39
- export {
40
- createForeignJsxOverridePlugin
41
- };
@@ -1,5 +1,5 @@
1
- import type { EcoBuildPlugin } from '../build/build-types.js';
2
- import { type BrowserRuntimeManifest } from '../build/browser-runtime-manifest.js';
1
+ import type { EcoBuildPlugin } from '../build/contracts/build-types.js';
2
+ import { type BrowserRuntimeManifest } from '../build/browser/browser-runtime-manifest.js';
3
3
  import type { EcoPagesAppConfig, IHmrManager } from '../types/internal-types.js';
4
4
  import type { HmrStrategy } from '../hmr/hmr-strategy.js';
5
5
  import type { EcoPagesElement } from '../types/public-types.js';
@@ -9,7 +9,7 @@ import type { AssetDefinition, ProcessedAsset } from '../services/assets/asset-p
9
9
  import type { StaticExportContext } from '../static-site-generator/static-export-context.js';
10
10
  import type { RuntimeCapabilityDeclaration } from './runtime-capability.js';
11
11
  export type { RuntimeCapabilityDeclaration, RuntimeCapabilityTag } from './runtime-capability.js';
12
- export type { EcoBuildLoader, EcoBuildOnLoadArgs, EcoBuildOnLoadResult, EcoBuildOnResolveArgs, EcoBuildOnResolveResult, EcoBuildPlugin, EcoBuildPluginBuilder, } from '../build/build-types.js';
12
+ export type { EcoBuildLoader, EcoBuildOnLoadArgs, EcoBuildOnLoadResult, EcoBuildOnResolveArgs, EcoBuildOnResolveResult, EcoBuildPlugin, EcoBuildPluginBuilder, } from '../build/contracts/build-types.js';
13
13
  export type { PageBrowserGraphContribution, PageBrowserGraphContributionContext } from '../types/public-types.js';
14
14
  export type { StaticExportContext } from '../static-site-generator/static-export-context.js';
15
15
  export type { HtmlDocumentContribution, HtmlDocumentContributionContext, } from '../route-renderer/orchestration/integration-renderer.js';
@@ -64,13 +64,14 @@ export interface IntegrationPluginConfig {
64
64
  */
65
65
  jsxImportSource?: string;
66
66
  }
67
- type RendererClass<C> = new (options: {
67
+ type IntegrationRendererConstructorOptions = {
68
68
  appConfig: EcoPagesAppConfig;
69
69
  assetProcessingService: AssetProcessingService;
70
70
  resolvedIntegrationDependencies: ProcessedAsset[];
71
71
  rendererModules?: unknown;
72
72
  runtimeOrigin: string;
73
- }) => IntegrationRenderer<C>;
73
+ };
74
+ type RendererClass<C> = new (options: IntegrationRendererConstructorOptions) => IntegrationRenderer<C>;
74
75
  /**
75
76
  * Base class for framework integrations.
76
77
  *
@@ -82,8 +83,11 @@ type RendererClass<C> = new (options: {
82
83
  *
83
84
  * Core owns lifecycle ordering. Integrations declare contributions through the
84
85
  * hooks on this class, while `ConfigBuilder.build()` and app startup decide when
85
- * those hooks run. For page-browser and document shaping, integrations should
86
- * prefer the contribution contracts re-exported from this module:
86
+ * those hooks run. Build plugins map to {@link AppBuildManifest} buckets:
87
+ * `plugins` `runtimePlugins`, `browserBuildPlugins` `browserBundlePlugins`,
88
+ * `browserRuntimeManifest` → client import rewrite map. For page-browser and
89
+ * document shaping, integrations should prefer the contribution contracts
90
+ * re-exported from this module:
87
91
  * `PageBrowserGraphContribution` / `PageBrowserGraphContributionContext` and
88
92
  * `HtmlDocumentContribution` / `HtmlDocumentContributionContext`.
89
93
  */
@@ -100,6 +104,14 @@ export declare abstract class IntegrationPlugin<C = EcoPagesElement> {
100
104
  protected assetProcessingService?: AssetProcessingService;
101
105
  protected hmrManager?: IHmrManager;
102
106
  runtimeOrigin: string;
107
+ /**
108
+ * Returns build plugins shared by server-oriented and browser-oriented builds.
109
+ *
110
+ * @remarks
111
+ * Collected into {@link AppBuildManifest.runtimePlugins} during config finalization.
112
+ * MDX loaders, virtual-module resolvers, and other transforms that must run during
113
+ * route-module transpile belong here—not in {@link browserBuildPlugins}.
114
+ */
103
115
  get plugins(): EcoBuildPlugin[];
104
116
  /**
105
117
  * Returns build plugins that should only apply to browser-oriented bundles.
@@ -175,13 +187,7 @@ export declare abstract class IntegrationPlugin<C = EcoPagesElement> {
175
187
  */
176
188
  protected createRendererOptions(options?: {
177
189
  rendererModules?: unknown;
178
- }): {
179
- appConfig: EcoPagesAppConfig;
180
- assetProcessingService: AssetProcessingService;
181
- resolvedIntegrationDependencies: ProcessedAsset[];
182
- rendererModules: unknown;
183
- runtimeOrigin: string;
184
- };
190
+ }): IntegrationRendererConstructorOptions;
185
191
  /**
186
192
  * Attaches runtime-only services after a renderer instance has been created.
187
193
  */
@@ -193,11 +199,18 @@ export declare abstract class IntegrationPlugin<C = EcoPagesElement> {
193
199
  * Renderers are cheap runtime objects. They receive the finalized app config,
194
200
  * a fresh asset-processing service, integration-global processed assets, and
195
201
  * any renderer module context supplied by the active runtime.
196
- renderer.name ||= this.name;
197
202
  */
198
203
  initializeRenderer(options?: {
199
204
  rendererModules?: unknown;
200
205
  }): IntegrationRenderer<C>;
206
+ /**
207
+ * Shapes one dependency batch before core asset processing runs.
208
+ *
209
+ * @remarks
210
+ * Integrations use this to assign grouped-build metadata or other batch-level
211
+ * policy without teaching core about integration-specific asset graphs.
212
+ */
213
+ prepareAssetDependencies?(dependencies: AssetDefinition[]): AssetDefinition[];
201
214
  /**
202
215
  * Prepares build-facing contributions before the app build manifest is sealed.
203
216
  *