@fluidframework/container-runtime 1.4.0-115997 → 2.0.0-dev-rc.1.0.0.224419

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 (703) hide show
  1. package/.eslintrc.js +19 -29
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +427 -0
  4. package/README.md +69 -0
  5. package/api-extractor-lint.json +4 -0
  6. package/api-extractor.json +2 -2
  7. package/api-report/container-runtime.api.md +863 -0
  8. package/dist/{batchTracker.js → batchTracker.cjs} +9 -8
  9. package/dist/batchTracker.cjs.map +1 -0
  10. package/dist/batchTracker.d.ts +6 -6
  11. package/dist/batchTracker.d.ts.map +1 -1
  12. package/dist/blobManager.cjs +704 -0
  13. package/dist/blobManager.cjs.map +1 -0
  14. package/dist/blobManager.d.ts +135 -39
  15. package/dist/blobManager.d.ts.map +1 -1
  16. package/dist/connectionTelemetry.cjs +230 -0
  17. package/dist/connectionTelemetry.cjs.map +1 -0
  18. package/dist/connectionTelemetry.d.ts +2 -2
  19. package/dist/connectionTelemetry.d.ts.map +1 -1
  20. package/dist/container-runtime-alpha.d.ts +1677 -0
  21. package/dist/container-runtime-beta.d.ts +250 -0
  22. package/dist/container-runtime-public.d.ts +250 -0
  23. package/dist/container-runtime-untrimmed.d.ts +1792 -0
  24. package/dist/{containerHandleContext.js → containerHandleContext.cjs} +4 -2
  25. package/dist/containerHandleContext.cjs.map +1 -0
  26. package/dist/containerHandleContext.d.ts.map +1 -1
  27. package/dist/containerRuntime.cjs +2531 -0
  28. package/dist/containerRuntime.cjs.map +1 -0
  29. package/dist/containerRuntime.d.ts +454 -257
  30. package/dist/containerRuntime.d.ts.map +1 -1
  31. package/dist/{dataStore.js → dataStore.cjs} +54 -45
  32. package/dist/dataStore.cjs.map +1 -0
  33. package/dist/dataStore.d.ts +2 -2
  34. package/dist/dataStore.d.ts.map +1 -1
  35. package/dist/{dataStoreContext.js → dataStoreContext.cjs} +343 -247
  36. package/dist/dataStoreContext.cjs.map +1 -0
  37. package/dist/dataStoreContext.d.ts +73 -41
  38. package/dist/dataStoreContext.d.ts.map +1 -1
  39. package/dist/{dataStoreContexts.js → dataStoreContexts.cjs} +19 -15
  40. package/dist/dataStoreContexts.cjs.map +1 -0
  41. package/dist/dataStoreContexts.d.ts +1 -1
  42. package/dist/dataStoreContexts.d.ts.map +1 -1
  43. package/dist/{dataStoreRegistry.js → dataStoreRegistry.cjs} +9 -4
  44. package/dist/dataStoreRegistry.cjs.map +1 -0
  45. package/dist/dataStoreRegistry.d.ts +3 -0
  46. package/dist/dataStoreRegistry.d.ts.map +1 -1
  47. package/dist/{dataStores.js → dataStores.cjs} +273 -124
  48. package/dist/dataStores.cjs.map +1 -0
  49. package/dist/dataStores.d.ts +53 -23
  50. package/dist/dataStores.d.ts.map +1 -1
  51. package/dist/deltaManagerProxyBase.cjs +77 -0
  52. package/dist/deltaManagerProxyBase.cjs.map +1 -0
  53. package/dist/deltaManagerProxyBase.d.ts +35 -0
  54. package/dist/deltaManagerProxyBase.d.ts.map +1 -0
  55. package/dist/deltaManagerSummarizerProxy.cjs +42 -0
  56. package/dist/deltaManagerSummarizerProxy.cjs.map +1 -0
  57. package/dist/deltaManagerSummarizerProxy.d.ts +19 -0
  58. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -0
  59. package/dist/{deltaScheduler.js → deltaScheduler.cjs} +25 -18
  60. package/dist/deltaScheduler.cjs.map +1 -0
  61. package/dist/deltaScheduler.d.ts +8 -6
  62. package/dist/deltaScheduler.d.ts.map +1 -1
  63. package/dist/error.cjs +21 -0
  64. package/dist/error.cjs.map +1 -0
  65. package/dist/error.d.ts +14 -0
  66. package/dist/error.d.ts.map +1 -0
  67. package/dist/gc/garbageCollection.cjs +861 -0
  68. package/dist/gc/garbageCollection.cjs.map +1 -0
  69. package/dist/gc/garbageCollection.d.ts +224 -0
  70. package/dist/gc/garbageCollection.d.ts.map +1 -0
  71. package/dist/gc/gcConfigs.cjs +153 -0
  72. package/dist/gc/gcConfigs.cjs.map +1 -0
  73. package/dist/gc/gcConfigs.d.ts +23 -0
  74. package/dist/gc/gcConfigs.d.ts.map +1 -0
  75. package/dist/gc/gcDefinitions.cjs +96 -0
  76. package/dist/gc/gcDefinitions.cjs.map +1 -0
  77. package/dist/gc/gcDefinitions.d.ts +437 -0
  78. package/dist/gc/gcDefinitions.d.ts.map +1 -0
  79. package/dist/gc/gcHelpers.cjs +235 -0
  80. package/dist/gc/gcHelpers.cjs.map +1 -0
  81. package/dist/gc/gcHelpers.d.ts +71 -0
  82. package/dist/gc/gcHelpers.d.ts.map +1 -0
  83. package/dist/gc/gcReferenceGraphAlgorithm.cjs +49 -0
  84. package/dist/gc/gcReferenceGraphAlgorithm.cjs.map +1 -0
  85. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +16 -0
  86. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  87. package/dist/{summarizerTypes.js → gc/gcSummaryDefinitions.cjs} +1 -6
  88. package/dist/gc/gcSummaryDefinitions.cjs.map +1 -0
  89. package/dist/gc/gcSummaryDefinitions.d.ts +52 -0
  90. package/dist/gc/gcSummaryDefinitions.d.ts.map +1 -0
  91. package/dist/gc/gcSummaryStateTracker.cjs +213 -0
  92. package/dist/gc/gcSummaryStateTracker.cjs.map +1 -0
  93. package/dist/gc/gcSummaryStateTracker.d.ts +94 -0
  94. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -0
  95. package/dist/gc/gcTelemetry.cjs +298 -0
  96. package/dist/gc/gcTelemetry.cjs.map +1 -0
  97. package/dist/gc/gcTelemetry.d.ts +92 -0
  98. package/dist/gc/gcTelemetry.d.ts.map +1 -0
  99. package/dist/gc/gcUnreferencedStateTracker.cjs +118 -0
  100. package/dist/gc/gcUnreferencedStateTracker.cjs.map +1 -0
  101. package/dist/gc/gcUnreferencedStateTracker.d.ts +40 -0
  102. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  103. package/dist/gc/index.cjs +44 -0
  104. package/dist/gc/index.cjs.map +1 -0
  105. package/dist/gc/index.d.ts +13 -0
  106. package/dist/gc/index.d.ts.map +1 -0
  107. package/dist/index.cjs +47 -0
  108. package/dist/index.cjs.map +1 -0
  109. package/dist/index.d.ts +19 -8
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/messageTypes.cjs +37 -0
  112. package/dist/messageTypes.cjs.map +1 -0
  113. package/dist/messageTypes.d.ts +142 -0
  114. package/dist/messageTypes.d.ts.map +1 -0
  115. package/dist/metadata.cjs +7 -0
  116. package/dist/metadata.cjs.map +1 -0
  117. package/dist/metadata.d.ts +24 -0
  118. package/dist/metadata.d.ts.map +1 -0
  119. package/dist/opLifecycle/batchManager.cjs +139 -0
  120. package/dist/opLifecycle/batchManager.cjs.map +1 -0
  121. package/dist/opLifecycle/batchManager.d.ts +48 -0
  122. package/dist/opLifecycle/batchManager.d.ts.map +1 -0
  123. package/dist/opLifecycle/definitions.cjs +7 -0
  124. package/dist/opLifecycle/definitions.cjs.map +1 -0
  125. package/dist/opLifecycle/definitions.d.ts +83 -0
  126. package/dist/opLifecycle/definitions.d.ts.map +1 -0
  127. package/dist/opLifecycle/index.cjs +26 -0
  128. package/dist/opLifecycle/index.cjs.map +1 -0
  129. package/dist/opLifecycle/index.d.ts +13 -0
  130. package/dist/opLifecycle/index.d.ts.map +1 -0
  131. package/dist/opLifecycle/opCompressor.cjs +84 -0
  132. package/dist/opLifecycle/opCompressor.cjs.map +1 -0
  133. package/dist/opLifecycle/opCompressor.d.ts +18 -0
  134. package/dist/opLifecycle/opCompressor.d.ts.map +1 -0
  135. package/dist/opLifecycle/opDecompressor.cjs +132 -0
  136. package/dist/opLifecycle/opDecompressor.cjs.map +1 -0
  137. package/dist/opLifecycle/opDecompressor.d.ts +25 -0
  138. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -0
  139. package/dist/opLifecycle/opGroupingManager.cjs +95 -0
  140. package/dist/opLifecycle/opGroupingManager.cjs.map +1 -0
  141. package/dist/opLifecycle/opGroupingManager.d.ts +22 -0
  142. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -0
  143. package/dist/opLifecycle/opSplitter.cjs +202 -0
  144. package/dist/opLifecycle/opSplitter.cjs.map +1 -0
  145. package/dist/opLifecycle/opSplitter.d.ts +61 -0
  146. package/dist/opLifecycle/opSplitter.d.ts.map +1 -0
  147. package/dist/opLifecycle/outbox.cjs +323 -0
  148. package/dist/opLifecycle/outbox.cjs.map +1 -0
  149. package/dist/opLifecycle/outbox.d.ts +104 -0
  150. package/dist/opLifecycle/outbox.d.ts.map +1 -0
  151. package/dist/opLifecycle/remoteMessageProcessor.cjs +136 -0
  152. package/dist/opLifecycle/remoteMessageProcessor.cjs.map +1 -0
  153. package/dist/opLifecycle/remoteMessageProcessor.d.ts +47 -0
  154. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  155. package/dist/opProperties.cjs +17 -0
  156. package/dist/opProperties.cjs.map +1 -0
  157. package/dist/opProperties.d.ts +7 -0
  158. package/dist/opProperties.d.ts.map +1 -0
  159. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  160. package/dist/packageVersion.cjs.map +1 -0
  161. package/dist/packageVersion.d.ts +1 -1
  162. package/dist/packageVersion.d.ts.map +1 -1
  163. package/dist/pendingStateManager.cjs +282 -0
  164. package/dist/pendingStateManager.cjs.map +1 -0
  165. package/dist/pendingStateManager.d.ts +32 -69
  166. package/dist/pendingStateManager.d.ts.map +1 -1
  167. package/dist/scheduleManager.cjs +258 -0
  168. package/dist/scheduleManager.cjs.map +1 -0
  169. package/dist/scheduleManager.d.ts +31 -0
  170. package/dist/scheduleManager.d.ts.map +1 -0
  171. package/dist/storageServiceWithAttachBlobs.cjs +32 -0
  172. package/dist/storageServiceWithAttachBlobs.cjs.map +1 -0
  173. package/dist/storageServiceWithAttachBlobs.d.ts +17 -0
  174. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -0
  175. package/dist/summary/index.cjs +51 -0
  176. package/dist/summary/index.cjs.map +1 -0
  177. package/dist/summary/index.d.ts +17 -0
  178. package/dist/summary/index.d.ts.map +1 -0
  179. package/dist/{orderedClientElection.js → summary/orderedClientElection.cjs} +100 -84
  180. package/dist/summary/orderedClientElection.cjs.map +1 -0
  181. package/{lib → dist/summary}/orderedClientElection.d.ts +41 -18
  182. package/dist/summary/orderedClientElection.d.ts.map +1 -0
  183. package/dist/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.cjs} +12 -10
  184. package/dist/summary/runWhileConnectedCoordinator.cjs.map +1 -0
  185. package/{lib → dist/summary}/runWhileConnectedCoordinator.d.ts +8 -2
  186. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  187. package/dist/summary/runningSummarizer.cjs +679 -0
  188. package/dist/summary/runningSummarizer.cjs.map +1 -0
  189. package/dist/summary/runningSummarizer.d.ts +128 -0
  190. package/dist/summary/runningSummarizer.d.ts.map +1 -0
  191. package/dist/summary/summarizer.cjs +263 -0
  192. package/dist/summary/summarizer.cjs.map +1 -0
  193. package/dist/{summarizer.d.ts → summary/summarizer.d.ts} +18 -34
  194. package/dist/summary/summarizer.d.ts.map +1 -0
  195. package/dist/{summarizerClientElection.js → summary/summarizerClientElection.cjs} +15 -46
  196. package/dist/summary/summarizerClientElection.cjs.map +1 -0
  197. package/{lib → dist/summary}/summarizerClientElection.d.ts +4 -4
  198. package/dist/summary/summarizerClientElection.d.ts.map +1 -0
  199. package/dist/summary/summarizerHeuristics.cjs +156 -0
  200. package/dist/summary/summarizerHeuristics.cjs.map +1 -0
  201. package/{lib → dist/summary}/summarizerHeuristics.d.ts +28 -6
  202. package/dist/summary/summarizerHeuristics.d.ts.map +1 -0
  203. package/dist/summary/summarizerNode/index.cjs +12 -0
  204. package/dist/summary/summarizerNode/index.cjs.map +1 -0
  205. package/dist/summary/summarizerNode/index.d.ts +8 -0
  206. package/dist/summary/summarizerNode/index.d.ts.map +1 -0
  207. package/dist/summary/summarizerNode/summarizerNode.cjs +526 -0
  208. package/dist/summary/summarizerNode/summarizerNode.cjs.map +1 -0
  209. package/dist/summary/summarizerNode/summarizerNode.d.ts +167 -0
  210. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  211. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs +130 -0
  212. package/dist/summary/summarizerNode/summarizerNodeUtils.cjs.map +1 -0
  213. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +121 -0
  214. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  215. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs +375 -0
  216. package/dist/summary/summarizerNode/summarizerNodeWithGc.cjs.map +1 -0
  217. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +153 -0
  218. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  219. package/dist/summary/summarizerTypes.cjs +7 -0
  220. package/dist/summary/summarizerTypes.cjs.map +1 -0
  221. package/{lib → dist/summary}/summarizerTypes.d.ts +233 -83
  222. package/dist/summary/summarizerTypes.d.ts.map +1 -0
  223. package/dist/{summaryCollection.js → summary/summaryCollection.cjs} +80 -49
  224. package/dist/summary/summaryCollection.cjs.map +1 -0
  225. package/dist/{summaryCollection.d.ts → summary/summaryCollection.d.ts} +23 -5
  226. package/dist/summary/summaryCollection.d.ts.map +1 -0
  227. package/dist/{summaryFormat.js → summary/summaryFormat.cjs} +29 -26
  228. package/dist/summary/summaryFormat.cjs.map +1 -0
  229. package/{lib → dist/summary}/summaryFormat.d.ts +25 -30
  230. package/dist/summary/summaryFormat.d.ts.map +1 -0
  231. package/dist/{summaryGenerator.js → summary/summaryGenerator.cjs} +162 -74
  232. package/dist/summary/summaryGenerator.cjs.map +1 -0
  233. package/dist/{summaryGenerator.d.ts → summary/summaryGenerator.d.ts} +53 -11
  234. package/dist/summary/summaryGenerator.d.ts.map +1 -0
  235. package/dist/{summaryManager.js → summary/summaryManager.cjs} +98 -55
  236. package/dist/summary/summaryManager.cjs.map +1 -0
  237. package/{lib → dist/summary}/summaryManager.d.ts +13 -11
  238. package/dist/summary/summaryManager.d.ts.map +1 -0
  239. package/dist/{throttler.js → throttler.cjs} +21 -21
  240. package/dist/throttler.cjs.map +1 -0
  241. package/dist/throttler.d.ts +2 -2
  242. package/dist/throttler.d.ts.map +1 -1
  243. package/dist/tsdoc-metadata.json +11 -0
  244. package/lib/{batchTracker.d.ts → batchTracker.d.mts} +6 -6
  245. package/lib/batchTracker.d.mts.map +1 -0
  246. package/lib/{batchTracker.js → batchTracker.mjs} +9 -8
  247. package/lib/batchTracker.mjs.map +1 -0
  248. package/lib/blobManager.d.mts +191 -0
  249. package/lib/blobManager.d.mts.map +1 -0
  250. package/lib/blobManager.mjs +699 -0
  251. package/lib/blobManager.mjs.map +1 -0
  252. package/lib/{connectionTelemetry.d.ts → connectionTelemetry.d.mts} +2 -2
  253. package/lib/connectionTelemetry.d.mts.map +1 -0
  254. package/lib/connectionTelemetry.mjs +226 -0
  255. package/lib/connectionTelemetry.mjs.map +1 -0
  256. package/lib/container-runtime-alpha.d.mts +1677 -0
  257. package/lib/container-runtime-beta.d.mts +250 -0
  258. package/lib/container-runtime-public.d.mts +250 -0
  259. package/lib/container-runtime-untrimmed.d.mts +1792 -0
  260. package/lib/{containerHandleContext.d.ts → containerHandleContext.d.mts} +1 -1
  261. package/lib/containerHandleContext.d.mts.map +1 -0
  262. package/lib/{containerHandleContext.js → containerHandleContext.mjs} +4 -2
  263. package/lib/containerHandleContext.mjs.map +1 -0
  264. package/lib/containerRuntime.d.mts +809 -0
  265. package/lib/containerRuntime.d.mts.map +1 -0
  266. package/lib/containerRuntime.mjs +2526 -0
  267. package/lib/containerRuntime.mjs.map +1 -0
  268. package/lib/{dataStore.d.ts → dataStore.d.mts} +4 -4
  269. package/lib/dataStore.d.mts.map +1 -0
  270. package/lib/{dataStore.js → dataStore.mjs} +52 -43
  271. package/lib/dataStore.mjs.map +1 -0
  272. package/lib/{dataStoreContext.d.ts → dataStoreContext.d.mts} +74 -42
  273. package/lib/dataStoreContext.d.mts.map +1 -0
  274. package/lib/{dataStoreContext.js → dataStoreContext.mjs} +309 -213
  275. package/lib/dataStoreContext.mjs.map +1 -0
  276. package/lib/{dataStoreContexts.d.ts → dataStoreContexts.d.mts} +2 -2
  277. package/lib/dataStoreContexts.d.mts.map +1 -0
  278. package/lib/{dataStoreContexts.js → dataStoreContexts.mjs} +12 -8
  279. package/lib/dataStoreContexts.mjs.map +1 -0
  280. package/lib/{dataStoreRegistry.d.ts → dataStoreRegistry.d.mts} +3 -0
  281. package/lib/dataStoreRegistry.d.mts.map +1 -0
  282. package/lib/{dataStoreRegistry.js → dataStoreRegistry.mjs} +7 -6
  283. package/lib/dataStoreRegistry.mjs.map +1 -0
  284. package/lib/{dataStores.d.ts → dataStores.d.mts} +56 -26
  285. package/lib/dataStores.d.mts.map +1 -0
  286. package/lib/{dataStores.js → dataStores.mjs} +254 -105
  287. package/lib/dataStores.mjs.map +1 -0
  288. package/lib/deltaManagerProxyBase.d.mts +35 -0
  289. package/lib/deltaManagerProxyBase.d.mts.map +1 -0
  290. package/lib/deltaManagerProxyBase.mjs +73 -0
  291. package/lib/deltaManagerProxyBase.mjs.map +1 -0
  292. package/lib/deltaManagerSummarizerProxy.d.mts +19 -0
  293. package/lib/deltaManagerSummarizerProxy.d.mts.map +1 -0
  294. package/lib/deltaManagerSummarizerProxy.mjs +38 -0
  295. package/lib/deltaManagerSummarizerProxy.mjs.map +1 -0
  296. package/lib/{deltaScheduler.d.ts → deltaScheduler.d.mts} +8 -6
  297. package/lib/deltaScheduler.d.mts.map +1 -0
  298. package/lib/{deltaScheduler.js → deltaScheduler.mjs} +22 -15
  299. package/lib/deltaScheduler.mjs.map +1 -0
  300. package/lib/error.d.mts +14 -0
  301. package/lib/error.d.mts.map +1 -0
  302. package/lib/error.mjs +17 -0
  303. package/lib/error.mjs.map +1 -0
  304. package/lib/gc/garbageCollection.d.mts +224 -0
  305. package/lib/gc/garbageCollection.d.mts.map +1 -0
  306. package/lib/gc/garbageCollection.mjs +857 -0
  307. package/lib/gc/garbageCollection.mjs.map +1 -0
  308. package/lib/gc/gcConfigs.d.mts +23 -0
  309. package/lib/gc/gcConfigs.d.mts.map +1 -0
  310. package/lib/gc/gcConfigs.mjs +149 -0
  311. package/lib/gc/gcConfigs.mjs.map +1 -0
  312. package/lib/gc/gcDefinitions.d.mts +437 -0
  313. package/lib/gc/gcDefinitions.d.mts.map +1 -0
  314. package/lib/gc/gcDefinitions.mjs +93 -0
  315. package/lib/gc/gcDefinitions.mjs.map +1 -0
  316. package/lib/gc/gcHelpers.d.mts +71 -0
  317. package/lib/gc/gcHelpers.d.mts.map +1 -0
  318. package/lib/gc/gcHelpers.mjs +222 -0
  319. package/lib/gc/gcHelpers.mjs.map +1 -0
  320. package/lib/gc/gcReferenceGraphAlgorithm.d.mts +16 -0
  321. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +1 -0
  322. package/lib/gc/gcReferenceGraphAlgorithm.mjs +45 -0
  323. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +1 -0
  324. package/lib/gc/gcSummaryDefinitions.d.mts +52 -0
  325. package/lib/gc/gcSummaryDefinitions.d.mts.map +1 -0
  326. package/lib/gc/gcSummaryDefinitions.mjs +6 -0
  327. package/lib/gc/gcSummaryDefinitions.mjs.map +1 -0
  328. package/lib/gc/gcSummaryStateTracker.d.mts +94 -0
  329. package/lib/gc/gcSummaryStateTracker.d.mts.map +1 -0
  330. package/lib/gc/gcSummaryStateTracker.mjs +209 -0
  331. package/lib/gc/gcSummaryStateTracker.mjs.map +1 -0
  332. package/lib/gc/gcTelemetry.d.mts +92 -0
  333. package/lib/gc/gcTelemetry.d.mts.map +1 -0
  334. package/lib/gc/gcTelemetry.mjs +293 -0
  335. package/lib/gc/gcTelemetry.mjs.map +1 -0
  336. package/lib/gc/gcUnreferencedStateTracker.d.mts +40 -0
  337. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +1 -0
  338. package/lib/gc/gcUnreferencedStateTracker.mjs +114 -0
  339. package/lib/gc/gcUnreferencedStateTracker.mjs.map +1 -0
  340. package/lib/gc/index.d.mts +13 -0
  341. package/lib/gc/index.d.mts.map +1 -0
  342. package/lib/gc/index.mjs +12 -0
  343. package/lib/gc/index.mjs.map +1 -0
  344. package/lib/index.d.mts +25 -0
  345. package/lib/index.d.mts.map +1 -0
  346. package/lib/index.mjs +24 -0
  347. package/lib/index.mjs.map +1 -0
  348. package/lib/messageTypes.d.mts +142 -0
  349. package/lib/messageTypes.d.mts.map +1 -0
  350. package/lib/messageTypes.mjs +34 -0
  351. package/lib/messageTypes.mjs.map +1 -0
  352. package/lib/metadata.d.mts +24 -0
  353. package/lib/metadata.d.mts.map +1 -0
  354. package/lib/metadata.mjs +6 -0
  355. package/lib/metadata.mjs.map +1 -0
  356. package/lib/opLifecycle/batchManager.d.mts +48 -0
  357. package/lib/opLifecycle/batchManager.d.mts.map +1 -0
  358. package/lib/opLifecycle/batchManager.mjs +133 -0
  359. package/lib/opLifecycle/batchManager.mjs.map +1 -0
  360. package/lib/opLifecycle/definitions.d.mts +83 -0
  361. package/lib/opLifecycle/definitions.d.mts.map +1 -0
  362. package/lib/opLifecycle/definitions.mjs +6 -0
  363. package/lib/opLifecycle/definitions.mjs.map +1 -0
  364. package/lib/opLifecycle/index.d.mts +13 -0
  365. package/lib/opLifecycle/index.d.mts.map +1 -0
  366. package/lib/opLifecycle/index.mjs +12 -0
  367. package/lib/opLifecycle/index.mjs.map +1 -0
  368. package/lib/opLifecycle/opCompressor.d.mts +18 -0
  369. package/lib/opLifecycle/opCompressor.d.mts.map +1 -0
  370. package/lib/opLifecycle/opCompressor.mjs +80 -0
  371. package/lib/opLifecycle/opCompressor.mjs.map +1 -0
  372. package/lib/opLifecycle/opDecompressor.d.mts +25 -0
  373. package/lib/opLifecycle/opDecompressor.d.mts.map +1 -0
  374. package/lib/opLifecycle/opDecompressor.mjs +128 -0
  375. package/lib/opLifecycle/opDecompressor.mjs.map +1 -0
  376. package/lib/opLifecycle/opGroupingManager.d.mts +22 -0
  377. package/lib/opLifecycle/opGroupingManager.d.mts.map +1 -0
  378. package/lib/opLifecycle/opGroupingManager.mjs +91 -0
  379. package/lib/opLifecycle/opGroupingManager.mjs.map +1 -0
  380. package/lib/opLifecycle/opSplitter.d.mts +61 -0
  381. package/lib/opLifecycle/opSplitter.d.mts.map +1 -0
  382. package/lib/opLifecycle/opSplitter.mjs +197 -0
  383. package/lib/opLifecycle/opSplitter.mjs.map +1 -0
  384. package/lib/opLifecycle/outbox.d.mts +104 -0
  385. package/lib/opLifecycle/outbox.d.mts.map +1 -0
  386. package/lib/opLifecycle/outbox.mjs +318 -0
  387. package/lib/opLifecycle/outbox.mjs.map +1 -0
  388. package/lib/opLifecycle/remoteMessageProcessor.d.mts +47 -0
  389. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +1 -0
  390. package/lib/opLifecycle/remoteMessageProcessor.mjs +131 -0
  391. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +1 -0
  392. package/lib/opProperties.d.mts +7 -0
  393. package/lib/opProperties.d.mts.map +1 -0
  394. package/lib/opProperties.mjs +13 -0
  395. package/lib/opProperties.mjs.map +1 -0
  396. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
  397. package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
  398. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  399. package/lib/packageVersion.mjs.map +1 -0
  400. package/lib/{pendingStateManager.d.ts → pendingStateManager.d.mts} +32 -69
  401. package/lib/pendingStateManager.d.mts.map +1 -0
  402. package/lib/pendingStateManager.mjs +275 -0
  403. package/lib/pendingStateManager.mjs.map +1 -0
  404. package/lib/scheduleManager.d.mts +27 -0
  405. package/lib/scheduleManager.d.mts.map +1 -0
  406. package/lib/scheduleManager.mjs +254 -0
  407. package/lib/scheduleManager.mjs.map +1 -0
  408. package/lib/storageServiceWithAttachBlobs.d.mts +17 -0
  409. package/lib/storageServiceWithAttachBlobs.d.mts.map +1 -0
  410. package/lib/storageServiceWithAttachBlobs.mjs +28 -0
  411. package/lib/storageServiceWithAttachBlobs.mjs.map +1 -0
  412. package/lib/summary/index.d.mts +17 -0
  413. package/lib/summary/index.d.mts.map +1 -0
  414. package/lib/summary/index.mjs +16 -0
  415. package/lib/summary/index.mjs.map +1 -0
  416. package/{dist/orderedClientElection.d.ts → lib/summary/orderedClientElection.d.mts} +41 -22
  417. package/lib/summary/orderedClientElection.d.mts.map +1 -0
  418. package/lib/{orderedClientElection.js → summary/orderedClientElection.mjs} +95 -79
  419. package/lib/summary/orderedClientElection.mjs.map +1 -0
  420. package/{dist/runWhileConnectedCoordinator.d.ts → lib/summary/runWhileConnectedCoordinator.d.mts} +9 -3
  421. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +1 -0
  422. package/lib/{runWhileConnectedCoordinator.js → summary/runWhileConnectedCoordinator.mjs} +12 -10
  423. package/lib/summary/runWhileConnectedCoordinator.mjs.map +1 -0
  424. package/lib/summary/runningSummarizer.d.mts +128 -0
  425. package/lib/summary/runningSummarizer.d.mts.map +1 -0
  426. package/lib/summary/runningSummarizer.mjs +675 -0
  427. package/lib/summary/runningSummarizer.mjs.map +1 -0
  428. package/lib/{summarizer.d.ts → summary/summarizer.d.mts} +20 -36
  429. package/lib/summary/summarizer.d.mts.map +1 -0
  430. package/lib/summary/summarizer.mjs +257 -0
  431. package/lib/summary/summarizer.mjs.map +1 -0
  432. package/{dist/summarizerClientElection.d.ts → lib/summary/summarizerClientElection.d.mts} +6 -6
  433. package/lib/summary/summarizerClientElection.d.mts.map +1 -0
  434. package/lib/{summarizerClientElection.js → summary/summarizerClientElection.mjs} +14 -45
  435. package/lib/summary/summarizerClientElection.mjs.map +1 -0
  436. package/{dist/summarizerHeuristics.d.ts → lib/summary/summarizerHeuristics.d.mts} +29 -7
  437. package/lib/summary/summarizerHeuristics.d.mts.map +1 -0
  438. package/lib/summary/summarizerHeuristics.mjs +151 -0
  439. package/lib/summary/summarizerHeuristics.mjs.map +1 -0
  440. package/lib/summary/summarizerNode/index.d.mts +8 -0
  441. package/lib/summary/summarizerNode/index.d.mts.map +1 -0
  442. package/lib/summary/summarizerNode/index.mjs +7 -0
  443. package/lib/summary/summarizerNode/index.mjs.map +1 -0
  444. package/lib/summary/summarizerNode/summarizerNode.d.mts +167 -0
  445. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +1 -0
  446. package/lib/summary/summarizerNode/summarizerNode.mjs +521 -0
  447. package/lib/summary/summarizerNode/summarizerNode.mjs.map +1 -0
  448. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts +121 -0
  449. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +1 -0
  450. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs +123 -0
  451. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +1 -0
  452. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts +153 -0
  453. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +1 -0
  454. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs +370 -0
  455. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +1 -0
  456. package/{dist/summarizerTypes.d.ts → lib/summary/summarizerTypes.d.mts} +234 -84
  457. package/lib/summary/summarizerTypes.d.mts.map +1 -0
  458. package/lib/summary/summarizerTypes.mjs +6 -0
  459. package/lib/summary/summarizerTypes.mjs.map +1 -0
  460. package/lib/{summaryCollection.d.ts → summary/summaryCollection.d.mts} +23 -5
  461. package/lib/summary/summaryCollection.d.mts.map +1 -0
  462. package/lib/{summaryCollection.js → summary/summaryCollection.mjs} +76 -45
  463. package/lib/summary/summaryCollection.mjs.map +1 -0
  464. package/{dist/summaryFormat.d.ts → lib/summary/summaryFormat.d.mts} +25 -30
  465. package/lib/summary/summaryFormat.d.mts.map +1 -0
  466. package/lib/{summaryFormat.js → summary/summaryFormat.mjs} +30 -26
  467. package/lib/summary/summaryFormat.mjs.map +1 -0
  468. package/lib/summary/summaryGenerator.d.mts +127 -0
  469. package/lib/summary/summaryGenerator.d.mts.map +1 -0
  470. package/lib/{summaryGenerator.js → summary/summaryGenerator.mjs} +153 -67
  471. package/lib/summary/summaryGenerator.mjs.map +1 -0
  472. package/{dist/summaryManager.d.ts → lib/summary/summaryManager.d.mts} +15 -13
  473. package/lib/summary/summaryManager.d.mts.map +1 -0
  474. package/lib/{summaryManager.js → summary/summaryManager.mjs} +94 -51
  475. package/lib/summary/summaryManager.mjs.map +1 -0
  476. package/lib/{throttler.d.ts → throttler.d.mts} +2 -2
  477. package/lib/throttler.d.mts.map +1 -0
  478. package/lib/{throttler.js → throttler.mjs} +21 -21
  479. package/lib/throttler.mjs.map +1 -0
  480. package/package.json +174 -73
  481. package/prettier.config.cjs +8 -0
  482. package/src/batchTracker.ts +60 -55
  483. package/src/blobManager.ts +937 -294
  484. package/src/connectionTelemetry.ts +342 -252
  485. package/src/containerHandleContext.ts +27 -29
  486. package/src/containerRuntime.ts +3879 -3143
  487. package/src/dataStore.ts +170 -140
  488. package/src/dataStoreContext.ts +1166 -986
  489. package/src/dataStoreContexts.ts +176 -163
  490. package/src/dataStoreRegistry.ts +29 -21
  491. package/src/dataStores.ts +921 -678
  492. package/src/deltaManagerProxyBase.ts +111 -0
  493. package/src/deltaManagerSummarizerProxy.ts +49 -0
  494. package/src/deltaScheduler.ts +161 -156
  495. package/src/error.ts +21 -0
  496. package/src/gc/garbageCollection.md +106 -0
  497. package/src/gc/garbageCollection.ts +1153 -0
  498. package/src/gc/gcConfigs.ts +216 -0
  499. package/src/gc/gcDefinitions.ts +502 -0
  500. package/src/gc/gcHelpers.ts +284 -0
  501. package/src/gc/gcReferenceGraphAlgorithm.ts +52 -0
  502. package/src/gc/gcSummaryDefinitions.ts +54 -0
  503. package/src/gc/gcSummaryStateTracker.ts +299 -0
  504. package/src/gc/gcTelemetry.ts +423 -0
  505. package/src/gc/gcUnreferencedStateTracker.ts +153 -0
  506. package/src/gc/index.ts +59 -0
  507. package/src/index.ts +101 -74
  508. package/src/messageTypes.ts +238 -0
  509. package/src/metadata.ts +26 -0
  510. package/src/opLifecycle/README.md +321 -0
  511. package/src/opLifecycle/batchManager.ts +179 -0
  512. package/src/opLifecycle/definitions.ts +89 -0
  513. package/src/opLifecycle/index.ts +19 -0
  514. package/src/opLifecycle/opCompressor.ts +99 -0
  515. package/src/opLifecycle/opDecompressor.ts +190 -0
  516. package/src/opLifecycle/opGroupingManager.ts +133 -0
  517. package/src/opLifecycle/opSplitter.ts +279 -0
  518. package/src/opLifecycle/outbox.ts +471 -0
  519. package/src/opLifecycle/remoteMessageProcessor.ts +175 -0
  520. package/src/opProperties.ts +21 -0
  521. package/src/packageVersion.ts +1 -1
  522. package/src/pendingStateManager.ts +396 -465
  523. package/src/scheduleManager.ts +358 -0
  524. package/src/storageServiceWithAttachBlobs.ts +38 -0
  525. package/src/summary/index.ts +109 -0
  526. package/src/summary/orderedClientElection.ts +571 -0
  527. package/src/summary/runWhileConnectedCoordinator.ts +117 -0
  528. package/src/summary/runningSummarizer.ts +920 -0
  529. package/src/summary/summarizer.ts +352 -0
  530. package/src/summary/summarizerClientElection.ts +140 -0
  531. package/src/summary/summarizerHeuristics.ts +227 -0
  532. package/src/summary/summarizerNode/index.ts +12 -0
  533. package/src/summary/summarizerNode/summarizerNode.ts +725 -0
  534. package/src/summary/summarizerNode/summarizerNodeUtils.ts +206 -0
  535. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +571 -0
  536. package/src/summary/summarizerTypes.ts +631 -0
  537. package/src/summary/summaryCollection.ts +474 -0
  538. package/src/summary/summaryFormat.ts +249 -0
  539. package/src/summary/summaryGenerator.ts +539 -0
  540. package/src/summary/summaryManager.ts +452 -0
  541. package/src/throttler.ts +131 -122
  542. package/tsc-multi.test.json +4 -0
  543. package/tsconfig.json +11 -13
  544. package/dist/batchTracker.js.map +0 -1
  545. package/dist/blobManager.js +0 -249
  546. package/dist/blobManager.js.map +0 -1
  547. package/dist/connectionTelemetry.js +0 -178
  548. package/dist/connectionTelemetry.js.map +0 -1
  549. package/dist/containerHandleContext.js.map +0 -1
  550. package/dist/containerRuntime.js +0 -2174
  551. package/dist/containerRuntime.js.map +0 -1
  552. package/dist/dataStore.js.map +0 -1
  553. package/dist/dataStoreContext.js.map +0 -1
  554. package/dist/dataStoreContexts.js.map +0 -1
  555. package/dist/dataStoreRegistry.js.map +0 -1
  556. package/dist/dataStores.js.map +0 -1
  557. package/dist/deltaScheduler.js.map +0 -1
  558. package/dist/garbageCollection.d.ts +0 -319
  559. package/dist/garbageCollection.d.ts.map +0 -1
  560. package/dist/garbageCollection.js +0 -993
  561. package/dist/garbageCollection.js.map +0 -1
  562. package/dist/index.js +0 -33
  563. package/dist/index.js.map +0 -1
  564. package/dist/opTelemetry.d.ts +0 -22
  565. package/dist/opTelemetry.d.ts.map +0 -1
  566. package/dist/opTelemetry.js +0 -60
  567. package/dist/opTelemetry.js.map +0 -1
  568. package/dist/orderedClientElection.d.ts.map +0 -1
  569. package/dist/orderedClientElection.js.map +0 -1
  570. package/dist/packageVersion.js.map +0 -1
  571. package/dist/pendingStateManager.js +0 -346
  572. package/dist/pendingStateManager.js.map +0 -1
  573. package/dist/runWhileConnectedCoordinator.d.ts.map +0 -1
  574. package/dist/runWhileConnectedCoordinator.js.map +0 -1
  575. package/dist/runningSummarizer.d.ts +0 -93
  576. package/dist/runningSummarizer.d.ts.map +0 -1
  577. package/dist/runningSummarizer.js +0 -384
  578. package/dist/runningSummarizer.js.map +0 -1
  579. package/dist/serializedSnapshotStorage.d.ts +0 -58
  580. package/dist/serializedSnapshotStorage.d.ts.map +0 -1
  581. package/dist/serializedSnapshotStorage.js +0 -108
  582. package/dist/serializedSnapshotStorage.js.map +0 -1
  583. package/dist/summarizer.d.ts.map +0 -1
  584. package/dist/summarizer.js +0 -348
  585. package/dist/summarizer.js.map +0 -1
  586. package/dist/summarizerClientElection.d.ts.map +0 -1
  587. package/dist/summarizerClientElection.js.map +0 -1
  588. package/dist/summarizerHandle.d.ts +0 -12
  589. package/dist/summarizerHandle.d.ts.map +0 -1
  590. package/dist/summarizerHandle.js +0 -22
  591. package/dist/summarizerHandle.js.map +0 -1
  592. package/dist/summarizerHeuristics.d.ts.map +0 -1
  593. package/dist/summarizerHeuristics.js +0 -84
  594. package/dist/summarizerHeuristics.js.map +0 -1
  595. package/dist/summarizerTypes.d.ts.map +0 -1
  596. package/dist/summarizerTypes.js.map +0 -1
  597. package/dist/summaryCollection.d.ts.map +0 -1
  598. package/dist/summaryCollection.js.map +0 -1
  599. package/dist/summaryFormat.d.ts.map +0 -1
  600. package/dist/summaryFormat.js.map +0 -1
  601. package/dist/summaryGenerator.d.ts.map +0 -1
  602. package/dist/summaryGenerator.js.map +0 -1
  603. package/dist/summaryManager.d.ts.map +0 -1
  604. package/dist/summaryManager.js.map +0 -1
  605. package/dist/throttler.js.map +0 -1
  606. package/garbageCollection.md +0 -41
  607. package/lib/batchTracker.d.ts.map +0 -1
  608. package/lib/batchTracker.js.map +0 -1
  609. package/lib/blobManager.d.ts +0 -95
  610. package/lib/blobManager.d.ts.map +0 -1
  611. package/lib/blobManager.js +0 -244
  612. package/lib/blobManager.js.map +0 -1
  613. package/lib/connectionTelemetry.d.ts.map +0 -1
  614. package/lib/connectionTelemetry.js +0 -174
  615. package/lib/connectionTelemetry.js.map +0 -1
  616. package/lib/containerHandleContext.d.ts.map +0 -1
  617. package/lib/containerHandleContext.js.map +0 -1
  618. package/lib/containerRuntime.d.ts +0 -616
  619. package/lib/containerRuntime.d.ts.map +0 -1
  620. package/lib/containerRuntime.js +0 -2166
  621. package/lib/containerRuntime.js.map +0 -1
  622. package/lib/dataStore.d.ts.map +0 -1
  623. package/lib/dataStore.js.map +0 -1
  624. package/lib/dataStoreContext.d.ts.map +0 -1
  625. package/lib/dataStoreContext.js.map +0 -1
  626. package/lib/dataStoreContexts.d.ts.map +0 -1
  627. package/lib/dataStoreContexts.js.map +0 -1
  628. package/lib/dataStoreRegistry.d.ts.map +0 -1
  629. package/lib/dataStoreRegistry.js.map +0 -1
  630. package/lib/dataStores.d.ts.map +0 -1
  631. package/lib/dataStores.js.map +0 -1
  632. package/lib/deltaScheduler.d.ts.map +0 -1
  633. package/lib/deltaScheduler.js.map +0 -1
  634. package/lib/garbageCollection.d.ts +0 -319
  635. package/lib/garbageCollection.d.ts.map +0 -1
  636. package/lib/garbageCollection.js +0 -989
  637. package/lib/garbageCollection.js.map +0 -1
  638. package/lib/index.d.ts +0 -14
  639. package/lib/index.d.ts.map +0 -1
  640. package/lib/index.js +0 -13
  641. package/lib/index.js.map +0 -1
  642. package/lib/opTelemetry.d.ts +0 -22
  643. package/lib/opTelemetry.d.ts.map +0 -1
  644. package/lib/opTelemetry.js +0 -56
  645. package/lib/opTelemetry.js.map +0 -1
  646. package/lib/orderedClientElection.d.ts.map +0 -1
  647. package/lib/orderedClientElection.js.map +0 -1
  648. package/lib/packageVersion.js.map +0 -1
  649. package/lib/pendingStateManager.d.ts.map +0 -1
  650. package/lib/pendingStateManager.js +0 -339
  651. package/lib/pendingStateManager.js.map +0 -1
  652. package/lib/runWhileConnectedCoordinator.d.ts.map +0 -1
  653. package/lib/runWhileConnectedCoordinator.js.map +0 -1
  654. package/lib/runningSummarizer.d.ts +0 -93
  655. package/lib/runningSummarizer.d.ts.map +0 -1
  656. package/lib/runningSummarizer.js +0 -380
  657. package/lib/runningSummarizer.js.map +0 -1
  658. package/lib/serializedSnapshotStorage.d.ts +0 -58
  659. package/lib/serializedSnapshotStorage.d.ts.map +0 -1
  660. package/lib/serializedSnapshotStorage.js +0 -104
  661. package/lib/serializedSnapshotStorage.js.map +0 -1
  662. package/lib/summarizer.d.ts.map +0 -1
  663. package/lib/summarizer.js +0 -342
  664. package/lib/summarizer.js.map +0 -1
  665. package/lib/summarizerClientElection.d.ts.map +0 -1
  666. package/lib/summarizerClientElection.js.map +0 -1
  667. package/lib/summarizerHandle.d.ts +0 -12
  668. package/lib/summarizerHandle.d.ts.map +0 -1
  669. package/lib/summarizerHandle.js +0 -18
  670. package/lib/summarizerHandle.js.map +0 -1
  671. package/lib/summarizerHeuristics.d.ts.map +0 -1
  672. package/lib/summarizerHeuristics.js +0 -79
  673. package/lib/summarizerHeuristics.js.map +0 -1
  674. package/lib/summarizerTypes.d.ts.map +0 -1
  675. package/lib/summarizerTypes.js +0 -9
  676. package/lib/summarizerTypes.js.map +0 -1
  677. package/lib/summaryCollection.d.ts.map +0 -1
  678. package/lib/summaryCollection.js.map +0 -1
  679. package/lib/summaryFormat.d.ts.map +0 -1
  680. package/lib/summaryFormat.js.map +0 -1
  681. package/lib/summaryGenerator.d.ts +0 -85
  682. package/lib/summaryGenerator.d.ts.map +0 -1
  683. package/lib/summaryGenerator.js.map +0 -1
  684. package/lib/summaryManager.d.ts.map +0 -1
  685. package/lib/summaryManager.js.map +0 -1
  686. package/lib/throttler.d.ts.map +0 -1
  687. package/lib/throttler.js.map +0 -1
  688. package/src/garbageCollection.ts +0 -1434
  689. package/src/opTelemetry.ts +0 -71
  690. package/src/orderedClientElection.ts +0 -511
  691. package/src/runWhileConnectedCoordinator.ts +0 -106
  692. package/src/runningSummarizer.ts +0 -550
  693. package/src/serializedSnapshotStorage.ts +0 -146
  694. package/src/summarizer.ts +0 -438
  695. package/src/summarizerClientElection.ts +0 -161
  696. package/src/summarizerHandle.ts +0 -21
  697. package/src/summarizerHeuristics.ts +0 -108
  698. package/src/summarizerTypes.ts +0 -462
  699. package/src/summaryCollection.ts +0 -406
  700. package/src/summaryFormat.ts +0 -239
  701. package/src/summaryGenerator.ts +0 -427
  702. package/src/summaryManager.ts +0 -368
  703. package/tsconfig.esnext.json +0 -7
