@fluidframework/container-runtime 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (554) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/api-report/container-runtime.api.md +471 -52
  3. package/dist/batchTracker.d.ts +1 -1
  4. package/dist/batchTracker.d.ts.map +1 -1
  5. package/dist/batchTracker.js +4 -4
  6. package/dist/batchTracker.js.map +1 -1
  7. package/dist/blobManager.d.ts +33 -30
  8. package/dist/blobManager.d.ts.map +1 -1
  9. package/dist/blobManager.js +82 -107
  10. package/dist/blobManager.js.map +1 -1
  11. package/dist/channelCollection.d.ts +27 -22
  12. package/dist/channelCollection.d.ts.map +1 -1
  13. package/dist/channelCollection.js +155 -165
  14. package/dist/channelCollection.js.map +1 -1
  15. package/dist/connectionTelemetry.d.ts +3 -3
  16. package/dist/connectionTelemetry.d.ts.map +1 -1
  17. package/dist/connectionTelemetry.js +17 -17
  18. package/dist/connectionTelemetry.js.map +1 -1
  19. package/dist/containerHandleContext.d.ts.map +1 -1
  20. package/dist/containerHandleContext.js +2 -2
  21. package/dist/containerHandleContext.js.map +1 -1
  22. package/dist/containerRuntime.d.ts +42 -39
  23. package/dist/containerRuntime.d.ts.map +1 -1
  24. package/dist/containerRuntime.js +425 -292
  25. package/dist/containerRuntime.js.map +1 -1
  26. package/dist/dataStore.d.ts +1 -1
  27. package/dist/dataStore.d.ts.map +1 -1
  28. package/dist/dataStore.js +8 -8
  29. package/dist/dataStore.js.map +1 -1
  30. package/dist/dataStoreContext.d.ts +58 -19
  31. package/dist/dataStoreContext.d.ts.map +1 -1
  32. package/dist/dataStoreContext.js +169 -114
  33. package/dist/dataStoreContext.js.map +1 -1
  34. package/dist/dataStoreContexts.d.ts +1 -0
  35. package/dist/dataStoreContexts.d.ts.map +1 -1
  36. package/dist/dataStoreContexts.js +12 -11
  37. package/dist/dataStoreContexts.js.map +1 -1
  38. package/dist/dataStoreRegistry.d.ts +5 -1
  39. package/dist/dataStoreRegistry.d.ts.map +1 -1
  40. package/dist/dataStoreRegistry.js +4 -4
  41. package/dist/dataStoreRegistry.js.map +1 -1
  42. package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
  43. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  44. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  45. package/dist/deltaScheduler.d.ts +1 -1
  46. package/dist/deltaScheduler.d.ts.map +1 -1
  47. package/dist/deltaScheduler.js +6 -6
  48. package/dist/deltaScheduler.js.map +1 -1
  49. package/dist/error.d.ts +1 -1
  50. package/dist/error.d.ts.map +1 -1
  51. package/dist/error.js +4 -4
  52. package/dist/error.js.map +1 -1
  53. package/dist/gc/garbageCollection.d.ts +3 -2
  54. package/dist/gc/garbageCollection.d.ts.map +1 -1
  55. package/dist/gc/garbageCollection.js +23 -23
  56. package/dist/gc/garbageCollection.js.map +1 -1
  57. package/dist/gc/gcConfigs.d.ts +2 -2
  58. package/dist/gc/gcConfigs.d.ts.map +1 -1
  59. package/dist/gc/gcConfigs.js +4 -5
  60. package/dist/gc/gcConfigs.js.map +1 -1
  61. package/dist/gc/gcDefinitions.d.ts +4 -5
  62. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  63. package/dist/gc/gcDefinitions.js.map +1 -1
  64. package/dist/gc/gcHelpers.d.ts +5 -1
  65. package/dist/gc/gcHelpers.d.ts.map +1 -1
  66. package/dist/gc/gcHelpers.js +21 -12
  67. package/dist/gc/gcHelpers.js.map +1 -1
  68. package/dist/gc/gcSummaryStateTracker.d.ts +2 -2
  69. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  70. package/dist/gc/gcSummaryStateTracker.js +11 -11
  71. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  72. package/dist/gc/gcTelemetry.d.ts +2 -1
  73. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  74. package/dist/gc/gcTelemetry.js +11 -9
  75. package/dist/gc/gcTelemetry.js.map +1 -1
  76. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  77. package/dist/gc/gcUnreferencedStateTracker.js +6 -6
  78. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  79. package/dist/gc/index.d.ts +1 -1
  80. package/dist/gc/index.d.ts.map +1 -1
  81. package/dist/gc/index.js +2 -1
  82. package/dist/gc/index.js.map +1 -1
  83. package/dist/index.d.ts +5 -2
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +12 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/legacy.d.ts +91 -0
  88. package/dist/messageTypes.d.ts +11 -5
  89. package/dist/messageTypes.d.ts.map +1 -1
  90. package/dist/messageTypes.js +4 -0
  91. package/dist/messageTypes.js.map +1 -1
  92. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  93. package/dist/opLifecycle/batchManager.js.map +1 -1
  94. package/dist/opLifecycle/definitions.d.ts +2 -20
  95. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  96. package/dist/opLifecycle/definitions.js.map +1 -1
  97. package/dist/opLifecycle/index.d.ts +3 -3
  98. package/dist/opLifecycle/index.d.ts.map +1 -1
  99. package/dist/opLifecycle/index.js +3 -1
  100. package/dist/opLifecycle/index.js.map +1 -1
  101. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  102. package/dist/opLifecycle/opCompressor.js +5 -6
  103. package/dist/opLifecycle/opCompressor.js.map +1 -1
  104. package/dist/opLifecycle/opDecompressor.d.ts +15 -4
  105. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  106. package/dist/opLifecycle/opDecompressor.js +62 -63
  107. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  108. package/dist/opLifecycle/opGroupingManager.d.ts +2 -1
  109. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  110. package/dist/opLifecycle/opGroupingManager.js +14 -16
  111. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  112. package/dist/opLifecycle/opSplitter.d.ts +12 -4
  113. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  114. package/dist/opLifecycle/opSplitter.js +63 -53
  115. package/dist/opLifecycle/opSplitter.js.map +1 -1
  116. package/dist/opLifecycle/outbox.d.ts +2 -1
  117. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  118. package/dist/opLifecycle/outbox.js +30 -29
  119. package/dist/opLifecycle/outbox.js.map +1 -1
  120. package/dist/opLifecycle/remoteMessageProcessor.d.ts +8 -0
  121. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  122. package/dist/opLifecycle/remoteMessageProcessor.js +36 -32
  123. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  124. package/dist/packageVersion.d.ts +1 -1
  125. package/dist/packageVersion.js +1 -1
  126. package/dist/packageVersion.js.map +1 -1
  127. package/dist/pendingStateManager.d.ts +1 -1
  128. package/dist/pendingStateManager.d.ts.map +1 -1
  129. package/dist/pendingStateManager.js +18 -18
  130. package/dist/pendingStateManager.js.map +1 -1
  131. package/dist/public.d.ts +12 -0
  132. package/dist/scheduleManager.d.ts +1 -1
  133. package/dist/scheduleManager.d.ts.map +1 -1
  134. package/dist/scheduleManager.js +28 -24
  135. package/dist/scheduleManager.js.map +1 -1
  136. package/dist/storageServiceWithAttachBlobs.d.ts +2 -2
  137. package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -1
  138. package/dist/storageServiceWithAttachBlobs.js +2 -2
  139. package/dist/storageServiceWithAttachBlobs.js.map +1 -1
  140. package/dist/summary/documentSchema.d.ts +209 -0
  141. package/dist/summary/documentSchema.d.ts.map +1 -0
  142. package/dist/summary/documentSchema.js +390 -0
  143. package/dist/summary/documentSchema.js.map +1 -0
  144. package/dist/summary/index.d.ts +2 -1
  145. package/dist/summary/index.d.ts.map +1 -1
  146. package/dist/summary/index.js +4 -1
  147. package/dist/summary/index.js.map +1 -1
  148. package/dist/summary/orderedClientElection.d.ts +2 -2
  149. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  150. package/dist/summary/orderedClientElection.js +12 -7
  151. package/dist/summary/orderedClientElection.js.map +1 -1
  152. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  153. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  154. package/dist/summary/runWhileConnectedCoordinator.js +3 -3
  155. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  156. package/dist/summary/runningSummarizer.d.ts +3 -3
  157. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  158. package/dist/summary/runningSummarizer.js +16 -16
  159. package/dist/summary/runningSummarizer.js.map +1 -1
  160. package/dist/summary/summarizer.d.ts +3 -2
  161. package/dist/summary/summarizer.d.ts.map +1 -1
  162. package/dist/summary/summarizer.js +13 -13
  163. package/dist/summary/summarizer.js.map +1 -1
  164. package/dist/summary/summarizerClientElection.d.ts +2 -2
  165. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  166. package/dist/summary/summarizerClientElection.js.map +1 -1
  167. package/dist/summary/summarizerHeuristics.d.ts +1 -1
  168. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  169. package/dist/summary/summarizerHeuristics.js +2 -2
  170. package/dist/summary/summarizerHeuristics.js.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNode.d.ts +3 -2
  172. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  173. package/dist/summary/summarizerNode/summarizerNode.js +28 -28
  174. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  175. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
  176. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  177. package/dist/summary/summarizerNode/summarizerNodeUtils.js +3 -3
  178. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  179. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
  180. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  181. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +14 -14
  182. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  183. package/dist/summary/summarizerTypes.d.ts +5 -3
  184. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  185. package/dist/summary/summarizerTypes.js.map +1 -1
  186. package/dist/summary/summaryCollection.d.ts +2 -2
  187. package/dist/summary/summaryCollection.d.ts.map +1 -1
  188. package/dist/summary/summaryCollection.js +7 -7
  189. package/dist/summary/summaryCollection.js.map +1 -1
  190. package/dist/summary/summaryFormat.d.ts +6 -17
  191. package/dist/summary/summaryFormat.d.ts.map +1 -1
  192. package/dist/summary/summaryFormat.js +8 -8
  193. package/dist/summary/summaryFormat.js.map +1 -1
  194. package/dist/summary/summaryGenerator.d.ts +4 -3
  195. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  196. package/dist/summary/summaryGenerator.js +17 -17
  197. package/dist/summary/summaryGenerator.js.map +1 -1
  198. package/dist/summary/summaryManager.d.ts +1 -1
  199. package/dist/summary/summaryManager.d.ts.map +1 -1
  200. package/dist/summary/summaryManager.js +15 -14
  201. package/dist/summary/summaryManager.js.map +1 -1
  202. package/internal.d.ts +11 -0
  203. package/legacy.d.ts +11 -0
  204. package/lib/batchTracker.d.ts +1 -1
  205. package/lib/batchTracker.d.ts.map +1 -1
  206. package/lib/batchTracker.js +2 -2
  207. package/lib/batchTracker.js.map +1 -1
  208. package/lib/blobManager.d.ts +33 -30
  209. package/lib/blobManager.d.ts.map +1 -1
  210. package/lib/blobManager.js +48 -73
  211. package/lib/blobManager.js.map +1 -1
  212. package/lib/channelCollection.d.ts +27 -22
  213. package/lib/channelCollection.d.ts.map +1 -1
  214. package/lib/channelCollection.js +96 -106
  215. package/lib/channelCollection.js.map +1 -1
  216. package/lib/connectionTelemetry.d.ts +3 -3
  217. package/lib/connectionTelemetry.d.ts.map +1 -1
  218. package/lib/connectionTelemetry.js +3 -3
  219. package/lib/connectionTelemetry.js.map +1 -1
  220. package/lib/containerHandleContext.d.ts.map +1 -1
  221. package/lib/containerHandleContext.js +1 -1
  222. package/lib/containerHandleContext.js.map +1 -1
  223. package/lib/containerRuntime.d.ts +42 -39
  224. package/lib/containerRuntime.d.ts.map +1 -1
  225. package/lib/containerRuntime.js +276 -141
  226. package/lib/containerRuntime.js.map +1 -1
  227. package/lib/dataStore.d.ts +1 -1
  228. package/lib/dataStore.d.ts.map +1 -1
  229. package/lib/dataStore.js +3 -3
  230. package/lib/dataStore.js.map +1 -1
  231. package/lib/dataStoreContext.d.ts +58 -19
  232. package/lib/dataStoreContext.d.ts.map +1 -1
  233. package/lib/dataStoreContext.js +107 -52
  234. package/lib/dataStoreContext.js.map +1 -1
  235. package/lib/dataStoreContexts.d.ts +1 -0
  236. package/lib/dataStoreContexts.d.ts.map +1 -1
  237. package/lib/dataStoreContexts.js +3 -2
  238. package/lib/dataStoreContexts.js.map +1 -1
  239. package/lib/dataStoreRegistry.d.ts +5 -1
  240. package/lib/dataStoreRegistry.d.ts.map +1 -1
  241. package/lib/dataStoreRegistry.js +1 -1
  242. package/lib/dataStoreRegistry.js.map +1 -1
  243. package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
  244. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
  245. package/lib/deltaManagerSummarizerProxy.js.map +1 -1
  246. package/lib/deltaScheduler.d.ts +1 -1
  247. package/lib/deltaScheduler.d.ts.map +1 -1
  248. package/lib/deltaScheduler.js +1 -1
  249. package/lib/deltaScheduler.js.map +1 -1
  250. package/lib/error.d.ts +1 -1
  251. package/lib/error.d.ts.map +1 -1
  252. package/lib/error.js +2 -2
  253. package/lib/error.js.map +1 -1
  254. package/lib/gc/garbageCollection.d.ts +3 -2
  255. package/lib/gc/garbageCollection.d.ts.map +1 -1
  256. package/lib/gc/garbageCollection.js +8 -8
  257. package/lib/gc/garbageCollection.js.map +1 -1
  258. package/lib/gc/gcConfigs.d.ts +2 -2
  259. package/lib/gc/gcConfigs.d.ts.map +1 -1
  260. package/lib/gc/gcConfigs.js +4 -5
  261. package/lib/gc/gcConfigs.js.map +1 -1
  262. package/lib/gc/gcDefinitions.d.ts +4 -5
  263. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  264. package/lib/gc/gcDefinitions.js.map +1 -1
  265. package/lib/gc/gcHelpers.d.ts +5 -1
  266. package/lib/gc/gcHelpers.d.ts.map +1 -1
  267. package/lib/gc/gcHelpers.js +10 -2
  268. package/lib/gc/gcHelpers.js.map +1 -1
  269. package/lib/gc/gcSummaryStateTracker.d.ts +2 -2
  270. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  271. package/lib/gc/gcSummaryStateTracker.js +2 -2
  272. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  273. package/lib/gc/gcTelemetry.d.ts +2 -1
  274. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  275. package/lib/gc/gcTelemetry.js +4 -2
  276. package/lib/gc/gcTelemetry.js.map +1 -1
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  278. package/lib/gc/gcUnreferencedStateTracker.js +2 -2
  279. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
  280. package/lib/gc/index.d.ts +1 -1
  281. package/lib/gc/index.d.ts.map +1 -1
  282. package/lib/gc/index.js +1 -1
  283. package/lib/gc/index.js.map +1 -1
  284. package/lib/index.d.ts +5 -2
  285. package/lib/index.d.ts.map +1 -1
  286. package/lib/index.js +5 -2
  287. package/lib/index.js.map +1 -1
  288. package/lib/legacy.d.ts +91 -0
  289. package/lib/messageTypes.d.ts +11 -5
  290. package/lib/messageTypes.d.ts.map +1 -1
  291. package/lib/messageTypes.js +4 -0
  292. package/lib/messageTypes.js.map +1 -1
  293. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  294. package/lib/opLifecycle/batchManager.js.map +1 -1
  295. package/lib/opLifecycle/definitions.d.ts +2 -20
  296. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  297. package/lib/opLifecycle/definitions.js.map +1 -1
  298. package/lib/opLifecycle/index.d.ts +3 -3
  299. package/lib/opLifecycle/index.d.ts.map +1 -1
  300. package/lib/opLifecycle/index.js +2 -2
  301. package/lib/opLifecycle/index.js.map +1 -1
  302. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  303. package/lib/opLifecycle/opCompressor.js +2 -3
  304. package/lib/opLifecycle/opCompressor.js.map +1 -1
  305. package/lib/opLifecycle/opDecompressor.d.ts +15 -4
  306. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  307. package/lib/opLifecycle/opDecompressor.js +61 -62
  308. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  309. package/lib/opLifecycle/opGroupingManager.d.ts +2 -1
  310. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
  311. package/lib/opLifecycle/opGroupingManager.js +9 -12
  312. package/lib/opLifecycle/opGroupingManager.js.map +1 -1
  313. package/lib/opLifecycle/opSplitter.d.ts +12 -4
  314. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  315. package/lib/opLifecycle/opSplitter.js +47 -38
  316. package/lib/opLifecycle/opSplitter.js.map +1 -1
  317. package/lib/opLifecycle/outbox.d.ts +2 -1
  318. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  319. package/lib/opLifecycle/outbox.js +19 -18
  320. package/lib/opLifecycle/outbox.js.map +1 -1
  321. package/lib/opLifecycle/remoteMessageProcessor.d.ts +8 -0
  322. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  323. package/lib/opLifecycle/remoteMessageProcessor.js +36 -32
  324. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  325. package/lib/packageVersion.d.ts +1 -1
  326. package/lib/packageVersion.js +1 -1
  327. package/lib/packageVersion.js.map +1 -1
  328. package/lib/pendingStateManager.d.ts +1 -1
  329. package/lib/pendingStateManager.d.ts.map +1 -1
  330. package/lib/pendingStateManager.js +2 -2
  331. package/lib/pendingStateManager.js.map +1 -1
  332. package/lib/public.d.ts +12 -0
  333. package/lib/scheduleManager.d.ts +1 -1
  334. package/lib/scheduleManager.d.ts.map +1 -1
  335. package/lib/scheduleManager.js +7 -3
  336. package/lib/scheduleManager.js.map +1 -1
  337. package/lib/storageServiceWithAttachBlobs.d.ts +2 -2
  338. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -1
  339. package/lib/storageServiceWithAttachBlobs.js +1 -1
  340. package/lib/storageServiceWithAttachBlobs.js.map +1 -1
  341. package/lib/summary/documentSchema.d.ts +209 -0
  342. package/lib/summary/documentSchema.d.ts.map +1 -0
  343. package/lib/summary/documentSchema.js +386 -0
  344. package/lib/summary/documentSchema.js.map +1 -0
  345. package/lib/summary/index.d.ts +2 -1
  346. package/lib/summary/index.d.ts.map +1 -1
  347. package/lib/summary/index.js +1 -0
  348. package/lib/summary/index.js.map +1 -1
  349. package/lib/summary/orderedClientElection.d.ts +2 -2
  350. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  351. package/lib/summary/orderedClientElection.js +7 -2
  352. package/lib/summary/orderedClientElection.js.map +1 -1
  353. package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -1
  354. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  355. package/lib/summary/runWhileConnectedCoordinator.js +1 -1
  356. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  357. package/lib/summary/runningSummarizer.d.ts +3 -3
  358. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  359. package/lib/summary/runningSummarizer.js +3 -3
  360. package/lib/summary/runningSummarizer.js.map +1 -1
  361. package/lib/summary/summarizer.d.ts +3 -2
  362. package/lib/summary/summarizer.d.ts.map +1 -1
  363. package/lib/summary/summarizer.js +3 -3
  364. package/lib/summary/summarizer.js.map +1 -1
  365. package/lib/summary/summarizerClientElection.d.ts +2 -2
  366. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  367. package/lib/summary/summarizerClientElection.js.map +1 -1
  368. package/lib/summary/summarizerHeuristics.d.ts +1 -1
  369. package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
  370. package/lib/summary/summarizerHeuristics.js +1 -1
  371. package/lib/summary/summarizerHeuristics.js.map +1 -1
  372. package/lib/summary/summarizerNode/summarizerNode.d.ts +3 -2
  373. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  374. package/lib/summary/summarizerNode/summarizerNode.js +5 -5
  375. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  376. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
  377. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  378. package/lib/summary/summarizerNode/summarizerNodeUtils.js +1 -1
  379. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  380. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
  381. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  382. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -3
  383. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  384. package/lib/summary/summarizerTypes.d.ts +5 -3
  385. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  386. package/lib/summary/summarizerTypes.js.map +1 -1
  387. package/lib/summary/summaryCollection.d.ts +2 -2
  388. package/lib/summary/summaryCollection.d.ts.map +1 -1
  389. package/lib/summary/summaryCollection.js +1 -1
  390. package/lib/summary/summaryCollection.js.map +1 -1
  391. package/lib/summary/summaryFormat.d.ts +6 -17
  392. package/lib/summary/summaryFormat.d.ts.map +1 -1
  393. package/lib/summary/summaryFormat.js +3 -3
  394. package/lib/summary/summaryFormat.js.map +1 -1
  395. package/lib/summary/summaryGenerator.d.ts +4 -3
  396. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  397. package/lib/summary/summaryGenerator.js +4 -4
  398. package/lib/summary/summaryGenerator.js.map +1 -1
  399. package/lib/summary/summaryManager.d.ts +1 -1
  400. package/lib/summary/summaryManager.d.ts.map +1 -1
  401. package/lib/summary/summaryManager.js +9 -8
  402. package/lib/summary/summaryManager.js.map +1 -1
  403. package/package.json +57 -65
  404. package/src/batchTracker.ts +4 -3
  405. package/src/blobManager.ts +100 -77
  406. package/src/channelCollection.ts +180 -165
  407. package/src/connectionTelemetry.ts +12 -12
  408. package/src/containerHandleContext.ts +3 -2
  409. package/src/containerRuntime.ts +481 -277
  410. package/src/dataStore.ts +9 -4
  411. package/src/dataStoreContext.ts +195 -93
  412. package/src/dataStoreContexts.ts +5 -2
  413. package/src/dataStoreRegistry.ts +3 -2
  414. package/src/deltaManagerSummarizerProxy.ts +1 -1
  415. package/src/deltaScheduler.ts +2 -1
  416. package/src/error.ts +2 -2
  417. package/src/gc/garbageCollection.ts +21 -20
  418. package/src/gc/gcConfigs.ts +15 -18
  419. package/src/gc/gcDefinitions.ts +6 -8
  420. package/src/gc/gcHelpers.ts +22 -5
  421. package/src/gc/gcSummaryStateTracker.ts +7 -5
  422. package/src/gc/gcTelemetry.ts +13 -7
  423. package/src/gc/gcUnreferencedStateTracker.ts +3 -2
  424. package/src/gc/index.ts +1 -0
  425. package/src/index.ts +22 -1
  426. package/src/messageTypes.ts +20 -6
  427. package/src/opLifecycle/README.md +89 -0
  428. package/src/opLifecycle/batchManager.ts +1 -0
  429. package/src/opLifecycle/definitions.ts +3 -21
  430. package/src/opLifecycle/index.ts +3 -9
  431. package/src/opLifecycle/opCompressor.ts +6 -5
  432. package/src/opLifecycle/opDecompressor.ts +90 -100
  433. package/src/opLifecycle/opGroupingManager.ts +12 -14
  434. package/src/opLifecycle/opSplitter.ts +76 -48
  435. package/src/opLifecycle/outbox.ts +30 -38
  436. package/src/opLifecycle/remoteMessageProcessor.ts +43 -55
  437. package/src/packageVersion.ts +1 -1
  438. package/src/pendingStateManager.ts +6 -6
  439. package/src/scheduleManager.ts +10 -8
  440. package/src/storageServiceWithAttachBlobs.ts +2 -2
  441. package/src/summary/documentSchema.ts +631 -0
  442. package/src/summary/index.ts +10 -1
  443. package/src/summary/orderedClientElection.ts +7 -7
  444. package/src/summary/runWhileConnectedCoordinator.ts +3 -2
  445. package/src/summary/runningSummarizer.ts +22 -20
  446. package/src/summary/summarizer.ts +17 -15
  447. package/src/summary/summarizerClientElection.ts +3 -2
  448. package/src/summary/summarizerHeuristics.ts +4 -2
  449. package/src/summary/summarizerNode/summarizerNode.ts +20 -18
  450. package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -2
  451. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +16 -8
  452. package/src/summary/summarizerTypes.ts +7 -3
  453. package/src/summary/summaryCollection.ts +3 -3
  454. package/src/summary/summaryFormat.ts +14 -26
  455. package/src/summary/summaryGenerator.ts +12 -15
  456. package/src/summary/summaryManager.ts +16 -13
  457. package/api-extractor-cjs.json +0 -8
  458. package/dist/container-runtime-alpha.d.ts +0 -1753
  459. package/dist/container-runtime-beta.d.ts +0 -268
  460. package/dist/container-runtime-public.d.ts +0 -268
  461. package/dist/container-runtime-untrimmed.d.ts +0 -1893
  462. package/lib/container-runtime-alpha.d.ts +0 -1753
  463. package/lib/container-runtime-beta.d.ts +0 -268
  464. package/lib/container-runtime-public.d.ts +0 -268
  465. package/lib/container-runtime-untrimmed.d.ts +0 -1893
  466. package/lib/test/batchTracker.spec.js +0 -88
  467. package/lib/test/batchTracker.spec.js.map +0 -1
  468. package/lib/test/blobManager.spec.js +0 -835
  469. package/lib/test/blobManager.spec.js.map +0 -1
  470. package/lib/test/channelCollection.spec.js +0 -141
  471. package/lib/test/channelCollection.spec.js.map +0 -1
  472. package/lib/test/containerRuntime.spec.js +0 -1748
  473. package/lib/test/containerRuntime.spec.js.map +0 -1
  474. package/lib/test/dataStoreContext.spec.js +0 -801
  475. package/lib/test/dataStoreContext.spec.js.map +0 -1
  476. package/lib/test/dataStoreCreation.spec.js +0 -312
  477. package/lib/test/dataStoreCreation.spec.js.map +0 -1
  478. package/lib/test/dataStoreRegistry.spec.js +0 -26
  479. package/lib/test/dataStoreRegistry.spec.js.map +0 -1
  480. package/lib/test/fuzz/fuzzUtils.js +0 -66
  481. package/lib/test/fuzz/fuzzUtils.js.map +0 -1
  482. package/lib/test/fuzz/summarizer.fuzz.spec.js +0 -31
  483. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +0 -1
  484. package/lib/test/fuzz/summarizerFuzzMocks.js +0 -162
  485. package/lib/test/fuzz/summarizerFuzzMocks.js.map +0 -1
  486. package/lib/test/fuzz/summarizerFuzzSuite.js +0 -106
  487. package/lib/test/fuzz/summarizerFuzzSuite.js.map +0 -1
  488. package/lib/test/gc/garbageCollection.spec.js +0 -1465
  489. package/lib/test/gc/garbageCollection.spec.js.map +0 -1
  490. package/lib/test/gc/gcConfigs.spec.js +0 -690
  491. package/lib/test/gc/gcConfigs.spec.js.map +0 -1
  492. package/lib/test/gc/gcHelpers.spec.js +0 -110
  493. package/lib/test/gc/gcHelpers.spec.js.map +0 -1
  494. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +0 -68
  495. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +0 -1
  496. package/lib/test/gc/gcStats.spec.js +0 -391
  497. package/lib/test/gc/gcStats.spec.js.map +0 -1
  498. package/lib/test/gc/gcSummaryStateTracker.spec.js +0 -228
  499. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +0 -1
  500. package/lib/test/gc/gcTelemetry.spec.js +0 -530
  501. package/lib/test/gc/gcTelemetry.spec.js.map +0 -1
  502. package/lib/test/gc/gcUnitTestHelpers.js +0 -29
  503. package/lib/test/gc/gcUnitTestHelpers.js.map +0 -1
  504. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +0 -192
  505. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +0 -1
  506. package/lib/test/getPendingBlobs.spec.js +0 -193
  507. package/lib/test/getPendingBlobs.spec.js.map +0 -1
  508. package/lib/test/hardwareStats.spec.js +0 -93
  509. package/lib/test/hardwareStats.spec.js.map +0 -1
  510. package/lib/test/index.js +0 -6
  511. package/lib/test/index.js.map +0 -1
  512. package/lib/test/opLifecycle/OpGroupingManager.spec.js +0 -225
  513. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +0 -1
  514. package/lib/test/opLifecycle/batchManager.spec.js +0 -189
  515. package/lib/test/opLifecycle/batchManager.spec.js.map +0 -1
  516. package/lib/test/opLifecycle/opCompressor.spec.js +0 -74
  517. package/lib/test/opLifecycle/opCompressor.spec.js.map +0 -1
  518. package/lib/test/opLifecycle/opDecompressor.spec.js +0 -218
  519. package/lib/test/opLifecycle/opDecompressor.spec.js.map +0 -1
  520. package/lib/test/opLifecycle/opSplitter.spec.js +0 -272
  521. package/lib/test/opLifecycle/opSplitter.spec.js.map +0 -1
  522. package/lib/test/opLifecycle/outbox.spec.js +0 -675
  523. package/lib/test/opLifecycle/outbox.spec.js.map +0 -1
  524. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +0 -196
  525. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +0 -1
  526. package/lib/test/pendingStateManager.spec.js +0 -329
  527. package/lib/test/pendingStateManager.spec.js.map +0 -1
  528. package/lib/test/scheduleManager.spec.js +0 -270
  529. package/lib/test/scheduleManager.spec.js.map +0 -1
  530. package/lib/test/summarizerNode.spec.js +0 -326
  531. package/lib/test/summarizerNode.spec.js.map +0 -1
  532. package/lib/test/summarizerNodeWithGc.spec.js +0 -318
  533. package/lib/test/summarizerNodeWithGc.spec.js.map +0 -1
  534. package/lib/test/summary/orderedClientElection.spec.js +0 -535
  535. package/lib/test/summary/orderedClientElection.spec.js.map +0 -1
  536. package/lib/test/summary/runningSummarizer.spec.js +0 -1349
  537. package/lib/test/summary/runningSummarizer.spec.js.map +0 -1
  538. package/lib/test/summary/summarizer.spec.js +0 -29
  539. package/lib/test/summary/summarizer.spec.js.map +0 -1
  540. package/lib/test/summary/summarizerClientElection.spec.js +0 -436
  541. package/lib/test/summary/summarizerClientElection.spec.js.map +0 -1
  542. package/lib/test/summary/summarizerHeuristics.spec.js +0 -289
  543. package/lib/test/summary/summarizerHeuristics.spec.js.map +0 -1
  544. package/lib/test/summary/summaryCollection.spec.js +0 -200
  545. package/lib/test/summary/summaryCollection.spec.js.map +0 -1
  546. package/lib/test/summary/summaryManager.spec.js +0 -430
  547. package/lib/test/summary/summaryManager.spec.js.map +0 -1
  548. package/lib/test/summary/testQuorumClients.js +0 -34
  549. package/lib/test/summary/testQuorumClients.js.map +0 -1
  550. package/lib/test/throttler.spec.js +0 -175
  551. package/lib/test/throttler.spec.js.map +0 -1
  552. package/lib/test/types/validateContainerRuntimePrevious.generated.js +0 -180
  553. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +0 -1
  554. /package/{dist → lib}/tsdoc-metadata.json +0 -0
