@fluidframework/odsp-driver 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.224419

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. package/.eslintrc.js +12 -12
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +162 -0
  4. package/README.md +56 -0
  5. package/api-extractor-lint.json +4 -0
  6. package/api-extractor.json +2 -2
  7. package/api-report/odsp-driver.api.md +310 -0
  8. package/dist/{ReadBufferUtils.js → ReadBufferUtils.cjs} +16 -9
  9. package/dist/ReadBufferUtils.cjs.map +1 -0
  10. package/dist/ReadBufferUtils.d.ts.map +1 -1
  11. package/dist/{WriteBufferUtils.js → WriteBufferUtils.cjs} +73 -69
  12. package/dist/WriteBufferUtils.cjs.map +1 -0
  13. package/dist/WriteBufferUtils.d.ts +3 -5
  14. package/dist/WriteBufferUtils.d.ts.map +1 -1
  15. package/dist/{checkUrl.js → checkUrl.cjs} +7 -6
  16. package/dist/checkUrl.cjs.map +1 -0
  17. package/dist/checkUrl.d.ts +1 -0
  18. package/dist/checkUrl.d.ts.map +1 -1
  19. package/dist/compactSnapshotParser.cjs +207 -0
  20. package/dist/compactSnapshotParser.cjs.map +1 -0
  21. package/dist/compactSnapshotParser.d.ts +12 -3
  22. package/dist/compactSnapshotParser.d.ts.map +1 -1
  23. package/dist/{compactSnapshotWriter.js → compactSnapshotWriter.cjs} +43 -33
  24. package/dist/compactSnapshotWriter.cjs.map +1 -0
  25. package/dist/compactSnapshotWriter.d.ts +2 -3
  26. package/dist/compactSnapshotWriter.d.ts.map +1 -1
  27. package/dist/{constants.js → constants.cjs} +7 -1
  28. package/dist/constants.cjs.map +1 -0
  29. package/dist/constants.d.ts +6 -0
  30. package/dist/constants.d.ts.map +1 -1
  31. package/dist/{contracts.js → contracts.cjs} +1 -1
  32. package/dist/contracts.cjs.map +1 -0
  33. package/dist/contracts.d.ts +16 -53
  34. package/dist/contracts.d.ts.map +1 -1
  35. package/dist/{contractsPublic.js → contractsPublic.cjs} +9 -3
  36. package/dist/contractsPublic.cjs.map +1 -0
  37. package/dist/contractsPublic.d.ts +15 -0
  38. package/dist/contractsPublic.d.ts.map +1 -1
  39. package/dist/createFile.cjs +177 -0
  40. package/dist/createFile.cjs.map +1 -0
  41. package/dist/createFile.d.ts +6 -10
  42. package/dist/createFile.d.ts.map +1 -1
  43. package/dist/createNewContainerOnExistingFile.cjs +60 -0
  44. package/dist/createNewContainerOnExistingFile.cjs.map +1 -0
  45. package/dist/createNewContainerOnExistingFile.d.ts +22 -0
  46. package/dist/createNewContainerOnExistingFile.d.ts.map +1 -0
  47. package/dist/createNewModule.cjs +12 -0
  48. package/dist/createNewModule.cjs.map +1 -0
  49. package/dist/createNewModule.d.ts +7 -0
  50. package/dist/createNewModule.d.ts.map +1 -0
  51. package/dist/createNewUtils.cjs +203 -0
  52. package/dist/createNewUtils.cjs.map +1 -0
  53. package/dist/createNewUtils.d.ts +16 -0
  54. package/dist/createNewUtils.d.ts.map +1 -1
  55. package/dist/{createOdspCreateContainerRequest.js → createOdspCreateContainerRequest.cjs} +8 -4
  56. package/dist/createOdspCreateContainerRequest.cjs.map +1 -0
  57. package/dist/createOdspCreateContainerRequest.d.ts +5 -3
  58. package/dist/createOdspCreateContainerRequest.d.ts.map +1 -1
  59. package/dist/{createOdspUrl.js → createOdspUrl.cjs} +2 -1
  60. package/dist/createOdspUrl.cjs.map +1 -0
  61. package/dist/createOdspUrl.d.ts +1 -0
  62. package/dist/createOdspUrl.d.ts.map +1 -1
  63. package/dist/{epochTracker.js → epochTracker.cjs} +102 -48
  64. package/dist/epochTracker.cjs.map +1 -0
  65. package/dist/epochTracker.d.ts +32 -8
  66. package/dist/epochTracker.d.ts.map +1 -1
  67. package/dist/{fetch.js → fetch.cjs} +1 -1
  68. package/dist/fetch.cjs.map +1 -0
  69. package/dist/fetch.d.ts +1 -1
  70. package/dist/fetch.d.ts.map +1 -1
  71. package/dist/{fetchSnapshot.js → fetchSnapshot.cjs} +192 -176
  72. package/dist/fetchSnapshot.cjs.map +1 -0
  73. package/dist/fetchSnapshot.d.ts +10 -5
  74. package/dist/fetchSnapshot.d.ts.map +1 -1
  75. package/dist/{getFileLink.js → getFileLink.cjs} +52 -41
  76. package/dist/getFileLink.cjs.map +1 -0
  77. package/dist/getFileLink.d.ts +4 -7
  78. package/dist/getFileLink.d.ts.map +1 -1
  79. package/dist/{getQueryString.js → getQueryString.cjs} +1 -1
  80. package/dist/getQueryString.cjs.map +1 -0
  81. package/dist/getQueryString.d.ts.map +1 -1
  82. package/dist/{getUrlAndHeadersWithAuth.js → getUrlAndHeadersWithAuth.cjs} +4 -2
  83. package/dist/getUrlAndHeadersWithAuth.cjs.map +1 -0
  84. package/dist/getUrlAndHeadersWithAuth.d.ts.map +1 -1
  85. package/dist/index.cjs +59 -0
  86. package/dist/index.cjs.map +1 -0
  87. package/dist/index.d.ts +19 -16
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/localOdspDriver/localOdspDeltaStorageService.cjs +35 -0
  90. package/dist/localOdspDriver/localOdspDeltaStorageService.cjs.map +1 -0
  91. package/dist/localOdspDriver/localOdspDeltaStorageService.d.ts +17 -0
  92. package/dist/localOdspDriver/localOdspDeltaStorageService.d.ts.map +1 -0
  93. package/dist/localOdspDriver/{localOdspDocumentService.js → localOdspDocumentService.cjs} +7 -5
  94. package/dist/localOdspDriver/localOdspDocumentService.cjs.map +1 -0
  95. package/dist/localOdspDriver/localOdspDocumentService.d.ts +3 -2
  96. package/dist/localOdspDriver/localOdspDocumentService.d.ts.map +1 -1
  97. package/dist/localOdspDriver/{localOdspDocumentServiceFactory.js → localOdspDocumentServiceFactory.cjs} +9 -10
  98. package/dist/localOdspDriver/localOdspDocumentServiceFactory.cjs.map +1 -0
  99. package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts +2 -3
  100. package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -1
  101. package/dist/localOdspDriver/{localOdspDocumentStorageManager.js → localOdspDocumentStorageManager.cjs} +13 -11
  102. package/dist/localOdspDriver/localOdspDocumentStorageManager.cjs.map +1 -0
  103. package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts +2 -2
  104. package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +1 -1
  105. package/dist/odsp-driver-alpha.d.ts +497 -0
  106. package/dist/odsp-driver-beta.d.ts +159 -0
  107. package/dist/odsp-driver-public.d.ts +159 -0
  108. package/dist/odsp-driver-untrimmed.d.ts +566 -0
  109. package/dist/{odspCache.js → odspCache.cjs} +9 -10
  110. package/dist/odspCache.cjs.map +1 -0
  111. package/dist/odspCache.d.ts +19 -4
  112. package/dist/odspCache.d.ts.map +1 -1
  113. package/dist/odspDelayLoadedDeltaStream.cjs +291 -0
  114. package/dist/odspDelayLoadedDeltaStream.cjs.map +1 -0
  115. package/dist/odspDelayLoadedDeltaStream.d.ts +75 -0
  116. package/dist/odspDelayLoadedDeltaStream.d.ts.map +1 -0
  117. package/dist/{odspDeltaStorageService.js → odspDeltaStorageService.cjs} +70 -71
  118. package/dist/odspDeltaStorageService.cjs.map +1 -0
  119. package/dist/odspDeltaStorageService.d.ts +8 -6
  120. package/dist/odspDeltaStorageService.d.ts.map +1 -1
  121. package/dist/{odspDocumentDeltaConnection.js → odspDocumentDeltaConnection.cjs} +224 -113
  122. package/dist/odspDocumentDeltaConnection.cjs.map +1 -0
  123. package/dist/odspDocumentDeltaConnection.d.ts +32 -12
  124. package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
  125. package/dist/odspDocumentService.cjs +225 -0
  126. package/dist/odspDocumentService.cjs.map +1 -0
  127. package/dist/odspDocumentService.d.ts +11 -25
  128. package/dist/odspDocumentService.d.ts.map +1 -1
  129. package/dist/{odspDocumentServiceFactory.js → odspDocumentServiceFactory.cjs} +8 -5
  130. package/dist/odspDocumentServiceFactory.cjs.map +1 -0
  131. package/dist/odspDocumentServiceFactory.d.ts +4 -0
  132. package/dist/odspDocumentServiceFactory.d.ts.map +1 -1
  133. package/dist/odspDocumentServiceFactoryCore.cjs +196 -0
  134. package/dist/odspDocumentServiceFactoryCore.cjs.map +1 -0
  135. package/dist/odspDocumentServiceFactoryCore.d.ts +16 -11
  136. package/dist/odspDocumentServiceFactoryCore.d.ts.map +1 -1
  137. package/dist/odspDocumentServiceFactoryWithCodeSplit.cjs +20 -0
  138. package/dist/odspDocumentServiceFactoryWithCodeSplit.cjs.map +1 -0
  139. package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts +5 -0
  140. package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +1 -1
  141. package/dist/odspDocumentStorageManager.cjs +490 -0
  142. package/dist/odspDocumentStorageManager.cjs.map +1 -0
  143. package/dist/odspDocumentStorageManager.d.ts +11 -5
  144. package/dist/odspDocumentStorageManager.d.ts.map +1 -1
  145. package/dist/{odspDocumentStorageServiceBase.js → odspDocumentStorageServiceBase.cjs} +32 -34
  146. package/dist/odspDocumentStorageServiceBase.cjs.map +1 -0
  147. package/dist/odspDocumentStorageServiceBase.d.ts +7 -9
  148. package/dist/odspDocumentStorageServiceBase.d.ts.map +1 -1
  149. package/dist/{odspDriverUrlResolver.js → odspDriverUrlResolver.cjs} +50 -36
  150. package/dist/odspDriverUrlResolver.cjs.map +1 -0
  151. package/dist/odspDriverUrlResolver.d.ts +12 -0
  152. package/dist/odspDriverUrlResolver.d.ts.map +1 -1
  153. package/dist/{odspDriverUrlResolverForShareLink.js → odspDriverUrlResolverForShareLink.cjs} +37 -26
  154. package/dist/odspDriverUrlResolverForShareLink.cjs.map +1 -0
  155. package/dist/odspDriverUrlResolverForShareLink.d.ts +5 -3
  156. package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
  157. package/dist/{odspError.js → odspError.cjs} +7 -3
  158. package/dist/odspError.cjs.map +1 -0
  159. package/dist/odspError.d.ts.map +1 -1
  160. package/dist/{odspFluidFileLink.js → odspFluidFileLink.cjs} +25 -18
  161. package/dist/odspFluidFileLink.cjs.map +1 -0
  162. package/dist/odspFluidFileLink.d.ts +10 -1
  163. package/dist/odspFluidFileLink.d.ts.map +1 -1
  164. package/dist/odspLocationRedirection.cjs +24 -0
  165. package/dist/odspLocationRedirection.cjs.map +1 -0
  166. package/dist/odspLocationRedirection.d.ts +14 -0
  167. package/dist/odspLocationRedirection.d.ts.map +1 -0
  168. package/dist/{odspPublicUtils.js → odspPublicUtils.cjs} +7 -4
  169. package/dist/odspPublicUtils.cjs.map +1 -0
  170. package/dist/odspPublicUtils.d.ts +6 -0
  171. package/dist/odspPublicUtils.d.ts.map +1 -1
  172. package/dist/{odspSnapshotParser.js → odspSnapshotParser.cjs} +11 -12
  173. package/dist/odspSnapshotParser.cjs.map +1 -0
  174. package/dist/odspSnapshotParser.d.ts.map +1 -1
  175. package/dist/{odspSummaryUploadManager.js → odspSummaryUploadManager.cjs} +47 -34
  176. package/dist/odspSummaryUploadManager.cjs.map +1 -0
  177. package/dist/odspSummaryUploadManager.d.ts +7 -4
  178. package/dist/odspSummaryUploadManager.d.ts.map +1 -1
  179. package/dist/{odspUrlHelper.js → odspUrlHelper.cjs} +9 -3
  180. package/dist/odspUrlHelper.cjs.map +1 -0
  181. package/dist/odspUrlHelper.d.ts +5 -0
  182. package/dist/odspUrlHelper.d.ts.map +1 -1
  183. package/dist/{odspUtils.js → odspUtils.cjs} +118 -30
  184. package/dist/odspUtils.cjs.map +1 -0
  185. package/dist/odspUtils.d.ts +35 -6
  186. package/dist/odspUtils.d.ts.map +1 -1
  187. package/dist/{opsCaching.js → opsCaching.cjs} +25 -9
  188. package/dist/opsCaching.cjs.map +1 -0
  189. package/dist/opsCaching.d.ts +3 -3
  190. package/dist/opsCaching.d.ts.map +1 -1
  191. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  192. package/dist/packageVersion.cjs.map +1 -0
  193. package/dist/packageVersion.d.ts +1 -1
  194. package/dist/packageVersion.d.ts.map +1 -1
  195. package/dist/prefetchLatestSnapshot.cjs +100 -0
  196. package/dist/prefetchLatestSnapshot.cjs.map +1 -0
  197. package/dist/prefetchLatestSnapshot.d.ts +12 -7
  198. package/dist/prefetchLatestSnapshot.d.ts.map +1 -1
  199. package/dist/{retryErrorsStorageAdapter.js → retryErrorsStorageAdapter.cjs} +13 -6
  200. package/dist/retryErrorsStorageAdapter.cjs.map +1 -0
  201. package/dist/retryErrorsStorageAdapter.d.ts +5 -4
  202. package/dist/retryErrorsStorageAdapter.d.ts.map +1 -1
  203. package/dist/{retryUtils.js → retryUtils.cjs} +30 -14
  204. package/dist/retryUtils.cjs.map +1 -0
  205. package/dist/retryUtils.d.ts +2 -2
  206. package/dist/retryUtils.d.ts.map +1 -1
  207. package/dist/socketModule.cjs +10 -0
  208. package/dist/socketModule.cjs.map +1 -0
  209. package/dist/socketModule.d.ts +7 -0
  210. package/dist/socketModule.d.ts.map +1 -0
  211. package/dist/tsdoc-metadata.json +11 -0
  212. package/dist/{vroom.js → vroom.cjs} +24 -9
  213. package/dist/vroom.cjs.map +1 -0
  214. package/dist/vroom.d.ts +4 -4
  215. package/dist/vroom.d.ts.map +1 -1
  216. package/dist/{zipItDataRepresentationUtils.js → zipItDataRepresentationUtils.cjs} +227 -118
  217. package/dist/zipItDataRepresentationUtils.cjs.map +1 -0
  218. package/dist/zipItDataRepresentationUtils.d.ts +47 -20
  219. package/dist/zipItDataRepresentationUtils.d.ts.map +1 -1
  220. package/lib/ReadBufferUtils.d.mts.map +1 -0
  221. package/lib/{ReadBufferUtils.js → ReadBufferUtils.mjs} +14 -7
  222. package/lib/ReadBufferUtils.mjs.map +1 -0
  223. package/lib/{WriteBufferUtils.d.ts → WriteBufferUtils.d.mts} +3 -5
  224. package/lib/WriteBufferUtils.d.mts.map +1 -0
  225. package/lib/{WriteBufferUtils.js → WriteBufferUtils.mjs} +68 -64
  226. package/lib/WriteBufferUtils.mjs.map +1 -0
  227. package/lib/{checkUrl.d.ts → checkUrl.d.mts} +1 -0
  228. package/lib/checkUrl.d.mts.map +1 -0
  229. package/lib/{checkUrl.js → checkUrl.mjs} +7 -6
  230. package/lib/checkUrl.mjs.map +1 -0
  231. package/lib/compactSnapshotParser.d.mts +24 -0
  232. package/lib/compactSnapshotParser.d.mts.map +1 -0
  233. package/lib/compactSnapshotParser.mjs +203 -0
  234. package/lib/compactSnapshotParser.mjs.map +1 -0
  235. package/lib/{compactSnapshotWriter.d.ts → compactSnapshotWriter.d.mts} +3 -4
  236. package/lib/compactSnapshotWriter.d.mts.map +1 -0
  237. package/lib/{compactSnapshotWriter.js → compactSnapshotWriter.mjs} +41 -31
  238. package/lib/compactSnapshotWriter.mjs.map +1 -0
  239. package/lib/{constants.d.ts → constants.d.mts} +6 -0
  240. package/lib/constants.d.mts.map +1 -0
  241. package/lib/{constants.js → constants.mjs} +7 -1
  242. package/lib/constants.mjs.map +1 -0
  243. package/lib/{contracts.d.ts → contracts.d.mts} +17 -54
  244. package/lib/contracts.d.mts.map +1 -0
  245. package/lib/{contracts.js → contracts.mjs} +1 -1
  246. package/lib/contracts.mjs.map +1 -0
  247. package/lib/{contractsPublic.d.ts → contractsPublic.d.mts} +15 -0
  248. package/lib/contractsPublic.d.mts.map +1 -0
  249. package/lib/{contractsPublic.js → contractsPublic.mjs} +7 -1
  250. package/lib/contractsPublic.mjs.map +1 -0
  251. package/lib/createFile.d.mts +18 -0
  252. package/lib/createFile.d.mts.map +1 -0
  253. package/lib/createFile.mjs +171 -0
  254. package/lib/createFile.mjs.map +1 -0
  255. package/lib/createNewContainerOnExistingFile.d.mts +22 -0
  256. package/lib/createNewContainerOnExistingFile.d.mts.map +1 -0
  257. package/lib/createNewContainerOnExistingFile.mjs +56 -0
  258. package/lib/createNewContainerOnExistingFile.mjs.map +1 -0
  259. package/lib/createNewModule.d.mts +7 -0
  260. package/lib/createNewModule.d.mts.map +1 -0
  261. package/lib/createNewModule.mjs +7 -0
  262. package/lib/createNewModule.mjs.map +1 -0
  263. package/lib/createNewUtils.d.mts +27 -0
  264. package/lib/createNewUtils.d.mts.map +1 -0
  265. package/lib/createNewUtils.mjs +197 -0
  266. package/lib/createNewUtils.mjs.map +1 -0
  267. package/lib/{createOdspCreateContainerRequest.d.ts → createOdspCreateContainerRequest.d.mts} +5 -7
  268. package/lib/createOdspCreateContainerRequest.d.mts.map +1 -0
  269. package/lib/{createOdspCreateContainerRequest.js → createOdspCreateContainerRequest.mjs} +8 -4
  270. package/lib/createOdspCreateContainerRequest.mjs.map +1 -0
  271. package/lib/{createOdspUrl.d.ts → createOdspUrl.d.mts} +2 -1
  272. package/lib/{createOdspUrl.d.ts.map → createOdspUrl.d.mts.map} +1 -1
  273. package/lib/{createOdspUrl.js → createOdspUrl.mjs} +2 -1
  274. package/lib/createOdspUrl.mjs.map +1 -0
  275. package/lib/{epochTracker.d.ts → epochTracker.d.mts} +34 -10
  276. package/lib/epochTracker.d.mts.map +1 -0
  277. package/lib/{epochTracker.js → epochTracker.mjs} +97 -43
  278. package/lib/epochTracker.mjs.map +1 -0
  279. package/lib/{fetch.d.ts → fetch.d.mts} +1 -1
  280. package/lib/{fetch.d.ts.map → fetch.d.mts.map} +1 -1
  281. package/lib/{fetch.js → fetch.mjs} +1 -1
  282. package/lib/fetch.mjs.map +1 -0
  283. package/lib/{fetchSnapshot.d.ts → fetchSnapshot.d.mts} +14 -9
  284. package/lib/fetchSnapshot.d.mts.map +1 -0
  285. package/lib/{fetchSnapshot.js → fetchSnapshot.mjs} +185 -167
  286. package/lib/fetchSnapshot.mjs.map +1 -0
  287. package/lib/{getFileLink.d.ts → getFileLink.d.mts} +4 -7
  288. package/lib/getFileLink.d.mts.map +1 -0
  289. package/lib/{getFileLink.js → getFileLink.mjs} +49 -38
  290. package/lib/getFileLink.mjs.map +1 -0
  291. package/lib/{getQueryString.d.ts → getQueryString.d.mts} +0 -4
  292. package/lib/getQueryString.d.mts.map +1 -0
  293. package/lib/{getQueryString.js → getQueryString.mjs} +1 -1
  294. package/lib/getQueryString.mjs.map +1 -0
  295. package/lib/{getUrlAndHeadersWithAuth.d.ts.map → getUrlAndHeadersWithAuth.d.mts.map} +1 -1
  296. package/lib/{getUrlAndHeadersWithAuth.js → getUrlAndHeadersWithAuth.mjs} +4 -2
  297. package/lib/getUrlAndHeadersWithAuth.mjs.map +1 -0
  298. package/lib/index.d.mts +24 -0
  299. package/lib/index.d.mts.map +1 -0
  300. package/lib/index.mjs +22 -0
  301. package/lib/index.mjs.map +1 -0
  302. package/lib/localOdspDriver/localOdspDeltaStorageService.d.mts +17 -0
  303. package/lib/localOdspDriver/localOdspDeltaStorageService.d.mts.map +1 -0
  304. package/lib/localOdspDriver/localOdspDeltaStorageService.mjs +31 -0
  305. package/lib/localOdspDriver/localOdspDeltaStorageService.mjs.map +1 -0
  306. package/lib/localOdspDriver/{localOdspDocumentService.d.ts → localOdspDocumentService.d.mts} +3 -2
  307. package/lib/localOdspDriver/localOdspDocumentService.d.mts.map +1 -0
  308. package/lib/localOdspDriver/{localOdspDocumentService.js → localOdspDocumentService.mjs} +8 -6
  309. package/lib/localOdspDriver/localOdspDocumentService.mjs.map +1 -0
  310. package/lib/localOdspDriver/{localOdspDocumentServiceFactory.d.ts → localOdspDocumentServiceFactory.d.mts} +4 -5
  311. package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.mts.map +1 -0
  312. package/lib/localOdspDriver/{localOdspDocumentServiceFactory.js → localOdspDocumentServiceFactory.mjs} +9 -10
  313. package/lib/localOdspDriver/localOdspDocumentServiceFactory.mjs.map +1 -0
  314. package/lib/localOdspDriver/{localOdspDocumentStorageManager.d.ts → localOdspDocumentStorageManager.d.mts} +3 -3
  315. package/lib/localOdspDriver/localOdspDocumentStorageManager.d.mts.map +1 -0
  316. package/lib/localOdspDriver/{localOdspDocumentStorageManager.js → localOdspDocumentStorageManager.mjs} +11 -9
  317. package/lib/localOdspDriver/localOdspDocumentStorageManager.mjs.map +1 -0
  318. package/lib/odsp-driver-alpha.d.mts +497 -0
  319. package/lib/odsp-driver-beta.d.mts +159 -0
  320. package/lib/odsp-driver-public.d.mts +159 -0
  321. package/lib/odsp-driver-untrimmed.d.mts +566 -0
  322. package/lib/{odspCache.d.ts → odspCache.d.mts} +19 -8
  323. package/lib/odspCache.d.mts.map +1 -0
  324. package/lib/{odspCache.js → odspCache.mjs} +6 -11
  325. package/lib/odspCache.mjs.map +1 -0
  326. package/lib/odspDelayLoadedDeltaStream.d.mts +75 -0
  327. package/lib/odspDelayLoadedDeltaStream.d.mts.map +1 -0
  328. package/lib/odspDelayLoadedDeltaStream.mjs +287 -0
  329. package/lib/odspDelayLoadedDeltaStream.mjs.map +1 -0
  330. package/lib/{odspDeltaStorageService.d.ts → odspDeltaStorageService.d.mts} +9 -7
  331. package/lib/odspDeltaStorageService.d.mts.map +1 -0
  332. package/lib/{odspDeltaStorageService.js → odspDeltaStorageService.mjs} +70 -68
  333. package/lib/odspDeltaStorageService.mjs.map +1 -0
  334. package/lib/{odspDocumentDeltaConnection.d.ts → odspDocumentDeltaConnection.d.mts} +33 -13
  335. package/lib/odspDocumentDeltaConnection.d.mts.map +1 -0
  336. package/lib/{odspDocumentDeltaConnection.js → odspDocumentDeltaConnection.mjs} +214 -103
  337. package/lib/odspDocumentDeltaConnection.mjs.map +1 -0
  338. package/lib/{odspDocumentService.d.ts → odspDocumentService.d.mts} +14 -28
  339. package/lib/odspDocumentService.d.mts.map +1 -0
  340. package/lib/odspDocumentService.mjs +221 -0
  341. package/lib/odspDocumentService.mjs.map +1 -0
  342. package/lib/{odspDocumentServiceFactory.d.ts → odspDocumentServiceFactory.d.mts} +5 -1
  343. package/lib/odspDocumentServiceFactory.d.mts.map +1 -0
  344. package/lib/{odspDocumentServiceFactory.js → odspDocumentServiceFactory.mjs} +8 -6
  345. package/lib/odspDocumentServiceFactory.mjs.map +1 -0
  346. package/lib/{odspDocumentServiceFactoryCore.d.ts → odspDocumentServiceFactoryCore.d.mts} +17 -12
  347. package/lib/odspDocumentServiceFactoryCore.d.mts.map +1 -0
  348. package/lib/odspDocumentServiceFactoryCore.mjs +192 -0
  349. package/lib/odspDocumentServiceFactoryCore.mjs.map +1 -0
  350. package/lib/{odspDocumentServiceFactoryWithCodeSplit.d.ts → odspDocumentServiceFactoryWithCodeSplit.d.mts} +6 -1
  351. package/lib/odspDocumentServiceFactoryWithCodeSplit.d.mts.map +1 -0
  352. package/lib/{odspDocumentServiceFactoryWithCodeSplit.js → odspDocumentServiceFactoryWithCodeSplit.mjs} +8 -3
  353. package/lib/odspDocumentServiceFactoryWithCodeSplit.mjs.map +1 -0
  354. package/lib/{odspDocumentStorageManager.d.ts → odspDocumentStorageManager.d.mts} +17 -11
  355. package/lib/odspDocumentStorageManager.d.mts.map +1 -0
  356. package/lib/odspDocumentStorageManager.mjs +486 -0
  357. package/lib/odspDocumentStorageManager.mjs.map +1 -0
  358. package/lib/{odspDocumentStorageServiceBase.d.ts → odspDocumentStorageServiceBase.d.mts} +8 -10
  359. package/lib/odspDocumentStorageServiceBase.d.mts.map +1 -0
  360. package/lib/{odspDocumentStorageServiceBase.js → odspDocumentStorageServiceBase.mjs} +31 -33
  361. package/lib/odspDocumentStorageServiceBase.mjs.map +1 -0
  362. package/lib/{odspDriverUrlResolver.d.ts → odspDriverUrlResolver.d.mts} +12 -0
  363. package/lib/odspDriverUrlResolver.d.mts.map +1 -0
  364. package/lib/{odspDriverUrlResolver.js → odspDriverUrlResolver.mjs} +50 -40
  365. package/lib/odspDriverUrlResolver.mjs.map +1 -0
  366. package/lib/{odspDriverUrlResolverForShareLink.d.ts → odspDriverUrlResolverForShareLink.d.mts} +6 -4
  367. package/lib/odspDriverUrlResolverForShareLink.d.mts.map +1 -0
  368. package/lib/{odspDriverUrlResolverForShareLink.js → odspDriverUrlResolverForShareLink.mjs} +36 -29
  369. package/lib/odspDriverUrlResolverForShareLink.mjs.map +1 -0
  370. package/lib/{odspError.d.ts → odspError.d.mts} +1 -1
  371. package/lib/odspError.d.mts.map +1 -0
  372. package/lib/{odspError.js → odspError.mjs} +7 -3
  373. package/lib/odspError.mjs.map +1 -0
  374. package/lib/{odspFluidFileLink.d.ts → odspFluidFileLink.d.mts} +11 -2
  375. package/lib/odspFluidFileLink.d.mts.map +1 -0
  376. package/lib/{odspFluidFileLink.js → odspFluidFileLink.mjs} +23 -16
  377. package/lib/odspFluidFileLink.mjs.map +1 -0
  378. package/lib/odspLocationRedirection.d.mts +14 -0
  379. package/lib/odspLocationRedirection.d.mts.map +1 -0
  380. package/lib/odspLocationRedirection.mjs +20 -0
  381. package/lib/odspLocationRedirection.mjs.map +1 -0
  382. package/lib/{odspPublicUtils.d.ts → odspPublicUtils.d.mts} +6 -0
  383. package/lib/odspPublicUtils.d.mts.map +1 -0
  384. package/lib/{odspPublicUtils.js → odspPublicUtils.mjs} +5 -2
  385. package/lib/odspPublicUtils.mjs.map +1 -0
  386. package/lib/{odspSnapshotParser.d.ts → odspSnapshotParser.d.mts} +2 -2
  387. package/lib/odspSnapshotParser.d.mts.map +1 -0
  388. package/lib/{odspSnapshotParser.js → odspSnapshotParser.mjs} +10 -11
  389. package/lib/odspSnapshotParser.mjs.map +1 -0
  390. package/lib/{odspSummaryUploadManager.d.ts → odspSummaryUploadManager.d.mts} +8 -5
  391. package/lib/odspSummaryUploadManager.d.mts.map +1 -0
  392. package/lib/{odspSummaryUploadManager.js → odspSummaryUploadManager.mjs} +41 -32
  393. package/lib/odspSummaryUploadManager.mjs.map +1 -0
  394. package/lib/{odspUrlHelper.d.ts → odspUrlHelper.d.mts} +5 -0
  395. package/lib/odspUrlHelper.d.mts.map +1 -0
  396. package/lib/{odspUrlHelper.js → odspUrlHelper.mjs} +9 -3
  397. package/lib/odspUrlHelper.mjs.map +1 -0
  398. package/lib/{odspUtils.d.ts → odspUtils.d.mts} +36 -7
  399. package/lib/odspUtils.d.mts.map +1 -0
  400. package/lib/{odspUtils.js → odspUtils.mjs} +109 -27
  401. package/lib/odspUtils.mjs.map +1 -0
  402. package/lib/{opsCaching.d.ts → opsCaching.d.mts} +3 -3
  403. package/lib/opsCaching.d.mts.map +1 -0
  404. package/lib/{opsCaching.js → opsCaching.mjs} +23 -7
  405. package/lib/opsCaching.mjs.map +1 -0
  406. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
  407. package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
  408. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  409. package/lib/packageVersion.mjs.map +1 -0
  410. package/lib/{prefetchLatestSnapshot.d.ts → prefetchLatestSnapshot.d.mts} +13 -8
  411. package/lib/prefetchLatestSnapshot.d.mts.map +1 -0
  412. package/lib/prefetchLatestSnapshot.mjs +96 -0
  413. package/lib/prefetchLatestSnapshot.mjs.map +1 -0
  414. package/lib/{retryErrorsStorageAdapter.d.ts → retryErrorsStorageAdapter.d.mts} +5 -4
  415. package/lib/retryErrorsStorageAdapter.d.mts.map +1 -0
  416. package/lib/{retryErrorsStorageAdapter.js → retryErrorsStorageAdapter.mjs} +13 -6
  417. package/lib/retryErrorsStorageAdapter.mjs.map +1 -0
  418. package/lib/{retryUtils.d.ts → retryUtils.d.mts} +2 -2
  419. package/lib/retryUtils.d.mts.map +1 -0
  420. package/lib/{retryUtils.js → retryUtils.mjs} +27 -11
  421. package/lib/retryUtils.mjs.map +1 -0
  422. package/lib/socketModule.d.mts +7 -0
  423. package/lib/socketModule.d.mts.map +1 -0
  424. package/lib/socketModule.mjs +7 -0
  425. package/lib/socketModule.mjs.map +1 -0
  426. package/lib/{vroom.d.ts → vroom.d.mts} +6 -6
  427. package/lib/vroom.d.mts.map +1 -0
  428. package/lib/{vroom.js → vroom.mjs} +24 -9
  429. package/lib/vroom.mjs.map +1 -0
  430. package/lib/{zipItDataRepresentationUtils.d.ts → zipItDataRepresentationUtils.d.mts} +48 -21
  431. package/lib/zipItDataRepresentationUtils.d.mts.map +1 -0
  432. package/lib/{zipItDataRepresentationUtils.js → zipItDataRepresentationUtils.mjs} +213 -111
  433. package/lib/zipItDataRepresentationUtils.mjs.map +1 -0
  434. package/package.json +89 -69
  435. package/prettier.config.cjs +8 -0
  436. package/src/ReadBufferUtils.ts +51 -44
  437. package/src/WriteBufferUtils.ts +203 -181
  438. package/src/checkUrl.ts +16 -15
  439. package/src/compactSnapshotParser.ts +219 -103
  440. package/src/compactSnapshotWriter.ts +118 -97
  441. package/src/constants.ts +7 -0
  442. package/src/contracts.ts +96 -136
  443. package/src/contractsPublic.ts +31 -16
  444. package/src/createFile.ts +243 -305
  445. package/src/createNewContainerOnExistingFile.ts +93 -0
  446. package/src/createNewModule.ts +7 -0
  447. package/src/createNewUtils.ts +266 -56
  448. package/src/createOdspCreateContainerRequest.ts +22 -18
  449. package/src/createOdspUrl.ts +12 -13
  450. package/src/epochTracker.ts +596 -457
  451. package/src/fetch.ts +4 -4
  452. package/src/fetchSnapshot.ts +583 -508
  453. package/src/getFileLink.ts +194 -155
  454. package/src/getQueryString.ts +11 -9
  455. package/src/getUrlAndHeadersWithAuth.ts +34 -33
  456. package/src/index.ts +42 -18
  457. package/src/localOdspDriver/localOdspDeltaStorageService.ts +49 -0
  458. package/src/localOdspDriver/localOdspDocumentService.ts +40 -38
  459. package/src/localOdspDriver/localOdspDocumentServiceFactory.ts +46 -43
  460. package/src/localOdspDriver/localOdspDocumentStorageManager.ts +55 -50
  461. package/src/odspCache.ts +112 -90
  462. package/src/odspDelayLoadedDeltaStream.ts +459 -0
  463. package/src/odspDeltaStorageService.ts +232 -221
  464. package/src/odspDocumentDeltaConnection.ts +751 -563
  465. package/src/odspDocumentService.ts +324 -523
  466. package/src/odspDocumentServiceFactory.ts +20 -21
  467. package/src/odspDocumentServiceFactoryCore.ts +325 -202
  468. package/src/odspDocumentServiceFactoryWithCodeSplit.ts +20 -20
  469. package/src/odspDocumentStorageManager.ts +730 -534
  470. package/src/odspDocumentStorageServiceBase.ts +279 -254
  471. package/src/odspDriverUrlResolver.ts +230 -188
  472. package/src/odspDriverUrlResolverForShareLink.ts +223 -203
  473. package/src/odspError.ts +27 -19
  474. package/src/odspFluidFileLink.ts +106 -87
  475. package/src/odspLocationRedirection.ts +26 -0
  476. package/src/odspPublicUtils.ts +20 -14
  477. package/src/odspSnapshotParser.ts +53 -46
  478. package/src/odspSummaryUploadManager.ts +243 -218
  479. package/src/odspUrlHelper.ts +81 -71
  480. package/src/odspUtils.ts +401 -259
  481. package/src/opsCaching.ts +214 -193
  482. package/src/packageVersion.ts +1 -1
  483. package/src/prefetchLatestSnapshot.ts +142 -80
  484. package/src/retryErrorsStorageAdapter.ts +92 -77
  485. package/src/retryUtils.ts +80 -57
  486. package/src/socketModule.ts +8 -0
  487. package/src/vroom.ts +92 -83
  488. package/src/zipItDataRepresentationUtils.ts +534 -394
  489. package/tsc-multi.test.json +4 -0
  490. package/tsconfig.json +11 -13
  491. package/.editorconfig +0 -7
  492. package/dist/ReadBufferUtils.js.map +0 -1
  493. package/dist/WriteBufferUtils.js.map +0 -1
  494. package/dist/checkUrl.js.map +0 -1
  495. package/dist/compactSnapshotParser.js +0 -115
  496. package/dist/compactSnapshotParser.js.map +0 -1
  497. package/dist/compactSnapshotWriter.js.map +0 -1
  498. package/dist/constants.js.map +0 -1
  499. package/dist/contracts.js.map +0 -1
  500. package/dist/contractsPublic.js.map +0 -1
  501. package/dist/createFile.js +0 -242
  502. package/dist/createFile.js.map +0 -1
  503. package/dist/createNewUtils.js +0 -67
  504. package/dist/createNewUtils.js.map +0 -1
  505. package/dist/createOdspCreateContainerRequest.js.map +0 -1
  506. package/dist/createOdspUrl.js.map +0 -1
  507. package/dist/epochTracker.js.map +0 -1
  508. package/dist/fetch.js.map +0 -1
  509. package/dist/fetchSnapshot.js.map +0 -1
  510. package/dist/getFileLink.js.map +0 -1
  511. package/dist/getQueryString.js.map +0 -1
  512. package/dist/getSocketIo.d.ts +0 -11
  513. package/dist/getSocketIo.d.ts.map +0 -1
  514. package/dist/getSocketIo.js +0 -20
  515. package/dist/getSocketIo.js.map +0 -1
  516. package/dist/getUrlAndHeadersWithAuth.js.map +0 -1
  517. package/dist/index.js +0 -41
  518. package/dist/index.js.map +0 -1
  519. package/dist/localOdspDriver/localOdspDocumentService.js.map +0 -1
  520. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js.map +0 -1
  521. package/dist/localOdspDriver/localOdspDocumentStorageManager.js.map +0 -1
  522. package/dist/odspCache.js.map +0 -1
  523. package/dist/odspDeltaStorageService.js.map +0 -1
  524. package/dist/odspDocumentDeltaConnection.js.map +0 -1
  525. package/dist/odspDocumentService.js +0 -364
  526. package/dist/odspDocumentService.js.map +0 -1
  527. package/dist/odspDocumentServiceFactory.js.map +0 -1
  528. package/dist/odspDocumentServiceFactoryCore.js +0 -118
  529. package/dist/odspDocumentServiceFactoryCore.js.map +0 -1
  530. package/dist/odspDocumentServiceFactoryWithCodeSplit.js +0 -34
  531. package/dist/odspDocumentServiceFactoryWithCodeSplit.js.map +0 -1
  532. package/dist/odspDocumentStorageManager.js +0 -356
  533. package/dist/odspDocumentStorageManager.js.map +0 -1
  534. package/dist/odspDocumentStorageServiceBase.js.map +0 -1
  535. package/dist/odspDriverUrlResolver.js.map +0 -1
  536. package/dist/odspDriverUrlResolverForShareLink.js.map +0 -1
  537. package/dist/odspError.js.map +0 -1
  538. package/dist/odspFluidFileLink.js.map +0 -1
  539. package/dist/odspPublicUtils.js.map +0 -1
  540. package/dist/odspSnapshotParser.js.map +0 -1
  541. package/dist/odspSummaryUploadManager.js.map +0 -1
  542. package/dist/odspUrlHelper.js.map +0 -1
  543. package/dist/odspUtils.js.map +0 -1
  544. package/dist/opsCaching.js.map +0 -1
  545. package/dist/packageVersion.js.map +0 -1
  546. package/dist/prefetchLatestSnapshot.js +0 -57
  547. package/dist/prefetchLatestSnapshot.js.map +0 -1
  548. package/dist/retryErrorsStorageAdapter.js.map +0 -1
  549. package/dist/retryUtils.js.map +0 -1
  550. package/dist/vroom.js.map +0 -1
  551. package/dist/zipItDataRepresentationUtils.js.map +0 -1
  552. package/lib/ReadBufferUtils.d.ts.map +0 -1
  553. package/lib/ReadBufferUtils.js.map +0 -1
  554. package/lib/WriteBufferUtils.d.ts.map +0 -1
  555. package/lib/WriteBufferUtils.js.map +0 -1
  556. package/lib/checkUrl.d.ts.map +0 -1
  557. package/lib/checkUrl.js.map +0 -1
  558. package/lib/compactSnapshotParser.d.ts +0 -15
  559. package/lib/compactSnapshotParser.d.ts.map +0 -1
  560. package/lib/compactSnapshotParser.js +0 -111
  561. package/lib/compactSnapshotParser.js.map +0 -1
  562. package/lib/compactSnapshotWriter.d.ts.map +0 -1
  563. package/lib/compactSnapshotWriter.js.map +0 -1
  564. package/lib/constants.d.ts.map +0 -1
  565. package/lib/constants.js.map +0 -1
  566. package/lib/contracts.d.ts.map +0 -1
  567. package/lib/contracts.js.map +0 -1
  568. package/lib/contractsPublic.d.ts.map +0 -1
  569. package/lib/contractsPublic.js.map +0 -1
  570. package/lib/createFile.d.ts +0 -22
  571. package/lib/createFile.d.ts.map +0 -1
  572. package/lib/createFile.js +0 -235
  573. package/lib/createFile.js.map +0 -1
  574. package/lib/createNewUtils.d.ts +0 -11
  575. package/lib/createNewUtils.d.ts.map +0 -1
  576. package/lib/createNewUtils.js +0 -63
  577. package/lib/createNewUtils.js.map +0 -1
  578. package/lib/createOdspCreateContainerRequest.d.ts.map +0 -1
  579. package/lib/createOdspCreateContainerRequest.js.map +0 -1
  580. package/lib/createOdspUrl.js.map +0 -1
  581. package/lib/epochTracker.d.ts.map +0 -1
  582. package/lib/epochTracker.js.map +0 -1
  583. package/lib/fetch.js.map +0 -1
  584. package/lib/fetchSnapshot.d.ts.map +0 -1
  585. package/lib/fetchSnapshot.js.map +0 -1
  586. package/lib/getFileLink.d.ts.map +0 -1
  587. package/lib/getFileLink.js.map +0 -1
  588. package/lib/getQueryString.d.ts.map +0 -1
  589. package/lib/getQueryString.js.map +0 -1
  590. package/lib/getSocketIo.d.ts +0 -11
  591. package/lib/getSocketIo.d.ts.map +0 -1
  592. package/lib/getSocketIo.js +0 -13
  593. package/lib/getSocketIo.js.map +0 -1
  594. package/lib/getUrlAndHeadersWithAuth.js.map +0 -1
  595. package/lib/index.d.ts +0 -21
  596. package/lib/index.d.ts.map +0 -1
  597. package/lib/index.js +0 -29
  598. package/lib/index.js.map +0 -1
  599. package/lib/localOdspDriver/localOdspDocumentService.d.ts.map +0 -1
  600. package/lib/localOdspDriver/localOdspDocumentService.js.map +0 -1
  601. package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +0 -1
  602. package/lib/localOdspDriver/localOdspDocumentServiceFactory.js.map +0 -1
  603. package/lib/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +0 -1
  604. package/lib/localOdspDriver/localOdspDocumentStorageManager.js.map +0 -1
  605. package/lib/odspCache.d.ts.map +0 -1
  606. package/lib/odspCache.js.map +0 -1
  607. package/lib/odspDeltaStorageService.d.ts.map +0 -1
  608. package/lib/odspDeltaStorageService.js.map +0 -1
  609. package/lib/odspDocumentDeltaConnection.d.ts.map +0 -1
  610. package/lib/odspDocumentDeltaConnection.js.map +0 -1
  611. package/lib/odspDocumentService.d.ts.map +0 -1
  612. package/lib/odspDocumentService.js +0 -360
  613. package/lib/odspDocumentService.js.map +0 -1
  614. package/lib/odspDocumentServiceFactory.d.ts.map +0 -1
  615. package/lib/odspDocumentServiceFactory.js.map +0 -1
  616. package/lib/odspDocumentServiceFactoryCore.d.ts.map +0 -1
  617. package/lib/odspDocumentServiceFactoryCore.js +0 -114
  618. package/lib/odspDocumentServiceFactoryCore.js.map +0 -1
  619. package/lib/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +0 -1
  620. package/lib/odspDocumentServiceFactoryWithCodeSplit.js.map +0 -1
  621. package/lib/odspDocumentStorageManager.d.ts.map +0 -1
  622. package/lib/odspDocumentStorageManager.js +0 -352
  623. package/lib/odspDocumentStorageManager.js.map +0 -1
  624. package/lib/odspDocumentStorageServiceBase.d.ts.map +0 -1
  625. package/lib/odspDocumentStorageServiceBase.js.map +0 -1
  626. package/lib/odspDriverUrlResolver.d.ts.map +0 -1
  627. package/lib/odspDriverUrlResolver.js.map +0 -1
  628. package/lib/odspDriverUrlResolverForShareLink.d.ts.map +0 -1
  629. package/lib/odspDriverUrlResolverForShareLink.js.map +0 -1
  630. package/lib/odspError.d.ts.map +0 -1
  631. package/lib/odspError.js.map +0 -1
  632. package/lib/odspFluidFileLink.d.ts.map +0 -1
  633. package/lib/odspFluidFileLink.js.map +0 -1
  634. package/lib/odspPublicUtils.d.ts.map +0 -1
  635. package/lib/odspPublicUtils.js.map +0 -1
  636. package/lib/odspSnapshotParser.d.ts.map +0 -1
  637. package/lib/odspSnapshotParser.js.map +0 -1
  638. package/lib/odspSummaryUploadManager.d.ts.map +0 -1
  639. package/lib/odspSummaryUploadManager.js.map +0 -1
  640. package/lib/odspUrlHelper.d.ts.map +0 -1
  641. package/lib/odspUrlHelper.js.map +0 -1
  642. package/lib/odspUtils.d.ts.map +0 -1
  643. package/lib/odspUtils.js.map +0 -1
  644. package/lib/opsCaching.d.ts.map +0 -1
  645. package/lib/opsCaching.js.map +0 -1
  646. package/lib/packageVersion.js.map +0 -1
  647. package/lib/prefetchLatestSnapshot.d.ts.map +0 -1
  648. package/lib/prefetchLatestSnapshot.js +0 -53
  649. package/lib/prefetchLatestSnapshot.js.map +0 -1
  650. package/lib/retryErrorsStorageAdapter.d.ts.map +0 -1
  651. package/lib/retryErrorsStorageAdapter.js.map +0 -1
  652. package/lib/retryUtils.d.ts.map +0 -1
  653. package/lib/retryUtils.js.map +0 -1
  654. package/lib/vroom.d.ts.map +0 -1
  655. package/lib/vroom.js.map +0 -1
  656. package/lib/zipItDataRepresentationUtils.d.ts.map +0 -1
  657. package/lib/zipItDataRepresentationUtils.js.map +0 -1
  658. package/src/getSocketIo.ts +0 -14
  659. package/tsconfig.esnext.json +0 -7
  660. /package/lib/{ReadBufferUtils.d.ts → ReadBufferUtils.d.mts} +0 -0
  661. /package/lib/{getUrlAndHeadersWithAuth.d.ts → getUrlAndHeadersWithAuth.d.mts} +0 -0