@@ -5,55 +5,48 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.getSummaryForDatastores = exports.DataStores = void 0;
8
- const container_utils_1 = require("@fluidframework/container-utils");
9
8
  const datastore_1 = require("@fluidframework/datastore");
10
9
  const runtime_definitions_1 = require("@fluidframework/runtime-definitions");
11
10
  const runtime_utils_1 = require("@fluidframework/runtime-utils");
12
11
  const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
13
12
  const container_definitions_1 = require("@fluidframework/container-definitions");
14
13
  const driver_utils_1 = require("@fluidframework/driver-utils");
15
- const common_utils_1 = require("@fluidframework/common-utils");
14
+ const core_utils_1 = require("@fluidframework/core-utils");
16
15
  const uuid_1 = require("uuid");
17
- const garbage_collector_1 = require("@fluidframework/garbage-collector");
18
- const dataStoreContexts_1 = require("./dataStoreContexts");
19
- const dataStoreContext_1 = require("./dataStoreContext");
20
- const summaryFormat_1 = require("./summaryFormat");
21
- const dataStore_1 = require("./dataStore");
22
- const garbageCollection_1 = require("./garbageCollection");
16
+ const dataStoreContexts_1 = require("./dataStoreContexts.cjs");
17
+ const containerRuntime_1 = require("./containerRuntime.cjs");
18
+ const dataStoreContext_1 = require("./dataStoreContext.cjs");
19
+ const storageServiceWithAttachBlobs_1 = require("./storageServiceWithAttachBlobs.cjs");
20
+ const dataStore_1 = require("./dataStore.cjs");
21
+ const gc_1 = require("./gc/index.cjs");
22
+ const summary_1 = require("./summary/index.cjs");
23
23
  /**
24
24
  * This class encapsulates data store handling. Currently it is only used by the container runtime,
25
25
  * but eventually could be hosted on any channel once we formalize the channel api boundary.
26
26
  */
