@fluidframework/routerlicious-driver 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/api-extractor-lint.json +1 -1
  3. package/api-extractor.json +1 -1
  4. package/api-report/routerlicious-driver.api.md +3 -3
  5. package/beta.d.ts +11 -0
  6. package/{lib/storageContracts.mjs → dist/axios.cjs} +3 -2
  7. package/dist/axios.cjs.map +1 -0
  8. package/dist/axios.d.cts +7 -0
  9. package/dist/axios.d.cts.map +1 -0
  10. package/dist/beta.d.ts +15 -0
  11. package/dist/cache.js +2 -2
  12. package/dist/cache.js.map +1 -1
  13. package/dist/defaultTokenProvider.d.ts +1 -1
  14. package/dist/defaultTokenProvider.d.ts.map +1 -1
  15. package/dist/defaultTokenProvider.js.map +1 -1
  16. package/dist/deltaStorageService.d.ts +3 -3
  17. package/dist/deltaStorageService.d.ts.map +1 -1
  18. package/dist/deltaStorageService.js +12 -12
  19. package/dist/deltaStorageService.js.map +1 -1
  20. package/dist/documentDeltaConnection.d.ts +4 -3
  21. package/dist/documentDeltaConnection.d.ts.map +1 -1
  22. package/dist/documentDeltaConnection.js +6 -6
  23. package/dist/documentDeltaConnection.js.map +1 -1
  24. package/dist/documentService.d.ts +7 -7
  25. package/dist/documentService.d.ts.map +1 -1
  26. package/dist/documentService.js +30 -31
  27. package/dist/documentService.js.map +1 -1
  28. package/dist/documentServiceFactory.d.ts +3 -3
  29. package/dist/documentServiceFactory.d.ts.map +1 -1
  30. package/dist/documentServiceFactory.js +43 -43
  31. package/dist/documentServiceFactory.js.map +1 -1
  32. package/dist/documentStorageService.d.ts +8 -8
  33. package/dist/documentStorageService.d.ts.map +1 -1
  34. package/dist/documentStorageService.js +9 -9
  35. package/dist/documentStorageService.js.map +1 -1
  36. package/dist/errorUtils.d.ts +4 -3
  37. package/dist/errorUtils.d.ts.map +1 -1
  38. package/dist/errorUtils.js +8 -9
  39. package/dist/errorUtils.js.map +1 -1
  40. package/dist/gitManager.d.ts +3 -3
  41. package/dist/gitManager.d.ts.map +1 -1
  42. package/dist/gitManager.js.map +1 -1
  43. package/dist/historian.d.ts +4 -4
  44. package/dist/historian.d.ts.map +1 -1
  45. package/dist/historian.js.map +1 -1
  46. package/dist/index.d.ts +6 -6
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +7 -7
  49. package/dist/index.js.map +1 -1
  50. package/dist/legacy.d.ts +18 -0
  51. package/dist/mapWithExpiration.js +2 -2
  52. package/dist/mapWithExpiration.js.map +1 -1
  53. package/dist/nullBlobStorageService.d.ts +1 -1
  54. package/dist/nullBlobStorageService.d.ts.map +1 -1
  55. package/dist/nullBlobStorageService.js.map +1 -1
  56. package/dist/package.json +3 -0
  57. package/dist/packageVersion.d.ts +1 -1
  58. package/dist/packageVersion.js +1 -1
  59. package/dist/packageVersion.js.map +1 -1
  60. package/dist/public.d.ts +15 -0
  61. package/dist/r11sSnapshotParser.d.ts +1 -1
  62. package/dist/r11sSnapshotParser.d.ts.map +1 -1
  63. package/dist/r11sSnapshotParser.js.map +1 -1
  64. package/dist/restWrapper.d.ts +4 -4
  65. package/dist/restWrapper.d.ts.map +1 -1
  66. package/dist/restWrapper.js +16 -16
  67. package/dist/restWrapper.js.map +1 -1
  68. package/dist/restWrapperBase.d.ts +2 -2
  69. package/dist/restWrapperBase.d.ts.map +1 -1
  70. package/dist/restWrapperBase.js.map +1 -1
  71. package/dist/retriableGitManager.d.ts +3 -3
  72. package/dist/retriableGitManager.d.ts.map +1 -1
  73. package/dist/retriableGitManager.js +2 -2
  74. package/dist/retriableGitManager.js.map +1 -1
  75. package/dist/routerliciousResolvedUrl.d.ts +1 -1
  76. package/dist/routerliciousResolvedUrl.d.ts.map +1 -1
  77. package/dist/routerliciousResolvedUrl.js.map +1 -1
  78. package/dist/shreddedSummaryDocumentStorageService.d.ts +6 -6
  79. package/dist/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
  80. package/dist/shreddedSummaryDocumentStorageService.js +13 -13
  81. package/dist/shreddedSummaryDocumentStorageService.js.map +1 -1
  82. package/dist/storageContracts.d.ts +2 -2
  83. package/dist/storageContracts.d.ts.map +1 -1
  84. package/dist/storageContracts.js.map +1 -1
  85. package/dist/summaryTreeUploadManager.d.ts +1 -1
  86. package/dist/summaryTreeUploadManager.d.ts.map +1 -1
  87. package/dist/summaryTreeUploadManager.js +6 -6
  88. package/dist/summaryTreeUploadManager.js.map +1 -1
  89. package/dist/treeUtils.d.ts +2 -2
  90. package/dist/treeUtils.d.ts.map +1 -1
  91. package/dist/treeUtils.js +4 -4
  92. package/dist/treeUtils.js.map +1 -1
  93. package/dist/urlUtils.d.ts +1 -1
  94. package/dist/urlUtils.d.ts.map +1 -1
  95. package/dist/urlUtils.js.map +1 -1
  96. package/dist/wholeSummaryDocumentStorageService.d.ts +6 -6
  97. package/dist/wholeSummaryDocumentStorageService.d.ts.map +1 -1
  98. package/dist/wholeSummaryDocumentStorageService.js +25 -25
  99. package/dist/wholeSummaryDocumentStorageService.js.map +1 -1
  100. package/dist/wholeSummaryUploadManager.d.ts +1 -1
  101. package/dist/wholeSummaryUploadManager.d.ts.map +1 -1
  102. package/dist/wholeSummaryUploadManager.js.map +1 -1
  103. package/internal.d.ts +11 -0
  104. package/legacy.d.ts +11 -0
  105. package/lib/axios.cjs +7 -0
  106. package/lib/axios.cjs.map +1 -0
  107. package/lib/axios.d.cts +7 -0
  108. package/lib/axios.d.cts.map +1 -0
  109. package/lib/beta.d.ts +15 -0
  110. package/lib/{cache.d.mts → cache.d.ts} +1 -1
  111. package/lib/cache.d.ts.map +1 -0
  112. package/lib/{cache.mjs → cache.js} +2 -2
  113. package/lib/cache.js.map +1 -0
  114. package/lib/{contracts.d.mts → contracts.d.ts} +1 -1
  115. package/lib/contracts.d.ts.map +1 -0
  116. package/lib/{policies.mjs → contracts.js} +1 -1
  117. package/lib/contracts.js.map +1 -0
  118. package/lib/{createNewUtils.d.mts → createNewUtils.d.ts} +1 -1
  119. package/lib/createNewUtils.d.ts.map +1 -0
  120. package/lib/{createNewUtils.mjs → createNewUtils.js} +1 -1
  121. package/lib/createNewUtils.js.map +1 -0
  122. package/lib/{defaultTokenProvider.d.mts → defaultTokenProvider.d.ts} +2 -2
  123. package/lib/defaultTokenProvider.d.ts.map +1 -0
  124. package/lib/{defaultTokenProvider.mjs → defaultTokenProvider.js} +1 -1
  125. package/lib/defaultTokenProvider.js.map +1 -0
  126. package/lib/{definitions.d.mts → definitions.d.ts} +1 -1
  127. package/lib/definitions.d.ts.map +1 -0
  128. package/lib/{definitions.mjs → definitions.js} +1 -1
  129. package/lib/definitions.js.map +1 -0
  130. package/lib/{deltaStorageService.d.mts → deltaStorageService.d.ts} +4 -4
  131. package/lib/deltaStorageService.d.ts.map +1 -0
  132. package/lib/{deltaStorageService.mjs → deltaStorageService.js} +4 -4
  133. package/lib/deltaStorageService.js.map +1 -0
  134. package/lib/{documentDeltaConnection.d.mts → documentDeltaConnection.d.ts} +5 -4
  135. package/lib/documentDeltaConnection.d.ts.map +1 -0
  136. package/lib/{documentDeltaConnection.mjs → documentDeltaConnection.js} +4 -4
  137. package/lib/documentDeltaConnection.js.map +1 -0
  138. package/lib/{documentService.d.mts → documentService.d.ts} +8 -8
  139. package/lib/documentService.d.ts.map +1 -0
  140. package/lib/{documentService.mjs → documentService.js} +13 -14
  141. package/lib/documentService.js.map +1 -0
  142. package/lib/{documentServiceFactory.d.mts → documentServiceFactory.d.ts} +4 -4
  143. package/lib/documentServiceFactory.d.ts.map +1 -0
  144. package/lib/{documentServiceFactory.mjs → documentServiceFactory.js} +12 -12
  145. package/lib/documentServiceFactory.js.map +1 -0
  146. package/lib/{documentStorageService.d.mts → documentStorageService.d.ts} +9 -9
  147. package/lib/documentStorageService.d.ts.map +1 -0
  148. package/lib/{documentStorageService.mjs → documentStorageService.js} +5 -5
  149. package/lib/documentStorageService.js.map +1 -0
  150. package/lib/{errorUtils.d.mts → errorUtils.d.ts} +5 -4
  151. package/lib/errorUtils.d.ts.map +1 -0
  152. package/lib/{errorUtils.mjs → errorUtils.js} +4 -5
  153. package/lib/errorUtils.js.map +1 -0
  154. package/lib/{gitManager.d.mts → gitManager.d.ts} +4 -4
  155. package/lib/gitManager.d.ts.map +1 -0
  156. package/lib/{gitManager.mjs → gitManager.js} +1 -1
  157. package/lib/gitManager.js.map +1 -0
  158. package/lib/{historian.d.mts → historian.d.ts} +5 -5
  159. package/lib/historian.d.ts.map +1 -0
  160. package/lib/{historian.mjs → historian.js} +1 -1
  161. package/lib/historian.js.map +1 -0
  162. package/lib/{index.d.mts → index.d.ts} +7 -7
  163. package/lib/index.d.ts.map +1 -0
  164. package/lib/index.js +11 -0
  165. package/lib/index.js.map +1 -0
  166. package/lib/legacy.d.ts +18 -0
  167. package/lib/{mapWithExpiration.d.mts → mapWithExpiration.d.ts} +1 -1
  168. package/lib/mapWithExpiration.d.ts.map +1 -0
  169. package/lib/{mapWithExpiration.mjs → mapWithExpiration.js} +2 -2
  170. package/lib/mapWithExpiration.js.map +1 -0
  171. package/lib/{nullBlobStorageService.d.mts → nullBlobStorageService.d.ts} +2 -2
  172. package/lib/nullBlobStorageService.d.ts.map +1 -0
  173. package/lib/{nullBlobStorageService.mjs → nullBlobStorageService.js} +1 -1
  174. package/lib/nullBlobStorageService.js.map +1 -0
  175. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  176. package/lib/packageVersion.d.ts.map +1 -0
  177. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  178. package/lib/packageVersion.js.map +1 -0
  179. package/lib/{policies.d.mts → policies.d.ts} +1 -1
  180. package/lib/policies.d.ts.map +1 -0
  181. package/lib/{contracts.mjs → policies.js} +1 -1
  182. package/lib/policies.js.map +1 -0
  183. package/lib/public.d.ts +15 -0
  184. package/lib/{r11sSnapshotParser.d.mts → r11sSnapshotParser.d.ts} +2 -2
  185. package/lib/r11sSnapshotParser.d.ts.map +1 -0
  186. package/lib/{r11sSnapshotParser.mjs → r11sSnapshotParser.js} +1 -1
  187. package/lib/r11sSnapshotParser.js.map +1 -0
  188. package/lib/{restWrapper.d.mts → restWrapper.d.ts} +5 -5
  189. package/lib/restWrapper.d.ts.map +1 -0
  190. package/lib/{restWrapper.mjs → restWrapper.js} +8 -8
  191. package/lib/restWrapper.js.map +1 -0
  192. package/lib/{restWrapperBase.d.mts → restWrapperBase.d.ts} +3 -3
  193. package/lib/restWrapperBase.d.ts.map +1 -0
  194. package/lib/{restWrapperBase.mjs → restWrapperBase.js} +1 -1
  195. package/lib/restWrapperBase.js.map +1 -0
  196. package/lib/{retriableGitManager.d.mts → retriableGitManager.d.ts} +4 -4
  197. package/lib/retriableGitManager.d.ts.map +1 -0
  198. package/lib/{retriableGitManager.mjs → retriableGitManager.js} +2 -2
  199. package/lib/retriableGitManager.js.map +1 -0
  200. package/lib/{routerliciousResolvedUrl.d.mts → routerliciousResolvedUrl.d.ts} +2 -2
  201. package/lib/routerliciousResolvedUrl.d.ts.map +1 -0
  202. package/lib/{routerliciousResolvedUrl.mjs → routerliciousResolvedUrl.js} +1 -1
  203. package/lib/routerliciousResolvedUrl.js.map +1 -0
  204. package/lib/{shreddedSummaryDocumentStorageService.d.mts → shreddedSummaryDocumentStorageService.d.ts} +7 -7
  205. package/lib/shreddedSummaryDocumentStorageService.d.ts.map +1 -0
  206. package/lib/{shreddedSummaryDocumentStorageService.mjs → shreddedSummaryDocumentStorageService.js} +6 -6
  207. package/lib/shreddedSummaryDocumentStorageService.js.map +1 -0
  208. package/lib/{storageContracts.d.mts → storageContracts.d.ts} +3 -3
  209. package/lib/storageContracts.d.ts.map +1 -0
  210. package/lib/storageContracts.js +6 -0
  211. package/lib/storageContracts.js.map +1 -0
  212. package/lib/{summaryTreeUploadManager.d.mts → summaryTreeUploadManager.d.ts} +2 -2
  213. package/lib/summaryTreeUploadManager.d.ts.map +1 -0
  214. package/lib/{summaryTreeUploadManager.mjs → summaryTreeUploadManager.js} +3 -3
  215. package/lib/summaryTreeUploadManager.js.map +1 -0
  216. package/lib/{tokens.d.mts → tokens.d.ts} +1 -1
  217. package/lib/tokens.d.ts.map +1 -0
  218. package/lib/{tokens.mjs → tokens.js} +1 -1
  219. package/lib/tokens.js.map +1 -0
  220. package/lib/{treeUtils.d.mts → treeUtils.d.ts} +3 -3
  221. package/lib/treeUtils.d.ts.map +1 -0
  222. package/lib/{treeUtils.mjs → treeUtils.js} +2 -2
  223. package/lib/treeUtils.js.map +1 -0
  224. package/lib/{urlUtils.d.mts → urlUtils.d.ts} +2 -2
  225. package/lib/urlUtils.d.ts.map +1 -0
  226. package/lib/{urlUtils.mjs → urlUtils.js} +1 -1
  227. package/lib/urlUtils.js.map +1 -0
  228. package/lib/{wholeSummaryDocumentStorageService.d.mts → wholeSummaryDocumentStorageService.d.ts} +7 -7
  229. package/lib/wholeSummaryDocumentStorageService.d.ts.map +1 -0
  230. package/lib/{wholeSummaryDocumentStorageService.mjs → wholeSummaryDocumentStorageService.js} +9 -9
  231. package/lib/wholeSummaryDocumentStorageService.js.map +1 -0
  232. package/lib/{wholeSummaryUploadManager.d.mts → wholeSummaryUploadManager.d.ts} +2 -2
  233. package/lib/wholeSummaryUploadManager.d.ts.map +1 -0
  234. package/lib/{wholeSummaryUploadManager.mjs → wholeSummaryUploadManager.js} +1 -1
  235. package/lib/wholeSummaryUploadManager.js.map +1 -0
  236. package/package.json +50 -68
  237. package/src/axios.cts +8 -0
  238. package/src/cache.ts +1 -1
  239. package/src/defaultTokenProvider.ts +1 -1
  240. package/src/deltaStorageService.ts +11 -9
  241. package/src/documentDeltaConnection.ts +7 -5
  242. package/src/documentService.ts +26 -20
  243. package/src/documentServiceFactory.ts +19 -18
  244. package/src/documentStorageService.ts +12 -11
  245. package/src/errorUtils.ts +9 -12
  246. package/src/gitManager.ts +4 -3
  247. package/src/historian.ts +5 -4
  248. package/src/index.ts +6 -6
  249. package/src/mapWithExpiration.ts +1 -1
  250. package/src/nullBlobStorageService.ts +4 -1
  251. package/src/packageVersion.ts +1 -1
  252. package/src/r11sSnapshotParser.ts +7 -2
  253. package/src/restWrapper.ts +15 -13
  254. package/src/restWrapperBase.ts +2 -2
  255. package/src/retriableGitManager.ts +5 -4
  256. package/src/routerliciousResolvedUrl.ts +1 -1
  257. package/src/shreddedSummaryDocumentStorageService.ts +17 -16
  258. package/src/storageContracts.ts +3 -2
  259. package/src/summaryTreeUploadManager.ts +4 -3
  260. package/src/treeUtils.ts +4 -3
  261. package/src/urlUtils.ts +1 -1
  262. package/src/wholeSummaryDocumentStorageService.ts +21 -20
  263. package/src/wholeSummaryUploadManager.ts +2 -1
  264. package/tsconfig.cjs.json +7 -0
  265. package/tsconfig.json +2 -5
  266. package/api-extractor-esm.json +0 -4
  267. package/dist/routerlicious-driver-alpha.d.ts +0 -113
  268. package/dist/routerlicious-driver-beta.d.ts +0 -97
  269. package/dist/routerlicious-driver-public.d.ts +0 -97
  270. package/dist/routerlicious-driver-untrimmed.d.ts +0 -260
  271. package/lib/cache.d.mts.map +0 -1
  272. package/lib/cache.mjs.map +0 -1
  273. package/lib/contracts.d.mts.map +0 -1
  274. package/lib/contracts.mjs.map +0 -1
  275. package/lib/createNewUtils.d.mts.map +0 -1
  276. package/lib/createNewUtils.mjs.map +0 -1
  277. package/lib/defaultTokenProvider.d.mts.map +0 -1
  278. package/lib/defaultTokenProvider.mjs.map +0 -1
  279. package/lib/definitions.d.mts.map +0 -1
  280. package/lib/definitions.mjs.map +0 -1
  281. package/lib/deltaStorageService.d.mts.map +0 -1
  282. package/lib/deltaStorageService.mjs.map +0 -1
  283. package/lib/documentDeltaConnection.d.mts.map +0 -1
  284. package/lib/documentDeltaConnection.mjs.map +0 -1
  285. package/lib/documentService.d.mts.map +0 -1
  286. package/lib/documentService.mjs.map +0 -1
  287. package/lib/documentServiceFactory.d.mts.map +0 -1
  288. package/lib/documentServiceFactory.mjs.map +0 -1
  289. package/lib/documentStorageService.d.mts.map +0 -1
  290. package/lib/documentStorageService.mjs.map +0 -1
  291. package/lib/errorUtils.d.mts.map +0 -1
  292. package/lib/errorUtils.mjs.map +0 -1
  293. package/lib/gitManager.d.mts.map +0 -1
  294. package/lib/gitManager.mjs.map +0 -1
  295. package/lib/historian.d.mts.map +0 -1
  296. package/lib/historian.mjs.map +0 -1
  297. package/lib/index.d.mts.map +0 -1
  298. package/lib/index.mjs +0 -8
  299. package/lib/index.mjs.map +0 -1
  300. package/lib/mapWithExpiration.d.mts.map +0 -1
  301. package/lib/mapWithExpiration.mjs.map +0 -1
  302. package/lib/nullBlobStorageService.d.mts.map +0 -1
  303. package/lib/nullBlobStorageService.mjs.map +0 -1
  304. package/lib/packageVersion.d.mts.map +0 -1
  305. package/lib/packageVersion.mjs.map +0 -1
  306. package/lib/policies.d.mts.map +0 -1
  307. package/lib/policies.mjs.map +0 -1
  308. package/lib/r11sSnapshotParser.d.mts.map +0 -1
  309. package/lib/r11sSnapshotParser.mjs.map +0 -1
  310. package/lib/restWrapper.d.mts.map +0 -1
  311. package/lib/restWrapper.mjs.map +0 -1
  312. package/lib/restWrapperBase.d.mts.map +0 -1
  313. package/lib/restWrapperBase.mjs.map +0 -1
  314. package/lib/retriableGitManager.d.mts.map +0 -1
  315. package/lib/retriableGitManager.mjs.map +0 -1
  316. package/lib/routerlicious-driver-alpha.d.mts +0 -113
  317. package/lib/routerlicious-driver-beta.d.mts +0 -97
  318. package/lib/routerlicious-driver-public.d.mts +0 -97
  319. package/lib/routerlicious-driver-untrimmed.d.mts +0 -260
  320. package/lib/routerliciousResolvedUrl.d.mts.map +0 -1
  321. package/lib/routerliciousResolvedUrl.mjs.map +0 -1
  322. package/lib/shreddedSummaryDocumentStorageService.d.mts.map +0 -1
  323. package/lib/shreddedSummaryDocumentStorageService.mjs.map +0 -1
  324. package/lib/storageContracts.d.mts.map +0 -1
  325. package/lib/storageContracts.mjs.map +0 -1
  326. package/lib/summaryTreeUploadManager.d.mts.map +0 -1
  327. package/lib/summaryTreeUploadManager.mjs.map +0 -1
  328. package/lib/tokens.d.mts.map +0 -1
  329. package/lib/tokens.mjs.map +0 -1
  330. package/lib/treeUtils.d.mts.map +0 -1
  331. package/lib/treeUtils.mjs.map +0 -1
  332. package/lib/urlUtils.d.mts.map +0 -1
  333. package/lib/urlUtils.mjs.map +0 -1
  334. package/lib/wholeSummaryDocumentStorageService.d.mts.map +0 -1
  335. package/lib/wholeSummaryDocumentStorageService.mjs.map +0 -1
  336. package/lib/wholeSummaryUploadManager.d.mts.map +0 -1
  337. package/lib/wholeSummaryUploadManager.mjs.map +0 -1
  338. /package/{dist → lib}/tsdoc-metadata.json +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"summaryTreeUploadManager.js","sourceRoot":"","sources":["../src/summaryTreeUploadManager.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 */\n\nimport { gitHashFile, IsoBuffer, Uint8ArrayToString } from \"@fluid-internal/client-utils\";\nimport { assert, unreachableCase } from \"@fluidframework/core-utils\";\nimport { ICreateTreeEntry } from \"@fluidframework/gitresources\";\nimport { getGitMode, getGitType } from \"@fluidframework/protocol-base\";\nimport {\n\tISnapshotTreeEx,\n\tISummaryTree,\n\tSummaryObject,\n\tSummaryType,\n} from \"@fluidframework/protocol-definitions\";\nimport { IWholeSummaryPayloadType } from \"@fluidframework/server-services-client\";\nimport { IGitManager, ISummaryUploadManager } from \"./storageContracts\";\n\n/**\n * Recursively writes summary tree as individual summary blobs.\n */\nexport class SummaryTreeUploadManager implements ISummaryUploadManager {\n\tconstructor(\n\t\tprivate readonly manager: IGitManager,\n\t\tprivate readonly blobsShaCache: Map<string, string>,\n\t\tprivate readonly getPreviousFullSnapshot: (\n\t\t\tparentHandle: string,\n\t\t) => Promise<ISnapshotTreeEx | null | undefined>,\n\t) {}\n\n\tpublic async writeSummaryTree(\n\t\tsummaryTree: ISummaryTree,\n\t\tparentHandle: string,\n\t\tsummaryType: IWholeSummaryPayloadType,\n\t\tsequenceNumber?: number,\n\t\tinitial?: boolean,\n\t): Promise<string> {\n\t\tconst previousFullSnapshot = await this.getPreviousFullSnapshot(parentHandle);\n\t\treturn this.writeSummaryTreeCore(summaryTree, previousFullSnapshot ?? undefined);\n\t}\n\n\tprivate async writeSummaryTreeCore(\n\t\tsummaryTree: ISummaryTree,\n\t\tpreviousFullSnapshot: ISnapshotTreeEx | undefined,\n\t): Promise<string> {\n\t\tconst entries = await Promise.all(\n\t\t\tObject.keys(summaryTree.tree).map(async (key) => {\n\t\t\t\tconst entry = summaryTree.tree[key];\n\t\t\t\tconst pathHandle = await this.writeSummaryTreeObject(entry, previousFullSnapshot);\n\t\t\t\tconst treeEntry: ICreateTreeEntry = {\n\t\t\t\t\tmode: getGitMode(entry),\n\t\t\t\t\tpath: encodeURIComponent(key),\n\t\t\t\t\tsha: pathHandle,\n\t\t\t\t\ttype: getGitType(entry),\n\t\t\t\t};\n\t\t\t\treturn treeEntry;\n\t\t\t}),\n\t\t);\n\n\t\tconst treeHandle = (await this.manager.createGitTree({ tree: entries })).content;\n\t\treturn treeHandle.sha;\n\t}\n\n\tprivate async writeSummaryTreeObject(\n\t\tobject: SummaryObject,\n\t\tpreviousFullSnapshot: ISnapshotTreeEx | undefined,\n\t): Promise<string> {\n\t\tswitch (object.type) {\n\t\t\tcase SummaryType.Blob: {\n\t\t\t\treturn this.writeSummaryBlob(object.content);\n\t\t\t}\n\t\t\tcase SummaryType.Handle: {\n\t\t\t\tif (previousFullSnapshot === undefined) {\n\t\t\t\t\tthrow Error(\"Parent summary does not exist to reference by handle.\");\n\t\t\t\t}\n\t\t\t\treturn this.getIdFromPath(object.handleType, object.handle, previousFullSnapshot);\n\t\t\t}\n\t\t\tcase SummaryType.Tree: {\n\t\t\t\treturn this.writeSummaryTreeCore(object, previousFullSnapshot);\n\t\t\t}\n\t\t\tcase SummaryType.Attachment: {\n\t\t\t\treturn object.id;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tunreachableCase(object, `Unknown type: ${(object as any).type}`);\n\t\t}\n\t}\n\n\tprivate async writeSummaryBlob(content: string | Uint8Array): Promise<string> {\n\t\tconst { parsedContent, encoding } =\n\t\t\ttypeof content === \"string\"\n\t\t\t\t? { parsedContent: content, encoding: \"utf-8\" }\n\t\t\t\t: { parsedContent: Uint8ArrayToString(content, \"base64\"), encoding: \"base64\" };\n\n\t\t// The gitHashFile would return the same hash as returned by the server as blob.sha\n\t\tconst hash = await gitHashFile(IsoBuffer.from(parsedContent, encoding));\n\t\tif (!this.blobsShaCache.has(hash)) {\n\t\t\tthis.blobsShaCache.set(hash, \"\");\n\t\t\tconst blob = (await this.manager.createBlob(parsedContent, encoding)).content;\n\t\t\tassert(hash === blob.sha, 0x0b6 /* \"Blob.sha and hash do not match!!\" */);\n\t\t}\n\t\treturn hash;\n\t}\n\n\tprivate getIdFromPath(\n\t\thandleType: SummaryType,\n\t\thandlePath: string,\n\t\tpreviousFullSnapshot: ISnapshotTreeEx,\n\t): string {\n\t\tconst path = handlePath.split(\"/\").map((part) => decodeURIComponent(part));\n\t\tif (path[0] === \"\") {\n\t\t\t// root of tree should be unnamed\n\t\t\tpath.shift();\n\t\t}\n\t\tif (path.length === 0) {\n\t\t\treturn previousFullSnapshot.id;\n\t\t}\n\n\t\treturn this.getIdFromPathCore(handleType, path, previousFullSnapshot);\n\t}\n\n\tprivate getIdFromPathCore(\n\t\thandleType: SummaryType,\n\t\tpath: string[],\n\t\t/** Previous snapshot, subtree relative to this path part */\n\t\tpreviousSnapshot: ISnapshotTreeEx,\n\t): string {\n\t\tassert(path.length > 0, 0x0b3 /* \"Expected at least 1 path part\" */);\n\t\tconst key = path[0];\n\t\tif (path.length === 1) {\n\t\t\tswitch (handleType) {\n\t\t\t\tcase SummaryType.Blob: {\n\t\t\t\t\tconst tryId = previousSnapshot.blobs[key];\n\t\t\t\t\tassert(\n\t\t\t\t\t\t!!tryId,\n\t\t\t\t\t\t0x0b4 /* \"Parent summary does not have blob handle for specified path.\" */,\n\t\t\t\t\t);\n\t\t\t\t\treturn tryId;\n\t\t\t\t}\n\t\t\t\tcase SummaryType.Tree: {\n\t\t\t\t\tconst tryId = previousSnapshot.trees[key]?.id;\n\t\t\t\t\tassert(\n\t\t\t\t\t\t!!tryId,\n\t\t\t\t\t\t0x0b5 /* \"Parent summary does not have tree handle for specified path.\" */,\n\t\t\t\t\t);\n\t\t\t\t\treturn tryId;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tthrow Error(`Unexpected handle summary object type: \"${handleType}\".`);\n\t\t\t}\n\t\t}\n\t\treturn this.getIdFromPathCore(handleType, path.slice(1), previousSnapshot.trees[key]);\n\t}\n}\n"]}
