@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
@@ -5,73 +5,126 @@
5
5
  import { expect } from 'chai';
6
6
  import { v4 as uuidv4 } from 'uuid';
7
7
  import { EditLog } from '../EditLog';
8
- import { Change, ConstraintEffect, Insert, StablePlace, StableRange, Transaction } from '../default-edits';
9
- import { CachingLogViewer } from '../LogViewer';
10
- import { Snapshot } from '../Snapshot';
11
- import { assert, noop } from '../Common';
12
- import { newEdit, EditStatus } from '../generic';
13
- import { initialSnapshot, left, leftTraitLabel, leftTraitLocation, makeEmptyNode, right, rightTraitLocation, simpleTestTree, simpleTreeSnapshot, } from './utilities/TestUtilities';
8
+ import { CachingLogViewer, } from '../LogViewer';
9
+ import { assert, copyPropertyIfDefined } from '../Common';
10
+ import { initialTree } from '../InitialTree';
11
+ import { ChangeInternal, ConstraintEffect, EditStatus, StablePlaceInternal, } from '../persisted-types';
12
+ import { areRevisionViewsSemanticallyEqual, newEdit } from '../EditUtilities';
13
+ import { RevisionView } from '../RevisionView';
14
+ import { TransactionInternal } from '../TransactionInternal';
15
+ import { StableRange } from '../ChangeTypes';
16
+ import { expectDefined } from './utilities/TestCommon';
17
+ import { buildLeaf } from './utilities/TestNode';
14
18
  import { MockTransaction } from './utilities/MockTransaction';
15
- const simpleTreeNoTraits = Object.assign(Object.assign({}, simpleTestTree), { traits: {} });
16
- const simpleSnapshotNoTraits = Snapshot.fromTree(simpleTreeNoTraits);
17
- function getSimpleLog(numEdits = 2) {
19
+ import { refreshTestTree, testTraitLabel } from './utilities/TestUtilities';
20
+ /**
21
+ * Creates an {@link EditLog} and accompanying {@link RevisionView} with pre-existing edits.
22
+ *
23
+ * @remarks Intended to be used with {@link getSimpleLogBaseView}
24
+ * @param testTree - Test tree to work on
25
+ * @param numEdits - The number of edits to make to the base tree
26
+ */
27
+ function getTestTreeLog(testTree) {
28
+ const log = new EditLog();
29
+ log.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeaf(testTree.left.identifier)], StablePlaceInternal.atStartOf(testTree.left.traitLocation))), { sequenceNumber: 1, referenceSequenceNumber: 0 });
30
+ log.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeaf(testTree.right.identifier)], StablePlaceInternal.atStartOf(testTree.right.traitLocation))), { sequenceNumber: 2, referenceSequenceNumber: 1 });
31
+ return log;
32
+ }
33
+ function getLogWithNumEdits(nodeIdContext, numEdits) {
18
34
  const log = new EditLog();
19
35
  for (let i = 0; i < numEdits; i++) {
20
- log.addSequencedEdit(newEdit(i % 2 === 0
21
- ? Insert.create([left], StablePlace.atStartOf(leftTraitLocation))
22
- : Insert.create([right], StablePlace.atStartOf(rightTraitLocation))), { sequenceNumber: i + 1, referenceSequenceNumber: i });
36
+ log.addSequencedEdit(newEdit(ChangeInternal.insertTree([buildLeaf(nodeIdContext.generateNodeId())], StablePlaceInternal.atStartOf({
37
+ label: testTraitLabel,
38
+ parent: nodeIdContext.convertToNodeId(initialTree.identifier),
39
+ }))), {
40
+ sequenceNumber: i + 1,
41
+ referenceSequenceNumber: i,
42
+ });
23
43
  }
24
44
  return log;
25
45
  }
26
- function getSimpleLogWithLocalEdits(numSequencedEdits = 2) {
27
- const logWithLocalEdits = getSimpleLog(numSequencedEdits);
28
- logWithLocalEdits.addLocalEdit(newEdit(Insert.create([makeEmptyNode()], StablePlace.atEndOf(leftTraitLocation))));
29
- logWithLocalEdits.addLocalEdit(newEdit(Insert.create([makeEmptyNode()], StablePlace.atEndOf(rightTraitLocation))));
30
- logWithLocalEdits.addLocalEdit(newEdit(Insert.create([makeEmptyNode()], StablePlace.atStartOf(leftTraitLocation))));
46
+ /**
47
+ * Get a base view for a log created with {@link getTestTreeLog}.
48
+ * This can then be used to construct a {@link LogViewer} for that log.
49
+ *
50
+ * @param testTree - Test tree to work from
51
+ */
52
+ function getSimpleLogBaseView(testTree) {
53
+ const node = { definition: testTree.definition, identifier: testTree.identifier, traits: {} };
54
+ copyPropertyIfDefined(testTree, node, 'payload');
55
+ return RevisionView.fromTree(node);
56
+ }
57
+ function getSimpleLogWithLocalEdits(testTree) {
58
+ const logWithLocalEdits = getTestTreeLog(testTree);
59
+ logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.left.traitLocation))));
60
+ logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))));
61
+ logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.left.traitLocation))));
31
62
  return logWithLocalEdits;
