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

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 (343) hide show
  1. package/README.md +1 -0
  2. package/package.json +90 -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/README.md +23 -0
  249. package/src/router/client/link-intent.js +55 -39
  250. package/src/router/client/link-intent.test.browser.js +49 -49
  251. package/src/router/client/link-navigation-policy.js +114 -93
  252. package/src/router/client/link-navigation-policy.test.browser.js +70 -80
  253. package/src/router/client/navigation-coordinator.js +235 -211
  254. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  255. package/src/router/client/navigation-lifecycle.js +50 -0
  256. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  257. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  258. package/src/router/server/route-registry.js +237 -242
  259. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -53
  260. package/src/services/assets/asset-processing-service/asset-processing.service.js +287 -303
  261. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  262. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  263. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  264. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +106 -69
  265. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -53
  266. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +4 -6
  267. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +79 -80
  268. package/src/services/assets/asset-processing-service/index.js +8 -8
  269. package/src/services/assets/asset-processing-service/inline-content-script-body.js +22 -16
  270. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +21 -17
  271. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  272. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  273. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  274. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  275. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -117
  276. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  277. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +110 -115
  278. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -97
  279. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  280. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +27 -29
  281. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +34 -40
  282. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +36 -35
  283. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +14 -16
  284. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -39
  285. package/src/services/assets/browser-bundle.service.js +52 -47
  286. package/src/services/cache/cache.types.js +5 -0
  287. package/src/services/cache/index.js +6 -7
  288. package/src/services/cache/memory-cache-store.js +101 -89
  289. package/src/services/cache/page-cache-service.js +156 -145
  290. package/src/services/cache/page-request-cache-coordinator.service.js +102 -102
  291. package/src/services/html/html-rewriter-provider.service.js +61 -61
  292. package/src/services/html/html-transformer.service.js +249 -266
  293. package/src/services/invalidation/development-invalidation.service.js +252 -241
  294. package/src/services/module-loading/app-module-loader.service.js +1 -0
  295. package/src/services/module-loading/app-server-module-transpiler.service.js +107 -101
  296. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  297. package/src/services/module-loading/module-loading-types.js +1 -0
  298. package/src/services/module-loading/page-module-import.service.js +235 -243
  299. package/src/services/module-loading/route-module-build-cache-registry.js +47 -33
  300. package/src/services/module-loading/route-module-build-cache.js +3 -38
  301. package/src/services/module-loading/route-module-build-cache.store.js +195 -200
  302. package/src/services/module-loading/route-module-build-manifest.js +61 -74
  303. package/src/services/module-loading/route-module-dependency-hasher.js +136 -110
  304. package/src/services/module-loading/server-module-transpiler.service.js +68 -62
  305. package/src/services/module-loading/source-module-support.js +15 -7
  306. package/src/services/runtime-state/dev-graph.service.js +165 -157
  307. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  308. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  309. package/src/services/validation/schema-validation-service.js +157 -95
  310. package/src/services/validation/standard-schema.types.js +1 -0
  311. package/src/services/validation/validate-standard-schema.js +13 -13
  312. package/src/static-site-generator/production-page-browser-graph-prebuild.js +35 -19
  313. package/src/static-site-generator/sitemap-routes.js +33 -28
  314. package/src/static-site-generator/sitemap.js +38 -29
  315. package/src/static-site-generator/static-build-invalidation.js +34 -56
  316. package/src/static-site-generator/static-export-context.js +1 -0
  317. package/src/static-site-generator/static-site-generator.js +517 -553
  318. package/src/types/internal-types.d.ts +19 -3
  319. package/src/types/internal-types.js +1 -0
  320. package/src/types/public-types.d.ts +16 -46
  321. package/src/types/public-types.js +1 -0
  322. package/src/utils/deep-merge.js +39 -26
  323. package/src/utils/ecopages-route-info.js +27 -23
  324. package/src/utils/hash.js +3 -6
  325. package/src/utils/html-escaping.js +21 -8
  326. package/src/utils/html.js +1 -4
  327. package/src/utils/invariant.js +11 -10
  328. package/src/utils/locals-utils.js +32 -22
  329. package/src/utils/parse-cli-args.js +73 -65
  330. package/src/utils/path-pattern.js +38 -23
  331. package/src/utils/path-utils.module.js +8 -11
  332. package/src/utils/resolve-entry-file.js +70 -38
  333. package/src/utils/resolve-work-dir.js +23 -27
  334. package/src/utils/runtime.js +24 -33
  335. package/src/utils/server-utils.module.js +60 -52
  336. package/src/utils/static-file-extensions.js +52 -46
  337. package/src/watchers/project-watcher-ignore.js +16 -15
  338. package/src/watchers/project-watcher.js +385 -366
  339. package/src/watchers/project-watcher.test-helpers.js +45 -50
  340. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.d.ts +0 -56
  341. package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +0 -106
  342. package/src/build/cache/dev-browser-script-cache.d.ts +0 -34
  343. package/src/build/cache/dev-browser-script-cache.js +0 -90
