@fluidframework/container-runtime 2.0.0-dev.2.3.0.115467 → 2.0.0-dev.3.1.0.125672

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 (340) hide show
  1. package/.eslintrc.js +21 -10
  2. package/.mocharc.js +2 -2
  3. package/api-extractor.json +2 -2
  4. package/dist/batchTracker.d.ts +1 -2
  5. package/dist/batchTracker.d.ts.map +1 -1
  6. package/dist/batchTracker.js +2 -1
  7. package/dist/batchTracker.js.map +1 -1
  8. package/dist/blobManager.d.ts +53 -34
  9. package/dist/blobManager.d.ts.map +1 -1
  10. package/dist/blobManager.js +236 -124
  11. package/dist/blobManager.js.map +1 -1
  12. package/dist/connectionTelemetry.d.ts.map +1 -1
  13. package/dist/connectionTelemetry.js +11 -9
  14. package/dist/connectionTelemetry.js.map +1 -1
  15. package/dist/containerHandleContext.d.ts.map +1 -1
  16. package/dist/containerHandleContext.js +3 -1
  17. package/dist/containerHandleContext.js.map +1 -1
  18. package/dist/containerRuntime.d.ts +95 -46
  19. package/dist/containerRuntime.d.ts.map +1 -1
  20. package/dist/containerRuntime.js +288 -135
  21. package/dist/containerRuntime.js.map +1 -1
  22. package/dist/dataStore.d.ts.map +1 -1
  23. package/dist/dataStore.js +11 -9
  24. package/dist/dataStore.js.map +1 -1
  25. package/dist/dataStoreContext.d.ts +2 -1
  26. package/dist/dataStoreContext.d.ts.map +1 -1
  27. package/dist/dataStoreContext.js +38 -21
  28. package/dist/dataStoreContext.js.map +1 -1
  29. package/dist/dataStoreContexts.d.ts.map +1 -1
  30. package/dist/dataStoreContexts.js +7 -3
  31. package/dist/dataStoreContexts.js.map +1 -1
  32. package/dist/dataStoreRegistry.d.ts.map +1 -1
  33. package/dist/dataStoreRegistry.js +3 -1
  34. package/dist/dataStoreRegistry.js.map +1 -1
  35. package/dist/dataStores.d.ts +12 -9
  36. package/dist/dataStores.d.ts.map +1 -1
  37. package/dist/dataStores.js +68 -46
  38. package/dist/dataStores.js.map +1 -1
  39. package/dist/deltaScheduler.d.ts.map +1 -1
  40. package/dist/deltaScheduler.js +8 -3
  41. package/dist/deltaScheduler.js.map +1 -1
  42. package/dist/garbageCollection.d.ts +50 -26
  43. package/dist/garbageCollection.d.ts.map +1 -1
  44. package/dist/garbageCollection.js +348 -196
  45. package/dist/garbageCollection.js.map +1 -1
  46. package/dist/garbageCollectionConstants.d.ts +7 -3
  47. package/dist/garbageCollectionConstants.d.ts.map +1 -1
  48. package/dist/garbageCollectionConstants.js +10 -8
  49. package/dist/garbageCollectionConstants.js.map +1 -1
  50. package/dist/garbageCollectionHelpers.d.ts +15 -0
  51. package/dist/garbageCollectionHelpers.d.ts.map +1 -0
  52. package/dist/garbageCollectionHelpers.js +27 -0
  53. package/dist/garbageCollectionHelpers.js.map +1 -0
  54. package/dist/gcSweepReadyUsageDetection.d.ts +5 -5
  55. package/dist/gcSweepReadyUsageDetection.d.ts.map +1 -1
  56. package/dist/gcSweepReadyUsageDetection.js +14 -10
  57. package/dist/gcSweepReadyUsageDetection.js.map +1 -1
  58. package/dist/index.d.ts +3 -4
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +3 -5
  61. package/dist/index.js.map +1 -1
  62. package/dist/opLifecycle/batchManager.d.ts +13 -1
  63. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  64. package/dist/opLifecycle/batchManager.js +48 -7
  65. package/dist/opLifecycle/batchManager.js.map +1 -1
  66. package/dist/opLifecycle/definitions.d.ts +25 -1
  67. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  68. package/dist/opLifecycle/definitions.js.map +1 -1
  69. package/dist/opLifecycle/index.d.ts +2 -2
  70. package/dist/opLifecycle/index.d.ts.map +1 -1
  71. package/dist/opLifecycle/index.js +2 -1
  72. package/dist/opLifecycle/index.js.map +1 -1
  73. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  74. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  75. package/dist/opLifecycle/opCompressor.js +24 -10
  76. package/dist/opLifecycle/opCompressor.js.map +1 -1
  77. package/dist/opLifecycle/opDecompressor.d.ts +2 -1
  78. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  79. package/dist/opLifecycle/opDecompressor.js +33 -17
  80. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  81. package/dist/opLifecycle/opSplitter.d.ts +34 -2
  82. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  83. package/dist/opLifecycle/opSplitter.js +117 -5
  84. package/dist/opLifecycle/opSplitter.js.map +1 -1
  85. package/dist/opLifecycle/outbox.d.ts +5 -0
  86. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  87. package/dist/opLifecycle/outbox.js +38 -27
  88. package/dist/opLifecycle/outbox.js.map +1 -1
  89. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  90. package/dist/opLifecycle/remoteMessageProcessor.js +17 -2
  91. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  92. package/dist/opProperties.d.ts.map +1 -1
  93. package/dist/opProperties.js +1 -3
  94. package/dist/opProperties.js.map +1 -1
  95. package/dist/orderedClientElection.d.ts.map +1 -1
  96. package/dist/orderedClientElection.js +10 -4
  97. package/dist/orderedClientElection.js.map +1 -1
  98. package/dist/packageVersion.d.ts +1 -1
  99. package/dist/packageVersion.js +1 -1
  100. package/dist/packageVersion.js.map +1 -1
  101. package/dist/pendingStateManager.d.ts +4 -13
  102. package/dist/pendingStateManager.d.ts.map +1 -1
  103. package/dist/pendingStateManager.js +134 -161
  104. package/dist/pendingStateManager.js.map +1 -1
  105. package/dist/runWhileConnectedCoordinator.d.ts.map +1 -1
  106. package/dist/runWhileConnectedCoordinator.js.map +1 -1
  107. package/dist/runningSummarizer.d.ts.map +1 -1
  108. package/dist/runningSummarizer.js +34 -22
  109. package/dist/runningSummarizer.js.map +1 -1
  110. package/dist/scheduleManager.d.ts +0 -1
  111. package/dist/scheduleManager.d.ts.map +1 -1
  112. package/dist/scheduleManager.js +11 -21
  113. package/dist/scheduleManager.js.map +1 -1
  114. package/dist/serializedSnapshotStorage.d.ts.map +1 -1
  115. package/dist/serializedSnapshotStorage.js +3 -1
  116. package/dist/serializedSnapshotStorage.js.map +1 -1
  117. package/dist/summarizer.d.ts +2 -3
  118. package/dist/summarizer.d.ts.map +1 -1
  119. package/dist/summarizer.js +39 -18
  120. package/dist/summarizer.js.map +1 -1
  121. package/dist/summarizerClientElection.d.ts +1 -2
  122. package/dist/summarizerClientElection.d.ts.map +1 -1
  123. package/dist/summarizerClientElection.js +3 -30
  124. package/dist/summarizerClientElection.js.map +1 -1
  125. package/dist/summarizerHandle.d.ts.map +1 -1
  126. package/dist/summarizerHandle.js.map +1 -1
  127. package/dist/summarizerHeuristics.d.ts.map +1 -1
  128. package/dist/summarizerHeuristics.js +6 -9
  129. package/dist/summarizerHeuristics.js.map +1 -1
  130. package/dist/summarizerTypes.d.ts +22 -25
  131. package/dist/summarizerTypes.d.ts.map +1 -1
  132. package/dist/summarizerTypes.js.map +1 -1
  133. package/dist/summaryCollection.d.ts.map +1 -1
  134. package/dist/summaryCollection.js +18 -8
  135. package/dist/summaryCollection.js.map +1 -1
  136. package/dist/summaryFormat.d.ts.map +1 -1
  137. package/dist/summaryFormat.js +18 -11
  138. package/dist/summaryFormat.js.map +1 -1
  139. package/dist/summaryGenerator.d.ts.map +1 -1
  140. package/dist/summaryGenerator.js +32 -14
  141. package/dist/summaryGenerator.js.map +1 -1
  142. package/dist/summaryManager.d.ts.map +1 -1
  143. package/dist/summaryManager.js +21 -9
  144. package/dist/summaryManager.js.map +1 -1
  145. package/dist/throttler.d.ts +2 -2
  146. package/dist/throttler.d.ts.map +1 -1
  147. package/dist/throttler.js +4 -4
  148. package/dist/throttler.js.map +1 -1
  149. package/garbageCollection.md +15 -2
  150. package/lib/batchTracker.d.ts +1 -2
  151. package/lib/batchTracker.d.ts.map +1 -1
  152. package/lib/batchTracker.js +2 -1
  153. package/lib/batchTracker.js.map +1 -1
  154. package/lib/blobManager.d.ts +53 -34
  155. package/lib/blobManager.d.ts.map +1 -1
  156. package/lib/blobManager.js +239 -127
  157. package/lib/blobManager.js.map +1 -1
  158. package/lib/connectionTelemetry.d.ts.map +1 -1
  159. package/lib/connectionTelemetry.js +11 -9
  160. package/lib/connectionTelemetry.js.map +1 -1
  161. package/lib/containerHandleContext.d.ts.map +1 -1
  162. package/lib/containerHandleContext.js +3 -1
  163. package/lib/containerHandleContext.js.map +1 -1
  164. package/lib/containerRuntime.d.ts +95 -46
  165. package/lib/containerRuntime.d.ts.map +1 -1
  166. package/lib/containerRuntime.js +291 -138
  167. package/lib/containerRuntime.js.map +1 -1
  168. package/lib/dataStore.d.ts.map +1 -1
  169. package/lib/dataStore.js +11 -9
  170. package/lib/dataStore.js.map +1 -1
  171. package/lib/dataStoreContext.d.ts +2 -1
  172. package/lib/dataStoreContext.d.ts.map +1 -1
  173. package/lib/dataStoreContext.js +40 -23
  174. package/lib/dataStoreContext.js.map +1 -1
  175. package/lib/dataStoreContexts.d.ts.map +1 -1
  176. package/lib/dataStoreContexts.js +7 -3
  177. package/lib/dataStoreContexts.js.map +1 -1
  178. package/lib/dataStoreRegistry.d.ts.map +1 -1
  179. package/lib/dataStoreRegistry.js +3 -1
  180. package/lib/dataStoreRegistry.js.map +1 -1
  181. package/lib/dataStores.d.ts +12 -9
  182. package/lib/dataStores.d.ts.map +1 -1
  183. package/lib/dataStores.js +74 -52
  184. package/lib/dataStores.js.map +1 -1
  185. package/lib/deltaScheduler.d.ts.map +1 -1
  186. package/lib/deltaScheduler.js +9 -4
  187. package/lib/deltaScheduler.js.map +1 -1
  188. package/lib/garbageCollection.d.ts +50 -26
  189. package/lib/garbageCollection.d.ts.map +1 -1
  190. package/lib/garbageCollection.js +347 -195
  191. package/lib/garbageCollection.js.map +1 -1
  192. package/lib/garbageCollectionConstants.d.ts +7 -3
  193. package/lib/garbageCollectionConstants.d.ts.map +1 -1
  194. package/lib/garbageCollectionConstants.js +9 -7
  195. package/lib/garbageCollectionConstants.js.map +1 -1
  196. package/lib/garbageCollectionHelpers.d.ts +15 -0
  197. package/lib/garbageCollectionHelpers.d.ts.map +1 -0
  198. package/lib/garbageCollectionHelpers.js +23 -0
  199. package/lib/garbageCollectionHelpers.js.map +1 -0
  200. package/lib/gcSweepReadyUsageDetection.d.ts +5 -5
  201. package/lib/gcSweepReadyUsageDetection.d.ts.map +1 -1
  202. package/lib/gcSweepReadyUsageDetection.js +14 -10
  203. package/lib/gcSweepReadyUsageDetection.js.map +1 -1
  204. package/lib/index.d.ts +3 -4
  205. package/lib/index.d.ts.map +1 -1
  206. package/lib/index.js +2 -3
  207. package/lib/index.js.map +1 -1
  208. package/lib/opLifecycle/batchManager.d.ts +13 -1
  209. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  210. package/lib/opLifecycle/batchManager.js +48 -7
  211. package/lib/opLifecycle/batchManager.js.map +1 -1
  212. package/lib/opLifecycle/definitions.d.ts +25 -1
  213. package/lib/opLifecycle/definitions.d.ts.map +1 -1
  214. package/lib/opLifecycle/definitions.js.map +1 -1
  215. package/lib/opLifecycle/index.d.ts +2 -2
  216. package/lib/opLifecycle/index.d.ts.map +1 -1
  217. package/lib/opLifecycle/index.js +1 -1
  218. package/lib/opLifecycle/index.js.map +1 -1
  219. package/lib/opLifecycle/opCompressor.d.ts +1 -1
  220. package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
  221. package/lib/opLifecycle/opCompressor.js +24 -10
  222. package/lib/opLifecycle/opCompressor.js.map +1 -1
  223. package/lib/opLifecycle/opDecompressor.d.ts +2 -1
  224. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
  225. package/lib/opLifecycle/opDecompressor.js +33 -17
  226. package/lib/opLifecycle/opDecompressor.js.map +1 -1
  227. package/lib/opLifecycle/opSplitter.d.ts +34 -2
  228. package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
  229. package/lib/opLifecycle/opSplitter.js +116 -5
  230. package/lib/opLifecycle/opSplitter.js.map +1 -1
  231. package/lib/opLifecycle/outbox.d.ts +5 -0
  232. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  233. package/lib/opLifecycle/outbox.js +38 -27
  234. package/lib/opLifecycle/outbox.js.map +1 -1
  235. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  236. package/lib/opLifecycle/remoteMessageProcessor.js +17 -2
  237. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
  238. package/lib/opProperties.d.ts.map +1 -1
  239. package/lib/opProperties.js +1 -3
  240. package/lib/opProperties.js.map +1 -1
  241. package/lib/orderedClientElection.d.ts.map +1 -1
  242. package/lib/orderedClientElection.js +10 -4
  243. package/lib/orderedClientElection.js.map +1 -1
  244. package/lib/packageVersion.d.ts +1 -1
  245. package/lib/packageVersion.js +1 -1
  246. package/lib/packageVersion.js.map +1 -1
  247. package/lib/pendingStateManager.d.ts +4 -13
  248. package/lib/pendingStateManager.d.ts.map +1 -1
  249. package/lib/pendingStateManager.js +134 -161
  250. package/lib/pendingStateManager.js.map +1 -1
  251. package/lib/runWhileConnectedCoordinator.d.ts.map +1 -1
  252. package/lib/runWhileConnectedCoordinator.js.map +1 -1
  253. package/lib/runningSummarizer.d.ts.map +1 -1
  254. package/lib/runningSummarizer.js +35 -23
  255. package/lib/runningSummarizer.js.map +1 -1
  256. package/lib/scheduleManager.d.ts +0 -1
  257. package/lib/scheduleManager.d.ts.map +1 -1
  258. package/lib/scheduleManager.js +11 -21
  259. package/lib/scheduleManager.js.map +1 -1
  260. package/lib/serializedSnapshotStorage.d.ts.map +1 -1
  261. package/lib/serializedSnapshotStorage.js +3 -1
  262. package/lib/serializedSnapshotStorage.js.map +1 -1
  263. package/lib/summarizer.d.ts +2 -3
  264. package/lib/summarizer.d.ts.map +1 -1
  265. package/lib/summarizer.js +39 -18
  266. package/lib/summarizer.js.map +1 -1
  267. package/lib/summarizerClientElection.d.ts +1 -2
  268. package/lib/summarizerClientElection.d.ts.map +1 -1
  269. package/lib/summarizerClientElection.js +3 -30
  270. package/lib/summarizerClientElection.js.map +1 -1
  271. package/lib/summarizerHandle.d.ts.map +1 -1
  272. package/lib/summarizerHandle.js.map +1 -1
  273. package/lib/summarizerHeuristics.d.ts.map +1 -1
  274. package/lib/summarizerHeuristics.js +6 -9
  275. package/lib/summarizerHeuristics.js.map +1 -1
  276. package/lib/summarizerTypes.d.ts +22 -25
  277. package/lib/summarizerTypes.d.ts.map +1 -1
  278. package/lib/summarizerTypes.js.map +1 -1
  279. package/lib/summaryCollection.d.ts.map +1 -1
  280. package/lib/summaryCollection.js +18 -8
  281. package/lib/summaryCollection.js.map +1 -1
  282. package/lib/summaryFormat.d.ts.map +1 -1
  283. package/lib/summaryFormat.js +20 -13
  284. package/lib/summaryFormat.js.map +1 -1
  285. package/lib/summaryGenerator.d.ts.map +1 -1
  286. package/lib/summaryGenerator.js +32 -14
  287. package/lib/summaryGenerator.js.map +1 -1
  288. package/lib/summaryManager.d.ts.map +1 -1
  289. package/lib/summaryManager.js +21 -9
  290. package/lib/summaryManager.js.map +1 -1
  291. package/lib/throttler.d.ts +2 -2
  292. package/lib/throttler.d.ts.map +1 -1
  293. package/lib/throttler.js +4 -4
  294. package/lib/throttler.js.map +1 -1
  295. package/package.json +27 -24
  296. package/prettier.config.cjs +1 -1
  297. package/src/batchTracker.ts +55 -50
  298. package/src/blobManager.ts +799 -593
  299. package/src/connectionTelemetry.ts +280 -249
  300. package/src/containerHandleContext.ts +27 -29
  301. package/src/containerRuntime.ts +3123 -2793
  302. package/src/dataStore.ts +172 -159
  303. package/src/dataStoreContext.ts +1048 -991
  304. package/src/dataStoreContexts.ts +178 -161
  305. package/src/dataStoreRegistry.ts +25 -20
  306. package/src/dataStores.ts +784 -711
  307. package/src/deltaScheduler.ts +158 -150
  308. package/src/garbageCollection.ts +1795 -1546
  309. package/src/garbageCollectionConstants.ts +10 -7
  310. package/src/garbageCollectionHelpers.ts +37 -0
  311. package/src/gcSweepReadyUsageDetection.ts +89 -83
  312. package/src/index.ts +67 -69
  313. package/src/opLifecycle/batchManager.ts +148 -86
  314. package/src/opLifecycle/definitions.ts +45 -19
  315. package/src/opLifecycle/index.ts +6 -5
  316. package/src/opLifecycle/opCompressor.ts +57 -39
  317. package/src/opLifecycle/opDecompressor.ts +104 -64
  318. package/src/opLifecycle/opSplitter.ts +226 -66
  319. package/src/opLifecycle/outbox.ts +206 -182
  320. package/src/opLifecycle/remoteMessageProcessor.ts +63 -47
  321. package/src/opProperties.ts +11 -9
  322. package/src/orderedClientElection.ts +489 -457
  323. package/src/packageVersion.ts +1 -1
  324. package/src/pendingStateManager.ts +379 -381
  325. package/src/runWhileConnectedCoordinator.ts +78 -71
  326. package/src/runningSummarizer.ts +619 -582
  327. package/src/scheduleManager.ts +299 -280
  328. package/src/serializedSnapshotStorage.ts +116 -111
  329. package/src/summarizer.ts +417 -381
  330. package/src/summarizerClientElection.ts +107 -129
  331. package/src/summarizerHandle.ts +11 -9
  332. package/src/summarizerHeuristics.ts +183 -186
  333. package/src/summarizerTypes.ts +344 -333
  334. package/src/summaryCollection.ts +378 -349
  335. package/src/summaryFormat.ts +146 -127
  336. package/src/summaryGenerator.ts +464 -406
  337. package/src/summaryManager.ts +377 -348
  338. package/src/throttler.ts +131 -122
  339. package/tsconfig.esnext.json +6 -6
  340. package/tsconfig.json +9 -13