1
+ {"version":3,"file":"summaryTreeUploadManager.js","sourceRoot":"","sources":["../src/summaryTreeUploadManager.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 */\n\nimport { IsoBuffer, Uint8ArrayToString, gitHashFile } from \"@fluid-internal/client-utils\";\nimport { assert, unreachableCase } from \"@fluidframework/core-utils/internal\";\nimport { ICreateTreeEntry } from \"@fluidframework/gitresources\";\nimport { getGitMode, getGitType } from \"@fluidframework/protocol-base\";\nimport {\n\tISnapshotTreeEx,\n\tISummaryTree,\n\tSummaryObject,\n\tSummaryType,\n} from \"@fluidframework/protocol-definitions\";\nimport { IWholeSummaryPayloadType } from \"@fluidframework/server-services-client\";\n\nimport { IGitManager, ISummaryUploadManager } from \"./storageContracts.js\";\n\n/**\n * Recursively writes summary tree as individual summary blobs.\n */\nexport class SummaryTreeUploadManager implements ISummaryUploadManager {\n\tconstructor(\n\t\tprivate readonly manager: IGitManager,\n\t\tprivate readonly blobsShaCache: Map<string, string>,\n\t\tprivate readonly getPreviousFullSnapshot: (\n\t\t\tparentHandle: string,\n\t\t) => Promise<ISnapshotTreeEx | null | undefined>,\n\t) {}\n\n\tpublic async writeSummaryTree(\n\t\tsummaryTree: ISummaryTree,\n\t\tparentHandle: string,\n\t\tsummaryType: IWholeSummaryPayloadType,\n\t\tsequenceNumber?: number,\n\t\tinitial?: boolean,\n\t): Promise<string> {\n\t\tconst previousFullSnapshot = await this.getPreviousFullSnapshot(parentHandle);\n\t\treturn this.writeSummaryTreeCore(summaryTree, previousFullSnapshot ?? undefined);\n\t}\n\n\tprivate async writeSummaryTreeCore(\n\t\tsummaryTree: ISummaryTree,\n\t\tpreviousFullSnapshot: ISnapshotTreeEx | undefined,\n\t): Promise<string> {\n\t\tconst entries = await Promise.all(\n\t\t\tObject.keys(summaryTree.tree).map(async (key) => {\n\t\t\t\tconst entry = summaryTree.tree[key];\n\t\t\t\tconst pathHandle = await this.writeSummaryTreeObject(entry, previousFullSnapshot);\n\t\t\t\tconst treeEntry: ICreateTreeEntry = {\n\t\t\t\t\tmode: getGitMode(entry),\n\t\t\t\t\tpath: encodeURIComponent(key),\n\t\t\t\t\tsha: pathHandle,\n\t\t\t\t\ttype: getGitType(entry),\n\t\t\t\t};\n\t\t\t\treturn treeEntry;\n\t\t\t}),\n\t\t);\n\n\t\tconst treeHandle = (await this.manager.createGitTree({ tree: entries })).content;\n\t\treturn treeHandle.sha;\n\t}\n\n\tprivate async writeSummaryTreeObject(\n\t\tobject: SummaryObject,\n\t\tpreviousFullSnapshot: ISnapshotTreeEx | undefined,\n\t): Promise<string> {\n\t\tswitch (object.type) {\n\t\t\tcase SummaryType.Blob: {\n\t\t\t\treturn this.writeSummaryBlob(object.content);\n\t\t\t}\n\t\t\tcase SummaryType.Handle: {\n\t\t\t\tif (previousFullSnapshot === undefined) {\n\t\t\t\t\tthrow Error(\"Parent summary does not exist to reference by handle.\");\n\t\t\t\t}\n\t\t\t\treturn this.getIdFromPath(object.handleType, object.handle, previousFullSnapshot);\n\t\t\t}\n\t\t\tcase SummaryType.Tree: {\n\t\t\t\treturn this.writeSummaryTreeCore(object, previousFullSnapshot);\n\t\t\t}\n\t\t\tcase SummaryType.Attachment: {\n\t\t\t\treturn object.id;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tunreachableCase(object, `Unknown type: ${(object as any).type}`);\n\t\t}\n\t}\n\n\tprivate async writeSummaryBlob(content: string | Uint8Array): Promise<string> {\n\t\tconst { parsedContent, encoding } =\n\t\t\ttypeof content === \"string\"\n\t\t\t\t? { parsedContent: content, encoding: \"utf-8\" }\n\t\t\t\t: { parsedContent: Uint8ArrayToString(content, \"base64\"), encoding: \"base64\" };\n\n\t\t// The gitHashFile would return the same hash as returned by the server as blob.sha\n\t\tconst hash = await gitHashFile(IsoBuffer.from(parsedContent, encoding));\n\t\tif (!this.blobsShaCache.has(hash)) {\n\t\t\tthis.blobsShaCache.set(hash, \"\");\n\t\t\tconst blob = (await this.manager.createBlob(parsedContent, encoding)).content;\n\t\t\tassert(hash === blob.sha, 0x0b6 /* \"Blob.sha and hash do not match!!\" */);\n\t\t}\n\t\treturn hash;\n\t}\n\n\tprivate getIdFromPath(\n\t\thandleType: SummaryType,\n\t\thandlePath: string,\n\t\tpreviousFullSnapshot: ISnapshotTreeEx,\n\t): string {\n\t\tconst path = handlePath.split(\"/\").map((part) => decodeURIComponent(part));\n\t\tif (path[0] === \"\") {\n\t\t\t// root of tree should be unnamed\n\t\t\tpath.shift();\n\t\t}\n\t\tif (path.length === 0) {\n\t\t\treturn previousFullSnapshot.id;\n\t\t}\n\n\t\treturn this.getIdFromPathCore(handleType, path, previousFullSnapshot);\n\t}\n\n\tprivate getIdFromPathCore(\n\t\thandleType: SummaryType,\n\t\tpath: string[],\n\t\t/** Previous snapshot, subtree relative to this path part */\n\t\tpreviousSnapshot: ISnapshotTreeEx,\n\t): string {\n\t\tassert(path.length > 0, 0x0b3 /* \"Expected at least 1 path part\" */);\n\t\tconst key = path[0];\n\t\tif (path.length === 1) {\n\t\t\tswitch (handleType) {\n\t\t\t\tcase SummaryType.Blob: {\n\t\t\t\t\tconst tryId = previousSnapshot.blobs[key];\n\t\t\t\t\tassert(\n\t\t\t\t\t\t!!tryId,\n\t\t\t\t\t\t0x0b4 /* \"Parent summary does not have blob handle for specified path.\" */,\n\t\t\t\t\t);\n\t\t\t\t\treturn tryId;\n\t\t\t\t}\n\t\t\t\tcase SummaryType.Tree: {\n\t\t\t\t\tconst tryId = previousSnapshot.trees[key]?.id;\n\t\t\t\t\tassert(\n\t\t\t\t\t\t!!tryId,\n\t\t\t\t\t\t0x0b5 /* \"Parent summary does not have tree handle for specified path.\" */,\n\t\t\t\t\t);\n\t\t\t\t\treturn tryId;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tthrow Error(`Unexpected handle summary object type: \"${handleType}\".`);\n\t\t\t}\n\t\t}\n\t\treturn this.getIdFromPathCore(handleType, path.slice(1), previousSnapshot.trees[key]);\n\t}\n}\n"]}
@@ -2,8 +2,8 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { SummaryType, ISnapshotTree, ISummaryTree } from "@fluidframework/protocol-definitions";
6
- import { INormalizedWholeSnapshot } from "./contracts";
5
+ import { ISnapshotTree, ISummaryTree, SummaryType } from "@fluidframework/protocol-definitions";
6
+ import { INormalizedWholeSnapshot } from "./contracts.js";
7
7
  /**
8
8
  * Summary tree assembler props
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"treeUtils.d.ts","sourceRoot":"","sources":["../src/treeUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACN,WAAW,EACX,aAAa,EACb,YAAY,EAEZ,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IAC1C;;OAEG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAIpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAHnC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyC;gBAExC,KAAK,CAAC,wCAA4B;IAE/D;;OAEG;IACH,IAAW,OAAO,IAAI,YAAY,CAOjC;IAED;;OAEG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAO/D;;OAEG;IACI,SAAS,CACf,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,UAAU,EACxE,MAAM,EAAE,MAAM,GACZ,IAAI;IAQP;;OAEG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAIxD;;OAEG;IACI,aAAa,CAAC,EAAE,EAAE,MAAM;CAG/B;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CACnD,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAC7B,YAAY,CAed;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,wBAAwB;;;;EAQnE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,QAS5D"}
1
+ {"version":3,"file":"treeUtils.d.ts","sourceRoot":"","sources":["../src/treeUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACN,aAAa,EACb,YAAY,EAEZ,WAAW,EACX,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,0BAA0B;IAC1C;;OAEG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAIpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAHnC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyC;gBAExC,KAAK,CAAC,wCAA4B;IAE/D;;OAEG;IACH,IAAW,OAAO,IAAI,YAAY,CAOjC;IAED;;OAEG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAO/D;;OAEG;IACI,SAAS,CACf,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,UAAU,EACxE,MAAM,EAAE,MAAM,GACZ,IAAI;IAQP;;OAEG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAIxD;;OAEG;IACI,aAAa,CAAC,EAAE,EAAE,MAAM;CAG/B;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CACnD,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAC7B,YAAY,CAed;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,wBAAwB;;;;EAQnE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,QAS5D"}
package/dist/treeUtils.js CHANGED
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.validateBlobsAndTrees = exports.evalBlobsAndTrees = exports.convertSnapshotAndBlobsToSummaryTree = exports.SummaryTreeAssembler = void 0;
8
8
  const client_utils_1 = require("@fluid-internal/client-utils");
9
- const core_utils_1 = require("@fluidframework/core-utils");
9
+ const internal_1 = require("@fluidframework/core-utils/internal");
10
10
  const protocol_definitions_1 = require("@fluidframework/protocol-definitions");
11
11
  /**
12
12
  * Summary tree assembler (without stats collection).
@@ -74,7 +74,7 @@ function convertSnapshotAndBlobsToSummaryTree(snapshot, blobs) {
74
74
  });
75
75
  for (const [path, id] of Object.entries(snapshot.blobs)) {
76
76
  const blob = blobs.get(id);
77
- (0, core_utils_1.assert)(blob !== undefined, 0x2dd /* "Cannot find blob for a given id" */);
77
+ (0, internal_1.assert)(blob !== undefined, 0x2dd /* "Cannot find blob for a given id" */);
78
78
  assembler.addBlob(path, client_utils_1.IsoBuffer.from(blob).toString("utf-8"));