27
27
  class DataStores {
28
- constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger, getBaseGCDetails, gcNodeUpdated, aliasMap, writeGCDataAtRoot, contexts = new dataStoreContexts_1.DataStoreContexts(baseLogger)) {
28
+ constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, contexts = new dataStoreContexts_1.DataStoreContexts(baseLogger)) {
29
29
  this.baseSnapshot = baseSnapshot;
30
30
  this.runtime = runtime;
31
31
  this.submitAttachFn = submitAttachFn;
32
32
  this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
33
33
  this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
34
34
  this.gcNodeUpdated = gcNodeUpdated;
35
+ this.isDataStoreDeleted = isDataStoreDeleted;
35
36
  this.aliasMap = aliasMap;
36
- this.writeGCDataAtRoot = writeGCDataAtRoot;
37
37
  this.contexts = contexts;
38
38
  // Stores tracked by the Domain
39
39
  this.pendingAttach = new Map();
40
40
  // 0.24 back-compat attachingBeforeSummary
41
41
  this.attachOpFiredForDataStore = new Set();
42
- this.disposeOnce = new common_utils_1.Lazy(() => this.contexts.dispose());
42
+ this.disposeOnce = new core_utils_1.Lazy(() => this.contexts.dispose());
43
43
  // Stores the ids of new data stores between two GC runs. This is used to notify the garbage collector of new
44
44
  // root data stores that are added.
45
45
  this.dataStoresSinceLastGC = [];
46
+ this.pendingAliasMap = new Map();
46
47
  this.dispose = () => this.disposeOnce.value;
47
- this.logger = telemetry_utils_1.ChildLogger.create(baseLogger);
48
+ this.mc = (0, telemetry_utils_1.createChildMonitoringContext)({ logger: baseLogger });
48
49
  this.containerRuntimeHandle = new datastore_1.FluidObjectHandle(this.runtime, "/", this.runtime.IFluidHandleContext);
49
- const baseGCDetailsP = new common_utils_1.LazyPromise(async () => {
50
- return getBaseGCDetails();
51
- });
52
- // Returns the base GC details for the data store with the given id.
53
- const dataStoreBaseGCDetails = async (dataStoreId) => {
54
- const baseGCDetails = await baseGCDetailsP;
55
- return baseGCDetails.get(dataStoreId);
56
- };
57
50
  // Extract stores stored inside the snapshot
58
51
  const fluidDataStores = new Map();
59
52
  if (baseSnapshot) {
@@ -74,13 +67,12 @@ class DataStores {
74
67
  dataStoreContext = new dataStoreContext_1.RemoteFluidDataStoreContext({
75
68
  id: key,
76
69
  snapshotTree: value,
77
- getBaseGCDetails: async () => dataStoreBaseGCDetails(key),
78
70
  runtime: this.runtime,
79
71
  storage: this.runtime.storage,
80
72
  scope: this.runtime.scope,
81
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, { type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary }),
82
- writeGCDataAtRoot: this.writeGCDataAtRoot,
83
- disableIsolatedChannels: this.runtime.disableIsolatedChannels,
73
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
74
+ type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
75
+ }),
84
76
  });
