@fluidframework/driver-utils 1.4.0-115997 → 2.0.0-dev-rc.1.0.0.224419

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/.eslintrc.js +17 -7
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +141 -0
  4. package/README.md +68 -1
  5. package/api-extractor-lint.json +4 -0
  6. package/api-extractor.json +2 -2
  7. package/api-report/driver-utils.api.md +401 -0
  8. package/dist/adapters/compression/compressionTypes.cjs +20 -0
  9. package/dist/adapters/compression/compressionTypes.cjs.map +1 -0
  10. package/dist/adapters/compression/compressionTypes.d.ts +23 -0
  11. package/dist/adapters/compression/compressionTypes.d.ts.map +1 -0
  12. package/dist/adapters/compression/documentServiceCompressionAdapter.cjs +23 -0
  13. package/dist/adapters/compression/documentServiceCompressionAdapter.cjs.map +1 -0
  14. package/dist/adapters/compression/documentServiceCompressionAdapter.d.ts +13 -0
  15. package/dist/adapters/compression/documentServiceCompressionAdapter.d.ts.map +1 -0
  16. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.cjs +31 -0
  17. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.cjs.map +1 -0
  18. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.d.ts +16 -0
  19. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.d.ts.map +1 -0
  20. package/dist/adapters/compression/index.cjs +15 -0
  21. package/dist/adapters/compression/index.cjs.map +1 -0
  22. package/dist/adapters/compression/index.d.ts +8 -0
  23. package/dist/adapters/compression/index.d.ts.map +1 -0
  24. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.cjs +370 -0
  25. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.cjs.map +1 -0
  26. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.ts +165 -0
  27. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.ts.map +1 -0
  28. package/dist/adapters/compression/summaryblob/index.cjs +11 -0
  29. package/dist/adapters/compression/summaryblob/index.cjs.map +1 -0
  30. package/dist/adapters/compression/summaryblob/index.d.ts +6 -0
  31. package/dist/adapters/compression/summaryblob/index.d.ts.map +1 -0
  32. package/dist/adapters/index.cjs +14 -0
  33. package/dist/adapters/index.cjs.map +1 -0
  34. package/dist/adapters/index.d.ts +7 -0
  35. package/dist/adapters/index.d.ts.map +1 -0
  36. package/dist/adapters/predefinedAdapters.cjs +52 -0
  37. package/dist/adapters/predefinedAdapters.cjs.map +1 -0
  38. package/dist/adapters/predefinedAdapters.d.ts +21 -0
  39. package/dist/adapters/predefinedAdapters.d.ts.map +1 -0
  40. package/dist/blob.cjs +65 -0
  41. package/dist/blob.cjs.map +1 -0
  42. package/dist/blob.d.ts +56 -0
  43. package/dist/blob.d.ts.map +1 -0
  44. package/dist/{buildSnapshotTree.js → buildSnapshotTree.cjs} +7 -5
  45. package/dist/buildSnapshotTree.cjs.map +1 -0
  46. package/dist/buildSnapshotTree.d.ts +1 -0
  47. package/dist/buildSnapshotTree.d.ts.map +1 -1
  48. package/dist/documentServiceFactoryProxy.cjs +27 -0
  49. package/dist/documentServiceFactoryProxy.cjs.map +1 -0
  50. package/dist/documentServiceFactoryProxy.d.ts +19 -0
  51. package/dist/documentServiceFactoryProxy.d.ts.map +1 -0
  52. package/dist/documentServiceProxy.cjs +36 -0
  53. package/dist/documentServiceProxy.cjs.map +1 -0
  54. package/dist/documentServiceProxy.d.ts +21 -0
  55. package/dist/documentServiceProxy.d.ts.map +1 -0
  56. package/dist/{documentStorageServiceProxy.js → documentStorageServiceProxy.cjs} +10 -8
  57. package/dist/documentStorageServiceProxy.cjs.map +1 -0
  58. package/dist/documentStorageServiceProxy.d.ts +5 -2
  59. package/dist/documentStorageServiceProxy.d.ts.map +1 -1
  60. package/dist/driver-utils-alpha.d.ts +163 -0
  61. package/dist/driver-utils-beta.d.ts +178 -0
  62. package/dist/driver-utils-public.d.ts +178 -0
  63. package/dist/driver-utils-untrimmed.d.ts +590 -0
  64. package/dist/{error.js → error.cjs} +10 -3
  65. package/dist/error.cjs.map +1 -0
  66. package/dist/error.d.ts +8 -3
  67. package/dist/error.d.ts.map +1 -1
  68. package/dist/index.cjs +69 -0
  69. package/dist/index.cjs.map +1 -0
  70. package/dist/index.d.ts +16 -21
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/{insecureUrlResolver.js → insecureUrlResolver.cjs} +10 -11
  73. package/dist/insecureUrlResolver.cjs.map +1 -0
  74. package/dist/insecureUrlResolver.d.ts +1 -0
  75. package/dist/insecureUrlResolver.d.ts.map +1 -1
  76. package/dist/messageRecognition.cjs +38 -0
  77. package/dist/messageRecognition.cjs.map +1 -0
  78. package/dist/messageRecognition.d.ts +16 -26
  79. package/dist/messageRecognition.d.ts.map +1 -1
  80. package/dist/{network.js → network.cjs} +86 -24
  81. package/dist/network.cjs.map +1 -0
  82. package/dist/network.d.ts +69 -20
  83. package/dist/network.d.ts.map +1 -1
  84. package/dist/networkUtils.cjs +29 -0
  85. package/dist/networkUtils.cjs.map +1 -0
  86. package/dist/networkUtils.d.ts +4 -10
  87. package/dist/networkUtils.d.ts.map +1 -1
  88. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  89. package/dist/packageVersion.cjs.map +1 -0
  90. package/dist/packageVersion.d.ts +1 -1
  91. package/dist/packageVersion.d.ts.map +1 -1
  92. package/dist/{parallelRequests.js → parallelRequests.cjs} +146 -74
  93. package/dist/parallelRequests.cjs.map +1 -0
  94. package/dist/parallelRequests.d.ts +19 -6
  95. package/dist/parallelRequests.d.ts.map +1 -1
  96. package/dist/{prefetchDocumentStorageService.js → prefetchDocumentStorageService.cjs} +7 -4
  97. package/dist/prefetchDocumentStorageService.cjs.map +1 -0
  98. package/dist/prefetchDocumentStorageService.d.ts +4 -2
  99. package/dist/prefetchDocumentStorageService.d.ts.map +1 -1
  100. package/dist/{rateLimiter.js → rateLimiter.cjs} +6 -3
  101. package/dist/rateLimiter.cjs.map +1 -0
  102. package/dist/rateLimiter.d.ts +3 -0
  103. package/dist/rateLimiter.d.ts.map +1 -1
  104. package/dist/readAndParse.cjs +28 -0
  105. package/dist/readAndParse.cjs.map +1 -0
  106. package/dist/readAndParse.d.ts +10 -4
  107. package/dist/readAndParse.d.ts.map +1 -1
  108. package/dist/runWithRetry.cjs +108 -0
  109. package/dist/runWithRetry.cjs.map +1 -0
  110. package/dist/runWithRetry.d.ts +26 -7
  111. package/dist/runWithRetry.d.ts.map +1 -1
  112. package/dist/{summaryForCreateNew.js → summaryForCreateNew.cjs} +20 -19
  113. package/dist/summaryForCreateNew.cjs.map +1 -0
  114. package/dist/summaryForCreateNew.d.ts +17 -4
  115. package/dist/summaryForCreateNew.d.ts.map +1 -1
  116. package/dist/{treeConversions.js → treeConversions.cjs} +16 -18
  117. package/dist/treeConversions.cjs.map +1 -0
  118. package/dist/treeConversions.d.ts +1 -0
  119. package/dist/treeConversions.d.ts.map +1 -1
  120. package/dist/tsdoc-metadata.json +11 -0
  121. package/lib/adapters/compression/compressionTypes.d.mts +23 -0
  122. package/lib/adapters/compression/compressionTypes.d.mts.map +1 -0
  123. package/lib/adapters/compression/compressionTypes.mjs +17 -0
  124. package/lib/adapters/compression/compressionTypes.mjs.map +1 -0
  125. package/lib/adapters/compression/documentServiceCompressionAdapter.d.mts +13 -0
  126. package/lib/adapters/compression/documentServiceCompressionAdapter.d.mts.map +1 -0
  127. package/lib/adapters/compression/documentServiceCompressionAdapter.mjs +19 -0
  128. package/lib/adapters/compression/documentServiceCompressionAdapter.mjs.map +1 -0
  129. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.d.mts +16 -0
  130. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.d.mts.map +1 -0
  131. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.mjs +27 -0
  132. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.mjs.map +1 -0
  133. package/lib/adapters/compression/index.d.mts +8 -0
  134. package/lib/adapters/compression/index.d.mts.map +1 -0
  135. package/lib/adapters/compression/index.mjs +8 -0
  136. package/lib/adapters/compression/index.mjs.map +1 -0
  137. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.mts +165 -0
  138. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.mts.map +1 -0
  139. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.mjs +366 -0
  140. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.mjs.map +1 -0
  141. package/lib/adapters/compression/summaryblob/index.d.mts +6 -0
  142. package/lib/adapters/compression/summaryblob/index.d.mts.map +1 -0
  143. package/lib/adapters/compression/summaryblob/index.mjs +6 -0
  144. package/lib/adapters/compression/summaryblob/index.mjs.map +1 -0
  145. package/lib/adapters/index.d.mts +7 -0
  146. package/lib/adapters/index.d.mts.map +1 -0
  147. package/lib/adapters/index.mjs +7 -0
  148. package/lib/adapters/index.mjs.map +1 -0
  149. package/lib/adapters/predefinedAdapters.d.mts +21 -0
  150. package/lib/adapters/predefinedAdapters.d.mts.map +1 -0
  151. package/lib/adapters/predefinedAdapters.mjs +47 -0
  152. package/lib/adapters/predefinedAdapters.mjs.map +1 -0
  153. package/lib/blob.d.mts +56 -0
  154. package/lib/blob.d.mts.map +1 -0
  155. package/lib/blob.mjs +59 -0
  156. package/lib/blob.mjs.map +1 -0
  157. package/lib/{buildSnapshotTree.d.ts → buildSnapshotTree.d.mts} +1 -0
  158. package/lib/buildSnapshotTree.d.mts.map +1 -0
  159. package/lib/{buildSnapshotTree.js → buildSnapshotTree.mjs} +6 -4
  160. package/lib/buildSnapshotTree.mjs.map +1 -0
  161. package/lib/documentServiceFactoryProxy.d.mts +19 -0
  162. package/lib/documentServiceFactoryProxy.d.mts.map +1 -0
  163. package/lib/documentServiceFactoryProxy.mjs +23 -0
  164. package/lib/documentServiceFactoryProxy.mjs.map +1 -0
  165. package/lib/documentServiceProxy.d.mts +21 -0
  166. package/lib/documentServiceProxy.d.mts.map +1 -0
  167. package/lib/documentServiceProxy.mjs +32 -0
  168. package/lib/documentServiceProxy.mjs.map +1 -0
  169. package/lib/{documentStorageServiceProxy.d.ts → documentStorageServiceProxy.d.mts} +5 -2
  170. package/lib/documentStorageServiceProxy.d.mts.map +1 -0
  171. package/lib/{documentStorageServiceProxy.js → documentStorageServiceProxy.mjs} +10 -8
  172. package/lib/documentStorageServiceProxy.mjs.map +1 -0
  173. package/lib/driver-utils-alpha.d.mts +163 -0
  174. package/lib/driver-utils-beta.d.mts +178 -0
  175. package/lib/driver-utils-public.d.mts +178 -0
  176. package/lib/driver-utils-untrimmed.d.mts +590 -0
  177. package/lib/error.d.mts +16 -0
  178. package/lib/error.d.mts.map +1 -0
  179. package/lib/error.mjs +19 -0
  180. package/lib/error.mjs.map +1 -0
  181. package/lib/index.d.mts +21 -0
  182. package/lib/index.d.mts.map +1 -0
  183. package/lib/index.mjs +21 -0
  184. package/lib/index.mjs.map +1 -0
  185. package/lib/{insecureUrlResolver.d.ts → insecureUrlResolver.d.mts} +1 -0
  186. package/lib/insecureUrlResolver.d.mts.map +1 -0
  187. package/lib/{insecureUrlResolver.js → insecureUrlResolver.mjs} +10 -11
  188. package/lib/insecureUrlResolver.mjs.map +1 -0
  189. package/lib/messageRecognition.d.mts +24 -0
  190. package/lib/messageRecognition.d.mts.map +1 -0
  191. package/lib/messageRecognition.mjs +29 -0
  192. package/lib/messageRecognition.mjs.map +1 -0
  193. package/lib/{network.d.ts → network.d.mts} +69 -20
  194. package/lib/network.d.mts.map +1 -0
  195. package/lib/{network.js → network.mjs} +85 -23
  196. package/lib/network.mjs.map +1 -0
  197. package/lib/networkUtils.d.mts +11 -0
  198. package/lib/networkUtils.d.mts.map +1 -0
  199. package/lib/networkUtils.mjs +25 -0
  200. package/lib/networkUtils.mjs.map +1 -0
  201. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
  202. package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
  203. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  204. package/lib/packageVersion.mjs.map +1 -0
  205. package/lib/{parallelRequests.d.ts → parallelRequests.d.mts} +19 -6
  206. package/lib/parallelRequests.d.mts.map +1 -0
  207. package/lib/{parallelRequests.js → parallelRequests.mjs} +119 -52
  208. package/lib/parallelRequests.mjs.map +1 -0
  209. package/lib/{prefetchDocumentStorageService.d.ts → prefetchDocumentStorageService.d.mts} +5 -7
  210. package/lib/prefetchDocumentStorageService.d.mts.map +1 -0
  211. package/lib/{prefetchDocumentStorageService.js → prefetchDocumentStorageService.mjs} +7 -8
  212. package/lib/prefetchDocumentStorageService.mjs.map +1 -0
  213. package/lib/{rateLimiter.d.ts → rateLimiter.d.mts} +3 -0
  214. package/lib/rateLimiter.d.mts.map +1 -0
  215. package/lib/{rateLimiter.js → rateLimiter.mjs} +5 -2
  216. package/lib/rateLimiter.mjs.map +1 -0
  217. package/lib/readAndParse.d.mts +20 -0
  218. package/lib/readAndParse.d.mts.map +1 -0
  219. package/lib/readAndParse.mjs +24 -0
  220. package/lib/readAndParse.mjs.map +1 -0
  221. package/lib/{runWithRetry.d.ts → runWithRetry.d.mts} +26 -7
  222. package/lib/runWithRetry.d.mts.map +1 -0
  223. package/lib/runWithRetry.mjs +103 -0
  224. package/lib/runWithRetry.mjs.map +1 -0
  225. package/lib/{summaryForCreateNew.d.ts → summaryForCreateNew.d.mts} +17 -4
  226. package/lib/summaryForCreateNew.d.mts.map +1 -0
  227. package/lib/{summaryForCreateNew.js → summaryForCreateNew.mjs} +18 -17
  228. package/lib/summaryForCreateNew.mjs.map +1 -0
  229. package/lib/{treeConversions.d.ts → treeConversions.d.mts} +1 -0
  230. package/lib/treeConversions.d.mts.map +1 -0
  231. package/lib/{treeConversions.js → treeConversions.mjs} +12 -14
  232. package/lib/treeConversions.mjs.map +1 -0
  233. package/package.json +88 -64
  234. package/prettier.config.cjs +8 -0
  235. package/src/adapters/compression/compressionTypes.ts +25 -0
  236. package/src/adapters/compression/documentServiceCompressionAdapter.ts +28 -0
  237. package/src/adapters/compression/documentServiceFactoryCompressionAdapter.ts +54 -0
  238. package/src/adapters/compression/index.ts +12 -0
  239. package/src/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.ts +451 -0
  240. package/src/adapters/compression/summaryblob/index.ts +9 -0
  241. package/src/adapters/index.ts +13 -0
  242. package/src/adapters/predefinedAdapters.ts +74 -0
  243. package/src/blob.ts +77 -0
  244. package/src/buildSnapshotTree.ts +58 -53
  245. package/src/documentServiceFactoryProxy.ts +47 -0
  246. package/src/documentServiceProxy.ts +46 -0
  247. package/src/documentStorageServiceProxy.ts +52 -37
  248. package/src/error.ts +13 -8
  249. package/src/index.ts +51 -21
  250. package/src/insecureUrlResolver.ts +125 -120
  251. package/src/messageRecognition.ts +24 -53
  252. package/src/network.ts +189 -111
  253. package/src/networkUtils.ts +24 -49
  254. package/src/packageVersion.ts +1 -1
  255. package/src/parallelRequests.ts +630 -519
  256. package/src/prefetchDocumentStorageService.ts +79 -74
  257. package/src/rateLimiter.ts +33 -30
  258. package/src/readAndParse.ts +18 -9
  259. package/src/runWithRetry.ts +145 -85
  260. package/src/summaryForCreateNew.ts +48 -29
  261. package/src/treeConversions.ts +49 -70
  262. package/tsc-multi.test.json +4 -0
  263. package/tsconfig.json +10 -12
  264. package/dist/blobAggregationStorage.d.ts +0 -43
  265. package/dist/blobAggregationStorage.d.ts.map +0 -1
  266. package/dist/blobAggregationStorage.js +0 -318
  267. package/dist/blobAggregationStorage.js.map +0 -1
  268. package/dist/blobCacheStorageService.d.ts +0 -16
  269. package/dist/blobCacheStorageService.d.ts.map +0 -1
  270. package/dist/blobCacheStorageService.js +0 -29
  271. package/dist/blobCacheStorageService.js.map +0 -1
  272. package/dist/buildSnapshotTree.js.map +0 -1
  273. package/dist/documentStorageServiceProxy.js.map +0 -1
  274. package/dist/emptyDocumentDeltaStorageService.d.ts +0 -13
  275. package/dist/emptyDocumentDeltaStorageService.d.ts.map +0 -1
  276. package/dist/emptyDocumentDeltaStorageService.js +0 -20
  277. package/dist/emptyDocumentDeltaStorageService.js.map +0 -1
  278. package/dist/error.js.map +0 -1
  279. package/dist/fluidResolvedUrl.d.ts +0 -8
  280. package/dist/fluidResolvedUrl.d.ts.map +0 -1
  281. package/dist/fluidResolvedUrl.js +0 -16
  282. package/dist/fluidResolvedUrl.js.map +0 -1
  283. package/dist/index.js +0 -38
  284. package/dist/index.js.map +0 -1
  285. package/dist/insecureUrlResolver.js.map +0 -1
  286. package/dist/messageRecognition.js +0 -73
  287. package/dist/messageRecognition.js.map +0 -1
  288. package/dist/multiDocumentServiceFactory.d.ts +0 -16
  289. package/dist/multiDocumentServiceFactory.d.ts.map +0 -1
  290. package/dist/multiDocumentServiceFactory.js +0 -63
  291. package/dist/multiDocumentServiceFactory.js.map +0 -1
  292. package/dist/multiUrlResolver.d.ts +0 -20
  293. package/dist/multiUrlResolver.d.ts.map +0 -1
  294. package/dist/multiUrlResolver.js +0 -45
  295. package/dist/multiUrlResolver.js.map +0 -1
  296. package/dist/network.js.map +0 -1
  297. package/dist/networkUtils.js +0 -59
  298. package/dist/networkUtils.js.map +0 -1
  299. package/dist/packageVersion.js.map +0 -1
  300. package/dist/parallelRequests.js.map +0 -1
  301. package/dist/prefetchDocumentStorageService.js.map +0 -1
  302. package/dist/rateLimiter.js.map +0 -1
  303. package/dist/readAndParse.js +0 -22
  304. package/dist/readAndParse.js.map +0 -1
  305. package/dist/runWithRetry.js +0 -69
  306. package/dist/runWithRetry.js.map +0 -1
  307. package/dist/summaryForCreateNew.js.map +0 -1
  308. package/dist/treeConversions.js.map +0 -1
  309. package/dist/treeUtils.d.ts +0 -51
  310. package/dist/treeUtils.d.ts.map +0 -1
  311. package/dist/treeUtils.js +0 -85
  312. package/dist/treeUtils.js.map +0 -1
  313. package/lib/blobAggregationStorage.d.ts +0 -43
  314. package/lib/blobAggregationStorage.d.ts.map +0 -1
  315. package/lib/blobAggregationStorage.js +0 -313
  316. package/lib/blobAggregationStorage.js.map +0 -1
  317. package/lib/blobCacheStorageService.d.ts +0 -16
  318. package/lib/blobCacheStorageService.d.ts.map +0 -1
  319. package/lib/blobCacheStorageService.js +0 -25
  320. package/lib/blobCacheStorageService.js.map +0 -1
  321. package/lib/buildSnapshotTree.d.ts.map +0 -1
  322. package/lib/buildSnapshotTree.js.map +0 -1
  323. package/lib/documentStorageServiceProxy.d.ts.map +0 -1
  324. package/lib/documentStorageServiceProxy.js.map +0 -1
  325. package/lib/emptyDocumentDeltaStorageService.d.ts +0 -13
  326. package/lib/emptyDocumentDeltaStorageService.d.ts.map +0 -1
  327. package/lib/emptyDocumentDeltaStorageService.js +0 -16
  328. package/lib/emptyDocumentDeltaStorageService.js.map +0 -1
  329. package/lib/error.d.ts +0 -11
  330. package/lib/error.d.ts.map +0 -1
  331. package/lib/error.js +0 -13
  332. package/lib/error.js.map +0 -1
  333. package/lib/fluidResolvedUrl.d.ts +0 -8
  334. package/lib/fluidResolvedUrl.d.ts.map +0 -1
  335. package/lib/fluidResolvedUrl.js +0 -11
  336. package/lib/fluidResolvedUrl.js.map +0 -1
  337. package/lib/index.d.ts +0 -26
  338. package/lib/index.d.ts.map +0 -1
  339. package/lib/index.js +0 -26
  340. package/lib/index.js.map +0 -1
  341. package/lib/insecureUrlResolver.d.ts.map +0 -1
  342. package/lib/insecureUrlResolver.js.map +0 -1
  343. package/lib/messageRecognition.d.ts +0 -38
  344. package/lib/messageRecognition.d.ts.map +0 -1
  345. package/lib/messageRecognition.js +0 -67
  346. package/lib/messageRecognition.js.map +0 -1
  347. package/lib/multiDocumentServiceFactory.d.ts +0 -16
  348. package/lib/multiDocumentServiceFactory.d.ts.map +0 -1
  349. package/lib/multiDocumentServiceFactory.js +0 -59
  350. package/lib/multiDocumentServiceFactory.js.map +0 -1
  351. package/lib/multiUrlResolver.d.ts +0 -20
  352. package/lib/multiUrlResolver.d.ts.map +0 -1
  353. package/lib/multiUrlResolver.js +0 -40
  354. package/lib/multiUrlResolver.js.map +0 -1
  355. package/lib/network.d.ts.map +0 -1
  356. package/lib/network.js.map +0 -1
  357. package/lib/networkUtils.d.ts +0 -17
  358. package/lib/networkUtils.d.ts.map +0 -1
  359. package/lib/networkUtils.js +0 -54
  360. package/lib/networkUtils.js.map +0 -1
  361. package/lib/packageVersion.js.map +0 -1
  362. package/lib/parallelRequests.d.ts.map +0 -1
  363. package/lib/parallelRequests.js.map +0 -1
  364. package/lib/prefetchDocumentStorageService.d.ts.map +0 -1
  365. package/lib/prefetchDocumentStorageService.js.map +0 -1
  366. package/lib/rateLimiter.d.ts.map +0 -1
  367. package/lib/rateLimiter.js.map +0 -1
  368. package/lib/readAndParse.d.ts +0 -14
  369. package/lib/readAndParse.d.ts.map +0 -1
  370. package/lib/readAndParse.js +0 -18
  371. package/lib/readAndParse.js.map +0 -1
  372. package/lib/runWithRetry.d.ts.map +0 -1
  373. package/lib/runWithRetry.js +0 -65
  374. package/lib/runWithRetry.js.map +0 -1
  375. package/lib/summaryForCreateNew.d.ts.map +0 -1
  376. package/lib/summaryForCreateNew.js.map +0 -1
  377. package/lib/treeConversions.d.ts.map +0 -1
  378. package/lib/treeConversions.js.map +0 -1
  379. package/lib/treeUtils.d.ts +0 -51
  380. package/lib/treeUtils.d.ts.map +0 -1
  381. package/lib/treeUtils.js +0 -80
  382. package/lib/treeUtils.js.map +0 -1
  383. package/src/blobAggregationStorage.ts +0 -374
  384. package/src/blobCacheStorageService.ts +0 -32
  385. package/src/emptyDocumentDeltaStorageService.ts +0 -24
  386. package/src/fluidResolvedUrl.ts +0 -15
  387. package/src/multiDocumentServiceFactory.ts +0 -80
  388. package/src/multiUrlResolver.ts +0 -51
  389. package/src/treeUtils.ts +0 -111
  390. package/tsconfig.esnext.json +0 -7