79
79
  }
80
80
  for (const [key, tree] of Object.entries(snapshot.trees)) {
@@ -95,8 +95,8 @@ function evalBlobsAndTrees(snapshot) {
95
95
  }
96
96
  exports.evalBlobsAndTrees = evalBlobsAndTrees;
97
97
  function validateBlobsAndTrees(snapshot) {
98
- (0, core_utils_1.assert)(snapshot.trees !== undefined, 0x5d0 /* Returned r11s snapshot is malformed. No trees! */);
99
- (0, core_utils_1.assert)(snapshot.blobs !== undefined, 0x5d1 /* Returned r11s snapshot is malformed. No blobs! */);
98
+ (0, internal_1.assert)(snapshot.trees !== undefined, 0x5d0 /* Returned r11s snapshot is malformed. No trees! */);
99
+ (0, internal_1.assert)(snapshot.blobs !== undefined, 0x5d1 /* Returned r11s snapshot is malformed. No blobs! */);
100
100
  }
101
101
  exports.validateBlobsAndTrees = validateBlobsAndTrees;
102
102
  function countTreesInSnapshotTree(snapshotTree) {
@@ -1 +1 @@
1
- {"version":3,"file":"treeUtils.js","sourceRoot":"","sources":["../src/treeUtils.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 */\n\nimport { IsoBuffer } from \"@fluid-internal/client-utils\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport {\n\tSummaryType,\n\tISnapshotTree,\n\tISummaryTree,\n\tSummaryObject,\n} from \"@fluidframework/protocol-definitions\";\nimport { INormalizedWholeSnapshot } from \"./contracts\";\n\n/**\n * Summary tree assembler props\n */\nexport interface ISummaryTreeAssemblerProps {\n\t/**\n\t * Indicates that this tree is unreferenced. If this is not present, the tree is considered referenced.\n\t */\n\tunreferenced?: true;\n\tgroupId?: string;\n}\n\n/**\n * Summary tree assembler (without stats collection).\n */\nexport class SummaryTreeAssembler {\n\tprivate attachmentCounter: number = 0;\n\tprivate readonly summaryTree: { [path: string]: SummaryObject } = {};\n\n\tconstructor(private readonly props?: ISummaryTreeAssemblerProps) {}\n\n\t/**\n\t * Get final summary\n\t */\n\tpublic get summary(): ISummaryTree {\n\t\treturn {\n\t\t\ttype: SummaryType.Tree,\n\t\t\ttree: { ...this.summaryTree },\n\t\t\tunreferenced: this.props?.unreferenced,\n\t\t\tgroupId: this.props?.groupId,\n\t\t};\n\t}\n\n\t/**\n\t * Add blob to summary\n\t */\n\tpublic addBlob(key: string, content: string | Uint8Array): void {\n\t\tthis.summaryTree[key] = {\n\t\t\ttype: SummaryType.Blob,\n\t\t\tcontent,\n\t\t};\n\t}\n\n\t/**\n\t * Add handle to summary\n\t */\n\tpublic addHandle(\n\t\tkey: string,\n\t\thandleType: SummaryType.Tree | SummaryType.Blob | SummaryType.Attachment,\n\t\thandle: string,\n\t): void {\n\t\tthis.summaryTree[key] = {\n\t\t\ttype: SummaryType.Handle,\n\t\t\thandleType,\n\t\t\thandle,\n\t\t};\n\t}\n\n\t/**\n\t * Add tree to summary\n\t */\n\tpublic addTree(key: string, summary: ISummaryTree): void {\n\t\tthis.summaryTree[key] = summary;\n\t}\n\n\t/**\n\t * Add attachment to summary\n\t */\n\tpublic addAttachment(id: string) {\n\t\tthis.summaryTree[this.attachmentCounter++] = { id, type: SummaryType.Attachment };\n\t}\n}\n\n/**\n * Helper function that converts ISnapshotTree and blobs to ISummaryTree\n * @param snapshot - Source snapshot tree\n * @param blobs - Blobs cache\n * @returns Converted snapshot in ISummaryTree format\n */\nexport function convertSnapshotAndBlobsToSummaryTree(\n\tsnapshot: ISnapshotTree,\n\tblobs: Map<string, ArrayBuffer>,\n): ISummaryTree {\n\tconst assembler = new SummaryTreeAssembler({\n\t\tunreferenced: snapshot.unreferenced,\n\t\tgroupId: snapshot.groupId,\n\t});\n\tfor (const [path, id] of Object.entries(snapshot.blobs)) {\n\t\tconst blob = blobs.get(id);\n\t\tassert(blob !== undefined, 0x2dd /* \"Cannot find blob for a given id\" */);\n\t\tassembler.addBlob(path, IsoBuffer.from(blob).toString(\"utf-8\"));\n\t}\n\tfor (const [key, tree] of Object.entries(snapshot.trees)) {\n\t\tconst subtree = convertSnapshotAndBlobsToSummaryTree(tree, blobs);\n\t\tassembler.addTree(key, subtree);\n\t}\n\treturn assembler.summary;\n}\n\nexport function evalBlobsAndTrees(snapshot: INormalizedWholeSnapshot) {\n\tconst trees = countTreesInSnapshotTree(snapshot.snapshotTree);\n\tconst numBlobs = snapshot.blobs.size;\n\tlet encodedBlobsSize = 0;\n\tfor (const [_, blobContent] of snapshot.blobs) {\n\t\tencodedBlobsSize += blobContent.byteLength;\n\t}\n\treturn { trees, numBlobs, encodedBlobsSize };\n}\n\nexport function validateBlobsAndTrees(snapshot: ISnapshotTree) {\n\tassert(\n\t\tsnapshot.trees !== undefined,\n\t\t0x5d0 /* Returned r11s snapshot is malformed. No trees! */,\n\t);\n\tassert(\n\t\tsnapshot.blobs !== undefined,\n\t\t0x5d1 /* Returned r11s snapshot is malformed. No blobs! */,\n\t);\n}\n\nfunction countTreesInSnapshotTree(snapshotTree: ISnapshotTree): number {\n\tlet numTrees = 0;\n\tfor (const [_, tree] of Object.entries(snapshotTree.trees)) {\n\t\tnumTrees += 1 + countTreesInSnapshotTree(tree);\n\t}\n\treturn numTrees;\n}\n"]}
1
+ {"version":3,"file":"treeUtils.js","sourceRoot":"","sources":["../src/treeUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+DAAyD;AACzD,kEAA6D;AAC7D,+EAK8C;AAe9C;;GAEG;AACH,MAAa,oBAAoB;IAIhC,YAA6B,KAAkC;QAAlC,UAAK,GAAL,KAAK,CAA6B;QAHvD,sBAAiB,GAAW,CAAC,CAAC;QACrB,gBAAW,GAAsC,EAAE,CAAC;IAEH,CAAC;IAEnE;;OAEG;IACH,IAAW,OAAO;QACjB,OAAO;YACN,IAAI,EAAE,kCAAW,CAAC,IAAI;YACtB,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;YAC7B,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY;YACtC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO;SAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,GAAW,EAAE,OAA4B;QACvD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG;YACvB,IAAI,EAAE,kCAAW,CAAC,IAAI;YACtB,OAAO;SACP,CAAC;IACH,CAAC;IAED;;OAEG;IACI,SAAS,CACf,GAAW,EACX,UAAwE,EACxE,MAAc;QAEd,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG;YACvB,IAAI,EAAE,kCAAW,CAAC,MAAM;YACxB,UAAU;YACV,MAAM;SACN,CAAC;IACH,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,GAAW,EAAE,OAAqB;QAChD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,EAAU;QAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,kCAAW,CAAC,UAAU,EAAE,CAAC;IACnF,CAAC;CACD;AAxDD,oDAwDC;AAED;;;;;GAKG;AACH,SAAgB,oCAAoC,CACnD,QAAuB,EACvB,KAA+B;IAE/B,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;QAC1C,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,OAAO,EAAE,QAAQ,CAAC,OAAO;KACzB,CAAC,CAAC;IACH,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAA,iBAAM,EAAC,IAAI,KAAK,SAAS,EAAE,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC1E,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,wBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;KAChE;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACzD,MAAM,OAAO,GAAG,oCAAoC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClE,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;KAChC;IACD,OAAO,SAAS,CAAC,OAAO,CAAC;AAC1B,CAAC;AAlBD,oFAkBC;AAED,SAAgB,iBAAiB,CAAC,QAAkC;IACnE,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACrC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE;QAC9C,gBAAgB,IAAI,WAAW,CAAC,UAAU,CAAC;KAC3C;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;AAC9C,CAAC;AARD,8CAQC;AAED,SAAgB,qBAAqB,CAAC,QAAuB;IAC5D,IAAA,iBAAM,EACL,QAAQ,CAAC,KAAK,KAAK,SAAS,EAC5B,KAAK,CAAC,oDAAoD,CAC1D,CAAC;IACF,IAAA,iBAAM,EACL,QAAQ,CAAC,KAAK,KAAK,SAAS,EAC5B,KAAK,CAAC,oDAAoD,CAC1D,CAAC;AACH,CAAC;AATD,sDASC;AAED,SAAS,wBAAwB,CAAC,YAA2B;IAC5D,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QAC3D,QAAQ,IAAI,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;KAC/C;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IsoBuffer } from \"@fluid-internal/client-utils\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tISnapshotTree,\n\tISummaryTree,\n\tSummaryObject,\n\tSummaryType,\n} from \"@fluidframework/protocol-definitions\";\n\nimport { INormalizedWholeSnapshot } from \"./contracts.js\";\n\n/**\n * Summary tree assembler props\n */\nexport interface ISummaryTreeAssemblerProps {\n\t/**\n\t * Indicates that this tree is unreferenced. If this is not present, the tree is considered referenced.\n\t */\n\tunreferenced?: true;\n\tgroupId?: string;\n}\n\n/**\n * Summary tree assembler (without stats collection).\n */\nexport class SummaryTreeAssembler {\n\tprivate attachmentCounter: number = 0;\n\tprivate readonly summaryTree: { [path: string]: SummaryObject } = {};\n\n\tconstructor(private readonly props?: ISummaryTreeAssemblerProps) {}\n\n\t/**\n\t * Get final summary\n\t */\n\tpublic get summary(): ISummaryTree {\n\t\treturn {\n\t\t\ttype: SummaryType.Tree,\n\t\t\ttree: { ...this.summaryTree },\n\t\t\tunreferenced: this.props?.unreferenced,\n\t\t\tgroupId: this.props?.groupId,\n\t\t};\n\t}\n\n\t/**\n\t * Add blob to summary\n\t */\n\tpublic addBlob(key: string, content: string | Uint8Array): void {\n\t\tthis.summaryTree[key] = {\n\t\t\ttype: SummaryType.Blob,\n\t\t\tcontent,\n\t\t};\n\t}\n\n\t/**\n\t * Add handle to summary\n\t */\n\tpublic addHandle(\n\t\tkey: string,\n\t\thandleType: SummaryType.Tree | SummaryType.Blob | SummaryType.Attachment,\n\t\thandle: string,\n\t): void {\n\t\tthis.summaryTree[key] = {\n\t\t\ttype: SummaryType.Handle,\n\t\t\thandleType,\n\t\t\thandle,\n\t\t};\n\t}\n\n\t/**\n\t * Add tree to summary\n\t */\n\tpublic addTree(key: string, summary: ISummaryTree): void {\n\t\tthis.summaryTree[key] = summary;\n\t}\n\n\t/**\n\t * Add attachment to summary\n\t */\n\tpublic addAttachment(id: string) {\n\t\tthis.summaryTree[this.attachmentCounter++] = { id, type: SummaryType.Attachment };\n\t}\n}\n\n/**\n * Helper function that converts ISnapshotTree and blobs to ISummaryTree\n * @param snapshot - Source snapshot tree\n * @param blobs - Blobs cache\n * @returns Converted snapshot in ISummaryTree format\n */\nexport function convertSnapshotAndBlobsToSummaryTree(\n\tsnapshot: ISnapshotTree,\n\tblobs: Map<string, ArrayBuffer>,\n): ISummaryTree {\n\tconst assembler = new SummaryTreeAssembler({\n\t\tunreferenced: snapshot.unreferenced,\n\t\tgroupId: snapshot.groupId,\n\t});\n\tfor (const [path, id] of Object.entries(snapshot.blobs)) {\n\t\tconst blob = blobs.get(id);\n\t\tassert(blob !== undefined, 0x2dd /* \"Cannot find blob for a given id\" */);\n\t\tassembler.addBlob(path, IsoBuffer.from(blob).toString(\"utf-8\"));\n\t}\n\tfor (const [key, tree] of Object.entries(snapshot.trees)) {\n\t\tconst subtree = convertSnapshotAndBlobsToSummaryTree(tree, blobs);\n\t\tassembler.addTree(key, subtree);\n\t}\n\treturn assembler.summary;\n}\n\nexport function evalBlobsAndTrees(snapshot: INormalizedWholeSnapshot) {\n\tconst trees = countTreesInSnapshotTree(snapshot.snapshotTree);\n\tconst numBlobs = snapshot.blobs.size;\n\tlet encodedBlobsSize = 0;\n\tfor (const [_, blobContent] of snapshot.blobs) {\n\t\tencodedBlobsSize += blobContent.byteLength;\n\t}\n\treturn { trees, numBlobs, encodedBlobsSize };\n}\n\nexport function validateBlobsAndTrees(snapshot: ISnapshotTree) {\n\tassert(\n\t\tsnapshot.trees !== undefined,\n\t\t0x5d0 /* Returned r11s snapshot is malformed. No trees! */,\n\t);\n\tassert(\n\t\tsnapshot.blobs !== undefined,\n\t\t0x5d1 /* Returned r11s snapshot is malformed. No blobs! */,\n\t);\n}\n\nfunction countTreesInSnapshotTree(snapshotTree: ISnapshotTree): number {\n\tlet numTrees = 0;\n\tfor (const [_, tree] of Object.entries(snapshotTree.trees)) {\n\t\tnumTrees += 1 + countTreesInSnapshotTree(tree);\n\t}\n\treturn numTrees;\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { IResolvedUrl } from "@fluidframework/driver-definitions";
5
+ import { IResolvedUrl } from "@fluidframework/driver-definitions/internal";
6
6
  import { ISession } from "@fluidframework/server-services-client";
7
7
  /**
8
8
  * Assume documentId is at end of url path.
@@ -1 +1 @@
1
- {"version":3,"file":"urlUtils.d.ts","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAElE;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,YAAa,MAAM,cAAc,MAAM,KAAG,MACf,CAAC;AAEhE,eAAO,MAAM,6BAA6B,gBAC5B,YAAY,WAChB,QAAQ,KACf,YAuBF,CAAC"}
1
+ {"version":3,"file":"urlUtils.d.ts","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAElE;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,YAAa,MAAM,cAAc,MAAM,KAAG,MACf,CAAC;AAEhE,eAAO,MAAM,6BAA6B,gBAC5B,YAAY,WAChB,QAAQ,KACf,YAuBF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"urlUtils.js","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAKH;;;;;GAKG;AACI,MAAM,uBAAuB,GAAG,CAAC,OAAe,EAAE,UAAkB,EAAU,EAAE,CACtF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AADnD,QAAA,uBAAuB,2BAC4B;AAEzD,MAAM,6BAA6B,GAAG,CAC5C,WAAyB,EACzB,OAAiB,EACF,EAAE;IACjB,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACvE,eAAe,CAAC,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC;IAEjD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7D,UAAU,CAAC,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC;IAE5C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,qBAAqB,GAAiB;QAC3C,SAAS,EAAE;YACV,eAAe,EAAE,eAAe,CAAC,QAAQ,EAAE;YAC3C,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE;SACjC;QACD,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,GAAG,EAAE,IAAI,GAAG,CAAC,WAAW,oBAAoB,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;KACpF,CAAC;IACF,OAAO,qBAAqB,CAAC;AAC9B,CAAC,CAAC;AA1BW,QAAA,6BAA6B,iCA0BxC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IResolvedUrl } from \"@fluidframework/driver-definitions\";\nimport { ISession } from \"@fluidframework/server-services-client\";\n\n/**\n * Assume documentId is at end of url path.\n * This is true for Routerlicious' and Tinylicious' documentUrl and deltaStorageUrl.\n * Routerlicious and Tinylicious do not use documentId in storageUrl nor ordererUrl.\n * TODO: Ideally we would be able to regenerate the resolvedUrl, rather than patching the current one.\n */\nexport const replaceDocumentIdInPath = (urlPath: string, documentId: string): string =>\n\turlPath.split(\"/\").slice(0, -1).concat([documentId]).join(\"/\");\n\nexport const getDiscoveredFluidResolvedUrl = (\n\tresolvedUrl: IResolvedUrl,\n\tsession: ISession,\n): IResolvedUrl => {\n\tconst discoveredOrdererUrl = new URL(session.ordererUrl);\n\tconst deltaStorageUrl = new URL(resolvedUrl.endpoints.deltaStorageUrl);\n\tdeltaStorageUrl.host = discoveredOrdererUrl.host;\n\n\tconst discoveredStorageUrl = new URL(session.historianUrl);\n\tconst storageUrl = new URL(resolvedUrl.endpoints.storageUrl);\n\tstorageUrl.host = discoveredStorageUrl.host;\n\n\tconst parsedUrl = new URL(resolvedUrl.url);\n\tconst discoveredResolvedUrl: IResolvedUrl = {\n\t\tendpoints: {\n\t\t\tdeltaStorageUrl: deltaStorageUrl.toString(),\n\t\t\tordererUrl: session.ordererUrl,\n\t\t\tdeltaStreamUrl: session.deltaStreamUrl,\n\t\t\tstorageUrl: storageUrl.toString(),\n\t\t},\n\t\tid: resolvedUrl.id,\n\t\ttokens: resolvedUrl.tokens,\n\t\ttype: resolvedUrl.type,\n\t\turl: new URL(`https://${discoveredOrdererUrl.host}${parsedUrl.pathname}`).toString(),\n\t};\n\treturn discoveredResolvedUrl;\n};\n"]}
1
+ {"version":3,"file":"urlUtils.js","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAKH;;;;;GAKG;AACI,MAAM,uBAAuB,GAAG,CAAC,OAAe,EAAE,UAAkB,EAAU,EAAE,CACtF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AADnD,QAAA,uBAAuB,2BAC4B;AAEzD,MAAM,6BAA6B,GAAG,CAC5C,WAAyB,EACzB,OAAiB,EACF,EAAE;IACjB,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACvE,eAAe,CAAC,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC;IAEjD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7D,UAAU,CAAC,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC;IAE5C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,qBAAqB,GAAiB;QAC3C,SAAS,EAAE;YACV,eAAe,EAAE,eAAe,CAAC,QAAQ,EAAE;YAC3C,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE;SACjC;QACD,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,GAAG,EAAE,IAAI,GAAG,CAAC,WAAW,oBAAoB,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;KACpF,CAAC;IACF,OAAO,qBAAqB,CAAC;AAC9B,CAAC,CAAC;AA1BW,QAAA,6BAA6B,iCA0BxC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IResolvedUrl } from \"@fluidframework/driver-definitions/internal\";\nimport { ISession } from \"@fluidframework/server-services-client\";\n\n/**\n * Assume documentId is at end of url path.\n * This is true for Routerlicious' and Tinylicious' documentUrl and deltaStorageUrl.\n * Routerlicious and Tinylicious do not use documentId in storageUrl nor ordererUrl.\n * TODO: Ideally we would be able to regenerate the resolvedUrl, rather than patching the current one.\n */\nexport const replaceDocumentIdInPath = (urlPath: string, documentId: string): string =>\n\turlPath.split(\"/\").slice(0, -1).concat([documentId]).join(\"/\");\n\nexport const getDiscoveredFluidResolvedUrl = (\n\tresolvedUrl: IResolvedUrl,\n\tsession: ISession,\n): IResolvedUrl => {\n\tconst discoveredOrdererUrl = new URL(session.ordererUrl);\n\tconst deltaStorageUrl = new URL(resolvedUrl.endpoints.deltaStorageUrl);\n\tdeltaStorageUrl.host = discoveredOrdererUrl.host;\n\n\tconst discoveredStorageUrl = new URL(session.historianUrl);\n\tconst storageUrl = new URL(resolvedUrl.endpoints.storageUrl);\n\tstorageUrl.host = discoveredStorageUrl.host;\n\n\tconst parsedUrl = new URL(resolvedUrl.url);\n\tconst discoveredResolvedUrl: IResolvedUrl = {\n\t\tendpoints: {\n\t\t\tdeltaStorageUrl: deltaStorageUrl.toString(),\n\t\t\tordererUrl: session.ordererUrl,\n\t\t\tdeltaStreamUrl: session.deltaStreamUrl,\n\t\t\tstorageUrl: storageUrl.toString(),\n\t\t},\n\t\tid: resolvedUrl.id,\n\t\ttokens: resolvedUrl.tokens,\n\t\ttype: resolvedUrl.type,\n\t\turl: new URL(`https://${discoveredOrdererUrl.host}${parsedUrl.pathname}`).toString(),\n\t};\n\treturn discoveredResolvedUrl;\n};\n"]}
@@ -2,13 +2,13 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
6
- import { IDocumentStorageService, ISummaryContext, IDocumentStorageServicePolicies } from "@fluidframework/driver-definitions";
5
+ import { IDocumentStorageService, IDocumentStorageServicePolicies, ISummaryContext } from "@fluidframework/driver-definitions/internal";
7
6
  import { ICreateBlobResponse, ISnapshotTree, ISummaryHandle, ISummaryTree, IVersion } from "@fluidframework/protocol-definitions";
8
- import { ICache } from "./cache";
9
- import { IRouterliciousDriverPolicies } from "./policies";
10
- import { GitManager } from "./gitManager";
11
- import { INormalizedWholeSnapshot } from "./contracts";
7
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
8
+ import { ICache } from "./cache.js";
9
+ import { INormalizedWholeSnapshot } from "./contracts.js";
10
+ import { GitManager } from "./gitManager.js";
11
+ import { IRouterliciousDriverPolicies } from "./policies.js";
12
12
  export declare class WholeSummaryDocumentStorageService implements IDocumentStorageService {
13
13
  protected readonly id: string;
14
14
  protected readonly manager: GitManager;
@@ -1 +1 @@
1
- {"version":3,"file":"wholeSummaryDocumentStorageService.d.ts","sourceRoot":"","sources":["../src/wholeSummaryDocumentStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,mBAAmB,EAInB,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EACN,uBAAuB,EACvB,eAAe,EACf,+BAA+B,EAC/B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAM1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,EAAE,wBAAwB,EAAsB,MAAM,aAAa,CAAC;AAK3E,qBAAa,kCAAmC,YAAW,uBAAuB;IAUhF,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM;IAC7B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB;aAC9B,QAAQ,EAAE,+BAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAjBnC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,OAAO,CAAC,iBAAiB,CAAiB;YAE5B,uBAAuB;gBAMjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,mBAAmB,EAC9B,QAAQ,EAAE,+BAA+B,EACxC,cAAc,CAAC,0CAA8B,EAC7C,SAAS,GAAE,MAAM,CAAC,eAAe,CAAuB,EACxD,iBAAiB,GAAE,MAAM,CAAC,wBAAwB,CAAuB,EACzE,iBAAiB,CAAC,wBAAY,EAC9B,iBAAiB,GAAE,CACnC,YAAY,CAAC,EAAE,OAAO,KAClB,OAAO,CAAC,UAAU,CAGP;IAQJ,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA0FzE,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA+BlE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAgClD,wBAAwB,CACpC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC;IAqBL,eAAe,CAAC,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAwBrE,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAqB9D,iBAAiB;YA4CjB,sBAAsB;YAetB,gBAAgB;IAS9B,OAAO,CAAC,WAAW;CAGnB"}
1
+ {"version":3,"file":"wholeSummaryDocumentStorageService.d.ts","sourceRoot":"","sources":["../src/wholeSummaryDocumentStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACN,uBAAuB,EACvB,+BAA+B,EAC/B,eAAe,EACf,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAOtE,OAAO,EAAE,MAAM,EAAiB,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAsB,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAa7D,qBAAa,kCAAmC,YAAW,uBAAuB;IAUhF,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM;IAC7B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB;aAC9B,QAAQ,EAAE,+BAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAjBnC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,OAAO,CAAC,iBAAiB,CAAiB;YAE5B,uBAAuB;gBAMjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,mBAAmB,EAC9B,QAAQ,EAAE,+BAA+B,EACxC,cAAc,CAAC,0CAA8B,EAC7C,SAAS,GAAE,MAAM,CAAC,eAAe,CAAuB,EACxD,iBAAiB,GAAE,MAAM,CAAC,wBAAwB,CAAuB,EACzE,iBAAiB,CAAC,wBAAY,EAC9B,iBAAiB,GAAE,CACnC,YAAY,CAAC,EAAE,OAAO,KAClB,OAAO,CAAC,UAAU,CAGP;IAQJ,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA0FzE,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA+BlE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAgClD,wBAAwB,CACpC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC;IAqBL,eAAe,CAAC,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAwBrE,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAqB9D,iBAAiB;YA4CjB,sBAAsB;YAetB,gBAAgB;IAS9B,OAAO,CAAC,WAAW;CAGnB"}
@@ -5,21 +5,21 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.WholeSummaryDocumentStorageService = void 0;
8
- const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
9
8
  const client_utils_1 = require("@fluid-internal/client-utils");
10
- const core_utils_1 = require("@fluidframework/core-utils");
11
- const driver_base_1 = require("@fluidframework/driver-base");
12
- const cache_1 = require("./cache");
13
- const treeUtils_1 = require("./treeUtils");
14
- const wholeSummaryUploadManager_1 = require("./wholeSummaryUploadManager");
15
- const r11sSnapshotParser_1 = require("./r11sSnapshotParser");
9
+ const internal_1 = require("@fluidframework/core-utils/internal");
10
+ const internal_2 = require("@fluidframework/driver-base/internal");
11
+ const internal_3 = require("@fluidframework/telemetry-utils/internal");
12
+ const cache_js_1 = require("./cache.js");
13
+ const r11sSnapshotParser_js_1 = require("./r11sSnapshotParser.js");
14
+ const treeUtils_js_1 = require("./treeUtils.js");
15
+ const wholeSummaryUploadManager_js_1 = require("./wholeSummaryUploadManager.js");
16
16
  const latestSnapshotId = "latest";
17
17
  class WholeSummaryDocumentStorageService {
18
18
  async getSummaryUploadManager() {
19
19
  const manager = await this.getStorageManager();
20
- return new wholeSummaryUploadManager_1.WholeSummaryUploadManager(manager);
20
+ return new wholeSummaryUploadManager_js_1.WholeSummaryUploadManager(manager);
21
21
  }
22
- constructor(id, manager, logger, policies, driverPolicies, blobCache = new cache_1.InMemoryCache(), snapshotTreeCache = new cache_1.InMemoryCache(), noCacheGitManager, getStorageManager = async (disableCache) => disableCache && this.noCacheGitManager !== undefined
22
+ constructor(id, manager, logger, policies, driverPolicies, blobCache = new cache_js_1.InMemoryCache(), snapshotTreeCache = new cache_js_1.InMemoryCache(), noCacheGitManager, getStorageManager = async (disableCache) => disableCache && this.noCacheGitManager !== undefined
23
23
  ? this.noCacheGitManager
24
24
  : this.manager) {
25
25
  this.id = id;
@@ -32,7 +32,7 @@ class WholeSummaryDocumentStorageService {
32
32
  this.noCacheGitManager = noCacheGitManager;
33
33
  this.getStorageManager = getStorageManager;
34
34
  this.firstVersionsCall = true;
35
- this.mc = (0, telemetry_utils_1.createChildMonitoringContext)({
35
+ this.mc = (0, internal_3.createChildMonitoringContext)({
36
36
  logger,
37
37
  });
38
38
  }
@@ -50,7 +50,7 @@ class WholeSummaryDocumentStorageService {
50
50
  // If this is the first versions call for the document, we know we will want the latest summary.
51
51
  // Fetch latest summary, cache it, and return its id.
52
52
  if (this.firstVersionsCall && count === 1) {
53
- const normalizedSnapshotContents = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
53
+ const normalizedSnapshotContents = await internal_3.PerformanceEvent.timedExecAsync(this.logger, {
54
54
  eventName: "ObtainSnapshot",
55
55
  versionId: versionId ?? undefined,
56
56
  count,
@@ -61,7 +61,7 @@ class WholeSummaryDocumentStorageService {
61
61
  const networkSnapshotP = !this.driverPolicies?.enableDiscovery
62
62
  ? this.fetchSnapshotTree(latestSnapshotId, false, "getVersions")
63
63
  : this.fetchSnapshotTree(latestSnapshotId, true, "getVersions");
64
- const promiseRaceWinner = await (0, driver_base_1.promiseRaceWithWinner)([
64
+ const promiseRaceWinner = await (0, internal_2.promiseRaceWithWinner)([
65
65
  cachedSnapshotP.catch(() => undefined),
66
66
  networkSnapshotP.catch(() => undefined),
67
67
  ]);
@@ -95,7 +95,7 @@ class WholeSummaryDocumentStorageService {
95
95
  }
96
96
  // Otherwise, get the latest version of the document as normal.
97
97
  const id = versionId ? versionId : this.id;
98
- const commits = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
98
+ const commits = await internal_3.PerformanceEvent.timedExecAsync(this.logger, {
99
99
  eventName: "getVersions",
100
100
  versionId: id,
101
101
  count,
@@ -135,7 +135,7 @@ class WholeSummaryDocumentStorageService {
135
135
  return cachedBlob;
136
136
  }
137
137
  // Note: AFR does not support readBlobs, but potentially other r11s like servers do
138
- const blob = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
138
+ const blob = await internal_3.PerformanceEvent.timedExecAsync(this.logger, {
139
139
  eventName: "readBlob",
140
140
  blobId,
141
141
  }, async (event) => {
@@ -153,7 +153,7 @@ class WholeSummaryDocumentStorageService {
153
153
  return bufferValue;
154
154
  }
155
155
  async uploadSummaryWithContext(summary, context) {
156
- const summaryHandle = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
156
+ const summaryHandle = await internal_3.PerformanceEvent.timedExecAsync(this.logger, {
157
157
  eventName: "uploadSummaryWithContext",
158
158
  proposalHandle: context.proposalHandle,
159
159
  ackHandle: context.ackHandle,
@@ -165,7 +165,7 @@ class WholeSummaryDocumentStorageService {
165
165
  return summaryHandle;
166
166
  }
167
167
  async downloadSummary(summaryHandle) {
168
- const wholeFlatSnapshot = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
168
+ const wholeFlatSnapshot = await internal_3.PerformanceEvent.timedExecAsync(this.logger, {
169
169
  eventName: "getWholeFlatSummary",
170
170
  treeId: summaryHandle.handle,
171
171
  }, async (event) => {
@@ -176,12 +176,12 @@ class WholeSummaryDocumentStorageService {
176
176
  });
177
177
  return response.content;
178
178
  });
179
- const { blobs, snapshotTree } = (0, r11sSnapshotParser_1.convertWholeFlatSnapshotToSnapshotTreeAndBlobs)(wholeFlatSnapshot, "");
180
- return (0, treeUtils_1.convertSnapshotAndBlobsToSummaryTree)(snapshotTree, blobs);
179
+ const { blobs, snapshotTree } = (0, r11sSnapshotParser_js_1.convertWholeFlatSnapshotToSnapshotTreeAndBlobs)(wholeFlatSnapshot, "");
180
+ return (0, treeUtils_js_1.convertSnapshotAndBlobsToSummaryTree)(snapshotTree, blobs);
181
181
  }
182
182
  async createBlob(file) {
183
183
  const uint8ArrayFile = new Uint8Array(file);
184
- return telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
184
+ return internal_3.PerformanceEvent.timedExecAsync(this.logger, {
185
185
  eventName: "createBlob",
186
186
  size: uint8ArrayFile.length,
187
187
  }, async (event) => {
@@ -196,7 +196,7 @@ class WholeSummaryDocumentStorageService {
196
196
  });
197
197
  }
198
198
  async fetchSnapshotTree(versionId, disableCache, scenarioName) {
199
- const normalizedWholeSummary = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
199
+ const normalizedWholeSummary = await internal_3.PerformanceEvent.timedExecAsync(this.logger, {
200
200
  eventName: "getWholeFlatSummary",
201
201
  treeId: versionId,
202
202
  scenarioName,
@@ -204,10 +204,10 @@ class WholeSummaryDocumentStorageService {
204
204
  const manager = await this.getStorageManager(disableCache);
205
205
  const response = await manager.getSnapshot(versionId);
206
206
  const start = client_utils_1.performance.now();
207
- const snapshot = (0, r11sSnapshotParser_1.convertWholeFlatSnapshotToSnapshotTreeAndBlobs)(response.content);
207
+ const snapshot = (0, r11sSnapshotParser_js_1.convertWholeFlatSnapshotToSnapshotTreeAndBlobs)(response.content);
208
208
  const snapshotConversionTime = client_utils_1.performance.now() - start;
209
- (0, treeUtils_1.validateBlobsAndTrees)(snapshot.snapshotTree);
210
- const { trees, numBlobs, encodedBlobsSize } = (0, treeUtils_1.evalBlobsAndTrees)(snapshot);
209
+ (0, treeUtils_js_1.validateBlobsAndTrees)(snapshot.snapshotTree);
210
+ const { trees, numBlobs, encodedBlobsSize } = (0, treeUtils_js_1.evalBlobsAndTrees)(snapshot);
211
211
  event.end({
212
212
  size: response.content.trees[0]?.entries.length,
213
213
  trees,
@@ -216,7 +216,7 @@ class WholeSummaryDocumentStorageService {
216
216
  sequenceNumber: snapshot.sequenceNumber,
217
217
  ...response.propsToLog,
218
218
  snapshotConversionTime,
219
- ...(0, driver_base_1.getW3CData)(response.requestUrl, "xmlhttprequest"),
219
+ ...(0, internal_2.getW3CData)(response.requestUrl, "xmlhttprequest"),
220
220
  });
221
221
  return snapshot;
222
222
  });
@@ -228,7 +228,7 @@ class WholeSummaryDocumentStorageService {
228
228
  }
229
229
  async initializeFromSnapshot(normalizedWholeSummary) {
230
230
  const snapshotId = normalizedWholeSummary.id;
231
- (0, core_utils_1.assert)(snapshotId !== undefined, 0x275 /* "Root tree should contain the id" */);
231
+ (0, internal_1.assert)(snapshotId !== undefined, 0x275 /* "Root tree should contain the id" */);
232
232
  const cachePs = [
233
233
  this.snapshotTreeCache.put(this.getCacheKey(snapshotId), normalizedWholeSummary),
234
234
  this.updateBlobsCache(normalizedWholeSummary.blobs),
@@ -1 +1 @@
1
- {"version":3,"file":"wholeSummaryDocumentStorageService.js","sourceRoot":"","sources":["../src/wholeSummaryDocumentStorageService.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 */\n\nimport {\n\tITelemetryLoggerExt,\n\tMonitoringContext,\n\tPerformanceEvent,\n\tcreateChildMonitoringContext,\n} from \"@fluidframework/telemetry-utils\";\nimport { performance, stringToBuffer, Uint8ArrayToString } from \"@fluid-internal/client-utils\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { getW3CData, promiseRaceWithWinner } from \"@fluidframework/driver-base\";\nimport {\n\tIDocumentStorageService,\n\tISummaryContext,\n\tIDocumentStorageServicePolicies,\n} from \"@fluidframework/driver-definitions\";\nimport {\n\tICreateBlobResponse,\n\tISnapshotTree,\n\tISummaryHandle,\n\tISummaryTree,\n\tIVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport { ICache, InMemoryCache } from \"./cache\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport {\n\tconvertSnapshotAndBlobsToSummaryTree,\n\tevalBlobsAndTrees,\n\tvalidateBlobsAndTrees,\n} from \"./treeUtils\";\nimport { GitManager } from \"./gitManager\";\nimport { WholeSummaryUploadManager } from \"./wholeSummaryUploadManager\";\nimport { ISummaryUploadManager } from \"./storageContracts\";\nimport { IR11sResponse } from \"./restWrapper\";\nimport { INormalizedWholeSnapshot, IWholeFlatSnapshot } from \"./contracts\";\nimport { convertWholeFlatSnapshotToSnapshotTreeAndBlobs } from \"./r11sSnapshotParser\";\n\nconst latestSnapshotId: string = \"latest\";\n\nexport class WholeSummaryDocumentStorageService implements IDocumentStorageService {\n\tprivate readonly mc: MonitoringContext;\n\tprivate firstVersionsCall: boolean = true;\n\n\tprivate async getSummaryUploadManager(): Promise<ISummaryUploadManager> {\n\t\tconst manager = await this.getStorageManager();\n\t\treturn new WholeSummaryUploadManager(manager);\n\t}\n\n\tconstructor(\n\t\tprotected readonly id: string,\n\t\tprotected readonly manager: GitManager,\n\t\tprotected readonly logger: ITelemetryLoggerExt,\n\t\tpublic readonly policies: IDocumentStorageServicePolicies,\n\t\tprivate readonly driverPolicies?: IRouterliciousDriverPolicies,\n\t\tprivate readonly blobCache: ICache<ArrayBufferLike> = new InMemoryCache(),\n\t\tprivate readonly snapshotTreeCache: ICache<INormalizedWholeSnapshot> = new InMemoryCache(),\n\t\tprivate readonly noCacheGitManager?: GitManager,\n\t\tprivate readonly getStorageManager: (\n\t\t\tdisableCache?: boolean,\n\t\t) => Promise<GitManager> = async (disableCache) =>\n\t\t\tdisableCache && this.noCacheGitManager !== undefined\n\t\t\t\t? this.noCacheGitManager\n\t\t\t\t: this.manager,\n\t) {\n\t\tthis.mc = createChildMonitoringContext({\n\t\t\tlogger,\n\t\t});\n\t}\n\n\t// eslint-disable-next-line @rushstack/no-new-null\n\tpublic async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n\t\tif (versionId !== this.id && versionId !== null) {\n\t\t\t// Blobs/Trees in this scenario will never have multiple versions, so return versionId as is\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: versionId,\n\t\t\t\t\ttreeId: undefined!,\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\t\t// If this is the first versions call for the document, we know we will want the latest summary.\n\t\t// Fetch latest summary, cache it, and return its id.\n\t\tif (this.firstVersionsCall && count === 1) {\n\t\t\tconst normalizedSnapshotContents = await PerformanceEvent.timedExecAsync(\n\t\t\t\tthis.logger,\n\t\t\t\t{\n\t\t\t\t\teventName: \"ObtainSnapshot\",\n\t\t\t\t\tversionId: versionId ?? undefined,\n\t\t\t\t\tcount,\n\t\t\t\t\tenableDiscovery: this.driverPolicies?.enableDiscovery,\n\t\t\t\t},\n\t\t\t\tasync (event) => {\n\t\t\t\t\tlet method: string;\n\t\t\t\t\tconst cachedSnapshotP = this.snapshotTreeCache.get(\n\t\t\t\t\t\tthis.getCacheKey(latestSnapshotId),\n\t\t\t\t\t);\n\n\t\t\t\t\tconst networkSnapshotP = !this.driverPolicies?.enableDiscovery\n\t\t\t\t\t\t? this.fetchSnapshotTree(latestSnapshotId, false, \"getVersions\")\n\t\t\t\t\t\t: this.fetchSnapshotTree(latestSnapshotId, true, \"getVersions\");\n\n\t\t\t\t\tconst promiseRaceWinner = await promiseRaceWithWinner([\n\t\t\t\t\t\tcachedSnapshotP.catch(() => undefined),\n\t\t\t\t\t\tnetworkSnapshotP.catch(() => undefined),\n\t\t\t\t\t]);\n\n\t\t\t\t\tlet retrievedSnapshot = promiseRaceWinner.value;\n\t\t\t\t\tmethod = promiseRaceWinner.index === 0 ? \"cache\" : \"network\";\n\n\t\t\t\t\tif (retrievedSnapshot === undefined) {\n\t\t\t\t\t\t// if network failed -> wait for cache ( then return network failure)\n\t\t\t\t\t\t// If cache returned empty or failed -> wait for network (success of failure)\n\t\t\t\t\t\tif (promiseRaceWinner.index === 1) {\n\t\t\t\t\t\t\tretrievedSnapshot = await cachedSnapshotP;\n\t\t\t\t\t\t\tmethod = \"cache\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (retrievedSnapshot === undefined) {\n\t\t\t\t\t\t\tretrievedSnapshot = await networkSnapshotP;\n\t\t\t\t\t\t\tmethod = \"network\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tevent.end({\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t});\n\t\t\t\t\treturn retrievedSnapshot;\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst _id = await this.initializeFromSnapshot(normalizedSnapshotContents);\n\t\t\tthis.firstVersionsCall = false;\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: _id,\n\t\t\t\t\ttreeId: normalizedSnapshotContents.snapshotTree.id!,\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\t// Otherwise, get the latest version of the document as normal.\n\t\tconst id = versionId ? versionId : this.id;\n\t\tconst commits = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"getVersions\",\n\t\t\t\tversionId: id,\n\t\t\t\tcount,\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\treturn (await manager.getCommits(id, count)).content;\n\t\t\t},\n\t\t);\n\t\treturn commits.map((commit) => ({\n\t\t\tdate: commit.commit.author.date,\n\t\t\tid: commit.sha,\n\t\t\ttreeId: commit.commit.tree.sha,\n\t\t}));\n\t}\n\n\t// eslint-disable-next-line @rushstack/no-new-null\n\tpublic async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {\n\t\tlet requestVersion = version;\n\t\tif (!requestVersion) {\n\t\t\tconst versions = await this.getVersions(this.id, 1);\n\t\t\tif (versions.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\trequestVersion = versions[0];\n\t\t}\n\n\t\tlet normalizedWholeSnapshot = await this.snapshotTreeCache.get(\n\t\t\tthis.getCacheKey(requestVersion.id),\n\t\t);\n\t\tif (normalizedWholeSnapshot !== undefined) {\n\t\t\treturn normalizedWholeSnapshot.snapshotTree;\n\t\t}\n\n\t\tnormalizedWholeSnapshot = await this.fetchSnapshotTree(\n\t\t\trequestVersion.id,\n\t\t\tundefined,\n\t\t\t\"getSnapshotTree\",\n\t\t);\n\n\t\t// Currently retrieving blobs from network is not supported by AFR for WholeSummaryDocumentStorageService\n\t\t// Blobs are expected to be put in the cache\n\t\tawait this.updateBlobsCache(normalizedWholeSnapshot.blobs);\n\n\t\treturn normalizedWholeSnapshot.snapshotTree;\n\t}\n\n\tpublic async readBlob(blobId: string): Promise<ArrayBufferLike> {\n\t\tconst cachedBlob = await this.blobCache.get(this.getCacheKey(blobId));\n\t\tif (cachedBlob !== undefined) {\n\t\t\treturn cachedBlob;\n\t\t}\n\n\t\t// Note: AFR does not support readBlobs, but potentially other r11s like servers do\n\t\tconst blob = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"readBlob\",\n\t\t\t\tblobId,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\tconst response = (await manager.getBlob(blobId)).content;\n\t\t\t\tevent.end({\n\t\t\t\t\tsize: response.size,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t},\n\t\t\tundefined, // workers\n\t\t\tundefined, // recordHeapSize\n\t\t\tthis.mc.config.getNumber(\"Fluid.Driver.ReadBlobTelemetrySampling\"),\n\t\t);\n\t\tconst bufferValue = stringToBuffer(blob.content, blob.encoding);\n\n\t\tawait this.blobCache.put(this.getCacheKey(blob.sha), bufferValue);\n\n\t\treturn bufferValue;\n\t}\n\n\tpublic async uploadSummaryWithContext(\n\t\tsummary: ISummaryTree,\n\t\tcontext: ISummaryContext,\n\t): Promise<string> {\n\t\tconst summaryHandle = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"uploadSummaryWithContext\",\n\t\t\t\tproposalHandle: context.proposalHandle,\n\t\t\t\tackHandle: context.ackHandle,\n\t\t\t\treferenceSequenceNumber: context.referenceSequenceNumber,\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tconst summaryUploadManager = await this.getSummaryUploadManager();\n\t\t\t\treturn summaryUploadManager.writeSummaryTree(\n\t\t\t\t\tsummary,\n\t\t\t\t\tcontext.ackHandle ?? \"\",\n\t\t\t\t\t\"channel\",\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\treturn summaryHandle;\n\t}\n\n\tpublic async downloadSummary(summaryHandle: ISummaryHandle): Promise<ISummaryTree> {\n\t\tconst wholeFlatSnapshot = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"getWholeFlatSummary\",\n\t\t\t\ttreeId: summaryHandle.handle,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\tconst response = await manager.getSnapshot(summaryHandle.handle);\n\t\t\t\tevent.end({\n\t\t\t\t\tsize: response.content.trees[0]?.entries.length,\n\t\t\t\t});\n\t\t\t\treturn response.content;\n\t\t\t},\n\t\t);\n\n\t\tconst { blobs, snapshotTree } = convertWholeFlatSnapshotToSnapshotTreeAndBlobs(\n\t\t\twholeFlatSnapshot,\n\t\t\t\"\",\n\t\t);\n\t\treturn convertSnapshotAndBlobsToSummaryTree(snapshotTree, blobs);\n\t}\n\n\tpublic async createBlob(file: ArrayBufferLike): Promise<ICreateBlobResponse> {\n\t\tconst uint8ArrayFile = new Uint8Array(file);\n\t\treturn PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"createBlob\",\n\t\t\t\tsize: uint8ArrayFile.length,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\tconst response = await manager\n\t\t\t\t\t.createBlob(Uint8ArrayToString(uint8ArrayFile, \"base64\"), \"base64\")\n\t\t\t\t\t.then((r) => ({ id: r.content.sha, url: r.content.url }));\n\t\t\t\tevent.end({\n\t\t\t\t\tblobId: response.id,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate async fetchSnapshotTree(\n\t\tversionId: string,\n\t\tdisableCache?: boolean,\n\t\tscenarioName?: string,\n\t): Promise<INormalizedWholeSnapshot> {\n\t\tconst normalizedWholeSummary = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"getWholeFlatSummary\",\n\t\t\t\ttreeId: versionId,\n\t\t\t\tscenarioName,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager(disableCache);\n\t\t\t\tconst response: IR11sResponse<IWholeFlatSnapshot> =\n\t\t\t\t\tawait manager.getSnapshot(versionId);\n\t\t\t\tconst start = performance.now();\n\t\t\t\tconst snapshot: INormalizedWholeSnapshot =\n\t\t\t\t\tconvertWholeFlatSnapshotToSnapshotTreeAndBlobs(response.content);\n\t\t\t\tconst snapshotConversionTime = performance.now() - start;\n\t\t\t\tvalidateBlobsAndTrees(snapshot.snapshotTree);\n\t\t\t\tconst { trees, numBlobs, encodedBlobsSize } = evalBlobsAndTrees(snapshot);\n\n\t\t\t\tevent.end({\n\t\t\t\t\tsize: response.content.trees[0]?.entries.length,\n\t\t\t\t\ttrees,\n\t\t\t\t\tblobs: numBlobs,\n\t\t\t\t\tencodedBlobsSize,\n\t\t\t\t\tsequenceNumber: snapshot.sequenceNumber,\n\t\t\t\t\t...response.propsToLog,\n\t\t\t\t\tsnapshotConversionTime,\n\t\t\t\t\t...getW3CData(response.requestUrl, \"xmlhttprequest\"),\n\t\t\t\t});\n\t\t\t\treturn snapshot;\n\t\t\t},\n\t\t);\n\n\t\t// Also add the result into the cache.\n\t\tawait this.snapshotTreeCache\n\t\t\t.put(this.getCacheKey(versionId), normalizedWholeSummary)\n\t\t\t.catch(() => undefined);\n\t\treturn normalizedWholeSummary;\n\t}\n\n\tprivate async initializeFromSnapshot(\n\t\tnormalizedWholeSummary: INormalizedWholeSnapshot,\n\t): Promise<string> {\n\t\tconst snapshotId = normalizedWholeSummary.id;\n\t\tassert(snapshotId !== undefined, 0x275 /* \"Root tree should contain the id\" */);\n\t\tconst cachePs: Promise<any>[] = [\n\t\t\tthis.snapshotTreeCache.put(this.getCacheKey(snapshotId), normalizedWholeSummary),\n\t\t\tthis.updateBlobsCache(normalizedWholeSummary.blobs),\n\t\t];\n\n\t\tawait Promise.all(cachePs);\n\n\t\treturn snapshotId;\n\t}\n\n\tprivate async updateBlobsCache(blobs: Map<string, ArrayBuffer>): Promise<void> {\n\t\tconst blobCachePutPs: Promise<void>[] = [];\n\t\tblobs.forEach((value, id) => {\n\t\t\tconst cacheKey = this.getCacheKey(id);\n\t\t\tblobCachePutPs.push(this.blobCache.put(cacheKey, value));\n\t\t});\n\t\tawait Promise.all(blobCachePutPs);\n\t}\n\n\tprivate getCacheKey(blobId: string): string {\n\t\treturn `${this.id}:${blobId}`;\n\t}\n}\n"]}
1
+ {"version":3,"file":"wholeSummaryDocumentStorageService.js","sourceRoot":"","sources":["../src/wholeSummaryDocumentStorageService.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 */\n\nimport { Uint8ArrayToString, performance, stringToBuffer } from \"@fluid-internal/client-utils\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { getW3CData, promiseRaceWithWinner } from \"@fluidframework/driver-base/internal\";\nimport {\n\tIDocumentStorageService,\n\tIDocumentStorageServicePolicies,\n\tISummaryContext,\n} from \"@fluidframework/driver-definitions/internal\";\nimport {\n\tICreateBlobResponse,\n\tISnapshotTree,\n\tISummaryHandle,\n\tISummaryTree,\n\tIVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils\";\nimport {\n\tMonitoringContext,\n\tPerformanceEvent,\n\tcreateChildMonitoringContext,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport { ICache, InMemoryCache } from \"./cache.js\";\nimport { INormalizedWholeSnapshot, IWholeFlatSnapshot } from \"./contracts.js\";\nimport { GitManager } from \"./gitManager.js\";\nimport { IRouterliciousDriverPolicies } from \"./policies.js\";\nimport { convertWholeFlatSnapshotToSnapshotTreeAndBlobs } from \"./r11sSnapshotParser.js\";\nimport { IR11sResponse } from \"./restWrapper.js\";\nimport { ISummaryUploadManager } from \"./storageContracts.js\";\nimport {\n\tconvertSnapshotAndBlobsToSummaryTree,\n\tevalBlobsAndTrees,\n\tvalidateBlobsAndTrees,\n} from \"./treeUtils.js\";\nimport { WholeSummaryUploadManager } from \"./wholeSummaryUploadManager.js\";\n\nconst latestSnapshotId: string = \"latest\";\n\nexport class WholeSummaryDocumentStorageService implements IDocumentStorageService {\n\tprivate readonly mc: MonitoringContext;\n\tprivate firstVersionsCall: boolean = true;\n\n\tprivate async getSummaryUploadManager(): Promise<ISummaryUploadManager> {\n\t\tconst manager = await this.getStorageManager();\n\t\treturn new WholeSummaryUploadManager(manager);\n\t}\n\n\tconstructor(\n\t\tprotected readonly id: string,\n\t\tprotected readonly manager: GitManager,\n\t\tprotected readonly logger: ITelemetryLoggerExt,\n\t\tpublic readonly policies: IDocumentStorageServicePolicies,\n\t\tprivate readonly driverPolicies?: IRouterliciousDriverPolicies,\n\t\tprivate readonly blobCache: ICache<ArrayBufferLike> = new InMemoryCache(),\n\t\tprivate readonly snapshotTreeCache: ICache<INormalizedWholeSnapshot> = new InMemoryCache(),\n\t\tprivate readonly noCacheGitManager?: GitManager,\n\t\tprivate readonly getStorageManager: (\n\t\t\tdisableCache?: boolean,\n\t\t) => Promise<GitManager> = async (disableCache) =>\n\t\t\tdisableCache && this.noCacheGitManager !== undefined\n\t\t\t\t? this.noCacheGitManager\n\t\t\t\t: this.manager,\n\t) {\n\t\tthis.mc = createChildMonitoringContext({\n\t\t\tlogger,\n\t\t});\n\t}\n\n\t// eslint-disable-next-line @rushstack/no-new-null\n\tpublic async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n\t\tif (versionId !== this.id && versionId !== null) {\n\t\t\t// Blobs/Trees in this scenario will never have multiple versions, so return versionId as is\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: versionId,\n\t\t\t\t\ttreeId: undefined!,\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\t\t// If this is the first versions call for the document, we know we will want the latest summary.\n\t\t// Fetch latest summary, cache it, and return its id.\n\t\tif (this.firstVersionsCall && count === 1) {\n\t\t\tconst normalizedSnapshotContents = await PerformanceEvent.timedExecAsync(\n\t\t\t\tthis.logger,\n\t\t\t\t{\n\t\t\t\t\teventName: \"ObtainSnapshot\",\n\t\t\t\t\tversionId: versionId ?? undefined,\n\t\t\t\t\tcount,\n\t\t\t\t\tenableDiscovery: this.driverPolicies?.enableDiscovery,\n\t\t\t\t},\n\t\t\t\tasync (event) => {\n\t\t\t\t\tlet method: string;\n\t\t\t\t\tconst cachedSnapshotP = this.snapshotTreeCache.get(\n\t\t\t\t\t\tthis.getCacheKey(latestSnapshotId),\n\t\t\t\t\t);\n\n\t\t\t\t\tconst networkSnapshotP = !this.driverPolicies?.enableDiscovery\n\t\t\t\t\t\t? this.fetchSnapshotTree(latestSnapshotId, false, \"getVersions\")\n\t\t\t\t\t\t: this.fetchSnapshotTree(latestSnapshotId, true, \"getVersions\");\n\n\t\t\t\t\tconst promiseRaceWinner = await promiseRaceWithWinner([\n\t\t\t\t\t\tcachedSnapshotP.catch(() => undefined),\n\t\t\t\t\t\tnetworkSnapshotP.catch(() => undefined),\n\t\t\t\t\t]);\n\n\t\t\t\t\tlet retrievedSnapshot = promiseRaceWinner.value;\n\t\t\t\t\tmethod = promiseRaceWinner.index === 0 ? \"cache\" : \"network\";\n\n\t\t\t\t\tif (retrievedSnapshot === undefined) {\n\t\t\t\t\t\t// if network failed -> wait for cache ( then return network failure)\n\t\t\t\t\t\t// If cache returned empty or failed -> wait for network (success of failure)\n\t\t\t\t\t\tif (promiseRaceWinner.index === 1) {\n\t\t\t\t\t\t\tretrievedSnapshot = await cachedSnapshotP;\n\t\t\t\t\t\t\tmethod = \"cache\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (retrievedSnapshot === undefined) {\n\t\t\t\t\t\t\tretrievedSnapshot = await networkSnapshotP;\n\t\t\t\t\t\t\tmethod = \"network\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tevent.end({\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t});\n\t\t\t\t\treturn retrievedSnapshot;\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst _id = await this.initializeFromSnapshot(normalizedSnapshotContents);\n\t\t\tthis.firstVersionsCall = false;\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: _id,\n\t\t\t\t\ttreeId: normalizedSnapshotContents.snapshotTree.id!,\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\t// Otherwise, get the latest version of the document as normal.\n\t\tconst id = versionId ? versionId : this.id;\n\t\tconst commits = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"getVersions\",\n\t\t\t\tversionId: id,\n\t\t\t\tcount,\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\treturn (await manager.getCommits(id, count)).content;\n\t\t\t},\n\t\t);\n\t\treturn commits.map((commit) => ({\n\t\t\tdate: commit.commit.author.date,\n\t\t\tid: commit.sha,\n\t\t\ttreeId: commit.commit.tree.sha,\n\t\t}));\n\t}\n\n\t// eslint-disable-next-line @rushstack/no-new-null\n\tpublic async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {\n\t\tlet requestVersion = version;\n\t\tif (!requestVersion) {\n\t\t\tconst versions = await this.getVersions(this.id, 1);\n\t\t\tif (versions.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\trequestVersion = versions[0];\n\t\t}\n\n\t\tlet normalizedWholeSnapshot = await this.snapshotTreeCache.get(\n\t\t\tthis.getCacheKey(requestVersion.id),\n\t\t);\n\t\tif (normalizedWholeSnapshot !== undefined) {\n\t\t\treturn normalizedWholeSnapshot.snapshotTree;\n\t\t}\n\n\t\tnormalizedWholeSnapshot = await this.fetchSnapshotTree(\n\t\t\trequestVersion.id,\n\t\t\tundefined,\n\t\t\t\"getSnapshotTree\",\n\t\t);\n\n\t\t// Currently retrieving blobs from network is not supported by AFR for WholeSummaryDocumentStorageService\n\t\t// Blobs are expected to be put in the cache\n\t\tawait this.updateBlobsCache(normalizedWholeSnapshot.blobs);\n\n\t\treturn normalizedWholeSnapshot.snapshotTree;\n\t}\n\n\tpublic async readBlob(blobId: string): Promise<ArrayBufferLike> {\n\t\tconst cachedBlob = await this.blobCache.get(this.getCacheKey(blobId));\n\t\tif (cachedBlob !== undefined) {\n\t\t\treturn cachedBlob;\n\t\t}\n\n\t\t// Note: AFR does not support readBlobs, but potentially other r11s like servers do\n\t\tconst blob = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"readBlob\",\n\t\t\t\tblobId,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\tconst response = (await manager.getBlob(blobId)).content;\n\t\t\t\tevent.end({\n\t\t\t\t\tsize: response.size,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t},\n\t\t\tundefined, // workers\n\t\t\tundefined, // recordHeapSize\n\t\t\tthis.mc.config.getNumber(\"Fluid.Driver.ReadBlobTelemetrySampling\"),\n\t\t);\n\t\tconst bufferValue = stringToBuffer(blob.content, blob.encoding);\n\n\t\tawait this.blobCache.put(this.getCacheKey(blob.sha), bufferValue);\n\n\t\treturn bufferValue;\n\t}\n\n\tpublic async uploadSummaryWithContext(\n\t\tsummary: ISummaryTree,\n\t\tcontext: ISummaryContext,\n\t): Promise<string> {\n\t\tconst summaryHandle = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"uploadSummaryWithContext\",\n\t\t\t\tproposalHandle: context.proposalHandle,\n\t\t\t\tackHandle: context.ackHandle,\n\t\t\t\treferenceSequenceNumber: context.referenceSequenceNumber,\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tconst summaryUploadManager = await this.getSummaryUploadManager();\n\t\t\t\treturn summaryUploadManager.writeSummaryTree(\n\t\t\t\t\tsummary,\n\t\t\t\t\tcontext.ackHandle ?? \"\",\n\t\t\t\t\t\"channel\",\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\treturn summaryHandle;\n\t}\n\n\tpublic async downloadSummary(summaryHandle: ISummaryHandle): Promise<ISummaryTree> {\n\t\tconst wholeFlatSnapshot = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"getWholeFlatSummary\",\n\t\t\t\ttreeId: summaryHandle.handle,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\tconst response = await manager.getSnapshot(summaryHandle.handle);\n\t\t\t\tevent.end({\n\t\t\t\t\tsize: response.content.trees[0]?.entries.length,\n\t\t\t\t});\n\t\t\t\treturn response.content;\n\t\t\t},\n\t\t);\n\n\t\tconst { blobs, snapshotTree } = convertWholeFlatSnapshotToSnapshotTreeAndBlobs(\n\t\t\twholeFlatSnapshot,\n\t\t\t\"\",\n\t\t);\n\t\treturn convertSnapshotAndBlobsToSummaryTree(snapshotTree, blobs);\n\t}\n\n\tpublic async createBlob(file: ArrayBufferLike): Promise<ICreateBlobResponse> {\n\t\tconst uint8ArrayFile = new Uint8Array(file);\n\t\treturn PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"createBlob\",\n\t\t\t\tsize: uint8ArrayFile.length,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\tconst response = await manager\n\t\t\t\t\t.createBlob(Uint8ArrayToString(uint8ArrayFile, \"base64\"), \"base64\")\n\t\t\t\t\t.then((r) => ({ id: r.content.sha, url: r.content.url }));\n\t\t\t\tevent.end({\n\t\t\t\t\tblobId: response.id,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate async fetchSnapshotTree(\n\t\tversionId: string,\n\t\tdisableCache?: boolean,\n\t\tscenarioName?: string,\n\t): Promise<INormalizedWholeSnapshot> {\n\t\tconst normalizedWholeSummary = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"getWholeFlatSummary\",\n\t\t\t\ttreeId: versionId,\n\t\t\t\tscenarioName,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager(disableCache);\n\t\t\t\tconst response: IR11sResponse<IWholeFlatSnapshot> =\n\t\t\t\t\tawait manager.getSnapshot(versionId);\n\t\t\t\tconst start = performance.now();\n\t\t\t\tconst snapshot: INormalizedWholeSnapshot =\n\t\t\t\t\tconvertWholeFlatSnapshotToSnapshotTreeAndBlobs(response.content);\n\t\t\t\tconst snapshotConversionTime = performance.now() - start;\n\t\t\t\tvalidateBlobsAndTrees(snapshot.snapshotTree);\n\t\t\t\tconst { trees, numBlobs, encodedBlobsSize } = evalBlobsAndTrees(snapshot);\n\n\t\t\t\tevent.end({\n\t\t\t\t\tsize: response.content.trees[0]?.entries.length,\n\t\t\t\t\ttrees,\n\t\t\t\t\tblobs: numBlobs,\n\t\t\t\t\tencodedBlobsSize,\n\t\t\t\t\tsequenceNumber: snapshot.sequenceNumber,\n\t\t\t\t\t...response.propsToLog,\n\t\t\t\t\tsnapshotConversionTime,\n\t\t\t\t\t...getW3CData(response.requestUrl, \"xmlhttprequest\"),\n\t\t\t\t});\n\t\t\t\treturn snapshot;\n\t\t\t},\n\t\t);\n\n\t\t// Also add the result into the cache.\n\t\tawait this.snapshotTreeCache\n\t\t\t.put(this.getCacheKey(versionId), normalizedWholeSummary)\n\t\t\t.catch(() => undefined);\n\t\treturn normalizedWholeSummary;\n\t}\n\n\tprivate async initializeFromSnapshot(\n\t\tnormalizedWholeSummary: INormalizedWholeSnapshot,\n\t): Promise<string> {\n\t\tconst snapshotId = normalizedWholeSummary.id;\n\t\tassert(snapshotId !== undefined, 0x275 /* \"Root tree should contain the id\" */);\n\t\tconst cachePs: Promise<any>[] = [\n\t\t\tthis.snapshotTreeCache.put(this.getCacheKey(snapshotId), normalizedWholeSummary),\n\t\t\tthis.updateBlobsCache(normalizedWholeSummary.blobs),\n\t\t];\n\n\t\tawait Promise.all(cachePs);\n\n\t\treturn snapshotId;\n\t}\n\n\tprivate async updateBlobsCache(blobs: Map<string, ArrayBuffer>): Promise<void> {\n\t\tconst blobCachePutPs: Promise<void>[] = [];\n\t\tblobs.forEach((value, id) => {\n\t\t\tconst cacheKey = this.getCacheKey(id);\n\t\t\tblobCachePutPs.push(this.blobCache.put(cacheKey, value));\n\t\t});\n\t\tawait Promise.all(blobCachePutPs);\n\t}\n\n\tprivate getCacheKey(blobId: string): string {\n\t\treturn `${this.id}:${blobId}`;\n\t}\n}\n"]}
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { ISummaryTree, IWholeSummaryPayloadType } from "@fluidframework/server-services-client";
6
- import { IGitManager, ISummaryUploadManager } from "./storageContracts";
6
+ import { IGitManager, ISummaryUploadManager } from "./storageContracts.js";
7
7
  /**
8
8
  * Converts summary to snapshot tree and uploads with single snaphot tree payload.
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"wholeSummaryUploadManager.d.ts","sourceRoot":"","sources":["../src/wholeSummaryUploadManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,YAAY,EAEZ,wBAAwB,EAExB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAExE;;GAEG;AACH,qBAAa,yBAA0B,YAAW,qBAAqB;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAEpC,gBAAgB,CAC5B,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,WAAW,EAAE,wBAAwB,EACrC,cAAc,GAAE,MAAU,EAC1B,OAAO,GAAE,OAAe,GACtB,OAAO,CAAC,MAAM,CAAC;YAcJ,oBAAoB;CAwBlC"}
1
+ {"version":3,"file":"wholeSummaryUploadManager.d.ts","sourceRoot":"","sources":["../src/wholeSummaryUploadManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,YAAY,EAEZ,wBAAwB,EAExB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE3E;;GAEG;AACH,qBAAa,yBAA0B,YAAW,qBAAqB;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAEpC,gBAAgB,CAC5B,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,WAAW,EAAE,wBAAwB,EACrC,cAAc,GAAE,MAAU,EAC1B,OAAO,GAAE,OAAe,GACtB,OAAO,CAAC,MAAM,CAAC;YAcJ,oBAAoB;CAwBlC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wholeSummaryUploadManager.js","sourceRoot":"","sources":["../src/wholeSummaryUploadManager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mFAKgD;AAGhD;;GAEG;AACH,MAAa,yBAAyB;IACrC,YAA6B,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IAAG,CAAC;IAE9C,KAAK,CAAC,gBAAgB,CAC5B,WAAyB,EACzB,YAAgC,EAChC,WAAqC,EACrC,iBAAyB,CAAC,EAC1B,UAAmB,KAAK;QAExB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,CACzC,YAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,EACd,OAAO,CACP,CAAC;QACF,IAAI,CAAC,EAAE,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAChD;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAEO,KAAK,CAAC,oBAAoB,CACjC,YAAgC,EAChC,IAAkB,EAClB,IAA8B,EAC9B,cAAsB,EACtB,OAAgB;QAEhB,MAAM,YAAY,GAAG,IAAA,6DAAoC,EACxD,YAAY,EACZ,IAAI,EACJ,EAAE,EACF,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAChC,CAAC;QACF,MAAM,eAAe,GAAyB;YAC7C,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,EAAE;YACnC,OAAO,EAAE,EAAE;YACX,cAAc;YACd,IAAI;SACJ,CAAC;QAEF,OAAO,IAAI,CAAC,OAAO;aACjB,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC;aACvC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;CACD;AA/CD,8DA+CC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tISummaryTree,\n\tIWholeSummaryPayload,\n\tIWholeSummaryPayloadType,\n\tconvertSummaryTreeToWholeSummaryTree,\n} from \"@fluidframework/server-services-client\";\nimport { IGitManager, ISummaryUploadManager } from \"./storageContracts\";\n\n/**\n * Converts summary to snapshot tree and uploads with single snaphot tree payload.\n */\nexport class WholeSummaryUploadManager implements ISummaryUploadManager {\n\tconstructor(private readonly manager: IGitManager) {}\n\n\tpublic async writeSummaryTree(\n\t\tsummaryTree: ISummaryTree,\n\t\tparentHandle: string | undefined,\n\t\tsummaryType: IWholeSummaryPayloadType,\n\t\tsequenceNumber: number = 0,\n\t\tinitial: boolean = false,\n\t): Promise<string> {\n\t\tconst id = await this.writeSummaryTreeCore(\n\t\t\tparentHandle,\n\t\t\tsummaryTree,\n\t\t\tsummaryType,\n\t\t\tsequenceNumber,\n\t\t\tinitial,\n\t\t);\n\t\tif (!id) {\n\t\t\tthrow new Error(`Failed to write summary tree`);\n\t\t}\n\t\treturn id;\n\t}\n\n\tprivate async writeSummaryTreeCore(\n\t\tparentHandle: string | undefined,\n\t\ttree: ISummaryTree,\n\t\ttype: IWholeSummaryPayloadType,\n\t\tsequenceNumber: number,\n\t\tinitial: boolean,\n\t): Promise<string> {\n\t\tconst snapshotTree = convertSummaryTreeToWholeSummaryTree(\n\t\t\tparentHandle,\n\t\t\ttree,\n\t\t\t\"\",\n\t\t\ttype === \"channel\" ? \".app\" : \"\",\n\t\t);\n\t\tconst snapshotPayload: IWholeSummaryPayload = {\n\t\t\tentries: snapshotTree.entries ?? [],\n\t\t\tmessage: \"\",\n\t\t\tsequenceNumber,\n\t\t\ttype,\n\t\t};\n\n\t\treturn this.manager\n\t\t\t.createSummary(snapshotPayload, initial)\n\t\t\t.then((response) => response.content.id);\n\t}\n}\n"]}
1
+ {"version":3,"file":"wholeSummaryUploadManager.js","sourceRoot":"","sources":["../src/wholeSummaryUploadManager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mFAKgD;AAIhD;;GAEG;AACH,MAAa,yBAAyB;IACrC,YAA6B,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IAAG,CAAC;IAE9C,KAAK,CAAC,gBAAgB,CAC5B,WAAyB,EACzB,YAAgC,EAChC,WAAqC,EACrC,iBAAyB,CAAC,EAC1B,UAAmB,KAAK;QAExB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,CACzC,YAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,EACd,OAAO,CACP,CAAC;QACF,IAAI,CAAC,EAAE,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAChD;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAEO,KAAK,CAAC,oBAAoB,CACjC,YAAgC,EAChC,IAAkB,EAClB,IAA8B,EAC9B,cAAsB,EACtB,OAAgB;QAEhB,MAAM,YAAY,GAAG,IAAA,6DAAoC,EACxD,YAAY,EACZ,IAAI,EACJ,EAAE,EACF,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAChC,CAAC;QACF,MAAM,eAAe,GAAyB;YAC7C,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,EAAE;YACnC,OAAO,EAAE,EAAE;YACX,cAAc;YACd,IAAI;SACJ,CAAC;QAEF,OAAO,IAAI,CAAC,OAAO;aACjB,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC;aACvC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;CACD;AA/CD,8DA+CC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tISummaryTree,\n\tIWholeSummaryPayload,\n\tIWholeSummaryPayloadType,\n\tconvertSummaryTreeToWholeSummaryTree,\n} from \"@fluidframework/server-services-client\";\n\nimport { IGitManager, ISummaryUploadManager } from \"./storageContracts.js\";\n\n/**\n * Converts summary to snapshot tree and uploads with single snaphot tree payload.\n */\nexport class WholeSummaryUploadManager implements ISummaryUploadManager {\n\tconstructor(private readonly manager: IGitManager) {}\n\n\tpublic async writeSummaryTree(\n\t\tsummaryTree: ISummaryTree,\n\t\tparentHandle: string | undefined,\n\t\tsummaryType: IWholeSummaryPayloadType,\n\t\tsequenceNumber: number = 0,\n\t\tinitial: boolean = false,\n\t): Promise<string> {\n\t\tconst id = await this.writeSummaryTreeCore(\n\t\t\tparentHandle,\n\t\t\tsummaryTree,\n\t\t\tsummaryType,\n\t\t\tsequenceNumber,\n\t\t\tinitial,\n\t\t);\n\t\tif (!id) {\n\t\t\tthrow new Error(`Failed to write summary tree`);\n\t\t}\n\t\treturn id;\n\t}\n\n\tprivate async writeSummaryTreeCore(\n\t\tparentHandle: string | undefined,\n\t\ttree: ISummaryTree,\n\t\ttype: IWholeSummaryPayloadType,\n\t\tsequenceNumber: number,\n\t\tinitial: boolean,\n\t): Promise<string> {\n\t\tconst snapshotTree = convertSummaryTreeToWholeSummaryTree(\n\t\t\tparentHandle,\n\t\t\ttree,\n\t\t\t\"\",\n\t\t\ttype === \"channel\" ? \".app\" : \"\",\n\t\t);\n\t\tconst snapshotPayload: IWholeSummaryPayload = {\n\t\t\tentries: snapshotTree.entries ?? [],\n\t\t\tmessage: \"\",\n\t\t\tsequenceNumber,\n\t\t\ttype,\n\t\t};\n\n\t\treturn this.manager\n\t\t\t.createSummary(snapshotPayload, initial)\n\t\t\t.then((response) => response.content.id);\n\t}\n}\n"]}
package/internal.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /*
7
+ * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
+ * Generated by "flub generate entrypoints" in @fluidframework/build-tools.
9
+ */
10
+
11
+ export * from "./lib/index.js";
package/legacy.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /*
7
+ * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
+ * Generated by "flub generate entrypoints" in @fluidframework/build-tools.
9
+ */
10
+
11
+ export * from "./lib/legacy.js";
package/lib/axios.cjs ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /*!
3
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=axios.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios.cjs","sourceRoot":"","sources":["../src/axios.cts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { AxiosRequestConfig, AxiosRequestHeaders, RawAxiosRequestHeaders } from \"axios\";\n\nexport { AxiosRequestConfig, AxiosRequestHeaders, RawAxiosRequestHeaders };\n"]}
@@ -0,0 +1,7 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import type { AxiosRequestConfig, AxiosRequestHeaders, RawAxiosRequestHeaders } from "axios";
6
+ export { AxiosRequestConfig, AxiosRequestHeaders, RawAxiosRequestHeaders };
7
+ //# sourceMappingURL=axios.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios.d.cts","sourceRoot":"","sources":["../src/axios.cts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAE7F,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,CAAC"}
package/lib/beta.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /*
7
+ * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
+ * Generated by "flub generate entrypoints" in @fluidframework/build-tools.
9
+ */
10
+
11
+ export {
12
+ // public APIs
13
+ ITokenProvider,
14
+ ITokenResponse
15
+ } from "./index.js";
@@ -18,4 +18,4 @@ export declare class NullCache<T> implements ICache<T> {
18
18
  get(key: string): Promise<T | undefined>;
19
19
  put(key: string, value: T): Promise<void>;
20
20
  }
21
- //# sourceMappingURL=cache.d.mts.map
21
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,MAAM,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,qGAAqG;AACrG,qBAAa,aAAa,CAAC,CAAC,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;gBAE3B,YAAY,CAAC,EAAE,MAAM;IAIpB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtD;AAED,yEAAyE;AACzE,qBAAa,SAAS,CAAC,CAAC,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CACtD"}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { MapWithExpiration } from "./mapWithExpiration.mjs";
5
+ import { MapWithExpiration } from "./mapWithExpiration.js";
6
6
  /** A basic in-memory cache that optionally supports expiring entries after a period of inactivity */
7
7
  export class InMemoryCache {
8
8
  constructor(expirationMs) {
@@ -22,4 +22,4 @@ export class NullCache {
22
22
  }
23
23
  async put(key, value) { }
24
24
  }
25
- //# sourceMappingURL=cache.mjs.map
25
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAO3D,qGAAqG;AACrG,MAAM,OAAO,aAAa;IAGzB,YAAY,YAAqB;QAChC,IAAI,CAAC,KAAK,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;IAC3F,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAQ;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;CACD;AAED,yEAAyE;AACzE,MAAM,OAAO,SAAS;IACd,KAAK,CAAC,GAAG,CAAC,GAAW;QAC3B,OAAO,SAAS,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAQ,IAAkB,CAAC;CACzD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { MapWithExpiration } from \"./mapWithExpiration.js\";\n\nexport interface ICache<T> {\n\tget(key: string): Promise<T | undefined>;\n\tput(key: string, value: T): Promise<void>;\n}\n\n/** A basic in-memory cache that optionally supports expiring entries after a period of inactivity */\nexport class InMemoryCache<T> implements ICache<T> {\n\tprivate readonly cache: Map<string, T>;\n\n\tconstructor(expirationMs?: number) {\n\t\tthis.cache = expirationMs !== undefined ? new MapWithExpiration(expirationMs) : new Map();\n\t}\n\n\tpublic async get(key: string): Promise<T | undefined> {\n\t\treturn this.cache.get(key);\n\t}\n\n\tpublic async put(key: string, value: T): Promise<void> {\n\t\tthis.cache.set(key, value);\n\t}\n}\n\n/** This \"cache\" does nothing on put, and get always returns undefined */\nexport class NullCache<T> implements ICache<T> {\n\tpublic async get(key: string): Promise<T | undefined> {\n\t\treturn undefined;\n\t}\n\n\tpublic async put(key: string, value: T): Promise<void> {}\n}\n"]}
@@ -40,4 +40,4 @@ export interface INormalizedWholeSnapshot {
40
40
  sequenceNumber: number | undefined;
41
41
  id: string;
42
42
  }
43
- //# sourceMappingURL=contracts.d.mts.map
43
+ //# sourceMappingURL=contracts.d.ts.map