@fluidframework/driver-utils 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.225277

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 (392) 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-esm.json +4 -0
  6. package/api-extractor-lint.json +4 -0
  7. package/api-extractor.json +2 -2
  8. package/api-report/driver-utils.api.md +401 -0
  9. package/dist/adapters/compression/compressionTypes.cjs +20 -0
  10. package/dist/adapters/compression/compressionTypes.cjs.map +1 -0
  11. package/dist/adapters/compression/compressionTypes.d.ts +23 -0
  12. package/dist/adapters/compression/compressionTypes.d.ts.map +1 -0
  13. package/dist/adapters/compression/documentServiceCompressionAdapter.cjs +23 -0
  14. package/dist/adapters/compression/documentServiceCompressionAdapter.cjs.map +1 -0
  15. package/dist/adapters/compression/documentServiceCompressionAdapter.d.ts +13 -0
  16. package/dist/adapters/compression/documentServiceCompressionAdapter.d.ts.map +1 -0
  17. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.cjs +31 -0
  18. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.cjs.map +1 -0
  19. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.d.ts +16 -0
  20. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.d.ts.map +1 -0
  21. package/dist/adapters/compression/index.cjs +15 -0
  22. package/dist/adapters/compression/index.cjs.map +1 -0
  23. package/dist/adapters/compression/index.d.ts +8 -0
  24. package/dist/adapters/compression/index.d.ts.map +1 -0
  25. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.cjs +370 -0
  26. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.cjs.map +1 -0
  27. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.ts +165 -0
  28. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.ts.map +1 -0
  29. package/dist/adapters/compression/summaryblob/index.cjs +11 -0
  30. package/dist/adapters/compression/summaryblob/index.cjs.map +1 -0
  31. package/dist/adapters/compression/summaryblob/index.d.ts +6 -0
  32. package/dist/adapters/compression/summaryblob/index.d.ts.map +1 -0
  33. package/dist/adapters/index.cjs +14 -0
  34. package/dist/adapters/index.cjs.map +1 -0
  35. package/dist/adapters/index.d.ts +7 -0
  36. package/dist/adapters/index.d.ts.map +1 -0
  37. package/dist/adapters/predefinedAdapters.cjs +52 -0
  38. package/dist/adapters/predefinedAdapters.cjs.map +1 -0
  39. package/dist/adapters/predefinedAdapters.d.ts +21 -0
  40. package/dist/adapters/predefinedAdapters.d.ts.map +1 -0
  41. package/dist/blob.cjs +65 -0
  42. package/dist/blob.cjs.map +1 -0
  43. package/dist/blob.d.ts +56 -0
  44. package/dist/blob.d.ts.map +1 -0
  45. package/dist/{buildSnapshotTree.js → buildSnapshotTree.cjs} +7 -5
  46. package/dist/buildSnapshotTree.cjs.map +1 -0
  47. package/dist/buildSnapshotTree.d.ts +1 -0
  48. package/dist/buildSnapshotTree.d.ts.map +1 -1
  49. package/dist/documentServiceFactoryProxy.cjs +27 -0
  50. package/dist/documentServiceFactoryProxy.cjs.map +1 -0
  51. package/dist/documentServiceFactoryProxy.d.ts +19 -0
  52. package/dist/documentServiceFactoryProxy.d.ts.map +1 -0
  53. package/dist/documentServiceProxy.cjs +36 -0
  54. package/dist/documentServiceProxy.cjs.map +1 -0
  55. package/dist/documentServiceProxy.d.ts +21 -0
  56. package/dist/documentServiceProxy.d.ts.map +1 -0
  57. package/dist/{documentStorageServiceProxy.js → documentStorageServiceProxy.cjs} +10 -8
  58. package/dist/documentStorageServiceProxy.cjs.map +1 -0
  59. package/dist/documentStorageServiceProxy.d.ts +5 -2
  60. package/dist/documentStorageServiceProxy.d.ts.map +1 -1
  61. package/dist/driver-utils-alpha.d.ts +163 -0
  62. package/dist/driver-utils-beta.d.ts +178 -0
  63. package/dist/driver-utils-public.d.ts +178 -0
  64. package/dist/driver-utils-untrimmed.d.ts +590 -0
  65. package/dist/{error.js → error.cjs} +10 -3
  66. package/dist/error.cjs.map +1 -0
  67. package/dist/error.d.ts +8 -3
  68. package/dist/error.d.ts.map +1 -1
  69. package/dist/index.cjs +69 -0
  70. package/dist/index.cjs.map +1 -0
  71. package/dist/index.d.ts +16 -21
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/{insecureUrlResolver.js → insecureUrlResolver.cjs} +10 -11
  74. package/dist/insecureUrlResolver.cjs.map +1 -0
  75. package/dist/insecureUrlResolver.d.ts +1 -0
  76. package/dist/insecureUrlResolver.d.ts.map +1 -1
  77. package/dist/messageRecognition.cjs +38 -0
  78. package/dist/messageRecognition.cjs.map +1 -0
  79. package/dist/messageRecognition.d.ts +16 -26
  80. package/dist/messageRecognition.d.ts.map +1 -1
  81. package/dist/{network.js → network.cjs} +86 -24
  82. package/dist/network.cjs.map +1 -0
  83. package/dist/network.d.ts +69 -20
  84. package/dist/network.d.ts.map +1 -1
  85. package/dist/networkUtils.cjs +29 -0
  86. package/dist/networkUtils.cjs.map +1 -0
  87. package/dist/networkUtils.d.ts +4 -10
  88. package/dist/networkUtils.d.ts.map +1 -1
  89. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  90. package/dist/packageVersion.cjs.map +1 -0
  91. package/dist/packageVersion.d.ts +1 -1
  92. package/dist/packageVersion.d.ts.map +1 -1
  93. package/dist/{parallelRequests.js → parallelRequests.cjs} +146 -74
  94. package/dist/parallelRequests.cjs.map +1 -0
  95. package/dist/parallelRequests.d.ts +19 -6
  96. package/dist/parallelRequests.d.ts.map +1 -1
  97. package/dist/{prefetchDocumentStorageService.js → prefetchDocumentStorageService.cjs} +7 -4
  98. package/dist/prefetchDocumentStorageService.cjs.map +1 -0
  99. package/dist/prefetchDocumentStorageService.d.ts +4 -2
  100. package/dist/prefetchDocumentStorageService.d.ts.map +1 -1
  101. package/dist/{rateLimiter.js → rateLimiter.cjs} +6 -3
  102. package/dist/rateLimiter.cjs.map +1 -0
  103. package/dist/rateLimiter.d.ts +3 -0
  104. package/dist/rateLimiter.d.ts.map +1 -1
  105. package/dist/readAndParse.cjs +28 -0
  106. package/dist/readAndParse.cjs.map +1 -0
  107. package/dist/readAndParse.d.ts +10 -4
  108. package/dist/readAndParse.d.ts.map +1 -1
  109. package/dist/runWithRetry.cjs +108 -0
  110. package/dist/runWithRetry.cjs.map +1 -0
  111. package/dist/runWithRetry.d.ts +26 -7
  112. package/dist/runWithRetry.d.ts.map +1 -1
  113. package/dist/{summaryForCreateNew.js → summaryForCreateNew.cjs} +20 -19
  114. package/dist/summaryForCreateNew.cjs.map +1 -0
  115. package/dist/summaryForCreateNew.d.ts +17 -4
  116. package/dist/summaryForCreateNew.d.ts.map +1 -1
  117. package/dist/{treeConversions.js → treeConversions.cjs} +16 -18
  118. package/dist/treeConversions.cjs.map +1 -0
  119. package/dist/treeConversions.d.ts +1 -0
  120. package/dist/treeConversions.d.ts.map +1 -1
  121. package/dist/tsdoc-metadata.json +11 -0
  122. package/lib/adapters/compression/compressionTypes.d.mts +23 -0
  123. package/lib/adapters/compression/compressionTypes.d.mts.map +1 -0
  124. package/lib/adapters/compression/compressionTypes.mjs +17 -0
  125. package/lib/adapters/compression/compressionTypes.mjs.map +1 -0
  126. package/lib/adapters/compression/documentServiceCompressionAdapter.d.mts +13 -0
  127. package/lib/adapters/compression/documentServiceCompressionAdapter.d.mts.map +1 -0
  128. package/lib/adapters/compression/documentServiceCompressionAdapter.mjs +19 -0
  129. package/lib/adapters/compression/documentServiceCompressionAdapter.mjs.map +1 -0
  130. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.d.mts +16 -0
  131. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.d.mts.map +1 -0
  132. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.mjs +27 -0
  133. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.mjs.map +1 -0
  134. package/lib/adapters/compression/index.d.mts +8 -0
  135. package/lib/adapters/compression/index.d.mts.map +1 -0
  136. package/lib/adapters/compression/index.mjs +8 -0
  137. package/lib/adapters/compression/index.mjs.map +1 -0
  138. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.mts +165 -0
  139. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.mts.map +1 -0
  140. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.mjs +366 -0
  141. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.mjs.map +1 -0
  142. package/lib/adapters/compression/summaryblob/index.d.mts +6 -0
  143. package/lib/adapters/compression/summaryblob/index.d.mts.map +1 -0
  144. package/lib/adapters/compression/summaryblob/index.mjs +6 -0
  145. package/lib/adapters/compression/summaryblob/index.mjs.map +1 -0
  146. package/lib/adapters/index.d.mts +7 -0
  147. package/lib/adapters/index.d.mts.map +1 -0
  148. package/lib/adapters/index.mjs +7 -0
  149. package/lib/adapters/index.mjs.map +1 -0
  150. package/lib/adapters/predefinedAdapters.d.mts +21 -0
  151. package/lib/adapters/predefinedAdapters.d.mts.map +1 -0
  152. package/lib/adapters/predefinedAdapters.mjs +47 -0
  153. package/lib/adapters/predefinedAdapters.mjs.map +1 -0
  154. package/lib/blob.d.mts +56 -0
  155. package/lib/blob.d.mts.map +1 -0
  156. package/lib/blob.mjs +59 -0
  157. package/lib/blob.mjs.map +1 -0
  158. package/lib/{buildSnapshotTree.d.ts → buildSnapshotTree.d.mts} +2 -1
  159. package/lib/buildSnapshotTree.d.mts.map +1 -0
  160. package/lib/{buildSnapshotTree.js → buildSnapshotTree.mjs} +6 -4
  161. package/lib/buildSnapshotTree.mjs.map +1 -0
  162. package/lib/documentServiceFactoryProxy.d.mts +19 -0
  163. package/lib/documentServiceFactoryProxy.d.mts.map +1 -0
  164. package/lib/documentServiceFactoryProxy.mjs +23 -0
  165. package/lib/documentServiceFactoryProxy.mjs.map +1 -0
  166. package/lib/documentServiceProxy.d.mts +21 -0
  167. package/lib/documentServiceProxy.d.mts.map +1 -0
  168. package/lib/documentServiceProxy.mjs +32 -0
  169. package/lib/documentServiceProxy.mjs.map +1 -0
  170. package/lib/{documentStorageServiceProxy.d.ts → documentStorageServiceProxy.d.mts} +6 -3
  171. package/lib/documentStorageServiceProxy.d.mts.map +1 -0
  172. package/lib/{documentStorageServiceProxy.js → documentStorageServiceProxy.mjs} +10 -8
  173. package/lib/documentStorageServiceProxy.mjs.map +1 -0
  174. package/lib/driver-utils-alpha.d.mts +163 -0
  175. package/lib/driver-utils-beta.d.mts +178 -0
  176. package/lib/driver-utils-public.d.mts +178 -0
  177. package/lib/driver-utils-untrimmed.d.mts +590 -0
  178. package/lib/error.d.mts +16 -0
  179. package/lib/error.d.mts.map +1 -0
  180. package/lib/error.mjs +19 -0
  181. package/lib/error.mjs.map +1 -0
  182. package/lib/index.d.mts +21 -0
  183. package/lib/index.d.mts.map +1 -0
  184. package/lib/index.mjs +21 -0
  185. package/lib/index.mjs.map +1 -0
  186. package/lib/{insecureUrlResolver.d.ts → insecureUrlResolver.d.mts} +2 -1
  187. package/lib/insecureUrlResolver.d.mts.map +1 -0
  188. package/lib/{insecureUrlResolver.js → insecureUrlResolver.mjs} +10 -11
  189. package/lib/insecureUrlResolver.mjs.map +1 -0
  190. package/lib/messageRecognition.d.mts +24 -0
  191. package/lib/messageRecognition.d.mts.map +1 -0
  192. package/lib/messageRecognition.mjs +29 -0
  193. package/lib/messageRecognition.mjs.map +1 -0
  194. package/lib/{network.d.ts → network.d.mts} +70 -21
  195. package/lib/network.d.mts.map +1 -0
  196. package/lib/{network.js → network.mjs} +85 -23
  197. package/lib/network.mjs.map +1 -0
  198. package/lib/networkUtils.d.mts +11 -0
  199. package/lib/networkUtils.d.mts.map +1 -0
  200. package/lib/networkUtils.mjs +25 -0
  201. package/lib/networkUtils.mjs.map +1 -0
  202. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +2 -2
  203. package/lib/packageVersion.d.mts.map +1 -0
  204. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  205. package/lib/packageVersion.mjs.map +1 -0
  206. package/lib/{parallelRequests.d.ts → parallelRequests.d.mts} +20 -7
  207. package/lib/parallelRequests.d.mts.map +1 -0
  208. package/lib/{parallelRequests.js → parallelRequests.mjs} +119 -52
  209. package/lib/parallelRequests.mjs.map +1 -0
  210. package/lib/{prefetchDocumentStorageService.d.ts → prefetchDocumentStorageService.d.mts} +6 -8
  211. package/lib/prefetchDocumentStorageService.d.mts.map +1 -0
  212. package/lib/{prefetchDocumentStorageService.js → prefetchDocumentStorageService.mjs} +7 -8
  213. package/lib/prefetchDocumentStorageService.mjs.map +1 -0
  214. package/lib/{rateLimiter.d.ts → rateLimiter.d.mts} +4 -1
  215. package/lib/rateLimiter.d.mts.map +1 -0
  216. package/lib/{rateLimiter.js → rateLimiter.mjs} +5 -2
  217. package/lib/rateLimiter.mjs.map +1 -0
  218. package/lib/readAndParse.d.mts +20 -0
  219. package/lib/readAndParse.d.mts.map +1 -0
  220. package/lib/readAndParse.mjs +24 -0
  221. package/lib/readAndParse.mjs.map +1 -0
  222. package/lib/{runWithRetry.d.ts → runWithRetry.d.mts} +27 -8
  223. package/lib/runWithRetry.d.mts.map +1 -0
  224. package/lib/runWithRetry.mjs +103 -0
  225. package/lib/runWithRetry.mjs.map +1 -0
  226. package/lib/{summaryForCreateNew.d.ts → summaryForCreateNew.d.mts} +18 -5
  227. package/lib/summaryForCreateNew.d.mts.map +1 -0
  228. package/lib/{summaryForCreateNew.js → summaryForCreateNew.mjs} +18 -17
  229. package/lib/summaryForCreateNew.mjs.map +1 -0
  230. package/lib/{treeConversions.d.ts → treeConversions.d.mts} +2 -1
  231. package/lib/treeConversions.d.mts.map +1 -0
  232. package/lib/{treeConversions.js → treeConversions.mjs} +12 -14
  233. package/lib/treeConversions.mjs.map +1 -0
  234. package/package.json +86 -64
  235. package/prettier.config.cjs +8 -0
  236. package/src/adapters/compression/compressionTypes.ts +25 -0
  237. package/src/adapters/compression/documentServiceCompressionAdapter.ts +28 -0
  238. package/src/adapters/compression/documentServiceFactoryCompressionAdapter.ts +54 -0
  239. package/src/adapters/compression/index.ts +12 -0
  240. package/src/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.ts +451 -0
  241. package/src/adapters/compression/summaryblob/index.ts +9 -0
  242. package/src/adapters/index.ts +13 -0
  243. package/src/adapters/predefinedAdapters.ts +74 -0
  244. package/src/blob.ts +77 -0
  245. package/src/buildSnapshotTree.ts +58 -53
  246. package/src/documentServiceFactoryProxy.ts +47 -0
  247. package/src/documentServiceProxy.ts +46 -0
  248. package/src/documentStorageServiceProxy.ts +52 -37
  249. package/src/error.ts +13 -8
  250. package/src/index.ts +51 -21
  251. package/src/insecureUrlResolver.ts +125 -120
  252. package/src/messageRecognition.ts +24 -53
  253. package/src/network.ts +189 -111
  254. package/src/networkUtils.ts +24 -49
  255. package/src/packageVersion.ts +1 -1
  256. package/src/parallelRequests.ts +630 -519
  257. package/src/prefetchDocumentStorageService.ts +79 -74
  258. package/src/rateLimiter.ts +33 -30
  259. package/src/readAndParse.ts +18 -9
  260. package/src/runWithRetry.ts +145 -85
  261. package/src/summaryForCreateNew.ts +48 -29
  262. package/src/treeConversions.ts +49 -70
  263. package/tsc-multi.test.json +4 -0
  264. package/tsconfig.json +10 -12
  265. package/dist/blobAggregationStorage.d.ts +0 -43
  266. package/dist/blobAggregationStorage.d.ts.map +0 -1
  267. package/dist/blobAggregationStorage.js +0 -318
  268. package/dist/blobAggregationStorage.js.map +0 -1
  269. package/dist/blobCacheStorageService.d.ts +0 -16
  270. package/dist/blobCacheStorageService.d.ts.map +0 -1
  271. package/dist/blobCacheStorageService.js +0 -29
  272. package/dist/blobCacheStorageService.js.map +0 -1
  273. package/dist/buildSnapshotTree.js.map +0 -1
  274. package/dist/documentStorageServiceProxy.js.map +0 -1
  275. package/dist/emptyDocumentDeltaStorageService.d.ts +0 -13
  276. package/dist/emptyDocumentDeltaStorageService.d.ts.map +0 -1
  277. package/dist/emptyDocumentDeltaStorageService.js +0 -20
  278. package/dist/emptyDocumentDeltaStorageService.js.map +0 -1
  279. package/dist/error.js.map +0 -1
  280. package/dist/fluidResolvedUrl.d.ts +0 -8
  281. package/dist/fluidResolvedUrl.d.ts.map +0 -1
  282. package/dist/fluidResolvedUrl.js +0 -16
  283. package/dist/fluidResolvedUrl.js.map +0 -1
  284. package/dist/index.js +0 -38
  285. package/dist/index.js.map +0 -1
  286. package/dist/insecureUrlResolver.js.map +0 -1
  287. package/dist/messageRecognition.js +0 -73
  288. package/dist/messageRecognition.js.map +0 -1
  289. package/dist/multiDocumentServiceFactory.d.ts +0 -16
  290. package/dist/multiDocumentServiceFactory.d.ts.map +0 -1
  291. package/dist/multiDocumentServiceFactory.js +0 -63
  292. package/dist/multiDocumentServiceFactory.js.map +0 -1
  293. package/dist/multiUrlResolver.d.ts +0 -20
  294. package/dist/multiUrlResolver.d.ts.map +0 -1
  295. package/dist/multiUrlResolver.js +0 -45
  296. package/dist/multiUrlResolver.js.map +0 -1
  297. package/dist/network.js.map +0 -1
  298. package/dist/networkUtils.js +0 -59
  299. package/dist/networkUtils.js.map +0 -1
  300. package/dist/packageVersion.js.map +0 -1
  301. package/dist/parallelRequests.js.map +0 -1
  302. package/dist/prefetchDocumentStorageService.js.map +0 -1
  303. package/dist/rateLimiter.js.map +0 -1
  304. package/dist/readAndParse.js +0 -22
  305. package/dist/readAndParse.js.map +0 -1
  306. package/dist/runWithRetry.js +0 -69
  307. package/dist/runWithRetry.js.map +0 -1
  308. package/dist/summaryForCreateNew.js.map +0 -1
  309. package/dist/treeConversions.js.map +0 -1
  310. package/dist/treeUtils.d.ts +0 -51
  311. package/dist/treeUtils.d.ts.map +0 -1
  312. package/dist/treeUtils.js +0 -85
  313. package/dist/treeUtils.js.map +0 -1
  314. package/lib/blobAggregationStorage.d.ts +0 -43
  315. package/lib/blobAggregationStorage.d.ts.map +0 -1
  316. package/lib/blobAggregationStorage.js +0 -313
  317. package/lib/blobAggregationStorage.js.map +0 -1
  318. package/lib/blobCacheStorageService.d.ts +0 -16
  319. package/lib/blobCacheStorageService.d.ts.map +0 -1
  320. package/lib/blobCacheStorageService.js +0 -25
  321. package/lib/blobCacheStorageService.js.map +0 -1
  322. package/lib/buildSnapshotTree.d.ts.map +0 -1
  323. package/lib/buildSnapshotTree.js.map +0 -1
  324. package/lib/documentStorageServiceProxy.d.ts.map +0 -1
  325. package/lib/documentStorageServiceProxy.js.map +0 -1
  326. package/lib/emptyDocumentDeltaStorageService.d.ts +0 -13
  327. package/lib/emptyDocumentDeltaStorageService.d.ts.map +0 -1
  328. package/lib/emptyDocumentDeltaStorageService.js +0 -16
  329. package/lib/emptyDocumentDeltaStorageService.js.map +0 -1
  330. package/lib/error.d.ts +0 -11
  331. package/lib/error.d.ts.map +0 -1
  332. package/lib/error.js +0 -13
  333. package/lib/error.js.map +0 -1
  334. package/lib/fluidResolvedUrl.d.ts +0 -8
  335. package/lib/fluidResolvedUrl.d.ts.map +0 -1
  336. package/lib/fluidResolvedUrl.js +0 -11
  337. package/lib/fluidResolvedUrl.js.map +0 -1
  338. package/lib/index.d.ts +0 -26
  339. package/lib/index.d.ts.map +0 -1
  340. package/lib/index.js +0 -26
  341. package/lib/index.js.map +0 -1
  342. package/lib/insecureUrlResolver.d.ts.map +0 -1
  343. package/lib/insecureUrlResolver.js.map +0 -1
  344. package/lib/messageRecognition.d.ts +0 -38
  345. package/lib/messageRecognition.d.ts.map +0 -1
  346. package/lib/messageRecognition.js +0 -67
  347. package/lib/messageRecognition.js.map +0 -1
  348. package/lib/multiDocumentServiceFactory.d.ts +0 -16
  349. package/lib/multiDocumentServiceFactory.d.ts.map +0 -1
  350. package/lib/multiDocumentServiceFactory.js +0 -59
  351. package/lib/multiDocumentServiceFactory.js.map +0 -1
  352. package/lib/multiUrlResolver.d.ts +0 -20
  353. package/lib/multiUrlResolver.d.ts.map +0 -1
  354. package/lib/multiUrlResolver.js +0 -40
  355. package/lib/multiUrlResolver.js.map +0 -1
  356. package/lib/network.d.ts.map +0 -1
  357. package/lib/network.js.map +0 -1
  358. package/lib/networkUtils.d.ts +0 -17
  359. package/lib/networkUtils.d.ts.map +0 -1
  360. package/lib/networkUtils.js +0 -54
  361. package/lib/networkUtils.js.map +0 -1
  362. package/lib/packageVersion.d.ts.map +0 -1
  363. package/lib/packageVersion.js.map +0 -1
  364. package/lib/parallelRequests.d.ts.map +0 -1
  365. package/lib/parallelRequests.js.map +0 -1
  366. package/lib/prefetchDocumentStorageService.d.ts.map +0 -1
  367. package/lib/prefetchDocumentStorageService.js.map +0 -1
  368. package/lib/rateLimiter.d.ts.map +0 -1
  369. package/lib/rateLimiter.js.map +0 -1
  370. package/lib/readAndParse.d.ts +0 -14
  371. package/lib/readAndParse.d.ts.map +0 -1
  372. package/lib/readAndParse.js +0 -18
  373. package/lib/readAndParse.js.map +0 -1
  374. package/lib/runWithRetry.d.ts.map +0 -1
  375. package/lib/runWithRetry.js +0 -65
  376. package/lib/runWithRetry.js.map +0 -1
  377. package/lib/summaryForCreateNew.d.ts.map +0 -1
  378. package/lib/summaryForCreateNew.js.map +0 -1
  379. package/lib/treeConversions.d.ts.map +0 -1
  380. package/lib/treeConversions.js.map +0 -1
  381. package/lib/treeUtils.d.ts +0 -51
  382. package/lib/treeUtils.d.ts.map +0 -1
  383. package/lib/treeUtils.js +0 -80
  384. package/lib/treeUtils.js.map +0 -1
  385. package/src/blobAggregationStorage.ts +0 -374
  386. package/src/blobCacheStorageService.ts +0 -32
  387. package/src/emptyDocumentDeltaStorageService.ts +0 -24
  388. package/src/fluidResolvedUrl.ts +0 -15
  389. package/src/multiDocumentServiceFactory.ts +0 -80
  390. package/src/multiUrlResolver.ts +0 -51
  391. package/src/treeUtils.ts +0 -111
  392. package/tsconfig.esnext.json +0 -7
