@fluid-experimental/tree 0.58.2000 → 0.58.3000-61081

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 (815) hide show
  1. package/README.md +9 -9
  2. package/dist/ChangeCompression.d.ts +39 -0
  3. package/dist/ChangeCompression.d.ts.map +1 -0
  4. package/dist/ChangeCompression.js +117 -0
  5. package/dist/ChangeCompression.js.map +1 -0
  6. package/{lib/default-edits/PersistedTypes.d.ts → dist/ChangeTypes.d.ts} +58 -100
  7. package/dist/ChangeTypes.d.ts.map +1 -0
  8. package/dist/{default-edits/PersistedTypes.js → ChangeTypes.js} +21 -76
  9. package/dist/ChangeTypes.js.map +1 -0
  10. package/dist/Checkout.d.ts +39 -27
  11. package/dist/Checkout.d.ts.map +1 -1
  12. package/dist/Checkout.js +59 -31
  13. package/dist/Checkout.js.map +1 -1
  14. package/dist/Common.d.ts +175 -38
  15. package/dist/Common.d.ts.map +1 -1
  16. package/dist/Common.js +240 -103
  17. package/dist/Common.js.map +1 -1
  18. package/dist/EagerCheckout.d.ts +24 -0
  19. package/dist/EagerCheckout.d.ts.map +1 -0
  20. package/dist/{BasicCheckout.js → EagerCheckout.js} +9 -6
  21. package/dist/EagerCheckout.js.map +1 -0
  22. package/dist/EditLog.d.ts +77 -63
  23. package/dist/EditLog.d.ts.map +1 -1
  24. package/dist/EditLog.js +85 -48
  25. package/dist/EditLog.js.map +1 -1
  26. package/dist/EditUtilities.d.ts +168 -0
  27. package/dist/EditUtilities.d.ts.map +1 -0
  28. package/dist/EditUtilities.js +373 -0
  29. package/dist/EditUtilities.js.map +1 -0
  30. package/dist/EventTypes.d.ts +73 -0
  31. package/dist/EventTypes.d.ts.map +1 -0
  32. package/dist/EventTypes.js +78 -0
  33. package/dist/EventTypes.js.map +1 -0
  34. package/dist/Forest.d.ts +29 -7
  35. package/dist/Forest.d.ts.map +1 -1
  36. package/dist/Forest.js +60 -36
  37. package/dist/Forest.js.map +1 -1
  38. package/dist/HistoryEditFactory.d.ts +20 -0
  39. package/dist/HistoryEditFactory.d.ts.map +1 -0
  40. package/dist/HistoryEditFactory.js +226 -0
  41. package/dist/HistoryEditFactory.js.map +1 -0
  42. package/dist/IdConversion.d.ts +12 -0
  43. package/dist/IdConversion.d.ts.map +1 -0
  44. package/dist/IdConversion.js +98 -0
  45. package/dist/IdConversion.js.map +1 -0
  46. package/dist/Identifiers.d.ts +89 -2
  47. package/dist/Identifiers.d.ts.map +1 -1
  48. package/dist/Identifiers.js +10 -0
  49. package/dist/Identifiers.js.map +1 -1
  50. package/dist/InitialTree.d.ts +2 -2
  51. package/dist/InitialTree.d.ts.map +1 -1
  52. package/dist/InitialTree.js +2 -1
  53. package/dist/InitialTree.js.map +1 -1
  54. package/dist/LazyCheckout.d.ts +28 -0
  55. package/dist/LazyCheckout.d.ts.map +1 -0
  56. package/dist/LazyCheckout.js +44 -0
  57. package/dist/LazyCheckout.js.map +1 -0
  58. package/dist/LogViewer.d.ts +130 -85
  59. package/dist/LogViewer.d.ts.map +1 -1
  60. package/dist/LogViewer.js +110 -85
  61. package/dist/LogViewer.js.map +1 -1
  62. package/dist/MergeHealth.d.ts +221 -0
  63. package/dist/MergeHealth.d.ts.map +1 -0
  64. package/dist/MergeHealth.js +263 -0
  65. package/dist/MergeHealth.js.map +1 -0
  66. package/dist/NodeIdUtilities.d.ts +90 -0
  67. package/dist/NodeIdUtilities.d.ts.map +1 -0
  68. package/dist/NodeIdUtilities.js +60 -0
  69. package/dist/NodeIdUtilities.js.map +1 -0
  70. package/dist/PayloadUtilities.d.ts +42 -0
  71. package/dist/PayloadUtilities.d.ts.map +1 -0
  72. package/dist/PayloadUtilities.js +114 -0
  73. package/dist/PayloadUtilities.js.map +1 -0
  74. package/dist/ReconciliationPath.d.ts +18 -13
  75. package/dist/ReconciliationPath.d.ts.map +1 -1
  76. package/dist/ReconciliationPath.js.map +1 -1
  77. package/dist/RevisionValueCache.d.ts +11 -2
  78. package/dist/RevisionValueCache.d.ts.map +1 -1
  79. package/dist/RevisionValueCache.js +2 -3
  80. package/dist/RevisionValueCache.js.map +1 -1
  81. package/dist/RevisionView.d.ts +83 -0
  82. package/dist/RevisionView.d.ts.map +1 -0
  83. package/dist/RevisionView.js +182 -0
  84. package/dist/RevisionView.js.map +1 -0
  85. package/dist/SerializationUtilities.d.ts +36 -0
  86. package/dist/SerializationUtilities.d.ts.map +1 -0
  87. package/dist/SerializationUtilities.js +102 -0
  88. package/dist/SerializationUtilities.js.map +1 -0
  89. package/dist/SharedTree.d.ts +400 -0
  90. package/dist/SharedTree.d.ts.map +1 -0
  91. package/dist/SharedTree.js +1064 -0
  92. package/dist/SharedTree.js.map +1 -0
  93. package/dist/SharedTreeEncoder.d.ts +102 -0
  94. package/dist/SharedTreeEncoder.d.ts.map +1 -0
  95. package/dist/SharedTreeEncoder.js +313 -0
  96. package/dist/SharedTreeEncoder.js.map +1 -0
  97. package/dist/StringInterner.d.ts +46 -0
  98. package/dist/StringInterner.d.ts.map +1 -0
  99. package/dist/StringInterner.js +61 -0
  100. package/dist/StringInterner.js.map +1 -0
  101. package/dist/Summary.d.ts +40 -0
  102. package/dist/Summary.d.ts.map +1 -0
  103. package/dist/Summary.js +23 -0
  104. package/dist/Summary.js.map +1 -0
  105. package/dist/SummaryBackCompatibility.d.ts +22 -22
  106. package/dist/SummaryBackCompatibility.d.ts.map +1 -1
  107. package/dist/SummaryBackCompatibility.js +30 -33
  108. package/dist/SummaryBackCompatibility.js.map +1 -1
  109. package/dist/SummaryTestUtilities.d.ts +31 -0
  110. package/dist/SummaryTestUtilities.d.ts.map +1 -0
  111. package/dist/SummaryTestUtilities.js +37 -0
  112. package/dist/SummaryTestUtilities.js.map +1 -0
  113. package/dist/Transaction.d.ts +53 -0
  114. package/dist/Transaction.d.ts.map +1 -0
  115. package/dist/Transaction.js +76 -0
  116. package/dist/Transaction.js.map +1 -0
  117. package/dist/TransactionInternal.d.ts +543 -0
  118. package/dist/TransactionInternal.d.ts.map +1 -0
  119. package/dist/TransactionInternal.js +622 -0
  120. package/dist/TransactionInternal.js.map +1 -0
  121. package/dist/TreeCompressor.d.ts +37 -0
  122. package/dist/TreeCompressor.d.ts.map +1 -0
  123. package/dist/TreeCompressor.js +132 -0
  124. package/dist/TreeCompressor.js.map +1 -0
  125. package/dist/TreeNodeHandle.d.ts +12 -18
  126. package/dist/TreeNodeHandle.d.ts.map +1 -1
  127. package/dist/TreeNodeHandle.js +13 -23
  128. package/dist/TreeNodeHandle.js.map +1 -1
  129. package/dist/TreeView.d.ts +166 -0
  130. package/dist/TreeView.d.ts.map +1 -0
  131. package/dist/TreeView.js +217 -0
  132. package/dist/TreeView.js.map +1 -0
  133. package/dist/TreeViewUtilities.d.ts +21 -0
  134. package/dist/TreeViewUtilities.d.ts.map +1 -0
  135. package/dist/TreeViewUtilities.js +77 -0
  136. package/dist/TreeViewUtilities.js.map +1 -0
  137. package/dist/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  138. package/dist/UndoRedoHandler.d.ts.map +1 -0
  139. package/dist/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +5 -9
  140. package/dist/UndoRedoHandler.js.map +1 -0
  141. package/dist/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  142. package/dist/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  143. package/dist/id-compressor/AppendOnlySortedMap.js +283 -0
  144. package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -0
  145. package/dist/id-compressor/IdCompressor.d.ts +389 -0
  146. package/dist/id-compressor/IdCompressor.d.ts.map +1 -0
  147. package/dist/id-compressor/IdCompressor.js +1353 -0
  148. package/dist/id-compressor/IdCompressor.js.map +1 -0
  149. package/dist/id-compressor/IdRange.d.ts +11 -0
  150. package/dist/id-compressor/IdRange.d.ts.map +1 -0
  151. package/dist/id-compressor/IdRange.js +29 -0
  152. package/dist/id-compressor/IdRange.js.map +1 -0
  153. package/dist/id-compressor/NumericUuid.d.ts +63 -0
  154. package/dist/id-compressor/NumericUuid.d.ts.map +1 -0
  155. package/dist/id-compressor/NumericUuid.js +377 -0
  156. package/dist/id-compressor/NumericUuid.js.map +1 -0
  157. package/dist/id-compressor/index.d.ts +12 -0
  158. package/dist/id-compressor/index.d.ts.map +1 -0
  159. package/dist/id-compressor/index.js +26 -0
  160. package/dist/id-compressor/index.js.map +1 -0
  161. package/dist/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  162. package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  163. package/dist/id-compressor/persisted-types/0.0.1.js +7 -0
  164. package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -0
  165. package/dist/id-compressor/persisted-types/index.d.ts +6 -0
  166. package/dist/id-compressor/persisted-types/index.d.ts.map +1 -0
  167. package/dist/id-compressor/persisted-types/index.js +18 -0
  168. package/dist/id-compressor/persisted-types/index.js.map +1 -0
  169. package/dist/index.d.ts +29 -9
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +50 -35
  172. package/dist/index.js.map +1 -1
  173. package/dist/persisted-types/0.0.2.d.ts +385 -0
  174. package/dist/persisted-types/0.0.2.d.ts.map +1 -0
  175. package/dist/persisted-types/0.0.2.js +113 -0
  176. package/dist/persisted-types/0.0.2.js.map +1 -0
  177. package/dist/persisted-types/0.1.1.d.ts +314 -0
  178. package/dist/persisted-types/0.1.1.d.ts.map +1 -0
  179. package/dist/persisted-types/0.1.1.js +153 -0
  180. package/dist/persisted-types/0.1.1.js.map +1 -0
  181. package/dist/persisted-types/index.d.ts +7 -0
  182. package/dist/persisted-types/index.d.ts.map +1 -0
  183. package/dist/persisted-types/index.js +20 -0
  184. package/dist/persisted-types/index.js.map +1 -0
  185. package/docs/0-1-1-Compression.md +228 -0
  186. package/docs/Breaking-Change-Migration.md +52 -0
  187. package/docs/Compression.md +2 -2
  188. package/docs/Telemetry.md +43 -0
  189. package/lib/ChangeCompression.d.ts +39 -0
  190. package/lib/ChangeCompression.d.ts.map +1 -0
  191. package/lib/ChangeCompression.js +111 -0
  192. package/lib/ChangeCompression.js.map +1 -0
  193. package/{dist/default-edits/PersistedTypes.d.ts → lib/ChangeTypes.d.ts} +58 -100
  194. package/lib/ChangeTypes.d.ts.map +1 -0
  195. package/lib/{default-edits/PersistedTypes.js → ChangeTypes.js} +15 -68
  196. package/lib/ChangeTypes.js.map +1 -0
  197. package/lib/Checkout.d.ts +39 -27
  198. package/lib/Checkout.d.ts.map +1 -1
  199. package/lib/Checkout.js +51 -23
  200. package/lib/Checkout.js.map +1 -1
  201. package/lib/Common.d.ts +175 -38
  202. package/lib/Common.d.ts.map +1 -1
  203. package/lib/Common.js +226 -101
  204. package/lib/Common.js.map +1 -1
  205. package/lib/EagerCheckout.d.ts +24 -0
  206. package/lib/EagerCheckout.d.ts.map +1 -0
  207. package/lib/{BasicCheckout.js → EagerCheckout.js} +7 -4
  208. package/lib/EagerCheckout.js.map +1 -0
  209. package/lib/EditLog.d.ts +77 -63
  210. package/lib/EditLog.d.ts.map +1 -1
  211. package/lib/EditLog.js +83 -47
  212. package/lib/EditLog.js.map +1 -1
  213. package/lib/EditUtilities.d.ts +168 -0
  214. package/lib/EditUtilities.d.ts.map +1 -0
  215. package/lib/EditUtilities.js +353 -0
  216. package/lib/EditUtilities.js.map +1 -0
  217. package/lib/EventTypes.d.ts +73 -0
  218. package/lib/EventTypes.d.ts.map +1 -0
  219. package/lib/EventTypes.js +75 -0
  220. package/lib/EventTypes.js.map +1 -0
  221. package/lib/Forest.d.ts +29 -7
  222. package/lib/Forest.d.ts.map +1 -1
  223. package/lib/Forest.js +58 -35
  224. package/lib/Forest.js.map +1 -1
  225. package/lib/HistoryEditFactory.d.ts +20 -0
  226. package/lib/HistoryEditFactory.d.ts.map +1 -0
  227. package/lib/{default-edits/HistoryEditFactory.js → HistoryEditFactory.js} +78 -39
  228. package/lib/HistoryEditFactory.js.map +1 -0
  229. package/lib/IdConversion.d.ts +12 -0
  230. package/lib/IdConversion.d.ts.map +1 -0
  231. package/lib/IdConversion.js +91 -0
  232. package/lib/IdConversion.js.map +1 -0
  233. package/lib/Identifiers.d.ts +89 -2
  234. package/lib/Identifiers.d.ts.map +1 -1
  235. package/lib/Identifiers.js +8 -1
  236. package/lib/Identifiers.js.map +1 -1
  237. package/lib/InitialTree.d.ts +2 -2
  238. package/lib/InitialTree.d.ts.map +1 -1
  239. package/lib/InitialTree.js +2 -1
  240. package/lib/InitialTree.js.map +1 -1
  241. package/lib/LazyCheckout.d.ts +28 -0
  242. package/lib/LazyCheckout.d.ts.map +1 -0
  243. package/lib/LazyCheckout.js +40 -0
  244. package/lib/LazyCheckout.js.map +1 -0
  245. package/lib/LogViewer.d.ts +130 -85
  246. package/lib/LogViewer.d.ts.map +1 -1
  247. package/lib/LogViewer.js +102 -77
  248. package/lib/LogViewer.js.map +1 -1
  249. package/lib/MergeHealth.d.ts +221 -0
  250. package/lib/MergeHealth.d.ts.map +1 -0
  251. package/lib/MergeHealth.js +258 -0
  252. package/lib/MergeHealth.js.map +1 -0
  253. package/lib/NodeIdUtilities.d.ts +90 -0
  254. package/lib/NodeIdUtilities.d.ts.map +1 -0
  255. package/lib/NodeIdUtilities.js +53 -0
  256. package/lib/NodeIdUtilities.js.map +1 -0
  257. package/lib/PayloadUtilities.d.ts +42 -0
  258. package/lib/PayloadUtilities.d.ts.map +1 -0
  259. package/lib/PayloadUtilities.js +110 -0
  260. package/lib/PayloadUtilities.js.map +1 -0
  261. package/lib/ReconciliationPath.d.ts +18 -13
  262. package/lib/ReconciliationPath.d.ts.map +1 -1
  263. package/lib/ReconciliationPath.js.map +1 -1
  264. package/lib/RevisionValueCache.d.ts +11 -2
  265. package/lib/RevisionValueCache.d.ts.map +1 -1
  266. package/lib/RevisionValueCache.js +2 -3
  267. package/lib/RevisionValueCache.js.map +1 -1
  268. package/lib/RevisionView.d.ts +83 -0
  269. package/lib/RevisionView.d.ts.map +1 -0
  270. package/lib/RevisionView.js +175 -0
  271. package/lib/RevisionView.js.map +1 -0
  272. package/lib/SerializationUtilities.d.ts +36 -0
  273. package/lib/SerializationUtilities.d.ts.map +1 -0
  274. package/lib/SerializationUtilities.js +95 -0
  275. package/lib/SerializationUtilities.js.map +1 -0
  276. package/lib/SharedTree.d.ts +400 -0
  277. package/lib/SharedTree.d.ts.map +1 -0
  278. package/lib/SharedTree.js +1059 -0
  279. package/lib/SharedTree.js.map +1 -0
  280. package/lib/SharedTreeEncoder.d.ts +102 -0
  281. package/lib/SharedTreeEncoder.d.ts.map +1 -0
  282. package/lib/SharedTreeEncoder.js +308 -0
  283. package/lib/SharedTreeEncoder.js.map +1 -0
  284. package/lib/StringInterner.d.ts +46 -0
  285. package/lib/StringInterner.d.ts.map +1 -0
  286. package/lib/StringInterner.js +57 -0
  287. package/lib/StringInterner.js.map +1 -0
  288. package/lib/Summary.d.ts +40 -0
  289. package/lib/Summary.d.ts.map +1 -0
  290. package/lib/Summary.js +19 -0
  291. package/lib/Summary.js.map +1 -0
  292. package/lib/SummaryBackCompatibility.d.ts +22 -22
  293. package/lib/SummaryBackCompatibility.d.ts.map +1 -1
  294. package/lib/SummaryBackCompatibility.js +29 -32
  295. package/lib/SummaryBackCompatibility.js.map +1 -1
  296. package/lib/SummaryTestUtilities.d.ts +31 -0
  297. package/lib/SummaryTestUtilities.d.ts.map +1 -0
  298. package/lib/SummaryTestUtilities.js +32 -0
  299. package/lib/SummaryTestUtilities.js.map +1 -0
  300. package/lib/Transaction.d.ts +53 -0
  301. package/lib/Transaction.d.ts.map +1 -0
  302. package/lib/Transaction.js +72 -0
  303. package/lib/Transaction.js.map +1 -0
  304. package/lib/TransactionInternal.d.ts +543 -0
  305. package/lib/TransactionInternal.d.ts.map +1 -0
  306. package/lib/TransactionInternal.js +618 -0
  307. package/lib/TransactionInternal.js.map +1 -0
  308. package/lib/TreeCompressor.d.ts +37 -0
  309. package/lib/TreeCompressor.d.ts.map +1 -0
  310. package/lib/TreeCompressor.js +128 -0
  311. package/lib/TreeCompressor.js.map +1 -0
  312. package/lib/TreeNodeHandle.d.ts +12 -18
  313. package/lib/TreeNodeHandle.d.ts.map +1 -1
  314. package/lib/TreeNodeHandle.js +14 -24
  315. package/lib/TreeNodeHandle.js.map +1 -1
  316. package/lib/TreeView.d.ts +166 -0
  317. package/lib/TreeView.d.ts.map +1 -0
  318. package/lib/TreeView.js +213 -0
  319. package/lib/TreeView.js.map +1 -0
  320. package/lib/TreeViewUtilities.d.ts +21 -0
  321. package/lib/TreeViewUtilities.d.ts.map +1 -0
  322. package/lib/TreeViewUtilities.js +71 -0
  323. package/lib/TreeViewUtilities.js.map +1 -0
  324. package/lib/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  325. package/lib/UndoRedoHandler.d.ts.map +1 -0
  326. package/lib/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +3 -7
  327. package/lib/UndoRedoHandler.js.map +1 -0
  328. package/lib/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  329. package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  330. package/lib/id-compressor/AppendOnlySortedMap.js +278 -0
  331. package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -0
  332. package/lib/id-compressor/IdCompressor.d.ts +389 -0
  333. package/lib/id-compressor/IdCompressor.d.ts.map +1 -0
  334. package/lib/id-compressor/IdCompressor.js +1343 -0
  335. package/lib/id-compressor/IdCompressor.js.map +1 -0
  336. package/lib/id-compressor/IdRange.d.ts +11 -0
  337. package/lib/id-compressor/IdRange.d.ts.map +1 -0
  338. package/lib/id-compressor/IdRange.js +25 -0
  339. package/lib/id-compressor/IdRange.js.map +1 -0
  340. package/lib/id-compressor/NumericUuid.d.ts +63 -0
  341. package/lib/id-compressor/NumericUuid.d.ts.map +1 -0
  342. package/lib/id-compressor/NumericUuid.js +365 -0
  343. package/lib/id-compressor/NumericUuid.js.map +1 -0
  344. package/lib/id-compressor/index.d.ts +12 -0
  345. package/lib/id-compressor/index.d.ts.map +1 -0
  346. package/lib/id-compressor/index.js +12 -0
  347. package/lib/id-compressor/index.js.map +1 -0
  348. package/lib/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  349. package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  350. package/lib/{test/Snapshot.tests.d.ts → id-compressor/persisted-types/0.0.1.js} +1 -1
  351. package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -0
  352. package/lib/id-compressor/persisted-types/index.d.ts +6 -0
  353. package/lib/id-compressor/persisted-types/index.d.ts.map +1 -0
  354. package/lib/id-compressor/persisted-types/index.js +6 -0
  355. package/lib/id-compressor/persisted-types/index.js.map +1 -0
  356. package/lib/index.d.ts +29 -9
  357. package/lib/index.d.ts.map +1 -1
  358. package/lib/index.js +23 -6
  359. package/lib/index.js.map +1 -1
  360. package/lib/persisted-types/0.0.2.d.ts +385 -0
  361. package/lib/persisted-types/0.0.2.d.ts.map +1 -0
  362. package/lib/persisted-types/0.0.2.js +110 -0
  363. package/lib/persisted-types/0.0.2.js.map +1 -0
  364. package/lib/persisted-types/0.1.1.d.ts +314 -0
  365. package/lib/persisted-types/0.1.1.d.ts.map +1 -0
  366. package/lib/persisted-types/0.1.1.js +150 -0
  367. package/lib/persisted-types/0.1.1.js.map +1 -0
  368. package/lib/persisted-types/index.d.ts +7 -0
  369. package/lib/persisted-types/index.d.ts.map +1 -0
  370. package/lib/persisted-types/index.js +8 -0
  371. package/lib/persisted-types/index.js.map +1 -0
  372. package/lib/test/AppendOnlySortedMap.tests.d.ts +6 -0
  373. package/lib/test/AppendOnlySortedMap.tests.d.ts.map +1 -0
  374. package/lib/test/AppendOnlySortedMap.tests.js +169 -0
  375. package/lib/test/AppendOnlySortedMap.tests.js.map +1 -0
  376. package/lib/test/{SnapshotUtilities.tests.d.ts → ChangeCompression.tests.d.ts} +1 -1
  377. package/lib/test/ChangeCompression.tests.d.ts.map +1 -0
  378. package/lib/test/ChangeCompression.tests.js +145 -0
  379. package/lib/test/ChangeCompression.tests.js.map +1 -0
  380. package/lib/test/Checkout.tests.d.ts +2 -3
  381. package/lib/test/Checkout.tests.d.ts.map +1 -1
  382. package/lib/test/Checkout.tests.js +126 -69
  383. package/lib/test/Checkout.tests.js.map +1 -1
  384. package/lib/test/Common.tests.js +60 -2
  385. package/lib/test/Common.tests.js.map +1 -1
  386. package/lib/test/{BasicCheckout.tests.d.ts → EagerCheckout.tests.d.ts} +1 -1
  387. package/lib/test/EagerCheckout.tests.d.ts.map +1 -0
  388. package/lib/test/EagerCheckout.tests.js +20 -0
  389. package/lib/test/EagerCheckout.tests.js.map +1 -0
  390. package/lib/test/Edit.tests.js +22 -14
  391. package/lib/test/Edit.tests.js.map +1 -1
  392. package/lib/test/{Anchors.glassBox.tests.d.ts → EditLog.perf.tests.d.ts} +1 -1
  393. package/lib/test/EditLog.perf.tests.d.ts.map +1 -0
  394. package/lib/test/EditLog.perf.tests.js +30 -0
  395. package/lib/test/EditLog.perf.tests.js.map +1 -0
  396. package/lib/test/EditLog.tests.js +10 -6
  397. package/lib/test/EditLog.tests.js.map +1 -1
  398. package/lib/test/EditUtilities.tests.d.ts +6 -0
  399. package/lib/test/EditUtilities.tests.d.ts.map +1 -0
  400. package/lib/test/EditUtilities.tests.js +503 -0
  401. package/lib/test/EditUtilities.tests.js.map +1 -0
  402. package/lib/test/Forest.perf.tests.d.ts +6 -0
  403. package/lib/test/Forest.perf.tests.d.ts.map +1 -0
  404. package/lib/test/Forest.perf.tests.js +133 -0
  405. package/lib/test/Forest.perf.tests.js.map +1 -0
  406. package/lib/test/Forest.tests.js +54 -27
  407. package/lib/test/Forest.tests.js.map +1 -1
  408. package/lib/test/GenericTransaction.tests.js +12 -3
  409. package/lib/test/GenericTransaction.tests.js.map +1 -1
  410. package/lib/test/HistoryEditFactory.tests.d.ts +6 -0
  411. package/lib/test/HistoryEditFactory.tests.d.ts.map +1 -0
  412. package/lib/test/HistoryEditFactory.tests.js +90 -0
  413. package/lib/test/HistoryEditFactory.tests.js.map +1 -0
  414. package/lib/test/IdCompressor.perf.tests.d.ts +6 -0
  415. package/lib/test/IdCompressor.perf.tests.d.ts.map +1 -0
  416. package/lib/test/IdCompressor.perf.tests.js +304 -0
  417. package/lib/test/IdCompressor.perf.tests.js.map +1 -0
  418. package/lib/test/IdCompressor.tests.d.ts +6 -0
  419. package/lib/test/IdCompressor.tests.d.ts.map +1 -0
  420. package/lib/test/IdCompressor.tests.js +1075 -0
  421. package/lib/test/IdCompressor.tests.js.map +1 -0
  422. package/lib/test/IdConversion.tests.d.ts +6 -0
  423. package/lib/test/IdConversion.tests.d.ts.map +1 -0
  424. package/lib/test/IdConversion.tests.js +36 -0
  425. package/lib/test/IdConversion.tests.js.map +1 -0
  426. package/lib/test/LazyCheckout.tests.d.ts +6 -0
  427. package/lib/test/LazyCheckout.tests.d.ts.map +1 -0
  428. package/lib/test/LazyCheckout.tests.js +22 -0
  429. package/lib/test/LazyCheckout.tests.js.map +1 -0
  430. package/lib/test/LogViewer.tests.js +269 -187
  431. package/lib/test/LogViewer.tests.js.map +1 -1
  432. package/lib/test/{SharedTreeWithAnchors.tests.d.ts → MergeHealthTelemetryHeartbeat.tests.d.ts} +1 -1
  433. package/lib/test/MergeHealthTelemetryHeartbeat.tests.d.ts.map +1 -0
  434. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +342 -0
  435. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -0
  436. package/lib/test/NumericUuid.perf.tests.d.ts +6 -0
  437. package/lib/test/NumericUuid.perf.tests.d.ts.map +1 -0
  438. package/lib/test/NumericUuid.perf.tests.js +68 -0
  439. package/lib/test/NumericUuid.perf.tests.js.map +1 -0
  440. package/lib/test/NumericUuid.tests.d.ts +6 -0
  441. package/lib/test/NumericUuid.tests.d.ts.map +1 -0
  442. package/lib/test/NumericUuid.tests.js +191 -0
  443. package/lib/test/NumericUuid.tests.js.map +1 -0
  444. package/lib/test/RevisionView.tests.d.ts +6 -0
  445. package/lib/test/RevisionView.tests.d.ts.map +1 -0
  446. package/lib/test/RevisionView.tests.js +133 -0
  447. package/lib/test/RevisionView.tests.js.map +1 -0
  448. package/lib/test/SharedTree.perf.tests.d.ts +6 -0
  449. package/lib/test/SharedTree.perf.tests.d.ts.map +1 -0
  450. package/lib/test/SharedTree.perf.tests.js +39 -0
  451. package/lib/test/SharedTree.perf.tests.js.map +1 -0
  452. package/lib/test/SharedTree.tests.js +15 -3
  453. package/lib/test/SharedTree.tests.js.map +1 -1
  454. package/lib/test/StringInterner.tests.d.ts +6 -0
  455. package/lib/test/StringInterner.tests.d.ts.map +1 -0
  456. package/lib/test/StringInterner.tests.js +71 -0
  457. package/lib/test/StringInterner.tests.js.map +1 -0
  458. package/lib/test/Summary.tests.d.ts +8 -0
  459. package/lib/test/Summary.tests.d.ts.map +1 -0
  460. package/lib/test/Summary.tests.js +407 -0
  461. package/lib/test/Summary.tests.js.map +1 -0
  462. package/lib/test/Transaction.tests.js +76 -330
  463. package/lib/test/Transaction.tests.js.map +1 -1
  464. package/lib/test/TransactionInternal.tests.d.ts +6 -0
  465. package/lib/test/TransactionInternal.tests.d.ts.map +1 -0
  466. package/lib/test/TransactionInternal.tests.js +568 -0
  467. package/lib/test/TransactionInternal.tests.js.map +1 -0
  468. package/lib/test/TreeCompression.tests.d.ts +6 -0
  469. package/lib/test/TreeCompression.tests.d.ts.map +1 -0
  470. package/lib/test/TreeCompression.tests.js +292 -0
  471. package/lib/test/TreeCompression.tests.js.map +1 -0
  472. package/lib/test/TreeView.tests.d.ts +6 -0
  473. package/lib/test/TreeView.tests.d.ts.map +1 -0
  474. package/lib/test/TreeView.tests.js +147 -0
  475. package/lib/test/TreeView.tests.js.map +1 -0
  476. package/lib/test/UndoRedoHandler.tests.js +2 -2
  477. package/lib/test/UndoRedoHandler.tests.js.map +1 -1
  478. package/lib/test/Virtualization.tests.js +147 -62
  479. package/lib/test/Virtualization.tests.js.map +1 -1
  480. package/lib/test/fuzz/Generators.d.ts +19 -0
  481. package/lib/test/fuzz/Generators.d.ts.map +1 -0
  482. package/lib/test/fuzz/Generators.js +420 -0
  483. package/lib/test/fuzz/Generators.js.map +1 -0
  484. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +20 -0
  485. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -0
  486. package/lib/test/fuzz/SharedTreeFuzzTests.js +200 -0
  487. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -0
  488. package/lib/test/fuzz/Types.d.ts +133 -0
  489. package/lib/test/fuzz/Types.d.ts.map +1 -0
  490. package/lib/test/{GenericTransactionWithAnchors.tests.d.ts → fuzz/Types.js} +2 -2
  491. package/lib/test/fuzz/Types.js.map +1 -0
  492. package/lib/test/utilities/IdCompressorTestUtilities.d.ts +180 -0
  493. package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -0
  494. package/lib/test/utilities/IdCompressorTestUtilities.js +528 -0
  495. package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -0
  496. package/lib/test/utilities/MockTransaction.d.ts +26 -7
  497. package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
  498. package/lib/test/utilities/MockTransaction.js +40 -11
  499. package/lib/test/utilities/MockTransaction.js.map +1 -1
  500. package/lib/test/utilities/PendingLocalStateTests.d.ts +12 -0
  501. package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -0
  502. package/lib/test/utilities/PendingLocalStateTests.js +105 -0
  503. package/lib/test/utilities/PendingLocalStateTests.js.map +1 -0
  504. package/lib/test/utilities/SharedTreeTests.d.ts +3 -4
  505. package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
  506. package/lib/test/utilities/SharedTreeTests.js +696 -439
  507. package/lib/test/utilities/SharedTreeTests.js.map +1 -1
  508. package/lib/test/utilities/SharedTreeVersioningTests.d.ts +11 -0
  509. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -0
  510. package/lib/test/utilities/SharedTreeVersioningTests.js +345 -0
  511. package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -0
  512. package/lib/test/utilities/SummaryLoadPerfTests.d.ts +10 -0
  513. package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -0
  514. package/lib/test/utilities/SummaryLoadPerfTests.js +102 -0
  515. package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -0
  516. package/lib/test/utilities/SummarySizeTests.d.ts +11 -0
  517. package/lib/test/utilities/SummarySizeTests.d.ts.map +1 -0
  518. package/lib/test/utilities/SummarySizeTests.js +158 -0
  519. package/lib/test/utilities/SummarySizeTests.js.map +1 -0
  520. package/lib/test/utilities/TestCommon.d.ts +9 -0
  521. package/lib/test/utilities/TestCommon.d.ts.map +1 -0
  522. package/lib/test/utilities/TestCommon.js +13 -0
  523. package/lib/test/utilities/TestCommon.js.map +1 -0
  524. package/lib/test/utilities/TestNode.d.ts +140 -0
  525. package/lib/test/utilities/TestNode.d.ts.map +1 -0
  526. package/lib/test/utilities/TestNode.js +292 -0
  527. package/lib/test/utilities/TestNode.js.map +1 -0
  528. package/lib/test/utilities/TestUtilities.d.ts +84 -70
  529. package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
  530. package/lib/test/utilities/TestUtilities.js +218 -143
  531. package/lib/test/utilities/TestUtilities.js.map +1 -1
  532. package/lib/test/utilities/UndoRedoTests.d.ts +4 -5
  533. package/lib/test/utilities/UndoRedoTests.d.ts.map +1 -1
  534. package/lib/test/utilities/UndoRedoTests.js +138 -149
  535. package/lib/test/utilities/UndoRedoTests.js.map +1 -1
  536. package/package.json +19 -14
  537. package/src/ChangeCompression.ts +159 -0
  538. package/src/{default-edits/PersistedTypes.ts → ChangeTypes.ts} +62 -120
  539. package/src/Checkout.ts +81 -52
  540. package/src/Common.ts +317 -117
  541. package/src/EagerCheckout.ts +38 -0
  542. package/src/EditLog.ts +153 -100
  543. package/src/EditUtilities.ts +559 -0
  544. package/src/EventTypes.ts +74 -0
  545. package/src/Forest.ts +81 -73
  546. package/src/{default-edits/HistoryEditFactory.ts → HistoryEditFactory.ts} +103 -53
  547. package/src/IdConversion.ts +125 -0
  548. package/src/Identifiers.ts +101 -1
  549. package/src/InitialTree.ts +5 -4
  550. package/src/LazyCheckout.ts +51 -0
  551. package/src/LogViewer.ts +242 -166
  552. package/src/MergeHealth.ts +447 -0
  553. package/src/NodeIdUtilities.ts +141 -0
  554. package/src/PayloadUtilities.ts +124 -0
  555. package/src/ReconciliationPath.ts +18 -13
  556. package/src/RevisionValueCache.ts +14 -5
  557. package/src/RevisionView.ts +252 -0
  558. package/src/SerializationUtilities.ts +130 -0
  559. package/src/SharedTree.ts +1448 -0
  560. package/src/SharedTreeEncoder.ts +493 -0
  561. package/src/StringInterner.ts +72 -0
  562. package/src/Summary.ts +48 -0
  563. package/src/SummaryBackCompatibility.ts +47 -57
  564. package/src/SummaryTestUtilities.ts +54 -0
  565. package/src/Transaction.ts +94 -0
  566. package/src/TransactionInternal.ts +1088 -0
  567. package/src/TreeCompressor.ts +222 -0
  568. package/src/TreeNodeHandle.ts +19 -32
  569. package/src/TreeView.ts +321 -0
  570. package/src/TreeViewUtilities.ts +77 -0
  571. package/src/{default-edits/UndoRedoHandler.ts → UndoRedoHandler.ts} +8 -13
  572. package/src/id-compressor/AppendOnlySortedMap.ts +325 -0
  573. package/src/id-compressor/IdCompressor.md +3 -0
  574. package/src/id-compressor/IdCompressor.ts +1848 -0
  575. package/src/id-compressor/IdRange.ts +33 -0
  576. package/src/id-compressor/NumericUuid.ts +414 -0
  577. package/src/id-compressor/index.ts +13 -0
  578. package/src/id-compressor/persisted-types/0.0.1.ts +179 -0
  579. package/src/id-compressor/persisted-types/README.md +3 -0
  580. package/src/id-compressor/persisted-types/index.ts +6 -0
  581. package/src/index.ts +119 -59
  582. package/src/persisted-types/0.0.2.ts +442 -0
  583. package/src/persisted-types/0.1.1.ts +476 -0
  584. package/src/persisted-types/README.md +22 -0
  585. package/src/persisted-types/index.ts +9 -0
  586. package/.mocharc.js +0 -41
  587. package/api/tree.api.md +0 -729
  588. package/dist/BasicCheckout.d.ts +0 -23
  589. package/dist/BasicCheckout.d.ts.map +0 -1
  590. package/dist/BasicCheckout.js.map +0 -1
  591. package/dist/Snapshot.d.ts +0 -198
  592. package/dist/Snapshot.d.ts.map +0 -1
  593. package/dist/Snapshot.js +0 -267
  594. package/dist/Snapshot.js.map +0 -1
  595. package/dist/SnapshotUtilities.d.ts +0 -29
  596. package/dist/SnapshotUtilities.d.ts.map +0 -1
  597. package/dist/SnapshotUtilities.js +0 -73
  598. package/dist/SnapshotUtilities.js.map +0 -1
  599. package/dist/anchored-edits/AnchorResolution.d.ts +0 -144
  600. package/dist/anchored-edits/AnchorResolution.d.ts.map +0 -1
  601. package/dist/anchored-edits/AnchorResolution.js +0 -162
  602. package/dist/anchored-edits/AnchorResolution.js.map +0 -1
  603. package/dist/anchored-edits/Factory.d.ts +0 -56
  604. package/dist/anchored-edits/Factory.d.ts.map +0 -1
  605. package/dist/anchored-edits/Factory.js +0 -79
  606. package/dist/anchored-edits/Factory.js.map +0 -1
  607. package/dist/anchored-edits/PersistedTypes.d.ts +0 -245
  608. package/dist/anchored-edits/PersistedTypes.d.ts.map +0 -1
  609. package/dist/anchored-edits/PersistedTypes.js +0 -131
  610. package/dist/anchored-edits/PersistedTypes.js.map +0 -1
  611. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  612. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  613. package/dist/anchored-edits/SharedTreeWithAnchors.js +0 -115
  614. package/dist/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  615. package/dist/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  616. package/dist/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  617. package/dist/anchored-edits/TransactionWithAnchors.js +0 -36
  618. package/dist/anchored-edits/TransactionWithAnchors.js.map +0 -1
  619. package/dist/anchored-edits/index.d.ts +0 -10
  620. package/dist/anchored-edits/index.d.ts.map +0 -1
  621. package/dist/anchored-edits/index.js +0 -34
  622. package/dist/anchored-edits/index.js.map +0 -1
  623. package/dist/default-edits/EditUtilities.d.ts +0 -57
  624. package/dist/default-edits/EditUtilities.d.ts.map +0 -1
  625. package/dist/default-edits/EditUtilities.js +0 -192
  626. package/dist/default-edits/EditUtilities.js.map +0 -1
  627. package/dist/default-edits/Factory.d.ts +0 -56
  628. package/dist/default-edits/Factory.d.ts.map +0 -1
  629. package/dist/default-edits/Factory.js +0 -79
  630. package/dist/default-edits/Factory.js.map +0 -1
  631. package/dist/default-edits/HistoryEditFactory.d.ts +0 -19
  632. package/dist/default-edits/HistoryEditFactory.d.ts.map +0 -1
  633. package/dist/default-edits/HistoryEditFactory.js +0 -187
  634. package/dist/default-edits/HistoryEditFactory.js.map +0 -1
  635. package/dist/default-edits/PersistedTypes.d.ts.map +0 -1
  636. package/dist/default-edits/PersistedTypes.js.map +0 -1
  637. package/dist/default-edits/SharedTree.d.ts +0 -111
  638. package/dist/default-edits/SharedTree.d.ts.map +0 -1
  639. package/dist/default-edits/SharedTree.js +0 -124
  640. package/dist/default-edits/SharedTree.js.map +0 -1
  641. package/dist/default-edits/Summary.d.ts +0 -15
  642. package/dist/default-edits/Summary.d.ts.map +0 -1
  643. package/dist/default-edits/Summary.js +0 -35
  644. package/dist/default-edits/Summary.js.map +0 -1
  645. package/dist/default-edits/Transaction.d.ts +0 -41
  646. package/dist/default-edits/Transaction.d.ts.map +0 -1
  647. package/dist/default-edits/Transaction.js +0 -225
  648. package/dist/default-edits/Transaction.js.map +0 -1
  649. package/dist/default-edits/UndoRedoHandler.d.ts.map +0 -1
  650. package/dist/default-edits/UndoRedoHandler.js.map +0 -1
  651. package/dist/default-edits/index.d.ts +0 -13
  652. package/dist/default-edits/index.d.ts.map +0 -1
  653. package/dist/default-edits/index.js +0 -41
  654. package/dist/default-edits/index.js.map +0 -1
  655. package/dist/generic/GenericEditUtilities.d.ts +0 -26
  656. package/dist/generic/GenericEditUtilities.d.ts.map +0 -1
  657. package/dist/generic/GenericEditUtilities.js +0 -45
  658. package/dist/generic/GenericEditUtilities.js.map +0 -1
  659. package/dist/generic/GenericSharedTree.d.ts +0 -221
  660. package/dist/generic/GenericSharedTree.d.ts.map +0 -1
  661. package/dist/generic/GenericSharedTree.js +0 -447
  662. package/dist/generic/GenericSharedTree.js.map +0 -1
  663. package/dist/generic/GenericTransaction.d.ts +0 -87
  664. package/dist/generic/GenericTransaction.d.ts.map +0 -1
  665. package/dist/generic/GenericTransaction.js +0 -144
  666. package/dist/generic/GenericTransaction.js.map +0 -1
  667. package/dist/generic/PersistedTypes.d.ts +0 -194
  668. package/dist/generic/PersistedTypes.d.ts.map +0 -1
  669. package/dist/generic/PersistedTypes.js +0 -42
  670. package/dist/generic/PersistedTypes.js.map +0 -1
  671. package/dist/generic/Summary.d.ts +0 -63
  672. package/dist/generic/Summary.d.ts.map +0 -1
  673. package/dist/generic/Summary.js +0 -64
  674. package/dist/generic/Summary.js.map +0 -1
  675. package/dist/generic/index.d.ts +0 -10
  676. package/dist/generic/index.d.ts.map +0 -1
  677. package/dist/generic/index.js +0 -26
  678. package/dist/generic/index.js.map +0 -1
  679. package/lib/BasicCheckout.d.ts +0 -23
  680. package/lib/BasicCheckout.d.ts.map +0 -1
  681. package/lib/BasicCheckout.js.map +0 -1
  682. package/lib/Snapshot.d.ts +0 -198
  683. package/lib/Snapshot.d.ts.map +0 -1
  684. package/lib/Snapshot.js +0 -263
  685. package/lib/Snapshot.js.map +0 -1
  686. package/lib/SnapshotUtilities.d.ts +0 -29
  687. package/lib/SnapshotUtilities.d.ts.map +0 -1
  688. package/lib/SnapshotUtilities.js +0 -67
  689. package/lib/SnapshotUtilities.js.map +0 -1
  690. package/lib/anchored-edits/AnchorResolution.d.ts +0 -144
  691. package/lib/anchored-edits/AnchorResolution.d.ts.map +0 -1
  692. package/lib/anchored-edits/AnchorResolution.js +0 -152
  693. package/lib/anchored-edits/AnchorResolution.js.map +0 -1
  694. package/lib/anchored-edits/Factory.d.ts +0 -56
  695. package/lib/anchored-edits/Factory.d.ts.map +0 -1
  696. package/lib/anchored-edits/Factory.js +0 -74
  697. package/lib/anchored-edits/Factory.js.map +0 -1
  698. package/lib/anchored-edits/PersistedTypes.d.ts +0 -245
  699. package/lib/anchored-edits/PersistedTypes.d.ts.map +0 -1
  700. package/lib/anchored-edits/PersistedTypes.js +0 -128
  701. package/lib/anchored-edits/PersistedTypes.js.map +0 -1
  702. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  703. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  704. package/lib/anchored-edits/SharedTreeWithAnchors.js +0 -110
  705. package/lib/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  706. package/lib/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  707. package/lib/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  708. package/lib/anchored-edits/TransactionWithAnchors.js +0 -32
  709. package/lib/anchored-edits/TransactionWithAnchors.js.map +0 -1
  710. package/lib/anchored-edits/index.d.ts +0 -10
  711. package/lib/anchored-edits/index.d.ts.map +0 -1
  712. package/lib/anchored-edits/index.js +0 -11
  713. package/lib/anchored-edits/index.js.map +0 -1
  714. package/lib/default-edits/EditUtilities.d.ts +0 -57
  715. package/lib/default-edits/EditUtilities.d.ts.map +0 -1
  716. package/lib/default-edits/EditUtilities.js +0 -181
  717. package/lib/default-edits/EditUtilities.js.map +0 -1
  718. package/lib/default-edits/Factory.d.ts +0 -56
  719. package/lib/default-edits/Factory.d.ts.map +0 -1
  720. package/lib/default-edits/Factory.js +0 -74
  721. package/lib/default-edits/Factory.js.map +0 -1
  722. package/lib/default-edits/HistoryEditFactory.d.ts +0 -19
  723. package/lib/default-edits/HistoryEditFactory.d.ts.map +0 -1
  724. package/lib/default-edits/HistoryEditFactory.js.map +0 -1
  725. package/lib/default-edits/PersistedTypes.d.ts.map +0 -1
  726. package/lib/default-edits/PersistedTypes.js.map +0 -1
  727. package/lib/default-edits/SharedTree.d.ts +0 -111
  728. package/lib/default-edits/SharedTree.d.ts.map +0 -1
  729. package/lib/default-edits/SharedTree.js +0 -100
  730. package/lib/default-edits/SharedTree.js.map +0 -1
  731. package/lib/default-edits/Summary.d.ts +0 -15
  732. package/lib/default-edits/Summary.d.ts.map +0 -1
  733. package/lib/default-edits/Summary.js +0 -31
  734. package/lib/default-edits/Summary.js.map +0 -1
  735. package/lib/default-edits/Transaction.d.ts +0 -41
  736. package/lib/default-edits/Transaction.d.ts.map +0 -1
  737. package/lib/default-edits/Transaction.js +0 -221
  738. package/lib/default-edits/Transaction.js.map +0 -1
  739. package/lib/default-edits/UndoRedoHandler.d.ts.map +0 -1
  740. package/lib/default-edits/UndoRedoHandler.js.map +0 -1
  741. package/lib/default-edits/index.d.ts +0 -13
  742. package/lib/default-edits/index.d.ts.map +0 -1
  743. package/lib/default-edits/index.js +0 -14
  744. package/lib/default-edits/index.js.map +0 -1
  745. package/lib/generic/GenericEditUtilities.d.ts +0 -26
  746. package/lib/generic/GenericEditUtilities.d.ts.map +0 -1
  747. package/lib/generic/GenericEditUtilities.js +0 -38
  748. package/lib/generic/GenericEditUtilities.js.map +0 -1
  749. package/lib/generic/GenericSharedTree.d.ts +0 -221
  750. package/lib/generic/GenericSharedTree.d.ts.map +0 -1
  751. package/lib/generic/GenericSharedTree.js +0 -443
  752. package/lib/generic/GenericSharedTree.js.map +0 -1
  753. package/lib/generic/GenericTransaction.d.ts +0 -87
  754. package/lib/generic/GenericTransaction.d.ts.map +0 -1
  755. package/lib/generic/GenericTransaction.js +0 -140
  756. package/lib/generic/GenericTransaction.js.map +0 -1
  757. package/lib/generic/PersistedTypes.d.ts +0 -194
  758. package/lib/generic/PersistedTypes.d.ts.map +0 -1
  759. package/lib/generic/PersistedTypes.js +0 -39
  760. package/lib/generic/PersistedTypes.js.map +0 -1
  761. package/lib/generic/Summary.d.ts +0 -63
  762. package/lib/generic/Summary.d.ts.map +0 -1
  763. package/lib/generic/Summary.js +0 -58
  764. package/lib/generic/Summary.js.map +0 -1
  765. package/lib/generic/index.d.ts +0 -10
  766. package/lib/generic/index.d.ts.map +0 -1
  767. package/lib/generic/index.js +0 -11
  768. package/lib/generic/index.js.map +0 -1
  769. package/lib/test/Anchors.glassBox.tests.d.ts.map +0 -1
  770. package/lib/test/Anchors.glassBox.tests.js +0 -410
  771. package/lib/test/Anchors.glassBox.tests.js.map +0 -1
  772. package/lib/test/BasicCheckout.tests.d.ts.map +0 -1
  773. package/lib/test/BasicCheckout.tests.js +0 -8
  774. package/lib/test/BasicCheckout.tests.js.map +0 -1
  775. package/lib/test/GenericTransactionWithAnchors.tests.d.ts.map +0 -1
  776. package/lib/test/GenericTransactionWithAnchors.tests.js +0 -25
  777. package/lib/test/GenericTransactionWithAnchors.tests.js.map +0 -1
  778. package/lib/test/SharedTreeWithAnchors.tests.d.ts.map +0 -1
  779. package/lib/test/SharedTreeWithAnchors.tests.js +0 -420
  780. package/lib/test/SharedTreeWithAnchors.tests.js.map +0 -1
  781. package/lib/test/Snapshot.tests.d.ts.map +0 -1
  782. package/lib/test/Snapshot.tests.js +0 -96
  783. package/lib/test/Snapshot.tests.js.map +0 -1
  784. package/lib/test/SnapshotUtilities.tests.d.ts.map +0 -1
  785. package/lib/test/SnapshotUtilities.tests.js +0 -168
  786. package/lib/test/SnapshotUtilities.tests.js.map +0 -1
  787. package/lib/test/undoRedoStackManager.d.ts +0 -26
  788. package/lib/test/undoRedoStackManager.d.ts.map +0 -1
  789. package/lib/test/undoRedoStackManager.js +0 -176
  790. package/lib/test/undoRedoStackManager.js.map +0 -1
  791. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts +0 -13
  792. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts.map +0 -1
  793. package/lib/test/utilities/SummaryFormatCompatibilityTests.js +0 -154
  794. package/lib/test/utilities/SummaryFormatCompatibilityTests.js.map +0 -1
  795. package/src/BasicCheckout.ts +0 -34
  796. package/src/Snapshot.ts +0 -363
  797. package/src/SnapshotUtilities.ts +0 -88
  798. package/src/anchored-edits/AnchorResolution.ts +0 -442
  799. package/src/anchored-edits/Factory.ts +0 -94
  800. package/src/anchored-edits/PersistedTypes.ts +0 -310
  801. package/src/anchored-edits/SharedTreeWithAnchors.ts +0 -200
  802. package/src/anchored-edits/TransactionWithAnchors.ts +0 -39
  803. package/src/anchored-edits/index.ts +0 -21
  804. package/src/default-edits/EditUtilities.ts +0 -220
  805. package/src/default-edits/Factory.ts +0 -94
  806. package/src/default-edits/SharedTree.ts +0 -174
  807. package/src/default-edits/Summary.ts +0 -44
  808. package/src/default-edits/Transaction.ts +0 -262
  809. package/src/default-edits/index.ts +0 -29
  810. package/src/generic/GenericEditUtilities.ts +0 -46
  811. package/src/generic/GenericSharedTree.ts +0 -593
  812. package/src/generic/GenericTransaction.ts +0 -194
  813. package/src/generic/PersistedTypes.ts +0 -221
  814. package/src/generic/Summary.ts +0 -113
  815. package/src/generic/index.ts +0 -41
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeView.tests.js","sourceRoot":"","sources":["../../src/test/TreeView.tests.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 { expect } from 'chai';\nimport { Definition } from '../Identifiers';\nimport { RevisionView } from '../RevisionView';\nimport { ChangeNode } from '../persisted-types';\nimport { refreshTestTree } from './utilities/TestUtilities';\nimport { TestNode } from './utilities/TestNode';\nimport { expectDefined } from './utilities/TestCommon';\n\ndescribe('TreeView', () => {\n\tconst testTree = refreshTestTree();\n\n\tdescribe('can compute deltas', () => {\n\t\tit('that are the same object', () => {\n\t\t\tconst view = testTree.view;\n\t\t\texpect(view.delta(view)).deep.equals({\n\t\t\t\tchanged: [],\n\t\t\t\tadded: [],\n\t\t\t\tremoved: [],\n\t\t\t});\n\t\t});\n\n\t\tit('that have the same tree', () => {\n\t\t\tconst viewA = RevisionView.fromTree<TestNode>(testTree);\n\t\t\tconst viewB = RevisionView.fromTree<TestNode>(testTree);\n\t\t\texpect(viewA.delta(viewB)).deep.equals({\n\t\t\t\tchanged: [],\n\t\t\t\tadded: [],\n\t\t\t\tremoved: [],\n\t\t\t});\n\t\t});\n\n\t\tit('with different root ids', () => {\n\t\t\tconst viewA = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));\n\t\t\tconst viewB = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));\n\t\t\texpect(() => viewA.delta(viewB)).to.throw('Delta can only be calculated between views that share a root');\n\t\t});\n\n\t\tit('with different subtrees', () => {\n\t\t\tconst rootId = testTree.generateNodeId();\n\n\t\t\tconst leafA = testTree.buildLeaf(testTree.generateNodeId());\n\t\t\tconst leafB = testTree.buildLeaf(testTree.generateNodeId());\n\n\t\t\tconst subtreeA = {\n\t\t\t\tidentifier: testTree.generateNodeId(),\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: { children: [leafA] },\n\t\t\t};\n\t\t\tconst subtreeB = {\n\t\t\t\tidentifier: testTree.generateNodeId(),\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: { children: [leafB] },\n\t\t\t};\n\n\t\t\tconst rootA: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: {\n\t\t\t\t\tchildren: [subtreeA],\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst rootB: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: {\n\t\t\t\t\tchildren: [subtreeB],\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst viewA = RevisionView.fromTree(rootA);\n\t\t\tconst viewB = RevisionView.fromTree(rootB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([rootId]);\n\t\t\texpect(delta.removed.length).equals(2);\n\t\t\texpect(delta.added.length).equals(2);\n\t\t\texpect(delta.removed).contains(subtreeA.identifier);\n\t\t\texpect(delta.removed).contains(leafA.identifier);\n\t\t\texpect(delta.added).contains(subtreeB.identifier);\n\t\t\texpect(delta.added).contains(leafB.identifier);\n\t\t});\n\n\t\tit('with different payloads', () => {\n\t\t\tconst rootId = testTree.generateNodeId();\n\t\t\tconst nodeA: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\tpayload: 'test1',\n\t\t\t\ttraits: {},\n\t\t\t};\n\t\t\tconst nodeB: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\tpayload: 'test2',\n\t\t\t\ttraits: {},\n\t\t\t};\n\n\t\t\tconst viewA = RevisionView.fromTree(nodeA);\n\t\t\tconst viewB = RevisionView.fromTree(nodeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([rootId]);\n\t\t\texpect(delta.removed).deep.equals([]);\n\t\t\texpect(delta.added).deep.equals([]);\n\t\t});\n\n\t\tit('after an insert', () => {\n\t\t\tconst viewA = testTree.view;\n\t\t\tconst insertedNode = testTree.buildLeaf(testTree.generateNodeId());\n\t\t\tconst treeB: ChangeNode = {\n\t\t\t\tidentifier: testTree.identifier,\n\t\t\t\tdefinition: testTree.definition,\n\t\t\t\ttraits: { ...testTree.traits, left: [insertedNode, testTree.left] },\n\t\t\t};\n\t\t\tconst viewB = RevisionView.fromTree(treeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([testTree.identifier]);\n\t\t\texpect(delta.removed).deep.equals([]);\n\t\t\texpect(delta.added).deep.equals([insertedNode.identifier]);\n\t\t});\n\n\t\tit('after a delete', () => {\n\t\t\tconst viewA = testTree.view;\n\t\t\tconst treeB: ChangeNode = {\n\t\t\t\tidentifier: testTree.identifier,\n\t\t\t\tdefinition: testTree.definition,\n\t\t\t\ttraits: { ...testTree.traits, left: [] },\n\t\t\t};\n\t\t\tconst viewB = RevisionView.fromTree(treeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([testTree.identifier]);\n\t\t\texpect(delta.removed).deep.equals([testTree.left.identifier]);\n\t\t\texpect(delta.added).deep.equals([]);\n\t\t});\n\n\t\tit('after a move', () => {\n\t\t\tconst viewA = testTree.view;\n\t\t\tconst treeB: ChangeNode = {\n\t\t\t\tidentifier: testTree.identifier,\n\t\t\t\tdefinition: testTree.definition,\n\t\t\t\ttraits: { ...testTree.traits, left: [], right: [testTree.right, testTree.left] },\n\t\t\t};\n\t\t\tconst viewB = RevisionView.fromTree(treeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([testTree.identifier]);\n\t\t\texpect(delta.removed).deep.equals([]);\n\t\t\texpect(delta.added).deep.equals([]);\n\t\t});\n\t});\n\n\tit('correctly returns node parentage', () => {\n\t\tconst view = testTree.view;\n\t\tfor (const node of view) {\n\t\t\tconst parentNode = view.tryGetParentViewNode(node.identifier);\n\t\t\tif (parentNode !== undefined) {\n\t\t\t\tconst parentage = expectDefined(node.parentage);\n\t\t\t\texpect(parentage.label).to.equal(view.getTraitLabel(node.identifier));\n\t\t\t\texpect(parentage.parent).to.equal(parentNode.identifier);\n\t\t\t}\n\t\t}\n\t});\n});\n"]}
@@ -2,9 +2,9 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { SharedTreeUndoRedoHandler } from '../default-edits';
5
+ import { UndoRedoStackManager } from '@fluidframework/undo-redo';
6
+ import { SharedTreeUndoRedoHandler } from '../UndoRedoHandler';
6
7
  import { runSharedTreeUndoRedoTestSuite } from './utilities/UndoRedoTests';
7
- import { UndoRedoStackManager } from './undoRedoStackManager';
8
8
  describe('SharedTreeUndoRedoHandler', () => {
9
9
  let undoRedoStack;
10
10
  let handler;
@@ -1 +1 @@
1
- {"version":3,"file":"UndoRedoHandler.tests.js","sourceRoot":"","sources":["../../src/test/UndoRedoHandler.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAc,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,IAAI,aAAmC,CAAC;IACxC,IAAI,OAAkC,CAAC;IAEvC,MAAM,eAAe,GAAG;QACvB,UAAU,EAAE,CAAC,KAAmB,EAAE,EAAE;YACnC,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC3C,OAAO,GAAG,IAAI,yBAAyB,CAAC,aAAa,CAAC,CAAC;YAEvD,kCAAkC;YAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,EAAE,CAAC,IAAgB,EAAE,MAAc,EAAE,EAAE;YAC1C,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,6DAA6D;YAC7D,OAAO,sCAAgD,CAAC;QACzD,CAAC;QACD,IAAI,EAAE,CAAC,IAAgB,EAAE,MAAc,EAAE,EAAE;YAC1C,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,6DAA6D;YAC7D,OAAO,sCAAgD,CAAC;QACzD,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACf,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACvC,CAAC;QACD,sEAAsE;QACtE,oBAAoB,EAAE,KAAK;KAC3B,CAAC;IAEF,8BAA8B,iBAAG,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,IAAK,eAAe,EAAG,CAAC;IAChG,8BAA8B,iBAAG,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,IAAK,eAAe,EAAG,CAAC;AACtG,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { EditId } from '../Identifiers';\nimport { SharedTree, SharedTreeUndoRedoHandler } from '../default-edits';\nimport { runSharedTreeUndoRedoTestSuite } from './utilities/UndoRedoTests';\nimport { UndoRedoStackManager } from './undoRedoStackManager';\n\ndescribe('SharedTreeUndoRedoHandler', () => {\n\tlet undoRedoStack: UndoRedoStackManager;\n\tlet handler: SharedTreeUndoRedoHandler;\n\n\tconst undoRedoOptions = {\n\t\tbeforeEach: (trees: SharedTree[]) => {\n\t\t\tundoRedoStack = new UndoRedoStackManager();\n\t\t\thandler = new SharedTreeUndoRedoHandler(undoRedoStack);\n\n\t\t\t// Attach each tree to the handler\n\t\t\ttrees.forEach((tree) => handler.attachTree(tree));\n\t\t},\n\t\tundo: (tree: SharedTree, editId: EditId) => {\n\t\t\tundoRedoStack.undoOperation();\n\n\t\t\t// Returns a dummy edit id in order to satisfy the interface.\n\t\t\treturn 'aa26ef18-76a9-4238-9c29-9b796d21ef5a' as EditId;\n\t\t},\n\t\tredo: (tree: SharedTree, editId: EditId) => {\n\t\t\tundoRedoStack.redoOperation();\n\n\t\t\t// Returns a dummy edit id in order to satisfy the interface.\n\t\t\treturn 'aa26ef18-76a9-4238-9c29-9b796d21ef5a' as EditId;\n\t\t},\n\t\tafterEdit: () => {\n\t\t\tundoRedoStack.closeCurrentOperation();\n\t\t},\n\t\t// The SharedTreeUndoRedoHandler does not support out of order revert.\n\t\ttestOutOfOrderRevert: false,\n\t};\n\n\trunSharedTreeUndoRedoTestSuite({ localMode: true, title: 'in local mode', ...undoRedoOptions });\n\trunSharedTreeUndoRedoTestSuite({ localMode: false, title: 'in connected mode', ...undoRedoOptions });\n});\n"]}
1
+ {"version":3,"file":"UndoRedoHandler.tests.js","sourceRoot":"","sources":["../../src/test/UndoRedoHandler.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAE3E,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,IAAI,aAAmC,CAAC;IACxC,IAAI,OAAkC,CAAC;IAEvC,MAAM,eAAe,GAAG;QACvB,UAAU,EAAE,CAAC,KAAmB,EAAE,EAAE;YACnC,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC3C,OAAO,GAAG,IAAI,yBAAyB,CAAC,aAAa,CAAC,CAAC;YAEvD,kCAAkC;YAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,EAAE,CAAC,IAAgB,EAAE,MAAc,EAAE,EAAE;YAC1C,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,6DAA6D;YAC7D,OAAO,sCAAgD,CAAC;QACzD,CAAC;QACD,IAAI,EAAE,CAAC,IAAgB,EAAE,MAAc,EAAE,EAAE;YAC1C,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,6DAA6D;YAC7D,OAAO,sCAAgD,CAAC;QACzD,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACf,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACvC,CAAC;QACD,sEAAsE;QACtE,oBAAoB,EAAE,KAAK;KAC3B,CAAC;IAEF,8BAA8B,iBAAG,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,IAAK,eAAe,EAAG,CAAC;IAChG,8BAA8B,iBAAG,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,IAAK,eAAe,EAAG,CAAC;AACtG,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { UndoRedoStackManager } from '@fluidframework/undo-redo';\nimport { EditId } from '../Identifiers';\nimport { SharedTree } from '../SharedTree';\nimport { SharedTreeUndoRedoHandler } from '../UndoRedoHandler';\nimport { runSharedTreeUndoRedoTestSuite } from './utilities/UndoRedoTests';\n\ndescribe('SharedTreeUndoRedoHandler', () => {\n\tlet undoRedoStack: UndoRedoStackManager;\n\tlet handler: SharedTreeUndoRedoHandler;\n\n\tconst undoRedoOptions = {\n\t\tbeforeEach: (trees: SharedTree[]) => {\n\t\t\tundoRedoStack = new UndoRedoStackManager();\n\t\t\thandler = new SharedTreeUndoRedoHandler(undoRedoStack);\n\n\t\t\t// Attach each tree to the handler\n\t\t\ttrees.forEach((tree) => handler.attachTree(tree));\n\t\t},\n\t\tundo: (tree: SharedTree, editId: EditId) => {\n\t\t\tundoRedoStack.undoOperation();\n\n\t\t\t// Returns a dummy edit id in order to satisfy the interface.\n\t\t\treturn 'aa26ef18-76a9-4238-9c29-9b796d21ef5a' as EditId;\n\t\t},\n\t\tredo: (tree: SharedTree, editId: EditId) => {\n\t\t\tundoRedoStack.redoOperation();\n\n\t\t\t// Returns a dummy edit id in order to satisfy the interface.\n\t\t\treturn 'aa26ef18-76a9-4238-9c29-9b796d21ef5a' as EditId;\n\t\t},\n\t\tafterEdit: () => {\n\t\t\tundoRedoStack.closeCurrentOperation();\n\t\t},\n\t\t// The SharedTreeUndoRedoHandler does not support out of order revert.\n\t\ttestOutOfOrderRevert: false,\n\t};\n\n\trunSharedTreeUndoRedoTestSuite({ localMode: true, title: 'in local mode', ...undoRedoOptions });\n\trunSharedTreeUndoRedoTestSuite({ localMode: false, title: 'in connected mode', ...undoRedoOptions });\n});\n"]}
@@ -3,53 +3,98 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { expect } from 'chai';
6
- import { newEdit, fullHistorySummarizer_0_1_0 } from '../generic';
7
- import { setTrait } from '../default-edits';
6
+ import { EditLog } from '../EditLog';
8
7
  import { assertNotUndefined } from '../Common';
9
8
  import { initialTree } from '../InitialTree';
10
- import { SharedTreeDiagnosticEvent } from '../generic/GenericSharedTree';
11
- import { createStableEdits, makeTestNode, setUpLocalServerTestSharedTree, testTrait } from './utilities/TestUtilities';
9
+ import { reservedIdCount, WriteFormat, editsPerChunk, } from '../persisted-types';
10
+ import { SharedTreeDiagnosticEvent } from '../EventTypes';
11
+ import { IdCompressor } from '../id-compressor';
12
+ import { createSessionId } from '../id-compressor/NumericUuid';
13
+ import { SharedTreeEncoder_0_1_1 } from '../SharedTreeEncoder';
14
+ import { CachingLogViewer } from '../LogViewer';
15
+ import { GenericTransaction, TransactionInternal } from '../TransactionInternal';
16
+ import { RevisionView } from '../RevisionView';
17
+ import { MutableStringInterner } from '../StringInterner';
18
+ import { applyNoop, createStableEdits, makeNodeIdContext, setUpLocalServerTestSharedTree, } from './utilities/TestUtilities';
19
+ import { SimpleTestTree } from './utilities/TestNode';
12
20
  describe('SharedTree history virtualization', () => {
13
21
  let sharedTree;
14
22
  let testObjectProvider;
23
+ let editChunksUploaded = 0;
24
+ const editCount = 250;
25
+ const expectedFullChunkCount = Math.floor(editCount / editsPerChunk);
15
26
  // Create a summary used to test catchup blobbing
16
- const summaryToCatchUp = {
17
- currentTree: initialTree,
18
- version: '0.0.2',
19
- sequencedEdits: createStableEdits(250),
20
- };
27
+ function createCatchUpSummary(numberOfEdits, payload) {
28
+ const idCompressor = new IdCompressor(createSessionId(), reservedIdCount);
29
+ const context = makeNodeIdContext(idCompressor);
30
+ const edits = createStableEdits(numberOfEdits, context, payload);
31
+ idCompressor.finalizeCreationRange(idCompressor.takeNextCreationRange());
32
+ const editLog = new EditLog();
33
+ for (let i = 0; i < edits.length; i++) {
34
+ editLog.addSequencedEdit(edits[i], { sequenceNumber: i + 1, referenceSequenceNumber: i });
35
+ }
36
+ const logViewer = new CachingLogViewer(editLog, RevisionView.fromTree(initialTree, context, true), undefined, true, undefined, undefined, (view) => new GenericTransaction(view, new TransactionInternal.Policy()));
37
+ const internedStrings = [
38
+ SimpleTestTree.definition,
39
+ SimpleTestTree.traitLabel,
40
+ SimpleTestTree.leftTraitLabel,
41
+ SimpleTestTree.rightTraitLabel,
42
+ ];
43
+ const interner = new MutableStringInterner(internedStrings);
44
+ const encoder = new SharedTreeEncoder_0_1_1(true);
45
+ return encoder.encodeSummary(editLog, logViewer.getRevisionViewInSession(Number.POSITIVE_INFINITY), context, context, interner, idCompressor.serialize(false));
46
+ }
21
47
  beforeEach(async () => {
22
48
  const testingComponents = await setUpLocalServerTestSharedTree({
23
49
  summarizeHistory: true,
50
+ writeFormat: WriteFormat.v0_1_1,
24
51
  });
25
52
  sharedTree = testingComponents.tree;
26
53
  testObjectProvider = testingComponents.testObjectProvider;
54
+ sharedTree.on(SharedTreeDiagnosticEvent.EditChunkUploaded, () => {
55
+ editChunksUploaded++;
56
+ });
27
57
  });
28
- afterEach(async () => {
29
- testObjectProvider.reset();
58
+ afterEach(() => {
59
+ editChunksUploaded = 0;
30
60
  });
61
+ // Replace sharedTree with one that writes summary format 0.0.2
62
+ const useSharedTreeSummaryv0_0_2 = async () => {
63
+ const testingComponents = await setUpLocalServerTestSharedTree({
64
+ summarizeHistory: true,
65
+ writeFormat: WriteFormat.v0_0_2,
66
+ });
67
+ sharedTree = testingComponents.tree;
68
+ testObjectProvider = testingComponents.testObjectProvider;
69
+ sharedTree.on(SharedTreeDiagnosticEvent.EditChunkUploaded, () => {
70
+ editChunksUploaded++;
71
+ });
72
+ };
31
73
  // Adds edits to sharedTree1 to make up the specified number of chunks.
32
- const processNewEditChunks = async (numberOfChunks = 1) => {
74
+ const addNewEditChunks = async (numberOfChunks = 1, additionalEdits = 0) => {
33
75
  const expectedEdits = [];
34
76
  // Add some edits to create a chunk with.
35
- while (expectedEdits.length < sharedTree.edits.editsPerChunk * numberOfChunks) {
36
- const edit = newEdit(setTrait(testTrait, [makeTestNode()]));
37
- expectedEdits.push(edit);
38
- sharedTree.processLocalEdit(edit);
77
+ while (expectedEdits.length < sharedTree.edits.editsPerChunk * numberOfChunks + additionalEdits) {
78
+ expectedEdits.push(applyNoop(sharedTree));
39
79
  }
80
+ // `ensureSynchronized` does not guarantee blob upload
81
+ await new Promise((resolve) => setImmediate(resolve));
40
82
  // Wait for the ops to to be submitted and processed across the containers.
41
83
  await testObjectProvider.ensureSynchronized();
42
84
  return expectedEdits;
43
85
  };
44
86
  it('can upload edit chunks and load chunks from handles', async () => {
45
- const expectedEdits = await processNewEditChunks();
46
- const summary = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);
87
+ const expectedEdits = await addNewEditChunks();
88
+ const summary = sharedTree.saveSummary();
47
89
  const { editHistory } = summary;
48
90
  const { editChunks } = assertNotUndefined(editHistory);
49
91
  expect(editChunks.length).to.equal(1);
50
92
  expect(typeof editChunks[0].chunk.get).to.equal('function');
51
93
  // Load a second tree using the summary
52
- const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({ testObjectProvider });
94
+ const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
95
+ testObjectProvider,
96
+ writeFormat: WriteFormat.v0_1_1,
97
+ });
53
98
  sharedTree2.loadSummary(summary);
54
99
  // Ensure chunked edit can be retrieved
55
100
  expect((await sharedTree2.edits.getEditAtIndex(2)).id).to.equal(expectedEdits[2].id);
@@ -61,12 +106,12 @@ describe('SharedTree history virtualization', () => {
61
106
  });
62
107
  // Wait for the op to to be submitted and processed across the containers.
63
108
  await testObjectProvider.ensureSynchronized();
64
- sharedTree.loadSummary(summaryToCatchUp);
109
+ sharedTree.loadSummary(createCatchUpSummary(250));
65
110
  await testObjectProvider.ensureSynchronized();
66
- expect(catchUpBlobsUploaded).to.equal(1);
67
- const { editHistory } = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);
111
+ expect(catchUpBlobsUploaded).to.equal(expectedFullChunkCount);
112
+ const { editHistory } = sharedTree.saveSummary();
68
113
  const { editChunks } = assertNotUndefined(editHistory);
69
- expect(editChunks.length).to.equal(1);
114
+ expect(editChunks.length).to.equal(expectedFullChunkCount + 1);
70
115
  expect(typeof editChunks[0].chunk.get).to.equal('function');
71
116
  });
72
117
  it('only uploads catchup blobs from one client', async () => {
@@ -74,10 +119,12 @@ describe('SharedTree history virtualization', () => {
74
119
  const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
75
120
  testObjectProvider,
76
121
  summarizeHistory: true,
122
+ writeFormat: WriteFormat.v0_1_1,
77
123
  });
78
124
  const { tree: sharedTree3 } = await setUpLocalServerTestSharedTree({
79
125
  testObjectProvider,
80
126
  summarizeHistory: true,
127
+ writeFormat: WriteFormat.v0_1_1,
81
128
  });
82
129
  let catchUpBlobsUploaded = 0;
83
130
  sharedTree.on(SharedTreeDiagnosticEvent.CatchUpBlobUploaded, () => {
@@ -92,51 +139,31 @@ describe('SharedTree history virtualization', () => {
92
139
  // Wait for processing again in case there are more no ops
93
140
  await testObjectProvider.ensureSynchronized();
94
141
  // Try to load summaries on all the trees
95
- sharedTree.loadSummary(summaryToCatchUp);
96
- sharedTree2.loadSummary(summaryToCatchUp);
97
- sharedTree3.loadSummary(summaryToCatchUp);
142
+ const summary = createCatchUpSummary(250);
143
+ sharedTree.loadSummary(summary);
144
+ sharedTree2.loadSummary(summary);
145
+ sharedTree3.loadSummary(summary);
98
146
  // `ensureSynchronized` does not guarantee blob upload
99
147
  await new Promise((resolve) => setImmediate(resolve));
100
148
  await testObjectProvider.ensureSynchronized();
101
- expect(catchUpBlobsUploaded).to.equal(1);
149
+ expect(catchUpBlobsUploaded).to.equal(expectedFullChunkCount);
102
150
  // Make sure the trees are still the same
103
151
  expect(sharedTree.equals(sharedTree2)).to.be.true;
104
152
  expect(sharedTree.equals(sharedTree3)).to.be.true;
105
153
  });
106
154
  it("doesn't upload incomplete chunks", async () => {
107
- const edit = newEdit(setTrait(testTrait, [makeTestNode()]));
108
- sharedTree.processLocalEdit(edit);
109
- // Wait for the op to to be submitted and processed across the containers.
110
- await testObjectProvider.ensureSynchronized();
111
- const { editHistory } = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);
112
- const { editChunks } = assertNotUndefined(editHistory);
113
- expect(editChunks.length).to.equal(1);
114
- // The chunk given by the summary should be an array of length 1.
115
- const { chunk } = editChunks[0];
116
- expect(Array.isArray(chunk)).to.be.true;
117
- expect(chunk.length).to.equal(1);
155
+ await addNewEditChunks(0, 50);
156
+ expect(editChunksUploaded).to.equal(0);
118
157
  });
119
158
  it('can upload full chunks with incomplete chunks in the edit log', async () => {
120
- const expectedEdits = [];
121
- // Add some edits to create a chunk with.
122
- while (expectedEdits.length < sharedTree.edits.editsPerChunk + 10) {
123
- const edit = newEdit(setTrait(testTrait, [makeTestNode()]));
124
- expectedEdits.push(edit);
125
- sharedTree.processLocalEdit(edit);
126
- }
127
- // Wait for the ops to to be submitted and processed across the containers.
128
- await testObjectProvider.ensureSynchronized();
129
- const { editHistory } = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);
130
- const { editChunks } = assertNotUndefined(editHistory);
131
- expect(editChunks.length).to.equal(2);
132
- expect(typeof editChunks[0].chunk.get).to.equal('function');
133
- expect(Array.isArray(editChunks[1].chunk)).to.be.true;
134
- expect(editChunks[1].chunk.length).to.equal(10);
159
+ testObjectProvider.logger.registerExpectedEvent({ eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' });
160
+ await addNewEditChunks(1, 50);
161
+ expect(editChunksUploaded).to.equal(1);
135
162
  });
136
163
  it('correctly saves handles and their corresponding starting revisions to the summary', async () => {
137
164
  testObjectProvider.logger.registerExpectedEvent({ eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' });
138
- await processNewEditChunks(4);
139
- const { editHistory } = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);
165
+ await addNewEditChunks(4);
166
+ const { editHistory } = sharedTree.saveSummary();
140
167
  const { editChunks } = assertNotUndefined(editHistory);
141
168
  expect(editChunks.length).to.equal(4);
142
169
  // Make sure each starting revision is correct and each chunk in the summary is a handle
@@ -150,20 +177,22 @@ describe('SharedTree history virtualization', () => {
150
177
  const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
151
178
  testObjectProvider,
152
179
  summarizeHistory: true,
180
+ writeFormat: WriteFormat.v0_1_1,
153
181
  });
154
182
  const { tree: sharedTree3 } = await setUpLocalServerTestSharedTree({
155
183
  testObjectProvider,
156
184
  summarizeHistory: true,
185
+ writeFormat: WriteFormat.v0_1_1,
157
186
  });
158
187
  // All shared trees should have no edits or chunks
159
- expect((_a = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView).editHistory) === null || _a === void 0 ? void 0 : _a.editChunks.length).to.equal(0);
160
- expect((_b = fullHistorySummarizer_0_1_0(sharedTree2.edits, sharedTree2.currentView).editHistory) === null || _b === void 0 ? void 0 : _b.editChunks.length).to.equal(0);
161
- expect((_c = fullHistorySummarizer_0_1_0(sharedTree3.edits, sharedTree3.currentView).editHistory) === null || _c === void 0 ? void 0 : _c.editChunks.length).to.equal(0);
162
- await processNewEditChunks();
188
+ expect((_a = sharedTree.saveSummary().editHistory) === null || _a === void 0 ? void 0 : _a.editChunks.length).to.equal(0);
189
+ expect((_b = sharedTree2.saveSummary().editHistory) === null || _b === void 0 ? void 0 : _b.editChunks.length).to.equal(0);
190
+ expect((_c = sharedTree3.saveSummary().editHistory) === null || _c === void 0 ? void 0 : _c.editChunks.length).to.equal(0);
191
+ await addNewEditChunks();
163
192
  // All shared trees should have the new handle
164
- const sharedTreeSummary = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);
165
- const sharedTree2Summary = fullHistorySummarizer_0_1_0(sharedTree2.edits, sharedTree2.currentView);
166
- const sharedTree3Summary = fullHistorySummarizer_0_1_0(sharedTree3.edits, sharedTree3.currentView);
193
+ const sharedTreeSummary = sharedTree.saveSummary();
194
+ const sharedTree2Summary = sharedTree2.saveSummary();
195
+ const sharedTree3Summary = sharedTree3.saveSummary();
167
196
  const sharedTreeChunk = assertNotUndefined(sharedTreeSummary.editHistory).editChunks[0].chunk;
168
197
  const sharedTree2Chunk = assertNotUndefined(sharedTree2Summary.editHistory).editChunks[0].chunk;
169
198
  const sharedTree3Chunk = assertNotUndefined(sharedTree3Summary.editHistory).editChunks[0].chunk;
@@ -177,5 +206,61 @@ describe('SharedTree history virtualization', () => {
177
206
  expect(sharedTreeHandleRoute).to.equal(sharedTree2HandleRoute);
178
207
  expect(sharedTree2HandleRoute).to.equal(sharedTree3HandleRoute);
179
208
  });
209
+ it('does not cause misaligned chunks', async () => {
210
+ testObjectProvider.logger.registerExpectedEvent({ eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' });
211
+ await addNewEditChunks(1, 50);
212
+ const summary = sharedTree.saveSummary();
213
+ // Connect another client
214
+ const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
215
+ testObjectProvider,
216
+ summarizeHistory: true,
217
+ writeFormat: WriteFormat.v0_1_1,
218
+ });
219
+ let unexpectedHistoryChunk = false;
220
+ sharedTree2.on(SharedTreeDiagnosticEvent.UnexpectedHistoryChunk, () => {
221
+ unexpectedHistoryChunk = true;
222
+ });
223
+ sharedTree2.loadSummary(summary);
224
+ // Finish off the incomplete chunk
225
+ await addNewEditChunks();
226
+ expect(unexpectedHistoryChunk).to.be.false;
227
+ });
228
+ it('does not cause misaligned chunks for format version 0.0.2', async () => {
229
+ await useSharedTreeSummaryv0_0_2();
230
+ testObjectProvider.logger.registerExpectedEvent({ eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' }, { eventName: 'fluid:telemetry:Batching:LengthTooBig' });
231
+ // Add enough edits for a chunk and a half
232
+ await addNewEditChunks(1, 50);
233
+ // Connect another client
234
+ const { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({
235
+ testObjectProvider,
236
+ summarizeHistory: true,
237
+ writeFormat: WriteFormat.v0_0_2,
238
+ });
239
+ let unexpectedHistoryChunk = false;
240
+ sharedTree2.on(SharedTreeDiagnosticEvent.UnexpectedHistoryChunk, () => {
241
+ unexpectedHistoryChunk = true;
242
+ });
243
+ sharedTree2.loadSummary(sharedTree.saveSummary());
244
+ // Finish off the incomplete chunk
245
+ await addNewEditChunks();
246
+ expect(unexpectedHistoryChunk).to.be.false;
247
+ });
248
+ it('does not upload blobs larger than 4MB', async () => {
249
+ testObjectProvider.logger.registerExpectedEvent({
250
+ eventName: 'fluid:telemetry:FluidDataStoreRuntime:SharedTree:EditChunkUploadFailure',
251
+ });
252
+ const numberOfEdits = editsPerChunk;
253
+ const fourMegas = 2 ** 22;
254
+ // Without the 1.1, we would generate 100 edits of size roughly 40kb here, but not all of them end up in the first edit chunk
255
+ // due to some setup edits.
256
+ // So we'd barely land within the 4MB limit. Bumping each payload size by 10% is enough to account for this.
257
+ const bigPayload = 'a'.repeat(Math.ceil((1.1 * fourMegas) / numberOfEdits));
258
+ const fakeSummary = createCatchUpSummary(numberOfEdits, () => bigPayload);
259
+ sharedTree.loadSummary(fakeSummary);
260
+ // `ensureSynchronized` does not guarantee blob upload
261
+ await new Promise((resolve) => setImmediate(resolve));
262
+ await testObjectProvider.ensureSynchronized();
263
+ expect(editChunksUploaded).to.equal(0);
264
+ });
180
265
  });
181
266
  //# sourceMappingURL=Virtualization.tests.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Virtualization.tests.js","sourceRoot":"","sources":["../../src/test/Virtualization.tests.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 { expect } from 'chai';\nimport { TestObjectProvider } from '@fluidframework/test-utils';\nimport { EditHandle, EditLog } from '../EditLog';\nimport { Edit, EditWithoutId, newEdit, fullHistorySummarizer_0_1_0 } from '../generic';\nimport { SharedTree, setTrait, Change } from '../default-edits';\nimport { assertNotUndefined } from '../Common';\nimport { SharedTreeSummary_0_0_2 } from '../SummaryBackCompatibility';\nimport { initialTree } from '../InitialTree';\nimport { SharedTreeDiagnosticEvent } from '../generic/GenericSharedTree';\nimport { createStableEdits, makeTestNode, setUpLocalServerTestSharedTree, testTrait } from './utilities/TestUtilities';\n\ndescribe('SharedTree history virtualization', () => {\n\tlet sharedTree: SharedTree;\n\tlet testObjectProvider: TestObjectProvider;\n\n\t// Create a summary used to test catchup blobbing\n\tconst summaryToCatchUp: SharedTreeSummary_0_0_2<Change> = {\n\t\tcurrentTree: initialTree,\n\t\tversion: '0.0.2',\n\t\tsequencedEdits: createStableEdits(250),\n\t};\n\n\tbeforeEach(async () => {\n\t\tconst testingComponents = await setUpLocalServerTestSharedTree({\n\t\t\tsummarizeHistory: true,\n\t\t});\n\t\tsharedTree = testingComponents.tree;\n\t\ttestObjectProvider = testingComponents.testObjectProvider;\n\t});\n\n\tafterEach(async () => {\n\t\ttestObjectProvider.reset();\n\t});\n\n\t// Adds edits to sharedTree1 to make up the specified number of chunks.\n\tconst processNewEditChunks = async (numberOfChunks = 1) => {\n\t\tconst expectedEdits: Edit<Change>[] = [];\n\n\t\t// Add some edits to create a chunk with.\n\t\twhile (expectedEdits.length < (sharedTree.edits as EditLog<Change>).editsPerChunk * numberOfChunks) {\n\t\t\tconst edit = newEdit(setTrait(testTrait, [makeTestNode()]));\n\t\t\texpectedEdits.push(edit);\n\t\t\tsharedTree.processLocalEdit(edit);\n\t\t}\n\n\t\t// Wait for the ops to to be submitted and processed across the containers.\n\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\treturn expectedEdits;\n\t};\n\n\tit('can upload edit chunks and load chunks from handles', async () => {\n\t\tconst expectedEdits: Edit<Change>[] = await processNewEditChunks();\n\n\t\tconst summary = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);\n\n\t\tconst { editHistory } = summary;\n\t\tconst { editChunks } = assertNotUndefined(editHistory);\n\t\texpect(editChunks.length).to.equal(1);\n\t\texpect(typeof (editChunks[0].chunk as EditHandle).get).to.equal('function');\n\n\t\t// Load a second tree using the summary\n\t\tconst { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({ testObjectProvider });\n\n\t\tsharedTree2.loadSummary(summary);\n\n\t\t// Ensure chunked edit can be retrieved\n\t\texpect((await sharedTree2.edits.getEditAtIndex(2)).id).to.equal(expectedEdits[2].id);\n\t});\n\n\tit('can upload catchup blobs', async () => {\n\t\tlet catchUpBlobsUploaded = 0;\n\t\tsharedTree.on(SharedTreeDiagnosticEvent.CatchUpBlobUploaded, () => {\n\t\t\tcatchUpBlobsUploaded++;\n\t\t});\n\n\t\t// Wait for the op to to be submitted and processed across the containers.\n\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\tsharedTree.loadSummary(summaryToCatchUp);\n\n\t\tawait testObjectProvider.ensureSynchronized();\n\t\texpect(catchUpBlobsUploaded).to.equal(1);\n\n\t\tconst { editHistory } = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);\n\t\tconst { editChunks } = assertNotUndefined(editHistory);\n\t\texpect(editChunks.length).to.equal(1);\n\t\texpect(typeof (editChunks[0].chunk as EditHandle).get).to.equal('function');\n\t});\n\n\tit('only uploads catchup blobs from one client', async () => {\n\t\t// Create more connected trees\n\t\tconst { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\tsummarizeHistory: true,\n\t\t});\n\t\tconst { tree: sharedTree3 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\tsummarizeHistory: true,\n\t\t});\n\n\t\tlet catchUpBlobsUploaded = 0;\n\t\tsharedTree.on(SharedTreeDiagnosticEvent.CatchUpBlobUploaded, () => {\n\t\t\tcatchUpBlobsUploaded++;\n\t\t});\n\t\tsharedTree2.on(SharedTreeDiagnosticEvent.CatchUpBlobUploaded, () => {\n\t\t\tcatchUpBlobsUploaded++;\n\t\t});\n\t\tsharedTree3.on(SharedTreeDiagnosticEvent.CatchUpBlobUploaded, () => {\n\t\t\tcatchUpBlobsUploaded++;\n\t\t});\n\n\t\t// Wait for processing again in case there are more no ops\n\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\t// Try to load summaries on all the trees\n\t\tsharedTree.loadSummary(summaryToCatchUp);\n\t\tsharedTree2.loadSummary(summaryToCatchUp);\n\t\tsharedTree3.loadSummary(summaryToCatchUp);\n\n\t\t// `ensureSynchronized` does not guarantee blob upload\n\t\tawait new Promise((resolve) => setImmediate(resolve));\n\t\tawait testObjectProvider.ensureSynchronized();\n\t\texpect(catchUpBlobsUploaded).to.equal(1);\n\n\t\t// Make sure the trees are still the same\n\t\texpect(sharedTree.equals(sharedTree2)).to.be.true;\n\t\texpect(sharedTree.equals(sharedTree3)).to.be.true;\n\t});\n\n\tit(\"doesn't upload incomplete chunks\", async () => {\n\t\tconst edit = newEdit(setTrait(testTrait, [makeTestNode()]));\n\t\tsharedTree.processLocalEdit(edit);\n\n\t\t// Wait for the op to to be submitted and processed across the containers.\n\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\tconst { editHistory } = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);\n\t\tconst { editChunks } = assertNotUndefined(editHistory);\n\t\texpect(editChunks.length).to.equal(1);\n\n\t\t// The chunk given by the summary should be an array of length 1.\n\t\tconst { chunk } = editChunks[0];\n\t\texpect(Array.isArray(chunk)).to.be.true;\n\t\texpect((chunk as EditWithoutId<Change>[]).length).to.equal(1);\n\t});\n\n\tit('can upload full chunks with incomplete chunks in the edit log', async () => {\n\t\tconst expectedEdits: Edit<Change>[] = [];\n\n\t\t// Add some edits to create a chunk with.\n\t\twhile (expectedEdits.length < (sharedTree.edits as EditLog<Change>).editsPerChunk + 10) {\n\t\t\tconst edit = newEdit(setTrait(testTrait, [makeTestNode()]));\n\t\t\texpectedEdits.push(edit);\n\t\t\tsharedTree.processLocalEdit(edit);\n\t\t}\n\n\t\t// Wait for the ops to to be submitted and processed across the containers.\n\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\tconst { editHistory } = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);\n\t\tconst { editChunks } = assertNotUndefined(editHistory);\n\t\texpect(editChunks.length).to.equal(2);\n\t\texpect(typeof (editChunks[0].chunk as EditHandle).get).to.equal('function');\n\t\texpect(Array.isArray(editChunks[1].chunk)).to.be.true;\n\t\texpect((editChunks[1].chunk as EditWithoutId<Change>[]).length).to.equal(10);\n\t});\n\n\tit('correctly saves handles and their corresponding starting revisions to the summary', async () => {\n\t\ttestObjectProvider.logger.registerExpectedEvent(\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' },\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' }\n\t\t);\n\t\tawait processNewEditChunks(4);\n\n\t\tconst { editHistory } = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);\n\t\tconst { editChunks } = assertNotUndefined(editHistory);\n\t\texpect(editChunks.length).to.equal(4);\n\n\t\t// Make sure each starting revision is correct and each chunk in the summary is a handle\n\t\teditChunks.forEach(({ startRevision, chunk }, index) => {\n\t\t\texpect(startRevision).to.equal(index * (sharedTree.edits as EditLog<Change>).editsPerChunk);\n\t\t\texpect(typeof (chunk as EditHandle).get).to.equal('function');\n\t\t});\n\t});\n\n\tit('sends handle ops to connected clients when chunks are uploaded', async () => {\n\t\tconst { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\tsummarizeHistory: true,\n\t\t});\n\t\tconst { tree: sharedTree3 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\tsummarizeHistory: true,\n\t\t});\n\n\t\t// All shared trees should have no edits or chunks\n\t\texpect(\n\t\t\tfullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView).editHistory?.editChunks.length\n\t\t).to.equal(0);\n\t\texpect(\n\t\t\tfullHistorySummarizer_0_1_0(sharedTree2.edits, sharedTree2.currentView).editHistory?.editChunks.length\n\t\t).to.equal(0);\n\t\texpect(\n\t\t\tfullHistorySummarizer_0_1_0(sharedTree3.edits, sharedTree3.currentView).editHistory?.editChunks.length\n\t\t).to.equal(0);\n\n\t\tawait processNewEditChunks();\n\n\t\t// All shared trees should have the new handle\n\t\tconst sharedTreeSummary = fullHistorySummarizer_0_1_0(sharedTree.edits, sharedTree.currentView);\n\t\tconst sharedTree2Summary = fullHistorySummarizer_0_1_0(sharedTree2.edits, sharedTree2.currentView);\n\t\tconst sharedTree3Summary = fullHistorySummarizer_0_1_0(sharedTree3.edits, sharedTree3.currentView);\n\t\tconst sharedTreeChunk = assertNotUndefined(sharedTreeSummary.editHistory).editChunks[0].chunk;\n\t\tconst sharedTree2Chunk = assertNotUndefined(sharedTree2Summary.editHistory).editChunks[0].chunk;\n\t\tconst sharedTree3Chunk = assertNotUndefined(sharedTree3Summary.editHistory).editChunks[0].chunk;\n\n\t\t// Make sure the chunk of the first shared tree is a handle\n\t\texpect(typeof (sharedTreeChunk as EditHandle).get).to.equal('function');\n\n\t\tconst sharedTreeHandleRoute = (sharedTreeChunk as any).absolutePath;\n\t\tconst sharedTree2HandleRoute = (sharedTree2Chunk as any).absolutePath;\n\t\tconst sharedTree3HandleRoute = (sharedTree3Chunk as any).absolutePath;\n\n\t\t// Make sure the handle route of the first shared tree is a string\n\t\texpect(typeof sharedTreeHandleRoute).to.equal('string');\n\n\t\texpect(sharedTreeHandleRoute).to.equal(sharedTree2HandleRoute);\n\t\texpect(sharedTree2HandleRoute).to.equal(sharedTree3HandleRoute);\n\t});\n});\n"]}
1
+ {"version":3,"file":"Virtualization.tests.js","sourceRoot":"","sources":["../../src/test/Virtualization.tests.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 { expect } from 'chai';\nimport { TestObjectProvider } from '@fluidframework/test-utils';\nimport { EditLog } from '../EditLog';\nimport { assertNotUndefined } from '../Common';\nimport { initialTree } from '../InitialTree';\nimport { SharedTree } from '../SharedTree';\nimport {\n\tChangeInternal,\n\tEdit,\n\tPayload,\n\treservedIdCount,\n\tFluidEditHandle,\n\tSharedTreeSummary,\n\tWriteFormat,\n\teditsPerChunk,\n} from '../persisted-types';\nimport { SharedTreeDiagnosticEvent } from '../EventTypes';\nimport { IdCompressor } from '../id-compressor';\nimport { createSessionId } from '../id-compressor/NumericUuid';\nimport { SharedTreeEncoder_0_1_1 } from '../SharedTreeEncoder';\nimport { CachingLogViewer } from '../LogViewer';\nimport { GenericTransaction, TransactionInternal } from '../TransactionInternal';\nimport { RevisionView } from '../RevisionView';\nimport { MutableStringInterner } from '../StringInterner';\nimport {\n\tapplyNoop,\n\tcreateStableEdits,\n\tmakeNodeIdContext,\n\tsetUpLocalServerTestSharedTree,\n} from './utilities/TestUtilities';\nimport { SimpleTestTree } from './utilities/TestNode';\n\ndescribe('SharedTree history virtualization', () => {\n\tlet sharedTree: SharedTree;\n\tlet testObjectProvider: TestObjectProvider;\n\tlet editChunksUploaded = 0;\n\tconst editCount = 250;\n\tconst expectedFullChunkCount = Math.floor(editCount / editsPerChunk);\n\n\t// Create a summary used to test catchup blobbing\n\tfunction createCatchUpSummary(numberOfEdits: number, payload?: (i: number) => Payload): SharedTreeSummary {\n\t\tconst idCompressor = new IdCompressor(createSessionId(), reservedIdCount);\n\t\tconst context = makeNodeIdContext(idCompressor);\n\t\tconst edits = createStableEdits(numberOfEdits, context, payload);\n\t\tidCompressor.finalizeCreationRange(idCompressor.takeNextCreationRange());\n\t\tconst editLog = new EditLog<ChangeInternal>();\n\t\tfor (let i = 0; i < edits.length; i++) {\n\t\t\teditLog.addSequencedEdit(edits[i], { sequenceNumber: i + 1, referenceSequenceNumber: i });\n\t\t}\n\t\tconst logViewer = new CachingLogViewer(\n\t\t\teditLog,\n\t\t\tRevisionView.fromTree(initialTree, context, true),\n\t\t\tundefined,\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\t(view) => new GenericTransaction(view, new TransactionInternal.Policy())\n\t\t);\n\n\t\tconst internedStrings = [\n\t\t\tSimpleTestTree.definition,\n\t\t\tSimpleTestTree.traitLabel,\n\t\t\tSimpleTestTree.leftTraitLabel,\n\t\t\tSimpleTestTree.rightTraitLabel,\n\t\t];\n\t\tconst interner = new MutableStringInterner(internedStrings);\n\t\tconst encoder = new SharedTreeEncoder_0_1_1(true);\n\t\treturn encoder.encodeSummary(\n\t\t\teditLog,\n\t\t\tlogViewer.getRevisionViewInSession(Number.POSITIVE_INFINITY),\n\t\t\tcontext,\n\t\t\tcontext,\n\t\t\tinterner,\n\t\t\tidCompressor.serialize(false)\n\t\t);\n\t}\n\n\tbeforeEach(async () => {\n\t\tconst testingComponents = await setUpLocalServerTestSharedTree({\n\t\t\tsummarizeHistory: true,\n\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t});\n\t\tsharedTree = testingComponents.tree;\n\t\ttestObjectProvider = testingComponents.testObjectProvider;\n\n\t\tsharedTree.on(SharedTreeDiagnosticEvent.EditChunkUploaded, () => {\n\t\t\teditChunksUploaded++;\n\t\t});\n\t});\n\n\tafterEach(() => {\n\t\teditChunksUploaded = 0;\n\t});\n\n\t// Replace sharedTree with one that writes summary format 0.0.2\n\tconst useSharedTreeSummaryv0_0_2 = async () => {\n\t\tconst testingComponents = await setUpLocalServerTestSharedTree({\n\t\t\tsummarizeHistory: true,\n\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t});\n\t\tsharedTree = testingComponents.tree;\n\t\ttestObjectProvider = testingComponents.testObjectProvider;\n\n\t\tsharedTree.on(SharedTreeDiagnosticEvent.EditChunkUploaded, () => {\n\t\t\teditChunksUploaded++;\n\t\t});\n\t};\n\n\t// Adds edits to sharedTree1 to make up the specified number of chunks.\n\tconst addNewEditChunks = async (numberOfChunks = 1, additionalEdits = 0) => {\n\t\tconst expectedEdits: Edit<unknown>[] = [];\n\n\t\t// Add some edits to create a chunk with.\n\t\twhile (expectedEdits.length < (sharedTree.edits as EditLog).editsPerChunk * numberOfChunks + additionalEdits) {\n\t\t\texpectedEdits.push(applyNoop(sharedTree));\n\t\t}\n\n\t\t// `ensureSynchronized` does not guarantee blob upload\n\t\tawait new Promise((resolve) => setImmediate(resolve));\n\t\t// Wait for the ops to to be submitted and processed across the containers.\n\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\treturn expectedEdits;\n\t};\n\n\tit('can upload edit chunks and load chunks from handles', async () => {\n\t\tconst expectedEdits: Edit<unknown>[] = await addNewEditChunks();\n\n\t\tconst summary = sharedTree.saveSummary() as SharedTreeSummary;\n\n\t\tconst { editHistory } = summary;\n\t\tconst { editChunks } = assertNotUndefined(editHistory);\n\t\texpect(editChunks.length).to.equal(1);\n\t\texpect(typeof (editChunks[0].chunk as FluidEditHandle).get).to.equal('function');\n\n\t\t// Load a second tree using the summary\n\t\tconst { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t});\n\n\t\tsharedTree2.loadSummary(summary);\n\n\t\t// Ensure chunked edit can be retrieved\n\t\texpect((await sharedTree2.edits.getEditAtIndex(2)).id).to.equal(expectedEdits[2].id);\n\t});\n\n\tit('can upload catchup blobs', async () => {\n\t\tlet catchUpBlobsUploaded = 0;\n\t\tsharedTree.on(SharedTreeDiagnosticEvent.CatchUpBlobUploaded, () => {\n\t\t\tcatchUpBlobsUploaded++;\n\t\t});\n\n\t\t// Wait for the op to to be submitted and processed across the containers.\n\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\tsharedTree.loadSummary(createCatchUpSummary(250));\n\n\t\tawait testObjectProvider.ensureSynchronized();\n\t\texpect(catchUpBlobsUploaded).to.equal(expectedFullChunkCount);\n\n\t\tconst { editHistory } = sharedTree.saveSummary() as SharedTreeSummary;\n\t\tconst { editChunks } = assertNotUndefined(editHistory);\n\t\texpect(editChunks.length).to.equal(expectedFullChunkCount + 1);\n\t\texpect(typeof (editChunks[0].chunk as FluidEditHandle).get).to.equal('function');\n\t});\n\n\tit('only uploads catchup blobs from one client', async () => {\n\t\t// Create more connected trees\n\t\tconst { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\tsummarizeHistory: true,\n\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t});\n\t\tconst { tree: sharedTree3 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\tsummarizeHistory: true,\n\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t});\n\n\t\tlet catchUpBlobsUploaded = 0;\n\t\tsharedTree.on(SharedTreeDiagnosticEvent.CatchUpBlobUploaded, () => {\n\t\t\tcatchUpBlobsUploaded++;\n\t\t});\n\t\tsharedTree2.on(SharedTreeDiagnosticEvent.CatchUpBlobUploaded, () => {\n\t\t\tcatchUpBlobsUploaded++;\n\t\t});\n\t\tsharedTree3.on(SharedTreeDiagnosticEvent.CatchUpBlobUploaded, () => {\n\t\t\tcatchUpBlobsUploaded++;\n\t\t});\n\n\t\t// Wait for processing again in case there are more no ops\n\t\tawait testObjectProvider.ensureSynchronized();\n\n\t\t// Try to load summaries on all the trees\n\t\tconst summary = createCatchUpSummary(250);\n\t\tsharedTree.loadSummary(summary);\n\t\tsharedTree2.loadSummary(summary);\n\t\tsharedTree3.loadSummary(summary);\n\n\t\t// `ensureSynchronized` does not guarantee blob upload\n\t\tawait new Promise((resolve) => setImmediate(resolve));\n\t\tawait testObjectProvider.ensureSynchronized();\n\t\texpect(catchUpBlobsUploaded).to.equal(expectedFullChunkCount);\n\n\t\t// Make sure the trees are still the same\n\t\texpect(sharedTree.equals(sharedTree2)).to.be.true;\n\t\texpect(sharedTree.equals(sharedTree3)).to.be.true;\n\t});\n\n\tit(\"doesn't upload incomplete chunks\", async () => {\n\t\tawait addNewEditChunks(0, 50);\n\t\texpect(editChunksUploaded).to.equal(0);\n\t});\n\n\tit('can upload full chunks with incomplete chunks in the edit log', async () => {\n\t\ttestObjectProvider.logger.registerExpectedEvent(\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' },\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' }\n\t\t);\n\t\tawait addNewEditChunks(1, 50);\n\t\texpect(editChunksUploaded).to.equal(1);\n\t});\n\n\tit('correctly saves handles and their corresponding starting revisions to the summary', async () => {\n\t\ttestObjectProvider.logger.registerExpectedEvent(\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' },\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' }\n\t\t);\n\t\tawait addNewEditChunks(4);\n\n\t\tconst { editHistory } = sharedTree.saveSummary() as SharedTreeSummary;\n\t\tconst { editChunks } = assertNotUndefined(editHistory);\n\t\texpect(editChunks.length).to.equal(4);\n\n\t\t// Make sure each starting revision is correct and each chunk in the summary is a handle\n\t\teditChunks.forEach(({ startRevision, chunk }, index) => {\n\t\t\texpect(startRevision).to.equal(index * (sharedTree.edits as EditLog).editsPerChunk);\n\t\t\texpect(typeof (chunk as FluidEditHandle).get).to.equal('function');\n\t\t});\n\t});\n\n\tit('sends handle ops to connected clients when chunks are uploaded', async () => {\n\t\tconst { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\tsummarizeHistory: true,\n\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t});\n\t\tconst { tree: sharedTree3 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\tsummarizeHistory: true,\n\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t});\n\n\t\t// All shared trees should have no edits or chunks\n\t\texpect((sharedTree.saveSummary() as SharedTreeSummary).editHistory?.editChunks.length).to.equal(0);\n\t\texpect((sharedTree2.saveSummary() as SharedTreeSummary).editHistory?.editChunks.length).to.equal(0);\n\t\texpect((sharedTree3.saveSummary() as SharedTreeSummary).editHistory?.editChunks.length).to.equal(0);\n\n\t\tawait addNewEditChunks();\n\n\t\t// All shared trees should have the new handle\n\t\tconst sharedTreeSummary = sharedTree.saveSummary() as SharedTreeSummary;\n\t\tconst sharedTree2Summary = sharedTree2.saveSummary() as SharedTreeSummary;\n\t\tconst sharedTree3Summary = sharedTree3.saveSummary() as SharedTreeSummary;\n\t\tconst sharedTreeChunk = assertNotUndefined(sharedTreeSummary.editHistory).editChunks[0].chunk;\n\t\tconst sharedTree2Chunk = assertNotUndefined(sharedTree2Summary.editHistory).editChunks[0].chunk;\n\t\tconst sharedTree3Chunk = assertNotUndefined(sharedTree3Summary.editHistory).editChunks[0].chunk;\n\n\t\t// Make sure the chunk of the first shared tree is a handle\n\t\texpect(typeof (sharedTreeChunk as FluidEditHandle).get).to.equal('function');\n\n\t\tconst sharedTreeHandleRoute = (sharedTreeChunk as any).absolutePath;\n\t\tconst sharedTree2HandleRoute = (sharedTree2Chunk as any).absolutePath;\n\t\tconst sharedTree3HandleRoute = (sharedTree3Chunk as any).absolutePath;\n\n\t\t// Make sure the handle route of the first shared tree is a string\n\t\texpect(typeof sharedTreeHandleRoute).to.equal('string');\n\n\t\texpect(sharedTreeHandleRoute).to.equal(sharedTree2HandleRoute);\n\t\texpect(sharedTree2HandleRoute).to.equal(sharedTree3HandleRoute);\n\t});\n\n\tit('does not cause misaligned chunks', async () => {\n\t\ttestObjectProvider.logger.registerExpectedEvent(\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' },\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' },\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' }\n\t\t);\n\t\tawait addNewEditChunks(1, 50);\n\n\t\tconst summary = sharedTree.saveSummary();\n\n\t\t// Connect another client\n\t\tconst { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\tsummarizeHistory: true,\n\t\t\twriteFormat: WriteFormat.v0_1_1,\n\t\t});\n\n\t\tlet unexpectedHistoryChunk = false;\n\t\tsharedTree2.on(SharedTreeDiagnosticEvent.UnexpectedHistoryChunk, () => {\n\t\t\tunexpectedHistoryChunk = true;\n\t\t});\n\n\t\tsharedTree2.loadSummary(summary);\n\n\t\t// Finish off the incomplete chunk\n\t\tawait addNewEditChunks();\n\n\t\texpect(unexpectedHistoryChunk).to.be.false;\n\t});\n\n\tit('does not cause misaligned chunks for format version 0.0.2', async () => {\n\t\tawait useSharedTreeSummaryv0_0_2();\n\t\ttestObjectProvider.logger.registerExpectedEvent(\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' },\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' },\n\t\t\t{ eventName: 'fluid:telemetry:Batching:LengthTooBig' }\n\t\t);\n\n\t\t// Add enough edits for a chunk and a half\n\t\tawait addNewEditChunks(1, 50);\n\n\t\t// Connect another client\n\t\tconst { tree: sharedTree2 } = await setUpLocalServerTestSharedTree({\n\t\t\ttestObjectProvider,\n\t\t\tsummarizeHistory: true,\n\t\t\twriteFormat: WriteFormat.v0_0_2,\n\t\t});\n\n\t\tlet unexpectedHistoryChunk = false;\n\t\tsharedTree2.on(SharedTreeDiagnosticEvent.UnexpectedHistoryChunk, () => {\n\t\t\tunexpectedHistoryChunk = true;\n\t\t});\n\n\t\tsharedTree2.loadSummary(sharedTree.saveSummary());\n\n\t\t// Finish off the incomplete chunk\n\t\tawait addNewEditChunks();\n\n\t\texpect(unexpectedHistoryChunk).to.be.false;\n\t});\n\n\tit('does not upload blobs larger than 4MB', async () => {\n\t\ttestObjectProvider.logger.registerExpectedEvent({\n\t\t\teventName: 'fluid:telemetry:FluidDataStoreRuntime:SharedTree:EditChunkUploadFailure',\n\t\t});\n\t\tconst numberOfEdits = editsPerChunk;\n\t\tconst fourMegas = 2 ** 22;\n\t\t// Without the 1.1, we would generate 100 edits of size roughly 40kb here, but not all of them end up in the first edit chunk\n\t\t// due to some setup edits.\n\t\t// So we'd barely land within the 4MB limit. Bumping each payload size by 10% is enough to account for this.\n\t\tconst bigPayload = 'a'.repeat(Math.ceil((1.1 * fourMegas) / numberOfEdits));\n\t\tconst fakeSummary = createCatchUpSummary(numberOfEdits, () => bigPayload);\n\t\tsharedTree.loadSummary(fakeSummary);\n\t\t// `ensureSynchronized` does not guarantee blob upload\n\t\tawait new Promise((resolve) => setImmediate(resolve));\n\t\tawait testObjectProvider.ensureSynchronized();\n\t\texpect(editChunksUploaded).to.equal(0);\n\t});\n});\n"]}
@@ -0,0 +1,19 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { AsyncGenerator, Operation, OperationGenerationConfig } from './Types';
6
+ export declare function makeOpGenerator(passedConfig: OperationGenerationConfig): AsyncGenerator<Operation, undefined>;
7
+ /**
8
+ * Higher-order generator operator which creates a new generator producing the first `n` elements of `generator`.
9
+ */
10
+ export declare function take<T, TAdditionalState>(n: number, generator: AsyncGenerator<T, TAdditionalState>): AsyncGenerator<T, TAdditionalState>;
11
+ /**
12
+ * @returns a deterministic generator that always returns the items of `contents` in order.
13
+ */
14
+ export declare function generatorFromArray<T, TAdditionalState>(contents: T[]): AsyncGenerator<T, TAdditionalState>;
15
+ /**
16
+ * Higher-order generator operator which exhausts each input generator sequentially before moving on to the next.
17
+ */
18
+ export declare function chain<T, TAdditionalState>(...generators: AsyncGenerator<T, TAdditionalState>[]): AsyncGenerator<T, TAdditionalState>;
19
+ //# sourceMappingURL=Generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Generators.d.ts","sourceRoot":"","sources":["../../../src/test/fuzz/Generators.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,EAQN,cAAc,EAGd,SAAS,EACT,yBAAyB,EAGzB,MAAM,SAAS,CAAC;AAmWjB,wBAAgB,eAAe,CAAC,YAAY,EAAE,yBAAyB,GAAG,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CA2B7G;AAsED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,gBAAgB,EACvC,CAAC,EAAE,MAAM,EACT,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAC5C,cAAc,CAAC,CAAC,EAAE,gBAAgB,CAAC,CASrC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAS1G;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,gBAAgB,EACxC,GAAG,UAAU,EAAE,cAAc,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,GAClD,cAAc,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAcrC"}