@ecopages/core 0.2.0-beta.8 → 0.2.0-rc.0

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 (623) hide show
  1. package/README.md +42 -13
  2. package/package.json +361 -58
  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 +4 -6
  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 +90 -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 +29 -340
  111. package/src/build/build-adapter.js +258 -260
  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 +463 -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} +16 -2
  138. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  139. package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
  140. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  141. package/src/build/rolldown/runtime-build-output-normalizer.js +253 -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 +42 -12
  183. package/src/config/config-builder.js +645 -600
  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 +2 -1
  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 +24 -6
  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 +66 -12
  313. package/src/plugins/processor.js +168 -137
  314. package/src/plugins/runtime-capability.js +1 -0
  315. package/src/plugins/source-transform.d.ts +32 -1
  316. package/src/plugins/source-transform.js +112 -60
  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 +20 -0
  324. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -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 +37 -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 +52 -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 -30
  453. package/src/services/assets/browser-bundle.service.js +54 -46
  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 -309
  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 -199
  587. package/src/build/runtime-build-executor.d.ts +0 -15
  588. package/src/build/runtime-build-executor.js +0 -43
  589. package/src/build/runtime-build-output-normalizer.js +0 -203
  590. package/src/build/serialized-build-executor.js +0 -63
  591. package/src/build/server-entry-build-cache.js +0 -169
  592. package/src/build/server-side-css-shim-plugin.js +0 -35
  593. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  594. package/src/hmr/hmr.test.e2e.js +0 -54
  595. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  596. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  597. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  598. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  599. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  600. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  601. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  602. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  603. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
  604. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  605. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  606. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  607. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  608. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  609. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  610. package/src/route-renderer/orchestration/render-output.utils.js +0 -175
  611. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
  612. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  613. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  614. package/src/utils/html.d.ts +0 -1
  615. package/src/utils/html.js +0 -4
  616. /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
  617. /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
  618. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  619. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  620. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  621. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  622. /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
  623. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Bundler plugin bridge.