@@ -5,27 +5,36 @@ exports.streamObserver = exports.streamFromMessages = exports.emptyMessageStream
5
5
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
6
6
  * Licensed under the MIT License.
7
7
  */
8
- const common_utils_1 = require("@fluidframework/common-utils");
8
+ const client_utils_1 = require("@fluid-internal/client-utils");
9
+ const core_utils_1 = require("@fluidframework/core-utils");
9
10
  const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
10
- const network_1 = require("./network");
11
- const networkUtils_1 = require("./networkUtils");
11
+ const network_1 = require("./network.cjs");
12
+ const networkUtils_1 = require("./networkUtils.cjs");
12
13
  // For now, this package is versioned and released in unison with the specific drivers
13
- const packageVersion_1 = require("./packageVersion");
14
- const MaxFetchDelayInMs = 10000;
15
- const MissingFetchDelayInMs = 100;
14
+ const packageVersion_1 = require("./packageVersion.cjs");
15
+ const runWithRetry_1 = require("./runWithRetry.cjs");
16
+ // We double this value in first try in when we calculate time to wait for in "calculateMaxWaitTime" function.
17
+ const MissingFetchDelayInMs = 50;
16
18
  /**
17
19
  * Helper class to organize parallel fetching of data
18
20
  * It can be used to concurrently do many requests, while consuming
19
21
  * data in the right order. Take a look at UT for examples.
20
22
  * @param concurrency - level of concurrency
21
23
  * @param from - starting point of fetching data (inclusive)
22
- * @param to - ending point of fetching data. exclusive, or undefined if unknown
24
+ * @param to - ending point of fetching data. exclusive, or undefined if unknown
23
25
  * @param payloadSize - batch size
24
26
  * @param logger - logger to use
25
27
  * @param requestCallback - callback to request batches
26
- * @returns - Queue that can be used to retrieve data
28
+ * @returns Queue that can be used to retrieve data
29
+ * @internal
27
30
  */
