@ecopages/core 0.2.0-beta.3 → 0.2.0-beta.31

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 (433) hide show
  1. package/README.md +38 -9
  2. package/package.json +241 -30
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +123 -6
  5. package/src/adapters/abstract/application-adapter.js +151 -1
  6. package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
  7. package/src/adapters/abstract/segment-path-matcher.js +149 -0
  8. package/src/adapters/abstract/server-adapter.d.ts +16 -2
  9. package/src/adapters/abstract/ws-pattern-matcher.d.ts +12 -0
  10. package/src/adapters/abstract/ws-pattern-matcher.js +30 -0
  11. package/src/adapters/bun/bun-user-websocket-lifecycle.d.ts +22 -0
  12. package/src/adapters/bun/bun-user-websocket-lifecycle.js +96 -0
  13. package/src/adapters/bun/client-bridge.d.ts +1 -0
  14. package/src/adapters/bun/client-bridge.js +3 -0
  15. package/src/adapters/bun/create-app.d.ts +9 -6
  16. package/src/adapters/bun/create-app.js +76 -45
  17. package/src/adapters/bun/hmr-manager.d.ts +1 -1
  18. package/src/adapters/bun/hmr-manager.js +1 -1
  19. package/src/adapters/bun/index.d.ts +1 -1
  20. package/src/adapters/bun/index.js +25 -2
  21. package/src/adapters/bun/runtime-host.d.ts +1 -1
  22. package/src/adapters/bun/runtime-host.js +1 -1
  23. package/src/adapters/bun/server-adapter.d.ts +92 -41
  24. package/src/adapters/bun/server-adapter.js +256 -117
  25. package/src/adapters/bun/static-preview-host.d.ts +1 -1
  26. package/src/adapters/bun/static-preview-host.js +25 -20
  27. package/src/adapters/create-app.d.ts +13 -11
  28. package/src/adapters/create-app.js +2 -51
  29. package/src/adapters/index.d.ts +2 -2
  30. package/src/adapters/index.js +26 -4
  31. package/src/adapters/node/create-app.d.ts +8 -3
  32. package/src/adapters/node/create-app.js +61 -13
  33. package/src/adapters/node/node-client-bridge.d.ts +1 -0
  34. package/src/adapters/node/node-client-bridge.js +3 -0
  35. package/src/adapters/node/node-hmr-manager.d.ts +1 -1
  36. package/src/adapters/node/node-hmr-manager.js +1 -1
  37. package/src/adapters/node/runtime-host.d.ts +1 -1
  38. package/src/adapters/node/runtime-host.js +1 -1
  39. package/src/adapters/node/server-adapter-dependencies.js +4 -0
  40. package/src/adapters/node/server-adapter.d.ts +64 -23
  41. package/src/adapters/node/server-adapter.js +169 -142
  42. package/src/adapters/node/static-content-server.d.ts +1 -0
  43. package/src/adapters/node/static-content-server.js +10 -2
  44. package/src/adapters/node/static-preview-host.d.ts +1 -1
  45. package/src/adapters/node/static-preview-host.js +27 -12
  46. package/src/adapters/shared/{hmr-entrypoint-registrar.d.ts → hmr/hmr-entrypoint-registrar.d.ts} +31 -30
  47. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +106 -0
  48. package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
  49. package/src/adapters/shared/{hmr-html-response.js → hmr/hmr-html-response.js} +4 -1
  50. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +101 -0
  51. package/src/adapters/shared/hmr/shared-hmr-manager.js +432 -0
  52. package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
  53. package/src/adapters/shared/http/api-request-pipeline.js +129 -0
  54. package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
  55. package/src/adapters/shared/{api-response.js → http/api-response.js} +6 -23
  56. package/src/adapters/shared/http/create-body-response.d.ts +12 -0
  57. package/src/adapters/shared/http/create-body-response.js +23 -0
  58. package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
  59. package/src/adapters/shared/http/define-api-handler.js +63 -0
  60. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  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/{explicit-static-route-matcher.js → http/explicit-static-route-matcher.js} +3 -38
  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/{file-route-middleware-pipeline.js → http/file-route-middleware-pipeline.js} +10 -22
  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/{fs-server-response-factory.js → http/fs-server-response-factory.js} +22 -2
  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/{fs-server-response-matcher.js → http/fs-server-response-matcher.js} +109 -27
  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/{application-adapter.js → runtime/application-adapter.js} +1 -1
  73. package/src/adapters/shared/runtime/copy-runtime-public-dir.d.ts +6 -0
  74. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +24 -0
  75. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  76. package/src/adapters/shared/runtime/port-manager.js +196 -0
  77. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  78. package/src/adapters/shared/{render-context.js → runtime/render-context.js} +8 -17
  79. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -3
  80. package/src/adapters/shared/{runtime-app-bootstrap.js → runtime/runtime-app-bootstrap.js} +4 -7
  81. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +46 -0
  82. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +57 -0
  83. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +23 -49
  84. package/src/adapters/shared/runtime/server-adapter.js +226 -0
  85. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  86. package/src/adapters/shared/{server-route-handler.js → runtime/server-route-handler.js} +5 -43
  87. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +27 -35
  88. package/src/adapters/shared/runtime/server-static-builder.js +191 -0
  89. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  90. package/src/adapters/shared/ws/node-http-websocket-upgrades.d.ts +21 -0
  91. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +100 -0
  92. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  93. package/src/adapters/shared/ws/websocket-lifecycle.js +55 -0
  94. package/src/build/README.md +140 -31
  95. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  96. package/src/build/app-build-manifest-runtime.js +124 -0
  97. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +1 -1
  98. package/src/build/{browser-runtime-plugin.js → browser/browser-runtime-plugin.js} +1 -1
  99. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  100. package/src/build/browser/jsx-ownership-plugins.js +41 -0
  101. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  102. package/src/build/browser/lit-static-render-worker-context.js +6 -0
  103. package/src/build/build-adapter.d.ts +29 -334
  104. package/src/build/build-adapter.js +32 -133
  105. package/src/build/cache/build-input-fingerprint.d.ts +28 -0
  106. package/src/build/cache/build-input-fingerprint.js +31 -0
  107. package/src/build/cache/cache-constants.d.ts +4 -0
  108. package/src/build/cache/cache-constants.js +6 -0
  109. package/src/build/cache/cache-keys.d.ts +22 -0
  110. package/src/build/cache/cache-keys.js +63 -0
  111. package/src/build/cache/dev-browser-script-cache.d.ts +34 -0
  112. package/src/build/cache/dev-browser-script-cache.js +90 -0
  113. package/src/build/cache/pages-unified-graph-build.d.ts +31 -0
  114. package/src/build/cache/pages-unified-graph-build.js +198 -0
  115. package/src/build/cache/production-build-cache.d.ts +20 -0
  116. package/src/build/cache/production-build-cache.js +63 -0
  117. package/src/build/cache/server-entry-build-cache.d.ts +43 -0
  118. package/src/build/cache/server-entry-build-cache.js +165 -0
  119. package/src/build/contracts/build-contracts.d.ts +96 -0
  120. package/src/build/contracts/build-manifest.d.ts +90 -0
  121. package/src/build/{build-manifest.js → contracts/build-manifest.js} +2 -2
  122. package/src/build/contracts/build-types.js +0 -0
  123. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +23 -9
  124. package/src/build/{rolldown-adapter-helpers.js → rolldown/rolldown-adapter-helpers.js} +99 -13
  125. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  126. package/src/build/{rolldown-build-adapter.js → rolldown/rolldown-build-adapter.js} +3 -3
  127. package/src/build/rolldown/rolldown-build-invocation-metrics.d.ts +12 -0
  128. package/src/build/rolldown/rolldown-build-invocation-metrics.js +43 -0
  129. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
  130. package/src/build/{rolldown-plugin-bridge.js → rolldown/rolldown-plugin-bridge.js} +21 -6
  131. package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
  132. package/src/build/rolldown/rolldown-source-transform-pass.js +61 -0
  133. package/src/build/rolldown/runtime-build-output-normalizer.d.ts +10 -0
  134. package/src/build/rolldown/runtime-build-output-normalizer.js +201 -0
  135. package/src/build/runtime/build-profile-options.d.ts +7 -0
  136. package/src/build/runtime/build-profile-options.js +37 -0
  137. package/src/build/runtime/build-request-identity.d.ts +17 -0
  138. package/src/build/runtime/build-request-identity.js +54 -0
  139. package/src/build/runtime/build-request-policy.d.ts +59 -0
  140. package/src/build/runtime/build-request-policy.js +46 -0
  141. package/src/build/runtime/build-runtime.d.ts +28 -0
  142. package/src/build/runtime/build-runtime.js +65 -0
  143. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  144. package/src/build/runtime/deduping-build-executor.js +34 -0
  145. package/src/build/runtime/parallel-build-executor.d.ts +21 -0
  146. package/src/build/runtime/parallel-build-executor.js +52 -0
  147. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  148. package/src/client/navigation-scripts/classification.d.ts +16 -0
  149. package/src/client/navigation-scripts/classification.js +41 -0
  150. package/src/client/navigation-scripts/index.d.ts +3 -0
  151. package/src/client/navigation-scripts/index.js +23 -0
  152. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +65 -0
  153. package/src/client/navigation-scripts/registry.d.ts +11 -0
  154. package/src/client/navigation-scripts/registry.js +12 -0
  155. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  156. package/src/client/navigation-scripts/rerun-queue.js +73 -0
  157. package/src/client/scroll.d.ts +17 -0
  158. package/src/client/scroll.js +25 -0
  159. package/src/client/scroll.test.browser.js +37 -0
  160. package/src/client/view-transitions.d.ts +16 -0
  161. package/src/client/view-transitions.js +63 -0
  162. package/src/config/config-builder.d.ts +25 -10
  163. package/src/config/config-builder.js +53 -11
  164. package/src/config/constants.d.ts +1 -0
  165. package/src/config/constants.js +2 -1
  166. package/src/dev/client-bridge-registry.d.ts +5 -0
  167. package/src/dev/client-bridge-registry.js +15 -0
  168. package/src/dev/dev-client-ownership.d.ts +7 -0
  169. package/src/dev/dev-client-ownership.js +6 -0
  170. package/src/dev/hmr-manager-registry.d.ts +8 -0
  171. package/src/dev/hmr-manager-registry.js +15 -0
  172. package/src/dev/host-runtime.d.ts +3 -0
  173. package/src/dev/host-runtime.js +7 -0
  174. package/src/dev/runtime-server-started-message.d.ts +2 -0
  175. package/src/dev/runtime-server-started-message.js +6 -0
  176. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  177. package/src/diagnostics/request-build-dedupe.js +33 -0
  178. package/src/diagnostics/startup-trace.d.ts +72 -0
  179. package/src/diagnostics/startup-trace.js +253 -0
  180. package/src/eco/README.md +11 -0
  181. package/src/eco/eco-declared-component.d.ts +14 -0
  182. package/src/eco/eco-declared-component.js +16 -0
  183. package/src/eco/eco.browser.js +5 -6
  184. package/src/eco/eco.js +7 -8
  185. package/src/eco/eco.types.d.ts +14 -3
  186. package/src/eco/eco.utils.d.ts +1 -1
  187. package/src/eco/eco.utils.js +1 -1
  188. package/src/eco/page-layout-normalization.d.ts +21 -0
  189. package/src/eco/page-layout-normalization.js +59 -0
  190. package/src/env.d.ts +2 -0
  191. package/src/errors/index.d.ts +1 -0
  192. package/src/errors/index.js +7 -1
  193. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  194. package/src/errors/undeclared-component-dependency-error.js +17 -0
  195. package/src/hmr/client/hmr-runtime.js +7 -4
  196. package/src/hmr/hmr-entrypoint-output.d.ts +49 -0
  197. package/src/hmr/hmr-entrypoint-output.js +60 -0
  198. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  199. package/src/hmr/hmr-file-change-prep.js +17 -0
  200. package/src/hmr/hmr-strategy.d.ts +15 -0
  201. package/src/hmr/hmr-strategy.js +19 -0
  202. package/src/hmr/strategies/js-hmr-strategy.d.ts +3 -5
  203. package/src/hmr/strategies/js-hmr-strategy.js +72 -19
  204. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  205. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +29 -0
  206. package/src/index.d.ts +2 -1
  207. package/src/index.js +28 -2
  208. package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -6
  209. package/src/integrations/ghtml/ghtml-renderer.js +2 -51
  210. package/src/integrations/ghtml/ghtml.plugin.d.ts +3 -16
  211. package/src/integrations/ghtml/ghtml.plugin.js +7 -14
  212. package/src/plugins/alias-resolver-cache.d.ts +6 -9
  213. package/src/plugins/alias-resolver-plugin.d.ts +3 -3
  214. package/src/plugins/alias-resolver-plugin.js +38 -51
  215. package/src/plugins/define-integration.d.ts +26 -0
  216. package/src/plugins/define-integration.js +19 -0
  217. package/src/plugins/eco-component-meta-plugin.d.ts +1 -1
  218. package/src/plugins/eco-component-meta-plugin.js +5 -8
  219. package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
  220. package/src/plugins/foreign-jsx-override-plugin.js +4 -6
  221. package/src/plugins/integration-plugin.d.ts +43 -14
  222. package/src/plugins/integration-plugin.js +18 -5
  223. package/src/plugins/jsx-import-source.utils.d.ts +8 -0
  224. package/src/plugins/jsx-import-source.utils.js +26 -0
  225. package/src/plugins/processor.d.ts +61 -12
  226. package/src/plugins/processor.js +24 -5
  227. package/src/plugins/source-transform.d.ts +32 -1
  228. package/src/plugins/source-transform.js +23 -1
  229. package/src/plugins/tsconfig-import-resolver.d.ts +18 -0
  230. package/src/plugins/tsconfig-import-resolver.js +159 -0
  231. package/src/route-renderer/GRAPH.md +26 -32
  232. package/src/route-renderer/README.md +38 -31
  233. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  234. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +148 -0
  235. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
  236. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +31 -0
  237. package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
  238. package/src/route-renderer/orchestration/{component-render-context.js → foreign-child/component-render-context.js} +4 -2
  239. package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +17 -7
  240. package/src/route-renderer/orchestration/{render-output.utils.js → foreign-child/foreign-child-output.utils.js} +35 -26
  241. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
  242. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.js → foreign-child/foreign-subtree-execution.service.js} +170 -37
  243. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
  244. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +35 -0
  245. package/src/route-renderer/orchestration/integration-renderer.d.ts +24 -143
  246. package/src/route-renderer/orchestration/integration-renderer.js +163 -402
  247. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
  248. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +177 -0
  249. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
  250. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +143 -0
  251. package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
  252. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +96 -0
  253. package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +7 -2
  254. package/src/route-renderer/orchestration/{ownership-validation.service.js → ownership-graph/ownership-validation.service.js} +30 -3
  255. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
  256. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +32 -0
  257. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.d.ts +9 -0
  258. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +7 -0
  259. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
  260. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +29 -0
  261. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +106 -0
  262. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +436 -0
  263. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +31 -0
  264. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +229 -0
  265. package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
  266. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +31 -0
  267. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +25 -0
  268. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
  269. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +27 -0
  270. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
  271. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +36 -0
  272. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +20 -0
  273. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +24 -0
  274. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +25 -0
  275. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +49 -0
  276. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
  277. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +33 -0
  278. package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +13 -53
  279. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +162 -0
  280. package/src/route-renderer/orchestration/string-markup-renderer.d.ts +14 -0
  281. package/src/route-renderer/orchestration/string-markup-renderer.js +55 -0
  282. package/src/route-renderer/page-loading/component-dependency-collection.js +5 -2
  283. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +6 -0
  284. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +7 -2
  285. package/src/route-renderer/page-loading/module-declaration-aggregation.js +4 -0
  286. package/src/router/client/link-intent.d.ts +11 -21
  287. package/src/router/client/link-intent.js +10 -0
  288. package/src/router/client/link-intent.test.browser.js +12 -1
  289. package/src/router/client/link-navigation-policy.d.ts +45 -0
  290. package/src/router/client/link-navigation-policy.js +101 -0
  291. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  292. package/src/router/client/link-navigation-policy.test.browser.js +92 -0
  293. package/src/router/client/navigation-coordinator.d.ts +1 -1
  294. package/src/router/client/navigation-coordinator.js +12 -2
  295. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  296. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +3 -0
  297. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +6 -1
  298. package/src/services/assets/asset-processing-service/asset-processing.service.js +44 -5
  299. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  300. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -1
  301. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
  302. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  303. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +78 -0
  304. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +4 -2
  305. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +28 -13
  306. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  307. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +7 -0
  308. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  309. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +38 -12
  310. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  311. package/src/services/assets/asset-processing-service/index.js +2 -0
  312. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  313. package/src/services/assets/asset-processing-service/inline-content-script-body.js +17 -0
  314. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  315. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +18 -0
  316. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  317. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +2 -15
  318. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  319. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +73 -68
  320. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  321. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +18 -15
  322. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +17 -3
  323. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  324. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +2 -31
  325. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  326. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +2 -30
  327. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  328. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +43 -0
  329. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  330. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +17 -0
  331. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  332. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +5 -10
  333. package/src/services/assets/browser-bundle.service.d.ts +28 -30
  334. package/src/services/assets/browser-bundle.service.js +28 -19
  335. package/src/services/html/html-transformer.service.d.ts +1 -1
  336. package/src/services/html/html-transformer.service.js +5 -5
  337. package/src/services/invalidation/development-invalidation.service.d.ts +25 -2
  338. package/src/services/invalidation/development-invalidation.service.js +64 -11
  339. package/src/services/module-loading/README.md +49 -0
  340. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  341. package/src/services/module-loading/app-server-module-transpiler.service.js +3 -21
  342. package/src/services/module-loading/page-module-import.service.d.ts +6 -2
  343. package/src/services/module-loading/page-module-import.service.js +110 -47
  344. package/src/services/module-loading/route-module-build-cache-registry.d.ts +24 -0
  345. package/src/services/module-loading/route-module-build-cache-registry.js +37 -0
  346. package/src/services/module-loading/route-module-build-cache.d.ts +4 -0
  347. package/src/services/module-loading/route-module-build-cache.js +38 -0
  348. package/src/services/module-loading/route-module-build-cache.store.d.ts +57 -0
  349. package/src/services/module-loading/route-module-build-cache.store.js +207 -0
  350. package/src/services/module-loading/route-module-build-manifest.d.ts +54 -0
  351. package/src/services/module-loading/route-module-build-manifest.js +85 -0
  352. package/src/services/module-loading/route-module-dependency-hasher.d.ts +81 -0
  353. package/src/services/module-loading/route-module-dependency-hasher.js +122 -0
  354. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -1
  355. package/src/services/module-loading/server-module-transpiler.service.js +1 -1
  356. package/src/services/validation/schema-validation-service.d.ts +1 -4
  357. package/src/services/validation/schema-validation-service.js +12 -13
  358. package/src/services/validation/standard-schema.types.d.ts +9 -62
  359. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  360. package/src/services/validation/validate-standard-schema.js +14 -0
  361. package/src/static-site-generator/README.md +41 -0
  362. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +28 -0
  363. package/src/static-site-generator/production-page-browser-graph-prebuild.js +22 -0
  364. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  365. package/src/static-site-generator/sitemap-routes.js +31 -0
  366. package/src/static-site-generator/sitemap.d.ts +15 -0
  367. package/src/static-site-generator/sitemap.js +33 -0
  368. package/src/static-site-generator/static-build-invalidation.d.ts +10 -0
  369. package/src/static-site-generator/static-build-invalidation.js +59 -0
  370. package/src/static-site-generator/static-export-context.d.ts +30 -0
  371. package/src/static-site-generator/static-export-context.js +0 -0
  372. package/src/static-site-generator/static-site-generator.d.ts +43 -25
  373. package/src/static-site-generator/static-site-generator.js +381 -106
  374. package/src/types/internal-types.d.ts +39 -13
  375. package/src/types/public-types.d.ts +289 -52
  376. package/src/utils/ecopages-route-info.d.ts +26 -0
  377. package/src/utils/ecopages-route-info.js +26 -0
  378. package/src/utils/html-escaping.d.ts +7 -0
  379. package/src/utils/html-escaping.js +5 -1
  380. package/src/utils/parse-cli-args.d.ts +2 -0
  381. package/src/utils/parse-cli-args.js +6 -0
  382. package/src/utils/path-pattern.d.ts +23 -0
  383. package/src/utils/path-pattern.js +27 -0
  384. package/src/utils/server-utils.module.d.ts +3 -2
  385. package/src/utils/server-utils.module.js +5 -6
  386. package/src/utils/static-file-extensions.d.ts +12 -0
  387. package/src/utils/static-file-extensions.js +48 -0
  388. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  389. package/src/watchers/project-watcher-ignore.js +16 -0
  390. package/src/watchers/project-watcher.d.ts +29 -6
  391. package/src/watchers/project-watcher.js +146 -34
  392. package/src/watchers/project-watcher.test-helpers.js +5 -5
  393. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  394. package/src/adapters/shared/define-api-handler.js +0 -15
  395. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  396. package/src/adapters/shared/server-adapter.js +0 -436
  397. package/src/adapters/shared/server-static-builder.js +0 -162
  398. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
  399. package/src/adapters/shared/shared-hmr-manager.js +0 -241
  400. package/src/build/build-manifest.d.ts +0 -33
  401. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  402. package/src/build/rolldown-dev-build-adapter.js +0 -166
  403. package/src/build/runtime-build-executor.d.ts +0 -21
  404. package/src/build/runtime-build-executor.js +0 -19
  405. package/src/build/runtime-build-output-normalizer.d.ts +0 -3
  406. package/src/build/runtime-build-output-normalizer.js +0 -111
  407. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  408. package/src/hmr/hmr.test.e2e.js +0 -43
  409. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  410. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  411. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  412. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  413. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  414. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  415. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
  416. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  417. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  418. /package/src/adapters/shared/{explicit-static-render-preparation.js → http/explicit-static-render-preparation.js} +0 -0
  419. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  420. /package/src/adapters/shared/{runtime-host.js → runtime/runtime-host.js} +0 -0
  421. /package/src/adapters/shared/{static-preview-host.js → runtime/static-preview-host.js} +0 -0
  422. /package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +0 -0
  423. /package/src/build/{browser-runtime-manifest.js → browser/browser-runtime-manifest.js} +0 -0
  424. /package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +0 -0
  425. /package/src/build/{browser-runtime-plugin-helpers.js → browser/browser-runtime-plugin-helpers.js} +0 -0
  426. /package/src/build/{build-types.js → contracts/build-contracts.js} +0 -0
  427. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  428. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
  429. /package/src/build/{server-side-css-shim-plugin.js → rolldown/server-side-css-shim-plugin.js} +0 -0
  430. /package/src/build/{serialized-build-executor.js → runtime/serialized-build-executor.js} +0 -0
  431. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → client/navigation-scripts/navigation-scripts.test.browser.d.ts} +0 -0
  432. /package/src/{hmr/hmr.test.e2e.d.ts → client/scroll.test.browser.d.ts} +0 -0
  433. /package/src/route-renderer/orchestration/{processed-asset-dedupe.js → page-browser-graph/processed-asset-dedupe.js} +0 -0