3
+ *
4
+ * @remarks
5
+ * Translates an array of `EcoBuildPlugin` instances (the runtime-agnostic
6
+ * plugin contract used by Ecopages processors and integrations) into
7
+ * the bundler's native `Plugin` array. The bridge exposes the same
8
+ * three hooks (`onResolve`, `onLoad`, `module`) the `EcoBuildPlugin`
9
+ * contract uses, but maps them to the bundler's `resolveId`/`load`
10
+ * hooks.
11
+ *
12
+ * The shared `EcoBuildPlugin` contract stays the boundary between
13
+ * integrations and bundler backends.
14
+ *
15
+ * **Namespace handling.**
16
+ *
17
+ * The shared `EcoBuildPlugin` contract scopes `onResolve`/`onLoad`
18
+ * handlers with a `namespace` string. The bundler encodes namespaces
19
+ * into the module id (no separate field). The bridge prepends
20
+ * `<namespace>:` to the resolved id when the result includes a
21
+ * namespace, and matches `onLoad`/`onResolve` filters against that
22
+ * prefix. The bridge strips the prefix before forwarding the id back
23
+ * to the callback so plugin code keeps seeing the same `path` shape
24
+ * it did on the historical contract.
25
+ *
26
+ * **Plugin ordering is semantically significant.**
27
+ *
28
+ * The bundler's `resolveId` and `load` are "first" hooks: the first
29
+ * plugin that returns a non-null value wins. Because the bridge
30
+ * translates each `EcoBuildPlugin` into its own bundler plugin and
31
+ * preserves the array order, the position of each plugin in the
32
+ * `plugins` array determines its priority:
33
+ *
34
+ * - **Index 0** has the highest priority.
35
+ * - **Last index** has the lowest priority.
36
+ *
37
+ * When adding new integrations or processors, ensure security-critical
38
+ * plugins (e.g. `ecopages-client-graph-boundary`) are placed **before**
39
+ * general-purpose loaders in the array so they always get first refusal
40
+ * on every source file.
41
+ */
42
+ import path from 'node:path';
43
+ import { finalizeLoadResultWithSourceTransforms } from './rolldown-source-transform-pass.js';
44
+ import { escapeRegExp } from '../browser/browser-runtime-plugin-helpers.js';
45
+ const NAMESPACE_SEPARATOR = ':';
46
+ function joinNamespace(namespace, value) {
47
+ return namespace ? `${namespace}${NAMESPACE_SEPARATOR}${value}` : value;
48
+ }
49
+ function splitNamespace(id) {
50
+ const separatorIndex = id.indexOf(NAMESPACE_SEPARATOR);
51
+ if (separatorIndex <= 0) {
52
+ return { namespace: undefined, path: id };
53
+ }
54
+ return {
55
+ namespace: id.slice(0, separatorIndex),
56
+ path: id.slice(separatorIndex + 1),
57
+ };
58
+ }
59
+ function inferRolldownModuleTypeFromPath(filePath) {
60
+ const extension = path.extname(filePath).toLowerCase();
61
+ switch (extension) {
62
+ case '.ts':
63
+ return 'ts';
64
+ case '.tsx':
65
+ return 'tsx';
66
+ case '.jsx':
67
+ return 'jsx';
68
+ case '.json':
69
+ return 'json';
70
+ case '.css':
71
+ return 'css';
72
+ default:
73
+ return 'js';
74
+ }
75
+ }
76
+ function normalizeRolldownModuleType(loader) {
77
+ switch (loader) {
78
+ case 'js':
79
+ case 'jsx':
80
+ case 'ts':
81
+ case 'tsx':
82
+ case 'json':
83
+ case 'css':
84
+ case 'text':
85
+ case 'base64':
86
+ case 'dataurl':
87
+ case 'binary':
88
+ case 'empty':
89
+ return loader;
90
+ case 'global-css':
91
+ case 'local-css':
92
+ return 'css';
93
+ case 'file':
94
+ case 'copy':
95
+ return 'asset';
96
+ default:
97
+ return undefined;
98
+ }
99
+ }
100
+ function convertLoadResultToModuleSource(result) {
101
+ if (result.loader === 'object' && result.exports && typeof result.exports === 'object') {
102
+ return Object.entries(result.exports)
103
+ .map(([key, value]) => key === 'default'
104
+ ? `export default ${JSON.stringify(value)};`
105
+ : `export const ${key} = ${JSON.stringify(value)};`)
106
+ .join('\n');
107
+ }
108
+ return undefined;
109
+ }
110
+ function buildIdFilter(filter, namespace) {
111
+ if (!namespace) {
112
+ return filter;
113
+ }
114
+ return new RegExp(`^${escapeRegExp(namespace)}${NAMESPACE_SEPARATOR}${filter.source.slice(1)}`);
115
+ }
116
+ function resolvePluginPath(value, importer, contextRoot) {
117
+ if (path.isAbsolute(value)) {
118
+ return value;
119
+ }
120
+ if (value.startsWith('.') || value.startsWith('..')) {
121
+ const baseDir = importer ? path.dirname(importer) : contextRoot;
122
+ return path.resolve(baseDir, value);
123
+ }
124
+ return value;
125
+ }
126
+ function convertPluginOnLoadResult(args, result) {
127
+ if (!result || typeof result !== 'object') {
128
+ return undefined;
129
+ }
130
+ const candidate = result;
131
+ const { path: sourcePath } = splitNamespace(args.id);
132
+ const sourceFromExports = convertLoadResultToModuleSource(candidate);
133
+ if (sourceFromExports) {
134
+ const description = {
135
+ code: sourceFromExports,
136
+ moduleType: 'js',
137
+ };
138
+ return description;
139
+ }
140
+ if (typeof candidate.contents === 'string' || candidate.contents instanceof Uint8Array) {
141
+ const code = typeof candidate.contents === 'string' ? candidate.contents : new TextDecoder().decode(candidate.contents);
142
+ const description = {
143
+ code,
144
+ moduleType: (normalizeRolldownModuleType(candidate.loader) ??
145
+ inferRolldownModuleTypeFromPath(sourcePath)),
146
+ };
147
+ return description;
148
+ }
149
+ return undefined;
150
+ }
151
+ function convertPluginOnResolveResult(result, importer, contextRoot) {
152
+ if (!result || typeof result !== 'object') {
153
+ return undefined;
154
+ }
155
+ const candidate = result;
156
+ if (typeof candidate.path !== 'string' && typeof candidate.namespace !== 'string') {
157
+ if (typeof candidate.external !== 'boolean') {
158
+ return undefined;
159
+ }
160
+ }
161
+ const partial = { id: '' };
162
+ if (typeof candidate.path === 'string') {
163
+ partial.id = joinNamespace(candidate.namespace, resolvePluginPath(candidate.path, importer, contextRoot));
164
+ }
165
+ else if (typeof candidate.namespace === 'string') {
166
+ partial.id = joinNamespace(candidate.namespace, '');
167
+ }
168
+ if (typeof candidate.external === 'boolean') {
169
+ partial.external = candidate.external;
170
+ }
171
+ return partial;
172
+ }
173
+ /**
174
+ * Creates a Rolldown `Plugin` array that drives the supplied
175
+ * `EcoBuildPlugin` instances.
176
+ *
177
+ * All eco plugins are merged into a single Rolldown plugin to minimize
178
+ * Rust→JS FFI overhead. Rolldown calls every hook for every module when
179
+ * there is no static filter, so N separate plugins would cause N
180
+ * `resolveId` + N `load` calls per module. Consolidating into one
181
+ * plugin reduces that to 1 call each, with JavaScript-side filtering
182
+ * routing to the correct eco plugin callback.
183
+ *
184
+ * Plugin ordering is preserved: registrations from earlier eco plugins
185
+ * are checked before registrations from later ones, matching the
186
+ * original per-plugin priority semantics.
187
+ *
188
+ * @remarks
189
+ * Rolldown re-fires `buildStart` on each build, so registrations and the
190
+ * virtual-module counter are cleared before every `setup` pass — otherwise
191
+ * handlers accumulate when bridge plugins are reused.
192
+ *
193
+ * @param plugins - `EcoBuildPlugin` instances registered for this build.
194
+ * @param contextRoot - Project root used to resolve relative load paths.
195
+ * @param sourceTransforms - Optional app-owned transforms applied after a matching
196
+ * `onLoad` handler returns module contents. Browser builds pass
197
+ * {@link getAppSourceTransforms | app source transforms} here so metadata injection
198
+ * still runs on output rewritten by boundary/runtime plugins. Virtual modules,
199
+ * CSS, and asset loads are skipped.
200
+ */
201
+ export function createRolldownPluginBridge(plugins, contextRoot, sourceTransforms = []) {
202
+ if (plugins.length === 0) {
203
+ return [];
204
+ }
205
+ const moduleCounter = { value: 0 };
206
+ const resolveRegistrations = [];
207
+ const loadRegistrations = [];
208
+ const registerResolve = (filter, callback) => {
209
+ resolveRegistrations.push({ filter, callback });
210
+ };
211
+ const registerLoad = (filter, callback) => {
212
+ loadRegistrations.push({ filter, callback });
213
+ };
214
+ const resolveIdHandler = async (source, importer, _extraOptions) => {
215
+ for (const { filter, callback } of resolveRegistrations) {
216
+ if (!filter.test(source)) {
217
+ continue;
218
+ }
219
+ const { namespace, path: sourcePath } = splitNamespace(source);
220
+ const result = await callback({ path: sourcePath, importer, namespace });
221
+ const converted = convertPluginOnResolveResult(result, importer, contextRoot);
222
+ if (converted !== undefined) {
223
+ return converted;
224
+ }
225
+ }
226
+ return undefined;
227
+ };
228
+ const loadHandler = async (id) => {
229
+ let loadResult;
230
+ for (const { filter, callback } of loadRegistrations) {
231
+ if (!filter.test(id)) {
232
+ continue;
233
+ }
234
+ const { namespace, path: sourcePath } = splitNamespace(id);
235
+ const result = await callback({ path: sourcePath, namespace });
236
+ const converted = convertPluginOnLoadResult({ id }, result);
237
+ if (converted !== undefined) {
238
+ loadResult = converted;
239
+ break;
240
+ }
241
+ }
242
+ const { namespace, path: sourcePath } = splitNamespace(id);
243
+ return finalizeLoadResultWithSourceTransforms({
244
+ id,
245
+ namespace,
246
+ sourcePath,
247
+ loadResult,
248
+ sourceTransforms,
249
+ contextRoot,
250
+ inferModuleTypeFromPath: (filePath) => inferRolldownModuleTypeFromPath(filePath),
251
+ });
252
+ };
253
+ const plugin = {
254
+ name: 'ecopages-plugin-bridge',
255
+ buildStart: async () => {
256
+ resolveRegistrations.length = 0;
257
+ loadRegistrations.length = 0;
258
+ moduleCounter.value = 0;
259
+ for (const ecoPlugin of plugins) {
260
+ const bridge = {
261
+ onResolve: (options, callback) => {
262
+ registerResolve(buildIdFilter(options.filter, options.namespace), callback);
263
+ },
264
+ onLoad: (options, callback) => {
265
+ registerLoad(buildIdFilter(options.filter, options.namespace), callback);
266
+ },
267
+ module: (specifier, callback) => {
268
+ const namespace = `ecopages-module-${moduleCounter.value}`;
269
+ moduleCounter.value += 1;
270
+ const filter = new RegExp(`^${escapeRegExp(specifier)}$`);
271
+ registerResolve(filter, async () => ({
272
+ path: joinNamespace(namespace, specifier),
273
+ }));
274
+ registerLoad(buildIdFilter(/.*/, namespace), async () => callback());
275
+ },
276
+ };
277
+ await ecoPlugin.setup(bridge);
278
+ }
279
+ },
280
+ resolveId: resolveIdHandler,
281
+ load: loadHandler,
282
+ };
283
+ return [plugin];
284
+ }
@@ -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,70 @@
1
+ import path from 'node:path';
2
+ import { fileSystem } from '@ecopages/file-system';
3
+ import { applySourceTransforms, normalizeTransformId, } from '../../plugins/source-transform.js';
4
+ /**
5
+ * Standard source extensions eligible for the browser post-load transform pass.
6
+ *
7
+ * @remarks
8
+ * Compound integration templates (for example `.kita.tsx`) still match because
9
+ * matching uses the final path suffix. Keep this aligned with integration
10
+ * template extensions registered in app config.
11
+ */
12
+ const TRANSFORMABLE_SOURCE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mdx']);
13
+ function shouldApplySourceTransforms(namespace, sourcePath) {
14
+ if (namespace !== undefined) {
15
+ return false;
16
+ }
17
+ const normalizedPath = normalizeTransformId(sourcePath);
18
+ return TRANSFORMABLE_SOURCE_EXTENSIONS.has(path.extname(normalizedPath).toLowerCase());
19
+ }
20
+ function shouldTransformLoadedModule(moduleType) {
21
+ return moduleType !== 'css' && moduleType !== 'asset';
22
+ }
23
+ function applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, code) {
24
+ if (sourceTransforms.length === 0) {
25
+ return code;
26
+ }
27
+ return applySourceTransforms(sourceTransforms, code, sourcePath);
28
+ }
29
+ /**
30
+ * Runs app-owned source transforms after first-wins `onLoad` plugins produce
31
+ * module contents for one Rolldown load request.
32
+ */
33
+ export async function finalizeLoadResultWithSourceTransforms(options) {
34
+ const { id, namespace, sourcePath, loadResult, sourceTransforms, contextRoot, inferModuleTypeFromPath } = options;
35
+ if (!shouldApplySourceTransforms(namespace, sourcePath)) {
36
+ return loadResult;
37
+ }
38
+ if (typeof loadResult === 'object' &&
39
+ loadResult !== null &&
40
+ 'code' in loadResult &&
41
+ typeof loadResult.code === 'string') {
42
+ if (!shouldTransformLoadedModule(loadResult.moduleType)) {
43
+ return loadResult;
44
+ }
45
+ const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, loadResult.code);
46
+ if (transformedCode === loadResult.code) {
47
+ return loadResult;
48
+ }
49
+ return {
50
+ code: transformedCode,
51
+ moduleType: loadResult.moduleType,
52
+ };
53
+ }
54
+ if (loadResult !== undefined || sourceTransforms.length === 0) {
55
+ return loadResult;
56
+ }
57
+ const normalizedPath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(contextRoot, sourcePath);
58
+ if (!fileSystem.exists(normalizedPath)) {
59
+ return loadResult;
60
+ }
61
+ const originalCode = fileSystem.readFileSync(normalizedPath);
62
+ const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, originalCode);
63
+ if (transformedCode === originalCode) {
64
+ return loadResult;
65
+ }
66
+ return {
67
+ code: transformedCode,
68
+ moduleType: inferModuleTypeFromPath(normalizedPath),
69
+ };
70
+ }
@@ -0,0 +1,253 @@
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 = new Map();
8
+ const appWorkspacePackageCache = new Map();
9
+ /**
10
+ * Core-owned packages that are part of the Node adapter's runtime surface and
11
+ * should therefore be preserved as bare specifiers in bundled output.
12
+ *
13
+ * Only list packages whose bare-specifier form will be resolvable from the
14
+ * app's Node.js runtime (i.e. they ship alongside the framework and do not
15
+ * need to be in the app's own package.json).
16
+ *
17
+ * Build-time tools (e.g. oxc-parser, rolldown) deliberately omitted — their
18
+ * imports in server-side output must be rewritten to absolute file: URLs so
19
+ * the bundler does not embed them in app code.
20
+ */
21
+ const CORE_RUNTIME_BARE_SPECIFIER_PACKAGES = new Set(['ws']);
22
+ function tryResolveRuntimeImport(specifier, resolver) {
23
+ try {
24
+ return resolver.resolve(specifier);
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
29
+ }
30
+ /**
31
+ * Extracts the package name from a file:// URL pointing to a node_modules path.
32
+ *
33
+ * @remarks
34
+ * Given a URL like `file:///path/to/node_modules/@scope/pkg/dist/index.js`,
35
+ * returns `@scope/pkg`. Given `file:///path/to/node_modules/pkg/dist/index.js`,
36
+ * returns `pkg`. Returns `undefined` if the URL doesn't point to node_modules.
37
+ *
38
+ * Handles pnpm's nested node_modules structure by finding the LAST node_modules
39
+ * in the path (e.g., `node_modules/.pnpm/pkg@version/node_modules/@scope/pkg/...`).
40
+ */
41
+ function extractPackageNameFromFileUrl(specifier) {
42
+ if (!specifier.startsWith('file://')) {
43
+ return undefined;
44
+ }
45
+ // Find the LAST node_modules in the path to handle pnpm's nested structure
46
+ const lastNodeModulesIndex = specifier.lastIndexOf('/node_modules/');
47
+ if (lastNodeModulesIndex === -1) {
48
+ return undefined;
49
+ }
50
+ const afterNodeModules = specifier.slice(lastNodeModulesIndex + '/node_modules/'.length);
51
+ const parts = afterNodeModules.split('/');
52
+ if (parts.length === 0) {
53
+ return undefined;
54
+ }
55
+ if (parts[0]?.startsWith('@') && parts.length > 1) {
56
+ return `${parts[0]}/${parts[1]}`;
57
+ }
58
+ return parts[0];
59
+ }
60
+ function getPackageNameFromSpecifier(specifier) {
61
+ if (specifier.startsWith('@')) {
62
+ return specifier.split('/').slice(0, 2).join('/');
63
+ }
64
+ return specifier.split('/')[0] ?? specifier;
65
+ }
66
+ function getDeclaredAppPackages(rootDir) {
67
+ const cacheKey = path.resolve(rootDir);
68
+ const cached = appDeclaredPackageCache.get(cacheKey);
69
+ if (cached) {
70
+ return cached;
71
+ }
72
+ const packageJsonPath = path.resolve(rootDir, 'package.json');
73
+ const declaredPackages = new Set();
74
+ try {
75
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
76
+ for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
77
+ const entries = packageJson[field];
78
+ if (!entries || typeof entries !== 'object') {
79
+ continue;
80
+ }
81
+ for (const packageName of Object.keys(entries)) {
82
+ declaredPackages.add(packageName);
83
+ }
84
+ }
85
+ }
86
+ catch {
87
+ appDeclaredPackageCache.set(cacheKey, declaredPackages);
88
+ return declaredPackages;
89
+ }
90
+ appDeclaredPackageCache.set(cacheKey, declaredPackages);
91
+ return declaredPackages;
92
+ }
93
+ /**
94
+ * Returns the set of workspace packages declared in the app's package.json.
95
+ *
96
+ * Workspace packages are identified by the `workspace:` protocol in their
97
+ * version specifier (e.g., `"workspace:*"`, `"workspace:^1.0.0"`). These
98
+ * packages are typically source-only and must be bundled rather than
99
+ * externalized.
100
+ */
101
+ function getWorkspacePackages(rootDir) {
102
+ const cacheKey = path.resolve(rootDir);
103
+ const cached = appWorkspacePackageCache.get(cacheKey);
104
+ if (cached) {
105
+ return cached;
106
+ }
107
+ const packageJsonPath = path.resolve(rootDir, 'package.json');
108
+ const workspacePackages = new Set();
109
+ try {
110
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
111
+ for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
112
+ const entries = packageJson[field];
113
+ if (!entries || typeof entries !== 'object') {
114
+ continue;
115
+ }
116
+ for (const [packageName, version] of Object.entries(entries)) {
117
+ if (typeof version === 'string' && version.startsWith('workspace:')) {
118
+ workspacePackages.add(packageName);
119
+ }
120
+ }
121
+ }
122
+ }
123
+ catch {
124
+ appWorkspacePackageCache.set(cacheKey, workspacePackages);
125
+ return workspacePackages;
126
+ }
127
+ appWorkspacePackageCache.set(cacheKey, workspacePackages);
128
+ return workspacePackages;
129
+ }
130
+ /**
131
+ * Returns true if the given specifier is a workspace package.
132
+ *
133
+ * Workspace packages are declared with the `workspace:` protocol and are
134
+ * typically source-only, requiring bundling rather than externalization.
135
+ */
136
+ export function isWorkspacePackageImport(specifier, rootDir) {
137
+ return getWorkspacePackages(rootDir).has(getPackageNameFromSpecifier(specifier));
138
+ }
139
+ export function isDeclaredAppPackageImport(specifier, rootDir) {
140
+ return getDeclaredAppPackages(rootDir).has(getPackageNameFromSpecifier(specifier));
141
+ }
142
+ /**
143
+ * Whether the given bare specifier should be left as-is (not rewritten to a
144
+ * file URL) in bundled output.
145
+ *
146
+ * Two categories qualify:
147
+ * 1. **App-declared packages** — present in the app's own package.json; the
148
+ * app's resolver will find them at runtime.
149
+ * 2. **Core runtime surface packages** — a curated subset of the framework's
150
+ * own dependencies that are part of its public Node adapter surface (e.g.
151
+ * `ws`). These ship alongside the framework and are resolvable from the
152
+ * bundled output's location even when the app has not declared them.
153
+ *
154
+ * Build-time packages declared by core (e.g. `oxc-parser`, `rolldown`) are
155
+ * intentionally *not* included here — their imports must still be rewritten
156
+ * to absolute `file:` URLs so they are not left as bare specifiers in app
157
+ * output.
158
+ */
159
+ function isDeclaredInResolutionChain(specifier, rootDir) {
160
+ const packageName = getPackageNameFromSpecifier(specifier);
161
+ if (CORE_RUNTIME_BARE_SPECIFIER_PACKAGES.has(packageName)) {
162
+ return true;
163
+ }
164
+ return isDeclaredAppPackageImport(specifier, rootDir);
165
+ }
166
+ function rewriteRuntimeImportSpecifier(specifier, quote, rootDir) {
167
+ if (!isBarePackageImportSpecifier(specifier, rootDir)) {
168
+ return undefined;
169
+ }
170
+ if (isDeclaredInResolutionChain(specifier, rootDir)) {
171
+ return undefined;
172
+ }
173
+ const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
174
+ if (!resolvedPath || !/\.(?:[cm]?[jt]s|tsx|jsx)$/u.test(resolvedPath)) {
175
+ return undefined;
176
+ }
177
+ return `${quote}${pathToFileURL(resolvedPath).href}${quote}`;
178
+ }
179
+ function rewriteRuntimeBuildOutputImports(code, rootDir) {
180
+ const rewriteSpecifier = (prefix, quote, specifier) => {
181
+ const rewrittenSpecifier = rewriteRuntimeImportSpecifier(specifier, quote, rootDir);
182
+ return `${prefix}${rewrittenSpecifier ?? `${quote}${specifier}${quote}`}`;
183
+ };
184
+ /**
185
+ * Rewrites file:// URLs pointing to node_modules back to bare specifiers,
186
+ * but only when the package is resolvable from the app's resolution chain.
187
+ *
188
+ * @remarks
189
+ * Rolldown resolves external imports to file:// URLs during the build. For
190
+ * packages declared in the app's package.json, rewriting to bare specifiers
191
+ * is safe and preserves CJS named-export interop. For transitive
192
+ * dependencies that aren't directly resolvable, the file:// URL is kept as-is
193
+ * to avoid ERR_MODULE_NOT_FOUND errors at runtime.
194
+ */
195
+ const rewriteFileUrl = (prefix, quote, specifier) => {
196
+ const packageName = extractPackageNameFromFileUrl(specifier);
197
+ if (!packageName) {
198
+ return `${prefix}${quote}${specifier}${quote}`;
199
+ }
200
+ if (!isDeclaredInResolutionChain(packageName, rootDir)) {
201
+ return `${prefix}${quote}${specifier}${quote}`;
202
+ }
203
+ // Extract the subpath after the package name
204
+ // Use lastIndexOf to handle pnpm's nested node_modules structure
205
+ const lastNodeModulesIndex = specifier.lastIndexOf('/node_modules/');
206
+ if (lastNodeModulesIndex === -1) {
207
+ return `${prefix}${quote}${specifier}${quote}`;
208
+ }
209
+ const afterNodeModules = specifier.slice(lastNodeModulesIndex + '/node_modules/'.length);
210
+ const afterPackage = afterNodeModules.slice(packageName.length);
211
+ // Reconstruct the bare specifier
212
+ const bareSpecifier = packageName + afterPackage;
213
+ return `${prefix}${quote}${bareSpecifier}${quote}`;
214
+ };
215
+ const withResolvedPackages = code
216
+ .replace(/(\bfrom\s+)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier))
217
+ .replace(/(\bimport\s+)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier))
218
+ .replace(/(\bimport\s*\(\s*)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier));
219
+ // Rewrite file:// URLs pointing to node_modules back to bare specifiers
220
+ const withBareSpecifiers = withResolvedPackages
221
+ .replace(/(\bfrom\s+)(['"])(file:\/\/[^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier))
222
+ .replace(/(\bimport\s+)(['"])(file:\/\/[^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier))
223
+ .replace(/(\bimport\s*\(\s*)(['"])(file:\/\/[^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier));
224
+ return withBareSpecifiers.replace(/(['"])(@oxc-project\/runtime\/(?:helpers(?:\/esm)?\/[^'"\\]+))\1/g, (match, quote, specifier) => {
225
+ const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
226
+ return resolvedPath ? `${quote}${pathToFileURL(resolvedPath).href}${quote}` : match;
227
+ });
228
+ }
229
+ export function normalizeNodeRuntimeBuildOutputFile(filePath, rootDir) {
230
+ if (process.env.ECOPAGES_LOGGER_DEBUG === 'true') {
231
+ console.log(`[normalizeNodeRuntimeBuildOutputFile] Checking ${filePath}`);
232
+ }
233
+ if (!/\.(?:[cm]?js)$/u.test(filePath)) {
234
+ return;
235
+ }
236
+ const fileSystem = corePackageRequire('node:fs');
237
+ if (!fileSystem.existsSync(filePath)) {
238
+ return;
239
+ }
240
+ const code = fileSystem.readFileSync(filePath, 'utf-8');
241
+ const rewritten = rewriteRuntimeBuildOutputImports(code, rootDir);
242
+ if (rewritten !== code) {
243
+ if (process.env.ECOPAGES_LOGGER_DEBUG === 'true') {
244
+ console.log(`[normalizeNodeRuntimeBuildOutputFile] Rewriting ${filePath}`);
245
+ }
246
+ fileSystem.writeFileSync(filePath, rewritten);
247
+ }
248
+ }
249
+ export function normalizeNodeRuntimeBuildOutputs(outputPaths, rootDir) {
250
+ for (const outputPath of outputPaths) {
251
+ normalizeNodeRuntimeBuildOutputFile(outputPath, rootDir);
252
+ }
253
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Server-side CSS shim plugin for the bundler adapter.
3
+ *
4
+ * @remarks
5
+ * Page modules imported by the server (so the framework can read
6
+ * `getStaticProps` / `staticPaths` / page metadata) commonly have
7
+ * `import './style.css'` at the top. The bundler does not bundle
8
+ * CSS, and the server only needs the JS exports — the CSS itself
9
+ * is delivered to the browser via the page's `dependencies.stylesheets`
10
+ * declarations. This plugin:
11
+ *
12
+ * - Resolves `.css` imports to the absolute on-disk path.
13
+ * - Loads them and returns an empty ESM module with
14
+ * `moduleSideEffects: true` so the bundler keeps the import in
15
+ * the dependency graph without trying to bundle the bytes.
16
+ *
17
+ * The plugin is added by the adapter on every server-side build.
18
+ * Browser-side builds that want real CSS bundling should keep using
19
+ * a dedicated CSS pipeline (e.g. the postcss processor's output)
20
+ * and continue to declare stylesheets in `dependencies.stylesheets`
21
+ * — the shim is intentionally inert for those flows.
22
+ */
23
+ import { existsSync, readFileSync } from 'node:fs';
24
+ import path from 'node:path';
25
+ const CSS_PATH = /\.css$/u;
26
+ const CSS_QUERY = '?ecopages-css-shim';
27
+ function stripShimQuery(id) {
28
+ const queryIndex = id.indexOf('?');
29
+ return queryIndex === -1 ? id : id.slice(0, queryIndex);
30
+ }
31
+ /**
32
+ * Builds a Rolldown plugin that turns `.css` imports into no-op ESM
33
+ * modules while preserving the dependency graph.
34
+ */
35
+ export function createServerSideCssShimPlugin() {
36
+ return {
37
+ name: 'ecopages:server-side-css-shim',
38
+ async resolveId(source, importer) {
39
+ if (!CSS_PATH.test(source)) {
40
+ return null;
41
+ }
42
+ const resolved = importer ? path.resolve(path.dirname(importer), source) : path.resolve(source);
43
+ return existsSync(resolved) ? `${resolved}${CSS_QUERY}` : null;
44
+ },
45
+ async load(id) {
46
+ if (!id.endsWith(CSS_QUERY)) {
47
+ return null;
48
+ }
49
+ const realPath = stripShimQuery(id);
50
+ readFileSync(realPath, 'utf-8');
51
+ return {
52
+ code: 'export default "";',
53
+ moduleType: 'js',
54
+ moduleSideEffects: true,
55
+ };
56
+ },
57
+ };
58
+ }
@@ -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>;