@fluid-experimental/tree 0.58.2001 → 0.59.1000-61898

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 +1074 -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 +36 -0
  122. package/dist/TreeCompressor.d.ts.map +1 -0
  123. package/dist/TreeCompressor.js +137 -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 +218 -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 +1069 -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 +36 -0
  309. package/lib/TreeCompressor.d.ts.map +1 -0
  310. package/lib/TreeCompressor.js +133 -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 +214 -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 +176 -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 +217 -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 +370 -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 +22 -17
  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 +1458 -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 +213 -0
  568. package/src/TreeNodeHandle.ts +19 -32
  569. package/src/TreeView.ts +322 -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,176 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { expect } from 'chai';
6
+ import { RevisionView } from '../RevisionView';
7
+ import { refreshTestTree } from './utilities/TestUtilities';
8
+ import { expectDefined } from './utilities/TestCommon';
9
+ describe('TreeView', () => {
10
+ const testTree = refreshTestTree();
11
+ describe('can compute deltas', () => {
12
+ it('that are the same object', () => {
13
+ const view = testTree.view;
14
+ expect(view.delta(view)).deep.equals({
15
+ changed: [],
16
+ added: [],
17
+ removed: [],
18
+ });
19
+ });
20
+ it('that have the same tree', () => {
21
+ const viewA = RevisionView.fromTree(testTree);
22
+ const viewB = RevisionView.fromTree(testTree);
23
+ expect(viewA.delta(viewB)).deep.equals({
24
+ changed: [],
25
+ added: [],
26
+ removed: [],
27
+ });
28
+ });
29
+ it('with different root ids', () => {
30
+ const viewA = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));
31
+ const viewB = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));
32
+ expect(() => viewA.delta(viewB)).to.throw('Delta can only be calculated between views that share a root');
33
+ });
34
+ it('with different subtrees', () => {
35
+ const rootId = testTree.generateNodeId();
36
+ const leafA = testTree.buildLeaf(testTree.generateNodeId());
37
+ const leafB = testTree.buildLeaf(testTree.generateNodeId());
38
+ const subtreeA = {
39
+ identifier: testTree.generateNodeId(),
40
+ definition: 'node',
41
+ traits: { children: [leafA] },
42
+ };
43
+ const subtreeB = {
44
+ identifier: testTree.generateNodeId(),
45
+ definition: 'node',
46
+ traits: { children: [leafB] },
47
+ };
48
+ const rootA = {
49
+ identifier: rootId,
50
+ definition: 'node',
51
+ traits: {
52
+ children: [subtreeA],
53
+ },
54
+ };
55
+ const rootB = {
56
+ identifier: rootId,
57
+ definition: 'node',
58
+ traits: {
59
+ children: [subtreeB],
60
+ },
61
+ };
62
+ const viewA = RevisionView.fromTree(rootA);
63
+ const viewB = RevisionView.fromTree(rootB);
64
+ const delta = viewA.delta(viewB);
65
+ expect(delta.changed).deep.equals([rootId]);
66
+ expect(delta.removed.length).equals(2);
67
+ expect(delta.added.length).equals(2);
68
+ expect(delta.removed).contains(subtreeA.identifier);
69
+ expect(delta.removed).contains(leafA.identifier);
70
+ expect(delta.added).contains(subtreeB.identifier);
71
+ expect(delta.added).contains(leafB.identifier);
72
+ });
73
+ it('with different payloads', () => {
74
+ const rootId = testTree.generateNodeId();
75
+ const nodeA = {
76
+ identifier: rootId,
77
+ definition: 'node',
78
+ payload: 'test1',
79
+ traits: {},
80
+ };
81
+ const nodeB = {
82
+ identifier: rootId,
83
+ definition: 'node',
84
+ payload: 'test2',
85
+ traits: {},
86
+ };
87
+ const viewA = RevisionView.fromTree(nodeA);
88
+ const viewB = RevisionView.fromTree(nodeB);
89
+ const delta = viewA.delta(viewB);
90
+ expect(delta.changed).deep.equals([rootId]);
91
+ expect(delta.removed).deep.equals([]);
92
+ expect(delta.added).deep.equals([]);
93
+ });
94
+ it('after an insert', () => {
95
+ const viewA = testTree.view;
96
+ const insertedNode = testTree.buildLeaf(testTree.generateNodeId());
97
+ const treeB = {
98
+ identifier: testTree.identifier,
99
+ definition: testTree.definition,
100
+ traits: Object.assign(Object.assign({}, testTree.traits), { left: [insertedNode, testTree.left] }),
101
+ };
102
+ const viewB = RevisionView.fromTree(treeB);
103
+ const delta = viewA.delta(viewB);
104
+ expect(delta.changed).deep.equals([testTree.identifier]);
105
+ expect(delta.removed).deep.equals([]);
106
+ expect(delta.added).deep.equals([insertedNode.identifier]);
107
+ });
108
+ it('after a delete', () => {
109
+ const viewA = testTree.view;
110
+ const treeB = {
111
+ identifier: testTree.identifier,
112
+ definition: testTree.definition,
113
+ traits: Object.assign(Object.assign({}, testTree.traits), { left: [] }),
114
+ };
115
+ const viewB = RevisionView.fromTree(treeB);
116
+ const delta = viewA.delta(viewB);
117
+ expect(delta.changed).deep.equals([testTree.identifier]);
118
+ expect(delta.removed).deep.equals([testTree.left.identifier]);
119
+ expect(delta.added).deep.equals([]);
120
+ });
121
+ it('after a move', () => {
122
+ const viewA = testTree.view;
123
+ const treeB = {
124
+ identifier: testTree.identifier,
125
+ definition: testTree.definition,
126
+ traits: Object.assign(Object.assign({}, testTree.traits), { left: [], right: [testTree.right, testTree.left] }),
127
+ };
128
+ const viewB = RevisionView.fromTree(treeB);
129
+ const delta = viewA.delta(viewB);
130
+ expect(delta.changed).deep.equals([testTree.identifier]);
131
+ expect(delta.removed).deep.equals([]);
132
+ expect(delta.added).deep.equals([]);
133
+ });
134
+ });
135
+ it('correctly returns node parentage', () => {
136
+ const view = testTree.view;
137
+ for (const node of view) {
138
+ const parentNode = view.tryGetParentViewNode(node.identifier);
139
+ if (parentNode !== undefined) {
140
+ const parentage = expectDefined(node.parentage);
141
+ expect(parentage.label).to.equal(view.getTraitLabel(node.identifier));
142
+ expect(parentage.parent).to.equal(parentNode.identifier);
143
+ }
144
+ }
145
+ });
146
+ // Regression test for the issue fixed in #9824
147
+ it('can be iterated in a consistent order', () => {
148
+ const [id1, id2, id3] = Array.from({ length: 3 }).map(() => testTree.generateNodeId());
149
+ const label1 = 'traitLabelA';
150
+ const label2 = 'traitLabelB';
151
+ const { definition } = testTree;
152
+ const tree1 = {
153
+ identifier: id1,
154
+ definition,
155
+ traits: {
156
+ [label1]: [{ identifier: id2, definition, traits: {} }],
157
+ [label2]: [{ identifier: id3, definition, traits: {} }],
158
+ },
159
+ };
160
+ // Like tree1, but defined with the labels in the opposite order and with different node ids under each trait.
161
+ const tree2 = {
162
+ identifier: id1,
163
+ definition,
164
+ traits: {
165
+ [label2]: [{ identifier: id2, definition, traits: {} }],
166
+ [label1]: [{ identifier: id3, definition, traits: {} }],
167
+ },
168
+ };
169
+ const view1 = RevisionView.fromTree(tree1);
170
+ const view2 = RevisionView.fromTree(tree2);
171
+ expect(Array.from(view1).map((node) => node.identifier)).to.deep.equal([id1, id2, id3]);
172
+ // Child iteration should be sorted on trait labels.
173
+ expect(Array.from(view2).map((node) => node.identifier)).to.deep.equal([id1, id3, id2]);
174
+ });
175
+ });
176
+ //# sourceMappingURL=TreeView.tests.js.map
@@ -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, TraitLabel } 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\t// Regression test for the issue fixed in #9824\n\tit('can be iterated in a consistent order', () => {\n\t\tconst [id1, id2, id3] = Array.from({ length: 3 }).map(() => testTree.generateNodeId());\n\t\tconst label1 = 'traitLabelA' as TraitLabel;\n\t\tconst label2 = 'traitLabelB' as TraitLabel;\n\t\tconst { definition } = testTree;\n\t\tconst tree1: ChangeNode = {\n\t\t\tidentifier: id1,\n\t\t\tdefinition,\n\t\t\ttraits: {\n\t\t\t\t[label1]: [{ identifier: id2, definition, traits: {} }],\n\t\t\t\t[label2]: [{ identifier: id3, definition, traits: {} }],\n\t\t\t},\n\t\t};\n\t\t// Like tree1, but defined with the labels in the opposite order and with different node ids under each trait.\n\t\tconst tree2: ChangeNode = {\n\t\t\tidentifier: id1,\n\t\t\tdefinition,\n\t\t\ttraits: {\n\t\t\t\t[label2]: [{ identifier: id2, definition, traits: {} }],\n\t\t\t\t[label1]: [{ identifier: id3, definition, traits: {} }],\n\t\t\t},\n\t\t};\n\t\tconst view1 = RevisionView.fromTree(tree1);\n\t\tconst view2 = RevisionView.fromTree(tree2);\n\t\texpect(Array.from(view1).map((node) => node.identifier)).to.deep.equal([id1, id2, id3]);\n\t\t// Child iteration should be sorted on trait labels.\n\t\texpect(Array.from(view2).map((node) => node.identifier)).to.deep.equal([id1, id3, id2]);\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