@@ -3,90 +3,95 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ import { AttachState } from "@fluidframework/container-definitions";
6
7
  import {
7
- ITelemetryBaseLogger,
8
+ FluidObject,
8
9
  IDisposable,
9
10
  IFluidHandle,
10
11
  IRequest,
11
- FluidObject,
12
12
  IResponse,
13
+ ITelemetryBaseLogger,
13
14
  } from "@fluidframework/core-interfaces";
14
- import { FluidObjectHandle } from "@fluidframework/datastore";
15
+ import { assert, Lazy, LazyPromise } from "@fluidframework/core-utils/internal";
16
+ import { FluidObjectHandle } from "@fluidframework/datastore/internal";
17
+ import { buildSnapshotTree } from "@fluidframework/driver-utils/internal";
15
18
  import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
19
+ import {
20
+ IGarbageCollectionData,
21
+ IInboundSignalMessage,
22
+ ISummaryTreeWithStats,
23
+ ITelemetryContext,
24
+ } from "@fluidframework/runtime-definitions";
16
25
  import {
17
26
  AliasResult,
18
- channelsTreeName,
19
27
  CreateSummarizerNodeSource,
20
28
  IAttachMessage,
21
29
  IEnvelope,
22
30
  IFluidDataStoreChannel,
31
+ IFluidDataStoreContext,
23
32
  IFluidDataStoreContextDetached,
24
- IGarbageCollectionData,
25
- IInboundSignalMessage,
33
+ IFluidDataStoreFactory,
34
+ IFluidDataStoreRegistry,
26
35
  IFluidParentContext,
27
- InboundAttachMessage,
28
36
  ISummarizeResult,
29
- ISummaryTreeWithStats,
30
- ITelemetryContext,
31
- IFluidDataStoreFactory,
32
- IFluidDataStoreContext,
37
+ InboundAttachMessage,
33
38
  NamedFluidDataStoreRegistryEntries,
34
- IFluidDataStoreRegistry,
35
- } from "@fluidframework/runtime-definitions";
39
+ channelsTreeName,
40
+ } from "@fluidframework/runtime-definitions/internal";
36
41
  import {
42
+ GCDataBuilder,
43
+ RequestParser,
44
+ SummaryTreeBuilder,
37
45
  convertSnapshotTreeToSummaryTree,
38
46
  convertSummaryTreeToITree,
39
47
  create404Response,
40
48
  createResponseError,
41
- GCDataBuilder,
49
+ encodeCompactIdToString,
42
50
  isSerializedHandle,
43
51
  processAttachMessageGCData,
44
52
  responseToException,
45
- SummaryTreeBuilder,
46
53
  unpackChildNodesUsedRoutes,
47
- RequestParser,
48
- encodeCompactIdToString,
49
- } from "@fluidframework/runtime-utils";
54
+ } from "@fluidframework/runtime-utils/internal";
50
55
  import {
51
- createChildMonitoringContext,
52
56
  DataCorruptionError,
53
57
  DataProcessingError,
54
- extractSafePropertiesFromMessage,
55
58
  LoggingError,
56
59
  MonitoringContext,
57
- tagCodeArtifacts,
58
60
  createChildLogger,
59
- } from "@fluidframework/telemetry-utils";
60
- import { AttachState } from "@fluidframework/container-definitions";
61
- import { buildSnapshotTree } from "@fluidframework/driver-utils";
62
- import { assert, Lazy, LazyPromise } from "@fluidframework/core-utils";
63
- import { DataStoreContexts } from "./dataStoreContexts.js";
64
- import { defaultRuntimeHeaderData, RuntimeHeaderData } from "./containerRuntime.js";
65
- import {
66
- FluidDataStoreContext,
67
- RemoteFluidDataStoreContext,
68
- LocalFluidDataStoreContext,
69
- createAttributesBlob,
70
- LocalDetachedFluidDataStoreContext,
71
- } from "./dataStoreContext.js";
72
- import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs.js";
61
+ createChildMonitoringContext,
62
+ extractSafePropertiesFromMessage,
63
+ tagCodeArtifacts,
64
+ } from "@fluidframework/telemetry-utils/internal";
65
+
66
+ import { RuntimeHeaderData, defaultRuntimeHeaderData } from "./containerRuntime.js";
73
67
  import {
74
68
  IDataStoreAliasMessage,
75
69
  channelToDataStore,
76
70
  isDataStoreAliasMessage,
77
71
  } from "./dataStore.js";
