@fluidframework/container-runtime 2.0.0-rc.2.0.1 → 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 +189 -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 +171 -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 +132 -108
  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 +110 -53
  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 +223 -167
  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 +201 -97
  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
+ }
626
+
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
+ }
610
640
 
611
- const context = new LocalDetachedFluidDataStoreContext({
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.
@@ -731,9 +752,49 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
731
752
  }
732
753
 
733
754
  private async applyStashedAttachOp(message: IAttachMessage) {
734
- this.pendingAttach.set(message.id, message);
735
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
736
- this.processAttachMessage({ contents: message } as ISequencedDocumentMessage, false);
755
+ const { id, snapshot } = message;
756
+
757
+ // build the snapshot from the summary in the attach message
758
+ const flatAttachBlobs = new Map<string, ArrayBufferLike>();
759
+ const snapshotTree = buildSnapshotTree(snapshot.entries, flatAttachBlobs);
760
+ const storage = new StorageServiceWithAttachBlobs(
761
+ this.parentContext.storage,
762
+ flatAttachBlobs,
763
+ );
764
+
765
+ // create a local datastore context for the data store context,
766
+ // which this message represents. All newly created data store
767
+ // contexts start as a local context on the client that created
768
+ // them, and for stashed ops, the client that applies it plays
769
+ // the role of creating client.
770
+ const dataStoreContext = new LocalFluidDataStoreContext({
771
+ id,
772
+ pkg: undefined,
773
+ parentContext: this.wrapContextForInnerChannel(id),
774
+ storage,
775
+ scope: this.parentContext.scope,
776
+ createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
777
+ type: CreateSummarizerNodeSource.FromSummary,
778
+ }),
779
+ makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
780
+ snapshotTree,
781
+ });
782
+
783
+ // realize the local context, as local contexts shouldn't be delay
784
+ // loaded, as this client is playing the role of creating client,
785
+ // and creating clients always create realized data store contexts.
786
+ const channel = await dataStoreContext.realize();
787
+ await channel.entryPoint.get();
788
+
789
+ // add to the list of bound or remoted, as this context must be bound
790
+ // to had an attach message sent, and is the non-detached case is remoted.
791
+ this.contexts.addBoundOrRemoted(dataStoreContext);
792
+ if (this.parentContext.attachState !== AttachState.Detached) {
793
+ // if the client is not detached put in the pending attach list
794
+ // so that on ack of the stashed op, the context is found.
795
+ // detached client don't send ops, so should not expect and ack.
796
+ this.pendingAttach.set(message.id, message);
797
+ }
737
798
  }
738
799
 
739
800
  public process(
@@ -749,32 +810,48 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
749
810
  case ContainerMessageType.Alias:
750
811
  this.processAliasMessage(message, localMessageMetadata, local);
751
812
  return;
752
- 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
+ }
753
837
  break;
838
+ }
754
839
  default:
755
840
  assert(false, 0x8e9 /* unreached */);
756
841
  }
842
+ }
757
843
 
758
- const envelope = message.contents as IEnvelope;
759
- const innerContents = envelope.contents as FluidDataStoreMessage;
760
- const transformed = {
761
- ...message,
762
- type: innerContents.type,
763
- contents: innerContents.content,
764
- };
765
-
766
- 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);
767
851
 
768
852
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
769
853
  // corruption in case a deleted data store accidentally submitted an op.
770
- if (
771
- this.checkAndLogIfDeleted(
772
- envelope.address,
773
- context,
774
- "Changed",
775
- "processFluidDataStoreOp",
776
- )
777
- ) {
854
+ if (this.checkAndLogIfDeleted(address, context, "Changed", "processFluidDataStoreOp")) {
778
855
  return;
779
856
  }
780
857
 
@@ -790,27 +867,17 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
790
867
  type: message.type,
791
868
  contentType: typeof message.contents,
792
869
  }),
793
- ...tagCodeArtifacts({ address: envelope.address }),
870
+ ...tagCodeArtifacts({ address }),
794
871
  },
795
872
  );
796
873
  }
797
874
 
798
- context.process(transformed, local, localMessageMetadata);
799
-
800
- // By default, we use the new behavior of detecting outbound routes here.
801
- // If this setting is true, then DataStoreContext would be notifying GC instead.
802
- if (
803
- this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true &&
804
- addedOutboundReference !== undefined
805
- ) {
806
- // Notify GC of any outbound references that were added by this op.
807
- detectOutboundReferences(envelope, addedOutboundReference);
808
- }
875
+ context.process(message, local, localMessageMetadata);
809
876
 
810
877
  // Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
811
878
  // being used.