@@ -6,150 +6,146 @@
6
6
  /**
7
7
  * Data representation which is followed(zipIt Protocol) here is described in this document:
8
8
  * https://microsoft.sharepoint-df.com/:w:/t/ODSPFileStore/ER06b64K_XdDjEyAKl-UT60BJiId39SCVkYSyo_2pvH9gQ?e=KYQ0c5
9
- */
9
+ */
10
10
 
11
- import { assert, IsoBuffer, Uint8ArrayToArrayBuffer, Uint8ArrayToString } from "@fluidframework/common-utils";
11
+ import { Uint8ArrayToArrayBuffer, Uint8ArrayToString } from "@fluid-internal/client-utils";
12
+ import { assert } from "@fluidframework/core-utils";
13
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
12
14
  import { NonRetryableError } from "@fluidframework/driver-utils";
13
15
  import { DriverErrorType } from "@fluidframework/driver-definitions";
14
16
  import { ReadBuffer } from "./ReadBufferUtils";
15
17
  import { pkgVersion as driverVersion } from "./packageVersion";
18
+ import { measure } from "./odspUtils";
16
19
 
17
- // eslint-disable-next-line max-len
18
20
  // https://onedrive.visualstudio.com/SharePoint%20Online/_git/SPO?path=/cobalt/Base/Property/BinaryEncodedPropertyReader.cs&version=GBmaster&_a=contents