72
+ import {
73
+ FluidDataStoreContext,
74
+ IFluidDataStoreContextInternal,
75
+ ILocalDetachedFluidDataStoreContextProps,
76
+ LocalDetachedFluidDataStoreContext,
77
+ LocalFluidDataStoreContext,
78
+ RemoteFluidDataStoreContext,
79
+ createAttributesBlob,
80
+ } from "./dataStoreContext.js";
81
+ import { DataStoreContexts } from "./dataStoreContexts.js";
82
+ import { FluidDataStoreRegistry } from "./dataStoreRegistry.js";
78
83
  import {
79
84
  GCNodeType,
80
85
  detectOutboundRoutesViaDDSKey,
81
86
  trimLeadingAndTrailingSlashes,
82
87
  } from "./gc/index.js";
88
+ import { ContainerMessageType, LocalContainerRuntimeMessage } from "./messageTypes.js";
89
+ import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs.js";
83
90
  import {
84
91
  IContainerRuntimeMetadata,
85
92
  nonDataStorePaths,
86
93
  rootHasIsolatedChannels,
87
94
  } from "./summary/index.js";
88
- import { ContainerMessageType, LocalContainerRuntimeMessage } from "./messageTypes.js";
89
- import { FluidDataStoreRegistry } from "./dataStoreRegistry.js";
90
95
 