@@ -6,11 +6,11 @@
6
6
  import { assert, bufferToString, stringToBuffer } from "@fluidframework/common-utils";
7
7
  import { IDocumentStorageService, ISummaryContext } from "@fluidframework/driver-definitions";
8
8
  import {
9
- ICreateBlobResponse,
10
- ISnapshotTree,
11
- ISummaryHandle,
12
- ISummaryTree,
13
- IVersion,
9
+ ICreateBlobResponse,
10
+ ISnapshotTree,
11
+ ISummaryHandle,
12
+ ISummaryTree,
13
+ IVersion,
14
14
  } from "@fluidframework/protocol-definitions";
15
15
  import { ISnapshotTreeWithBlobContents } from "@fluidframework/container-definitions";
16
16
 
@@ -18,7 +18,7 @@ import { ISnapshotTreeWithBlobContents } from "@fluidframework/container-definit
18
18
  * Serialized blobs from a snapshot. Used to load offline.
19
19
  */
20
20
  export interface ISerializedBaseSnapshotBlobs {
21
- [id: string]: string;
21
+ [id: string]: string;
22
22
  }
23
23
 
24
24
  /**
@@ -26,121 +26,126 @@ export interface ISerializedBaseSnapshotBlobs {
26
26
  * Used in offline load/attached dehydration to save snapshot blobs that are still needed but may have been deleted.
27
27
  */