85
77
  }
86
78
  else {
@@ -94,12 +86,12 @@ class DataStores {
94
86
  runtime: this.runtime,
95
87
  storage: this.runtime.storage,
96
88
  scope: this.runtime.scope,
97
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, { type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary }),
89
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
90
+ type: runtime_definitions_1.CreateSummarizerNodeSource.FromSummary,
91
+ }),
98
92
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
99
93
  snapshotTree,
100
94
  isRootDataStore: undefined,
101
- writeGCDataAtRoot: this.writeGCDataAtRoot,
102
- disableIsolatedChannels: this.runtime.disableIsolatedChannels,
103
95
  });
104
96
  }
105
97
  this.contexts.addBoundOrRemoted(dataStoreContext);
@@ -109,35 +101,41 @@ class DataStores {
109
101
  referencedDataStoreCount: fluidDataStores.size - unreferencedDataStoreCount,
110
102
  };
111
103
  }
112
- aliases() {
104
+ get aliases() {
113
105
  return this.aliasMap;
114
106
  }
107
+ get pendingAliases() {
108
+ return this.pendingAliasMap;
109
+ }
110
+ async waitIfPendingAlias(maybeAlias) {
111
+ const pendingAliasPromise = this.pendingAliases.get(maybeAlias);
112
+ return pendingAliasPromise ?? "Success";
113
+ }
115
114
  processAttachMessage(message, local) {
116
- var _a, _b;
117
115
  const attachMessage = message.contents;
118
116
  this.dataStoresSinceLastGC.push(attachMessage.id);
119
117
  // The local object has already been attached
120
118
  if (local) {
121
- (0, common_utils_1.assert)(this.pendingAttach.has(attachMessage.id), 0x15e /* "Local object does not have matching attach message id" */);
122
- (_a = this.contexts.get(attachMessage.id)) === null || _a === void 0 ? void 0 : _a.emit("attached");
119
+ (0, core_utils_1.assert)(this.pendingAttach.has(attachMessage.id), 0x15e /* "Local object does not have matching attach message id" */);
120
+ this.contexts.get(attachMessage.id)?.emit("attached");
123
121
  this.pendingAttach.delete(attachMessage.id);
124
122
  return;
125
123
  }
126
124
  // If a non-local operation then go and create the object, otherwise mark it as officially attached.
127
125
  if (this.alreadyProcessed(attachMessage.id)) {
128
126
  // TODO: dataStoreId may require a different tag from PackageData #7488
129
- const error = new container_utils_1.DataCorruptionError(
127
+ const error = new telemetry_utils_1.DataCorruptionError(
130
128
  // pre-0.58 error message: duplicateDataStoreCreatedWithExistingId
131
- "Duplicate DataStore created with existing id", Object.assign(Object.assign({}, (0, container_utils_1.extractSafePropertiesFromMessage)(message)), { dataStoreId: {
132
- value: attachMessage.id,
133
- tag: telemetry_utils_1.TelemetryDataTag.PackageData,
134
- } }));
129
+ "Duplicate DataStore created with existing id", {
130
+ ...(0, telemetry_utils_1.extractSafePropertiesFromMessage)(message),
131
+ ...(0, telemetry_utils_1.tagCodeArtifacts)({ dataStoreId: attachMessage.id }),
132
+ });
135
133
  throw error;
136
134
  }
137
- const flatBlobs = new Map();
135
+ const flatAttachBlobs = new Map();
138
136
  let snapshotTree;
139
137
  if (attachMessage.snapshot) {
140
- snapshotTree = (0, driver_utils_1.buildSnapshotTree)(attachMessage.snapshot.entries, flatBlobs);
138
+ snapshotTree = (0, driver_utils_1.buildSnapshotTree)(attachMessage.snapshot.entries, flatAttachBlobs);
141
139
  }
142
140
  // Include the type of attach message which is the pkg of the store to be
143
141
  // used by RemoteFluidDataStoreContext in case it is not in the snapshot.
@@ -145,20 +143,16 @@ class DataStores {
145
143
  const remoteFluidDataStoreContext = new dataStoreContext_1.RemoteFluidDataStoreContext({
146
144
  id: attachMessage.id,
147
145
  snapshotTree,
148
- // New data stores begin with empty GC details since GC hasn't run on them yet.
149
- getBaseGCDetails: async () => { return {}; },
150
146
  runtime: this.runtime,
151
- storage: new driver_utils_1.BlobCacheStorageService(this.runtime.storage, flatBlobs),
147
+ storage: new storageServiceWithAttachBlobs_1.StorageServiceWithAttachBlobs(this.runtime.storage, flatAttachBlobs),
152
148
  scope: this.runtime.scope,
153
149
  createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
154
150
  type: runtime_definitions_1.CreateSummarizerNodeSource.FromAttach,
155
151
  sequenceNumber: message.sequenceNumber,
156
- snapshot: (_b = attachMessage.snapshot) !== null && _b !== void 0 ? _b : {
157
- entries: [(0, dataStoreContext_1.createAttributesBlob)(pkg, true /* isRootDataStore */, this.runtime.disableIsolatedChannels)],
152
+ snapshot: attachMessage.snapshot ?? {
153
+ entries: [(0, dataStoreContext_1.createAttributesBlob)(pkg, true /* isRootDataStore */)],
158
154
  },
159
155
  }),
160
- writeGCDataAtRoot: this.writeGCDataAtRoot,
161
- disableIsolatedChannels: this.runtime.disableIsolatedChannels,
162
156
  pkg,
163
157
  });
164
158
  this.contexts.addBoundOrRemoted(remoteFluidDataStoreContext);
@@ -166,7 +160,9 @@ class DataStores {
166
160
  processAliasMessage(message, localOpMetadata, local) {
167
161
  const aliasMessage = message.contents;
168
162
  if (!(0, dataStore_1.isDataStoreAliasMessage)(aliasMessage)) {
169
- throw new container_utils_1.DataCorruptionError("malformedDataStoreAliasMessage", Object.assign({}, (0, container_utils_1.extractSafePropertiesFromMessage)(message)));
163
+ throw new telemetry_utils_1.DataCorruptionError("malformedDataStoreAliasMessage", {
164
+ ...(0, telemetry_utils_1.extractSafePropertiesFromMessage)(message),
165
+ });
170
166
  }
171
167
  const resolve = localOpMetadata;
172
168
  const aliasResult = this.processAliasMessageCore(aliasMessage);
@@ -179,8 +175,13 @@ class DataStores {
179
175
  return false;
180
176
  }
181
177
  const context = this.contexts.get(aliasMessage.internalId);
178
+ // If the data store has been deleted, log an error and ignore this message. This helps prevent document
179
+ // corruption in case a deleted data store accidentally submitted a signal.
180
+ if (this.checkAndLogIfDeleted(aliasMessage.internalId, context, "Changed", "processAliasMessageCore")) {
181
+ return false;
182
+ }
182
183
  if (context === undefined) {
183
- this.logger.sendErrorEvent({
184
+ this.mc.logger.sendErrorEvent({
184
185
  eventName: "AliasFluidDataStoreNotFound",
185
186
  fluidDataStoreId: aliasMessage.internalId,
186
187
  });
@@ -202,7 +203,7 @@ class DataStores {
202
203
  */
203
204
  makeDataStoreLocallyVisible(id) {
204
205
  const localContext = this.contexts.getUnbound(id);
205
- (0, common_utils_1.assert)(!!localContext, 0x15f /* "Could not find unbound context to bind" */);
206
+ (0, core_utils_1.assert)(!!localContext, 0x15f /* "Could not find unbound context to bind" */);
206
207
  /**
207
208
  * If the container is not detached, it is globally visible to all clients. This data store should also be
208
209
  * globally visible. Move it to attaching state and send an "attach" op for it.
@@ -218,59 +219,79 @@ class DataStores {
218
219
  this.contexts.bind(id);
219
220
  }
220
221
  createDetachedDataStoreCore(pkg, isRoot, id = (0, uuid_1.v4)()) {
221
- (0, common_utils_1.assert)(!id.includes("/"), 0x30c /* Id cannot contain slashes */);
222
+ (0, core_utils_1.assert)(!id.includes("/"), 0x30c /* Id cannot contain slashes */);
222
223
  const context = new dataStoreContext_1.LocalDetachedFluidDataStoreContext({
223
224
  id,
224
225
  pkg,
225
226
  runtime: this.runtime,
226
227
  storage: this.runtime.storage,
227
228
  scope: this.runtime.scope,
228
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, { type: runtime_definitions_1.CreateSummarizerNodeSource.Local }),
229
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
230
+ type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
231
+ }),
229
232
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
230
233
  snapshotTree: undefined,
231
234
  isRootDataStore: isRoot,
232
- writeGCDataAtRoot: this.writeGCDataAtRoot,
233
- disableIsolatedChannels: this.runtime.disableIsolatedChannels,
234
235
  });
235
236
  this.contexts.addUnbound(context);
236
237
  return context;
237
238
  }
238
- _createFluidDataStoreContext(pkg, id, isRoot, props) {
239
- (0, common_utils_1.assert)(!id.includes("/"), 0x30d /* Id cannot contain slashes */);
239
+ _createFluidDataStoreContext(pkg, id, props) {
240
+ (0, core_utils_1.assert)(!id.includes("/"), 0x30d /* Id cannot contain slashes */);
240
241
  const context = new dataStoreContext_1.LocalFluidDataStoreContext({
241
242
  id,
242
243
  pkg,
243
244
  runtime: this.runtime,
244
245
  storage: this.runtime.storage,
245
246
  scope: this.runtime.scope,
246
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, { type: runtime_definitions_1.CreateSummarizerNodeSource.Local }),
247
+ createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
248
+ type: runtime_definitions_1.CreateSummarizerNodeSource.Local,
249
+ }),
247
250
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
248
251
  snapshotTree: undefined,
249
- isRootDataStore: isRoot,
250
- writeGCDataAtRoot: this.writeGCDataAtRoot,
251
- disableIsolatedChannels: this.runtime.disableIsolatedChannels,
252
+ isRootDataStore: false,
252
253
  createProps: props,
253
254
  });
254
255
  this.contexts.addUnbound(context);
255
256
  return context;
256
257
  }
257
- get disposed() { return this.disposeOnce.evaluated; }
258
- resubmitDataStoreOp(content, localOpMetadata) {
259
- const envelope = content;
258
+ get disposed() {
259
+ return this.disposeOnce.evaluated;
260
+ }
261
+ resubmitDataStoreOp(envelope, localOpMetadata) {
260
262
  const context = this.contexts.get(envelope.address);
261
- (0, common_utils_1.assert)(!!context, 0x160 /* "There should be a store context for the op" */);
263
+ // If the data store has been deleted, log an error and throw an error. If there are local changes for a
264
+ // deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
265
+ if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "resubmitDataStoreOp")) {
266
+ throw new telemetry_utils_1.DataCorruptionError("Context is deleted!", {
267
+ callSite: "resubmitDataStoreOp",
268
+ ...(0, telemetry_utils_1.tagCodeArtifacts)({ id: envelope.address }),
269
+ });
270
+ }
271
+ (0, core_utils_1.assert)(!!context, 0x160 /* "There should be a store context for the op" */);
262
272
  context.reSubmit(envelope.contents, localOpMetadata);
263
273
  }
264
- rollbackDataStoreOp(content, localOpMetadata) {
265
- const envelope = content;
274
+ rollbackDataStoreOp(envelope, localOpMetadata) {
266
275
  const context = this.contexts.get(envelope.address);
267
- (0, common_utils_1.assert)(!!context, 0x2e8 /* "There should be a store context for the op" */);
276
+ // If the data store has been deleted, log an error and throw an error. If there are local changes for a
277
+ // deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
278
+ if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "rollbackDataStoreOp")) {
279
+ throw new telemetry_utils_1.DataCorruptionError("Context is deleted!", {
280
+ callSite: "rollbackDataStoreOp",
281
+ ...(0, telemetry_utils_1.tagCodeArtifacts)({ id: envelope.address }),
282
+ });
283
+ }
284
+ (0, core_utils_1.assert)(!!context, 0x2e8 /* "There should be a store context for the op" */);
268
285
  context.rollback(envelope.contents, localOpMetadata);
269
286
  }