91
96
  /**
92
97
  * Accepted header keys for requests coming to the runtime.
@@ -180,7 +185,10 @@ export function wrapContext(context: IFluidParentContext): IFluidParentContext {
180
185
  return context.getCreateChildSummarizerNodeFn?.(...args);
181
186
  },
182
187
  deleteChildSummarizerNode: (...args) => {
183
- return context.deleteChildSummarizerNode?.(...args);
188
+ return context.deleteChildSummarizerNode(...args);
189
+ },
190
+ setChannelDirty: (address: string) => {
191
+ return context.setChannelDirty(address);
184
192
  },
185
193
  };
186
194
  }
@@ -215,7 +223,7 @@ export function wrapContextForInnerChannel(
215
223
  );
216
224
  };
217
225
 
218
- context.submitSignal = (type: string, contents: any, targetClientId?: string) => {
226
+ context.submitSignal = (type: string, contents: unknown, targetClientId?: string) => {
219
227
  const envelope: IEnvelope = {
220
228
  address: id,
221
229
  contents,
@@ -237,7 +245,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
237
245
  // 0.24 back-compat attachingBeforeSummary
238
246
  public readonly attachOpFiredForDataStore = new Set<string>();
239
247
 
240
- private readonly mc: MonitoringContext;
248
+ protected readonly mc: MonitoringContext;
241
249
 
242
250
  private readonly disposeOnce = new Lazy<void>(() => this.contexts.dispose());
243
251
 
@@ -261,10 +269,11 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
261
269
  Promise<AliasResult>
262
270
  >();
263
271
 
264
- private readonly contexts: DataStoreContexts;
272
+ protected readonly contexts: DataStoreContexts;
273
+ private readonly aliasedDataStores: Set<string>;
265
274
 
266
275
  constructor(
267
- private readonly baseSnapshot: ISnapshotTree | undefined,
276
+ protected readonly baseSnapshot: ISnapshotTree | undefined,
268
277
  public readonly parentContext: IFluidParentContext,
269
278
  baseLogger: ITelemetryBaseLogger,
270
279
  private readonly gcNodeUpdated: (
@@ -291,6 +300,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
291
300
  "",
292
301
  this.parentContext.IFluidHandleContext,
293
302
  );
303
+ this.aliasedDataStores = new Set(aliasMap.values());
294
304
 
295
305
  // Extract stores stored inside the snapshot
296
306
  const fluidDataStores = new Map<string, ISnapshotTree>();
@@ -338,7 +348,6 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
338
348
  }),
339
349
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
340
350
  snapshotTree,
341
- isRootDataStore: undefined,
342
351
  });
343
352
  }
344
353
  this.contexts.addBoundOrRemoted(dataStoreContext);
@@ -365,7 +374,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
365
374
  /** For sampling. Only log once per container */
