@ecopages/core 0.2.0-beta.30 → 0.2.0-beta.32

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 (338) hide show
  1. package/README.md +1 -0
  2. package/package.json +82 -3
  3. package/src/adapters/abstract/application-adapter.d.ts +0 -8
  4. package/src/adapters/abstract/application-adapter.js +252 -261
  5. package/src/adapters/abstract/router-adapter.js +12 -4
  6. package/src/adapters/abstract/segment-path-matcher.js +132 -134
  7. package/src/adapters/abstract/server-adapter.js +22 -14
  8. package/src/adapters/abstract/ws-pattern-matcher.js +24 -26
  9. package/src/adapters/bun/bun-user-websocket-lifecycle.js +83 -86
  10. package/src/adapters/bun/client-bridge.js +51 -50
  11. package/src/adapters/bun/create-app.js +171 -161
  12. package/src/adapters/bun/hmr-manager.js +62 -57
  13. package/src/adapters/bun/index.js +2 -31
  14. package/src/adapters/bun/runtime-host.js +61 -54
  15. package/src/adapters/bun/server-adapter.d.ts +0 -1
  16. package/src/adapters/bun/server-adapter.js +561 -561
  17. package/src/adapters/bun/static-preview-host.js +43 -46
  18. package/src/adapters/create-app.js +11 -14
  19. package/src/adapters/index.js +2 -30
  20. package/src/adapters/node/create-app.js +123 -129
  21. package/src/adapters/node/http-request-bridge.js +147 -106
  22. package/src/adapters/node/node-client-bridge.js +62 -64
  23. package/src/adapters/node/node-hmr-manager.js +58 -48
  24. package/src/adapters/node/runtime-host.js +96 -89
  25. package/src/adapters/node/server-adapter-dependencies.js +18 -21
  26. package/src/adapters/node/server-adapter.d.ts +0 -1
  27. package/src/adapters/node/server-adapter.js +347 -326
  28. package/src/adapters/node/static-content-server.js +172 -191
  29. package/src/adapters/node/static-preview-host.js +87 -78
  30. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  31. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  32. package/src/adapters/shared/hmr/hmr-html-response.js +46 -32
  33. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +29 -38
  34. package/src/adapters/shared/hmr/shared-hmr-manager.js +439 -425
  35. package/src/adapters/shared/http/api-request-pipeline.js +122 -119
  36. package/src/adapters/shared/http/api-response.js +77 -77
  37. package/src/adapters/shared/http/create-body-response.js +22 -19
  38. package/src/adapters/shared/http/define-api-handler.js +41 -55
  39. package/src/adapters/shared/http/explicit-static-render-preparation.js +26 -23
  40. package/src/adapters/shared/http/explicit-static-route-matcher.js +55 -62
  41. package/src/adapters/shared/http/file-route-middleware-pipeline.js +81 -75
  42. package/src/adapters/shared/http/fs-server-response-factory.js +101 -96
  43. package/src/adapters/shared/http/fs-server-response-matcher.js +239 -257
  44. package/src/adapters/shared/http/run-middleware-chain.js +15 -15
  45. package/src/adapters/shared/runtime/application-adapter.js +72 -87
  46. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +25 -22
  47. package/src/adapters/shared/runtime/port-manager.js +207 -177
  48. package/src/adapters/shared/runtime/render-context.js +94 -79
  49. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +33 -38
  50. package/src/adapters/shared/runtime/runtime-host.js +1 -0
  51. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +2 -3
  52. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +65 -51
  53. package/src/adapters/shared/runtime/server-adapter.d.ts +1 -0
  54. package/src/adapters/shared/runtime/server-adapter.js +233 -217
  55. package/src/adapters/shared/runtime/server-route-handler.js +74 -70
  56. package/src/adapters/shared/runtime/server-static-builder.js +165 -184
  57. package/src/adapters/shared/runtime/static-preview-host.js +1 -0
  58. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +97 -88
  59. package/src/adapters/shared/ws/websocket-lifecycle.js +57 -50
  60. package/src/build/README.md +52 -1
  61. package/src/build/app-build-manifest-runtime.js +129 -108
  62. package/src/build/browser/browser-runtime-manifest.js +47 -50
  63. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -12
  64. package/src/build/browser/browser-runtime-plugin.js +206 -160
  65. package/src/build/browser/jsx-ownership-plugins.js +51 -37
  66. package/src/build/browser/lit-static-render-worker-context.js +3 -5
  67. package/src/build/build-adapter.js +276 -139
  68. package/src/build/cache/build-input-fingerprint.js +28 -26
  69. package/src/build/cache/cache-constants.js +4 -6
  70. package/src/build/cache/cache-keys.js +64 -56
  71. package/src/build/cache/pages-unified-graph-build.js +179 -178
  72. package/src/build/cache/production-build-cache.js +47 -54
  73. package/src/build/cache/server-entry-build-cache.js +134 -146
  74. package/src/build/contracts/build-contracts.d.ts +4 -4
  75. package/src/build/contracts/build-contracts.js +1 -0
  76. package/src/build/contracts/build-manifest.js +58 -43
  77. package/src/build/contracts/build-types.js +1 -0
  78. package/src/build/rolldown/rolldown-adapter-helpers.d.ts +9 -0
  79. package/src/build/rolldown/rolldown-adapter-helpers.js +405 -298
  80. package/src/build/rolldown/rolldown-build-adapter.js +53 -61
  81. package/src/build/rolldown/rolldown-build-invocation-metrics.js +31 -35
  82. package/src/build/rolldown/rolldown-plugin-bridge.js +264 -194
  83. package/src/build/rolldown/rolldown-source-transform-pass.js +59 -50
  84. package/src/build/rolldown/runtime-build-output-normalizer.js +227 -175
  85. package/src/build/rolldown/server-side-css-shim-plugin.js +54 -31
  86. package/src/build/runtime/build-profile-options.js +36 -36
  87. package/src/build/runtime/build-request-identity.js +70 -45
  88. package/src/build/runtime/build-request-policy.js +80 -42
  89. package/src/build/runtime/build-runtime.js +64 -54
  90. package/src/build/runtime/deduping-build-executor.js +38 -32
  91. package/src/build/runtime/parallel-build-executor.js +58 -50
  92. package/src/build/runtime/serialized-build-executor.js +78 -62
  93. package/src/cache/index.js +6 -6
  94. package/src/cache/module-parse-cache.js +99 -68
  95. package/src/client/navigation-scripts/classification.js +45 -37
  96. package/src/client/navigation-scripts/index.js +3 -23
  97. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +58 -62
  98. package/src/client/navigation-scripts/registry.js +15 -11
  99. package/src/client/navigation-scripts/rerun-queue.js +81 -64
  100. package/src/client/scroll.js +32 -24
  101. package/src/client/scroll.test.browser.js +27 -33
  102. package/src/client/view-transitions.js +68 -55
  103. package/src/config/config-builder.d.ts +8 -0
  104. package/src/config/config-builder.js +637 -642
  105. package/src/config/constants.js +44 -24
  106. package/src/declarations.d.ts +1 -0
  107. package/src/dev/README.md +24 -0
  108. package/src/dev/client-bridge-registry.js +7 -12
  109. package/src/dev/dev-client-ownership.js +7 -5
  110. package/src/dev/hmr-manager-registry.js +7 -12
  111. package/src/dev/host-runtime.js +25 -30
  112. package/src/dev/runtime-server-started-message.js +2 -5
  113. package/src/dev/sc-server.js +106 -103
  114. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  115. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  116. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  117. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  118. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  119. package/src/dev/transform-server/dev-transform-import-rewriter.js +110 -0
  120. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  121. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  122. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  123. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  124. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  125. package/src/dev/transform-server/dev-transform-server.js +191 -0
  126. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  127. package/src/dev/transform-server/dev-transform-url.js +58 -0
  128. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +27 -0
  129. package/src/dev/transform-server/dev-transform-vendor-registry.js +145 -0
  130. package/src/dev/transform-server/index.d.ts +6 -0
  131. package/src/dev/transform-server/index.js +4 -0
  132. package/src/dev/transform-server/types.d.ts +15 -0
  133. package/src/dev/transform-server/types.js +1 -0
  134. package/src/dev-toolbar/README.md +51 -0
  135. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  136. package/src/dev-toolbar/define-dev-tool.js +9 -0
  137. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  138. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  139. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  140. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  141. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  142. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  143. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  144. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  145. package/src/dev-toolbar/dev-toolbar-package.d.ts +31 -0
  146. package/src/dev-toolbar/dev-toolbar-package.js +72 -0
  147. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  148. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  149. package/src/diagnostics/request-build-dedupe.js +34 -28
  150. package/src/diagnostics/startup-trace.d.ts +10 -1
  151. package/src/diagnostics/startup-trace.js +269 -241
  152. package/src/eco/README.md +6 -0
  153. package/src/eco/eco-declared-component.js +19 -14
  154. package/src/eco/eco.browser.js +56 -69
  155. package/src/eco/eco.js +156 -96
  156. package/src/eco/eco.types.js +5 -0
  157. package/src/eco/eco.utils.js +1 -10
  158. package/src/eco/global-injector-map.js +55 -41
  159. package/src/eco/lazy-injector-map.js +90 -60
  160. package/src/eco/module-dependencies.js +52 -44
  161. package/src/eco/page-layout-normalization.js +59 -49
  162. package/src/errors/http-error.js +50 -49
  163. package/src/errors/index.js +3 -12
  164. package/src/errors/locals-access-error.js +5 -8
  165. package/src/errors/undeclared-component-dependency-error.js +15 -15
  166. package/src/global/app-logger.js +3 -6
  167. package/src/hmr/README.md +10 -0
  168. package/src/hmr/client/hmr-runtime.js +117 -113
  169. package/src/hmr/client/module-update.d.ts +13 -0
  170. package/src/hmr/client/module-update.js +39 -0
  171. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  172. package/src/hmr/hmr-asset-paths.js +22 -0
  173. package/src/hmr/hmr-entrypoint-output.d.ts +11 -39
  174. package/src/hmr/hmr-entrypoint-output.js +28 -54
  175. package/src/hmr/hmr-file-change-prep.js +13 -16
  176. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  177. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  178. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  179. package/src/hmr/hmr-runtime-paths.js +13 -0
  180. package/src/hmr/hmr-strategy.d.ts +5 -11
  181. package/src/hmr/hmr-strategy.js +113 -61
  182. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  183. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -95
  184. package/src/hmr/strategies/js-hmr-strategy.js +104 -217
  185. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +33 -27
  186. package/src/index.browser.js +1 -4
  187. package/src/index.d.ts +1 -0
  188. package/src/index.js +6 -47
  189. package/src/integrations/ghtml/ghtml-renderer.js +12 -7
  190. package/src/integrations/ghtml/ghtml.constants.js +1 -4
  191. package/src/integrations/ghtml/ghtml.plugin.js +9 -12
  192. package/src/islands/README.md +25 -0
  193. package/src/islands/island-host.d.ts +37 -0
  194. package/src/islands/island-host.js +55 -0
  195. package/src/plugins/alias-resolver-cache.js +114 -97
  196. package/src/plugins/alias-resolver-plugin.js +33 -47
  197. package/src/plugins/define-integration.js +18 -17
  198. package/src/plugins/eco-component-meta-plugin.js +387 -145
  199. package/src/plugins/foreign-jsx-override-plugin.js +49 -35
  200. package/src/plugins/integration-plugin.js +212 -203
  201. package/src/plugins/jsx-import-source.utils.js +16 -21
  202. package/src/plugins/processor.js +159 -149
  203. package/src/plugins/runtime-capability.js +1 -0
  204. package/src/plugins/source-transform.js +109 -79
  205. package/src/plugins/tsconfig-import-resolver.d.ts +17 -0
  206. package/src/plugins/tsconfig-import-resolver.js +218 -142
  207. package/src/route-renderer/README.md +12 -1
  208. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +143 -136
  209. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +33 -27
  210. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +173 -126
  211. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +165 -154
  212. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +329 -341
  213. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +33 -32
  214. package/src/route-renderer/orchestration/integration-renderer.d.ts +1 -0
  215. package/src/route-renderer/orchestration/integration-renderer.js +731 -750
  216. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +168 -172
  217. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +119 -131
  218. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +82 -91
  219. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +82 -76
  220. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +29 -31
  221. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +10 -6
  222. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +31 -28
  223. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +3 -0
  224. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +430 -413
  225. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +191 -212
  226. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +20 -24
  227. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +4 -0
  228. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +24 -24
  229. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +22 -24
  230. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +41 -34
  231. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +5 -0
  232. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +42 -22
  233. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +50 -48
  234. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +29 -32
  235. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +150 -156
  236. package/src/route-renderer/orchestration/string-markup-renderer.js +48 -51
  237. package/src/route-renderer/page-loading/component-dependency-collection.js +120 -124
  238. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  239. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  240. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +68 -54
  241. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  242. package/src/route-renderer/page-loading/lazy-trigger-planning.js +46 -36
  243. package/src/route-renderer/page-loading/module-declaration-aggregation.js +38 -31
  244. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  245. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  246. package/src/route-renderer/page-loading/page-module-loader.js +130 -124
  247. package/src/route-renderer/route-renderer.js +74 -76
  248. package/src/router/client/link-intent.js +55 -39
  249. package/src/router/client/link-intent.test.browser.js +49 -49
  250. package/src/router/client/link-navigation-policy.js +114 -93
  251. package/src/router/client/link-navigation-policy.test.browser.js +70 -80
  252. package/src/router/client/navigation-coordinator.js +235 -211
  253. package/src/router/server/route-registry.js +237 -242
  254. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -53
  255. package/src/services/assets/asset-processing-service/asset-processing.service.js +287 -303
  256. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  257. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  258. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  259. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +106 -69
  260. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -53
  261. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +4 -6
  262. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +79 -80
  263. package/src/services/assets/asset-processing-service/index.js +8 -8
  264. package/src/services/assets/asset-processing-service/inline-content-script-body.js +22 -16
  265. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +21 -17
  266. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  267. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  268. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  269. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  270. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -117
  271. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  272. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +110 -115
  273. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -97
  274. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  275. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +27 -29
  276. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +34 -40
  277. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +36 -35
  278. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +14 -16
  279. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -39
  280. package/src/services/assets/browser-bundle.service.js +52 -47
  281. package/src/services/cache/cache.types.js +5 -0
  282. package/src/services/cache/index.js +6 -7
  283. package/src/services/cache/memory-cache-store.js +101 -89
  284. package/src/services/cache/page-cache-service.js +156 -145
  285. package/src/services/cache/page-request-cache-coordinator.service.js +102 -102
  286. package/src/services/html/html-rewriter-provider.service.js +61 -61
  287. package/src/services/html/html-transformer.service.js +249 -266
  288. package/src/services/invalidation/development-invalidation.service.js +252 -241
  289. package/src/services/module-loading/app-module-loader.service.js +1 -0
  290. package/src/services/module-loading/app-server-module-transpiler.service.js +107 -101
  291. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  292. package/src/services/module-loading/module-loading-types.js +1 -0
  293. package/src/services/module-loading/page-module-import.service.js +235 -243
  294. package/src/services/module-loading/route-module-build-cache-registry.js +47 -33
  295. package/src/services/module-loading/route-module-build-cache.js +3 -38
  296. package/src/services/module-loading/route-module-build-cache.store.js +195 -200
  297. package/src/services/module-loading/route-module-build-manifest.js +61 -74
  298. package/src/services/module-loading/route-module-dependency-hasher.js +136 -110
  299. package/src/services/module-loading/server-module-transpiler.service.js +68 -62
  300. package/src/services/module-loading/source-module-support.js +15 -7
  301. package/src/services/runtime-state/dev-graph.service.js +165 -157
  302. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  303. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  304. package/src/services/validation/schema-validation-service.js +157 -95
  305. package/src/services/validation/standard-schema.types.js +1 -0
  306. package/src/services/validation/validate-standard-schema.js +13 -13
  307. package/src/static-site-generator/production-page-browser-graph-prebuild.js +35 -19
  308. package/src/static-site-generator/sitemap-routes.js +33 -28
  309. package/src/static-site-generator/sitemap.js +38 -29
  310. package/src/static-site-generator/static-build-invalidation.js +34 -56
  311. package/src/static-site-generator/static-export-context.js +1 -0
  312. package/src/static-site-generator/static-site-generator.js +517 -553
  313. package/src/types/internal-types.d.ts +19 -3
  314. package/src/types/internal-types.js +1 -0
  315. package/src/types/public-types.d.ts +16 -46
  316. package/src/types/public-types.js +1 -0
  317. package/src/utils/deep-merge.js +39 -26
  318. package/src/utils/ecopages-route-info.js +27 -23
  319. package/src/utils/hash.js +3 -6
  320. package/src/utils/html-escaping.js +21 -8
  321. package/src/utils/html.js +1 -4
  322. package/src/utils/invariant.js +11 -10
  323. package/src/utils/locals-utils.js +32 -22
  324. package/src/utils/parse-cli-args.js +73 -65
  325. package/src/utils/path-pattern.js +38 -23
  326. package/src/utils/path-utils.module.js +8 -11
  327. package/src/utils/resolve-entry-file.js +70 -38
  328. package/src/utils/resolve-work-dir.js +23 -27
  329. package/src/utils/runtime.js +24 -33
  330. package/src/utils/server-utils.module.js +60 -52
  331. package/src/utils/static-file-extensions.js +52 -46
  332. package/src/watchers/project-watcher-ignore.js +16 -15
  333. package/src/watchers/project-watcher.js +385 -366
  334. package/src/watchers/project-watcher.test-helpers.js +45 -50
  335. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.d.ts +0 -56
  336. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +0 -106
  337. package/src/build/cache/dev-browser-script-cache.d.ts +0 -34
  338. package/src/build/cache/dev-browser-script-cache.js +0 -90