812
879
  this.gcNodeUpdated(
813
- `/${envelope.address}`,
880
+ `/${address}`,
814
881
  "Changed",
815
882
  message.timestamp,
816
883
  context.isLoaded ? context.packagePath : undefined,
@@ -820,7 +887,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
820
887
  public async getDataStore(
821
888
  id: string,
822
889
  requestHeaderData: RuntimeHeaderData,
823
- ): Promise<FluidDataStoreContext> {
890
+ ): Promise<IFluidDataStoreContextInternal> {
824
891
  const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
825
892
  if (
826
893
  this.checkAndLogIfDeleted(
@@ -854,7 +921,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
854
921
  public async getDataStoreIfAvailable(
855
922
  id: string,
856
923
  requestHeaderData: RuntimeHeaderData,
857
- ): Promise<FluidDataStoreContext | undefined> {
924
+ ): Promise<IFluidDataStoreContextInternal | undefined> {
858
925
  // If the data store has been deleted, log an error and return undefined.
859
926
  if (
860
927
  this.checkAndLogIfDeleted(
@@ -885,7 +952,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
885
952
  */
886
953
  private checkAndLogIfDeleted(
887
954
  id: string,
888
- context: FluidDataStoreContext | undefined,
955
+ context: IFluidDataStoreContext | undefined,
889
956
  deletedLogSuffix: string,
890
957
  callSite: string,
891
958
  requestHeaderData?: RuntimeHeaderData,
@@ -955,11 +1022,10 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
955
1022
  }
956
1023
 
957
1024
  public setAttachState(attachState: AttachState.Attaching | AttachState.Attached): void {
958
- const eventName = attachState === AttachState.Attaching ? "attaching" : "attached";
959
1025
  for (const [, context] of this.contexts) {
960
1026
  // Fire only for bounded stores.
961
1027
  if (!this.contexts.isNotBound(context.id)) {
962
- context.emit(eventName);
1028
+ context.setAttachState(attachState);
963
1029
  }
964
1030
  }
965
1031
  }
@@ -1144,25 +1210,15 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
1144
1210
  }
1145
1211
  }
1146
1212
 
1147
- /**
1148
- * This is called to update objects whose routes are unused. The unused objects are deleted.
1149
- * @param unusedRoutes - The routes that are unused in all data stores in this Container.
1150
- */
1151
- public updateUnusedRoutes(unusedRoutes: readonly string[]) {
1152
- for (const route of unusedRoutes) {
1153
- const pathParts = route.split("/");
1154
- // Delete data store only if its route (/datastoreId) is in unusedRoutes. We don't want to delete a data
1155
- // store based on its DDS being unused.
1156
- if (pathParts.length > 2) {
1157
- continue;
1158
- }
1159
- const dataStoreId = pathParts[1];
1160
- assert(this.contexts.has(dataStoreId), 0x2d7 /* No data store with specified id */);
1161
- // Delete the contexts of unused data stores.
1162
- this.contexts.delete(dataStoreId);
1163
- // Delete the summarizer node of the unused data stores.
1164
- this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
1165
- }
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);
1166
1222
  }
1167
1223
 
1168
1224
  /**
@@ -1198,12 +1254,7 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
1198
1254
  continue;
1199
1255
  }
1200
1256
 
1201
- dataStoreContext.delete();
1202
-
1203
- // Delete the contexts of sweep ready data stores.
1204
- this.contexts.delete(dataStoreId);
1205
- // Delete the summarizer node of the sweep ready data stores.
1206
- this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
1257
+ this.deleteChild(dataStoreId);
1207
1258
  }
1208
1259
  return Array.from(sweepReadyDataStoreRoutes);
1209
1260
  }
@@ -1241,8 +1292,9 @@ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
1241
1292
  */
1242
1293
  private async getOutboundRoutes(): Promise<string[]> {
1243
1294
  const outboundRoutes: string[] = [];
1295
+ // Getting this information is a performance optimization that reduces network calls for virtualized datastores
1244
1296
  for (const [contextId, context] of this.contexts) {
1245
- const isRootDataStore = await context.isRoot();
1297
+ const isRootDataStore = await context.isRoot(this.aliasedDataStores);
1246
1298
  if (isRootDataStore) {
1247
1299
  outboundRoutes.push(`/${contextId}`);
1248
1300
  }
@@ -1375,7 +1427,8 @@ export function getSummaryForDatastores(
1375
1427
  * @internal
1376
1428
  */
1377
1429
  export function detectOutboundReferences(
1378
- envelope: IEnvelope,
1430
+ address: string,
1431
+ contents: unknown,
1379
1432
  addedOutboundReference: (fromNodePath: string, toNodePath: string) => void,
1380
1433
  ): void {
1381
1434
  // These will be built up as we traverse the envelope contents
@@ -1402,16 +1455,18 @@ export function detectOutboundReferences(
1402
1455
  }
1403
1456
  }
1404
1457
 
1405
- recursivelyFindHandles(envelope.contents);
1458
+ recursivelyFindHandles(contents);
1406
1459
 
1407
1460
  // GC node paths are all absolute paths, hence the "" prefix.
1408
1461
  // e.g. this will yield "/dataStoreId/ddsId"
1409
- const fromPath = ["", envelope.address, ddsAddress].join("/");
1462
+ const fromPath = ["", address, ddsAddress].join("/");
1410
1463
  outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
1411
1464
  }
1412
1465
 
1413
1466
  /** @internal */
1414
- export class ChannelCollectionFactory implements IFluidDataStoreFactory {
1467
+ export class ChannelCollectionFactory<T extends ChannelCollection = ChannelCollection>
1468
+ implements IFluidDataStoreFactory
1469
+ {
1415
1470
  public readonly type = "ChannelCollectionChannel";
1416
1471
 
1417
1472
  public IFluidDataStoreRegistry: IFluidDataStoreRegistry;
@@ -1422,6 +1477,7 @@ export class ChannelCollectionFactory implements IFluidDataStoreFactory {
1422
1477
  private readonly provideEntryPoint: (
1423
1478
  runtime: IFluidDataStoreChannel,
1424
1479
  ) => Promise<FluidObject>,
1480
+ private readonly ctor: (...args: ConstructorParameters<typeof ChannelCollection>) => T,
1425
1481
  ) {
1426
1482
  this.IFluidDataStoreRegistry = new FluidDataStoreRegistry(registryEntries);
1427
1483
  }
@@ -1434,7 +1490,7 @@ export class ChannelCollectionFactory implements IFluidDataStoreFactory {
1434
1490
  context: IFluidDataStoreContext,
1435
1491
  _existing: boolean,
1436
1492
  ): Promise<IFluidDataStoreChannel> {
1437
- const runtime = new ChannelCollection(
1493
+ const runtime = this.ctor(
1438
1494
  context.baseSnapshot,
1439
1495
  context, // parentContext
1440
1496
  context.logger,