366
375
  private shouldSendAttachLog = true;
367
376
 
368
- private wrapContextForInnerChannel(id: string): IFluidParentContext {
377
+ protected wrapContextForInnerChannel(id: string): IFluidParentContext {
369
378
  return wrapContextForInnerChannel(id, this.parentContext);
370
379
  }
371
380
 
@@ -415,7 +424,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
415
424
  this.pendingAttach.has(attachMessage.id),
416
425
  0x15e /* "Local object does not have matching attach message id" */,
417
426
  );
418
- this.contexts.get(attachMessage.id)?.emit("attached");
427
+ this.contexts.get(attachMessage.id)?.setAttachState(AttachState.Attached);
419
428
  this.pendingAttach.delete(attachMessage.id);
420
429
  return;
421
430
  }
@@ -479,47 +488,44 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
479
488
  }
480
489
 
481
490
  const resolve = localOpMetadata as PendingAliasResolve;
482
- const aliasResult = this.processAliasMessageCore(aliasMessage);
491
+ const aliasResult = this.processAliasMessageCore(
492
+ aliasMessage.internalId,
493
+ aliasMessage.alias,
494
+ );
483
495
  if (local) {
484
496
  resolve(aliasResult);
485
497
  }
486
498
  }
487
499
 
488
- public processAliasMessageCore(aliasMessage: IDataStoreAliasMessage): boolean {
489
- if (this.alreadyProcessed(aliasMessage.alias)) {
500
+ public processAliasMessageCore(internalId: string, alias: string): boolean {
501
+ if (this.alreadyProcessed(alias)) {
490
502
  return false;
491
503
  }
492
504
 
493
- const context = this.contexts.get(aliasMessage.internalId);
505
+ const context = this.contexts.get(internalId);
494
506
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
495
507
  // corruption in case a deleted data store accidentally submitted a signal.
496
- if (
497
- this.checkAndLogIfDeleted(
498
- aliasMessage.internalId,
499
- context,
500
- "Changed",
501
- "processAliasMessageCore",
502
- )
503
- ) {
508
+ if (this.checkAndLogIfDeleted(internalId, context, "Changed", "processAliasMessageCore")) {
504
509
  return false;
505
510
  }
506
511
 
507
512
  if (context === undefined) {
508
513
  this.mc.logger.sendErrorEvent({
509
514
  eventName: "AliasFluidDataStoreNotFound",
510
- fluidDataStoreId: aliasMessage.internalId,
515
+ fluidDataStoreId: internalId,
511
516
  });
512
517
  return false;
513
518
  }
514
519
 
515
520
  const handle = new FluidObjectHandle(
516
521
  context,
517
- aliasMessage.internalId,
522
+ internalId,
518
523
  this.parentContext.IFluidHandleContext,
519
524
  );
520
525
  this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
521
526
 
522
- this.aliasMap.set(aliasMessage.alias, context.id);
527
+ this.aliasMap.set(alias, context.id);
528
+ this.aliasedDataStores.add(context.id);
523
529
  context.setInMemoryRoot();
524
530
  return true;
525
531
  }
@@ -529,7 +535,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
529
535
  }
530
536
 
531
537
  /** Package up the context's attach summary etc into an IAttachMessage */
532
- private generateAttachMessage(localContext: LocalFluidDataStoreContext): IAttachMessage {
538
+ private generateAttachMessage(localContext: IFluidDataStoreContextInternal): IAttachMessage {
533
539
  const { attachSummary } = localContext.getAttachData(/* includeGCData: */ true);
534
540
  const type = localContext.packagePath[localContext.packagePath.length - 1];
535
541
 
@@ -558,17 +564,20 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
558
564
  * If the container is detached, this data store will be part of the summary that makes the container attached.
559
565
  */
560
566
  if (this.parentContext.attachState !== AttachState.Detached) {
561
- localContext.emit("attaching");
562
- const message = this.generateAttachMessage(localContext);
563
-
564
- this.pendingAttach.set(id, message);
565
- this.parentContext.submitMessage(ContainerMessageType.Attach, message, undefined);
566
- this.attachOpFiredForDataStore.add(id);
567
+ localContext.setAttachState(AttachState.Attaching);
568
+ this.submitAttachChannelOp(localContext);
567
569
  }
568
570
 
569
571
  this.contexts.bind(id);
570
572
  }
571
573
 
574
+ protected submitAttachChannelOp(localContext: LocalFluidDataStoreContext) {
575
+ const message = this.generateAttachMessage(localContext);
576
+ this.pendingAttach.set(localContext.id, message);
577
+ this.parentContext.submitMessage(ContainerMessageType.Attach, message, undefined);
578
+ this.attachOpFiredForDataStore.add(localContext.id);
579
+ }
580
+
572
581
  /**
573
582
  * Generate compact internal DataStore ID.
574
583
  *
@@ -602,13 +611,41 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
602
611
  return id;
603
612
  }
604
613
 
605
- public createDetachedDataStoreCore(
614
+ public createDetachedDataStore(
606
615
  pkg: Readonly<string[]>,
607
616
  loadingGroupId?: string,
608
617
  ): IFluidDataStoreContextDetached {
609
- const id = this.createDataStoreId();
618
+ return this.createContext(
619
+ this.createDataStoreId(),
620
+ pkg,
621
+ LocalDetachedFluidDataStoreContext,
622
+ undefined, // props
623
+ loadingGroupId,
624
+ );
625
+ }
610
626
 
611
- const context = new LocalDetachedFluidDataStoreContext({
627
+ public createDataStoreContext(
628
+ pkg: Readonly<string[]>,
629
+ props?: any,
630
+ loadingGroupId?: string,
631
+ ): IFluidDataStoreContextInternal {
632
+ return this.createContext(
633
+ this.createDataStoreId(),
634
+ pkg,
635
+ LocalFluidDataStoreContext,
636
+ props,
637
+ loadingGroupId,
638
+ );
639
+ }
640
+
641
+ protected createContext<T extends LocalFluidDataStoreContext>(
642
+ id: string,
643
+ pkg: Readonly<string[]>,
644
+ contextCtor: new (props: ILocalDetachedFluidDataStoreContextProps) => T,
645
+ createProps?: any,
646
+ loadingGroupId?: string,
647
+ ) {
648
+ const context = new contextCtor({
612
649
  id,
613
650
  pkg,
614
651
  parentContext: this.wrapContextForInnerChannel(id),
@@ -619,7 +656,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
619
656
  }),
620
657
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
621
658
  snapshotTree: undefined,
622
- isRootDataStore: false,
659
+ createProps,
623
660
  loadingGroupId,
624
661
  channelToDataStoreFn: (channel: IFluidDataStoreChannel) =>
625
662
  channelToDataStore(
@@ -629,31 +666,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
629
666
  createChildLogger({ logger: this.parentContext.logger }),
630
667
  ),
631
668
  });
632
- this.contexts.addUnbound(context);
633
- return context;
634
- }
635
669
 
636
- public _createFluidDataStoreContext(
637
- pkg: Readonly<string[]>,
638
- props?: any,
639
- loadingGroupId?: string,
640
- ) {
641
- const id = this.createDataStoreId();
642
- const context = new LocalFluidDataStoreContext({
643
- id,
644
- pkg,
645
- parentContext: this.wrapContextForInnerChannel(id),
646
- storage: this.parentContext.storage,
647
- scope: this.parentContext.scope,
648
- createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
649
- type: CreateSummarizerNodeSource.Local,
650
- }),
651
- makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
652
- snapshotTree: undefined,
653
- isRootDataStore: false,
654
- createProps: props,
655
- loadingGroupId,
656
- });
657
670
  this.contexts.addUnbound(context);
658
671
  return context;
659
672
  }
@@ -669,10 +682,14 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
669
682
  case ContainerMessageType.Alias:
670
683
  this.parentContext.submitMessage(type, content, localOpMetadata);
671
684
  return;
685
+ case ContainerMessageType.FluidDataStoreOp:
686
+ return this.reSubmitChannelOp(type, content, localOpMetadata);
672
687
  default:
688
+ assert(false, 0x907 /* unknown op type */);
673
689
  }
690
+ }
674
691
 