19
21
  /**
20
22
  * Control codes used by tree serialization / decentralization code. Same as on server. These can be found on
21
23
  * filestore code on server too at above link.
22
24
  */
23
25
  export enum MarkerCodes {
24
- BoolTrue = 11, // value = true
25
- BoolFalse = 12, // value = false
26
-
27
- StringEmpty = 13, // value = ""
28
- String8Length = 14, // unsigned-8-bit little-endian length, follows by UTF-8 bytes of length
29
- String16Length = 15, // unsigned-16-bit little-endian length, follows by UTF-8 bytes of length
30
- String32Length = 16, // unsigned-32-bit little-endian length, follows by UTF-8 bytes of length
31
-
32
- ConstString8Id = 17, // unsigned-8-bit little-endian const string id follows
33
- ConstString16Id = 18, // unsigned-16-bit little-endian const string id follows
34
- ConstString32Id = 19, // unsigned-32-bit little-endian const string id follows
35
- ConstStringDeclare = 20, // Code for declaring a const string with size <= 1 byte
36
- ConstStringDeclareBig = 21, // Code for declaring a const string with size > 1 byte. It is represented in 4 bytes.
37
-
38
- Int0 = 1, // value = 0
39
- UInt8 = 3, // unsigned-8-bit little-endian follows
40
- UInt16 = 5, // unsigned-16-bit little-endian follows
41
- UInt32 = 7, // unsigned-32-bit little-endian follows
42
- UInt64 = 9, // unsigned-64-bit little-endian follows
43
- Int8 = 2, // signed-8-bit little-endian follows
44
- Int16 = 4, // signed-16-bit little-endian follows
45
- Int32 = 6, // signed-32-bit little-endian follows
46
- Int64 = 8, // signed-64-bit little-endian follows
47
-
48
- BinaryEmpty = 32, // value = byte[]
49
- BinarySingle8 = 33, // unsigned-8-bit little-endian length, follows by bytes of length
50
- BinarySingle16 = 34, // unsigned-16-bit little-endian length, follows by bytes of length
51
- BinarySingle32 = 35, // unsigned-32-bit little-endian length, follows by bytes of length
52
- BinarySingle64 = 36, // unsigned-64-bit little-endian length, follows by bytes of length
26
+ BoolTrue = 11, // value = true
27
+ BoolFalse = 12, // value = false
28
+
29
+ StringEmpty = 13, // value = ""
30
+ String8Length = 14, // unsigned-8-bit little-endian length, follows by UTF-8 bytes of length
31
+ String16Length = 15, // unsigned-16-bit little-endian length, follows by UTF-8 bytes of length
32
+ String32Length = 16, // unsigned-32-bit little-endian length, follows by UTF-8 bytes of length
33
+
34
+ ConstString8Id = 17, // unsigned-8-bit little-endian const string id follows
35
+ ConstString16Id = 18, // unsigned-16-bit little-endian const string id follows
36
+ ConstString32Id = 19, // unsigned-32-bit little-endian const string id follows
37
+ ConstStringDeclare = 20, // Code for declaring a const string with size <= 1 byte
38
+ ConstStringDeclareBig = 21, // Code for declaring a const string with size > 1 byte. It is represented in 4 bytes.
39
+
40
+ Int0 = 1, // value = 0
41
+ UInt8 = 3, // unsigned-8-bit little-endian follows
42
+ UInt16 = 5, // unsigned-16-bit little-endian follows
43
+ UInt32 = 7, // unsigned-32-bit little-endian follows
44
+ UInt64 = 9, // unsigned-64-bit little-endian follows
45
+ Int8 = 2, // signed-8-bit little-endian follows
46
+ Int16 = 4, // signed-16-bit little-endian follows
47
+ Int32 = 6, // signed-32-bit little-endian follows
48
+ Int64 = 8, // signed-64-bit little-endian follows
49
+
50
+ BinaryEmpty = 32, // value = byte[]
51
+ BinarySingle8 = 33, // unsigned-8-bit little-endian length, follows by bytes of length
52
+ BinarySingle16 = 34, // unsigned-16-bit little-endian length, follows by bytes of length
53
+ BinarySingle32 = 35, // unsigned-32-bit little-endian length, follows by bytes of length
54
+ BinarySingle64 = 36, // unsigned-64-bit little-endian length, follows by bytes of length
53
55
  }