@@ -3,90 +3,95 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { LoaderCachingPolicy } from "@fluidframework/driver-definitions";
6
- import {
7
- ISnapshotTree,
8
- IVersion,
9
- } from "@fluidframework/protocol-definitions";
6
+ import { ISnapshotTree, IVersion } from "@fluidframework/protocol-definitions";
10
7
  import { DocumentStorageServiceProxy } from "./documentStorageServiceProxy";
11
8
  import { canRetryOnError } from "./network";
12
9
 
10
+ /**
11
+ * @internal
12
+ */
13
13
  export class PrefetchDocumentStorageService extends DocumentStorageServiceProxy {
14
- // BlobId -> blob prefetchCache cache
15
- private readonly prefetchCache = new Map<string, Promise<ArrayBufferLike>>();
16
- private prefetchEnabled = true;
14
+ // BlobId -> blob prefetchCache cache
15
+ private readonly prefetchCache = new Map<string, Promise<ArrayBufferLike>>();
16
+ private prefetchEnabled = true;
17
17
 
18
- public get policies() {
19
- const policies = this.internalStorageService.policies;
20
- if (policies) {
21
- return { ...policies, caching: LoaderCachingPolicy.NoCaching };
22
- }
23
- }
18
+ public get policies() {
19
+ const policies = this.internalStorageService.policies;
20
+ if (policies) {
21
+ return { ...policies, caching: LoaderCachingPolicy.NoCaching };
22
+ }
23
+ }
24
24
 
25
- public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {
26
- const p = this.internalStorageService.getSnapshotTree(version);
27
- if (this.prefetchEnabled) {
28
- // We don't care if the prefetch succeeds
29
- void p.then((tree: ISnapshotTree | null | undefined) => {
30
- if (tree === null || tree === undefined) { return; }
31
- this.prefetchTree(tree);
32
- });
33
- }
34
- return p;
35
- }
25
+ public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {
26
+ const p = this.internalStorageService.getSnapshotTree(version);
27
+ if (this.prefetchEnabled) {
28
+ // We don't care if the prefetch succeeds
29
+ void p.then((tree: ISnapshotTree | null | undefined) => {
30
+ if (tree === null || tree === undefined) {
31
+ return;
32
+ }
33
+ this.prefetchTree(tree);
34
+ });
35
+ }
36
+ return p;
37
+ }
36
38
 
37
- public async readBlob(blobId: string): Promise<ArrayBufferLike> {
38
- return this.cachedRead(blobId);
39
- }
40
- public stopPrefetch() {
41
- this.prefetchEnabled = false;
42
- this.prefetchCache.clear();
43
- }
39
+ public async readBlob(blobId: string): Promise<ArrayBufferLike> {
40
+ return this.cachedRead(blobId);
41
+ }
42
+ public stopPrefetch() {
43
+ this.prefetchEnabled = false;
44
+ this.prefetchCache.clear();
45
+ }
44
46
 
45
- private async cachedRead(blobId: string): Promise<ArrayBufferLike> {
46
- if (this.prefetchEnabled) {
47
- const prefetchedBlobP = this.prefetchCache.get(blobId);
48
- if (prefetchedBlobP !== undefined) {
49
- return prefetchedBlobP;
50
- }
51
- const prefetchedBlobPFromStorage = this.internalStorageService.readBlob(blobId);
52
- this.prefetchCache.set(blobId, prefetchedBlobPFromStorage.catch((error) => {
53
- if (canRetryOnError(error)) {
54
- this.prefetchCache.delete(blobId);
55
- }
56
- throw error;
57
- }));
58
- return prefetchedBlobPFromStorage;
59
- }
60
- return this.internalStorageService.readBlob(blobId);
61
- }
47
+ private async cachedRead(blobId: string): Promise<ArrayBufferLike> {
48
+ if (this.prefetchEnabled) {
49
+ const prefetchedBlobP = this.prefetchCache.get(blobId);
50
+ if (prefetchedBlobP !== undefined) {
51
+ return prefetchedBlobP;
52
+ }
53
+ const prefetchedBlobPFromStorage = this.internalStorageService.readBlob(blobId);
54
+ this.prefetchCache.set(
55
+ blobId,
56
+ prefetchedBlobPFromStorage.catch((error) => {
57
+ if (canRetryOnError(error)) {
58
+ this.prefetchCache.delete(blobId);
59
+ }
60
+ throw error;
61
+ }),
62
+ );
63
+ return prefetchedBlobPFromStorage;
64
+ }
65
+ return this.internalStorageService.readBlob(blobId);
66
+ }
62
67
 
63
- private prefetchTree(tree: ISnapshotTree) {
64
- const secondary: string[] = [];
65
- this.prefetchTreeCore(tree, secondary);
68
+ private prefetchTree(tree: ISnapshotTree) {
69
+ const secondary: string[] = [];
70
+ this.prefetchTreeCore(tree, secondary);
66
71
 
67
- for (const blob of secondary) {
68
- // We don't care if the prefetch succeeds
69
- void this.cachedRead(blob);
70
- }
71
- }
72
+ for (const blob of secondary) {
73
+ // We don't care if the prefetch succeeds
74
+ void this.cachedRead(blob);
75
+ }
76
+ }
72
77
 
73
- private prefetchTreeCore(tree: ISnapshotTree, secondary: string[]) {
74
- for (const blobKey of Object.keys(tree.blobs)) {
75
- const blob = tree.blobs[blobKey];
76
- if (blobKey.startsWith(".") || blobKey === "header" || blobKey.startsWith("quorum")) {
77
- if (blob !== null) {
78
- // We don't care if the prefetch succeeds
79
- void this.cachedRead(blob);
80
- }
81
- } else if (!blobKey.startsWith("deltas")) {
82
- if (blob !== null) {
83
- secondary.push(blob);
84
- }
85
- }
86
- }
78
+ private prefetchTreeCore(tree: ISnapshotTree, secondary: string[]) {
79
+ for (const blobKey of Object.keys(tree.blobs)) {
80
+ const blob = tree.blobs[blobKey];
81
+ if (blobKey.startsWith(".") || blobKey === "header" || blobKey.startsWith("quorum")) {
82
+ if (blob !== null) {
83
+ // We don't care if the prefetch succeeds
84
+ void this.cachedRead(blob);
85
+ }
86
+ } else if (!blobKey.startsWith("deltas")) {
87
+ if (blob !== null) {
88
+ secondary.push(blob);
89
+ }
90
+ }
91
+ }
87
92
 
88
- for (const subTree of Object.keys(tree.trees)) {
89
- this.prefetchTreeCore(tree.trees[subTree], secondary);
90
- }
91
- }
93
+ for (const subTree of Object.keys(tree.trees)) {
94
+ this.prefetchTreeCore(tree.trees[subTree], secondary);
95
+ }
96
+ }
92
97
  }