@@ -0,0 +1,43 @@
1
+ const invocationCounts = /* @__PURE__ */ new Map();
2
+ let pageModuleBuildInvocations = 0;
3
+ function isRolldownBuildMetricsEnabled() {
4
+ return process.env.ECOPAGES_ROLLDOWN_BUILD_METRICS === "1" || process.env.ECOPAGES_LOGGER_DEBUG === "true";
5
+ }
6
+ function recordRolldownBuildInvocation(adapter = "rolldown") {
7
+ if (!isRolldownBuildMetricsEnabled()) {
8
+ return;
9
+ }
10
+ invocationCounts.set(adapter, (invocationCounts.get(adapter) ?? 0) + 1);
11
+ }
12
+ function getRolldownBuildInvocationCounts() {
13
+ return Object.fromEntries(invocationCounts);
14
+ }
15
+ function resetRolldownBuildInvocationCounts() {
16
+ invocationCounts.clear();
17
+ pageModuleBuildInvocations = 0;
18
+ }
19
+ function recordPageModuleBuildInvocation() {
20
+ if (!isRolldownBuildMetricsEnabled()) {
21
+ return;
22
+ }
23
+ pageModuleBuildInvocations += 1;
24
+ }
25
+ function getPageModuleRolldownBuildInvocations() {
26
+ return pageModuleBuildInvocations;
27
+ }
28
+ function getTotalRolldownBuildInvocations() {
29
+ let total = 0;
30
+ for (const count of invocationCounts.values()) {
31
+ total += count;
32
+ }
33
+ return total;
34
+ }
35
+ export {
36
+ getPageModuleRolldownBuildInvocations,
37
+ getRolldownBuildInvocationCounts,
38
+ getTotalRolldownBuildInvocations,
39
+ isRolldownBuildMetricsEnabled,
40
+ recordPageModuleBuildInvocation,
41
+ recordRolldownBuildInvocation,
42
+ resetRolldownBuildInvocationCounts
43
+ };
@@ -40,7 +40,8 @@
40
40
  * on every source file.