270
- async applyStashedOp(content) {
271
- const envelope = content;
287
+ async applyStashedOp(envelope) {
272
288
  const context = this.contexts.get(envelope.address);
273
- (0, common_utils_1.assert)(!!context, 0x161 /* "There should be a store context for the op" */);
289
+ // If the data store has been deleted, log an error and ignore this message. This helps prevent document
290
+ // corruption in case the data store that stashed the op is deleted.
291
+ if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "applyStashedOp")) {
292
+ return undefined;
293
+ }
294
+ (0, core_utils_1.assert)(!!context, 0x161 /* "There should be a store context for the op" */);
274
295
  return context.applyStashedOp(envelope.contents);
275
296
  }
276
297
  async applyStashedAttachOp(message) {
@@ -280,16 +301,27 @@ class DataStores {
280
301
  }
281
302
  processFluidDataStoreOp(message, local, localMessageMetadata) {
282
303
  const envelope = message.contents;
283
- const transformed = Object.assign(Object.assign({}, message), { contents: envelope.contents });
304
+ const transformed = { ...message, contents: envelope.contents };
284
305
  const context = this.contexts.get(envelope.address);
285
- (0, common_utils_1.assert)(!!context, 0x162 /* "There should be a store context for the op" */);
306
+ // If the data store has been deleted, log an error and ignore this message. This helps prevent document
307
+ // corruption in case a deleted data store accidentally submitted an op.
308
+ if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "processFluidDataStoreOp")) {
309
+ return;
310
+ }
311
+ (0, core_utils_1.assert)(!!context, 0x162 /* "There should be a store context for the op" */);
286
312
  context.process(transformed, local, localMessageMetadata);