675
- assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e7 /* type */);
692
+ protected reSubmitChannelOp(type: string, content: any, localOpMetadata: unknown) {
676
693
  const envelope = content as IEnvelope;
677
694
  const context = this.contexts.get(envelope.address);
678
695
  // If the data store has been deleted, log an error and throw an error. If there are local changes for a
@@ -716,10 +733,14 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
716
733
  return this.applyStashedAttachOp(opContents.contents);
717
734
  case ContainerMessageType.Alias:
718
735
  return;
736
+ case ContainerMessageType.FluidDataStoreOp:
737
+ return this.applyStashedChannelChannelOp(opContents.contents);
719
738
  default:
739
+ assert(false, 0x908 /* unknon type of op */);
720
740
  }
741
+ }
721
742
 
722
- const envelope = opContents.contents as IEnvelope;
743
+ protected async applyStashedChannelChannelOp(envelope: IEnvelope) {
723
744
  const context = this.contexts.get(envelope.address);
724
745
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
725
746
  // corruption in case the data store that stashed the op is deleted.
@@ -757,7 +778,6 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
757
778
  }),
758
779
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
759
780
  snapshotTree,
760
- isRootDataStore: false,
761
781
  });
762
782
 
763
783
  // realize the local context, as local contexts shouldn't be delay
