@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,198 +1,199 @@
1
- import path from "node:path";
2
- import { pathToFileURL } from "node:url";
3
- import { fileSystem } from "@ecopages/file-system";
4
- import { appLogger } from "../../global/app-logger.js";
5
- import { build } from "../build-adapter.js";
6
- import { requireBuildRuntime } from "../runtime/build-runtime.js";
7
- import { createServerBuildRequest, resolveServerAppBuildPlugins } from "../runtime/build-request-policy.js";
8
- import { createBuildInputsFingerprint, hashAppConfigFile } from "./build-input-fingerprint.js";
9
- import {
10
- isProductionCacheManifestCurrent,
11
- matchesProductionCacheBuildKey,
12
- matchesProductionCacheFingerprint,
13
- readProductionCacheManifest,
14
- writeProductionCacheManifest
15
- } from "./production-build-cache.js";
16
- import { getCorePackageVersion } from "./cache-keys.js";
17
- import { resolveInternalExecutionDir } from "../../utils/resolve-work-dir.js";
18
- import { getSharedRouteModuleBuildCache } from "../../services/module-loading/route-module-build-cache-registry.js";
19
- import { resolveRouteModuleDependencyPaths } from "../../services/module-loading/route-module-dependency-hasher.js";
20
- const PAGES_UNIFIED_GRAPH_CACHE_DIR = ".server-pages-graph";
21
- const PAGES_UNIFIED_GRAPH_CACHE_FILENAME = ".build-cache.json";
22
- function isPagesUnifiedGraphEnabled() {
23
- if (process.env.ECOPAGES_UNIFIED_PAGES_GRAPH === "0") {
24
- return false;
25
- }
26
- if (process.env.ECOPAGES_UNIFIED_PAGES_GRAPH === "1") {
27
- return true;
28
- }
29
- return process.env.NODE_ENV === "production";
1
+ /**
2
+ * Unified pages Rolldown graph (Phase A build + Phase C import).
3
+ *
4
+ * Enabled by default in production builds. Opt out with
5
+ * `ECOPAGES_UNIFIED_PAGES_GRAPH=0`. Covers all static page template extensions
6
+ * registered on the app config.
7
+ */
8
+ import path from 'node:path';
9
+ import { pathToFileURL } from 'node:url';
10
+ import { fileSystem } from '@ecopages/file-system';
11
+ import { appLogger } from '../../global/app-logger.js';
12
+ import { build } from '../build-adapter.js';
13
+ import { requireBuildRuntime } from '../runtime/build-runtime.js';
14
+ import { createServerBuildRequest, resolveServerAppBuildPlugins } from '../runtime/build-request-policy.js';
15
+ import { createBuildInputsFingerprint, hashAppConfigFile } from './build-input-fingerprint.js';
16
+ import { isProductionCacheManifestCurrent, matchesProductionCacheBuildKey, matchesProductionCacheFingerprint, readProductionCacheManifest, writeProductionCacheManifest, } from './production-build-cache.js';
17
+ import { getCorePackageVersion } from './cache-keys.js';
18
+ import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
19
+ import { getSharedRouteModuleBuildCache } from '../../services/module-loading/route-module-build-cache-registry.js';
20
+ import { resolveRouteModuleDependencyPaths } from '../../services/module-loading/route-module-dependency-hasher.js';
21
+ export const PAGES_UNIFIED_GRAPH_CACHE_DIR = '.server-pages-graph';
22
+ export const PAGES_UNIFIED_GRAPH_CACHE_FILENAME = '.build-cache.json';
23
+ export function isPagesUnifiedGraphEnabled() {
24
+ if (process.env.ECOPAGES_UNIFIED_PAGES_GRAPH === '0') {
25
+ return false;
26
+ }
27
+ if (process.env.ECOPAGES_UNIFIED_PAGES_GRAPH === '1') {
28
+ return true;
29
+ }
30
+ return process.env.NODE_ENV === 'production';
30
31
  }
31
- function shouldBuildPagesUnifiedGraph() {
32
- return isPagesUnifiedGraphEnabled() && process.env.NODE_ENV === "production";
32
+ /** True when the unified graph should build or serve prebuilt page modules. */
33
+ export function shouldBuildPagesUnifiedGraph() {
34
+ return isPagesUnifiedGraphEnabled() && process.env.NODE_ENV === 'production';
33
35
  }
34
- function isPagesUnifiedGraphPage(filePath, appConfig) {
35
- const normalizedPath = path.normalize(filePath);
36
- return appConfig.templatesExt.some((extension) => normalizedPath.endsWith(extension));
36
+ export function isPagesUnifiedGraphPage(filePath, appConfig) {
37
+ const normalizedPath = path.normalize(filePath);
38
+ return appConfig.templatesExt.some((extension) => normalizedPath.endsWith(extension));
37
39
  }
38
40
  function getPagesUnifiedGraphCachePath(appConfig) {
39
- return path.join(
40
- resolveInternalExecutionDir(appConfig),
41
- PAGES_UNIFIED_GRAPH_CACHE_DIR,
42
- PAGES_UNIFIED_GRAPH_CACHE_FILENAME
43
- );
41
+ return path.join(resolveInternalExecutionDir(appConfig), PAGES_UNIFIED_GRAPH_CACHE_DIR, PAGES_UNIFIED_GRAPH_CACHE_FILENAME);
44
42
  }
45
43
  function createPagesUnifiedGraphBuildKey(appConfig, outdir) {
46
- const pluginNames = resolveServerAppBuildPlugins(appConfig).map((plugin) => plugin.name).sort().join("|");
47
- const templateExtensions = [...appConfig.templatesExt].sort().join("|");
48
- return [
49
- path.resolve(outdir),
50
- hashAppConfigFile(appConfig),
51
- templateExtensions,
52
- pluginNames,
53
- "es2022",
54
- "esm",
55
- "external-packages"
56
- ].join("::");
44
+ const pluginNames = resolveServerAppBuildPlugins(appConfig)
45
+ .map((plugin) => plugin.name)
46
+ .sort()
47
+ .join('|');
48
+ const templateExtensions = [...appConfig.templatesExt].sort().join('|');
49
+ return [
50
+ path.resolve(outdir),
51
+ hashAppConfigFile(appConfig),
52
+ templateExtensions,
53
+ pluginNames,
54
+ 'es2022',
55
+ 'esm',
56
+ 'external-packages',
57
+ ].join('::');
57
58
  }
58
59
  function readPagesUnifiedGraphManifest(appConfig) {
59
- const manifest = readProductionCacheManifest(
60
- getPagesUnifiedGraphCachePath(appConfig)
61
- );
62
- if (!manifest?.outputs) {
63
- return void 0;
64
- }
65
- return manifest;
60
+ const manifest = readProductionCacheManifest(getPagesUnifiedGraphCachePath(appConfig));
61
+ if (!manifest?.outputs) {
62
+ return undefined;
63
+ }
64
+ return manifest;
66
65
  }
67
66
  function writePagesUnifiedGraphManifest(appConfig, manifest) {
68
- writeProductionCacheManifest(getPagesUnifiedGraphCachePath(appConfig), manifest);
67
+ writeProductionCacheManifest(getPagesUnifiedGraphCachePath(appConfig), manifest);
69
68
  }
70
69
  function createSafeGraphEntryKey(entryPath, rootDir) {
71
- const relativePath = path.relative(rootDir, entryPath).replace(/\.[^.]+$/u, "");
72
- const safeKey = relativePath.replace(/[^a-zA-Z0-9]+/gu, "-").replace(/^-+|-+$/gu, "");
73
- return safeKey.length > 0 ? safeKey : "page";
70
+ const relativePath = path.relative(rootDir, entryPath).replace(/\.[^.]+$/u, '');
71
+ const safeKey = relativePath.replace(/[^a-zA-Z0-9]+/gu, '-').replace(/^-+|-+$/gu, '');
72
+ return safeKey.length > 0 ? safeKey : 'page';
74
73
  }
74
+ /**
75
+ * @remarks
76
+ * Uses {@link BuildResult.entryOutputs} when present so resolution follows the
77
+ * bundler's `facadeModuleId` instead of guessing from sanitized entry keys.
78
+ * Basename prefix matching remains only as a fallback for backends that omit
79
+ * `entryOutputs`; it can mis-associate keys such as `pages-blog` and
80
+ * `pages-blog-index`.
81
+ */
75
82
  function resolveOutputForEntrypoint(entryPath, entryKey, buildResult) {
76
- const exactOutput = buildResult.entryOutputs?.[path.resolve(entryPath)];
77
- if (exactOutput) {
78
- return exactOutput;
79
- }
80
- for (const { path: outputPath } of buildResult.outputs) {
81
- const outputBaseName = path.basename(outputPath);
82
- if (outputBaseName.startsWith(`${entryKey}-`) && /\.(?:m?js)$/u.test(outputBaseName)) {
83
- return outputPath;
84
- }
85
- if (outputBaseName === `${entryKey}.js` || outputBaseName === `${entryKey}.mjs`) {
86
- return outputPath;
87
- }
88
- }
89
- return void 0;
83
+ const exactOutput = buildResult.entryOutputs?.[path.resolve(entryPath)];
84
+ if (exactOutput) {
85
+ return exactOutput;
86
+ }
87
+ for (const { path: outputPath } of buildResult.outputs) {
88
+ const outputBaseName = path.basename(outputPath);
89
+ if (outputBaseName.startsWith(`${entryKey}-`) && /\.(?:m?js)$/u.test(outputBaseName)) {
90
+ return outputPath;
91
+ }
92
+ if (outputBaseName === `${entryKey}.js` || outputBaseName === `${entryKey}.mjs`) {
93
+ return outputPath;
94
+ }
95
+ }
96
+ return undefined;
90
97
  }
91
98
  function isManifestValidForEntries(manifest, appConfig, outdir, entryPaths) {
92
- if (!isProductionCacheManifestCurrent(manifest, getCorePackageVersion())) {
93
- return false;
94
- }
95
- if (!matchesProductionCacheFingerprint(manifest, createBuildInputsFingerprint(appConfig))) {
96
- return false;
97
- }
98
- if (!matchesProductionCacheBuildKey(manifest, createPagesUnifiedGraphBuildKey(appConfig, outdir))) {
99
- return false;
100
- }
101
- return entryPaths.every((entryPath) => {
102
- const resolvedEntryPath = path.resolve(entryPath);
103
- const outputPath = manifest.outputs[resolvedEntryPath];
104
- return outputPath ? fileSystem.exists(outputPath) : false;
105
- });
99
+ if (!isProductionCacheManifestCurrent(manifest, getCorePackageVersion())) {
100
+ return false;
101
+ }
102
+ if (!matchesProductionCacheFingerprint(manifest, createBuildInputsFingerprint(appConfig))) {
103
+ return false;
104
+ }
105
+ if (!matchesProductionCacheBuildKey(manifest, createPagesUnifiedGraphBuildKey(appConfig, outdir))) {
106
+ return false;
107
+ }
108
+ return entryPaths.every((entryPath) => {
109
+ const resolvedEntryPath = path.resolve(entryPath);
110
+ const outputPath = manifest.outputs[resolvedEntryPath];
111
+ return outputPath ? fileSystem.exists(outputPath) : false;
112
+ });
106
113
  }
107
- async function ensurePagesUnifiedGraphBuilt(options) {
108
- if (!shouldBuildPagesUnifiedGraph()) {
109
- return void 0;
110
- }
111
- const eligibleEntryPaths = options.entryPaths.map((entryPath) => path.resolve(entryPath)).filter((entryPath) => isPagesUnifiedGraphPage(entryPath, options.appConfig));
112
- if (eligibleEntryPaths.length === 0) {
113
- return void 0;
114
- }
115
- const outdir = path.resolve(options.outdir);
116
- const existingManifest = options.force ? void 0 : readPagesUnifiedGraphManifest(options.appConfig);
117
- if (existingManifest && isManifestValidForEntries(existingManifest, options.appConfig, outdir, eligibleEntryPaths)) {
118
- appLogger.debug("Reusing pages unified graph cache");
119
- return existingManifest;
120
- }
121
- const routeModuleBuildCache = getSharedRouteModuleBuildCache(outdir, options.appConfig);
122
- const entryRecord = {};
123
- const entryKeysByPath = /* @__PURE__ */ new Map();
124
- for (const entryPath of eligibleEntryPaths) {
125
- const entryKey = createSafeGraphEntryKey(entryPath, options.appConfig.rootDir);
126
- entryRecord[entryKey] = entryPath;
127
- entryKeysByPath.set(entryPath, entryKey);
128
- }
129
- appLogger.debugTime("pagesUnifiedGraphBuild");
130
- const buildOptions = createServerBuildRequest(options.appConfig, {
131
- profile: "route-module",
132
- entrypoints: entryRecord,
133
- outdir,
134
- splitting: true,
135
- naming: "[name]-[hash].[ext]"
136
- });
137
- const plugins = buildOptions.plugins ?? [];
138
- const buildResult = await build(buildOptions, requireBuildRuntime(options.appConfig).getProfile("route-module"));
139
- appLogger.debugTimeEnd("pagesUnifiedGraphBuild");
140
- if (!buildResult.success) {
141
- const details = buildResult.logs.map((log) => log.message).join(" | ");
142
- throw new Error(`Pages unified graph build failed: ${details}`);
143
- }
144
- const outputs = {};
145
- for (const entryPath of eligibleEntryPaths) {
146
- const fileHash = fileSystem.hash(entryPath);
147
- const entryKey = entryKeysByPath.get(entryPath);
148
- const compiledOutput = entryKey ? resolveOutputForEntrypoint(entryPath, entryKey, buildResult) : void 0;
149
- if (!compiledOutput) {
150
- throw new Error(`Pages unified graph build produced no output for ${entryPath}`);
151
- }
152
- outputs[entryPath] = compiledOutput;
153
- routeModuleBuildCache.recordBuild({
154
- filePath: entryPath,
155
- rootDir: options.appConfig.rootDir,
156
- outdir,
157
- fileHash,
158
- outputPath: compiledOutput,
159
- dependencyModulePaths: resolveRouteModuleDependencyPaths(buildResult, entryPath, options.appConfig.rootDir),
160
- externalPackages: true,
161
- plugins
114
+ /**
115
+ * Builds eligible static pages in one Rolldown invocation and seeds route-module disk cache.
116
+ */
117
+ export async function ensurePagesUnifiedGraphBuilt(options) {
118
+ if (!shouldBuildPagesUnifiedGraph()) {
119
+ return undefined;
120
+ }
121
+ const eligibleEntryPaths = options.entryPaths
122
+ .map((entryPath) => path.resolve(entryPath))
123
+ .filter((entryPath) => isPagesUnifiedGraphPage(entryPath, options.appConfig));
124
+ if (eligibleEntryPaths.length === 0) {
125
+ return undefined;
126
+ }
127
+ const outdir = path.resolve(options.outdir);
128
+ const existingManifest = options.force ? undefined : readPagesUnifiedGraphManifest(options.appConfig);
129
+ if (existingManifest &&
130
+ isManifestValidForEntries(existingManifest, options.appConfig, outdir, eligibleEntryPaths)) {
131
+ appLogger.debug('Reusing pages unified graph cache');
132
+ return existingManifest;
133
+ }
134
+ const routeModuleBuildCache = getSharedRouteModuleBuildCache(outdir, options.appConfig);
135
+ const entryRecord = {};
136
+ const entryKeysByPath = new Map();
137
+ for (const entryPath of eligibleEntryPaths) {
138
+ const entryKey = createSafeGraphEntryKey(entryPath, options.appConfig.rootDir);
139
+ entryRecord[entryKey] = entryPath;
140
+ entryKeysByPath.set(entryPath, entryKey);
141
+ }
142
+ appLogger.debugTime('pagesUnifiedGraphBuild');
143
+ const buildOptions = createServerBuildRequest(options.appConfig, {
144
+ profile: 'route-module',
145
+ entrypoints: entryRecord,
146
+ outdir,
147
+ splitting: true,
148
+ naming: '[name]-[hash].[ext]',
162
149
  });
163
- }
164
- const manifest = {
165
- invalidationVersion: getCorePackageVersion(),
166
- buildInputsFingerprint: createBuildInputsFingerprint(options.appConfig),
167
- buildKey: createPagesUnifiedGraphBuildKey(options.appConfig, outdir),
168
- builtAt: Date.now(),
169
- outputs
170
- };
171
- writePagesUnifiedGraphManifest(options.appConfig, manifest);
172
- appLogger.debug(`Built pages unified graph for ${eligibleEntryPaths.length} entries`);
173
- return manifest;
150
+ const plugins = buildOptions.plugins ?? [];
151
+ const buildResult = await build(buildOptions, requireBuildRuntime(options.appConfig).getProfile('route-module'));
152
+ appLogger.debugTimeEnd('pagesUnifiedGraphBuild');
153
+ if (!buildResult.success) {
154
+ const details = buildResult.logs.map((log) => log.message).join(' | ');
155
+ throw new Error(`Pages unified graph build failed: ${details}`);
156
+ }
157
+ const outputs = {};
158
+ for (const entryPath of eligibleEntryPaths) {
159
+ const fileHash = fileSystem.hash(entryPath);
160
+ const entryKey = entryKeysByPath.get(entryPath);
161
+ const compiledOutput = entryKey ? resolveOutputForEntrypoint(entryPath, entryKey, buildResult) : undefined;
162
+ if (!compiledOutput) {
163
+ throw new Error(`Pages unified graph build produced no output for ${entryPath}`);
164
+ }
165
+ outputs[entryPath] = compiledOutput;
166
+ routeModuleBuildCache.recordBuild({
167
+ filePath: entryPath,
168
+ rootDir: options.appConfig.rootDir,
169
+ outdir,
170
+ fileHash,
171
+ outputPath: compiledOutput,
172
+ dependencyModulePaths: resolveRouteModuleDependencyPaths(buildResult, entryPath, options.appConfig.rootDir),
173
+ externalPackages: true,
174
+ plugins,
175
+ });
176
+ }
177
+ const manifest = {
178
+ invalidationVersion: getCorePackageVersion(),
179
+ buildInputsFingerprint: createBuildInputsFingerprint(options.appConfig),
180
+ buildKey: createPagesUnifiedGraphBuildKey(options.appConfig, outdir),
181
+ builtAt: Date.now(),
182
+ outputs,
183
+ };
184
+ writePagesUnifiedGraphManifest(options.appConfig, manifest);
185
+ appLogger.debug(`Built pages unified graph for ${eligibleEntryPaths.length} entries`);
186
+ return manifest;
174
187
  }
175
- async function importPagesUnifiedGraphModule(appConfig, filePath) {
176
- const manifest = readPagesUnifiedGraphManifest(appConfig);
177
- if (!manifest) {
178
- return void 0;
179
- }
180
- const resolvedFilePath = path.resolve(filePath);
181
- const outputPath = manifest.outputs[resolvedFilePath];
182
- if (!outputPath || !fileSystem.exists(outputPath)) {
183
- return void 0;
184
- }
185
- return await import(
186
- /* @vite-ignore */
187
- pathToFileURL(outputPath).href
188
- );
188
+ export async function importPagesUnifiedGraphModule(appConfig, filePath) {
189
+ const manifest = readPagesUnifiedGraphManifest(appConfig);
190
+ if (!manifest) {
191
+ return undefined;
192
+ }
193
+ const resolvedFilePath = path.resolve(filePath);
194
+ const outputPath = manifest.outputs[resolvedFilePath];
195
+ if (!outputPath || !fileSystem.exists(outputPath)) {
196
+ return undefined;
197
+ }
198
+ return (await import(/* @vite-ignore */ pathToFileURL(outputPath).href));
189
199
  }
190
- export {
191
- PAGES_UNIFIED_GRAPH_CACHE_DIR,
192
- PAGES_UNIFIED_GRAPH_CACHE_FILENAME,
193
- ensurePagesUnifiedGraphBuilt,
194
- importPagesUnifiedGraphModule,
195
- isPagesUnifiedGraphEnabled,
196
- isPagesUnifiedGraphPage,
197
- shouldBuildPagesUnifiedGraph
198
- };
@@ -1,63 +1,56 @@
1
- import { fileSystem } from "@ecopages/file-system";
2
- import path from "node:path";
3
- import { ROUTE_MODULE_BUILD_CACHE_FILENAME } from "./cache-constants.js";
4
- import { resolveInternalExecutionDir } from "../../utils/resolve-work-dir.js";
5
- const ROUTE_MODULE_CACHE_OUTDIRS = [".server-modules", ".server-route-modules"];
6
- const PAGES_GRAPH_CACHE_DIR = ".server-pages-graph";
7
- function getProductionBuildCacheManifestPaths(appConfig) {
8
- const executionDir = resolveInternalExecutionDir(appConfig);
9
- const paths = [];
10
- for (const subdir of ROUTE_MODULE_CACHE_OUTDIRS) {
11
- paths.push(path.join(executionDir, subdir, ROUTE_MODULE_BUILD_CACHE_FILENAME));
12
- }
13
- paths.push(path.join(executionDir, ".server-entry", ROUTE_MODULE_BUILD_CACHE_FILENAME));
14
- paths.push(path.join(executionDir, PAGES_GRAPH_CACHE_DIR, ROUTE_MODULE_BUILD_CACHE_FILENAME));
15
- return paths;
1
+ import { fileSystem } from '@ecopages/file-system';
2
+ import path from 'node:path';
3
+ import { ROUTE_MODULE_BUILD_CACHE_FILENAME } from './cache-constants.js';
4
+ import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
5
+ const ROUTE_MODULE_CACHE_OUTDIRS = ['.server-modules', '.server-route-modules'];
6
+ const PAGES_GRAPH_CACHE_DIR = '.server-pages-graph';
7
+ /** Returns every persisted production cache manifest path for one app. */
8
+ export function getProductionBuildCacheManifestPaths(appConfig) {
9
+ const executionDir = resolveInternalExecutionDir(appConfig);
10
+ const paths = [];
11
+ for (const subdir of ROUTE_MODULE_CACHE_OUTDIRS) {
12
+ paths.push(path.join(executionDir, subdir, ROUTE_MODULE_BUILD_CACHE_FILENAME));
13
+ }
14
+ paths.push(path.join(executionDir, '.server-entry', ROUTE_MODULE_BUILD_CACHE_FILENAME));
15
+ paths.push(path.join(executionDir, PAGES_GRAPH_CACHE_DIR, ROUTE_MODULE_BUILD_CACHE_FILENAME));
16
+ return paths;
16
17
  }
17
- function clearPersistedProductionBuildCacheManifests(appConfig) {
18
- if (process.env.NODE_ENV !== "production") {
19
- return;
20
- }
21
- for (const manifestPath of getProductionBuildCacheManifestPaths(appConfig)) {
22
- if (fileSystem.exists(manifestPath)) {
23
- fileSystem.remove(manifestPath);
18
+ /** Removes all persisted production cache manifests for one app. */
19
+ export function clearPersistedProductionBuildCacheManifests(appConfig) {
20
+ if (process.env.NODE_ENV !== 'production') {
21
+ return;
22
+ }
23
+ for (const manifestPath of getProductionBuildCacheManifestPaths(appConfig)) {
24
+ if (fileSystem.exists(manifestPath)) {
25
+ fileSystem.remove(manifestPath);
26
+ }
24
27
  }
25
- }
26
28
  }
27
- function readProductionCacheManifest(manifestPath) {
28
- if (!fileSystem.exists(manifestPath)) {
29
- return void 0;
30
- }
31
- try {
32
- const parsed = JSON.parse(fileSystem.readFileSync(manifestPath));
33
- if (!parsed || typeof parsed !== "object") {
34
- return void 0;
29
+ export function readProductionCacheManifest(manifestPath) {
30
+ if (!fileSystem.exists(manifestPath)) {
31
+ return undefined;
32
+ }
33
+ try {
34
+ const parsed = JSON.parse(fileSystem.readFileSync(manifestPath));
35
+ if (!parsed || typeof parsed !== 'object') {
36
+ return undefined;
37
+ }
38
+ return parsed;
39
+ }
40
+ catch {
41
+ return undefined;
35
42
  }
36
- return parsed;
37
- } catch {
38
- return void 0;
39
- }
40
43
  }
41
- function writeProductionCacheManifest(manifestPath, manifest) {
42
- fileSystem.ensureDir(path.dirname(manifestPath));
43
- fileSystem.write(manifestPath, `${JSON.stringify(manifest, null, " ")}
44
- `);
44
+ export function writeProductionCacheManifest(manifestPath, manifest) {
45
+ fileSystem.ensureDir(path.dirname(manifestPath));
46
+ fileSystem.write(manifestPath, `${JSON.stringify(manifest, null, '\t')}\n`);
45
47
  }
46
- function isProductionCacheManifestCurrent(manifest, invalidationVersion) {
47
- return manifest?.invalidationVersion === invalidationVersion;
48
+ export function isProductionCacheManifestCurrent(manifest, invalidationVersion) {
49
+ return manifest?.invalidationVersion === invalidationVersion;
48
50
  }
49
- function matchesProductionCacheFingerprint(manifest, buildInputsFingerprint) {
50
- return manifest?.buildInputsFingerprint === buildInputsFingerprint;
51
+ export function matchesProductionCacheFingerprint(manifest, buildInputsFingerprint) {
52
+ return manifest?.buildInputsFingerprint === buildInputsFingerprint;
51
53
  }
52
- function matchesProductionCacheBuildKey(manifest, buildKey) {
53
- return manifest?.buildKey === buildKey;
54
+ export function matchesProductionCacheBuildKey(manifest, buildKey) {
55
+ return manifest?.buildKey === buildKey;
54
56
  }
55
- export {
56
- clearPersistedProductionBuildCacheManifests,
57
- getProductionBuildCacheManifestPaths,
58
- isProductionCacheManifestCurrent,
59
- matchesProductionCacheBuildKey,
60
- matchesProductionCacheFingerprint,
61
- readProductionCacheManifest,
62
- writeProductionCacheManifest
63
- };