41
41
  */
42
42
  import type { Plugin } from 'rolldown';
43
- import type { EcoBuildPlugin } from './build-types.js';
43
+ import type { EcoSourceTransform } from '../../plugins/source-transform.js';
44
+ import type { EcoBuildPlugin } from '../contracts/build-types.js';
44
45
  /**
45
46
  * Creates a Rolldown `Plugin` array that drives the supplied
46
47
  * `EcoBuildPlugin` instances.
@@ -55,5 +56,18 @@ import type { EcoBuildPlugin } from './build-types.js';
55
56
  * Plugin ordering is preserved: registrations from earlier eco plugins
56
57
  * are checked before registrations from later ones, matching the
57
58
  * original per-plugin priority semantics.
59
+ *
60
+ * @remarks
61
+ * Rolldown re-fires `buildStart` on each build, so registrations and the
62
+ * virtual-module counter are cleared before every `setup` pass — otherwise
63
+ * handlers accumulate when bridge plugins are reused.
64
+ *
65
+ * @param plugins - `EcoBuildPlugin` instances registered for this build.
66
+ * @param contextRoot - Project root used to resolve relative load paths.
67
+ * @param sourceTransforms - Optional app-owned transforms applied after a matching
68
+ * `onLoad` handler returns module contents. Browser builds pass
69
+ * {@link getAppSourceTransforms | app source transforms} here so metadata injection
70
+ * still runs on output rewritten by boundary/runtime plugins. Virtual modules,
71
+ * CSS, and asset loads are skipped.
58
72
  */