28
28
  export class SerializedSnapshotStorage implements IDocumentStorageService {
29
- constructor(
30
- private readonly storageGetter: () => IDocumentStorageService,
31
- private readonly blobs: ISerializedBaseSnapshotBlobs,
32
- ) { }
29
+ constructor(
30
+ private readonly storageGetter: () => IDocumentStorageService,
31
+ private readonly blobs: ISerializedBaseSnapshotBlobs,
32
+ ) {}
33
33
 
34
- public static async serializeTree(
35
- snapshot: ISnapshotTree,
36
- storage: IDocumentStorageService,
37
- ): Promise<ISerializedBaseSnapshotBlobs> {
38
- const blobs = {};
39
- await this.serializeTreeCore(snapshot, blobs, storage);
40
- return blobs;
41
- }
34
+ public static async serializeTree(
35
+ snapshot: ISnapshotTree,
36
+ storage: IDocumentStorageService,
37
+ ): Promise<ISerializedBaseSnapshotBlobs> {
38
+ const blobs = {};
39
+ await this.serializeTreeCore(snapshot, blobs, storage);
40
+ return blobs;
41
+ }
42
42
 
43
- private static async serializeTreeCore(
44
- tree: ISnapshotTree,
45
- blobs: ISerializedBaseSnapshotBlobs,
46
- storage: IDocumentStorageService,
47
- ) {
48
- const treePs: Promise<any>[] = [];
49
- for (const subTree of Object.values(tree.trees)) {
50
- treePs.push(this.serializeTreeCore(subTree, blobs, storage));
51
- }
52
- for (const id of Object.values(tree.blobs)) {
53
- const blob = await storage.readBlob(id);
54
- // ArrayBufferLike will not survive JSON.stringify()
55
- blobs[id] = bufferToString(blob, "utf8");
56
- }
57
- return Promise.all(treePs);
58
- }
43
+ private static async serializeTreeCore(
44
+ tree: ISnapshotTree,
45
+ blobs: ISerializedBaseSnapshotBlobs,
46
+ storage: IDocumentStorageService,
47
+ ) {
48
+ const treePs: Promise<any>[] = [];
49
+ for (const subTree of Object.values(tree.trees)) {
50
+ treePs.push(this.serializeTreeCore(subTree, blobs, storage));
51
+ }
52
+ for (const id of Object.values(tree.blobs)) {
53
+ const blob = await storage.readBlob(id);
54
+ // ArrayBufferLike will not survive JSON.stringify()
55
+ blobs[id] = bufferToString(blob, "utf8");
56
+ }
57
+ return Promise.all(treePs);
58
+ }
59
59
 
60
- public static serializeTreeWithBlobContents(
61
- snapshot: ISnapshotTreeWithBlobContents,
62
- ): ISerializedBaseSnapshotBlobs {
63
- const blobs = {};
64
- this.serializeTreeWithBlobContentsCore(snapshot, blobs);
65
- return blobs;
66
- }
60
+ public static serializeTreeWithBlobContents(
61
+ snapshot: ISnapshotTreeWithBlobContents,
62
+ ): ISerializedBaseSnapshotBlobs {
63
+ const blobs = {};
64
+ this.serializeTreeWithBlobContentsCore(snapshot, blobs);
65
+ return blobs;
66
+ }
67
67
 
68
- private static serializeTreeWithBlobContentsCore(
69
- tree: ISnapshotTreeWithBlobContents,
70
- blobs: ISerializedBaseSnapshotBlobs,
71
- ) {
72
- for (const subTree of Object.values(tree.trees)) {
73
- this.serializeTreeWithBlobContentsCore(subTree, blobs);
74
- }
75
- for (const id of Object.values(tree.blobs)) {
76
- const blob = tree.blobsContents[id];
77
- assert(!!blob, 0x2ec /* "Blob must be present in blobsContents" */);
78
- // ArrayBufferLike will not survive JSON.stringify()
79
- blobs[id] = bufferToString(blob, "utf8");
80
- }
81
- }
68
+ private static serializeTreeWithBlobContentsCore(
69
+ tree: ISnapshotTreeWithBlobContents,
70
+ blobs: ISerializedBaseSnapshotBlobs,
71
+ ) {
72
+ for (const subTree of Object.values(tree.trees)) {
73
+ this.serializeTreeWithBlobContentsCore(subTree, blobs);
74
+ }
75
+ for (const id of Object.values(tree.blobs)) {
76
+ const blob = tree.blobsContents[id];
77
+ assert(!!blob, 0x2ec /* "Blob must be present in blobsContents" */);
78
+ // ArrayBufferLike will not survive JSON.stringify()
79
+ blobs[id] = bufferToString(blob, "utf8");
80
+ }
81
+ }
82
82
 
83
- private _storage?: IDocumentStorageService;
84
- private get storage(): IDocumentStorageService {
85
- // avoid calling it until we need it since it will be undefined if we're not connected
86
- // and we shouldn't need it in this case anyway
87
- if (this._storage) {
88
- return this._storage;
89
- }
90
- this._storage = this.storageGetter();
91
- return this._storage;
92
- }
83
+ private _storage?: IDocumentStorageService;
84
+ private get storage(): IDocumentStorageService {
85
+ // avoid calling it until we need it since it will be undefined if we're not connected
86
+ // and we shouldn't need it in this case anyway
87
+ if (this._storage) {
88
+ return this._storage;
89
+ }
90
+ this._storage = this.storageGetter();
91
+ return this._storage;
92
+ }
93
93
 
94
- public get repositoryUrl(): string { return this.storage.repositoryUrl; }
94
+ public get repositoryUrl(): string {
95
+ return this.storage.repositoryUrl;
96
+ }
95
97
 
96
- /**
97
- * Reads the object with the given ID, returns content in arrayBufferLike
98
- */
99
- public async readBlob(id: string): Promise<ArrayBufferLike> {
100
- if (this.blobs[id] !== undefined) {
101
- return stringToBuffer(this.blobs[id], "utf8");
102
- }
103
- return this.storage.readBlob(id);
104
- }
98
+ /**
99
+ * Reads the object with the given ID, returns content in arrayBufferLike
100
+ */
101
+ public async readBlob(id: string): Promise<ArrayBufferLike> {
102
+ if (this.blobs[id] !== undefined) {
103
+ return stringToBuffer(this.blobs[id], "utf8");
104
+ }
105
+ return this.storage.readBlob(id);
106
+ }
105
107
 
106
- /**
107
- * Returns the snapshot tree.
108
- */
109
- // eslint-disable-next-line @rushstack/no-new-null
110
- public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {
111
- return this.storage.getSnapshotTree(version);
112
- }
108
+ /**
109
+ * Returns the snapshot tree.
110
+ */
111
+ // eslint-disable-next-line @rushstack/no-new-null
112
+ public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {
113
+ return this.storage.getSnapshotTree(version);
114
+ }
113
115
 
114
- /**
115
- * Retrieves all versions of the document starting at the specified versionId - or null if from the head
116
- */
117
- // eslint-disable-next-line @rushstack/no-new-null
118
- public async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {
119
- return this.storage.getVersions(versionId, count);
120
- }
116
+ /**
117
+ * Retrieves all versions of the document starting at the specified versionId - or null if from the head
118
+ */
119
+ // eslint-disable-next-line @rushstack/no-new-null
120
+ public async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {
121
+ return this.storage.getVersions(versionId, count);
122
+ }
121
123
 
122
- /**
123
- * Creates a blob out of the given buffer
124
- */
125
- public async createBlob(file: ArrayBufferLike): Promise<ICreateBlobResponse> {
126
- return this.storage.createBlob(file);
127
- }
124
+ /**
125
+ * Creates a blob out of the given buffer
126
+ */
127
+ public async createBlob(file: ArrayBufferLike): Promise<ICreateBlobResponse> {
128
+ return this.storage.createBlob(file);
129
+ }
128
130
 
129
- /**
130
- * Uploads a summary tree to storage using the given context for reference of previous summary handle.
131
- * The ISummaryHandles in the uploaded tree should have paths to indicate which summary object they are
132
- * referencing from the previously acked summary.
133
- * Returns the uploaded summary handle.
134
- */
135
- public async uploadSummaryWithContext(summary: ISummaryTree, context: ISummaryContext): Promise<string> {
136
- return this.storage.uploadSummaryWithContext(summary, context);
137
- }
131
+ /**
132
+ * Uploads a summary tree to storage using the given context for reference of previous summary handle.
133
+ * The ISummaryHandles in the uploaded tree should have paths to indicate which summary object they are
134
+ * referencing from the previously acked summary.
135
+ * Returns the uploaded summary handle.
136
+ */
137
+ public async uploadSummaryWithContext(
138
+ summary: ISummaryTree,
139
+ context: ISummaryContext,
140
+ ): Promise<string> {
141
+ return this.storage.uploadSummaryWithContext(summary, context);
142
+ }
138
143
 
139
- /**
140
- * Retrieves the commit that matches the packfile handle. If the packfile has already been committed and the
141
- * server has deleted it this call may result in a broken promise.
142
- */
143
- public async downloadSummary(handle: ISummaryHandle): Promise<ISummaryTree> {
144
- return this.storage.downloadSummary(handle);
145
- }
144
+ /**
145
+ * Retrieves the commit that matches the packfile handle. If the packfile has already been committed and the
146
+ * server has deleted it this call may result in a broken promise.
147
+ */
148
+ public async downloadSummary(handle: ISummaryHandle): Promise<ISummaryTree> {
149
+ return this.storage.downloadSummary(handle);
150
+ }
146
151
  }