@@ -790,32 +810,48 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
790
810
  case ContainerMessageType.Alias:
791
811
  this.processAliasMessage(message, localMessageMetadata, local);
792
812
  return;
793
- case ContainerMessageType.FluidDataStoreOp:
813
+ case ContainerMessageType.FluidDataStoreOp: {
814
+ const envelope = message.contents as IEnvelope;
815
+ const innerContents = envelope.contents as FluidDataStoreMessage;
816
+ const transformed = {
817
+ ...message,
818
+ type: innerContents.type,
819
+ contents: innerContents.content,
820
+ };
821
+
822
+ this.processChannelOp(envelope.address, transformed, local, localMessageMetadata);
823
+
824
+ // By default, we use the new behavior of detecting outbound routes here.
825
+ // If this setting is true, then DataStoreContext would be notifying GC instead.
826
+ if (
827
+ this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true &&
828
+ addedOutboundReference !== undefined
829
+ ) {
830
+ // Notify GC of any outbound references that were added by this op.
831
+ detectOutboundReferences(
832
+ envelope.address,
833
+ transformed.contents,
834
+ addedOutboundReference,
835
+ );
836
+ }
794
837
  break;
838
+ }
795
839
  default:
796
840
  assert(false, 0x8e9 /* unreached */);
797
841
  }
842
+ }
798
843
 
799
- const envelope = message.contents as IEnvelope;
800
- const innerContents = envelope.contents as FluidDataStoreMessage;
801
- const transformed = {
802
- ...message,
803
- type: innerContents.type,
804
- contents: innerContents.content,
805
- };
806
-
807
- const context = this.contexts.get(envelope.address);
844
+ protected processChannelOp(
845
+ address: string,
846
+ message: ISequencedDocumentMessage,
847
+ local: boolean,
848
+ localMessageMetadata: unknown,
849
+ ) {
850
+ const context = this.contexts.get(address);
808
851
 
809
852
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
810
853
  // corruption in case a deleted data store accidentally submitted an op.
811
- if (
812
- this.checkAndLogIfDeleted(
813
- envelope.address,
814
- context,
815
- "Changed",
816
- "processFluidDataStoreOp",
817
- )
818
- ) {
854
+ if (this.checkAndLogIfDeleted(address, context, "Changed", "processFluidDataStoreOp")) {
819
855
  return;
820
856
  }
821
857
 
@@ -831,27 +867,17 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
831
867
  type: message.type,
832
868
  contentType: typeof message.contents,
833
869
  }),
834
- ...tagCodeArtifacts({ address: envelope.address }),
870
+ ...tagCodeArtifacts({ address }),
835
871
  },
836
872
  );
837
873
  }
838
874
 
839
- context.process(transformed, local, localMessageMetadata);
840
-
841
- // By default, we use the new behavior of detecting outbound routes here.
842
- // If this setting is true, then DataStoreContext would be notifying GC instead.
843
- if (
844
- this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true &&
845
- addedOutboundReference !== undefined
846
- ) {
847
- // Notify GC of any outbound references that were added by this op.
848
- detectOutboundReferences(envelope, addedOutboundReference);
849
- }
875
+ context.process(message, local, localMessageMetadata);
850
876
 