28
31
  class ParallelRequests {
32
+ get working() {
33
+ return this.workingState === "working";
34
+ }
35
+ get canceled() {
36
+ return this.workingState === "canceled";
37
+ }
29
38
  constructor(from, to, payloadSize, logger, requestCallback, responseCallback) {
30
39
  this.to = to;
31
40
  this.payloadSize = payloadSize;
@@ -35,14 +44,12 @@ class ParallelRequests {
35
44
  this.results = new Map();
36
45
  this.workingState = "working";
37
46
  this.requestsInFlight = 0;
38
- this.endEvent = new common_utils_1.Deferred();
47
+ this.endEvent = new core_utils_1.Deferred();
39
48
  this.requests = 0;
40
49
  this.latestRequested = from;
41
50
  this.nextToDeliver = from;
42
- this.knewTo = (to !== undefined);
51
+ this.knewTo = to !== undefined;
43
52
  }
44
- get working() { return this.workingState === "working"; }
45
- get canceled() { return this.workingState === "canceled"; }
46
53
  cancel() {
47
54
  if (this.working) {
48
55
  this.workingState = "canceled";
@@ -50,8 +57,8 @@ class ParallelRequests {
50
57
  }
51
58
  }
52
59
  async run(concurrency) {
53
- (0, common_utils_1.assert)(concurrency > 0, 0x102 /* "invalid level of concurrency" */);
54
- (0, common_utils_1.assert)(this.working, 0x103 /* "trying to parallel run while not working" */);
60
+ (0, core_utils_1.assert)(concurrency > 0, 0x102 /* "invalid level of concurrency" */);
61
+ (0, core_utils_1.assert)(this.working, 0x103 /* "trying to parallel run while not working" */);
55
62
  let c = concurrency;
56
63
  while (c > 0) {
57
64
  c--;
@@ -62,8 +69,8 @@ class ParallelRequests {
62
69
  }
63
70
  done() {
64
71
  // We should satisfy request fully.
65
- (0, common_utils_1.assert)(this.to !== undefined, 0x104 /* "undefined end point for parallel fetch" */);
66
- (0, common_utils_1.assert)(this.nextToDeliver >= this.to, 0x105 /* "unexpected end point for parallel fetch" */);
72
+ (0, core_utils_1.assert)(this.to !== undefined, 0x104 /* "undefined end point for parallel fetch" */);
73
+ (0, core_utils_1.assert)(this.nextToDeliver >= this.to, 0x105 /* "unexpected end point for parallel fetch" */);
67
74
  if (this.working) {
68
75
  this.workingState = "done";
69
76
  this.endEvent.resolve();
@@ -82,7 +89,7 @@ class ParallelRequests {
82
89
  break;
83
90
  }
84
91
  this.results.delete(this.nextToDeliver);
85
- (0, common_utils_1.assert)(value.length <= this.payloadSize, 0x1d9 /* "addRequestCore() should break into smaller chunks" */);
92
+ (0, core_utils_1.assert)(value.length <= this.payloadSize, 0x1d9 /* "addRequestCore() should break into smaller chunks" */);
86
93
  this.nextToDeliver += value.length;
87
94
  this.responseCallback(value);
88
95
  }
@@ -91,13 +98,13 @@ class ParallelRequests {
91
98
  if (this.requestsInFlight === 0) {
92
99
  // we should have dispatched everything, no matter whether we knew about the end or not.
93
100
  // see comment in addRequestCore() around throwing away chunk if it's above this.to
94
- (0, common_utils_1.assert)(this.results.size === 0, 0x107 /* "ending dispatch with remaining results to be sent" */);
101
+ (0, core_utils_1.assert)(this.results.size === 0, 0x107 /* "ending dispatch with remaining results to be sent" */);
95
102
  this.done();
96
103
  }
97
104
  else if (this.to !== undefined && this.nextToDeliver >= this.to) {
98
105
  // Learned about the end and dispatched all the ops up to it.
99
106
  // Ignore all the in-flight requests above boundary - unblock caller sooner.
100
- (0, common_utils_1.assert)(!this.knewTo, 0x108 /* "ending results dispatch but knew in advance about more requests" */);
107
+ (0, core_utils_1.assert)(!this.knewTo, 0x108 /* "ending results dispatch but knew in advance about more requests" */);
101
108
  this.done();
102
109
  }
103
110
  }
@@ -118,7 +125,7 @@ class ParallelRequests {
118
125
  if (this.to !== undefined) {
119
126
  this.latestRequested = Math.min(this.to, this.latestRequested);
120
127
  }
121
- (0, common_utils_1.assert)(from < this.latestRequested, 0x109 /* "unexpected next chunk position" */);
128
+ (0, core_utils_1.assert)(from < this.latestRequested, 0x109 /* "unexpected next chunk position" */);
122
129
  return { from, to: this.latestRequested };
123
130
  }
124
131
  addRequest() {
@@ -129,18 +136,18 @@ class ParallelRequests {
129
136
  this.addRequestCore(chunk.from, chunk.to).catch(this.fail.bind(this));
130
137
  }
131
138
  async addRequestCore(fromArg, toArg) {
132
- (0, common_utils_1.assert)(this.working, 0x10a /* "cannot add parallel request while not working" */);
139
+ (0, core_utils_1.assert)(this.working, 0x10a /* "cannot add parallel request while not working" */);
133
140
  let from = fromArg;
134
141
  let to = toArg;
135
142
  // to & from are exclusive
136
143
  this.requestsInFlight++;
137
144
  while (this.working) {
138
145
  const requestedLength = to - from;
139
- (0, common_utils_1.assert)(requestedLength > 0, 0x10b /* "invalid parallel request range" */);
146
+ (0, core_utils_1.assert)(requestedLength > 0, 0x10b /* "invalid parallel request range" */);
140
147
  // We should not be wasting time asking for something useless.
141
148
  if (this.to !== undefined) {
142
- (0, common_utils_1.assert)(from < this.to, 0x10c /* "invalid parallel request start point" */);
143
- (0, common_utils_1.assert)(to <= this.to, 0x10d /* "invalid parallel request end point" */);
149
+ (0, core_utils_1.assert)(from < this.to, 0x10c /* "invalid parallel request start point" */);
150
+ (0, core_utils_1.assert)(to <= this.to, 0x10d /* "invalid parallel request end point" */);
144
151
  }
145
152
  this.requests++;
146
153
  const promise = this.requestCallback(this.requests, from, to, this.to !== undefined, {});
@@ -157,7 +164,7 @@ class ParallelRequests {
157
164
  // While it's useful not to throw this result, this is very corner cases and makes logic
158
165
  // (including consistency checks) much harder to write correctly.
159
166
  // So for now, we are throwing this result out the window.
160
- (0, common_utils_1.assert)(!this.knewTo, 0x10e /* "should not throw result if we knew about boundary in advance" */);
167
+ (0, core_utils_1.assert)(!this.knewTo, 0x10e /* "should not throw result if we knew about boundary in advance" */);
161
168
  // Learn how often it happens and if it's too wasteful to throw these chunks.
162
169
  // If it pops into our view a lot, we would need to reconsider how we approach it.
163
170
  // Note that this is not visible to user other than potentially not hitting 100% of
@@ -176,7 +183,7 @@ class ParallelRequests {
176
183
  if (this.working) {
177
184
  const fromOrig = from;
178
185
  const length = payload.length;
179
- let fullChunk = (requestedLength <= length); // we can possible get more than we asked.
186
+ let fullChunk = requestedLength <= length; // we can possible get more than we asked.
180
187
  if (length !== 0) {
181
188
  // We can get more than we asked for!
182
189
  // This can screw up logic in dispatch!
@@ -207,8 +214,8 @@ class ParallelRequests {
207
214
  // This is very specific property of storage / ops, so this logic is not here, but given only
208
215
  // one user of this class, we assert that to catch issues earlier.
209
216
  // These invariant can be relaxed if needed.
210
- (0, common_utils_1.assert)(!partial, 0x10f /* "empty/partial chunks should not be returned by caching" */);
211
- (0, common_utils_1.assert)(!this.knewTo, 0x110 /* "callback should retry until valid fetch before it learns new boundary" */);
217
+ (0, core_utils_1.assert)(!partial, 0x10f /* "empty/partial chunks should not be returned by caching" */);
218
+ (0, core_utils_1.assert)(!this.knewTo, 0x110 /* "callback should retry until valid fetch before it learns new boundary" */);
212
219
  }
213
220
  if (!partial && !fullChunk) {
214
221
  if (!this.knewTo) {
@@ -234,9 +241,10 @@ class ParallelRequests {
234
241
  if (to === this.latestRequested) {
235
242
  // we can go after full chunk at the end if we received partial chunk, or more than asked
236
243
  // Also if we got more than we asked to, we can actually use those ops!
237
- if (payload.length !== 0) {
238
- this.results.set(from, payload);
239
- from += payload.length;
244
+ while (payload.length !== 0) {
245
+ const data = payload.splice(0, requestedLength);
246
+ this.results.set(from, data);
247
+ from += data.length;
240
248
  }
241
249
  this.latestRequested = from;
242
250
  fullChunk = true;
@@ -259,6 +267,7 @@ exports.ParallelRequests = ParallelRequests;
259
267
  /**
260
268
  * Helper queue class to allow async push / pull
261
269
  * It's essentially a pipe allowing multiple writers, and single reader
270
+ * @internal
262
271
  */
263
272
  class Queue {
264
273
  constructor() {
@@ -277,9 +286,9 @@ class Queue {
277
286
  this.done = true;
278
287
  }
279
288
  pushCore(value) {
280
- (0, common_utils_1.assert)(!this.done, 0x112 /* "cannot push onto queue if done" */);
289
+ (0, core_utils_1.assert)(!this.done, 0x112 /* "cannot push onto queue if done" */);
281
290
  if (this.deferred) {
282
- (0, common_utils_1.assert)(this.queue.length === 0, 0x113 /* "deferred queue should be empty" */);
291
+ (0, core_utils_1.assert)(this.queue.length === 0, 0x113 /* "deferred queue should be empty" */);
283
292
  this.deferred.resolve(value);
284
293
  this.deferred = undefined;
285
294
  }
@@ -288,17 +297,29 @@ class Queue {
288
297
  }
289
298
  }
290
299
  async read() {
291
- (0, common_utils_1.assert)(this.deferred === undefined, 0x114 /* "cannot pop if deferred" */);
300
+ (0, core_utils_1.assert)(this.deferred === undefined, 0x114 /* "cannot pop if deferred" */);
292
301
  const value = this.queue.shift();
293
302
  if (value !== undefined) {
294
303
  return value;
295
304
  }
296
- (0, common_utils_1.assert)(!this.done, 0x115 /* "queue should not be done during pop" */);
297
- this.deferred = new common_utils_1.Deferred();
305
+ (0, core_utils_1.assert)(!this.done, 0x115 /* "queue should not be done during pop" */);
306
+ this.deferred = new core_utils_1.Deferred();
298
307
  return this.deferred.promise;
299
308
  }
300
309
  }
301
310
  exports.Queue = Queue;
311
+ const waitForOnline = async () => {
312
+ // Only wait if we have a strong signal that we're offline - otherwise assume we're online.
313
+ if (globalThis.navigator?.onLine === false && globalThis.addEventListener !== undefined) {
314
+ return new Promise((resolve) => {
315
+ const resolveAndRemoveListener = () => {
316
+ resolve();
317
+ globalThis.removeEventListener("online", resolveAndRemoveListener);
318
+ };
319
+ globalThis.addEventListener("online", resolveAndRemoveListener);
320
+ });
321
+ }
322
+ };
302
323
  /**
303
324
  * Retrieve single batch of ops
304
325
  * @param request - request index
@@ -310,58 +331,89 @@ exports.Queue = Queue;
310
331
  * @param logger - logger object to use to log progress & errors
311
332
  * @param signal - cancelation signal
312
333
  * @param scenarioName - reason for fetching ops
313
- * @returns - an object with resulting ops and cancellation / partial result flags
334
+ * @returns An object with resulting ops and cancellation / partial result flags
314
335
  */
315
336
  async function getSingleOpBatch(get, props, strongTo, logger, signal, scenarioName) {
316
337
  let lastSuccessTime;
338
+ let totalRetryAfterTime = 0;
339
+ let telemetryEvent;
317
340
  let retry = 0;
318
- const deltas = [];
319
341
  const nothing = { partial: false, cancel: true, payload: [] };
320
- while ((signal === null || signal === void 0 ? void 0 : signal.aborted) !== true) {
342
+ let waitStartTime = 0;
343
+ let waitTime = MissingFetchDelayInMs;
344
+ while (signal?.aborted !== true) {
321
345
  retry++;
322
- let delay = Math.min(MaxFetchDelayInMs, MissingFetchDelayInMs * Math.pow(2, retry));
323
- const startTime = common_utils_1.performance.now();
346
+ let lastError;
347
+ const startTime = client_utils_1.performance.now();
324
348
  try {
325
- // Issue async request for deltas - limit the number fetched to MaxBatchDeltas
326
- const deltasP = get(Object.assign(Object.assign({}, props), { retry }));
327
- const { messages, partialResult } = await deltasP;
328
- deltas.push(...messages);
329
- const deltasRetrievedLast = messages.length;
330
- if (deltasRetrievedLast !== 0 || !strongTo) {
331
- return { payload: deltas, cancel: false, partial: partialResult };
349
+ // Issue async request for deltas
350
+ const { messages, partialResult } = await get({ ...props, retry } /* telemetry props */);
351
+ // If we got messages back, return them. Return regardless of whether we got messages back if we didn't
352
+ // specify a "to", since we don't have an expectation of how many to receive.
353
+ if (messages.length !== 0 || !strongTo) {
354
+ // Report this event if we waited to fetch ops due to being offline or throttling.
355
+ telemetryEvent?.end({
356
+ duration: totalRetryAfterTime,
357
+ ...props,
358
+ reason: scenarioName,
359
+ });
360
+ return { payload: messages, cancel: false, partial: partialResult };
332
361
  }
333
- // Storage does not have ops we need.
334
- // Attempt to fetch more deltas. If we didn't receive any in the previous call we up our retry
335
- // count since something prevented us from seeing those deltas
362
+ // Otherwise, the storage gave us back an empty set of ops but we were expecting a non-empty set.
336
363
  if (lastSuccessTime === undefined) {
337
- lastSuccessTime = common_utils_1.performance.now();
364
+ // Take timestamp of the first time server responded successfully, even though it wasn't with the ops we asked for.
365
+ // If we keep getting empty responses we'll eventually fail out below.
366
+ lastSuccessTime = client_utils_1.performance.now();
338
367
  }
339
- else if (common_utils_1.performance.now() - lastSuccessTime > 30000) {
368
+ else if (client_utils_1.performance.now() - lastSuccessTime > 30000) {
340
369
  // If we are connected and receiving proper responses from server, but can't get any ops back,
341
370
  // then give up after some time. This likely indicates the issue with ordering service not flushing
342
371
  // ops to storage quick enough, and possibly waiting for summaries, while summarizer can't get
343
372
  // current as it can't get ops.
344
373
  throw (0, network_1.createGenericNetworkError)(
345
374
  // pre-0.58 error message: failedToRetrieveOpsFromStorage:TooManyRetries
346
- "Failed to retrieve ops from storage (Too Many Retries)", { canRetry: false }, Object.assign({ retry,
347
- driverVersion: packageVersion_1.pkgVersion }, props));
375
+ "Failed to retrieve ops from storage (Too Many Retries)", { canRetry: false }, {
376
+ retry,
377
+ driverVersion: packageVersion_1.pkgVersion,
378
+ ...props,
379
+ });
348
380
  }
349
381
  }
350
382
  catch (error) {
383
+ lastError = error;
351
384
  const canRetry = (0, network_1.canRetryOnError)(error);
352
- lastSuccessTime = undefined;
353
385
  const retryAfter = (0, network_1.getRetryDelayFromError)(error);
354
386
  // This will log to error table only if the error is non-retryable
355
- (0, networkUtils_1.logNetworkFailure)(logger, Object.assign(Object.assign({ eventName: "GetDeltas_Error" }, props), { retry, duration: common_utils_1.performance.now() - startTime, retryAfter, reason: scenarioName }), error);
387
+ (0, networkUtils_1.logNetworkFailure)(logger, {
388
+ eventName: "GetDeltas_Error",
389
+ ...props,
390
+ retry,
391
+ duration: client_utils_1.performance.now() - startTime,
392
+ retryAfter,
393
+ reason: scenarioName,
394
+ }, error);
356
395
  if (!canRetry) {
357
396
  // It's game over scenario.
358
397
  throw error;
359
398
  }
360
- if (retryAfter !== undefined && retryAfter >= 0) {
361
- delay = retryAfter;
362
- }
363
399
  }
364
- await (0, networkUtils_1.waitForConnectedState)(delay);
400
+ if (telemetryEvent === undefined) {
401
+ waitStartTime = client_utils_1.performance.now();
402
+ telemetryEvent = telemetry_utils_1.PerformanceEvent.start(logger, {
403
+ eventName: "GetDeltasWaitTime",
404
+ });
405
+ }
406
+ waitTime = (0, runWithRetry_1.calculateMaxWaitTime)(waitTime, lastError);
407
+ // If we get here something has gone wrong - either got an unexpected empty set of messages back or a real error.
408
+ // Either way we will wait a little bit before retrying.
409
+ await new Promise((resolve) => {
410
+ setTimeout(resolve, waitTime);
411
+ });
412
+ // If we believe we're offline, we assume there's no point in trying until we at least think we're online.
413
+ // NOTE: This isn't strictly true for drivers that don't require network (e.g. local driver). Really this logic
414
+ // should probably live in the driver.
415
+ await waitForOnline();
416
+ totalRetryAfterTime += client_utils_1.performance.now() - waitStartTime;
365
417
  }
366
418
  return nothing;
367
419
  }
@@ -375,7 +427,8 @@ async function getSingleOpBatch(get, props, strongTo, logger, signal, scenarioNa
375
427
  * @param logger - Logger to log progress and errors
376
428
  * @param signal - Cancelation signal
377
429
  * @param scenarioName - Reason for fetching ops
378
- * @returns - Messages fetched
430
+ * @returns Messages fetched
431
+ * @internal
379
432
  */
380
433
  function requestOps(get, concurrency, fromTotal, toTotal, payloadSize, logger, signal, scenarioName) {
381
434
  let requests = 0;
@@ -386,20 +439,24 @@ function requestOps(get, concurrency, fromTotal, toTotal, payloadSize, logger, s
386
439
  fromTotal,
387
440
  toTotal,
388
441
  };
389
- const telemetryEvent = telemetry_utils_1.PerformanceEvent.start(logger, Object.assign(Object.assign({ eventName: "GetDeltas" }, propsTotal), { reason: scenarioName }));
442
+ const telemetryEvent = telemetry_utils_1.PerformanceEvent.start(logger, {
443
+ eventName: "GetDeltas",
444
+ ...propsTotal,
445
+ reason: scenarioName,
446
+ });
390
447
  const manager = new ParallelRequests(fromTotal, toTotal, payloadSize, logger, async (request, from, to, strongTo, propsPerRequest) => {
391
448
  requests++;
392
- return getSingleOpBatch(async (propsAll) => get(from, to, propsAll), Object.assign(Object.assign({ request, from, to }, propsTotal), propsPerRequest), strongTo, logger, signal, scenarioName);
449
+ return getSingleOpBatch(async (propsAll) => get(from, to, propsAll), { request, from, to, ...propsTotal, ...propsPerRequest }, strongTo, logger, signal, scenarioName);
393
450
  }, (deltas) => {
394
451
  // Assert continuing and right start.
395
452
  if (lastFetch === undefined) {
396
- (0, common_utils_1.assert)(deltas[0].sequenceNumber === fromTotal, 0x26d /* "wrong start" */);
453
+ (0, core_utils_1.assert)(deltas[0].sequenceNumber === fromTotal, 0x26d /* "wrong start" */);
397
454
  }
398
455
  else {
399
- (0, common_utils_1.assert)(deltas[0].sequenceNumber === lastFetch + 1, 0x26e /* "wrong start" */);
456
+ (0, core_utils_1.assert)(deltas[0].sequenceNumber === lastFetch + 1, 0x26e /* "wrong start" */);
400
457
  }
401
458
  lastFetch = deltas[deltas.length - 1].sequenceNumber;
402
- (0, common_utils_1.assert)(lastFetch - deltas[0].sequenceNumber + 1 === deltas.length, 0x26f /* "continuous and no duplicates" */);
459
+ (0, core_utils_1.assert)(lastFetch - deltas[0].sequenceNumber + 1 === deltas.length, 0x26f /* "continuous and no duplicates" */);
403
460
  length += deltas.length;
404
461
  queue.pushValue(deltas);
405
462
  });
@@ -407,26 +464,30 @@ function requestOps(get, concurrency, fromTotal, toTotal, payloadSize, logger, s
407
464
  // waits (up to 10 seconds) and fetches (can take infinite amount of time).
408
465
  // While every such case should be improved and take into account signal (and thus cancel immediately),
409
466
  // it is beneficial to have catch-all
410
- const listener = (event) => { manager.cancel(); };
467
+ const listener = (event) => {
468
+ manager.cancel();
469
+ };
411
470
  if (signal !== undefined) {
412
471
  signal.addEventListener("abort", listener);
413
472
  }
414
- manager.run(concurrency)
473
+ manager
474
+ .run(concurrency)
415
475
  .finally(() => {
416
476
  if (signal !== undefined) {
417
477
  signal.removeEventListener("abort", listener);
418
478
  }
419
- }).then(() => {
479
+ })
480
+ .then(() => {
420
481
  const props = {
421
482
  lastFetch,
422
483
  length,
423
484
  requests,
424
485
  };
425
486
  if (manager.canceled) {
426
- telemetryEvent.cancel(Object.assign(Object.assign({}, props), { error: "ops request cancelled by client" }));
487
+ telemetryEvent.cancel({ ...props, error: "ops request cancelled by client" });
427
488
  }
428
489
  else {
429
- (0, common_utils_1.assert)(toTotal === undefined || lastFetch !== undefined && lastFetch >= toTotal - 1, 0x270 /* "All requested ops fetched" */);
490
+ (0, core_utils_1.assert)(toTotal === undefined || (lastFetch !== undefined && lastFetch >= toTotal - 1), 0x270 /* "All requested ops fetched" */);
430
491
  telemetryEvent.end(props);
431
492
  }
432
493
  queue.pushDone();
@@ -442,9 +503,17 @@ function requestOps(get, concurrency, fromTotal, toTotal, payloadSize, logger, s
442
503
  return queue;
443
504
  }
444
505
  exports.requestOps = requestOps;
506
+ /**
507
+ * @internal
508
+ */
445
509
  exports.emptyMessageStream = {
446
- read: async () => { return { done: true }; },
510
+ read: async () => {
511
+ return { done: true };
512
+ },
447
513
  };
514
+ /**
515
+ * @internal
516
+ */
448
517
  function streamFromMessages(messagesArg) {
449
518
  let messages = messagesArg;
450
519
  return {
@@ -459,6 +528,9 @@ function streamFromMessages(messagesArg) {
459
528
  };
460
529
  }
461
530
  exports.streamFromMessages = streamFromMessages;
531
+ /**
532
+ * @internal
533
+ */
462
534
  function streamObserver(stream, handler) {
463
535
  return {
464
536
  read: async () => {
@@ -469,4 +541,4 @@ function streamObserver(stream, handler) {
469
541
  };
470
542
  }
471
543
  exports.streamObserver = streamObserver;
472
- //# sourceMappingURL=parallelRequests.js.map
544
+ //# sourceMappingURL=parallelRequests.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallelRequests.cjs","sourceRoot":"","sources":["../src/parallelRequests.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { performance } from \"@fluid-internal/client-utils\";\nimport { ITelemetryProperties } from \"@fluidframework/core-interfaces\";\nimport { assert, Deferred } from \"@fluidframework/core-utils\";\nimport { ITelemetryLoggerExt, PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { IDeltasFetchResult, IStream, IStreamResult } from \"@fluidframework/driver-definitions\";\nimport { getRetryDelayFromError, canRetryOnError, createGenericNetworkError } from \"./network\";\nimport { logNetworkFailure } from \"./networkUtils\";\n// For now, this package is versioned and released in unison with the specific drivers\nimport { pkgVersion as driverVersion } from \"./packageVersion\";\nimport { calculateMaxWaitTime } from \"./runWithRetry\";\n\n// We double this value in first try in when we calculate time to wait for in \"calculateMaxWaitTime\" function.\nconst MissingFetchDelayInMs = 50;\n\ntype WorkingState = \"working\" | \"done\" | \"canceled\";\n\n/**\n * Helper class to organize parallel fetching of data\n * It can be used to concurrently do many requests, while consuming\n * data in the right order. Take a look at UT for examples.\n * @param concurrency - level of concurrency\n * @param from - starting point of fetching data (inclusive)\n * @param to - ending point of fetching data. exclusive, or undefined if unknown\n * @param payloadSize - batch size\n * @param logger - logger to use\n * @param requestCallback - callback to request batches\n * @returns Queue that can be used to retrieve data\n * @internal\n */\nexport class ParallelRequests<T> {\n\tprivate latestRequested: number;\n\tprivate nextToDeliver: number;\n\tprivate readonly results = new Map<number, T[]>();\n\tprivate workingState: WorkingState = \"working\";\n\tprivate requestsInFlight = 0;\n\tprivate readonly endEvent = new Deferred<void>();\n\tprivate requests = 0;\n\tprivate readonly knewTo: boolean;\n\n\tprivate get working() {\n\t\treturn this.workingState === \"working\";\n\t}\n\tpublic get canceled() {\n\t\treturn this.workingState === \"canceled\";\n\t}\n\n\tconstructor(\n\t\tfrom: number,\n\t\tprivate to: number | undefined,\n\t\tprivate readonly payloadSize: number,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t\tprivate readonly requestCallback: (\n\t\t\trequest: number,\n\t\t\tfrom: number,\n\t\t\tto: number,\n\t\t\tstrongTo: boolean,\n\t\t\tprops: ITelemetryProperties,\n\t\t) => Promise<{ partial: boolean; cancel: boolean; payload: T[] }>,\n\t\tprivate readonly responseCallback: (payload: T[]) => void,\n\t) {\n\t\tthis.latestRequested = from;\n\t\tthis.nextToDeliver = from;\n\t\tthis.knewTo = to !== undefined;\n\t}\n\n\tpublic cancel() {\n\t\tif (this.working) {\n\t\t\tthis.workingState = \"canceled\";\n\t\t\tthis.endEvent.resolve();\n\t\t}\n\t}\n\n\tpublic async run(concurrency: number) {\n\t\tassert(concurrency > 0, 0x102 /* \"invalid level of concurrency\" */);\n\t\tassert(this.working, 0x103 /* \"trying to parallel run while not working\" */);\n\n\t\tlet c = concurrency;\n\t\twhile (c > 0) {\n\t\t\tc--;\n\t\t\tthis.addRequest();\n\t\t}\n\t\tthis.dispatch(); // will recalculate and trigger this.endEvent if needed\n\t\treturn this.endEvent.promise;\n\t}\n\n\tprivate done() {\n\t\t// We should satisfy request fully.\n\t\tassert(this.to !== undefined, 0x104 /* \"undefined end point for parallel fetch\" */);\n\t\tassert(\n\t\t\tthis.nextToDeliver >= this.to,\n\t\t\t0x105 /* \"unexpected end point for parallel fetch\" */,\n\t\t);\n\t\tif (this.working) {\n\t\t\tthis.workingState = \"done\";\n\t\t\tthis.endEvent.resolve();\n\t\t}\n\t}\n\n\tprivate fail(error) {\n\t\tif (this.working) {\n\t\t\tthis.workingState = \"done\";\n\t\t\tthis.endEvent.reject(error);\n\t\t}\n\t}\n\n\tprivate dispatch() {\n\t\twhile (this.working) {\n\t\t\tconst value = this.results.get(this.nextToDeliver);\n\t\t\tif (value === undefined) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.results.delete(this.nextToDeliver);\n\t\t\tassert(\n\t\t\t\tvalue.length <= this.payloadSize,\n\t\t\t\t0x1d9 /* \"addRequestCore() should break into smaller chunks\" */,\n\t\t\t);\n\t\t\tthis.nextToDeliver += value.length;\n\t\t\tthis.responseCallback(value);\n\t\t}\n\n\t\t// Account for cancellation - state might be not in consistent state on cancelling operation\n\t\tif (this.working) {\n\t\t\tif (this.requestsInFlight === 0) {\n\t\t\t\t// we should have dispatched everything, no matter whether we knew about the end or not.\n\t\t\t\t// see comment in addRequestCore() around throwing away chunk if it's above this.to\n\t\t\t\tassert(\n\t\t\t\t\tthis.results.size === 0,\n\t\t\t\t\t0x107 /* \"ending dispatch with remaining results to be sent\" */,\n\t\t\t\t);\n\t\t\t\tthis.done();\n\t\t\t} else if (this.to !== undefined && this.nextToDeliver >= this.to) {\n\t\t\t\t// Learned about the end and dispatched all the ops up to it.\n\t\t\t\t// Ignore all the in-flight requests above boundary - unblock caller sooner.\n\t\t\t\tassert(\n\t\t\t\t\t!this.knewTo,\n\t\t\t\t\t0x108 /* \"ending results dispatch but knew in advance about more requests\" */,\n\t\t\t\t);\n\t\t\t\tthis.done();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getNextChunk() {\n\t\tif (!this.working) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst from = this.latestRequested;\n\t\tif (this.to !== undefined) {\n\t\t\tif (this.to <= from) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\t// this.latestRequested\n\t\t// inclusive on the right side! Exclusive on the left.\n\t\tthis.latestRequested += this.payloadSize;\n\n\t\tif (this.to !== undefined) {\n\t\t\tthis.latestRequested = Math.min(this.to, this.latestRequested);\n\t\t}\n\n\t\tassert(from < this.latestRequested, 0x109 /* \"unexpected next chunk position\" */);\n\n\t\treturn { from, to: this.latestRequested };\n\t}\n\n\tprivate addRequest() {\n\t\tconst chunk = this.getNextChunk();\n\t\tif (chunk === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis.addRequestCore(chunk.from, chunk.to).catch(this.fail.bind(this));\n\t}\n\n\tprivate async addRequestCore(fromArg: number, toArg: number) {\n\t\tassert(this.working, 0x10a /* \"cannot add parallel request while not working\" */);\n\n\t\tlet from = fromArg;\n\t\tlet to = toArg;\n\n\t\t// to & from are exclusive\n\t\tthis.requestsInFlight++;\n\t\twhile (this.working) {\n\t\t\tconst requestedLength = to - from;\n\t\t\tassert(requestedLength > 0, 0x10b /* \"invalid parallel request range\" */);\n\n\t\t\t// We should not be wasting time asking for something useless.\n\t\t\tif (this.to !== undefined) {\n\t\t\t\tassert(from < this.to, 0x10c /* \"invalid parallel request start point\" */);\n\t\t\t\tassert(to <= this.to, 0x10d /* \"invalid parallel request end point\" */);\n\t\t\t}\n\n\t\t\tthis.requests++;\n\n\t\t\tconst promise = this.requestCallback(\n\t\t\t\tthis.requests,\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t\tthis.to !== undefined,\n\t\t\t\t{},\n\t\t\t);\n\n\t\t\t// dispatch any prior received data\n\t\t\tthis.dispatch();\n\n\t\t\tconst { payload, cancel, partial } = await promise;\n\n\t\t\tif (cancel) {\n\t\t\t\tthis.cancel();\n\t\t\t}\n\n\t\t\tif (this.to !== undefined && from >= this.to) {\n\t\t\t\t// while we were waiting for response, we learned on what is the boundary\n\t\t\t\t// We can get here (with actual result!) if situation changed while this request was in\n\t\t\t\t// flight, i.e. the end was extended over what we learn in some other request\n\t\t\t\t// While it's useful not to throw this result, this is very corner cases and makes logic\n\t\t\t\t// (including consistency checks) much harder to write correctly.\n\t\t\t\t// So for now, we are throwing this result out the window.\n\t\t\t\tassert(\n\t\t\t\t\t!this.knewTo,\n\t\t\t\t\t0x10e /* \"should not throw result if we knew about boundary in advance\" */,\n\t\t\t\t);\n\t\t\t\t// Learn how often it happens and if it's too wasteful to throw these chunks.\n\t\t\t\t// If it pops into our view a lot, we would need to reconsider how we approach it.\n\t\t\t\t// Note that this is not visible to user other than potentially not hitting 100% of\n\t\t\t\t// what we can in perf domain.\n\t\t\t\tif (payload.length !== 0) {\n\t\t\t\t\tthis.logger.sendErrorEvent({\n\t\t\t\t\t\teventName: \"ParallelRequests_GotExtra\",\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tto,\n\t\t\t\t\t\tend: this.to,\n\t\t\t\t\t\tlength: payload.length,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (this.working) {\n\t\t\t\tconst fromOrig = from;\n\t\t\t\tconst length = payload.length;\n\t\t\t\tlet fullChunk = requestedLength <= length; // we can possible get more than we asked.\n\n\t\t\t\tif (length !== 0) {\n\t\t\t\t\t// We can get more than we asked for!\n\t\t\t\t\t// This can screw up logic in dispatch!\n\t\t\t\t\t// So push only batch size, and keep the rest for later - if conditions are favorable, we\n\t\t\t\t\t// will be able to use it. If not (parallel request overlapping these ops), it's easier to\n\t\t\t\t\t// discard them and wait for another (overlapping) request to come in later.\n\t\t\t\t\tif (requestedLength < length) {\n\t\t\t\t\t\t// This is error in a sense that it's not expected and likely points bug in other layer.\n\t\t\t\t\t\t// This layer copes with this situation just fine.\n\t\t\t\t\t\tthis.logger.sendTelemetryEvent({\n\t\t\t\t\t\t\teventName: \"ParallelRequests_Over\",\n\t\t\t\t\t\t\tfrom,\n\t\t\t\t\t\t\tto,\n\t\t\t\t\t\t\tlength,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tconst data = payload.splice(0, requestedLength);\n\t\t\t\t\tthis.results.set(from, data);\n\t\t\t\t\tfrom += data.length;\n\t\t\t\t} else {\n\t\t\t\t\t// 1. empty (partial) chunks should not be returned by various caching / adapter layers -\n\t\t\t\t\t// they should fall back to next layer. This might be important invariant to hold to ensure\n\t\t\t\t\t// that we are less likely have bugs where such layer would keep returning empty partial\n\t\t\t\t\t// result on each call.\n\t\t\t\t\t// 2. Current invariant is that callback does retries until it gets something,\n\t\t\t\t\t// with the goal of failing if zero data is retrieved in given amount of time.\n\t\t\t\t\t// This is very specific property of storage / ops, so this logic is not here, but given only\n\t\t\t\t\t// one user of this class, we assert that to catch issues earlier.\n\t\t\t\t\t// These invariant can be relaxed if needed.\n\t\t\t\t\tassert(\n\t\t\t\t\t\t!partial,\n\t\t\t\t\t\t0x10f /* \"empty/partial chunks should not be returned by caching\" */,\n\t\t\t\t\t);\n\t\t\t\t\tassert(\n\t\t\t\t\t\t!this.knewTo,\n\t\t\t\t\t\t0x110 /* \"callback should retry until valid fetch before it learns new boundary\" */,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (!partial && !fullChunk) {\n\t\t\t\t\tif (!this.knewTo) {\n\t\t\t\t\t\tif (this.to === undefined || this.to > from) {\n\t\t\t\t\t\t\t// The END\n\t\t\t\t\t\t\tthis.to = from;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// We know that there are more items to be retrieved\n\t\t\t\t\t// Can we get partial chunk? Ideally storage indicates that's not a full chunk\n\t\t\t\t\t// Note that it's possible that not all ops hit storage yet.\n\t\t\t\t\t// We will come back to request more, and if we can't get any more ops soon, it's\n\t\t\t\t\t// catastrophic failure (see comment above on responsibility of callback to return something)\n\t\t\t\t\t// This layer will just keep trying until it gets full set.\n\t\t\t\t\tthis.logger.sendPerformanceEvent({\n\t\t\t\t\t\teventName: \"ParallelRequests_Partial\",\n\t\t\t\t\t\tfrom: fromOrig,\n\t\t\t\t\t\tto,\n\t\t\t\t\t\tlength,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (to === this.latestRequested) {\n\t\t\t\t\t// we can go after full chunk at the end if we received partial chunk, or more than asked\n\t\t\t\t\t// Also if we got more than we asked to, we can actually use those ops!\n\t\t\t\t\twhile (payload.length !== 0) {\n\t\t\t\t\t\tconst data = payload.splice(0, requestedLength);\n\t\t\t\t\t\tthis.results.set(from, data);\n\t\t\t\t\t\tfrom += data.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.latestRequested = from;\n\t\t\t\t\tfullChunk = true;\n\t\t\t\t}\n\n\t\t\t\tif (fullChunk) {\n\t\t\t\t\tconst chunk = this.getNextChunk();\n\t\t\t\t\tif (chunk === undefined) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tfrom = chunk.from;\n\t\t\t\t\tto = chunk.to;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.requestsInFlight--;\n\t\tthis.dispatch();\n\t}\n}\n\n/**\n * Helper queue class to allow async push / pull\n * It's essentially a pipe allowing multiple writers, and single reader\n * @internal\n */\nexport class Queue<T> implements IStream<T> {\n\tprivate readonly queue: Promise<IStreamResult<T>>[] = [];\n\tprivate deferred: Deferred<IStreamResult<T>> | undefined;\n\tprivate done = false;\n\n\tpublic pushValue(value: T) {\n\t\tthis.pushCore(Promise.resolve({ done: false, value }));\n\t}\n\n\tpublic pushError(error: any) {\n\t\tthis.pushCore(Promise.reject(error));\n\t\tthis.done = true;\n\t}\n\n\tpublic pushDone() {\n\t\tthis.pushCore(Promise.resolve({ done: true }));\n\t\tthis.done = true;\n\t}\n\n\tprotected pushCore(value: Promise<IStreamResult<T>>) {\n\t\tassert(!this.done, 0x112 /* \"cannot push onto queue if done\" */);\n\t\tif (this.deferred) {\n\t\t\tassert(this.queue.length === 0, 0x113 /* \"deferred queue should be empty\" */);\n\t\t\tthis.deferred.resolve(value);\n\t\t\tthis.deferred = undefined;\n\t\t} else {\n\t\t\tthis.queue.push(value);\n\t\t}\n\t}\n\n\tpublic async read(): Promise<IStreamResult<T>> {\n\t\tassert(this.deferred === undefined, 0x114 /* \"cannot pop if deferred\" */);\n\t\tconst value = this.queue.shift();\n\t\tif (value !== undefined) {\n\t\t\treturn value;\n\t\t}\n\t\tassert(!this.done, 0x115 /* \"queue should not be done during pop\" */);\n\t\tthis.deferred = new Deferred<IStreamResult<T>>();\n\t\treturn this.deferred.promise;\n\t}\n}\n\nconst waitForOnline = async (): Promise<void> => {\n\t// Only wait if we have a strong signal that we're offline - otherwise assume we're online.\n\tif (globalThis.navigator?.onLine === false && globalThis.addEventListener !== undefined) {\n\t\treturn new Promise<void>((resolve) => {\n\t\t\tconst resolveAndRemoveListener = () => {\n\t\t\t\tresolve();\n\t\t\t\tglobalThis.removeEventListener(\"online\", resolveAndRemoveListener);\n\t\t\t};\n\t\t\tglobalThis.addEventListener(\"online\", resolveAndRemoveListener);\n\t\t});\n\t}\n};\n\n/**\n * Retrieve single batch of ops\n * @param request - request index\n * @param from - inclusive boundary\n * @param to - exclusive boundary\n * @param telemetryEvent - telemetry event used to track consecutive batch of requests\n * @param strongTo - tells if ops in range from...to have to be there and have to be retrieved.\n * If false, returning less ops would mean we reached end of file.\n * @param logger - logger object to use to log progress & errors\n * @param signal - cancelation signal\n * @param scenarioName - reason for fetching ops\n * @returns An object with resulting ops and cancellation / partial result flags\n */\nasync function getSingleOpBatch(\n\tget: (telemetryProps: ITelemetryProperties) => Promise<IDeltasFetchResult>,\n\tprops: ITelemetryProperties,\n\tstrongTo: boolean,\n\tlogger: ITelemetryLoggerExt,\n\tsignal?: AbortSignal,\n\tscenarioName?: string,\n): Promise<{ partial: boolean; cancel: boolean; payload: ISequencedDocumentMessage[] }> {\n\tlet lastSuccessTime: number | undefined;\n\tlet totalRetryAfterTime = 0;\n\tlet telemetryEvent: PerformanceEvent | undefined;\n\tlet retry: number = 0;\n\tconst nothing = { partial: false, cancel: true, payload: [] };\n\tlet waitStartTime: number = 0;\n\tlet waitTime = MissingFetchDelayInMs;\n\n\twhile (signal?.aborted !== true) {\n\t\tretry++;\n\t\tlet lastError: unknown;\n\t\tconst startTime = performance.now();\n\n\t\ttry {\n\t\t\t// Issue async request for deltas\n\t\t\tconst { messages, partialResult } = await get(\n\t\t\t\t{ ...props, retry } /* telemetry props */,\n\t\t\t);\n\n\t\t\t// If we got messages back, return them. Return regardless of whether we got messages back if we didn't\n\t\t\t// specify a \"to\", since we don't have an expectation of how many to receive.\n\t\t\tif (messages.length !== 0 || !strongTo) {\n\t\t\t\t// Report this event if we waited to fetch ops due to being offline or throttling.\n\t\t\t\ttelemetryEvent?.end({\n\t\t\t\t\tduration: totalRetryAfterTime,\n\t\t\t\t\t...props,\n\t\t\t\t\treason: scenarioName,\n\t\t\t\t});\n\t\t\t\treturn { payload: messages, cancel: false, partial: partialResult };\n\t\t\t}\n\n\t\t\t// Otherwise, the storage gave us back an empty set of ops but we were expecting a non-empty set.\n\n\t\t\tif (lastSuccessTime === undefined) {\n\t\t\t\t// Take timestamp of the first time server responded successfully, even though it wasn't with the ops we asked for.\n\t\t\t\t// If we keep getting empty responses we'll eventually fail out below.\n\t\t\t\tlastSuccessTime = performance.now();\n\t\t\t} else if (performance.now() - lastSuccessTime > 30000) {\n\t\t\t\t// If we are connected and receiving proper responses from server, but can't get any ops back,\n\t\t\t\t// then give up after some time. This likely indicates the issue with ordering service not flushing\n\t\t\t\t// ops to storage quick enough, and possibly waiting for summaries, while summarizer can't get\n\t\t\t\t// current as it can't get ops.\n\t\t\t\tthrow createGenericNetworkError(\n\t\t\t\t\t// pre-0.58 error message: failedToRetrieveOpsFromStorage:TooManyRetries\n\t\t\t\t\t\"Failed to retrieve ops from storage (Too Many Retries)\",\n\t\t\t\t\t{ canRetry: false },\n\t\t\t\t\t{\n\t\t\t\t\t\tretry,\n\t\t\t\t\t\tdriverVersion,\n\t\t\t\t\t\t...props,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlastError = error;\n\t\t\tconst canRetry = canRetryOnError(error);\n\n\t\t\tconst retryAfter = getRetryDelayFromError(error);\n\n\t\t\t// This will log to error table only if the error is non-retryable\n\t\t\tlogNetworkFailure(\n\t\t\t\tlogger,\n\t\t\t\t{\n\t\t\t\t\teventName: \"GetDeltas_Error\",\n\t\t\t\t\t...props,\n\t\t\t\t\tretry,\n\t\t\t\t\tduration: performance.now() - startTime,\n\t\t\t\t\tretryAfter,\n\t\t\t\t\treason: scenarioName,\n\t\t\t\t},\n\t\t\t\terror,\n\t\t\t);\n\n\t\t\tif (!canRetry) {\n\t\t\t\t// It's game over scenario.\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tif (telemetryEvent === undefined) {\n\t\t\twaitStartTime = performance.now();\n\t\t\ttelemetryEvent = PerformanceEvent.start(logger, {\n\t\t\t\teventName: \"GetDeltasWaitTime\",\n\t\t\t});\n\t\t}\n\n\t\twaitTime = calculateMaxWaitTime(waitTime, lastError);\n\n\t\t// If we get here something has gone wrong - either got an unexpected empty set of messages back or a real error.\n\t\t// Either way we will wait a little bit before retrying.\n\t\tawait new Promise<void>((resolve) => {\n\t\t\tsetTimeout(resolve, waitTime);\n\t\t});\n\n\t\t// If we believe we're offline, we assume there's no point in trying until we at least think we're online.\n\t\t// NOTE: This isn't strictly true for drivers that don't require network (e.g. local driver). Really this logic\n\t\t// should probably live in the driver.\n\t\tawait waitForOnline();\n\t\ttotalRetryAfterTime += performance.now() - waitStartTime;\n\t}\n\n\treturn nothing;\n}\n\n/**\n * Request ops from storage\n * @param get - Getter callback to get individual batches\n * @param concurrency - Number of concurrent requests to make\n * @param fromTotal - starting sequence number to fetch (inclusive)\n * @param toTotal - max (exclusive) sequence number to fetch\n * @param payloadSize - Payload size\n * @param logger - Logger to log progress and errors\n * @param signal - Cancelation signal\n * @param scenarioName - Reason for fetching ops\n * @returns Messages fetched\n * @internal\n */\nexport function requestOps(\n\tget: (\n\t\tfrom: number,\n\t\tto: number,\n\t\ttelemetryProps: ITelemetryProperties,\n\t) => Promise<IDeltasFetchResult>,\n\tconcurrency: number,\n\tfromTotal: number,\n\ttoTotal: number | undefined,\n\tpayloadSize: number,\n\tlogger: ITelemetryLoggerExt,\n\tsignal?: AbortSignal,\n\tscenarioName?: string,\n): IStream<ISequencedDocumentMessage[]> {\n\tlet requests = 0;\n\tlet lastFetch: number | undefined;\n\tlet length = 0;\n\tconst queue = new Queue<ISequencedDocumentMessage[]>();\n\n\tconst propsTotal: ITelemetryProperties = {\n\t\tfromTotal,\n\t\ttoTotal,\n\t};\n\n\tconst telemetryEvent = PerformanceEvent.start(logger, {\n\t\teventName: \"GetDeltas\",\n\t\t...propsTotal,\n\t\treason: scenarioName,\n\t});\n\n\tconst manager = new ParallelRequests<ISequencedDocumentMessage>(\n\t\tfromTotal,\n\t\ttoTotal,\n\t\tpayloadSize,\n\t\tlogger,\n\t\tasync (\n\t\t\trequest: number,\n\t\t\tfrom: number,\n\t\t\tto: number,\n\t\t\tstrongTo: boolean,\n\t\t\tpropsPerRequest: ITelemetryProperties,\n\t\t) => {\n\t\t\trequests++;\n\t\t\treturn getSingleOpBatch(\n\t\t\t\tasync (propsAll) => get(from, to, propsAll),\n\t\t\t\t{ request, from, to, ...propsTotal, ...propsPerRequest },\n\t\t\t\tstrongTo,\n\t\t\t\tlogger,\n\t\t\t\tsignal,\n\t\t\t\tscenarioName,\n\t\t\t);\n\t\t},\n\t\t(deltas: ISequencedDocumentMessage[]) => {\n\t\t\t// Assert continuing and right start.\n\t\t\tif (lastFetch === undefined) {\n\t\t\t\tassert(deltas[0].sequenceNumber === fromTotal, 0x26d /* \"wrong start\" */);\n\t\t\t} else {\n\t\t\t\tassert(deltas[0].sequenceNumber === lastFetch + 1, 0x26e /* \"wrong start\" */);\n\t\t\t}\n\t\t\tlastFetch = deltas[deltas.length - 1].sequenceNumber;\n\t\t\tassert(\n\t\t\t\tlastFetch - deltas[0].sequenceNumber + 1 === deltas.length,\n\t\t\t\t0x26f /* \"continuous and no duplicates\" */,\n\t\t\t);\n\t\t\tlength += deltas.length;\n\t\t\tqueue.pushValue(deltas);\n\t\t},\n\t);\n\n\t// Implement faster cancellation. getSingleOpBatch() checks signal, but only in between\n\t// waits (up to 10 seconds) and fetches (can take infinite amount of time).\n\t// While every such case should be improved and take into account signal (and thus cancel immediately),\n\t// it is beneficial to have catch-all\n\tconst listener = (event: Event) => {\n\t\tmanager.cancel();\n\t};\n\tif (signal !== undefined) {\n\t\tsignal.addEventListener(\"abort\", listener);\n\t}\n\n\tmanager\n\t\t.run(concurrency)\n\t\t.finally(() => {\n\t\t\tif (signal !== undefined) {\n\t\t\t\tsignal.removeEventListener(\"abort\", listener);\n\t\t\t}\n\t\t})\n\t\t.then(() => {\n\t\t\tconst props = {\n\t\t\t\tlastFetch,\n\t\t\t\tlength,\n\t\t\t\trequests,\n\t\t\t};\n\t\t\tif (manager.canceled) {\n\t\t\t\ttelemetryEvent.cancel({ ...props, error: \"ops request cancelled by client\" });\n\t\t\t} else {\n\t\t\t\tassert(\n\t\t\t\t\ttoTotal === undefined || (lastFetch !== undefined && lastFetch >= toTotal - 1),\n\t\t\t\t\t0x270 /* \"All requested ops fetched\" */,\n\t\t\t\t);\n\t\t\t\ttelemetryEvent.end(props);\n\t\t\t}\n\t\t\tqueue.pushDone();\n\t\t})\n\t\t.catch((error) => {\n\t\t\ttelemetryEvent.cancel(\n\t\t\t\t{\n\t\t\t\t\tlastFetch,\n\t\t\t\t\tlength,\n\t\t\t\t\trequests,\n\t\t\t\t},\n\t\t\t\terror,\n\t\t\t);\n\t\t\tqueue.pushError(error);\n\t\t});\n\n\treturn queue;\n}\n\n/**\n * @internal\n */\nexport const emptyMessageStream: IStream<ISequencedDocumentMessage[]> = {\n\tread: async () => {\n\t\treturn { done: true };\n\t},\n};\n\n/**\n * @internal\n */\nexport function streamFromMessages(\n\tmessagesArg: Promise<ISequencedDocumentMessage[]>,\n): IStream<ISequencedDocumentMessage[]> {\n\tlet messages: Promise<ISequencedDocumentMessage[]> | undefined = messagesArg;\n\treturn {\n\t\tread: async () => {\n\t\t\tif (messages === undefined) {\n\t\t\t\treturn { done: true };\n\t\t\t}\n\t\t\tconst value = await messages;\n\t\t\tmessages = undefined;\n\t\t\treturn value.length === 0 ? { done: true } : { done: false, value };\n\t\t},\n\t};\n}\n\n/**\n * @internal\n */\nexport function streamObserver<T>(\n\tstream: IStream<T>,\n\thandler: (value: IStreamResult<T>) => void,\n): IStream<T> {\n\treturn {\n\t\tread: async () => {\n\t\t\tconst value = await stream.read();\n\t\t\thandler(value);\n\t\t\treturn value;\n\t\t},\n\t};\n}\n"]}
@@ -1,4 +1,5 @@
1
- import { ITelemetryLogger, ITelemetryProperties } from "@fluidframework/common-definitions";
1
+ import { ITelemetryProperties } from "@fluidframework/core-interfaces";
2
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
2
3
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
3
4
  import { IDeltasFetchResult, IStream, IStreamResult } from "@fluidframework/driver-definitions";
4
5
  /**
@@ -7,11 +8,12 @@ import { IDeltasFetchResult, IStream, IStreamResult } from "@fluidframework/driv
7
8
  * data in the right order. Take a look at UT for examples.
8
9
  * @param concurrency - level of concurrency
9
10
  * @param from - starting point of fetching data (inclusive)
10
- * @param to - ending point of fetching data. exclusive, or undefined if unknown
11
+ * @param to - ending point of fetching data. exclusive, or undefined if unknown
11
12
  * @param payloadSize - batch size
12
13
  * @param logger - logger to use
13
14
  * @param requestCallback - callback to request batches
14
- * @returns - Queue that can be used to retrieve data
15
+ * @returns Queue that can be used to retrieve data
16
+ * @internal
15
17
  */
16
18
  export declare class ParallelRequests<T> {
17
19
  private to;
@@ -29,7 +31,7 @@ export declare class ParallelRequests<T> {
29
31
  private readonly knewTo;
30
32
  private get working();
31
33
  get canceled(): boolean;
32
- constructor(from: number, to: number | undefined, payloadSize: number, logger: ITelemetryLogger, requestCallback: (request: number, from: number, to: number, strongTo: boolean, props: ITelemetryProperties) => Promise<{
34
+ constructor(from: number, to: number | undefined, payloadSize: number, logger: ITelemetryLoggerExt, requestCallback: (request: number, from: number, to: number, strongTo: boolean, props: ITelemetryProperties) => Promise<{
33
35
  partial: boolean;
34
36
  cancel: boolean;
35
37
  payload: T[];
@@ -46,6 +48,7 @@ export declare class ParallelRequests<T> {
46
48
  /**
47
49
  * Helper queue class to allow async push / pull
48
50
  * It's essentially a pipe allowing multiple writers, and single reader
51
+ * @internal
49
52
  */
50
53
  export declare class Queue<T> implements IStream<T> {
51
54
  private readonly queue;
@@ -67,10 +70,20 @@ export declare class Queue<T> implements IStream<T> {
67
70
  * @param logger - Logger to log progress and errors
68
71
  * @param signal - Cancelation signal
69
72
  * @param scenarioName - Reason for fetching ops
70
- * @returns - Messages fetched
73
+ * @returns Messages fetched
74
+ * @internal
75
+ */
76
+ export declare function requestOps(get: (from: number, to: number, telemetryProps: ITelemetryProperties) => Promise<IDeltasFetchResult>, concurrency: number, fromTotal: number, toTotal: number | undefined, payloadSize: number, logger: ITelemetryLoggerExt, signal?: AbortSignal, scenarioName?: string): IStream<ISequencedDocumentMessage[]>;
77
+ /**
78
+ * @internal
71
79
  */
72
- export declare function requestOps(get: (from: number, to: number, telemetryProps: ITelemetryProperties) => Promise<IDeltasFetchResult>, concurrency: number, fromTotal: number, toTotal: number | undefined, payloadSize: number, logger: ITelemetryLogger, signal?: AbortSignal, scenarioName?: string): IStream<ISequencedDocumentMessage[]>;
73
80
  export declare const emptyMessageStream: IStream<ISequencedDocumentMessage[]>;
81
+ /**
82
+ * @internal
83
+ */
74
84
  export declare function streamFromMessages(messagesArg: Promise<ISequencedDocumentMessage[]>): IStream<ISequencedDocumentMessage[]>;
85
+ /**
86
+ * @internal
87
+ */
75
88
  export declare function streamObserver<T>(stream: IStream<T>, handler: (value: IStreamResult<T>) => void): IStream<T>;
76
89
  //# sourceMappingURL=parallelRequests.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parallelRequests.d.ts","sourceRoot":"","sources":["../src/parallelRequests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parallelRequests.d.ts","sourceRoot":"","sources":["../src/parallelRequests.ts"],"names":[],"mappings":"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"}