32
63
  }
33
- function getSnapshotsForLog(log, baseSnapshot) {
34
- const snapshots = [baseSnapshot];
64
+ function getViewsForLog(log, baseView) {
65
+ const views = [baseView];
35
66
  for (let i = 0; i < log.length; i++) {
36
67
  const edit = log.getEditInSessionAtIndex(i);
37
- snapshots.push(new Transaction(snapshots[i]).applyChanges(edit.changes).view);
68
+ const result = TransactionInternal.factory(views[i]).applyChanges(edit.changes).close();
69
+ if (result.status === EditStatus.Applied) {
70
+ views.push(result.after);
71
+ }
72
+ else {
73
+ expect.fail('edit failed to apply');
74
+ }
38
75
  }
39
- return snapshots;
76
+ return views;
40
77
  }
41
78
  function runLogViewerCorrectnessTests(viewerCreator) {
42
79
  return describe('LogViewer', () => {
43
- const log = getSimpleLog();
80
+ let simpleLog;
81
+ let simpleLogBaseView;
82
+ let simpleLogInitialView;
83
+ const testTree = refreshTestTree(undefined, (t) => {
84
+ simpleLogBaseView = getSimpleLogBaseView(t);
85
+ simpleLog = getTestTreeLog(t);
86
+ simpleLogInitialView = t.view;
87
+ });
44
88
  it('generates initialTree by default for the 0th revision', () => {
45
- const viewer = viewerCreator(new EditLog());
46
- const headSnapshot = viewer.getSnapshotInSession(0);
47
- expect(headSnapshot.equals(initialSnapshot)).to.be.true;
89
+ const viewer = viewerCreator(new EditLog(), simpleLogBaseView);
90
+ const headView = viewer.getRevisionViewInSession(0);
91
+ expect(headView.equals(expectDefined(RevisionView.fromTree(initialTree, testTree))));
48
92
  });
49
93
  it('can be constructed from a non-empty EditLog', () => {
50
- const viewer = viewerCreator(log, simpleSnapshotNoTraits);
51
- const headSnapshot = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
52
- expect(headSnapshot.equals(simpleTreeSnapshot)).to.be.true;
94
+ const viewer = viewerCreator(simpleLog, simpleLogBaseView);
95
+ const headView = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
96
+ expect(areRevisionViewsSemanticallyEqual(headView, testTree, simpleLogInitialView, testTree));
97
+ expect(headView.equals(simpleLogInitialView)).to.be.true;
53
98
  });
54
- it('can generate all snapshots for an EditLog', () => {
55
- const viewer = viewerCreator(log, simpleSnapshotNoTraits);
56
- const initialSnapshot = viewer.getSnapshotInSession(0);
57
- expect(initialSnapshot.equals(simpleSnapshotNoTraits)).to.be.true;
58
- const leftOnlySnapshot = viewer.getSnapshotInSession(1);
59
- expect(leftOnlySnapshot.equals(Snapshot.fromTree(Object.assign(Object.assign({}, simpleTestTree), { traits: { [leftTraitLabel]: [left] } })))).to.be.true;
60
- const fullTreeSnapshot = viewer.getSnapshotInSession(2);
61
- expect(fullTreeSnapshot.equals(simpleTreeSnapshot)).to.be.true;
99
+ it('can generate all revision views for an EditLog', () => {
100
+ const baseView = expectDefined(RevisionView.fromTree(initialTree, testTree));
101
+ const numNodes = 10;
102
+ const viewer = viewerCreator(getLogWithNumEdits(testTree, numNodes), baseView);
103
+ const initialRevision = viewer.getRevisionViewInSession(0);
104
+ expect(initialRevision.equals(baseView)).to.be.true;
105
+ expect(initialRevision.size).to.equal(1);
106
+ const oneNodeView = viewer.getRevisionViewInSession(1);
107
+ const testTrait = {
108
+ label: testTraitLabel,
109
+ parent: testTree.convertToNodeId(initialTree.identifier),
110
+ };
111
+ expect(oneNodeView.getTrait(testTrait).length).to.equal(1);
112
+ const twoNodeView = viewer.getRevisionViewInSession(2);
113
+ expect(twoNodeView.getTrait(testTrait).length).to.equal(2);
114
+ const finalView = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
115
+ expect(finalView.getTrait(testTrait).length).to.equal(numNodes);
62
116
  });
63
- it('produces correct snapshots when the log is mutated', () => {
64
- const simpleLog = getSimpleLog();
117
+ it('produces correct revision views when the log is mutated', () => {
65
118
  const mutableLog = new EditLog();
66
- const viewer = viewerCreator(mutableLog, simpleSnapshotNoTraits);
67
- const snapshotsForLog = getSnapshotsForLog(simpleLog, simpleSnapshotNoTraits);
119
+ const viewer = viewerCreator(mutableLog, simpleLogBaseView);
120
+ const viewsForLog = getViewsForLog(simpleLog, simpleLogBaseView);
68
121
  // This test takes an empty log (A) and a log with edits in it (B), and adds the edits from B to A.
69
- // After each addition, the test code will iterate from [0, length_of_A] and get a snapshot for each revision via LogViewer
70
- // and assert that none of the snapshots differ from those created via pure Transaction APIs.
122
+ // After each addition, the test code will iterate from [0, length_of_A] and get a view for each revision via LogViewer
123
+ // and assert that none of the views differ from those created via pure Transaction APIs.
71
124
  for (let i = 0; i <= simpleLog.length; i++) {
72
125
  for (let j = 0; j <= mutableLog.length; j++) {
73
- const viewerSnapshot = viewer.getSnapshotInSession(j);
74
- expect(viewerSnapshot.equals(snapshotsForLog[j])).to.be.true;
126
+ const viewerView = viewer.getRevisionViewInSession(j);
127
+ expect(viewerView.equals(viewsForLog[j])).to.be.true;
75
128
  }
76
129
  // Revisions are from [0, simpleLog.length], edits are at indices [0, simpleLog.length)
77
130
  if (i < simpleLog.length) {
@@ -80,95 +133,106 @@ function runLogViewerCorrectnessTests(viewerCreator) {
80
133
  }
81
134
  }
82
135
  });
83
- it('produces correct snapshots when local edits are shifted in the log due to sequenced edits being added', () => {
84
- function getSnapshotsFromViewer(viewer, lastRevision) {
85
- const snapshots = [];
136
+ it('produces correct revision views when local edits are shifted in the log due to sequenced edits being added', () => {
137
+ function getViewsFromViewer(viewer, lastRevision) {
138
+ const views = [];
86
139
  for (let i = 0; i <= lastRevision; i++) {
87
- snapshots.push(viewer.getSnapshotInSession(i));
140
+ views.push(viewer.getRevisionViewInSession(i));
88
141
  }
89
- return snapshots;
142
+ return views;
90
143
  }
91
- function expectSnapshotsAreEqual(log, viewer) {
92
- const snapshotsForLog = getSnapshotsForLog(log, simpleSnapshotNoTraits);
93
- const snapshotsForViewer = getSnapshotsFromViewer(viewer, log.length);
94
- expect(snapshotsForLog.length).to.equal(snapshotsForViewer.length);
95
- for (let i = 0; i < snapshotsForLog.length; i++) {
96
- expect(snapshotsForLog[i].equals(snapshotsForViewer[i])).to.be.true;
144
+ function expectViewsAreEqual(log, viewer) {
145
+ const viewsForLog = getViewsForLog(log, simpleLogBaseView);
146
+ const viewsForViewer = getViewsFromViewer(viewer, log.length);
147
+ expect(viewsForLog.length).to.equal(viewsForViewer.length);
148
+ for (let i = 0; i < viewsForLog.length; i++) {
149
+ expect(viewsForLog[i].equals(viewsForViewer[i])).to.be.true;
97
150
  }
98
151
  }
99
- const logWithLocalEdits = getSimpleLogWithLocalEdits();
100
- const viewer = viewerCreator(logWithLocalEdits, simpleSnapshotNoTraits);
101
- expectSnapshotsAreEqual(logWithLocalEdits, viewer);
152
+ const logWithLocalEdits = getSimpleLogWithLocalEdits(testTree);
153
+ const viewer = viewerCreator(logWithLocalEdits, simpleLogBaseView);
154
+ expectViewsAreEqual(logWithLocalEdits, viewer);
102
155
  let seqNumber = 1;
103
- // Sequence the existing local edits and ensure viewer generates the correct snapshots
156
+ // Sequence the existing local edits and ensure viewer generates the correct views
104
157
  while (logWithLocalEdits.numberOfLocalEdits > 0) {
105
158
  // Add a remote sequenced edit
106
- logWithLocalEdits.addSequencedEdit(newEdit(Insert.create([makeEmptyNode()], StablePlace.atStartOf(rightTraitLocation))), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
159
+ logWithLocalEdits.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atStartOf(testTree.right.traitLocation))), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
107
160
  ++seqNumber;
108
- expectSnapshotsAreEqual(logWithLocalEdits, viewer);
161
+ expectViewsAreEqual(logWithLocalEdits, viewer);
109
162
  // Sequence a local edit
110
163
  logWithLocalEdits.addSequencedEdit(logWithLocalEdits.getEditInSessionAtIndex(logWithLocalEdits.numberOfSequencedEdits), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
111
164
  ++seqNumber;
112
- expectSnapshotsAreEqual(logWithLocalEdits, viewer);
165
+ expectViewsAreEqual(logWithLocalEdits, viewer);
113
166
  }
114
167
  });
115
168
  });
116
169
  }
117
170
  describe('CachingLogViewer', () => {
118
- function getMockLogger(callback) {
119
- return { send: callback !== null && callback !== void 0 ? callback : noop };
120
- }
121
- function getCachingLogViewerAssumeAppliedEdits(log, baseSnapshot, editCallback, logger, knownRevisions) {
122
- return new CachingLogViewer(log, baseSnapshot, knownRevisions === null || knownRevisions === void 0 ? void 0 : knownRevisions.map((pair) => [pair[0], { snapshot: pair[1], result: EditStatus.Applied }]),
123
- /* expensiveValidation */ true, editCallback, logger !== null && logger !== void 0 ? logger : getMockLogger(), Transaction.factory, log.numberOfSequencedEdits);
171
+ // TODO: Dedupe? shared hook for getting all of this stuff?
172
+ let simpleLog;
173
+ let simpleLogBaseView;
174
+ let simpleLogInitialView;
175
+ // An arbitrary revision view which can be used to check to see if it gets used when provided as a cached value.
176
+ let arbitraryRevisionView;
177
+ const testTree = refreshTestTree(undefined, (t) => {
178
+ simpleLogBaseView = getSimpleLogBaseView(t);
179
+ simpleLog = getTestTreeLog(t);
180
+ simpleLogInitialView = t.view;
181
+ arbitraryRevisionView = RevisionView.fromTree(t.buildLeaf(t.generateNodeId()));
182
+ });
183
+ function getCachingLogViewerAssumeAppliedEdits(log, baseView, editStatusCallback, sequencedEditResultCallback, knownRevisions) {
184
+ return new CachingLogViewer(log, baseView, knownRevisions === null || knownRevisions === void 0 ? void 0 : knownRevisions.map((pair) => [pair[0], { view: pair[1], result: EditStatus.Applied }]),
185
+ /* expensiveValidation */ true, editStatusCallback, sequencedEditResultCallback, TransactionInternal.factory, log.numberOfSequencedEdits);
124
186
  }
125
187
  runLogViewerCorrectnessTests(getCachingLogViewerAssumeAppliedEdits);
126
- it('detects non-integer revisions when setting snapshots', async () => {
127
- expect(() => getCachingLogViewerAssumeAppliedEdits(getSimpleLog(), simpleSnapshotNoTraits, undefined, undefined, [
128
- [2.4, simpleTreeSnapshot],
129
- ])).to.throw('revision must be an integer');
188
+ it('detects non-integer revisions when setting revision views', async () => {
189
+ expect(() => {
190
+ return getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, undefined, undefined, [
191
+ [2.4, simpleLogInitialView],
192
+ ]);
193
+ }).to.throw('revision must be an integer');
130
194
  });
131
- it('detects out-of-bounds revisions when setting snapshots', async () => {
132
- expect(() => getCachingLogViewerAssumeAppliedEdits(getSimpleLog(), simpleSnapshotNoTraits, undefined, undefined, [
133
- [1000, simpleTreeSnapshot],
134
- ])).to.throw('revision must correspond to the result of a SequencedEdit');
195
+ it('detects out-of-bounds revisions when setting revision views', async () => {
196
+ expect(() => {
197
+ return getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, undefined, undefined, [
198
+ [1000, simpleLogInitialView],
199
+ ]);
200
+ }).to.throw('revision must correspond to the result of a SequencedEdit');
135
201
  });
136
202
  it('can be created with known revisions', async () => {
137
- const log = getSimpleLog();
138
- const snapshots = getSnapshotsForLog(log, simpleSnapshotNoTraits);
139
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, undefined, undefined, Array.from(snapshots.keys()).map((revision) => [revision, snapshots[revision]]));
140
- for (let i = log.length; i >= 0; i--) {
141
- const snapshot = snapshots[i];
142
- expect(viewer.getSnapshotInSession(i).equals(snapshot)).to.be.true;
203
+ const views = getViewsForLog(simpleLog, simpleLogBaseView);
204
+ const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, undefined, undefined, Array.from(views.keys()).map((revision) => [revision, views[revision]]));
205
+ for (let i = simpleLog.length; i >= 0; i--) {
206
+ expect(viewer.getRevisionViewInSession(i).equals(views[i])).to.be.true;
143
207
  }
144
208
  });
145
- async function requestAllSnapshots(viewer, log) {
209
+ async function requestAllRevisionViews(viewer, log) {
146
210
  for (let i = 0; i <= log.length; i++) {
147
- await viewer.getSnapshot(i);
211
+ await viewer.getRevisionView(i);
148
212
  }
149
213
  }
150
- it('caches snapshots for sequenced edits', async () => {
151
- const log = getSimpleLog();
214
+ it('caches revision views for sequenced edits', async () => {
152
215
  let editsProcessed = 0;
153
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, () => editsProcessed++);
154
- assert(log.length < CachingLogViewer.sequencedCacheSizeMax);
155
- await requestAllSnapshots(viewer, log);
156
- expect(editsProcessed).to.equal(log.length);
157
- // Ask for every snapshot; no edit application should occur, since the snapshots will be cached.
158
- for (let i = 0; i <= log.length; i++) {
159
- await viewer.getSnapshot(i);
216
+ const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, () => editsProcessed++);
217
+ assert(simpleLog.length < CachingLogViewer.sequencedCacheSizeMax);
218
+ await requestAllRevisionViews(viewer, simpleLog);
219
+ expect(editsProcessed).to.equal(simpleLog.length);
220
+ // Ask for every view; no edit application should occur, since the views will be cached.
221
+ for (let i = 0; i <= simpleLog.length; i++) {
222
+ await viewer.getRevisionView(i);
160
223
  }
161
- expect(editsProcessed).to.equal(log.length);
224
+ expect(editsProcessed).to.equal(simpleLog.length);
162
225
  });
163
226
  it('caches edit results for sequenced edits', async () => {
164
- const log = getSimpleLog(2);
165
227
  // Add an invalid edit
166
- log.addSequencedEdit(newEdit([Change.constraint(StableRange.only(left), ConstraintEffect.InvalidAndDiscard, undefined, 0)]), { sequenceNumber: 3, referenceSequenceNumber: 2, minimumSequenceNumber: 2 });
228
+ simpleLog.addSequencedEdit(newEdit([
229
+ ChangeInternal.constraint(StableRange.only(testTree.left), ConstraintEffect.InvalidAndDiscard, undefined, 0),
230
+ ]), { sequenceNumber: 3, referenceSequenceNumber: 2, minimumSequenceNumber: 2 });
167
231
  let editsProcessed = 0;
168
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, () => editsProcessed++);
169
- assert(log.length < CachingLogViewer.sequencedCacheSizeMax);
170
- await requestAllSnapshots(viewer, log);
171
- expect(editsProcessed).to.equal(log.length);
232
+ const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, () => editsProcessed++);
233
+ assert(simpleLog.length < CachingLogViewer.sequencedCacheSizeMax);
234
+ await requestAllRevisionViews(viewer, simpleLog);
235
+ expect(editsProcessed).to.equal(simpleLog.length);
172
236
  expect((await viewer.getEditResult(0)).status).equals(undefined);
173
237
  expect((await viewer.getEditResult(1)).status).equals(EditStatus.Applied);
174
238
  expect((await viewer.getEditResult(2)).status).equals(EditStatus.Applied);
@@ -178,202 +242,220 @@ describe('CachingLogViewer', () => {
178
242
  expect(viewer.getEditResultInSession(2).status).equals(EditStatus.Applied);
179
243
  expect(viewer.getEditResultInSession(3).status).equals(EditStatus.Invalid);
180
244
  });
181
- it('evicts least recently set cached snapshots for sequenced edits', async () => {
245
+ it('caches the highest revision', async () => {
246
+ const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView);
247
+ expect(viewer.highestRevisionCached()).to.be.false;
248
+ await requestAllRevisionViews(viewer, simpleLog);
249
+ expect(viewer.highestRevisionCached()).to.be.true;
250
+ simpleLog.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))));
251
+ simpleLog.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))), {
252
+ sequenceNumber: 3,
253
+ referenceSequenceNumber: 2,
254
+ minimumSequenceNumber: 2,
255
+ });
256
+ expect(viewer.highestRevisionCached()).to.be.false;
257
+ });
258
+ it('evicts least recently set cached revision views for sequenced edits', async () => {
182
259
  let editsProcessed = 0;
183
- const log = getSimpleLog(CachingLogViewer.sequencedCacheSizeMax * 2);
184
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, () => editsProcessed++);
260
+ const log = getLogWithNumEdits(testTree, CachingLogViewer.sequencedCacheSizeMax * 2);
261
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, expectDefined(RevisionView.fromTree(initialTree, testTree)), () => editsProcessed++);
185
262
  viewer.setMinimumSequenceNumber(log.length + 1); // simulate all edits being subject to eviction
186
- await requestAllSnapshots(viewer, log);
263
+ await requestAllRevisionViews(viewer, log);
187
264
  expect(editsProcessed).to.equal(log.length);
188
265
  editsProcessed = 0;
189
266
  for (let i = CachingLogViewer.sequencedCacheSizeMax + 1; i <= log.length; i++) {
190
- await viewer.getSnapshot(i);
267
+ await viewer.getRevisionView(i);
191
268
  }
192
269
  expect(editsProcessed).to.equal(0);
193
- await viewer.getSnapshot(CachingLogViewer.sequencedCacheSizeMax);
270
+ await viewer.getRevisionView(CachingLogViewer.sequencedCacheSizeMax);
194
271
  expect(editsProcessed).to.equal(CachingLogViewer.sequencedCacheSizeMax);
195
272
  });
196
- it('never evicts the snapshot for the most recent sequenced edit', async () => {
273
+ it('never evicts the revision view for the most recent sequenced edit', async () => {
197
274
  let editsProcessed = 0;
198
- const log = getSimpleLog(CachingLogViewer.sequencedCacheSizeMax * 2);
199
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, () => editsProcessed++);
275
+ const log = getLogWithNumEdits(testTree, CachingLogViewer.sequencedCacheSizeMax * 2);
276
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, expectDefined(RevisionView.fromTree(initialTree, testTree)), () => editsProcessed++);
200
277
  // Simulate all clients being caught up.
201
278
  viewer.setMinimumSequenceNumber(log.numberOfSequencedEdits);
202
- await requestAllSnapshots(viewer, log);
279
+ await requestAllRevisionViews(viewer, log);
203
280
  expect(editsProcessed).to.equal(log.length);
204
281
  editsProcessed = 0;
205
282
  for (let i = 0; i <= CachingLogViewer.sequencedCacheSizeMax; i++) {
206
- await viewer.getSnapshot(i);
283
+ await viewer.getRevisionView(i);
207
284
  }
208
285
  expect(editsProcessed).to.equal(CachingLogViewer.sequencedCacheSizeMax);
209
286
  editsProcessed = 0;
210
- await viewer.getSnapshot(log.numberOfSequencedEdits);
287
+ await viewer.getRevisionView(log.numberOfSequencedEdits);
211
288
  expect(editsProcessed).to.equal(0);
212
289
  });
213
- it('caches snapshots for local revisions', async () => {
214
- const logWithLocalEdits = getSimpleLogWithLocalEdits();
290
+ it('caches revision views for local revisions', async () => {
291
+ const logWithLocalEdits = getSimpleLogWithLocalEdits(testTree);
215
292
  let editsProcessed = 0;
216
- const viewer = getCachingLogViewerAssumeAppliedEdits(logWithLocalEdits, simpleSnapshotNoTraits, () => editsProcessed++);
293
+ const viewer = getCachingLogViewerAssumeAppliedEdits(logWithLocalEdits, simpleLogBaseView, () => editsProcessed++);
217
294
  assert(logWithLocalEdits.length < CachingLogViewer.sequencedCacheSizeMax);
218
- await requestAllSnapshots(viewer, logWithLocalEdits);
295
+ await requestAllRevisionViews(viewer, logWithLocalEdits);
219
296
  expect(editsProcessed).to.equal(logWithLocalEdits.length);
220
297
  // Local edits should now be cached until next remote sequenced edit arrives
221
298
  editsProcessed = 0;
222
299
  for (let i = logWithLocalEdits.numberOfSequencedEdits + 1; i <= logWithLocalEdits.length; i++) {
223
- await viewer.getSnapshot(i);
300
+ await viewer.getRevisionView(i);
224
301
  expect(editsProcessed).to.equal(0);
225
302
  }
226
303
  // Add a new local edit, and request the latest view.
227
304
  // This should apply only a single edit, as the most recent HEAD should be cached.
228
305
  editsProcessed = 0;
229
- logWithLocalEdits.addLocalEdit(newEdit(Insert.create([makeEmptyNode()], StablePlace.atEndOf(rightTraitLocation))));
230
- await requestAllSnapshots(viewer, logWithLocalEdits);
306
+ logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))));
307
+ await requestAllRevisionViews(viewer, logWithLocalEdits);
231
308
  expect(editsProcessed).to.equal(1);
232
309
  editsProcessed = 0;
233
310
  let seqNumber = 1;
234
311
  while (logWithLocalEdits.numberOfLocalEdits > 0) {
235
312
  logWithLocalEdits.addSequencedEdit(logWithLocalEdits.getEditInSessionAtIndex(logWithLocalEdits.numberOfSequencedEdits), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
236
313
  ++seqNumber;
237
- await viewer.getSnapshot(logWithLocalEdits.numberOfSequencedEdits); // get the latest (just added) sequenced edit
238
- await viewer.getSnapshot(Number.POSITIVE_INFINITY); // get the last snapshot, which is a local revision
314
+ await viewer.getRevisionView(logWithLocalEdits.numberOfSequencedEdits); // get the latest (just added) sequenced edit
315
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY); // get the last view, which is a local revision
239
316
  expect(editsProcessed).to.equal(0);
240
317
  }
241
318
  });
242
- it('invalidates cached snapshots for local revisions when remote edits are received', () => {
243
- const logWithLocalEdits = getSimpleLogWithLocalEdits();
319
+ it('invalidates cached revision views for local revisions when remote edits are received', () => {
320
+ const logWithLocalEdits = getSimpleLogWithLocalEdits(testTree);
244
321
  let editsProcessed = 0;
245
- const viewer = getCachingLogViewerAssumeAppliedEdits(logWithLocalEdits, simpleSnapshotNoTraits, () => editsProcessed++);
322
+ const viewer = getCachingLogViewerAssumeAppliedEdits(logWithLocalEdits, simpleLogBaseView, () => editsProcessed++);
246
323
  // Request twice, should only process edits once
247
- viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
248
- viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
324
+ viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
325
+ viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
249
326
  expect(editsProcessed).to.equal(logWithLocalEdits.length);
250
327
  // Remote edit arrives
251
328
  editsProcessed = 0;
252
- logWithLocalEdits.addSequencedEdit(newEdit(Insert.create([makeEmptyNode()], StablePlace.atEndOf(rightTraitLocation))), { sequenceNumber: 3, referenceSequenceNumber: 2, minimumSequenceNumber: 2 });
253
- viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
329
+ logWithLocalEdits.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))), { sequenceNumber: 3, referenceSequenceNumber: 2, minimumSequenceNumber: 2 });
330
+ viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
254
331
  expect(editsProcessed).to.equal(logWithLocalEdits.numberOfLocalEdits + 1);
255
332
  });
256
- // An arbitrary snapshot which can be used to check to see if it gets used when provided as a cached value.
257
- const arbitrarySnapshot = Snapshot.fromTree(makeEmptyNode());
258
333
  it('uses known editing result', () => {
259
334
  const log = new EditLog();
260
335
  const editsProcessed = [];
261
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, (_, _2, wasCached) => editsProcessed.push(wasCached));
262
- const before = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
336
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
337
+ const before = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
263
338
  const edit = newEdit([]);
264
339
  log.addLocalEdit(edit);
265
340
  viewer.setKnownEditingResult(edit, {
266
341
  status: EditStatus.Applied,
267
342
  changes: edit.changes,
268
343
  before,
269
- after: arbitrarySnapshot,
344
+ after: arbitraryRevisionView,
270
345
  steps: [],
271
346
  });
272
- const after = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
347
+ const after = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
273
348
  expect(editsProcessed).deep.equal([true]);
274
- expect(after).equal(arbitrarySnapshot);
349
+ expect(after).equal(arbitraryRevisionView);
275
350
  });
276
- it('ignores known editing if for wrong before snapshot', () => {
351
+ it('ignores known editing if for wrong before revision view', () => {
277
352
  const log = new EditLog();
278
353
  const editsProcessed = [];
279
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, (_, _2, wasCached) => editsProcessed.push(wasCached));
354
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
280
355
  const edit = newEdit([]);
281
356
  log.addLocalEdit(edit);
282
357
  viewer.setKnownEditingResult(edit, {
283
358
  status: EditStatus.Applied,
284
359
  changes: edit.changes,
285
- before: arbitrarySnapshot,
286
- after: arbitrarySnapshot,
360
+ before: arbitraryRevisionView,
361
+ after: arbitraryRevisionView,
287
362
  steps: [],
288
363
  });
289
- const after = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
364
+ const after = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
290
365
  expect(editsProcessed).deep.equal([false]);
291
- expect(after).not.equal(arbitrarySnapshot);
366
+ expect(after).not.equal(arbitraryRevisionView);
292
367
  });
293
368
  it('ignores known editing if for wrong edit', () => {
294
369
  const log = new EditLog();
295
370
  const editsProcessed = [];
296
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, (_, _2, wasCached) => editsProcessed.push(wasCached));
297
- const before = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
371
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
372
+ const before = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
298
373
  const edit = newEdit([]);
299
374
  log.addLocalEdit(edit);
300
375
  viewer.setKnownEditingResult(newEdit([]), {
301
376
  status: EditStatus.Applied,
302
377
  changes: edit.changes,
303
378
  before,
304
- after: arbitrarySnapshot,
379
+ after: arbitraryRevisionView,
305
380
  steps: [],
306
381
  });
307
- const after = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
382
+ const after = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
308
383
  expect(editsProcessed).deep.equal([false]);
309
- expect(after).not.equal(arbitrarySnapshot);
384
+ expect(after).not.equal(arbitraryRevisionView);
310
385
  });
311
386
  it('uses known editing result with multiple edits', () => {
312
387
  const log = new EditLog();
313
388
  const editsProcessed = [];
314
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, (_, _2, wasCached) => editsProcessed.push(wasCached));
389
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
315
390
  const edit1 = newEdit([]);
316
391
  const edit2 = newEdit([]);
317
392
  const edit3 = newEdit([]);
318
393
  log.addLocalEdit(edit1);
319
- const before = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
394
+ const before = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
320
395
  expect(editsProcessed).deep.equal([false]);
321
396
  log.addLocalEdit(edit2);
322
397
  viewer.setKnownEditingResult(edit2, {
323
398
  status: EditStatus.Applied,
324
399
  changes: edit2.changes,
325
400
  before,
326
- after: arbitrarySnapshot,
401
+ after: arbitraryRevisionView,
327
402
  steps: [],
328
403
  });
329
- const after = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
404
+ const after = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
330
405
  expect(editsProcessed).deep.equal([false, true]);
331
- expect(after).equal(arbitrarySnapshot);
406
+ expect(after).equal(arbitraryRevisionView);
332
407
  log.addLocalEdit(edit3);
333
- viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
408
+ viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
334
409
  expect(editsProcessed).deep.equal([false, true, false]);
335
410
  });
336
- describe('Telemetry', () => {
411
+ describe('Callbacks', () => {
337
412
  function getViewer() {
338
- const log = getSimpleLog();
413
+ const log = getTestTreeLog(testTree);
339
414
  const events = [];
340
- const viewer = new CachingLogViewer(log, simpleSnapshotNoTraits, [],
341
- /* expensiveValidation */ true, undefined, getMockLogger((event) => events.push(event)), Transaction.factory);
415
+ const viewer = new CachingLogViewer(log, simpleLogBaseView, [],
416
+ /* expensiveValidation */ true, undefined, (args) => events.push(args), TransactionInternal.factory);
342
417
  return { log, viewer, events };
343
418
  }
344
419
  function addInvalidEdit(log) {
345
420
  // Add a local edit that will be invalid (inserts a node at a location that doesn't exist)
346
- const edit = newEdit(Insert.create([makeEmptyNode()], StablePlace.atEndOf({
347
- parent: initialSnapshot.root,
348
- label: leftTraitLabel,
349
- })));
421
+ const edit = newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], expectDefined(StablePlaceInternal.atEndOf({
422
+ label: testTraitLabel,
423
+ parent: testTree.generateNodeId(),
424
+ }))));
350
425
  log.addLocalEdit(edit);
351
426
  return edit;
352
427
  }
353
- it('is logged for invalid locally generated edits when those edits are sequenced', async () => {
354
- const { log, events, viewer } = getViewer();
355
- const edit = addInvalidEdit(log);
356
- await viewer.getSnapshot(Number.POSITIVE_INFINITY);
357
- expect(events.length).equals(0, 'Invalid local edit should not log telemetry');
358
- log.addSequencedEdit(edit, { sequenceNumber: 3, referenceSequenceNumber: 2 });
359
- await viewer.getSnapshot(Number.POSITIVE_INFINITY);
360
- expect(events.length).equals(1);
361
- });
362
- it('is only logged once upon first application for invalid locally generated edits', async () => {
428
+ it('processSequencedEditResult is called when a sequenced edit is applied', async () => {
363
429
  const { log, events, viewer } = getViewer();
364
- const numEdits = 10;
365
- const localEdits = [...Array(numEdits).keys()].map(() => addInvalidEdit(log));
366
- await viewer.getSnapshot(Number.POSITIVE_INFINITY);
430
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY);
431
+ events.splice(0);
432
+ // Non-sequenced edit should not trigger a call
433
+ const invalidEdit = addInvalidEdit(log);
434
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY);
367
435
  expect(events.length).equals(0);
368
- for (let i = 0; i < numEdits; i++) {
369
- const localEdit = localEdits[i];
370
- log.addSequencedEdit(localEdit, { sequenceNumber: i + 1, referenceSequenceNumber: 1 });
371
- await viewer.getSnapshot(Number.POSITIVE_INFINITY);
372
- expect(events.length).equals(i + 1);
373
- const currentEvent = events[i];
374
- expect(currentEvent.category).equals('generic');
375
- expect(currentEvent.eventName).equals('InvalidSharedTreeEdit');
376
- }
436
+ log.addSequencedEdit(invalidEdit, { sequenceNumber: 3, referenceSequenceNumber: 2 });
437
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY);
438
+ expect(events.length).equals(1);
439
+ expect(events[0].edit.id).equals(invalidEdit.id);
440
+ expect(events[0].wasLocal).equals(true);
441
+ expect(events[0].result.status).equals(EditStatus.Invalid);
442
+ expect(events[0].reconciliationPath.length).equals(0);
443
+ const validEdit1 = newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atStartOf(testTree.left.traitLocation)));
444
+ log.addSequencedEdit(validEdit1, { sequenceNumber: 3, referenceSequenceNumber: 2 });
445
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY);
446
+ expect(events.length).equals(2);
447
+ expect(events[1].edit.id).equals(validEdit1.id);
448
+ expect(events[1].wasLocal).equals(false);
449
+ expect(events[1].result.status).equals(EditStatus.Applied);
450
+ expect(events[1].reconciliationPath.length).equals(0);
451
+ const validEdit2 = newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atStartOf(testTree.left.traitLocation)));
452
+ log.addSequencedEdit(validEdit2, { sequenceNumber: 4, referenceSequenceNumber: 2 });
453
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY);
454
+ expect(events.length).equals(3);
455
+ expect(events[2].edit.id).equals(validEdit2.id);
456
+ expect(events[2].wasLocal).equals(false);
457
+ expect(events[2].result.status).equals(EditStatus.Applied);
458
+ expect(events[2].reconciliationPath.length).equals(1);
377
459
  });