54
56
 
55
57
  /**
56
58
  * Control codes used by tree serialization / decentralization code. They mark the start of sections.
57
59
  */
58
60
  export enum MarkerCodesStart {
59
- "list" = 49,
60
- "set" = 51,
61
+ "list" = 49,
62
+ "set" = 51,
61
63
  }
62
64
 
63
65
  /**
64
66
  * Control codes used by tree serialization / decentralization code. They mark the end of sections.
65
67
  */
66
68
  export enum MarkerCodesEnd {
67
- "list" = 50,
68
- "set" = 52,
69
+ "list" = 50,
70
+ "set" = 52,
69
71
  }
70
72
 
71
73
  /**
72
74
  * This contains mapping of Marker Codes to number of bytes in which the corresponding data
73
75
  * will be stored.
74
- */
76
+ */
75
77
  export const codeToBytesMap = {
76
- // Integer code to bytes
77
- 1: 0,
78
- 2: 1,
79
- 3: 1,
80
- 4: 2,
81
- 5: 2,
82
- 6: 4,
83
- 7: 4,
84
- 8: 8,
85
- 9: 8,
86
-
87
- // String code to Bytes
88
- 13: 0,
89
- 14: 1,
90
- 15: 2,
91
- 16: 4,
92
-
93
- 17: 1,
94
- 18: 2,
95
- 19: 4,
96
-
97
- 20: 1,
98
- 21: 4,
99
-
100
- // Binary code to bytes
101
- 32: 0,
102
- 33: 1,
103
- 34: 2,
104
- 35: 4,
105
- 36: 8,
78
+ // Integer code to bytes
79
+ 1: 0,
80
+ 2: 1,
81
+ 3: 1,
82
+ 4: 2,
83
+ 5: 2,
84
+ 6: 4,
85
+ 7: 4,
86
+ 8: 8,
87
+ 9: 8,
88
+
89
+ // String code to Bytes
90
+ 13: 0,
91
+ 14: 1,
92
+ 15: 2,
93
+ 16: 4,
94
+
95
+ 17: 1,
96
+ 18: 2,
97
+ 19: 4,
98
+
99
+ 20: 1,
100
+ 21: 4,
101
+
102
+ // Binary code to bytes
103
+ 32: 0,
104
+ 33: 1,
105
+ 34: 2,
106
+ 35: 4,
107
+ 36: 8,
106
108
  };