@@ -1,162 +1,170 @@
1
- import {
2
- CounterServerInvalidationState,
3
- getAppServerInvalidationState,
4
- setAppServerInvalidationState
5
- } from "./server-invalidation-state.service.js";
6
- import {
7
- getAppEntrypointDependencyGraph,
8
- InMemoryEntrypointDependencyGraph,
9
- NoopEntrypointDependencyGraph,
10
- setAppEntrypointDependencyGraph
11
- } from "./entrypoint-dependency-graph.service.js";
12
- class NoopDevGraphService {
13
- invalidationState = new CounterServerInvalidationState();
14
- dependencyGraph = new NoopEntrypointDependencyGraph();
15
- /**
16
- * Returns the current coarse invalidation version.
17
- */
18
- getServerInvalidationVersion() {
19
- return this.invalidationState.getServerInvalidationVersion();
20
- }
21
- /**
22
- * Invalidates all server-side module state by incrementing the shared version.
23
- */
24
- invalidateServerModules(changedFiles) {
25
- this.invalidationState.invalidateServerModules(changedFiles);
26
- }
27
- /**
28
- * Indicates that this graph cannot target invalidation to one entrypoint set.
29
- */
30
- supportsSelectiveInvalidation() {
31
- return this.dependencyGraph.supportsSelectiveInvalidation();
32
- }
33
- /**
34
- * Returns an empty entrypoint set because this implementation stores no
35
- * dependency graph metadata.
36
- */
37
- getDependencyEntrypoints(filePath) {
38
- return this.dependencyGraph.getDependencyEntrypoints(filePath);
39
- }
40
- /**
41
- * Accepts dependency updates to preserve interface compatibility, but stores no
42
- * graph state in the noop implementation.
43
- */
44
- setEntrypointDependencies(entrypointPath, dependencies) {
45
- this.dependencyGraph.setEntrypointDependencies(entrypointPath, dependencies);
46
- }
47
- /**
48
- * Clears one entrypoint from the graph.
49
- *
50
- * @remarks
51
- * There is no stored graph state in this implementation, so this is a no-op.
52
- */
53
- clearEntrypointDependencies(entrypointPath) {
54
- this.dependencyGraph.clearEntrypointDependencies(entrypointPath);
55
- }
56
- /**
57
- * Resets graph-owned state for a fresh runtime cycle.
58
- */
59
- reset() {
60
- this.invalidationState.reset();
61
- this.dependencyGraph.reset();
62
- }
1
+ import { CounterServerInvalidationState, getAppServerInvalidationState, setAppServerInvalidationState, } from './server-invalidation-state.service.js';
2
+ import { getAppEntrypointDependencyGraph, InMemoryEntrypointDependencyGraph, NoopEntrypointDependencyGraph, setAppEntrypointDependencyGraph, } from './entrypoint-dependency-graph.service.js';
3
+ /**
4
+ * Minimal dev-graph implementation used when an app has no selective graph
5
+ * metadata available.
6
+ *
7
+ * @remarks
8
+ * This preserves correct behavior by using coarse invalidation version bumps.
9
+ * Callers still pass changed-file information through the interface now so a
10
+ * richer graph can become more selective later without changing call sites.
11
+ */
12
+ export class NoopDevGraphService {
13
+ invalidationState = new CounterServerInvalidationState();
14
+ dependencyGraph = new NoopEntrypointDependencyGraph();
15
+ /**
16
+ * Returns the current coarse invalidation version.
17
+ */
18
+ getServerInvalidationVersion() {
19
+ return this.invalidationState.getServerInvalidationVersion();
20
+ }
21
+ /**
22
+ * Invalidates all server-side module state by incrementing the shared version.
23
+ */
24
+ invalidateServerModules(changedFiles) {
25
+ this.invalidationState.invalidateServerModules(changedFiles);
26
+ }
27
+ /**
28
+ * Indicates that this graph cannot target invalidation to one entrypoint set.
29
+ */
30
+ supportsSelectiveInvalidation() {
31
+ return this.dependencyGraph.supportsSelectiveInvalidation();
32
+ }
33
+ /**
34
+ * Returns an empty entrypoint set because this implementation stores no
35
+ * dependency graph metadata.
36
+ */
37
+ getDependencyEntrypoints(filePath) {
38
+ return this.dependencyGraph.getDependencyEntrypoints(filePath);
39
+ }
40
+ /**
41
+ * Accepts dependency updates to preserve interface compatibility, but stores no
42
+ * graph state in the noop implementation.
43
+ */
44
+ setEntrypointDependencies(entrypointPath, dependencies) {
45
+ this.dependencyGraph.setEntrypointDependencies(entrypointPath, dependencies);
46
+ }
47
+ /**
48
+ * Clears one entrypoint from the graph.
49
+ *
50
+ * @remarks
51
+ * There is no stored graph state in this implementation, so this is a no-op.
52
+ */
53
+ clearEntrypointDependencies(entrypointPath) {
54
+ this.dependencyGraph.clearEntrypointDependencies(entrypointPath);
55
+ }
56
+ /**
57
+ * Resets graph-owned state for a fresh runtime cycle.
58
+ */
59
+ reset() {
60
+ this.invalidationState.reset();
61
+ this.dependencyGraph.reset();
62
+ }
63
63
  }
64
- class InMemoryDevGraphService {
65
- invalidationState = new CounterServerInvalidationState();
66
- dependencyGraph = new InMemoryEntrypointDependencyGraph();
67
- /**
68
- * Returns the current app-local server invalidation version.
69
- */
70
- getServerInvalidationVersion() {
71
- return this.invalidationState.getServerInvalidationVersion();
72
- }
73
- /**
74
- * Invalidates the current server-module cache generation.
75
- *
76
- * @remarks
77
- * The current implementation still uses a coarse generation bump for server
78
- * modules. Selective dependency lookups are used by callers that need to limit
79
- * browser rebuild work.
80
- */
81
- invalidateServerModules(changedFiles) {
82
- this.invalidationState.invalidateServerModules(changedFiles);
83
- }
84
- /**
85
- * Indicates that this graph can answer dependency-to-entrypoint lookups.
86
- */
87
- supportsSelectiveInvalidation() {
88
- return this.dependencyGraph.supportsSelectiveInvalidation();
89
- }
90
- /**
91
- * Returns all known entrypoints that currently depend on the given file.
92
- */
93
- getDependencyEntrypoints(filePath) {
94
- return this.dependencyGraph.getDependencyEntrypoints(filePath);
95
- }
96
- /**
97
- * Replaces the stored dependency set for one entrypoint.
98
- *
99
- * @remarks
100
- * The entrypoint itself is always included in its own dependency set so reverse
101
- * lookups can map a changed entry file back to that same entrypoint.
102
- */
103
- setEntrypointDependencies(entrypointPath, dependencies) {
104
- this.dependencyGraph.setEntrypointDependencies(entrypointPath, dependencies);
105
- }
106
- /**
107
- * Removes one entrypoint and all of its reverse dependency edges.
108
- */
109
- clearEntrypointDependencies(entrypointPath) {
110
- this.dependencyGraph.clearEntrypointDependencies(entrypointPath);
111
- }
112
- /**
113
- * Clears all graph state and starts a fresh invalidation generation.
114
- */
115
- reset() {
116
- this.invalidationState.reset();
117
- this.dependencyGraph.reset();
118
- }
64
+ /**
65
+ * In-memory development graph with entrypoint-to-dependency reverse lookups.
66
+ *
67
+ * @remarks
68
+ * This is the current selective graph implementation used by development flows
69
+ * that need to answer which entrypoints depend on a changed file while still
70
+ * keeping invalidation state app-local.
71
+ */
72
+ export class InMemoryDevGraphService {
73
+ invalidationState = new CounterServerInvalidationState();
74
+ dependencyGraph = new InMemoryEntrypointDependencyGraph();
75
+ /**
76
+ * Returns the current app-local server invalidation version.
77
+ */
78
+ getServerInvalidationVersion() {
79
+ return this.invalidationState.getServerInvalidationVersion();
80
+ }
81
+ /**
82
+ * Invalidates the current server-module cache generation.
83
+ *
84
+ * @remarks
85
+ * The current implementation still uses a coarse generation bump for server
86
+ * modules. Selective dependency lookups are used by callers that need to limit
87
+ * browser rebuild work.
88
+ */
89
+ invalidateServerModules(changedFiles) {
90
+ this.invalidationState.invalidateServerModules(changedFiles);
91
+ }
92
+ /**
93
+ * Indicates that this graph can answer dependency-to-entrypoint lookups.
94
+ */
95
+ supportsSelectiveInvalidation() {
96
+ return this.dependencyGraph.supportsSelectiveInvalidation();
97
+ }
98
+ /**
99
+ * Returns all known entrypoints that currently depend on the given file.
100
+ */
101
+ getDependencyEntrypoints(filePath) {
102
+ return this.dependencyGraph.getDependencyEntrypoints(filePath);
103
+ }
104
+ /**
105
+ * Replaces the stored dependency set for one entrypoint.
106
+ *
107
+ * @remarks
108
+ * The entrypoint itself is always included in its own dependency set so reverse
109
+ * lookups can map a changed entry file back to that same entrypoint.
110
+ */
111
+ setEntrypointDependencies(entrypointPath, dependencies) {
112
+ this.dependencyGraph.setEntrypointDependencies(entrypointPath, dependencies);
113
+ }
114
+ /**
115
+ * Removes one entrypoint and all of its reverse dependency edges.
116
+ */
117
+ clearEntrypointDependencies(entrypointPath) {
118
+ this.dependencyGraph.clearEntrypointDependencies(entrypointPath);
119
+ }
120
+ /**
121
+ * Clears all graph state and starts a fresh invalidation generation.
122
+ */
123
+ reset() {
124
+ this.invalidationState.reset();
125
+ this.dependencyGraph.reset();
126
+ }
119
127
  }
120
- function getAppDevGraphService(appConfig) {
121
- if (appConfig.runtime?.devGraphService) {
122
- return appConfig.runtime.devGraphService;
123
- }
124
- const serverInvalidationState = getAppServerInvalidationState(appConfig);
125
- const entrypointDependencyGraph = getAppEntrypointDependencyGraph(appConfig);
126
- return {
127
- getServerInvalidationVersion: () => serverInvalidationState.getServerInvalidationVersion(),
128
- invalidateServerModules: (changedFiles) => serverInvalidationState.invalidateServerModules(changedFiles),
129
- supportsSelectiveInvalidation: () => entrypointDependencyGraph.supportsSelectiveInvalidation(),
130
- getDependencyEntrypoints: (filePath) => entrypointDependencyGraph.getDependencyEntrypoints(filePath),
131
- setEntrypointDependencies: (entrypointPath, dependencies) => entrypointDependencyGraph.setEntrypointDependencies(entrypointPath, dependencies),
132
- clearEntrypointDependencies: (entrypointPath) => entrypointDependencyGraph.clearEntrypointDependencies(entrypointPath),
133
- reset: () => {
134
- serverInvalidationState.reset();
135
- entrypointDependencyGraph.reset();
128
+ /**
129
+ * Returns the dev-graph service owned by one app instance.
130
+ */
131
+ export function getAppDevGraphService(appConfig) {
132
+ if (appConfig.runtime?.devGraphService) {
133
+ return appConfig.runtime.devGraphService;
136
134
  }
137
- };
135
+ const serverInvalidationState = getAppServerInvalidationState(appConfig);
136
+ const entrypointDependencyGraph = getAppEntrypointDependencyGraph(appConfig);
137
+ return {
138
+ getServerInvalidationVersion: () => serverInvalidationState.getServerInvalidationVersion(),
139
+ invalidateServerModules: (changedFiles) => serverInvalidationState.invalidateServerModules(changedFiles),
140
+ supportsSelectiveInvalidation: () => entrypointDependencyGraph.supportsSelectiveInvalidation(),
141
+ getDependencyEntrypoints: (filePath) => entrypointDependencyGraph.getDependencyEntrypoints(filePath),
142
+ setEntrypointDependencies: (entrypointPath, dependencies) => entrypointDependencyGraph.setEntrypointDependencies(entrypointPath, dependencies),
143
+ clearEntrypointDependencies: (entrypointPath) => entrypointDependencyGraph.clearEntrypointDependencies(entrypointPath),
144
+ reset: () => {
145
+ serverInvalidationState.reset();
146
+ entrypointDependencyGraph.reset();
147
+ },
148
+ };
138
149
  }
139
- function setAppDevGraphService(appConfig, devGraphService) {
140
- setAppServerInvalidationState(appConfig, {
141
- getServerInvalidationVersion: () => devGraphService.getServerInvalidationVersion(),
142
- invalidateServerModules: (changedFiles) => devGraphService.invalidateServerModules(changedFiles),
143
- reset: () => devGraphService.reset()
144
- });
145
- setAppEntrypointDependencyGraph(appConfig, {
146
- supportsSelectiveInvalidation: () => devGraphService.supportsSelectiveInvalidation(),
147
- getDependencyEntrypoints: (filePath) => devGraphService.getDependencyEntrypoints(filePath),
148
- setEntrypointDependencies: (entrypointPath, dependencies) => devGraphService.setEntrypointDependencies(entrypointPath, dependencies),
149
- clearEntrypointDependencies: (entrypointPath) => devGraphService.clearEntrypointDependencies(entrypointPath),
150
- reset: () => devGraphService.reset()
151
- });
152
- appConfig.runtime = {
153
- ...appConfig.runtime ?? {},
154
- devGraphService
155
- };
150
+ /**
151
+ * Installs the dev-graph service that should back one app/runtime instance.
152
+ */
153
+ export function setAppDevGraphService(appConfig, devGraphService) {
154
+ setAppServerInvalidationState(appConfig, {
155
+ getServerInvalidationVersion: () => devGraphService.getServerInvalidationVersion(),
156
+ invalidateServerModules: (changedFiles) => devGraphService.invalidateServerModules(changedFiles),
157
+ reset: () => devGraphService.reset(),
158
+ });
159
+ setAppEntrypointDependencyGraph(appConfig, {
160
+ supportsSelectiveInvalidation: () => devGraphService.supportsSelectiveInvalidation(),
161
+ getDependencyEntrypoints: (filePath) => devGraphService.getDependencyEntrypoints(filePath),
162
+ setEntrypointDependencies: (entrypointPath, dependencies) => devGraphService.setEntrypointDependencies(entrypointPath, dependencies),
163
+ clearEntrypointDependencies: (entrypointPath) => devGraphService.clearEntrypointDependencies(entrypointPath),
164
+ reset: () => devGraphService.reset(),
165
+ });
166
+ appConfig.runtime = {
167
+ ...(appConfig.runtime ?? {}),
168
+ devGraphService,
169
+ };
156
170
  }
157
- export {
158
- InMemoryDevGraphService,
159
- NoopDevGraphService,
160
- getAppDevGraphService,
161
- setAppDevGraphService
162
- };
@@ -1,85 +1,94 @@
1
- import path from "node:path";
2
- class NoopEntrypointDependencyGraph {
3
- supportsSelectiveInvalidation() {
4
- return false;
5
- }
6
- getDependencyEntrypoints(_filePath) {
7
- return /* @__PURE__ */ new Set();
8
- }
9
- setEntrypointDependencies(_entrypointPath, _dependencies) {
10
- }
11
- clearEntrypointDependencies(_entrypointPath) {
12
- }
13
- reset() {
14
- }
1
+ import path from 'node:path';
2
+ /**
3
+ * Graph implementation for runtimes that rebuild every watched entrypoint.
4
+ */
5
+ export class NoopEntrypointDependencyGraph {
6
+ supportsSelectiveInvalidation() {
7
+ return false;
8
+ }
9
+ getDependencyEntrypoints(_filePath) {
10
+ return new Set();
11
+ }
12
+ setEntrypointDependencies(_entrypointPath, _dependencies) { }
13
+ clearEntrypointDependencies(_entrypointPath) { }
14
+ reset() { }
15
15
  }
16
- class InMemoryEntrypointDependencyGraph {
17
- dependencyEntrypoints = /* @__PURE__ */ new Map();
18
- entrypointDependencies = /* @__PURE__ */ new Map();
19
- supportsSelectiveInvalidation() {
20
- return true;
21
- }
22
- getDependencyEntrypoints(filePath) {
23
- return new Set(this.dependencyEntrypoints.get(path.resolve(filePath)) ?? []);
24
- }
25
- setEntrypointDependencies(entrypointPath, dependencies) {
26
- const normalizedEntrypoint = path.resolve(entrypointPath);
27
- this.clearEntrypointDependencies(normalizedEntrypoint);
28
- const normalizedDependencies = /* @__PURE__ */ new Set([
29
- normalizedEntrypoint,
30
- ...dependencies.map((dependencyPath) => path.resolve(dependencyPath))
31
- ]);
32
- this.entrypointDependencies.set(normalizedEntrypoint, normalizedDependencies);
33
- for (const dependencyPath of normalizedDependencies) {
34
- const entrypoints = this.dependencyEntrypoints.get(dependencyPath) ?? /* @__PURE__ */ new Set();
35
- entrypoints.add(normalizedEntrypoint);
36
- this.dependencyEntrypoints.set(dependencyPath, entrypoints);
16
+ /**
17
+ * In-memory entrypoint-to-dependency graph with reverse dependency lookups.
18
+ */
19
+ export class InMemoryEntrypointDependencyGraph {
20
+ dependencyEntrypoints = new Map();
21
+ entrypointDependencies = new Map();
22
+ supportsSelectiveInvalidation() {
23
+ return true;
24
+ }
25
+ getDependencyEntrypoints(filePath) {
26
+ return new Set(this.dependencyEntrypoints.get(path.resolve(filePath)) ?? []);
37
27
  }
38
- }
39
- clearEntrypointDependencies(entrypointPath) {
40
- const normalizedEntrypoint = path.resolve(entrypointPath);
41
- const previousDependencies = this.entrypointDependencies.get(normalizedEntrypoint);
42
- if (!previousDependencies) {
43
- return;
28
+ setEntrypointDependencies(entrypointPath, dependencies) {
29
+ const normalizedEntrypoint = path.resolve(entrypointPath);
30
+ this.clearEntrypointDependencies(normalizedEntrypoint);
31
+ const normalizedDependencies = new Set([
32
+ normalizedEntrypoint,
33
+ ...dependencies.map((dependencyPath) => path.resolve(dependencyPath)),
34
+ ]);
35
+ this.entrypointDependencies.set(normalizedEntrypoint, normalizedDependencies);
36
+ for (const dependencyPath of normalizedDependencies) {
37
+ const entrypoints = this.dependencyEntrypoints.get(dependencyPath) ?? new Set();
38
+ entrypoints.add(normalizedEntrypoint);
39
+ this.dependencyEntrypoints.set(dependencyPath, entrypoints);
40
+ }
44
41
  }
45
- for (const dependencyPath of previousDependencies) {
46
- const entrypoints = this.dependencyEntrypoints.get(dependencyPath);
47
- if (!entrypoints) {
48
- continue;
49
- }
50
- entrypoints.delete(normalizedEntrypoint);
51
- if (entrypoints.size === 0) {
52
- this.dependencyEntrypoints.delete(dependencyPath);
53
- }
42
+ clearEntrypointDependencies(entrypointPath) {
43
+ const normalizedEntrypoint = path.resolve(entrypointPath);
44
+ const previousDependencies = this.entrypointDependencies.get(normalizedEntrypoint);
45
+ if (!previousDependencies) {
46
+ return;
47
+ }
48
+ for (const dependencyPath of previousDependencies) {
49
+ const entrypoints = this.dependencyEntrypoints.get(dependencyPath);
50
+ if (!entrypoints) {
51
+ continue;
52
+ }
53
+ entrypoints.delete(normalizedEntrypoint);
54
+ if (entrypoints.size === 0) {
55
+ this.dependencyEntrypoints.delete(dependencyPath);
56
+ }
57
+ }
58
+ this.entrypointDependencies.delete(normalizedEntrypoint);
59
+ }
60
+ reset() {
61
+ this.dependencyEntrypoints.clear();
62
+ this.entrypointDependencies.clear();
54
63
  }
55
- this.entrypointDependencies.delete(normalizedEntrypoint);
56
- }
57
- reset() {
58
- this.dependencyEntrypoints.clear();
59
- this.entrypointDependencies.clear();
60
- }
61
64
  }
62
65
  function isLegacyEntrypointDependencyGraph(value) {
63
- return Boolean(value) && typeof value === "object" && typeof value.supportsSelectiveInvalidation === "function" && typeof value.getDependencyEntrypoints === "function" && typeof value.setEntrypointDependencies === "function" && typeof value.clearEntrypointDependencies === "function" && typeof value.reset === "function";
66
+ return (Boolean(value) &&
67
+ typeof value === 'object' &&
68
+ typeof value.supportsSelectiveInvalidation === 'function' &&
69
+ typeof value.getDependencyEntrypoints === 'function' &&
70
+ typeof value.setEntrypointDependencies === 'function' &&
71
+ typeof value.clearEntrypointDependencies === 'function' &&
72
+ typeof value.reset === 'function');
64
73
  }
65
- function getAppEntrypointDependencyGraph(appConfig) {
66
- if (appConfig.runtime?.entrypointDependencyGraph) {
67
- return appConfig.runtime.entrypointDependencyGraph;
68
- }
69
- if (isLegacyEntrypointDependencyGraph(appConfig.runtime?.devGraphService)) {
70
- return appConfig.runtime.devGraphService;
71
- }
72
- return new NoopEntrypointDependencyGraph();
74
+ /**
75
+ * Returns the app-owned entrypoint dependency graph.
76
+ */
77
+ export function getAppEntrypointDependencyGraph(appConfig) {
78
+ if (appConfig.runtime?.entrypointDependencyGraph) {
79
+ return appConfig.runtime.entrypointDependencyGraph;
80
+ }
81
+ if (isLegacyEntrypointDependencyGraph(appConfig.runtime?.devGraphService)) {
82
+ return appConfig.runtime.devGraphService;
83
+ }
84
+ return new NoopEntrypointDependencyGraph();
73
85
  }
74
- function setAppEntrypointDependencyGraph(appConfig, entrypointDependencyGraph) {
75
- appConfig.runtime = {
76
- ...appConfig.runtime ?? {},
77
- entrypointDependencyGraph
78
- };
86
+ /**
87
+ * Installs the dependency graph used by one app instance.
88
+ */
89
+ export function setAppEntrypointDependencyGraph(appConfig, entrypointDependencyGraph) {
90
+ appConfig.runtime = {
91
+ ...(appConfig.runtime ?? {}),
92
+ entrypointDependencyGraph,
93
+ };
79
94
  }
80
- export {
81
- InMemoryEntrypointDependencyGraph,
82
- NoopEntrypointDependencyGraph,
83
- getAppEntrypointDependencyGraph,
84
- setAppEntrypointDependencyGraph
85
- };
@@ -1,35 +1,43 @@
1
- class CounterServerInvalidationState {
2
- serverInvalidationVersion = 0;
3
- getServerInvalidationVersion() {
4
- return this.serverInvalidationVersion;
5
- }
6
- invalidateServerModules(_changedFiles) {
7
- this.serverInvalidationVersion += 1;
8
- }
9
- reset() {
10
- this.serverInvalidationVersion += 1;
11
- }
1
+ /**
2
+ * Minimal app-local invalidation state backed by a single generation counter.
3
+ */
4
+ export class CounterServerInvalidationState {
5
+ serverInvalidationVersion = 0;
6
+ getServerInvalidationVersion() {
7
+ return this.serverInvalidationVersion;
8
+ }
9
+ invalidateServerModules(_changedFiles) {
10
+ this.serverInvalidationVersion += 1;
11
+ }
12
+ reset() {
13
+ this.serverInvalidationVersion += 1;
14
+ }
12
15
  }
13
16
  function isLegacyServerInvalidationState(value) {
14
- return Boolean(value) && typeof value === "object" && typeof value.getServerInvalidationVersion === "function" && typeof value.invalidateServerModules === "function" && typeof value.reset === "function";
17
+ return (Boolean(value) &&
18
+ typeof value === 'object' &&
19
+ typeof value.getServerInvalidationVersion === 'function' &&
20
+ typeof value.invalidateServerModules === 'function' &&
21
+ typeof value.reset === 'function');
15
22
  }
16
- function getAppServerInvalidationState(appConfig) {
17
- if (appConfig.runtime?.serverInvalidationState) {
18
- return appConfig.runtime.serverInvalidationState;
19
- }
20
- if (isLegacyServerInvalidationState(appConfig.runtime?.devGraphService)) {
21
- return appConfig.runtime.devGraphService;
22
- }
23
- return new CounterServerInvalidationState();
23
+ /**
24
+ * Returns the app-owned server invalidation state.
25
+ */
26
+ export function getAppServerInvalidationState(appConfig) {
27
+ if (appConfig.runtime?.serverInvalidationState) {
28
+ return appConfig.runtime.serverInvalidationState;
29
+ }
30
+ if (isLegacyServerInvalidationState(appConfig.runtime?.devGraphService)) {
31
+ return appConfig.runtime.devGraphService;
32
+ }
33
+ return new CounterServerInvalidationState();
24
34
  }
25
- function setAppServerInvalidationState(appConfig, serverInvalidationState) {
26
- appConfig.runtime = {
27
- ...appConfig.runtime ?? {},
28
- serverInvalidationState
29
- };
35
+ /**
36
+ * Installs the invalidation state used by one app instance.
37
+ */
38
+ export function setAppServerInvalidationState(appConfig, serverInvalidationState) {
39
+ appConfig.runtime = {
40
+ ...(appConfig.runtime ?? {}),
41
+ serverInvalidationState,
42
+ };
30
43
  }
31
- export {
32
- CounterServerInvalidationState,
33
- getAppServerInvalidationState,
34
- setAppServerInvalidationState
35
- };