59
- export declare function createRolldownPluginBridge(plugins: EcoBuildPlugin[], contextRoot: string): Plugin[];
73
+ export declare function createRolldownPluginBridge(plugins: EcoBuildPlugin[], contextRoot: string, sourceTransforms?: readonly EcoSourceTransform[]): Plugin[];
@@ -1,5 +1,6 @@
1
1
  import path from "node:path";
2
- import { escapeRegExp } from "./browser-runtime-plugin-helpers.js";
2
+ import { finalizeLoadResultWithSourceTransforms } from "./rolldown-source-transform-pass.js";
3
+ import { escapeRegExp } from "../browser/browser-runtime-plugin-helpers.js";
3
4
  const NAMESPACE_SEPARATOR = ":";
4
5
  function joinNamespace(namespace, value) {
5
6
  return namespace ? `${namespace}${NAMESPACE_SEPARATOR}${value}` : value;
@@ -124,7 +125,7 @@ function convertPluginOnResolveResult(result, importer, contextRoot) {
124
125
  }
125
126
  return partial;
126
127
  }
127
- function createRolldownPluginBridge(plugins, contextRoot) {
128
+ function createRolldownPluginBridge(plugins, contextRoot, sourceTransforms = []) {
128
129
  if (plugins.length === 0) {
129
130
  return [];
130
131
  }
@@ -152,22 +153,36 @@ function createRolldownPluginBridge(plugins, contextRoot) {
152
153
  return void 0;
153
154
  };
154
155
  const loadHandler = async (id) => {
156
+ let loadResult;
155
157
  for (const { filter, callback } of loadRegistrations) {
156
158
  if (!filter.test(id)) {
157
159
  continue;
158
160
  }
159
- const { namespace, path: sourcePath } = splitNamespace(id);
160
- const result = await callback({ path: sourcePath, namespace });
161
+ const { namespace: namespace2, path: sourcePath2 } = splitNamespace(id);
162
+ const result = await callback({ path: sourcePath2, namespace: namespace2 });
161
163
  const converted = convertPluginOnLoadResult({ id }, result);
162
164
  if (converted !== void 0) {
163
- return converted;
165
+ loadResult = converted;
166
+ break;
164
167
  }
165
168
  }
166
- return void 0;
169
+ const { namespace, path: sourcePath } = splitNamespace(id);
170
+ return finalizeLoadResultWithSourceTransforms({
171
+ id,
172
+ namespace,
173
+ sourcePath,
174
+ loadResult,
175
+ sourceTransforms,
176
+ contextRoot,
177
+ inferModuleTypeFromPath: (filePath) => inferRolldownModuleTypeFromPath(filePath)
178
+ });
167
179
  };
168
180
  const plugin = {
169
181
  name: "ecopages-plugin-bridge",
170
182
  buildStart: async () => {
183
+ resolveRegistrations.length = 0;
184
+ loadRegistrations.length = 0;
185
+ moduleCounter.value = 0;
171
186
  for (const ecoPlugin of plugins) {
172
187
  const bridge = {
173
188
  onResolve: (options, callback) => {
@@ -0,0 +1,15 @@
1
+ import type { LoadResult, SourceDescription } from 'rolldown';
2
+ import { type EcoSourceTransform } from '../../plugins/source-transform.js';
3
+ /**
4
+ * Runs app-owned source transforms after first-wins `onLoad` plugins produce
5
+ * module contents for one Rolldown load request.
6
+ */
7
+ export declare function finalizeLoadResultWithSourceTransforms(options: {
8
+ id: string;
9
+ namespace: string | undefined;
10
+ sourcePath: string;
11
+ loadResult: LoadResult | undefined;
12
+ sourceTransforms: readonly EcoSourceTransform[];
13
+ contextRoot: string;
14
+ inferModuleTypeFromPath: (filePath: string) => SourceDescription['moduleType'];
15
+ }): Promise<LoadResult | undefined>;
@@ -0,0 +1,61 @@
1
+ import path from "node:path";
2
+ import { fileSystem } from "@ecopages/file-system";
3
+ import {
4
+ applySourceTransforms,
5
+ normalizeTransformId
6
+ } from "../../plugins/source-transform.js";
7
+ const TRANSFORMABLE_SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx", ".mdx"]);
8
+ function shouldApplySourceTransforms(namespace, sourcePath) {
9
+ if (namespace !== void 0) {
10
+ return false;
11
+ }
12
+ const normalizedPath = normalizeTransformId(sourcePath);
13
+ return TRANSFORMABLE_SOURCE_EXTENSIONS.has(path.extname(normalizedPath).toLowerCase());
14
+ }
15
+ function shouldTransformLoadedModule(moduleType) {
16
+ return moduleType !== "css" && moduleType !== "asset";
17
+ }
18
+ function applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, code) {
19
+ if (sourceTransforms.length === 0) {
20
+ return code;
21
+ }
22
+ return applySourceTransforms(sourceTransforms, code, sourcePath);
23
+ }
24
+ async function finalizeLoadResultWithSourceTransforms(options) {
25
+ const { id, namespace, sourcePath, loadResult, sourceTransforms, contextRoot, inferModuleTypeFromPath } = options;
26
+ if (!shouldApplySourceTransforms(namespace, sourcePath)) {
27
+ return loadResult;
28
+ }
29
+ if (typeof loadResult === "object" && loadResult !== null && "code" in loadResult && typeof loadResult.code === "string") {
30
+ if (!shouldTransformLoadedModule(loadResult.moduleType)) {
31
+ return loadResult;
32
+ }
33
+ const transformedCode2 = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, loadResult.code);
34
+ if (transformedCode2 === loadResult.code) {
35
+ return loadResult;
36
+ }
37
+ return {
38
+ code: transformedCode2,
39
+ moduleType: loadResult.moduleType
40
+ };
41
+ }
42
+ if (loadResult !== void 0 || sourceTransforms.length === 0) {
43
+ return loadResult;
44
+ }
45
+ const normalizedPath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(contextRoot, sourcePath);
46
+ if (!fileSystem.exists(normalizedPath)) {
47
+ return loadResult;
48
+ }
49
+ const originalCode = fileSystem.readFileSync(normalizedPath);
50
+ const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, originalCode);
51
+ if (transformedCode === originalCode) {
52
+ return loadResult;
53
+ }
54
+ return {
55
+ code: transformedCode,
56
+ moduleType: inferModuleTypeFromPath(normalizedPath)
57
+ };
58
+ }
59
+ export {
60
+ finalizeLoadResultWithSourceTransforms
61
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Returns true if the given specifier is a workspace package.
3
+ *
4
+ * Workspace packages are declared with the `workspace:` protocol and are
5
+ * typically source-only, requiring bundling rather than externalization.
6
+ */
7
+ export declare function isWorkspacePackageImport(specifier: string, rootDir: string): boolean;
8
+ export declare function isDeclaredAppPackageImport(specifier: string, rootDir: string): boolean;
9
+ export declare function normalizeNodeRuntimeBuildOutputFile(filePath: string, rootDir: string): void;
10
+ export declare function normalizeNodeRuntimeBuildOutputs(outputPaths: string[], rootDir: string): void;
@@ -0,0 +1,201 @@
1
+ import { createRequire } from "node:module";
2
+ import { readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ import { isBarePackageImportSpecifier } from "../../plugins/tsconfig-import-resolver.js";
6
+ const corePackageRequire = createRequire(new URL("../../../package.json", import.meta.url));
7
+ const appDeclaredPackageCache = /* @__PURE__ */ new Map();
8
+ const appWorkspacePackageCache = /* @__PURE__ */ new Map();
9
+ const CORE_RUNTIME_BARE_SPECIFIER_PACKAGES = /* @__PURE__ */ new Set(["ws"]);
10
+ function tryResolveRuntimeImport(specifier, resolver) {
11
+ try {
12
+ return resolver.resolve(specifier);
13
+ } catch {
14
+ return void 0;
15
+ }
16
+ }
17
+ function extractPackageNameFromFileUrl(specifier) {
18
+ if (!specifier.startsWith("file://")) {
19
+ return void 0;
20
+ }
21
+ const lastNodeModulesIndex = specifier.lastIndexOf("/node_modules/");
22
+ if (lastNodeModulesIndex === -1) {
23
+ return void 0;
24
+ }
25
+ const afterNodeModules = specifier.slice(lastNodeModulesIndex + "/node_modules/".length);
26
+ const parts = afterNodeModules.split("/");
27
+ if (parts.length === 0) {
28
+ return void 0;
29
+ }
30
+ if (parts[0]?.startsWith("@") && parts.length > 1) {
31
+ return `${parts[0]}/${parts[1]}`;
32
+ }
33
+ return parts[0];
34
+ }
35
+ function getPackageNameFromSpecifier(specifier) {
36
+ if (specifier.startsWith("@")) {
37
+ return specifier.split("/").slice(0, 2).join("/");
38
+ }
39
+ return specifier.split("/")[0] ?? specifier;
40
+ }
41
+ function getDeclaredAppPackages(rootDir) {
42
+ const cacheKey = path.resolve(rootDir);
43
+ const cached = appDeclaredPackageCache.get(cacheKey);
44
+ if (cached) {
45
+ return cached;
46
+ }
47
+ const packageJsonPath = path.resolve(rootDir, "package.json");
48
+ const declaredPackages = /* @__PURE__ */ new Set();
49
+ try {
50
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
51
+ for (const field of ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"]) {
52
+ const entries = packageJson[field];
53
+ if (!entries || typeof entries !== "object") {
54
+ continue;
55
+ }
56
+ for (const packageName of Object.keys(entries)) {
57
+ declaredPackages.add(packageName);
58
+ }
59
+ }
60
+ } catch {
61
+ appDeclaredPackageCache.set(cacheKey, declaredPackages);
62
+ return declaredPackages;
63
+ }
64
+ appDeclaredPackageCache.set(cacheKey, declaredPackages);
65
+ return declaredPackages;
66
+ }
67
+ function getWorkspacePackages(rootDir) {
68
+ const cacheKey = path.resolve(rootDir);
69
+ const cached = appWorkspacePackageCache.get(cacheKey);
70
+ if (cached) {
71
+ return cached;
72
+ }
73
+ const packageJsonPath = path.resolve(rootDir, "package.json");
74
+ const workspacePackages = /* @__PURE__ */ new Set();
75
+ try {
76
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
77
+ for (const field of ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"]) {
78
+ const entries = packageJson[field];
79
+ if (!entries || typeof entries !== "object") {
80
+ continue;
81
+ }
82
+ for (const [packageName, version] of Object.entries(entries)) {
83
+ if (typeof version === "string" && version.startsWith("workspace:")) {
84
+ workspacePackages.add(packageName);
85
+ }
86
+ }
87
+ }
88
+ } catch {
89
+ appWorkspacePackageCache.set(cacheKey, workspacePackages);
90
+ return workspacePackages;
91
+ }
92
+ appWorkspacePackageCache.set(cacheKey, workspacePackages);
93
+ return workspacePackages;
94
+ }
95
+ function isWorkspacePackageImport(specifier, rootDir) {
96
+ return getWorkspacePackages(rootDir).has(getPackageNameFromSpecifier(specifier));
97
+ }
98
+ function isDeclaredAppPackageImport(specifier, rootDir) {
99
+ return getDeclaredAppPackages(rootDir).has(getPackageNameFromSpecifier(specifier));
100
+ }
101
+ function isDeclaredInResolutionChain(specifier, rootDir) {
102
+ const packageName = getPackageNameFromSpecifier(specifier);
103
+ if (CORE_RUNTIME_BARE_SPECIFIER_PACKAGES.has(packageName)) {
104
+ return true;
105
+ }
106
+ return isDeclaredAppPackageImport(specifier, rootDir);
107
+ }
108
+ function rewriteRuntimeImportSpecifier(specifier, quote, rootDir) {
109
+ if (!isBarePackageImportSpecifier(specifier, rootDir)) {
110
+ return void 0;
111
+ }
112
+ if (isDeclaredInResolutionChain(specifier, rootDir)) {
113
+ return void 0;
114
+ }
115
+ const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
116
+ if (!resolvedPath || !/\.(?:[cm]?[jt]s|tsx|jsx)$/u.test(resolvedPath)) {
117
+ return void 0;
118
+ }
119
+ return `${quote}${pathToFileURL(resolvedPath).href}${quote}`;
120
+ }
121
+ function rewriteRuntimeBuildOutputImports(code, rootDir) {
122
+ const rewriteSpecifier = (prefix, quote, specifier) => {
123
+ const rewrittenSpecifier = rewriteRuntimeImportSpecifier(specifier, quote, rootDir);
124
+ return `${prefix}${rewrittenSpecifier ?? `${quote}${specifier}${quote}`}`;
125
+ };
126
+ const rewriteFileUrl = (prefix, quote, specifier) => {
127
+ const packageName = extractPackageNameFromFileUrl(specifier);
128
+ if (!packageName) {
129
+ return `${prefix}${quote}${specifier}${quote}`;
130
+ }
131
+ if (!isDeclaredInResolutionChain(packageName, rootDir)) {
132
+ return `${prefix}${quote}${specifier}${quote}`;
133
+ }
134
+ const lastNodeModulesIndex = specifier.lastIndexOf("/node_modules/");
135
+ if (lastNodeModulesIndex === -1) {
136
+ return `${prefix}${quote}${specifier}${quote}`;
137
+ }
138
+ const afterNodeModules = specifier.slice(lastNodeModulesIndex + "/node_modules/".length);
139
+ const afterPackage = afterNodeModules.slice(packageName.length);
140
+ const bareSpecifier = packageName + afterPackage;
141
+ return `${prefix}${quote}${bareSpecifier}${quote}`;
142
+ };
143
+ const withResolvedPackages = code.replace(
144
+ /(\bfrom\s+)(['"])([^'"\\]+)\2/g,
145
+ (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
146
+ ).replace(
147
+ /(\bimport\s+)(['"])([^'"\\]+)\2/g,
148
+ (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
149
+ ).replace(
150
+ /(\bimport\s*\(\s*)(['"])([^'"\\]+)\2/g,
151
+ (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
152
+ );
153
+ const withBareSpecifiers = withResolvedPackages.replace(
154
+ /(\bfrom\s+)(['"])(file:\/\/[^'"\\]+)\2/g,
155
+ (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier)
156
+ ).replace(
157
+ /(\bimport\s+)(['"])(file:\/\/[^'"\\]+)\2/g,
158
+ (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier)
159
+ ).replace(
160
+ /(\bimport\s*\(\s*)(['"])(file:\/\/[^'"\\]+)\2/g,
161
+ (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier)
162
+ );
163
+ return withBareSpecifiers.replace(
164
+ /(['"])(@oxc-project\/runtime\/(?:helpers(?:\/esm)?\/[^'"\\]+))\1/g,
165
+ (match, quote, specifier) => {
166
+ const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
167
+ return resolvedPath ? `${quote}${pathToFileURL(resolvedPath).href}${quote}` : match;
168
+ }
169
+ );
170
+ }
171
+ function normalizeNodeRuntimeBuildOutputFile(filePath, rootDir) {
172
+ if (process.env.ECOPAGES_LOGGER_DEBUG === "true") {
173
+ console.log(`[normalizeNodeRuntimeBuildOutputFile] Checking ${filePath}`);
174
+ }
175
+ if (!/\.(?:[cm]?js)$/u.test(filePath)) {
176
+ return;
177
+ }
178
+ const fileSystem = corePackageRequire("node:fs");
179
+ if (!fileSystem.existsSync(filePath)) {
180
+ return;
181
+ }
182
+ const code = fileSystem.readFileSync(filePath, "utf-8");
183
+ const rewritten = rewriteRuntimeBuildOutputImports(code, rootDir);
184
+ if (rewritten !== code) {
185
+ if (process.env.ECOPAGES_LOGGER_DEBUG === "true") {
186
+ console.log(`[normalizeNodeRuntimeBuildOutputFile] Rewriting ${filePath}`);
187
+ }
188
+ fileSystem.writeFileSync(filePath, rewritten);
189
+ }
190
+ }
191
+ function normalizeNodeRuntimeBuildOutputs(outputPaths, rootDir) {
192
+ for (const outputPath of outputPaths) {
193
+ normalizeNodeRuntimeBuildOutputFile(outputPath, rootDir);
194
+ }
195
+ }
196
+ export {
197
+ isDeclaredAppPackageImport,
198
+ isWorkspacePackageImport,
199
+ normalizeNodeRuntimeBuildOutputFile,
200
+ normalizeNodeRuntimeBuildOutputs
201
+ };
@@ -0,0 +1,7 @@
1
+ import type { BuildOptions } from '../build-adapter.js';
2
+ import type { BuildProfile } from './build-runtime.js';
3
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
4
+ /**
5
+ * Resolves shared Rolldown options for a build profile.
6
+ */
7
+ export declare function resolveBuildProfileOptions(profile: BuildProfile, appConfig: EcoPagesAppConfig, overrides?: Partial<BuildOptions>): Partial<BuildOptions>;
@@ -0,0 +1,37 @@
1
+ function resolveBuildProfileOptions(profile, appConfig, overrides = {}) {
2
+ const root = appConfig.rootDir;
3
+ switch (profile) {
4
+ case "server-entry":
5
+ return {
6
+ root,
7
+ target: "node",
8
+ format: "esm",
9
+ sourcemap: "none",
10
+ minify: false,
11
+ externalPackages: true,
12
+ ...overrides
13
+ };
14
+ case "route-module":
15
+ return {
16
+ root,
17
+ target: "es2022",
18
+ format: "esm",
19
+ sourcemap: "none",
20
+ minify: false,
21
+ externalPackages: true,
22
+ ...overrides
23
+ };
24
+ case "browser-hmr":
25
+ return {
26
+ root,
27
+ target: "browser",
28
+ format: "esm",
29
+ sourcemap: "none",
30
+ minify: false,
31
+ ...overrides
32
+ };
33
+ }
34
+ }
35
+ export {
36
+ resolveBuildProfileOptions
37
+ };
@@ -0,0 +1,17 @@
1
+ import type { BuildOptions } from '../contracts/build-contracts.js';
2
+ /**
3
+ * Canonical identity for one complete {@link BuildOptions} request.
4
+ *
5
+ * @remarks
6
+ * Semantically unordered collections (`external`, `define` keys, array entrypoints)
7
+ * are sorted. Plugin, `conditions`, and source-transform order is preserved because
8
+ * Rolldown hook and `conditionNames` precedence depend on it.
9
+ *
10
+ * Deprecated / ignored adapter fields (`splitting`, `bundle`, `outbase`) still
11
+ * participate in the key so requests that differ only on those fields do not
12
+ * coalesce. Empty `conditions` / `define` / `external` normalize to the same
13
+ * sentinel as `undefined`.
14
+ */
15
+ export declare function createBuildRequestIdentity(options: BuildOptions): string;
16
+ /** @deprecated Use {@link createBuildRequestIdentity}. */
17
+ export declare const createBuildOptionsDedupeKey: typeof createBuildRequestIdentity;
@@ -0,0 +1,54 @@
1
+ import path from "node:path";
2
+ import { createJsxCacheKey, createPluginCacheKey, createSourceTransformCacheKey } from "../cache/cache-keys.js";
3
+ function normalizeEntrypoints(entrypoints) {
4
+ if (Array.isArray(entrypoints)) {
5
+ return entrypoints.map((entrypoint) => path.resolve(entrypoint)).sort().join("|");
6
+ }
7
+ return Object.entries(entrypoints).sort(([left], [right]) => left.localeCompare(right)).map(([key, value]) => `${key}:${path.resolve(value)}`).join("|");
8
+ }
9
+ function normalizeOrderedStringList(values, label) {
10
+ if (!values || values.length === 0) {
11
+ return `${label}:default`;
12
+ }
13
+ return `${label}:${values.join(",")}`;
14
+ }
15
+ function normalizeUnorderedStringList(values, label) {
16
+ if (!values || values.length === 0) {
17
+ return `${label}:default`;
18
+ }
19
+ return `${label}:${[...values].sort().join(",")}`;
20
+ }
21
+ function normalizeDefine(define) {
22
+ if (!define || Object.keys(define).length === 0) {
23
+ return "define:default";
24
+ }
25
+ return `define:${Object.entries(define).sort(([left], [right]) => left.localeCompare(right)).map(([key, value]) => `${key}=${value}`).join(",")}`;
26
+ }
27
+ function createBuildRequestIdentity(options) {
28
+ return [
29
+ normalizeEntrypoints(options.entrypoints),
30
+ options.root ? path.resolve(options.root) : "root:default",
31
+ options.outdir ? path.resolve(options.outdir) : "outdir:default",
32
+ options.outbase ? path.resolve(options.outbase) : "outbase:default",
33
+ options.splitting ?? "splitting:default",
34
+ options.bundle ?? "bundle:default",
35
+ options.externalPackages ?? "externalPackages:default",
36
+ options.target ?? "target:default",
37
+ options.format ?? "format:default",
38
+ options.sourcemap ?? "sourcemap:default",
39
+ options.minify ?? "minify:default",
40
+ options.treeshaking ?? "treeshaking:default",
41
+ options.naming ?? "naming:default",
42
+ normalizeOrderedStringList(options.conditions, "conditions"),
43
+ normalizeDefine(options.define),
44
+ normalizeUnorderedStringList(options.external, "external"),
45
+ createJsxCacheKey(options.jsx),
46
+ createPluginCacheKey(options.plugins),
47
+ createSourceTransformCacheKey(options.sourceTransforms)
48
+ ].join("::");
49
+ }
50
+ const createBuildOptionsDedupeKey = createBuildRequestIdentity;
51
+ export {
52
+ createBuildOptionsDedupeKey,
53
+ createBuildRequestIdentity
54
+ };
@@ -0,0 +1,59 @@
1
+ import type { EcoPagesAppConfig } from '../../types/internal-types.js';
2
+ import type { EcoBuildPlugin } from '../contracts/build-types.js';
3
+ import type { BuildOptions, BuildTranspileProfile } from '../contracts/build-contracts.js';
4
+ import type { BuildProfile } from './build-runtime.js';
5
+ /**
6
+ * Resolves app-owned server plugins plus JSX ownership for one config.
7
+ *
8
+ * @remarks
9
+ * Always goes through {@link getAppServerBuildPlugins} so sealed-manifest and
10
+ * loader-fallback apps share one plugin list with the alias resolver. Used by
11
+ * both request assembly and unified-graph cache keys.
12
+ */
13
+ export declare function resolveServerAppBuildPlugins(appConfig: EcoPagesAppConfig): EcoBuildPlugin[];
14
+ /**
15
+ * Merges caller plugins with app-owned manifest plugins.
16
+ *
17
+ * @remarks
18
+ * App-manifest plugins cannot be silently replaced by same-name caller plugins.
19
+ * Unique caller plugins are prepended so first-wins Rolldown hooks (for example
20
+ * React vendor/alias rewrites) still run before general app loaders. Use
21
+ * `excludeAppBuildPlugins` on browser requests to omit app-owned plugins.
22
+ */
23
+ export declare function mergeCallerBuildPlugins(appPlugins: EcoBuildPlugin[], callerPlugins?: EcoBuildPlugin[]): EcoBuildPlugin[];
24
+ export type ServerBuildRequestInput = Partial<BuildOptions> & {
25
+ entrypoints: BuildOptions['entrypoints'];
26
+ profile?: Extract<BuildProfile, 'server-entry' | 'route-module'>;
27
+ };
28
+ export type BrowserBuildRequestInput = Partial<BuildOptions> & {
29
+ entrypoints: BuildOptions['entrypoints'];
30
+ profile: BuildTranspileProfile;
31
+ excludeAppBuildPlugins?: string[];
32
+ };
33
+ /**
34
+ * Assembles a complete server-oriented {@link BuildOptions} before scheduling.
35
+ *
36
+ * @remarks
37
+ * Defaults `profile` to `'route-module'`. Plugins are
38
+ * {@link resolveServerAppBuildPlugins} plus unique caller contributions via
39
+ * {@link mergeCallerBuildPlugins}. Does not attach `sourceTransforms` — unlike
40
+ * {@link createBrowserBuildRequest}. Pass the returned options into
41
+ * {@link BuildRuntime.getProfile}; the runtime no longer injects plugins.
42
+ */
43
+ export declare function createServerBuildRequest(appConfig: EcoPagesAppConfig, input: ServerBuildRequestInput): BuildOptions;
44
+ /**
45
+ * Assembles a complete browser-oriented {@link BuildOptions} before scheduling.
46
+ *
47
+ * @remarks
48
+ * Applies {@link resolveBuildProfileOptions} for `'browser-hmr'` (browser target
49
+ * defaults), then overlays {@link getAppTranspileOptions} for the given
50
+ * {@link BuildTranspileProfile}. That profile selects transpile settings only;
51
+ * the {@link BuildRuntime} executor slot is chosen later by the caller
52
+ * (typically {@link BrowserBundleService}).
53
+ *
54
+ * Always attaches {@link getAppSourceTransforms}. App browser plugins come from
55
+ * {@link getAppBrowserBuildPlugins} (includes JSX ownership); use
56
+ * `excludeAppBuildPlugins` to omit app-owned names. Caller plugins cannot
57
+ * replace app-manifest names ({@link mergeCallerBuildPlugins}).
58
+ */
59
+ export declare function createBrowserBuildRequest(appConfig: EcoPagesAppConfig, input: BrowserBuildRequestInput): BuildOptions;
@@ -0,0 +1,46 @@
1
+ import { getAppBrowserBuildPlugins, getAppServerBuildPlugins, getAppTranspileOptions } from "../build-adapter.js";
2
+ import { resolveBuildProfileOptions } from "./build-profile-options.js";
3
+ import { getJsxOwnershipPlugins } from "../browser/jsx-ownership-plugins.js";
4
+ import { getAppSourceTransforms } from "../../plugins/source-transform.js";
5
+ function resolveServerAppBuildPlugins(appConfig) {
6
+ return [...getAppServerBuildPlugins(appConfig), ...getJsxOwnershipPlugins(appConfig)];
7
+ }
8
+ function mergeCallerBuildPlugins(appPlugins, callerPlugins) {
9
+ if (!callerPlugins || callerPlugins.length === 0) {
10
+ return appPlugins;
11
+ }
12
+ const appByName = new Map(appPlugins.map((plugin) => [plugin.name, plugin]));
13
+ const uniqueCallerPlugins = callerPlugins.filter((plugin) => !appByName.has(plugin.name));
14
+ return [...uniqueCallerPlugins, ...appPlugins];
15
+ }
16
+ function createServerBuildRequest(appConfig, input) {
17
+ const profile = input.profile ?? "route-module";
18
+ const plugins = mergeCallerBuildPlugins(resolveServerAppBuildPlugins(appConfig), input.plugins);
19
+ const { plugins: _callerPlugins, profile: _profile, ...overrides } = input;
20
+ return {
21
+ ...resolveBuildProfileOptions(profile, appConfig, overrides),
22
+ ...overrides,
23
+ entrypoints: input.entrypoints,
24
+ ...plugins.length > 0 ? { plugins } : {}
25
+ };
26
+ }
27
+ function createBrowserBuildRequest(appConfig, input) {
28
+ const { profile, excludeAppBuildPlugins, plugins: callerPlugins, ...overrides } = input;
29
+ const appBrowserPlugins = getAppBrowserBuildPlugins(appConfig);
30
+ const filteredAppBrowserPlugins = excludeAppBuildPlugins && excludeAppBuildPlugins.length > 0 ? appBrowserPlugins.filter((plugin) => !excludeAppBuildPlugins.includes(plugin.name)) : appBrowserPlugins;
31
+ const plugins = mergeCallerBuildPlugins(filteredAppBrowserPlugins, callerPlugins);
32
+ return {
33
+ ...resolveBuildProfileOptions("browser-hmr", appConfig, overrides),
34
+ ...getAppTranspileOptions(appConfig, profile),
35
+ ...overrides,
36
+ entrypoints: input.entrypoints,
37
+ plugins,
38
+ sourceTransforms: getAppSourceTransforms(appConfig)
39
+ };
40
+ }
41
+ export {
42
+ createBrowserBuildRequest,
43
+ createServerBuildRequest,
44
+ mergeCallerBuildPlugins,
45
+ resolveServerAppBuildPlugins
46
+ };