107
109
 
108
- export function getValueSafely(map: { [index: number]: number; }, key: number) {
109
- const val = map[key];
110
- assert(val !== undefined, 0x287 /* key must exist in the map */);
111
- return val;
110
+ export function getValueSafely(map: { [index: number]: number }, key: number) {
111
+ const val = map[key];
112
+ assert(val !== undefined, 0x287 /* key must exist in the map */);
113
+ return val;
112
114
  }
113
115
 
114
- export function getAndValidateNodeProps(node: NodeCore, props: string[], enforceAllProps = true) {
115
- const propSet = new Set(props);
116
- const res: Record<string, NodeTypes> = {};
117
- for (const [keyNode, valueNode] of node.iteratePairs()) {
118
- assertBlobCoreInstance(keyNode, "keynode should be a blob");
119
- const keyStr = keyNode.toString();
120
- if (propSet.has(keyStr)) {
121
- propSet.delete(keyStr);
122
- res[keyStr] = valueNode;
123
- }
124
- }
125
- if (enforceAllProps) {
126
- assert(propSet.size === 0, 0x288 /* All properties should exist */);
127
- }
128
- return res;
116
+ export function getNodeProps(node: NodeCore) {
117
+ const res: Record<string, NodeTypes> = {};
118
+ for (const [keyNode, valueNode] of node.iteratePairs()) {
119
+ const id = getStringInstance(keyNode, "keynode should be a string");
120
+ res[id] = valueNode;
121
+ }
122
+ return res;
129
123
  }
130
124
 
131
125
  export function iteratePairs<T>(it: IterableIterator<T>) {
132
- const res: IterableIterator<[T, T]> = {
133
- next: () => {
134
- const a = it.next();
135
- if (a.done) {
136
- return { value: undefined, done: true };
137
- }
138
- const b = it.next();
139
- assert(b.done !== true, 0x22b /* "Should be a pair" */);
140
- return { value: [a.value, b.value], done: b.done };
141
- },
142
- [Symbol.iterator]: () => { return res; },
143
- };
144
- return res;
126
+ const res: IterableIterator<[T, T]> = {
127
+ next: () => {
128
+ const a = it.next();
129
+ if (a.done) {
130
+ return { value: undefined, done: true };
131
+ }
132
+ const b = it.next();
133
+ assert(b.done !== true, 0x22b /* "Should be a pair" */);
134
+ return { value: [a.value, b.value], done: b.done };
135
+ },
136
+ [Symbol.iterator]: () => {
137
+ return res;
138
+ },
139
+ };
140
+ return res;
145
141
  }
146
142
 
147
143
  /**
148
144
  * Helper function that returns iterator from an object
149
145
  * @param obj - object that supports iteration
150
146
  */
151
- export function iterate<T>(obj: { [Symbol.iterator]: () => IterableIterator<T>; }) {
152
- return obj[Symbol.iterator]();
147
+ export function iterate<T>(obj: { [Symbol.iterator]: () => IterableIterator<T> }) {
148
+ return obj[Symbol.iterator]();
153
149
  }
154
150
 
155
151
  /**
@@ -158,97 +154,113 @@ export function iterate<T>(obj: { [Symbol.iterator]: () => IterableIterator<T>;
158
154
  * Note: concrete implementations (derived classes) are not exposed from this module
159
155
  */
160
156
  export abstract class BlobCore {
161
- public abstract get buffer(): Uint8Array;
162
- public get arrayBuffer(): ArrayBufferLike {
163
- return Uint8ArrayToArrayBuffer(this.buffer);
164
- }
165
-
166
- /**
167
- * Represents a blob.
168
- * @param constString - Whether it contains const string declaration.
169
- * @param useUtf8Code - Represents if the utf8 string marker code should be used when representing.
170
- */
171
- constructor(public readonly constString: boolean, public readonly useUtf8Code: boolean = false) {}
172
-
173
- public toString() {
174
- return Uint8ArrayToString(this.buffer, "utf-8");
175
- }
157
+ public abstract get buffer(): Uint8Array;
158
+ public abstract get arrayBuffer(): ArrayBufferLike;
159
+
160
+ /**
161
+ * Represents a blob.
162
+ */
163
+ constructor() {}
176
164
  }
177
165
 
178
166
  /**
179
167
  * "deep copy" blob, holds to binary data passed in
180
168
  * It is called deep copy as a counter-part to BlobShallowCopy, which
181
169
  * is a reference to underlying binary stream (ReadBuffer).
182
- */
170
+ */
183
171
  class BlobDeepCopy extends BlobCore {
184
- /**
185
- * Represents a deep copy of the blob.
186
- * @param data - Data array of the blob
187
- * @param constString - Whether it contains const string declaration.
188
- * @param useUtf8Code - Represents if the utf8 string marker code should be used when representing.
189
- */
190
- constructor(protected readonly data: Uint8Array, constString: boolean, useUtf8Code: boolean = false) {
191
- super(constString, useUtf8Code);
192
- }
193
-
194
- public get buffer() {
195
- return this.data;
196
- }
197
-
198
- public static read(buffer: ReadBuffer, lengthLen: number, constString: boolean): BlobCore {
199
- const length = buffer.read(lengthLen);
200
- const data = new Uint8Array(length);
201
- for (let counter = 0; counter < length; counter++) {
202
- data[counter] = buffer.read();
203
- }
204
- return new BlobDeepCopy(data, constString);
205
- }
172
+ /**
173
+ * Represents a deep copy of the blob.
174
+ * @param data - Data array of the blob
175
+ */
176
+ constructor(protected readonly data: Uint8Array) {
177
+ super();
178
+ }
179
+
180
+ public get buffer() {
181
+ return this.data;
182
+ }
183
+
184
+ public get arrayBuffer(): ArrayBufferLike {
185
+ return Uint8ArrayToArrayBuffer(this.buffer);
186
+ }
187
+
188
+ public static read(buffer: ReadBuffer, lengthLen: number): BlobCore {
189
+ const length = buffer.read(lengthLen);
190
+ const data = new Uint8Array(length);
191
+ for (let counter = 0; counter < length; counter++) {
192
+ data[counter] = buffer.read();
193
+ }
194
+ return new BlobDeepCopy(data);
195
+ }
206
196
  }
207
197
 
208
198
  /**
209
199
  * Shallow copy blob, keeps a reference to portion of ReadBuffer
210
200
  * it was constructed from. It takes much less memory compared to BlobDeepCopy
211
201
  */
212
- export class BlobShallowCopy extends BlobCore {
213
- /**
214
- * Represents a shallow copy of the blob. It is not a separate blob, just reference to original blobs.
215
- * @param data - Data array of the blob
216
- * @param start - Start point of the blob in the buffer.
217
- * @param end - End point of the blob in the buffer.
218
- * @param constString - Whether it contains const string declaration.
219
- */
220
- constructor(
221
- protected data: ReadBuffer,
222
- protected start: number,
223
- protected end: number,
224
- constString: boolean,
225
- ) {
226
- super(constString);
227
- }
228
-
229
- public get buffer() {
230
- return this.data.buffer.subarray(this.start, this.end);
231
- }
232
-
233
- public static read(buffer: ReadBuffer, lengthLen: number, constString: boolean): BlobCore {
234
- const length = buffer.read(lengthLen);
235
- const pos = buffer.pos;
236
- buffer.skip(length);
237
- return new BlobShallowCopy(buffer, pos, pos + length, constString);
238
- }
202
+ export class BlobShallowCopy extends BlobCore {
203
+ /**
204
+ * Represents a shallow copy of the blob. It is not a separate blob, just reference to original blobs.
205
+ * @param data - Data array of the blob
206
+ * @param start - Start point of the blob in the buffer.
207
+ * @param end - End point of the blob in the buffer.
208
+ */
209
+ constructor(
210
+ protected data: Uint8Array,
211
+ protected start: number,
212
+ protected end: number,
213
+ ) {
214
+ super();
215
+ }
216
+
217
+ public get buffer() {
218
+ return this.data.subarray(this.start, this.end);
219
+ }
220
+
221
+ // Equivalent to Uint8ArrayToArrayBuffer(this.buffer)
222
+ public get arrayBuffer(): ArrayBufferLike {
223
+ const offset = this.data.byteOffset;
224
+ return this.data.buffer.slice(this.start + offset, this.end + offset);
225
+ }
226
+
227
+ public static read(buffer: ReadBuffer, lengthLen: number): BlobCore {
228
+ const length = buffer.read(lengthLen);
229
+ const pos = buffer.pos;
230
+ buffer.skip(length);
231
+ return new BlobShallowCopy(buffer.buffer, pos, pos + length);
232
+ }
239
233
  }
240
234
 
241
- export const addStringProperty =
242
- (node: NodeCore, a: string, b: string, encodeValAsConstString: boolean = false) => {
243
- node.addString(a, true); node.addString(b, encodeValAsConstString);
244
- };
235
+ export const addStringProperty = (node: NodeCore, a: string, b: string) => {
236
+ node.addDictionaryString(a);
237
+ node.addString(b);
238
+ };
239
+ export const addDictionaryStringProperty = (node: NodeCore, a: string, b: string) => {
240
+ node.addDictionaryString(a);
241
+ node.addString(b);
242
+ };
245
243
  export const addNumberProperty = (node: NodeCore, a: string, b: number) => {
246
- node.addString(a, true); node.addNumber(b);
244
+ node.addDictionaryString(a);
245
+ node.addNumber(b);
247
246
  };
248
247
  export const addBoolProperty = (node: NodeCore, a: string, b: boolean) => {
249
- node.addString(a, true); node.addBool(b);
248
+ node.addDictionaryString(a);
249
+ node.addBool(b);
250
250
  };
251
251
 
252
+ export interface IStringElement {
253
+ content: string;
254
+ dictionary: boolean;
255
+ _stringElement: true;
256
+ }
257
+
258
+ export interface IStringElementInternal extends Omit<IStringElement, "content"> {
259
+ content?: string;
260
+ startPos: number;
261
+ endPos: number;
262
+ }
263
+
252
264
  /**
253
265
  * Three leaf types supported by tree:
254
266
  * 1. Node (sub-tree)
@@ -256,7 +268,7 @@ export const addBoolProperty = (node: NodeCore, a: string, b: boolean) => {
256
268
  * 3. integer
257
269
  * 4. boolean
258
270
  */
259
- export type NodeTypes = NodeCore | BlobCore | number | boolean;
271
+ export type NodeTypes = NodeCore | BlobCore | number | boolean | IStringElement;
260
272
 
261
273
  export type NodeCoreTypes = "list" | "set";
262
274
 
@@ -264,244 +276,372 @@ export type NodeCoreTypes = "list" | "set";
264
276
  * Node - node in the tree (non-leaf element of the tree)
265
277
  */
266
278
  export class NodeCore {
267
- // It is an array of nodes.
268
- private readonly children: NodeTypes[] = [];
269
- public get nodes() {
270
- return this.children;
271
- }
272
-
273
- constructor(public type: NodeCoreTypes = "set") {}
274
-
275
- public [Symbol.iterator]() {
276
- return this.children[Symbol.iterator]();
277
- }
278
-
279
- public iteratePairs() {
280
- assert((this.length % 2) === 0, 0x22c /* "reading pairs" */);
281
- return iteratePairs(iterate(this));
282
- }
283
-
284
- public get length() { return this.children.length; }
285
-
286
- public get(index: number) { return this.children[index]; }
287
-
288
- public getString(index: number): string {
289
- const node = this.children[index];
290
- assertBlobCoreInstance(node, "getString should return stringblob");
291
- return node.toString();
292
- }
293
-
294
- public getBlob(index: number): BlobCore {
295
- const node = this.children[index];
296
- assertBlobCoreInstance(node, "getBlob should return a blob");
297
- return node;
298
- }
299
-
300
- public getNode(index: number): NodeCore {
301
- const node = this.children[index];
302
- assertNodeCoreInstance(node, "getNode should return a node");
303
- return node;
304
- }
305
-
306
- public getNumber(index: number): number {
307
- const node = this.children[index];
308
- assertNumberInstance(node, "getNumber should return a number");
309
- return node;
310
- }
311
-
312
- public getBool(index: number): boolean {
313
- const node = this.children[index];
314
- assertBoolInstance(node, "getBool should return a boolean");
315
- return node;
316
- }
317
-
318
- public addNode(type?: NodeCoreTypes): NodeCore {
319
- const node = new NodeCore(type);
320
- this.children.push(node);
321
- return node;
322
- }
323
-
324
- public addBlob(blob: Uint8Array, constString: boolean, useUtf8Code: boolean = false) {
325
- this.children.push(new BlobDeepCopy(blob, constString, useUtf8Code));
326
- }
327
-
328
- public addString(payload: string, constString: boolean) {
329
- this.addBlob(IsoBuffer.from(payload, "utf-8"), constString, true);
330
- }
331
-
332
- public addNumber(payload: number | undefined) {
333
- assert(Number.isInteger(payload), 0x231 /* "Number should be an integer" */);
334
- assert(payload !== undefined && payload >= 0, 0x232 /* "Payload should not be negative" */);
335
- this.children.push(payload);
336
- }
337
-
338
- public addBool(payload: boolean) {
339
- this.children.push(payload);
340
- }
341
-
342
- /**
343
- * Load and parse the buffer into a tree.
344
- * @param buffer - buffer to read from.
345
- */
346
- protected load(buffer: ReadBuffer, dictionary: BlobCore[]) {
347
- for (;!buffer.eof;) {
348
- let childValue: NodeTypes | undefined;
349
- const code = buffer.read();
350
- switch (code) {
351
- case MarkerCodesStart.list:
352
- case MarkerCodesStart.set: {
353
- childValue = new NodeCore(code === MarkerCodesStart.set ? "set" : "list");
354
- this.children.push(childValue);
355
- childValue.load(buffer, dictionary);
356
- break;
357
- }
358
- case MarkerCodes.ConstStringDeclare:
359
- case MarkerCodes.ConstStringDeclareBig:
360
- {
361
- const stringId = buffer.read(getValueSafely(codeToBytesMap, code));
362
- const constString = BlobShallowCopy.read(buffer, getValueSafely(codeToBytesMap, code), true);
363
- dictionary[stringId] = constString;
364
- break;
365
- }
366
- case MarkerCodes.ConstString8Id:
367
- case MarkerCodes.ConstString16Id:
368
- case MarkerCodes.ConstString32Id:
369
- {
370
- const stringId = buffer.read(getValueSafely(codeToBytesMap, code));
371
- childValue = dictionary[stringId];
372
- this.children.push(childValue);
373
- break;
374
- }
375
- case MarkerCodes.StringEmpty:
376
- case MarkerCodes.String8Length:
377
- case MarkerCodes.String16Length:
378
- case MarkerCodes.String32Length:
379
- case MarkerCodes.BinaryEmpty:
380
- case MarkerCodes.BinarySingle8:
381
- case MarkerCodes.BinarySingle16:
382
- case MarkerCodes.BinarySingle32:
383
- case MarkerCodes.BinarySingle64:
384
- {
385
- childValue = BlobShallowCopy.read(buffer, getValueSafely(codeToBytesMap, code), false);
386
- this.children.push(childValue);
387
- break;
388
- }
389
- // If integer is 0.
390
- case MarkerCodes.Int0:
391
- {
392
- childValue = 0;
393
- this.children.push(childValue);
394
- break;
395
- }
396
- case MarkerCodes.UInt8:
397
- case MarkerCodes.UInt16:
398
- case MarkerCodes.UInt32:
399
- case MarkerCodes.UInt64:
400
- case MarkerCodes.Int8:
401
- case MarkerCodes.Int16:
402
- case MarkerCodes.Int32:
403
- case MarkerCodes.Int64:
404
- {
405
- childValue = buffer.read(getValueSafely(codeToBytesMap, code));
406
- this.children.push(childValue);
407
- break;
408
- }
409
- case MarkerCodes.BoolTrue:
410
- this.children.push(true);
411
- break;
412
- case MarkerCodes.BoolFalse:
413
- this.children.push(false);
414
- break;
415
- case MarkerCodesEnd.list:
416
- case MarkerCodesEnd.set:
417
- return;
418
- default:
419
- throw new Error(`Invalid code: ${code}`);
420
- }
421
- }
422
- }
279
+ // It is an array of nodes.
280
+ private readonly children: NodeTypes[] = [];
281
+ public get nodes() {
282
+ return this.children;
283
+ }
284
+
285
+ constructor(public type: NodeCoreTypes = "set") {}
286
+
287
+ public [Symbol.iterator]() {
288
+ return this.children[Symbol.iterator]();
289
+ }
290
+
291
+ public iteratePairs() {
292
+ assert(this.length % 2 === 0, 0x22c /* "reading pairs" */);
293
+ return iteratePairs(iterate(this));
294
+ }
295
+
296
+ public get length() {
297
+ return this.children.length;
298
+ }
299
+
300
+ public get(index: number) {
301
+ return this.children[index];
302
+ }
303
+
304
+ public getString(index: number): string {
305
+ const node = this.children[index];
306
+ return getStringInstance(node, "getString should return string");
307
+ }
308
+
309
+ public getMaybeString(index: number) {
310
+ const node = this.children[index];
311
+ return getMaybeStringInstance(node);
312
+ }
313
+
314
+ public getBlob(index: number): BlobCore {
315
+ const node = this.children[index];
316
+ assertBlobCoreInstance(node, "getBlob should return a blob");
317
+ return node;
318
+ }
319
+
320
+ public getNode(index: number): NodeCore {
321
+ const node = this.children[index];
322
+ assertNodeCoreInstance(node, "getNode should return a node");
323
+ return node;
324
+ }
325
+
326
+ public getNumber(index: number): number {
327
+ const node = this.children[index];
328
+ assertNumberInstance(node, "getNumber should return a number");
329
+ return node;
330
+ }
331
+
332
+ public getBool(index: number): boolean {
333
+ const node = this.children[index];
334
+ assertBoolInstance(node, "getBool should return a boolean");
335
+ return node;
336
+ }
337
+
338
+ public addNode(type?: NodeCoreTypes): NodeCore {
339
+ const node = new NodeCore(type);
340
+ this.children.push(node);
341
+ return node;
342
+ }
343
+
344
+ public addBlob(blob: Uint8Array) {
345
+ this.children.push(new BlobDeepCopy(blob));
346
+ }
347
+
348
+ public addDictionaryString(payload: string) {
349
+ this.children.push({
350
+ content: payload,
351
+ dictionary: true,
352
+ _stringElement: true,
353
+ });
354
+ }
355
+
356
+ public addString(payload: string) {
357
+ this.children.push({
358
+ content: payload,
359
+ dictionary: false,
360
+ _stringElement: true,
361
+ });
362
+ }
363
+
364
+ public addNumber(payload: number | undefined) {
365
+ assert(Number.isInteger(payload), 0x231 /* "Number should be an integer" */);
366
+ assert(payload !== undefined && payload >= 0, 0x232 /* "Payload should not be negative" */);
367
+ this.children.push(payload);
368
+ }
369
+
370
+ public addBool(payload: boolean) {
371
+ this.children.push(payload);
372
+ }
373
+
374
+ // Can we do more efficiently here, without extra objects somehow??
375
+ private static readString(buffer: ReadBuffer, code: number, dictionary: boolean) {
376
+ const lengthLen = getValueSafely(codeToBytesMap, code);
377
+ const length = buffer.read(lengthLen);
378
+ const startPos = buffer.pos;
379
+ buffer.skip(length);
380
+ const result: IStringElementInternal = {
381
+ // Note: Setting here property 'content: undefined' makes code substantially slower!
382
+ dictionary,
383
+ _stringElement: true,
384
+ startPos,
385
+ endPos: buffer.pos,
386
+ };
387
+
388
+ // We are lying here in terms of presence of `content` property.
389
+ // This will be addressed at the bottom of NodeCore.load() by resolving all strings at once!
390
+ // It's equivalent (but much slower!) to do it here via
391
+ // result.content = Uint8ArrayToString(buffer.buffer.subarray(startPos, buffer.pos), "utf-8");
392
+ return result as IStringElementInternal & IStringElement;
393
+ }
394
+
395
+ /**
396
+ * Load and parse the buffer into a tree.
397
+ * @param buffer - buffer to read from.
398
+ */
399
+ protected load(buffer: ReadBuffer, logger: ITelemetryLoggerExt) {
400
+ const [stringsToResolve, durationStructure] = measure(() =>
401
+ this.loadStructure(buffer, logger),
402
+ );
403
+ const [, durationStrings] = measure(() =>
404
+ this.loadStrings(buffer, stringsToResolve, logger),
405
+ );
406
+ return { durationStructure, durationStrings };
407
+ }
408
+
409
+ /**
410
+ * Load and parse the buffer into a tree.
411
+ * @param buffer - buffer to read from.
412
+ */
413
+ protected loadStructure(buffer: ReadBuffer, logger: ITelemetryLoggerExt) {
414
+ const stack: NodeTypes[][] = [];
415
+ const stringsToResolve: IStringElementInternal[] = [];
416
+ const dictionary: IStringElement[] = [];
417
+
418
+ let children = this.children;
419
+ for (; !buffer.eof; ) {
420
+ const code = buffer.read();
421
+ switch (code) {
422
+ case MarkerCodesStart.list:
423
+ case MarkerCodesStart.set: {
424
+ const childValue = new NodeCore(code === MarkerCodesStart.set ? "set" : "list");
425
+ children.push(childValue);
426
+ stack.push(children);
427
+ children = childValue.children;
428
+ continue;
429
+ }
430
+ case MarkerCodes.ConstStringDeclare:
431
+ case MarkerCodes.ConstStringDeclareBig: {
432
+ const stringId = buffer.read(getValueSafely(codeToBytesMap, code));
433
+ const constString = NodeCore.readString(buffer, code, true /* dictionary */);
434
+ stringsToResolve.push(constString);
435
+ dictionary[stringId] = constString;
436
+ continue;
437
+ }
438
+ case MarkerCodes.ConstString8Id:
439
+ case MarkerCodes.ConstString16Id:
440
+ case MarkerCodes.ConstString32Id: {
441
+ const stringId = buffer.read(getValueSafely(codeToBytesMap, code));
442
+ const content = dictionary[stringId];
443
+ assert(content !== undefined, 0x3de /* const string not found */);
444
+ children.push(content);
445
+ continue;
446
+ }
447
+ case MarkerCodes.StringEmpty:
448
+ case MarkerCodes.String8Length:
449
+ case MarkerCodes.String16Length:
450
+ case MarkerCodes.String32Length: {
451
+ const str = NodeCore.readString(buffer, code, false /* dictionary */);
452
+ stringsToResolve.push(str);
453
+ children.push(str);
454
+ continue;
455
+ }
456
+ case MarkerCodes.BinaryEmpty:
457
+ case MarkerCodes.BinarySingle8:
458
+ case MarkerCodes.BinarySingle16:
459
+ case MarkerCodes.BinarySingle32:
460
+ case MarkerCodes.BinarySingle64: {
461
+ children.push(
462
+ BlobShallowCopy.read(buffer, getValueSafely(codeToBytesMap, code)),
463
+ );
464
+ continue;
465
+ }
466
+ // If integer is 0.
467
+ case MarkerCodes.Int0: {
468
+ children.push(0);
469
+ continue;
470
+ }
471
+ case MarkerCodes.UInt8:
472
+ case MarkerCodes.UInt16:
473
+ case MarkerCodes.UInt32:
474
+ case MarkerCodes.UInt64:
475
+ case MarkerCodes.Int8:
476
+ case MarkerCodes.Int16:
477
+ case MarkerCodes.Int32:
478
+ case MarkerCodes.Int64: {
479
+ children.push(buffer.read(getValueSafely(codeToBytesMap, code)));
480
+ continue;
481
+ }
482
+ case MarkerCodes.BoolTrue:
483
+ children.push(true);
484
+ continue;
485
+ case MarkerCodes.BoolFalse:
486
+ children.push(false);
487
+ continue;
488
+ case MarkerCodesEnd.list:
489
+ case MarkerCodesEnd.set:
490
+ // Note: We are not checking that end marker matches start marker.
491
+ // I.e. that we do not have a case where we start a 'list' but end with a 'set'
492
+ // Checking it would require more state tracking that seems not very useful, given
493
+ // our code does not care.
494
+ children = stack.pop()!;
495
+
496
+ // To my surprise, checking children !== undefined adds measurable cost!
497
+ // We will rely on children.push() crashing in case of mismatch, and check below
498
+ // (outside of the loop)
499
+ continue;
500
+ default:
501
+ throw new Error(`Invalid code: ${code}`);
502
+ }
503
+ }
504
+
505
+ // This also ensures that stack.length === 0.
506
+ assert(children === this.children, 0x3e7 /* Unpaired start/end list/set markers! */);
507
+
508
+ return stringsToResolve;
509
+ }
510
+
511
+ private loadStrings(
512
+ buffer: ReadBuffer,
513
+ stringsToResolve: IStringElementInternal[],
514
+ logger: ITelemetryLoggerExt,
515
+ ) {
516
+ /**
517
+ * Process all the strings at once!
518
+ */
519
+ let length = 0;
520
+ for (const el of stringsToResolve) {
521
+ length += el.endPos - el.startPos + 1;
522
+ }
523
+ const stringBuffer = new Uint8Array(length);
524
+
525
+ length = 0;
526
+ const input = buffer.buffer;
527
+ assert(input.byteOffset === 0, 0x3e8 /* code below assumes no offset */);
528
+
529
+ for (const el of stringsToResolve) {
530
+ for (let it = el.startPos; it < el.endPos; it++) {
531
+ stringBuffer[length] = input[it];
532
+ length++;
533
+ }
534
+ stringBuffer[length] = 0;
535
+ length++;
536
+ }
537
+ assert(length === stringBuffer.length, 0x418 /* properly encoded */);
538
+
539
+ const result = Uint8ArrayToString(stringBuffer, "utf-8").split(String.fromCharCode(0));
540
+ if (result.length === stringsToResolve.length + 1) {
541
+ // All is good, we expect all the cases to get here
542
+ for (let i = 0; i < stringsToResolve.length; i++) {
543
+ stringsToResolve[i].content = result[i];
544
+ }
545
+ } else {
546
+ // String content has \0 chars!
547
+ // Recovery code
548
+ logger.sendErrorEvent({ eventName: "StringParsingError" });
549
+ for (const el of stringsToResolve) {
550
+ assert(
551
+ el.content ===
552
+ Uint8ArrayToString(input.subarray(el.startPos, el.endPos), "utf-8"),
553
+ 0x3ea /* test */,
554
+ );
555
+ }
556
+ }
557
+ }
423
558
  }
424
559
 
425
- /**
426
- * TreeBuilder - Root of the tree.
427
- * Provides loading and serialization capabilities.
428
- */
560
+ /**
561
+ * TreeBuilder - Root of the tree.
562
+ * Provides loading and serialization capabilities.
563
+ */
429
564
  export class TreeBuilder extends NodeCore {
430
- static load(buffer: ReadBuffer): TreeBuilder {
431
- const builder = new TreeBuilder();
432
- const dictionary = new Array<BlobCore>();
433
- builder.load(buffer, dictionary);
434
- assert(buffer.eof, 0x233 /* "Unexpected data at the end of buffer" */);
435
- return builder;
436
- }
565
+ static load(buffer: ReadBuffer, logger: ITelemetryLoggerExt) {
566
+ const builder = new TreeBuilder();
567
+ const telemetryProps = builder.load(buffer, logger);
568
+ assert(buffer.eof, 0x233 /* "Unexpected data at the end of buffer" */);
569
+ return { builder, telemetryProps };
570
+ }
571
+ }
572
+
573
+ export function getMaybeStringInstance(node: NodeTypes): string | undefined {
574
+ const maybeString = node as IStringElement;
575
+ if (maybeString._stringElement) {
576
+ return maybeString.content;
577
+ }
578
+ }
579
+
580
+ export function getStringInstance(node: NodeTypes, message: string): string {
581
+ const maybeString = node as IStringElement;
582
+ if (maybeString._stringElement) {
583
+ return maybeString.content;
584
+ }
585
+ throwBufferParseException(node, "BlobCore", message);
437
586
  }
438
587
 
439
- export function assertBlobCoreInstance(
440
- node: NodeTypes,
441
- message: string,
442
- ): asserts node is BlobCore {
443
- if (node instanceof BlobCore) {
444
- return;
445
- }
446
- throwBufferParseException(node, "BlobCore", message);
588
+ export function assertBlobCoreInstance(node: NodeTypes, message: string): asserts node is BlobCore {
589
+ if (node instanceof BlobCore) {
590
+ return;
591
+ }
592
+ throwBufferParseException(node, "BlobCore", message);
447
593
  }
448
594
 
449
- export function assertNodeCoreInstance(
450
- node: NodeTypes,
451
- message: string,
452
- ): asserts node is NodeCore {
453
- if (node instanceof NodeCore) {
454
- return;
455
- }
456
- throwBufferParseException(node, "NodeCore", message);
595
+ export function assertNodeCoreInstance(node: NodeTypes, message: string): asserts node is NodeCore {
596
+ if (node instanceof NodeCore) {
597
+ return;
598
+ }
599
+ throwBufferParseException(node, "NodeCore", message);
457
600
  }
458
601
 
459
- export function assertNumberInstance(
460
- node: NodeTypes,
461
- message: string,
462
- ): asserts node is number {
463
- if (typeof node === "number") {
464
- return;
465
- }
466
- throwBufferParseException(node, "Number", message);
602
+ export function assertNumberInstance(node: NodeTypes, message: string): asserts node is number {
603
+ if (typeof node === "number") {
604
+ return;
605
+ }
606
+ throwBufferParseException(node, "Number", message);
467
607
  }
468
608
 
469
- export function assertBoolInstance(
470
- node: NodeTypes,
471
- message: string,
472
- ): asserts node is boolean {
473
- if (typeof node === "boolean") {
474
- return;
475
- }
476
- throwBufferParseException(node, "Boolean", message);
609
+ export function assertBoolInstance(node: NodeTypes, message: string): asserts node is boolean {
610
+ if (typeof node === "boolean") {
611
+ return;
612
+ }
613
+ throwBufferParseException(node, "Boolean", message);
477
614
  }
478
615
 
479
616
  function throwBufferParseException(
480
- node: NodeTypes,
481
- expectedNodeType: NodeType,
482
- message: string,
617
+ node: NodeTypes,
618
+ expectedNodeType: NodeType,
619
+ message: string,
483
620
  ): never {
484
- throw new NonRetryableError(
485
- `Buffer parsing exception: ${message}`,
486
- DriverErrorType.incorrectServerResponse,
487
- {
488
- nodeType: getNodeType(node),
489
- expectedNodeType,
490
- driverVersion,
491
- });
621
+ throw new NonRetryableError(
622
+ `Buffer parsing exception: ${message}`,
623
+ DriverErrorType.incorrectServerResponse,
624
+ {
625
+ nodeType: getNodeType(node),
626
+ expectedNodeType,
627
+ driverVersion,
628
+ },
629
+ );
492
630
  }
493
631
 
494
632
  function getNodeType(value: NodeTypes): NodeType {
495
- if (typeof value === "number") {
496
- return "Number";
497
- } else if (value instanceof BlobCore) {
498
- return "BlobCore";
499
- } else if (value instanceof NodeCore) {
500
- return "NodeCore";
501
- } else if (typeof value === "boolean") {
502
- return "Boolean";
503
- }
504
- return "UnknownType";
633
+ if (typeof value === "number") {
634
+ return "Number";
635
+ } else if (value instanceof BlobCore) {
636
+ return "BlobCore";
637
+ } else if (value instanceof NodeCore) {
638
+ return "NodeCore";
639
+ } else if (typeof value === "boolean") {
640
+ return "Boolean";
641
+ } else if (value._stringElement) {
642
+ return "String";
643
+ }
644
+ return "UnknownType";
505
645
  }
506
646
 
507
- type NodeType = "Number" | "BlobCore" | "NodeCore" | "Boolean" | "UnknownType";
647
+ type NodeType = "Number" | "BlobCore" | "NodeCore" | "Boolean" | "UnknownType" | "String";