@@ -1,256 +1,248 @@
1
- import path from "node:path";
2
- import { pathToFileURL } from "node:url";
3
- import { fileSystem } from "@ecopages/file-system";
4
- import { build } from "../../build/build-adapter.js";
5
- import { createServerBuildRequest } from "../../build/runtime/build-request-policy.js";
6
- import { resolveBuildProfileOptions } from "../../build/runtime/build-profile-options.js";
7
- import {
8
- importPagesUnifiedGraphModule,
9
- isPagesUnifiedGraphPage,
10
- shouldBuildPagesUnifiedGraph
11
- } from "../../build/cache/pages-unified-graph-build.js";
12
- import { recordPageModuleBuildInvocation } from "../../build/rolldown/rolldown-build-invocation-metrics.js";
13
- import { resolvePageModuleOutputFileName } from "./route-module-build-cache.js";
14
- import { createPluginCacheKey, createJsxCacheKey } from "../../build/cache/cache-keys.js";
15
- import { getSharedRouteModuleBuildCache } from "./route-module-build-cache-registry.js";
16
- import {
17
- RouteModuleDependencyHasher,
18
- resolveRouteModuleDependencyPaths
19
- } from "./route-module-dependency-hasher.js";
20
- import { supportsSourceModuleLoading } from "./source-module-support.js";
21
- class PageModuleImportService {
22
- appConfig;
23
- dependencies;
24
- dependencyHasher;
25
- importCache = /* @__PURE__ */ new Map();
26
- developmentInvalidationVersion = 0;
27
- constructor(appConfig, dependencies) {
28
- this.appConfig = appConfig;
29
- this.dependencies = {
30
- hashFile: dependencies?.hashFile ?? ((filePath) => fileSystem.hash(filePath)),
31
- buildModule: dependencies?.buildModule ?? ((options, buildExecutor) => build(options, buildExecutor)),
32
- canLoadSourceModuleFromHost: dependencies?.canLoadSourceModuleFromHost ?? supportsSourceModuleLoading,
33
- getHostModuleLoader: dependencies?.getHostModuleLoader ?? (() => void 0)
34
- };
35
- this.dependencyHasher = new RouteModuleDependencyHasher({
36
- hashFile: (filePath) => this.dependencies.hashFile(filePath),
37
- exists: (filePath) => fileSystem.exists(filePath)
38
- });
39
- }
40
- /**
41
- * Clears the shared import cache used by framework-owned page-module loads.
42
- */
43
- clearImportCache() {
44
- this.importCache.clear();
45
- }
46
- /**
47
- * Invalidates all previously imported modules in development by clearing the
48
- * import cache and incrementing the invalidation version included in cache keys.
49
- *
50
- * This forces all modules to be reloaded on the next import, even if their
51
- * source content hasn't changed. This is necessary to ensure that changes to
52
- * non-content aspects of modules (e.g. dependencies, transpilation output)
53
- * are picked up during development.
54
- */
55
- invalidateDevelopmentGraph() {
56
- this.clearImportCache();
57
- this.dependencyHasher.clearMemo();
58
- this.developmentInvalidationVersion += 1;
59
- }
60
- /**
61
- * Imports a page-like module from source.
62
- *
63
- * The caller controls the output directory and error wording so different
64
- * subsystems can reuse the same loading mechanism while preserving their
65
- * current diagnostics. Module identities stay stable for unchanged files and
66
- * roll forward automatically when the source hash changes during watch mode.
67
- *
68
- * @typeParam T Expected module shape.
69
- * @param options Runtime-specific import settings.
70
- * @returns The loaded module.
71
- */
72
- async importModule(options) {
73
- const { filePath } = options;
74
- const invalidationVersion = options.invalidationVersion ?? this.developmentInvalidationVersion;
75
- const { externalPackages, splitting } = options;
76
- const fileHash = this.dependencies.hashFile(filePath);
77
- const hostModuleLoader = typeof Bun === "undefined" && process.env.NODE_ENV === "development" && this.dependencies.canLoadSourceModuleFromHost(filePath) ? this.dependencies.getHostModuleLoader() : void 0;
78
- if (hostModuleLoader) {
79
- const sourceModuleUrl = createRuntimeModuleUrl(filePath, fileHash, invalidationVersion, options.cacheScope);
80
- return await hostModuleLoader(sourceModuleUrl.href);
1
+ import path from 'node:path';
2
+ import { pathToFileURL } from 'node:url';
3
+ import { fileSystem } from '@ecopages/file-system';
4
+ import { build } from '../../build/build-adapter.js';
5
+ import { createServerBuildRequest } from '../../build/runtime/build-request-policy.js';
6
+ import { resolveBuildProfileOptions } from '../../build/runtime/build-profile-options.js';
7
+ import { importPagesUnifiedGraphModule, isPagesUnifiedGraphPage, shouldBuildPagesUnifiedGraph, } from '../../build/cache/pages-unified-graph-build.js';
8
+ import { recordPageModuleBuildInvocation } from '../../build/rolldown/rolldown-build-invocation-metrics.js';
9
+ import { resolvePageModuleOutputFileName } from './route-module-build-cache.js';
10
+ import { createPluginCacheKey, createJsxCacheKey } from '../../build/cache/cache-keys.js';
11
+ import { getSharedRouteModuleBuildCache } from './route-module-build-cache-registry.js';
12
+ import { RouteModuleDependencyHasher, resolveRouteModuleDependencyPaths, } from './route-module-dependency-hasher.js';
13
+ import { supportsSourceModuleLoading } from './source-module-support.js';
14
+ /**
15
+ * Loads page-like modules through the Ecopages build pipeline.
16
+ *
17
+ * This service centralizes the shared build-first import strategy used by route
18
+ * scanning, page data loading, and request-time page inspection. In Node
19
+ * development it can still delegate compatible source imports to the active
20
+ * host loader, but the public contract remains one transpile-targeted module
21
+ * loading path.
22
+ *
23
+ * Keeping this logic in one place prevents subtle drift in cache-busting,
24
+ * transpilation settings, and error semantics across the different callers.
25
+ */
26
+ export class PageModuleImportService {
27
+ appConfig;
28
+ dependencies;
29
+ dependencyHasher;
30
+ importCache = new Map();
31
+ developmentInvalidationVersion = 0;
32
+ constructor(appConfig, dependencies) {
33
+ this.appConfig = appConfig;
34
+ this.dependencies = {
35
+ hashFile: dependencies?.hashFile ?? ((filePath) => fileSystem.hash(filePath)),
36
+ buildModule: dependencies?.buildModule ?? ((options, buildExecutor) => build(options, buildExecutor)),
37
+ canLoadSourceModuleFromHost: dependencies?.canLoadSourceModuleFromHost ?? supportsSourceModuleLoading,
38
+ getHostModuleLoader: dependencies?.getHostModuleLoader ?? (() => undefined),
39
+ };
40
+ this.dependencyHasher = new RouteModuleDependencyHasher({
41
+ hashFile: (filePath) => this.dependencies.hashFile(filePath),
42
+ exists: (filePath) => fileSystem.exists(filePath),
43
+ });
81
44
  }
82
- if (options.bypassCache) {
83
- this.developmentInvalidationVersion += 1;
84
- return await this.loadModule({
85
- ...options,
86
- invalidationVersion: this.developmentInvalidationVersion,
87
- fileHash
88
- });
45
+ /**
46
+ * Clears the shared import cache used by framework-owned page-module loads.
47
+ */
48
+ clearImportCache() {
49
+ this.importCache.clear();
89
50
  }
90
- const runtime = typeof Bun !== "undefined" ? "bun" : "node-build";
91
- const cacheKey = [
92
- runtime,
93
- filePath,
94
- options.rootDir,
95
- path.resolve(options.outdir),
96
- splitting ?? "default",
97
- externalPackages ?? "default",
98
- options.cacheScope ?? "default",
99
- createJsxCacheKey(options.jsx),
100
- createPluginCacheKey(options.plugins),
101
- fileHash,
102
- invalidationVersion
103
- ].join("::");
104
- const cachedModule = this.importCache.get(cacheKey);
105
- if (cachedModule) {
106
- if (!cachedModule.dependencyHashes) {
107
- return await cachedModule.promise;
108
- }
109
- if (this.dependencyHasher.matchesStoredHashes(cachedModule.dependencyHashes, filePath, fileHash)) {
110
- return await cachedModule.promise;
111
- }
112
- this.importCache.delete(cacheKey);
51
+ /**
52
+ * Invalidates all previously imported modules in development by clearing the
53
+ * import cache and incrementing the invalidation version included in cache keys.
54
+ *
55
+ * This forces all modules to be reloaded on the next import, even if their
56
+ * source content hasn't changed. This is necessary to ensure that changes to
57
+ * non-content aspects of modules (e.g. dependencies, transpilation output)
58
+ * are picked up during development.
59
+ */
60
+ invalidateDevelopmentGraph() {
61
+ this.clearImportCache();
62
+ this.dependencyHasher.clearMemo();
63
+ this.developmentInvalidationVersion += 1;
113
64
  }
114
- const importPromise = this.loadModule({
115
- ...options,
116
- fileHash,
117
- importCacheKey: cacheKey
118
- });
119
- this.importCache.set(cacheKey, { promise: importPromise });
120
- try {
121
- return await importPromise;
122
- } catch (error) {
123
- this.importCache.delete(cacheKey);
124
- throw error;
65
+ /**
66
+ * Imports a page-like module from source.
67
+ *
68
+ * The caller controls the output directory and error wording so different
69
+ * subsystems can reuse the same loading mechanism while preserving their
70
+ * current diagnostics. Module identities stay stable for unchanged files and
71
+ * roll forward automatically when the source hash changes during watch mode.
72
+ *
73
+ * @typeParam T Expected module shape.
74
+ * @param options Runtime-specific import settings.
75
+ * @returns The loaded module.
76
+ */
77
+ async importModule(options) {
78
+ const { filePath } = options;
79
+ const invalidationVersion = options.invalidationVersion ?? this.developmentInvalidationVersion;
80
+ const { externalPackages, splitting } = options;
81
+ const fileHash = this.dependencies.hashFile(filePath);
82
+ const hostModuleLoader = typeof Bun === 'undefined' &&
83
+ process.env.NODE_ENV === 'development' &&
84
+ this.dependencies.canLoadSourceModuleFromHost(filePath)
85
+ ? this.dependencies.getHostModuleLoader()
86
+ : undefined;
87
+ if (hostModuleLoader) {
88
+ const sourceModuleUrl = createRuntimeModuleUrl(filePath, fileHash, invalidationVersion, options.cacheScope);
89
+ return (await hostModuleLoader(sourceModuleUrl.href));
90
+ }
91
+ if (options.bypassCache) {
92
+ this.developmentInvalidationVersion += 1;
93
+ return await this.loadModule({
94
+ ...options,
95
+ invalidationVersion: this.developmentInvalidationVersion,
96
+ fileHash,
97
+ });
98
+ }
99
+ const runtime = typeof Bun !== 'undefined' ? 'bun' : 'node-build';
100
+ const cacheKey = [
101
+ runtime,
102
+ filePath,
103
+ options.rootDir,
104
+ path.resolve(options.outdir),
105
+ splitting ?? 'default',
106
+ externalPackages ?? 'default',
107
+ options.cacheScope ?? 'default',
108
+ createJsxCacheKey(options.jsx),
109
+ createPluginCacheKey(options.plugins),
110
+ fileHash,
111
+ invalidationVersion,
112
+ ].join('::');
113
+ const cachedModule = this.importCache.get(cacheKey);
114
+ if (cachedModule) {
115
+ if (!cachedModule.dependencyHashes) {
116
+ return (await cachedModule.promise);
117
+ }
118
+ if (this.dependencyHasher.matchesStoredHashes(cachedModule.dependencyHashes, filePath, fileHash)) {
119
+ return (await cachedModule.promise);
120
+ }
121
+ this.importCache.delete(cacheKey);
122
+ }
123
+ const importPromise = this.loadModule({
124
+ ...options,
125
+ fileHash,
126
+ importCacheKey: cacheKey,
127
+ });
128
+ this.importCache.set(cacheKey, { promise: importPromise });
129
+ try {
130
+ return await importPromise;
131
+ }
132
+ catch (error) {
133
+ this.importCache.delete(cacheKey);
134
+ throw error;
135
+ }
125
136
  }
126
- }
127
- async loadModule(options) {
128
- const {
129
- filePath,
130
- invalidationVersion = this.developmentInvalidationVersion,
131
- cacheScope,
132
- fileHash,
133
- importCacheKey
134
- } = options;
135
- const {
136
- rootDir,
137
- outdir,
138
- splitting,
139
- externalPackages,
140
- transpileErrorMessage = (details) => `Error transpiling page module: ${details}`,
141
- noOutputMessage = (targetFilePath) => `No transpiled output generated for page module: ${targetFilePath}`
142
- } = options;
143
- const outputFileName = resolvePageModuleOutputFileName({
144
- filePath,
145
- fileHash,
146
- cacheScope,
147
- invalidationVersion
148
- });
149
- const outputNamingTemplate = outputFileName.replace(/\.mjs$/u, ".[ext]");
150
- const preferredOutputPath = path.join(outdir, outputFileName);
151
- const buildOptions = this.appConfig ? createServerBuildRequest(this.appConfig, {
152
- profile: "route-module",
153
- entrypoints: [filePath],
154
- outdir,
155
- naming: outputNamingTemplate,
156
- splitting: splitting ?? true,
157
- jsx: options.jsx,
158
- plugins: options.plugins,
159
- root: rootDir,
160
- ...externalPackages !== void 0 ? { externalPackages } : {}
161
- }) : {
162
- ...resolveBuildProfileOptions("route-module", { rootDir }, {
163
- entrypoints: [filePath],
164
- outdir,
165
- naming: outputNamingTemplate,
166
- splitting: splitting ?? true,
167
- jsx: options.jsx,
168
- plugins: options.plugins,
169
- ...externalPackages !== void 0 ? { externalPackages } : {}
170
- }),
171
- root: rootDir,
172
- entrypoints: [filePath]
173
- };
174
- const cacheBuildOptions = {
175
- ...options,
176
- rootDir: buildOptions.root ?? rootDir,
177
- outdir: buildOptions.outdir ?? outdir,
178
- splitting: buildOptions.splitting,
179
- externalPackages: buildOptions.externalPackages,
180
- jsx: buildOptions.jsx,
181
- plugins: buildOptions.plugins,
182
- fileHash
183
- };
184
- const routeModuleBuildCache = this.getRouteModuleBuildCache(outdir);
185
- const cachedBuild = routeModuleBuildCache.lookup(cacheBuildOptions);
186
- if (cachedBuild) {
187
- return await import(
188
- /* @vite-ignore */
189
- pathToFileURL(cachedBuild.outputPath).href
190
- );
137
+ async loadModule(options) {
138
+ const { filePath, invalidationVersion = this.developmentInvalidationVersion, cacheScope, fileHash, importCacheKey, } = options;
139
+ const { rootDir, outdir, splitting, externalPackages, transpileErrorMessage = (details) => `Error transpiling page module: ${details}`, noOutputMessage = (targetFilePath) => `No transpiled output generated for page module: ${targetFilePath}`, } = options;
140
+ const outputFileName = resolvePageModuleOutputFileName({
141
+ filePath,
142
+ fileHash,
143
+ cacheScope,
144
+ invalidationVersion,
145
+ });
146
+ const outputNamingTemplate = outputFileName.replace(/\.mjs$/u, '.[ext]');
147
+ const preferredOutputPath = path.join(outdir, outputFileName);
148
+ const buildOptions = this.appConfig
149
+ ? createServerBuildRequest(this.appConfig, {
150
+ profile: 'route-module',
151
+ entrypoints: [filePath],
152
+ outdir,
153
+ naming: outputNamingTemplate,
154
+ splitting: splitting ?? true,
155
+ jsx: options.jsx,
156
+ plugins: options.plugins,
157
+ root: rootDir,
158
+ ...(externalPackages !== undefined ? { externalPackages } : {}),
159
+ })
160
+ : {
161
+ ...resolveBuildProfileOptions('route-module', { rootDir }, {
162
+ entrypoints: [filePath],
163
+ outdir,
164
+ naming: outputNamingTemplate,
165
+ splitting: splitting ?? true,
166
+ jsx: options.jsx,
167
+ plugins: options.plugins,
168
+ ...(externalPackages !== undefined ? { externalPackages } : {}),
169
+ }),
170
+ root: rootDir,
171
+ entrypoints: [filePath],
172
+ };
173
+ const cacheBuildOptions = {
174
+ ...options,
175
+ rootDir: buildOptions.root ?? rootDir,
176
+ outdir: buildOptions.outdir ?? outdir,
177
+ splitting: buildOptions.splitting,
178
+ externalPackages: buildOptions.externalPackages,
179
+ jsx: buildOptions.jsx,
180
+ plugins: buildOptions.plugins,
181
+ fileHash,
182
+ };
183
+ const routeModuleBuildCache = this.getRouteModuleBuildCache(outdir);
184
+ const cachedBuild = routeModuleBuildCache.lookup(cacheBuildOptions);
185
+ if (cachedBuild) {
186
+ return (await import(/* @vite-ignore */ pathToFileURL(cachedBuild.outputPath).href));
187
+ }
188
+ if (!cacheScope &&
189
+ shouldBuildPagesUnifiedGraph() &&
190
+ this.appConfig &&
191
+ isPagesUnifiedGraphPage(filePath, this.appConfig)) {
192
+ const graphModule = await importPagesUnifiedGraphModule(this.appConfig, filePath);
193
+ if (graphModule !== undefined) {
194
+ return graphModule;
195
+ }
196
+ }
197
+ recordPageModuleBuildInvocation();
198
+ const buildResult = await this.dependencies.buildModule(buildOptions, options.buildExecutor);
199
+ if (!buildResult.success) {
200
+ const details = buildResult.logs.map((log) => log.message).join(' | ');
201
+ throw new Error(transpileErrorMessage(details));
202
+ }
203
+ const compiledOutput = buildResult.outputs.find((output) => output.path === preferredOutputPath)?.path ??
204
+ buildResult.outputs.find((output) => /\.(?:[cm]?js)$/u.test(output.path))?.path;
205
+ if (!compiledOutput) {
206
+ throw new Error(noOutputMessage(filePath));
207
+ }
208
+ const dependencyModulePaths = resolveRouteModuleDependencyPaths(buildResult, filePath, rootDir);
209
+ const dependencyHashes = this.dependencyHasher.createDependencyHashes(dependencyModulePaths);
210
+ dependencyHashes[path.normalize(filePath)] = fileHash;
211
+ if (importCacheKey) {
212
+ const cacheEntry = this.importCache.get(importCacheKey);
213
+ if (cacheEntry) {
214
+ cacheEntry.dependencyHashes = dependencyHashes;
215
+ }
216
+ }
217
+ routeModuleBuildCache.recordBuild({
218
+ ...cacheBuildOptions,
219
+ outputPath: compiledOutput,
220
+ dependencyModulePaths,
221
+ });
222
+ const compiledOutputUrl = pathToFileURL(compiledOutput);
223
+ if (shouldAddRuntimeUpdateQuery(invalidationVersion, cacheScope)) {
224
+ compiledOutputUrl.searchParams.set('update', [fileHash, invalidationVersion, cacheScope ? sanitizeCacheScope(cacheScope) : undefined]
225
+ .filter((value) => value !== undefined)
226
+ .join('-'));
227
+ }
228
+ return (await import(/* @vite-ignore */ compiledOutputUrl.href));
191
229
  }
192
- if (!cacheScope && shouldBuildPagesUnifiedGraph() && this.appConfig && isPagesUnifiedGraphPage(filePath, this.appConfig)) {
193
- const graphModule = await importPagesUnifiedGraphModule(this.appConfig, filePath);
194
- if (graphModule !== void 0) {
195
- return graphModule;
196
- }
230
+ getRouteModuleBuildCache(outdir) {
231
+ return getSharedRouteModuleBuildCache(outdir, this.appConfig);
197
232
  }
198
- recordPageModuleBuildInvocation();
199
- const buildResult = await this.dependencies.buildModule(buildOptions, options.buildExecutor);
200
- if (!buildResult.success) {
201
- const details = buildResult.logs.map((log) => log.message).join(" | ");
202
- throw new Error(transpileErrorMessage(details));
203
- }
204
- const compiledOutput = buildResult.outputs.find((output) => output.path === preferredOutputPath)?.path ?? buildResult.outputs.find((output) => /\.(?:[cm]?js)$/u.test(output.path))?.path;
205
- if (!compiledOutput) {
206
- throw new Error(noOutputMessage(filePath));
207
- }
208
- const dependencyModulePaths = resolveRouteModuleDependencyPaths(buildResult, filePath, rootDir);
209
- const dependencyHashes = this.dependencyHasher.createDependencyHashes(dependencyModulePaths);
210
- dependencyHashes[path.normalize(filePath)] = fileHash;
211
- if (importCacheKey) {
212
- const cacheEntry = this.importCache.get(importCacheKey);
213
- if (cacheEntry) {
214
- cacheEntry.dependencyHashes = dependencyHashes;
215
- }
216
- }
217
- routeModuleBuildCache.recordBuild({
218
- ...cacheBuildOptions,
219
- outputPath: compiledOutput,
220
- dependencyModulePaths
221
- });
222
- const compiledOutputUrl = pathToFileURL(compiledOutput);
223
- if (shouldAddRuntimeUpdateQuery(invalidationVersion, cacheScope)) {
224
- compiledOutputUrl.searchParams.set(
225
- "update",
226
- [fileHash, invalidationVersion, cacheScope ? sanitizeCacheScope(cacheScope) : void 0].filter((value) => value !== void 0).join("-")
227
- );
228
- }
229
- return await import(
230
- /* @vite-ignore */
231
- compiledOutputUrl.href
232
- );
233
- }
234
- getRouteModuleBuildCache(outdir) {
235
- return getSharedRouteModuleBuildCache(outdir, this.appConfig);
236
- }
237
233
  }
238
234
  function createRuntimeModuleUrl(filePath, fileHash, invalidationVersion, cacheScope) {
239
- const moduleUrl = pathToFileURL(filePath);
240
- if (shouldAddRuntimeUpdateQuery(invalidationVersion, cacheScope)) {
241
- moduleUrl.searchParams.set(
242
- "update",
243
- [fileHash, invalidationVersion, cacheScope ? sanitizeCacheScope(cacheScope) : void 0].filter((value) => value !== void 0).join("-")
244
- );
245
- }
246
- return moduleUrl;
235
+ const moduleUrl = pathToFileURL(filePath);
236
+ if (shouldAddRuntimeUpdateQuery(invalidationVersion, cacheScope)) {
237
+ moduleUrl.searchParams.set('update', [fileHash, invalidationVersion, cacheScope ? sanitizeCacheScope(cacheScope) : undefined]
238
+ .filter((value) => value !== undefined)
239
+ .join('-'));
240
+ }
241
+ return moduleUrl;
247
242
  }
248
243
  function shouldAddRuntimeUpdateQuery(invalidationVersion, cacheScope) {
249
- return process.env.NODE_ENV === "development" || invalidationVersion > 0 || !!cacheScope;
244
+ return process.env.NODE_ENV === 'development' || invalidationVersion > 0 || !!cacheScope;
250
245
  }
251
246
  function sanitizeCacheScope(cacheScope) {
252
- return cacheScope.replace(/[^a-zA-Z0-9_-]+/g, "-");
247
+ return cacheScope.replace(/[^a-zA-Z0-9_-]+/g, '-');
253
248
  }
254
- export {
255
- PageModuleImportService
256
- };
@@ -1,37 +1,51 @@
1
- import path from "node:path";
2
- import { resolveInternalExecutionDir } from "../../utils/resolve-work-dir.js";
3
- import { RouteModuleBuildCache } from "./route-module-build-cache.store.js";
4
- function getServerModuleBuildCacheOutdir(appConfig) {
5
- return path.join(resolveInternalExecutionDir(appConfig), ".server-modules");
1
+ import path from 'node:path';
2
+ import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
3
+ import { RouteModuleBuildCache } from './route-module-build-cache.store.js';
4
+ /**
5
+ * Returns the outdir whose transpile cache backs incremental static generation.
6
+ *
7
+ * @remarks
8
+ * Static pages render through `.eco/.server-modules`. The manifest there carries
9
+ * import-graph hashes from transpile, so static-render reuse must read the same
10
+ * directory rather than `.server-route-modules`, which only serves route-registry
11
+ * scanning.
12
+ */
13
+ export function getServerModuleBuildCacheOutdir(appConfig) {
14
+ return path.join(resolveInternalExecutionDir(appConfig), '.server-modules');
6
15
  }
7
- const getRouteModuleBuildCacheOutdir = getServerModuleBuildCacheOutdir;
16
+ /**
17
+ * @deprecated Use {@link getServerModuleBuildCacheOutdir}.
18
+ */
19
+ export const getRouteModuleBuildCacheOutdir = getServerModuleBuildCacheOutdir;
8
20
  function getRouteModuleBuildCacheMap(appConfig) {
9
- const existing = appConfig.runtime?.routeModuleBuildCaches;
10
- if (existing) {
11
- return existing;
12
- }
13
- const routeModuleBuildCaches = /* @__PURE__ */ new Map();
14
- appConfig.runtime = {
15
- ...appConfig.runtime ?? {},
16
- routeModuleBuildCaches
17
- };
18
- return routeModuleBuildCaches;
21
+ const existing = appConfig.runtime?.routeModuleBuildCaches;
22
+ if (existing) {
23
+ return existing;
24
+ }
25
+ const routeModuleBuildCaches = new Map();
26
+ appConfig.runtime = {
27
+ ...(appConfig.runtime ?? {}),
28
+ routeModuleBuildCaches,
29
+ };
30
+ return routeModuleBuildCaches;
19
31
  }
20
- function getSharedRouteModuleBuildCache(outdir, appConfig) {
21
- if (!appConfig) {
22
- return new RouteModuleBuildCache(outdir);
23
- }
24
- const caches = getRouteModuleBuildCacheMap(appConfig);
25
- const existingCache = caches.get(outdir);
26
- if (existingCache) {
27
- return existingCache;
28
- }
29
- const routeModuleBuildCache = new RouteModuleBuildCache(outdir);
30
- caches.set(outdir, routeModuleBuildCache);
31
- return routeModuleBuildCache;
32
+ /**
33
+ * Returns the shared production build cache for one server-module outdir.
34
+ *
35
+ * @remarks
36
+ * One app-scoped instance prevents manifest drift between page imports and static
37
+ * generation during the same build process.
38
+ */
39
+ export function getSharedRouteModuleBuildCache(outdir, appConfig) {
40
+ if (!appConfig) {
41
+ return new RouteModuleBuildCache(outdir);
42
+ }
43
+ const caches = getRouteModuleBuildCacheMap(appConfig);
44
+ const existingCache = caches.get(outdir);
45
+ if (existingCache) {
46
+ return existingCache;
47
+ }
48
+ const routeModuleBuildCache = new RouteModuleBuildCache(outdir);
49
+ caches.set(outdir, routeModuleBuildCache);
50
+ return routeModuleBuildCache;
32
51
  }
33
- export {
34
- getRouteModuleBuildCacheOutdir,
35
- getServerModuleBuildCacheOutdir,
36
- getSharedRouteModuleBuildCache
37
- };
@@ -1,38 +1,3 @@
1
- import {
2
- ROUTE_MODULE_BUILD_CACHE_FILENAME,
3
- createEmptyRouteModuleBuildCacheManifest,
4
- createPersistedRouteModuleBuildKey,
5
- createPluginCacheKey,
6
- createJsxCacheKey,
7
- hashPluginSetup,
8
- getCorePackageVersion,
9
- normalizeRouteModuleCachePath,
10
- readRouteModuleBuildCacheManifest,
11
- resolvePageModuleOutputFileName,
12
- shouldPersistRouteModuleBuildCache,
13
- writeRouteModuleBuildCacheManifest
14
- } from "./route-module-build-manifest.js";
15
- import { RouteModuleBuildCache } from "./route-module-build-cache.store.js";
16
- import {
17
- getRouteModuleBuildCacheOutdir,
18
- getServerModuleBuildCacheOutdir,
19
- getSharedRouteModuleBuildCache
20
- } from "./route-module-build-cache-registry.js";
21
- export {
22
- ROUTE_MODULE_BUILD_CACHE_FILENAME,
23
- RouteModuleBuildCache,
24
- createEmptyRouteModuleBuildCacheManifest,
25
- createJsxCacheKey,
26
- createPersistedRouteModuleBuildKey,
27
- createPluginCacheKey,
28
- getCorePackageVersion,
29
- getRouteModuleBuildCacheOutdir,
30
- getServerModuleBuildCacheOutdir,
31
- getSharedRouteModuleBuildCache,
32
- hashPluginSetup,
33
- normalizeRouteModuleCachePath,
34
- readRouteModuleBuildCacheManifest,
35
- resolvePageModuleOutputFileName,
36
- shouldPersistRouteModuleBuildCache,
37
- writeRouteModuleBuildCacheManifest
38
- };
1
+ export { ROUTE_MODULE_BUILD_CACHE_FILENAME, createEmptyRouteModuleBuildCacheManifest, createPersistedRouteModuleBuildKey, createPluginCacheKey, createJsxCacheKey, hashPluginSetup, getCorePackageVersion, normalizeRouteModuleCachePath, readRouteModuleBuildCacheManifest, resolvePageModuleOutputFileName, shouldPersistRouteModuleBuildCache, writeRouteModuleBuildCacheManifest, } from './route-module-build-manifest.js';
2
+ export { RouteModuleBuildCache } from './route-module-build-cache.store.js';
3
+ export { getRouteModuleBuildCacheOutdir, getServerModuleBuildCacheOutdir, getSharedRouteModuleBuildCache, } from './route-module-build-cache-registry.js';