@@ -3,41 +3,44 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert } from "@fluidframework/common-utils";
6
+ import { assert } from "@fluidframework/core-utils";
7
7
 
8
+ /**
9
+ * @alpha
10
+ */
8
11
  export class RateLimiter {
9
- private readonly tasks: (() => void)[] = [];
10
- constructor(private maxRequests: number) {
11
- assert(maxRequests > 0, 0x0ae /* "Tried to create rate limiter with 0 max requests!" */);
12
- }
12
+ private readonly tasks: (() => void)[] = [];
13
+ constructor(private maxRequests: number) {
14
+ assert(maxRequests > 0, 0x0ae /* "Tried to create rate limiter with 0 max requests!" */);
15
+ }
13
16
 
14
- public get waitQueueLength(): number {
15
- return this.tasks.length;
16
- }
17
+ public get waitQueueLength(): number {
18
+ return this.tasks.length;
19
+ }
17
20
 
18
- // Run when one of the tasks finished running.
19
- // Release next task if we have one, or allow more tasks to run in future.
20
- protected readonly release = () => {
21
- const task = this.tasks.shift();
22
- if (task !== undefined) {
23
- return task();
24
- }
25
- this.maxRequests++;
26
- };
21
+ // Run when one of the tasks finished running.
22
+ // Release next task if we have one, or allow more tasks to run in future.
23
+ protected readonly release = () => {
24
+ const task = this.tasks.shift();
25
+ if (task !== undefined) {
26
+ return task();
27
+ }
28
+ this.maxRequests++;
29
+ };
27
30
 
28
- protected async acquire() {
29
- if (this.maxRequests > 0) {
30
- this.maxRequests--;
31
- return;
32
- }
31
+ protected async acquire() {
32
+ if (this.maxRequests > 0) {
33
+ this.maxRequests--;
34
+ return;
35
+ }
33
36
 
34
- return new Promise<void>((resolve) => {
35
- this.tasks.push(resolve);
36
- });
37
- }
37
+ return new Promise<void>((resolve) => {
38
+ this.tasks.push(resolve);
39
+ });
40
+ }
38
41
 
39
- public async schedule<T>(work: () => Promise<T>) {
40
- await this.acquire();
41
- return work().finally(this.release);
42
- }
42
+ public async schedule<T>(work: () => Promise<T>) {
43
+ await this.acquire();
44
+ return work().finally(this.release);
45
+ }
43
46
  }