851
877
  // Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
852
878
  // being used.
853
879
  this.gcNodeUpdated(
854
- `/${envelope.address}`,
880
+ `/${address}`,
855
881
  "Changed",
856
882
  message.timestamp,
857
883
  context.isLoaded ? context.packagePath : undefined,
@@ -861,7 +887,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
861
887
  public async getDataStore(
862
888
  id: string,
863
889
  requestHeaderData: RuntimeHeaderData,
864
- ): Promise<FluidDataStoreContext> {
890
+ ): Promise<IFluidDataStoreContextInternal> {
865
891
  const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
866
892
  if (
867
893
  this.checkAndLogIfDeleted(
@@ -895,7 +921,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
895
921
  public async getDataStoreIfAvailable(
896
922
  id: string,
897
923
  requestHeaderData: RuntimeHeaderData,
898
- ): Promise<FluidDataStoreContext | undefined> {
924
+ ): Promise<IFluidDataStoreContextInternal | undefined> {
899
925
  // If the data store has been deleted, log an error and return undefined.
900
926
  if (
901
927
  this.checkAndLogIfDeleted(
@@ -926,7 +952,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
926
952
  */
927
953
  private checkAndLogIfDeleted(
928
954
  id: string,
929
- context: FluidDataStoreContext | undefined,
955
+ context: IFluidDataStoreContext | undefined,
930
956
  deletedLogSuffix: string,
931
957
  callSite: string,
932
958
  requestHeaderData?: RuntimeHeaderData,
@@ -996,11 +1022,10 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
996
1022
  }
997
1023
 
998
1024
  public setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void {
999
- const eventName = attachState === AttachState.Attaching ? "attaching" : "attached";
1000
1025
  for (const [, context] of this.contexts) {
1001
1026
  // Fire only for bounded stores.
1002
1027
  if (!this.contexts.isNotBound(context.id)) {
1003
- context.emit(eventName);
1028
+ context.setAttachState(attachState);
1004
1029
  }
1005
1030
  }
1006
1031
  }
@@ -1185,25 +1210,15 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
1185
1210
  }
1186
1211
  }
1187
1212
 
1188
- /**
1189
- * This is called to update objects whose routes are unused. The unused objects are deleted.
1190
- * @param unusedRoutes - The routes that are unused in all data stores in this Container.
1191
- */
1192
- public updateUnusedRoutes(unusedRoutes: readonly string[]) {
1193
- for (const route of unusedRoutes) {
1194
- const pathParts = route.split("/");
1195
- // Delete data store only if its route (/datastoreId) is in unusedRoutes. We don't want to delete a data
1196
- // store based on its DDS being unused.
1197
- if (pathParts.length > 2) {
1198
- continue;
1199
- }
1200
- const dataStoreId = pathParts[1];
1201
- assert(this.contexts.has(dataStoreId), 0x2d7 /* No data store with specified id */);
1202
- // Delete the contexts of unused data stores.
1203
- this.contexts.delete(dataStoreId);
1204
- // Delete the summarizer node of the unused data stores.
1205
- this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
1206
- }
1213
+ public deleteChild(dataStoreId: string) {
1214
+ const dataStoreContext = this.contexts.get(dataStoreId);
1215
+ assert(dataStoreContext !== undefined, 0x2d7 /* No data store with specified id */);
1216
+
1217
+ dataStoreContext.delete();
1218
+ // Delete the contexts of unused data stores.
1219
+ this.contexts.delete(dataStoreId);
1220
+ // Delete the summarizer node of the unused data stores.
1221
+ this.parentContext.deleteChildSummarizerNode(dataStoreId);
1207
1222
  }
1208
1223
 
1209
1224
  /**
@@ -1239,12 +1254,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
1239
1254
  continue;
1240
1255
  }
1241
1256
 
1242
- dataStoreContext.delete();
1243
-
1244
- // Delete the contexts of sweep ready data stores.
1245
- this.contexts.delete(dataStoreId);
1246
- // Delete the summarizer node of the sweep ready data stores.
1247
- this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
1257
+ this.deleteChild(dataStoreId);
1248
1258
  }
1249
1259
  return Array.from(sweepReadyDataStoreRoutes);
1250
1260
  }
@@ -1282,8 +1292,9 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
1282
1292
  */
1283
1293
  private async getOutboundRoutes(): Promise<string[]> {
1284
1294
  const outboundRoutes: string[] = [];
1295
+ // Getting this information is a performance optimization that reduces network calls for virtualized datastores
1285
1296
  for (const [contextId, context] of this.contexts) {
1286
- const isRootDataStore = await context.isRoot();
1297
+ const isRootDataStore = await context.isRoot(this.aliasedDataStores);
1287
1298
  if (isRootDataStore) {
1288
1299
  outboundRoutes.push(`/${contextId}`);
1289
1300
  }
@@ -1416,7 +1427,8 @@ export function getSummaryForDatastores(
1416
1427
  * @internal
1417
1428
  */
1418
1429
  export function detectOutboundReferences(
1419
- envelope: IEnvelope,
1430
+ address: string,
1431
+ contents: unknown,
1420
1432
  addedOutboundReference: (fromNodePath: string, toNodePath: string) => void,
1421
1433
  ): void {
1422
1434
  // These will be built up as we traverse the envelope contents
@@ -1443,16 +1455,18 @@ export function detectOutboundReferences(
1443
1455
  }
1444
1456
  }
1445
1457
 
1446
- recursivelyFindHandles(envelope.contents);
1458
+ recursivelyFindHandles(contents);
1447
1459
 
1448
1460
  // GC node paths are all absolute paths, hence the "" prefix.
1449
1461
  // e.g. this will yield "/dataStoreId/ddsId"
1450
- const fromPath = ["", envelope.address, ddsAddress].join("/");
1462
+ const fromPath = ["", address, ddsAddress].join("/");
1451
1463
  outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
1452
1464
  }
1453
1465
 
1454
1466
  /** @internal */
1455
- export class ChannelCollectionFactory implements IFluidDataStoreFactory {
1467
+ export class ChannelCollectionFactory<T extends ChannelCollection = ChannelCollection>
1468
+ implements IFluidDataStoreFactory
1469
+ {
1456
1470
  public readonly type = "ChannelCollectionChannel";
1457
1471
 
1458
1472
  public IFluidDataStoreRegistry: IFluidDataStoreRegistry;
@@ -1463,6 +1477,7 @@ export class ChannelCollectionFactory implements IFluidDataStoreFactory {
1463
1477
  private readonly provideEntryPoint: (
1464
1478
  runtime: IFluidDataStoreChannel,
1465
1479
  ) => Promise<FluidObject>,
1480
+ private readonly ctor: (...args: ConstructorParameters<typeof ChannelCollection>) => T,
1466
1481
  ) {
1467
1482
  this.IFluidDataStoreRegistry = new FluidDataStoreRegistry(registryEntries);
1468
1483
  }
@@ -1475,7 +1490,7 @@ export class ChannelCollectionFactory implements IFluidDataStoreFactory {
1475
1490
  context: IFluidDataStoreContext,
1476
1491
  _existing: boolean,
1477
1492
  ): Promise<IFluidDataStoreChannel> {
1478
- const runtime = new ChannelCollection(
1493
+ const runtime = this.ctor(
1479
1494
  context.baseSnapshot,
1480
1495
  context, // parentContext
1481
1496
  context.logger,