287
313
  // Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
288
314
  // being used.
289
315
  this.gcNodeUpdated(`/${envelope.address}`, message.timestamp, context.isLoaded ? context.packagePath : undefined);
290
316
  }
291
- async getDataStore(id, wait) {
292
- const context = await this.contexts.getBoundOrRemoted(id, wait);
317
+ async getDataStore(id, requestHeaderData) {
318
+ const headerData = { ...containerRuntime_1.defaultRuntimeHeaderData, ...requestHeaderData };
319
+ if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStore", requestHeaderData)) {
320
+ // The requested data store has been deleted by gc. Create a 404 response exception.
321
+ const request = { url: id };
322
+ throw (0, runtime_utils_1.responseToException)((0, runtime_utils_1.createResponseError)(404, "DataStore was deleted", request), request);
323
+ }
324
+ const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
293
325
  if (context === undefined) {
294
326
  // The requested data store does not exits. Throw a 404 response exception.
295
327
  const request = { url: id };
@@ -297,44 +329,85 @@ class DataStores {
297
329
  }
298
330
  return context;
299
331
  }
300
- processSignal(address, message, local) {
301
- const context = this.contexts.get(address);
332
+ /**
333
+ * Returns the data store requested with the given id if available. Otherwise, returns undefined.
334
+ */
335
+ async getDataStoreIfAvailable(id, requestHeaderData) {
336
+ // If the data store has been deleted, log an error and return undefined.
337
+ if (this.checkAndLogIfDeleted(id, this.contexts.get(id), "Requested", "getDataStoreIfAvailable", requestHeaderData)) {
338
+ return undefined;
339
+ }
340
+ const headerData = { ...containerRuntime_1.defaultRuntimeHeaderData, ...requestHeaderData };
341
+ const context = await this.contexts.getBoundOrRemoted(id, headerData.wait);
342
+ if (context === undefined) {
343
+ return undefined;
344
+ }
345
+ return context;
346
+ }
347
+ /**
348
+ * Checks if the data store has been deleted by GC. If so, log an error.
349
+ * @param id - The data store's id.
350
+ * @param context - The data store context.
351
+ * @param callSite - The function name this is called from.
352
+ * @param requestHeaderData - The request header information to log if the data store is deleted.
353
+ * @returns true if the data store is deleted. Otherwise, returns false.
354
+ */
355
+ checkAndLogIfDeleted(id, context, deletedLogSuffix, callSite, requestHeaderData) {
356
+ const dataStoreNodePath = `/${id}`;
357
+ if (!this.isDataStoreDeleted(dataStoreNodePath)) {
358
+ return false;
359
+ }
360
+ this.mc.logger.sendErrorEvent({
361
+ eventName: `GC_Deleted_DataStore_${deletedLogSuffix}`,
362
+ ...(0, telemetry_utils_1.tagCodeArtifacts)({ id }),
363
+ callSite,
364
+ headers: JSON.stringify(requestHeaderData),
365
+ exists: context !== undefined,
366
+ });
367
+ return true;
368
+ }
369
+ processSignal(fluidDataStoreId, message, local) {
370
+ const context = this.contexts.get(fluidDataStoreId);
371
+ // If the data store has been deleted, log an error and ignore this message. This helps prevent document
372
+ // corruption in case a deleted data store accidentally submitted a signal.
373
+ if (this.checkAndLogIfDeleted(fluidDataStoreId, context, "Changed", "processSignal")) {
374
+ return;
375
+ }
302
376
  if (!context) {
303
377
  // Attach message may not have been processed yet
304
- (0, common_utils_1.assert)(!local, 0x163 /* "Missing datastore for local signal" */);
305
- this.logger.sendTelemetryEvent({
378
+ (0, core_utils_1.assert)(!local, 0x163 /* "Missing datastore for local signal" */);
379
+ this.mc.logger.sendTelemetryEvent({
306
380
  eventName: "SignalFluidDataStoreNotFound",
307
- fluidDataStoreId: {
308
- value: address,
309
- tag: telemetry_utils_1.TelemetryDataTag.PackageData,
310
- },
381
+ ...(0, telemetry_utils_1.tagCodeArtifacts)({
382
+ fluidDataStoreId,
383
+ }),
311
384
  });
312
385
  return;
313
386
  }
314
387
  context.processSignal(message, local);
315
388
  }
316
389
  setConnectionState(connected, clientId) {
317
- for (const [fluidDataStore, context] of this.contexts) {
390
+ for (const [fluidDataStoreId, context] of this.contexts) {
318
391
  try {
319
392
  context.setConnectionState(connected, clientId);
320
393
  }
321
394
  catch (error) {
322
- this.logger.sendErrorEvent({
395
+ this.mc.logger.sendErrorEvent({
323
396
  eventName: "SetConnectionStateError",
324
397
  clientId,
325
- fluidDataStore,
398
+ ...(0, telemetry_utils_1.tagCodeArtifacts)({
399
+ fluidDataStoreId,
400
+ }),
401
+ details: JSON.stringify({
402
+ runtimeConnected: this.runtime.connected,
403
+ connected,
404
+ }),
326
405
  }, error);
327
406
  }
328
407
  }
329
408
  }
330
409
  setAttachState(attachState) {
331
- let eventName;
332
- if (attachState === container_definitions_1.AttachState.Attaching) {
333
- eventName = "attaching";
334
- }
335
- else {
336
- eventName = "attached";
337
- }
410
+ const eventName = attachState === container_definitions_1.AttachState.Attaching ? "attaching" : "attached";
338
411
  for (const [, context] of this.contexts) {
339
412
  // Fire only for bounded stores.
340
413
  if (!this.contexts.isNotBound(context.id)) {
@@ -350,10 +423,17 @@ class DataStores {
350
423
  // Iterate over each store and ask it to snapshot
351
424
  await Promise.all(Array.from(this.contexts)
352
425
  .filter(([_, context]) => {
353
- // Summarizer works only with clients with no local changes!
354
- (0, common_utils_1.assert)(context.attachState !== container_definitions_1.AttachState.Attaching, 0x165 /* "Summarizer cannot work if client has local changes" */);
426
+ // Summarizer works only with clients with no local changes. A data store in attaching
427
+ // state indicates an op was sent to attach a local data store, and the the attach op
428
+ // had not yet round tripped back to the client.
429
+ if (context.attachState === container_definitions_1.AttachState.Attaching) {
430
+ // Formerly assert 0x588
431
+ const error = telemetry_utils_1.DataProcessingError.create("Local data store detected in attaching state during summarize", "summarize");
432
+ throw error;
433
+ }
355
434
  return context.attachState === container_definitions_1.AttachState.Attached;
356
- }).map(async ([contextId, context]) => {
435
+ })
436
+ .map(async ([contextId, context]) => {
357
437
  const contextSummary = await context.summarize(fullTree, trackState, telemetryContext);
358
438
  summaryBuilder.addWithStats(contextId, contextSummary);
359
439
  }));
@@ -373,9 +453,9 @@ class DataStores {
373
453
  // Take summary of bounded data stores only, make sure we haven't summarized them already
374
454
  // and no attach op has been fired for that data store because for loader versions <= 0.24
375
455
  // we set attach state as "attaching" before taking createNew summary.
376
- !(this.contexts.isNotBound(key)
377
- || builderTree[key]
378
- || this.attachOpFiredForDataStore.has(key)))
456
+ !(this.contexts.isNotBound(key) ||
457
+ builderTree[key] ||
458
+ this.attachOpFiredForDataStore.has(key)))
379
459
  .map(([key, value]) => {
380
460
  let dataStoreSummary;
381
461
  if (value.isLoaded) {
@@ -385,7 +465,7 @@ class DataStores {
385
465
  else {
386
466
  // If this data store is not yet loaded, then there should be no changes in the snapshot from
387
467
  // which it was created as it is detached container. So just use the previous snapshot.
388
- (0, common_utils_1.assert)(!!this.baseSnapshot, 0x166 /* "BaseSnapshot should be there as detached container loaded from snapshot" */);
468
+ (0, core_utils_1.assert)(!!this.baseSnapshot, 0x166 /* "BaseSnapshot should be there as detached container loaded from snapshot" */);
389
469
  dataStoreSummary = (0, runtime_utils_1.convertSnapshotTreeToSummaryTree)(this.baseSnapshot.trees[key]);
390
470
  }
391
471
  builder.addWithStats(key, dataStoreSummary);
@@ -401,7 +481,7 @@ class DataStores {
401
481
  async updateStateBeforeGC() {
402
482
  for (const id of this.dataStoresSinceLastGC) {
403
483
  const context = this.contexts.get(id);
404
- (0, common_utils_1.assert)(context !== undefined, 0x2b6 /* Missing data store context */);
484
+ (0, core_utils_1.assert)(context !== undefined, 0x2b6 /* Missing data store context */);
405
485
  if (await context.isRoot()) {
406
486
  // A root data store is basically a reference from the container runtime to the data store.
407
487
  const handle = new datastore_1.FluidObjectHandle(context, id, this.runtime.IFluidHandleContext);
@@ -412,22 +492,33 @@ class DataStores {
412
492
  }
413
493
  /**
414
494
  * Generates data used for garbage collection. It does the following:
495
+ *
415
496
  * 1. Calls into each child data store context to get its GC data.
497
+ *
416
498
  * 2. Prefixes the child context's id to the GC nodes in the child's GC data. This makes sure that the node can be
417
- * identified as belonging to the child.
499
+ * identified as belonging to the child.
500
+ *
418
501
  * 3. Adds a GC node for this channel to the nodes received from the children. All these nodes together represent
419
- * the GC data of this channel.
502
+ * the GC data of this channel.
503
+ *
420
504
  * @param fullGC - true to bypass optimizations and force full generation of GC data.
421
505
  */
422
506
  async getGCData(fullGC = false) {
423
- const builder = new garbage_collector_1.GCDataBuilder();
507
+ const builder = new runtime_utils_1.GCDataBuilder();
424
508
  // Iterate over each store and get their GC data.
425
509
  await Promise.all(Array.from(this.contexts)
426
510
  .filter(([_, context]) => {
427
- // Get GC data only for attached contexts. Detached contexts are not connected in the GC reference
428
- // graph so any references they might have won't be connected as well.
511
+ // Summarizer client and hence GC works only with clients with no local changes. A data store in
512
+ // attaching state indicates an op was sent to attach a local data store, and the the attach op
513
+ // had not yet round tripped back to the client.
514
+ // Formerly assert 0x589
515
+ if (context.attachState === container_definitions_1.AttachState.Attaching) {
516
+ const error = telemetry_utils_1.DataProcessingError.create("Local data store detected in attaching state while running GC", "getGCData");
517
+ throw error;
518
+ }
429
519
  return context.attachState === container_definitions_1.AttachState.Attached;
430
- }).map(async ([contextId, context]) => {
520
+ })
521
+ .map(async ([contextId, context]) => {
431
522
  const contextGCData = await context.getGCData(fullGC);
432
523
  // Prefix the child's id to the ids of its GC nodes so they can be identified as belonging to the child.
433
524
  // This also gradually builds the id of each node to be a path from the root.
@@ -440,28 +531,24 @@ class DataStores {
440
531
  /**
441
532
  * After GC has run, called to notify this Container's data stores of routes that are used in it.
442
533
  * @param usedRoutes - The routes that are used in all data stores in this Container.
443
- * @param gcTimestamp - The time when GC was run that generated these used routes. If any node node becomes
444
- * unreferenced as part of this GC run, this should be used to update the time when it happens.
445
534
  */
446
- updateUsedRoutes(usedRoutes, gcTimestamp) {
447
- var _a;
535
+ updateUsedRoutes(usedRoutes) {
448
536
  // Get a map of data store ids to routes used in it.
449
- const usedDataStoreRoutes = (0, garbage_collector_1.unpackChildNodesUsedRoutes)(usedRoutes);
537
+ const usedDataStoreRoutes = (0, runtime_utils_1.unpackChildNodesUsedRoutes)(usedRoutes);
450
538
  // Verify that the used routes are correct.
451
539
  for (const [id] of usedDataStoreRoutes) {
452
- (0, common_utils_1.assert)(this.contexts.has(id), 0x167 /* "Used route does not belong to any known data store" */);
540
+ (0, core_utils_1.assert)(this.contexts.has(id), 0x167 /* "Used route does not belong to any known data store" */);
453
541
  }
454
542
  // Update the used routes in each data store. Used routes is empty for unused data stores.
455
543
  for (const [contextId, context] of this.contexts) {
456
- context.updateUsedRoutes((_a = usedDataStoreRoutes.get(contextId)) !== null && _a !== void 0 ? _a : [], gcTimestamp);
544
+ context.updateUsedRoutes(usedDataStoreRoutes.get(contextId) ?? []);
457
545
  }
458
546
  }
459
547
  /**
460
- * When running GC in test mode, this is called to delete objects whose routes are unused. This enables testing
461
- * scenarios with accessing deleted content.
548
+ * This is called to update objects whose routes are unused. The unused objects are deleted.
462
549
  * @param unusedRoutes - The routes that are unused in all data stores in this Container.
463
550
  */
464
- deleteUnusedRoutes(unusedRoutes) {
551
+ updateUnusedRoutes(unusedRoutes) {
465
552
  for (const route of unusedRoutes) {
466
553
  const pathParts = route.split("/");
467
554
  // Delete data store only if its route (/datastoreId) is in unusedRoutes. We don't want to delete a data
@@ -470,13 +557,73 @@ class DataStores {
470
557
  continue;
471
558
  }
472
559
  const dataStoreId = pathParts[1];
473
- (0, common_utils_1.assert)(this.contexts.has(dataStoreId), 0x2d7 /* No data store with specified id */);
560
+ (0, core_utils_1.assert)(this.contexts.has(dataStoreId), 0x2d7 /* No data store with specified id */);
474
561
  // Delete the contexts of unused data stores.
475
562
  this.contexts.delete(dataStoreId);
476
563
  // Delete the summarizer node of the unused data stores.
477
564
  this.deleteChildSummarizerNodeFn(dataStoreId);
478
565
  }
479
566
  }
567
+ /**
568
+ * Delete data stores and its objects that are sweep ready.
569
+ * @param sweepReadyDataStoreRoutes - The routes of data stores and its objects that are sweep ready and should
570
+ * be deleted.
571
+ * @returns The routes of data stores and its objects that were deleted.
572
+ */
573
+ deleteSweepReadyNodes(sweepReadyDataStoreRoutes) {
574
+ // If sweep for data stores is not enabled, return empty list indicating nothing is deleted.
575
+ if (this.mc.config.getBoolean(gc_1.disableDatastoreSweepKey) === true) {
576
+ return [];
577
+ }
578
+ for (const route of sweepReadyDataStoreRoutes) {
579
+ const pathParts = route.split("/");
580
+ const dataStoreId = pathParts[1];
581
+ // Ignore sub-data store routes because a data store and its sub-routes are deleted together, so, we only
582
+ // need to delete the data store.
583
+ if (pathParts.length > 2) {
584
+ continue;
585
+ }
586
+ const dataStoreContext = this.contexts.get(dataStoreId);
587
+ if (dataStoreContext === undefined) {
588
+ this.mc.logger.sendErrorEvent({
589
+ eventName: "DeletedDataStoreNotFound",
590
+ ...(0, telemetry_utils_1.tagCodeArtifacts)({ id: dataStoreId }),
591
+ details: {
592
+ alreadyDeleted: this.isDataStoreDeleted(dataStoreId),
593
+ },
594
+ });
595
+ continue;
596
+ }
597
+ dataStoreContext.delete();
598
+ // Delete the contexts of sweep ready data stores.
599
+ this.contexts.delete(dataStoreId);
600
+ // Delete the summarizer node of the sweep ready data stores.
601
+ this.deleteChildSummarizerNodeFn(dataStoreId);
602
+ }
603
+ return Array.from(sweepReadyDataStoreRoutes);
604
+ }
605
+ /**
606
+ * This is called to update objects whose routes are tombstones. Tombstoned datastore contexts enable testing
607
+ * scenarios with accessing deleted content without actually deleting content from summaries.
608
+ * @param tombstonedRoutes - The routes that are tombstones in all data stores in this Container.
609
+ */
610
+ updateTombstonedRoutes(tombstonedRoutes) {
611
+ const tombstonedDataStoresSet = new Set();
612
+ for (const route of tombstonedRoutes) {
613
+ const pathParts = route.split("/");
614
+ // Tombstone data store only if its route (/datastoreId) is directly in tombstoneRoutes.
615
+ if (pathParts.length > 2) {
616
+ continue;
617
+ }
618
+ const dataStoreId = pathParts[1];
619
+ (0, core_utils_1.assert)(this.contexts.has(dataStoreId), 0x510 /* No data store with specified id */);
620
+ tombstonedDataStoresSet.add(dataStoreId);
621
+ }
622
+ // Update the used routes in each data store. Used routes is empty for unused data stores.
623
+ for (const [contextId, context] of this.contexts) {
624
+ context.setTombstone(tombstonedDataStoresSet.has(contextId));
625
+ }
626
+ }
480
627
  /**
481
628
  * Returns the outbound routes of this channel. Only root data stores are considered referenced and their paths are
482
629
  * part of outbound routes.
@@ -495,11 +642,10 @@ class DataStores {
495
642
  * Called by GC to retrieve the package path of a data store node with the given path.
496
643
  */
497
644
  async getDataStorePackagePath(nodePath) {
498
- var _a;
499
645
  // If the node belongs to a data store, return its package path. For DDSes, we return the package path of the
500
646
  // data store that contains it.
501
647
  const context = this.contexts.get(nodePath.split("/")[1]);
502
- return (_a = (await (context === null || context === void 0 ? void 0 : context.getInitialSnapshotDetails()))) === null || _a === void 0 ? void 0 : _a.pkg;
648
+ return (await context?.getInitialSnapshotDetails())?.pkg;
503
649
  }
504
650
  /**
505
651
  * Called by GC to determine if a node is for a data store or for an object within a data store (for e.g. DDS).
@@ -513,9 +659,9 @@ class DataStores {
513
659
  // Data stores paths are of the format "/dataStoreId".
514
660
  // Sub data store paths are of the format "/dataStoreId/subPath/...".
515
661
  if (pathParts.length === 2) {
516
- return garbageCollection_1.GCNodeType.DataStore;
662
+ return gc_1.GCNodeType.DataStore;
517
663
  }
518
- return garbageCollection_1.GCNodeType.SubDataStore;
664
+ return gc_1.GCNodeType.SubDataStore;
519
665
  }
520
666
  }
521
667
  exports.DataStores = DataStores;
@@ -523,21 +669,24 @@ function getSummaryForDatastores(snapshot, metadata) {
523
669
  if (!snapshot) {
524
670
  return undefined;
525
671
  }
526
- if ((0, summaryFormat_1.rootHasIsolatedChannels)(metadata)) {
672
+ if ((0, summary_1.rootHasIsolatedChannels)(metadata)) {
527
673
  const datastoresSnapshot = snapshot.trees[runtime_definitions_1.channelsTreeName];
528
- (0, common_utils_1.assert)(!!datastoresSnapshot, 0x168 /* Expected tree in snapshot not found */);
674
+ (0, core_utils_1.assert)(!!datastoresSnapshot, 0x168 /* Expected tree in snapshot not found */);
529
675
  return datastoresSnapshot;
530
676
  }
531
677
  else {
532
678
  // back-compat: strip out all non-datastore paths before giving to DataStores object.
533
679
  const datastoresTrees = {};
534
680
  for (const [key, value] of Object.entries(snapshot.trees)) {
535
- if (!summaryFormat_1.nonDataStorePaths.includes(key)) {
681
+ if (!summary_1.nonDataStorePaths.includes(key)) {
536
682
  datastoresTrees[key] = value;
537
683
  }
538
684
  }
539
- return Object.assign(Object.assign({}, snapshot), { trees: datastoresTrees });
685
+ return {
686
+ ...snapshot,
687
+ trees: datastoresTrees,
688
+ };
540
689
  }
541
690
  }
542
691
  exports.getSummaryForDatastores = getSummaryForDatastores;
543
- //# sourceMappingURL=dataStores.js.map
692
+ //# sourceMappingURL=dataStores.cjs.map