378
460
  });
379
461
  describe('Sequencing', () => {
@@ -388,8 +470,8 @@ describe('CachingLogViewer', () => {
388
470
  return edit;
389
471
  }
390
472
  function minimalLogViewer() {
391
- return new CachingLogViewer(new EditLog(), undefined, [],
392
- /* expensiveValidation */ true, undefined, getMockLogger(), MockTransaction.factory);
473
+ return new CachingLogViewer(new EditLog(), simpleLogBaseView, [],
474
+ /* expensiveValidation */ true, undefined, undefined, MockTransaction.factory);
393
475
  }
394
476
  it('tracks the earliest sequenced edit in the session', () => {
395
477
  const logViewer = minimalLogViewer();
@@ -458,11 +540,11 @@ describe('CachingLogViewer', () => {
458
540
  // This is deliberately done to simulate scenarios where a given DDS may not be sent all sequenced ops (because an other DDS
459
541
  // might be receiving them).
460
542
  const edit2 = addFakeEdit(logViewer, 2001, 1001);
461
- expectReconciliationPath(edit2, [edit1]);
462
- const edit3 = addFakeEdit(logViewer, 3001, 2001);
543
+ expectReconciliationPath(edit2, []);
544
+ const edit3 = addFakeEdit(logViewer, 3001, 2000);
463
545
  expectReconciliationPath(edit3, [edit2]);
464
546
  const edit4 = addFakeEdit(logViewer, 4001, 2500);
465
- expectReconciliationPath(edit4, [edit2, edit3]);
547
+ expectReconciliationPath(edit4, [edit3]);
466
548
  const edit5 = addFakeEdit(logViewer, 5001, 500);
467
549
  expectReconciliationPath(edit5, [edit1, edit2, edit3, edit4]);
468
550
  });