@@ -3,18 +3,27 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { bufferToString } from "@fluidframework/common-utils";
6
+ import { bufferToString } from "@fluid-internal/client-utils";
7
7
  import { IDocumentStorageService } from "@fluidframework/driver-definitions";
8
8
 
9
9
  /**
10
- * Read a blob from IDocumentStorageService and JSON.parse it into object of type T
10
+ * Read a blob from {@link @fluidframework/driver-definitions#IDocumentStorageService} and
11
+ * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse | JSON.parse}
12
+ * it into object of type `T`.
11
13
  *
12
- * @param storage - the IDocumentStorageService to read from
13
- * @param id - the id of the blob to read and parse
14
- * @returns the object that we decoded and JSON.parse
14
+ * @param storage - The `DocumentStorageService` to read from.
15
+ * @param id - The ID of the blob to read and parse.
16
+ *
17
+ * @typeParam T - Output type matching JSON format of inpyt blob data.
18
+ *
19
+ * @returns The object that we decoded and parsed via `JSON.parse`.
20
+ * @internal
15
21
  */
16
- export async function readAndParse<T>(storage: Pick<IDocumentStorageService, "readBlob">, id: string): Promise<T> {
17
- const blob = await storage.readBlob(id);
18
- const decoded = bufferToString(blob, "utf8");
19
- return JSON.parse(decoded) as T;
22
+ export async function readAndParse<T>(
23
+ storage: Pick<IDocumentStorageService, "readBlob">,
24
+ id: string,
25
+ ): Promise<T> {
26
+ const blob = await storage.readBlob(id);
27
+ const decoded = bufferToString(blob, "utf8");
28
+ return JSON.parse(decoded) as T;
20
29
  }
@@ -3,103 +3,163 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import { delay, performance } from "@fluidframework/common-utils";
8
- import { DriverErrorType } from "@fluidframework/driver-definitions";
9
- import { canRetryOnError, getRetryDelayFromError } from "./network";
6
+ import { ITelemetryLoggerExt, isFluidError } from "@fluidframework/telemetry-utils";
7
+ import { performance } from "@fluid-internal/client-utils";
8
+ import { delay } from "@fluidframework/core-utils";
9
+ import { DriverErrorTypes } from "@fluidframework/driver-definitions";
10
+ import { canRetryOnError, getRetryDelayFromError, NonRetryableError } from "./network";
10
11
  import { pkgVersion } from "./packageVersion";
11
- import { NonRetryableError } from ".";
12
12
 
13
13
  /**
14
14
  * Interface describing an object passed to various network APIs.
15
15
  * It allows caller to control cancellation, as well as learn about any delays.
16
+ * @internal
16
17
  */
17
18
  export interface IProgress {
18
- /**
19
- * Abort signal used to cancel operation
20
- * Note that most of the layers do not use this signal yet. We need to change that over time.
21
- * Please consult with API documentation / implementation.
22
- * Note that number of layers may not check this signal while holding this request in a queue,
23
- * so it may take a while it takes effect. This can be improved in the future.
24
- * Layers in question are:
25
- * - driver (RateLimiter)
26
- * - runWithRetry
27
- */
28
- cancel?: AbortSignal;
19
+ /**
20
+ * Abort signal used to cancel operation.
21
+ *
22
+ * @remarks Note that most of the layers do not use this signal yet. We need to change that over time.
23
+ * Please consult with API documentation / implementation.
24
+ * Note that number of layers may not check this signal while holding this request in a queue,
25
+ * so it may take a while it takes effect. This can be improved in the future.
26
+ *
27
+ * The layers in question are:
28
+ *
29
+ * - driver (RateLimiter)
30
+ *
31
+ * - runWithRetry
32
+ */
33
+ cancel?: AbortSignal;
29
34
 
30
- /**
31
- * Called whenever api returns cancellable error and the call is going to be retried.
32
- * Any exception thrown from this call back result in cancellation of operation
33
- * and propagation of thrown exception.
34
- * @param delayInMs - delay before next retry. This value will depend on internal back-off logic,
35
- * as well as information provided by service (like 429 error asking to wait for some time before retry)
36
- * @param error - error object returned from the call.
37
- */
38
- onRetry?(delayInMs: number, error: any): void;
35
+ /**
36
+ * Called whenever api returns cancellable error and the call is going to be retried.
37
+ * Any exception thrown from this call back result in cancellation of operation
38
+ * and propagation of thrown exception.
39
+ * @param delayInMs - delay before next retry. This value will depend on internal back-off logic,
40
+ * as well as information provided by service (like 429 error asking to wait for some time before retry)
41
+ * @param error - error object returned from the call.
42
+ */
43
+ onRetry?(delayInMs: number, error: any): void;
39
44
  }
40
45
 
46
+ /**
47
+ * @internal
48
+ */
41
49
  export async function runWithRetry<T>(
42
- api: (cancel?: AbortSignal) => Promise<T>,
43
- fetchCallName: string,
44
- logger: ITelemetryLogger,
45
- progress: IProgress,
50
+ api: (cancel?: AbortSignal) => Promise<T>,
51
+ fetchCallName: string,
52
+ logger: ITelemetryLoggerExt,
53
+ progress: IProgress,
46
54
  ): Promise<T> {
47
- let result: T | undefined;
48
- let success = false;
49
- let retryAfterMs = 1000; // has to be positive!
50
- let numRetries = 0;
51
- const startTime = performance.now();
52
- let lastError: any;
53
- do {
54
- try {
55
- result = await api(progress.cancel);
56
- success = true;
57
- } catch (err) {
58
- // If it is not retriable, then just throw the error.
59
- if (!canRetryOnError(err)) {
60
- logger.sendTelemetryEvent({
61
- eventName: `${fetchCallName}_cancel`,
62
- retry: numRetries,
63
- duration: performance.now() - startTime,
64
- fetchCallName,
65
- }, err);
66
- throw err;
67
- }
55
+ let result: T | undefined;
56
+ let success = false;
57
+ // We double this value in first try in when we calculate time to wait for in "calculateMaxWaitTime" function.
58
+ let retryAfterMs = 500; // has to be positive!
59
+ let numRetries = 0;
60
+ const startTime = performance.now();
61
+ let lastError: any;
62
+ do {
63
+ try {
64
+ result = await api(progress.cancel);
65
+ success = true;
66
+ } catch (err) {
67
+ // If it is not retriable, then just throw the error.
68
+ if (!canRetryOnError(err)) {
69
+ logger.sendTelemetryEvent(
70
+ {
71
+ eventName: `${fetchCallName}_cancel`,
72
+ retry: numRetries,
73
+ duration: performance.now() - startTime,
74
+ fetchCallName,
75
+ },
76
+ err,
77
+ );
78
+ throw err;
79
+ }
80
+
81
+ if (progress.cancel?.aborted === true) {
82
+ logger.sendTelemetryEvent(
83
+ {
84
+ eventName: `${fetchCallName}_runWithRetryAborted`,
85
+ retry: numRetries,
86
+ duration: performance.now() - startTime,
87
+ fetchCallName,
88
+ reason: progress.cancel.reason,
89
+ },
90
+ err,
91
+ );
92
+ throw new NonRetryableError(
93
+ "runWithRetry was Aborted",
94
+ DriverErrorTypes.genericError,
95
+ {
96
+ driverVersion: pkgVersion,
97
+ fetchCallName,
98
+ reason: progress.cancel.reason,
99
+ },
100
+ );
101
+ }
102
+
103
+ // logging the first failed retry instead of every attempt. We want to avoid filling telemetry
104
+ // when we have tight loop of retrying in offline mode, but we also want to know what caused
105
+ // the failure in the first place
106
+ if (numRetries === 0) {
107
+ logger.sendTelemetryEvent(
108
+ {
109
+ eventName: `${fetchCallName}_firstFailed`,
110
+ duration: performance.now() - startTime,
111
+ fetchCallName,
112
+ },
113
+ err,
114
+ );
115
+ }
68
116
 
69
- if (progress.cancel?.aborted === true) {
70
- logger.sendTelemetryEvent({
71
- eventName: `${fetchCallName}_runWithRetryAborted`,
72
- retry: numRetries,
73
- duration: performance.now() - startTime,
74
- fetchCallName,
75
- }, err);
76
- throw new NonRetryableError(
77
- "runWithRetry was Aborted",
78
- DriverErrorType.genericError,
79
- { driverVersion: pkgVersion, fetchCallName },
80
- );
81
- }
117
+ numRetries++;
118
+ lastError = err;
119
+ // Wait for the calculated time before retrying.
120
+ retryAfterMs = calculateMaxWaitTime(retryAfterMs, err);
121
+ if (progress.onRetry) {
122
+ progress.onRetry(retryAfterMs, err);
123
+ }
124
+ await delay(retryAfterMs);
125
+ }
126
+ } while (!success);
127
+ if (numRetries > 0) {
128
+ logger.sendTelemetryEvent(
129
+ {
130
+ eventName: `${fetchCallName}_lastError`,
131
+ retry: numRetries,
132
+ duration: performance.now() - startTime,
133
+ fetchCallName,
134
+ },
135
+ lastError,
136
+ );
137
+ }
138
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
139
+ return result!;
140
+ }
141
+
142
+ const MaxReconnectDelayInMsWhenEndpointIsReachable = 60000;
143
+ const MaxReconnectDelayInMsWhenEndpointIsNotReachable = 8000;
82
144
 
83
- numRetries++;
84
- lastError = err;
85
- // If the error is throttling error, then wait for the specified time before retrying.
86
- // If the waitTime is not specified, then we start with retrying immediately to max of 8s.
87
- retryAfterMs = getRetryDelayFromError(err) ?? Math.min(retryAfterMs * 2, 8000);
88
- if (progress.onRetry) {
89
- progress.onRetry(retryAfterMs, err);
90
- }
91
- await delay(retryAfterMs);
92
- }
93
- } while (!success);
94
- if (numRetries > 0) {
95
- logger.sendTelemetryEvent({
96
- eventName: `${fetchCallName}_lastError`,
97
- retry: numRetries,
98
- duration: performance.now() - startTime,
99
- fetchCallName,
100
- },
101
- lastError);
102
- }
103
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
104
- return result!;
145
+ /**
146
+ * Calculates time to wait for after an error based on the error and wait time for previous iteration.
147
+ * In case endpoint(service or socket) is not reachable, then we maybe offline or may have got some
148
+ * transient error not related to endpoint, in that case we want to try at faster pace and hence the
149
+ * max wait is lesser 8s as compared to when endpoint is reachable in which case it is 60s.
150
+ * @param delayMs - wait time for previous iteration
151
+ * @param error - error based on which we decide wait time.
152
+ * @returns Wait time to wait for.
153
+ * @internal
154
+ */
155
+ export function calculateMaxWaitTime(delayMs: number, error: unknown): number {
156
+ const retryDelayFromError = getRetryDelayFromError(error);
157
+ let newDelayMs = Math.max(retryDelayFromError ?? 0, delayMs * 2);
158
+ newDelayMs = Math.min(
159
+ delayMs,
160
+ isFluidError(error) && error.getTelemetryProperties().endpointReached === true
161
+ ? MaxReconnectDelayInMsWhenEndpointIsReachable
162
+ : MaxReconnectDelayInMsWhenEndpointIsNotReachable,
163
+ );
164
+ return newDelayMs;
105
165
  }
@@ -4,53 +4,72 @@
4
4
  */
5
5
 
6
6
  import {
7
- ISummaryTree,
8
- SummaryType,
9
- ISummaryBlob,
10
- ICommittedProposal,
11
- IDocumentAttributes,
7
+ ISummaryTree,
8
+ SummaryType,
9
+ ISummaryBlob,
10
+ ICommittedProposal,
11
+ IDocumentAttributes,
12
12
  } from "@fluidframework/protocol-definitions";
13
13
 
14
14
  /**
15
- * Combine the app summary and protocol summary in 1 tree.
16
- * @param appSummary - Summary of the app.
17
- * @param protocolSummary - Summary of the protocol.
15
+ * Defines the current layout of an .app + .protocol summary tree
16
+ * this is used internally for create new, and single commit summary
17
+ * @internal
18
18
  */
19
- export function combineAppAndProtocolSummary(
20
- appSummary: ISummaryTree,
21
- protocolSummary: ISummaryTree,
22
- ): ISummaryTree {
23
- const createNewSummary: ISummaryTree = {
24
- type: SummaryType.Tree,
25
- tree: {
26
- ".protocol": protocolSummary,
27
- ".app": appSummary,
28
- },
29
- };
30
- return createNewSummary;
19
+ export interface CombinedAppAndProtocolSummary extends ISummaryTree {
20
+ tree: {
21
+ [".app"]: ISummaryTree;
22
+ [".protocol"]: ISummaryTree;
23
+ };
24
+ }
25
+
26
+ /**
27
+ * Validates the current layout of an .app + .protocol summary tree
28
+ * this is used internally for create new, and single commit summary
29
+ * @internal
30
+ */
31
+ export function isCombinedAppAndProtocolSummary(
32
+ summary: ISummaryTree | undefined,
33
+ ...optionalRootTrees: string[]
34
+ ): summary is CombinedAppAndProtocolSummary {
35
+ if (
36
+ summary?.tree === undefined ||
37
+ summary.tree?.[".app"]?.type !== SummaryType.Tree ||
38
+ summary.tree?.[".protocol"]?.type !== SummaryType.Tree
39
+ ) {
40
+ return false;
41
+ }
42
+ const treeKeys = Object.keys(summary.tree).filter((t) => !optionalRootTrees.includes(t));
43
+ if (treeKeys.length !== 2) {
44
+ return false;
45
+ }
46
+ return true;
31
47
  }
32
48
 
33
49
  /**
34
50
  * Extract the attributes from the protocol summary.
35
51
  * @param protocolSummary - protocol summary from which the values are to be extracted.
52
+ * @internal
36
53
  */
37
54
  export function getDocAttributesFromProtocolSummary(
38
- protocolSummary: ISummaryTree,
55
+ protocolSummary: ISummaryTree,
39
56
  ): IDocumentAttributes {
40
- const attributesBlob = protocolSummary.tree.attributes as ISummaryBlob;
41
- const documentAttributes = JSON.parse(attributesBlob.content as string) as IDocumentAttributes;
42
- documentAttributes.term = documentAttributes.term ?? 1;
43
- return documentAttributes;
57
+ const attributesBlob = protocolSummary.tree.attributes as ISummaryBlob;
58
+ return JSON.parse(attributesBlob.content as string) as IDocumentAttributes;
44
59
  }
45
60
 
46
61
  /**
47
62
  * Extract quorum values from the protocol summary.
48
63
  * @param protocolSummary - protocol summary from which the values are to be extracted.
64
+ * @internal
49
65
  */
50
66
  export function getQuorumValuesFromProtocolSummary(
51
- protocolSummary: ISummaryTree,
67
+ protocolSummary: ISummaryTree,
52
68
  ): [string, ICommittedProposal][] {
53
- const quorumValuesBlob = protocolSummary.tree.quorumValues as ISummaryBlob;
54
- const quorumValues = JSON.parse(quorumValuesBlob.content as string) as [string, ICommittedProposal][];
55
- return quorumValues;
69
+ const quorumValuesBlob = protocolSummary.tree.quorumValues as ISummaryBlob;
70
+ const quorumValues = JSON.parse(quorumValuesBlob.content as string) as [
71
+ string,
72
+ ICommittedProposal,
73
+ ][];
74
+ return quorumValues;
56
75
  }