@fluid-experimental/tree 0.58.2002 → 0.59.1000

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 (817) hide show
  1. package/README.md +159 -46
  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 -105
  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 +61 -32
  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 +129 -85
  59. package/dist/LogViewer.d.ts.map +1 -1
  60. package/dist/LogViewer.js +111 -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 +105 -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 +439 -0
  90. package/dist/SharedTree.d.ts.map +1 -0
  91. package/dist/SharedTree.js +1109 -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 +52 -0
  114. package/dist/Transaction.d.ts.map +1 -0
  115. package/dist/Transaction.js +72 -0
  116. package/dist/Transaction.js.map +1 -0
  117. package/dist/TransactionInternal.d.ts +540 -0
  118. package/dist/TransactionInternal.d.ts.map +1 -0
  119. package/dist/TransactionInternal.js +626 -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/docs/Write-Format.md +19 -0
  190. package/lib/ChangeCompression.d.ts +39 -0
  191. package/lib/ChangeCompression.d.ts.map +1 -0
  192. package/lib/ChangeCompression.js +111 -0
  193. package/lib/ChangeCompression.js.map +1 -0
  194. package/{dist/default-edits/PersistedTypes.d.ts → lib/ChangeTypes.d.ts} +58 -105
  195. package/lib/ChangeTypes.d.ts.map +1 -0
  196. package/lib/{default-edits/PersistedTypes.js → ChangeTypes.js} +15 -68
  197. package/lib/ChangeTypes.js.map +1 -0
  198. package/lib/Checkout.d.ts +39 -27
  199. package/lib/Checkout.d.ts.map +1 -1
  200. package/lib/Checkout.js +53 -24
  201. package/lib/Checkout.js.map +1 -1
  202. package/lib/Common.d.ts +175 -38
  203. package/lib/Common.d.ts.map +1 -1
  204. package/lib/Common.js +226 -101
  205. package/lib/Common.js.map +1 -1
  206. package/lib/EagerCheckout.d.ts +24 -0
  207. package/lib/EagerCheckout.d.ts.map +1 -0
  208. package/lib/{BasicCheckout.js → EagerCheckout.js} +7 -4
  209. package/lib/EagerCheckout.js.map +1 -0
  210. package/lib/EditLog.d.ts +77 -63
  211. package/lib/EditLog.d.ts.map +1 -1
  212. package/lib/EditLog.js +83 -47
  213. package/lib/EditLog.js.map +1 -1
  214. package/lib/EditUtilities.d.ts +168 -0
  215. package/lib/EditUtilities.d.ts.map +1 -0
  216. package/lib/EditUtilities.js +353 -0
  217. package/lib/EditUtilities.js.map +1 -0
  218. package/lib/EventTypes.d.ts +73 -0
  219. package/lib/EventTypes.d.ts.map +1 -0
  220. package/lib/EventTypes.js +75 -0
  221. package/lib/EventTypes.js.map +1 -0
  222. package/lib/Forest.d.ts +29 -7
  223. package/lib/Forest.d.ts.map +1 -1
  224. package/lib/Forest.js +58 -35
  225. package/lib/Forest.js.map +1 -1
  226. package/lib/HistoryEditFactory.d.ts +20 -0
  227. package/lib/HistoryEditFactory.d.ts.map +1 -0
  228. package/lib/{default-edits/HistoryEditFactory.js → HistoryEditFactory.js} +78 -39
  229. package/lib/HistoryEditFactory.js.map +1 -0
  230. package/lib/IdConversion.d.ts +12 -0
  231. package/lib/IdConversion.d.ts.map +1 -0
  232. package/lib/IdConversion.js +91 -0
  233. package/lib/IdConversion.js.map +1 -0
  234. package/lib/Identifiers.d.ts +89 -2
  235. package/lib/Identifiers.d.ts.map +1 -1
  236. package/lib/Identifiers.js +8 -1
  237. package/lib/Identifiers.js.map +1 -1
  238. package/lib/InitialTree.d.ts +2 -2
  239. package/lib/InitialTree.d.ts.map +1 -1
  240. package/lib/InitialTree.js +2 -1
  241. package/lib/InitialTree.js.map +1 -1
  242. package/lib/LazyCheckout.d.ts +28 -0
  243. package/lib/LazyCheckout.d.ts.map +1 -0
  244. package/lib/LazyCheckout.js +40 -0
  245. package/lib/LazyCheckout.js.map +1 -0
  246. package/lib/LogViewer.d.ts +129 -85
  247. package/lib/LogViewer.d.ts.map +1 -1
  248. package/lib/LogViewer.js +103 -77
  249. package/lib/LogViewer.js.map +1 -1
  250. package/lib/MergeHealth.d.ts +221 -0
  251. package/lib/MergeHealth.d.ts.map +1 -0
  252. package/lib/MergeHealth.js +258 -0
  253. package/lib/MergeHealth.js.map +1 -0
  254. package/lib/NodeIdUtilities.d.ts +105 -0
  255. package/lib/NodeIdUtilities.d.ts.map +1 -0
  256. package/lib/NodeIdUtilities.js +53 -0
  257. package/lib/NodeIdUtilities.js.map +1 -0
  258. package/lib/PayloadUtilities.d.ts +42 -0
  259. package/lib/PayloadUtilities.d.ts.map +1 -0
  260. package/lib/PayloadUtilities.js +110 -0
  261. package/lib/PayloadUtilities.js.map +1 -0
  262. package/lib/ReconciliationPath.d.ts +18 -13
  263. package/lib/ReconciliationPath.d.ts.map +1 -1
  264. package/lib/ReconciliationPath.js.map +1 -1
  265. package/lib/RevisionValueCache.d.ts +11 -2
  266. package/lib/RevisionValueCache.d.ts.map +1 -1
  267. package/lib/RevisionValueCache.js +2 -3
  268. package/lib/RevisionValueCache.js.map +1 -1
  269. package/lib/RevisionView.d.ts +83 -0
  270. package/lib/RevisionView.d.ts.map +1 -0
  271. package/lib/RevisionView.js +175 -0
  272. package/lib/RevisionView.js.map +1 -0
  273. package/lib/SerializationUtilities.d.ts +36 -0
  274. package/lib/SerializationUtilities.d.ts.map +1 -0
  275. package/lib/SerializationUtilities.js +95 -0
  276. package/lib/SerializationUtilities.js.map +1 -0
  277. package/lib/SharedTree.d.ts +439 -0
  278. package/lib/SharedTree.d.ts.map +1 -0
  279. package/lib/SharedTree.js +1104 -0
  280. package/lib/SharedTree.js.map +1 -0
  281. package/lib/SharedTreeEncoder.d.ts +102 -0
  282. package/lib/SharedTreeEncoder.d.ts.map +1 -0
  283. package/lib/SharedTreeEncoder.js +308 -0
  284. package/lib/SharedTreeEncoder.js.map +1 -0
  285. package/lib/StringInterner.d.ts +46 -0
  286. package/lib/StringInterner.d.ts.map +1 -0
  287. package/lib/StringInterner.js +57 -0
  288. package/lib/StringInterner.js.map +1 -0
  289. package/lib/Summary.d.ts +40 -0
  290. package/lib/Summary.d.ts.map +1 -0
  291. package/lib/Summary.js +19 -0
  292. package/lib/Summary.js.map +1 -0
  293. package/lib/SummaryBackCompatibility.d.ts +22 -22
  294. package/lib/SummaryBackCompatibility.d.ts.map +1 -1
  295. package/lib/SummaryBackCompatibility.js +29 -32
  296. package/lib/SummaryBackCompatibility.js.map +1 -1
  297. package/lib/SummaryTestUtilities.d.ts +31 -0
  298. package/lib/SummaryTestUtilities.d.ts.map +1 -0
  299. package/lib/SummaryTestUtilities.js +32 -0
  300. package/lib/SummaryTestUtilities.js.map +1 -0
  301. package/lib/Transaction.d.ts +52 -0
  302. package/lib/Transaction.d.ts.map +1 -0
  303. package/lib/Transaction.js +68 -0
  304. package/lib/Transaction.js.map +1 -0
  305. package/lib/TransactionInternal.d.ts +540 -0
  306. package/lib/TransactionInternal.d.ts.map +1 -0
  307. package/lib/TransactionInternal.js +622 -0
  308. package/lib/TransactionInternal.js.map +1 -0
  309. package/lib/TreeCompressor.d.ts +36 -0
  310. package/lib/TreeCompressor.d.ts.map +1 -0
  311. package/lib/TreeCompressor.js +133 -0
  312. package/lib/TreeCompressor.js.map +1 -0
  313. package/lib/TreeNodeHandle.d.ts +12 -18
  314. package/lib/TreeNodeHandle.d.ts.map +1 -1
  315. package/lib/TreeNodeHandle.js +14 -24
  316. package/lib/TreeNodeHandle.js.map +1 -1
  317. package/lib/TreeView.d.ts +166 -0
  318. package/lib/TreeView.d.ts.map +1 -0
  319. package/lib/TreeView.js +214 -0
  320. package/lib/TreeView.js.map +1 -0
  321. package/lib/TreeViewUtilities.d.ts +21 -0
  322. package/lib/TreeViewUtilities.d.ts.map +1 -0
  323. package/lib/TreeViewUtilities.js +71 -0
  324. package/lib/TreeViewUtilities.js.map +1 -0
  325. package/lib/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  326. package/lib/UndoRedoHandler.d.ts.map +1 -0
  327. package/lib/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +3 -7
  328. package/lib/UndoRedoHandler.js.map +1 -0
  329. package/lib/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  330. package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  331. package/lib/id-compressor/AppendOnlySortedMap.js +278 -0
  332. package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -0
  333. package/lib/id-compressor/IdCompressor.d.ts +389 -0
  334. package/lib/id-compressor/IdCompressor.d.ts.map +1 -0
  335. package/lib/id-compressor/IdCompressor.js +1343 -0
  336. package/lib/id-compressor/IdCompressor.js.map +1 -0
  337. package/lib/id-compressor/IdRange.d.ts +11 -0
  338. package/lib/id-compressor/IdRange.d.ts.map +1 -0
  339. package/lib/id-compressor/IdRange.js +25 -0
  340. package/lib/id-compressor/IdRange.js.map +1 -0
  341. package/lib/id-compressor/NumericUuid.d.ts +63 -0
  342. package/lib/id-compressor/NumericUuid.d.ts.map +1 -0
  343. package/lib/id-compressor/NumericUuid.js +365 -0
  344. package/lib/id-compressor/NumericUuid.js.map +1 -0
  345. package/lib/id-compressor/index.d.ts +12 -0
  346. package/lib/id-compressor/index.d.ts.map +1 -0
  347. package/lib/id-compressor/index.js +12 -0
  348. package/lib/id-compressor/index.js.map +1 -0
  349. package/lib/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  350. package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  351. package/lib/{test/Snapshot.tests.d.ts → id-compressor/persisted-types/0.0.1.js} +1 -1
  352. package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -0
  353. package/lib/id-compressor/persisted-types/index.d.ts +6 -0
  354. package/lib/id-compressor/persisted-types/index.d.ts.map +1 -0
  355. package/lib/id-compressor/persisted-types/index.js +6 -0
  356. package/lib/id-compressor/persisted-types/index.js.map +1 -0
  357. package/lib/index.d.ts +29 -9
  358. package/lib/index.d.ts.map +1 -1
  359. package/lib/index.js +23 -6
  360. package/lib/index.js.map +1 -1
  361. package/lib/persisted-types/0.0.2.d.ts +385 -0
  362. package/lib/persisted-types/0.0.2.d.ts.map +1 -0
  363. package/lib/persisted-types/0.0.2.js +110 -0
  364. package/lib/persisted-types/0.0.2.js.map +1 -0
  365. package/lib/persisted-types/0.1.1.d.ts +314 -0
  366. package/lib/persisted-types/0.1.1.d.ts.map +1 -0
  367. package/lib/persisted-types/0.1.1.js +150 -0
  368. package/lib/persisted-types/0.1.1.js.map +1 -0
  369. package/lib/persisted-types/index.d.ts +7 -0
  370. package/lib/persisted-types/index.d.ts.map +1 -0
  371. package/lib/persisted-types/index.js +8 -0
  372. package/lib/persisted-types/index.js.map +1 -0
  373. package/lib/test/AppendOnlySortedMap.tests.d.ts +6 -0
  374. package/lib/test/AppendOnlySortedMap.tests.d.ts.map +1 -0
  375. package/lib/test/AppendOnlySortedMap.tests.js +169 -0
  376. package/lib/test/AppendOnlySortedMap.tests.js.map +1 -0
  377. package/lib/test/{SnapshotUtilities.tests.d.ts → ChangeCompression.tests.d.ts} +1 -1
  378. package/lib/test/ChangeCompression.tests.d.ts.map +1 -0
  379. package/lib/test/ChangeCompression.tests.js +145 -0
  380. package/lib/test/ChangeCompression.tests.js.map +1 -0
  381. package/lib/test/Checkout.tests.d.ts +2 -3
  382. package/lib/test/Checkout.tests.d.ts.map +1 -1
  383. package/lib/test/Checkout.tests.js +126 -69
  384. package/lib/test/Checkout.tests.js.map +1 -1
  385. package/lib/test/Common.tests.js +60 -2
  386. package/lib/test/Common.tests.js.map +1 -1
  387. package/lib/test/{BasicCheckout.tests.d.ts → EagerCheckout.tests.d.ts} +1 -1
  388. package/lib/test/EagerCheckout.tests.d.ts.map +1 -0
  389. package/lib/test/EagerCheckout.tests.js +20 -0
  390. package/lib/test/EagerCheckout.tests.js.map +1 -0
  391. package/lib/test/Edit.tests.js +22 -14
  392. package/lib/test/Edit.tests.js.map +1 -1
  393. package/lib/test/{Anchors.glassBox.tests.d.ts → EditLog.perf.tests.d.ts} +1 -1
  394. package/lib/test/EditLog.perf.tests.d.ts.map +1 -0
  395. package/lib/test/EditLog.perf.tests.js +30 -0
  396. package/lib/test/EditLog.perf.tests.js.map +1 -0
  397. package/lib/test/EditLog.tests.js +10 -6
  398. package/lib/test/EditLog.tests.js.map +1 -1
  399. package/lib/test/EditUtilities.tests.d.ts +6 -0
  400. package/lib/test/EditUtilities.tests.d.ts.map +1 -0
  401. package/lib/test/EditUtilities.tests.js +503 -0
  402. package/lib/test/EditUtilities.tests.js.map +1 -0
  403. package/lib/test/Forest.perf.tests.d.ts +6 -0
  404. package/lib/test/Forest.perf.tests.d.ts.map +1 -0
  405. package/lib/test/Forest.perf.tests.js +133 -0
  406. package/lib/test/Forest.perf.tests.js.map +1 -0
  407. package/lib/test/Forest.tests.js +54 -27
  408. package/lib/test/Forest.tests.js.map +1 -1
  409. package/lib/test/GenericTransaction.tests.js +12 -3
  410. package/lib/test/GenericTransaction.tests.js.map +1 -1
  411. package/lib/test/HistoryEditFactory.tests.d.ts +6 -0
  412. package/lib/test/HistoryEditFactory.tests.d.ts.map +1 -0
  413. package/lib/test/HistoryEditFactory.tests.js +90 -0
  414. package/lib/test/HistoryEditFactory.tests.js.map +1 -0
  415. package/lib/test/IdCompressor.perf.tests.d.ts +6 -0
  416. package/lib/test/IdCompressor.perf.tests.d.ts.map +1 -0
  417. package/lib/test/IdCompressor.perf.tests.js +304 -0
  418. package/lib/test/IdCompressor.perf.tests.js.map +1 -0
  419. package/lib/test/IdCompressor.tests.d.ts +6 -0
  420. package/lib/test/IdCompressor.tests.d.ts.map +1 -0
  421. package/lib/test/IdCompressor.tests.js +1075 -0
  422. package/lib/test/IdCompressor.tests.js.map +1 -0
  423. package/lib/test/IdConversion.tests.d.ts +6 -0
  424. package/lib/test/IdConversion.tests.d.ts.map +1 -0
  425. package/lib/test/IdConversion.tests.js +36 -0
  426. package/lib/test/IdConversion.tests.js.map +1 -0
  427. package/lib/test/LazyCheckout.tests.d.ts +6 -0
  428. package/lib/test/LazyCheckout.tests.d.ts.map +1 -0
  429. package/lib/test/LazyCheckout.tests.js +22 -0
  430. package/lib/test/LazyCheckout.tests.js.map +1 -0
  431. package/lib/test/LogViewer.tests.js +276 -191
  432. package/lib/test/LogViewer.tests.js.map +1 -1
  433. package/lib/test/{SharedTreeWithAnchors.tests.d.ts → MergeHealthTelemetryHeartbeat.tests.d.ts} +1 -1
  434. package/lib/test/MergeHealthTelemetryHeartbeat.tests.d.ts.map +1 -0
  435. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +342 -0
  436. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -0
  437. package/lib/test/NumericUuid.perf.tests.d.ts +6 -0
  438. package/lib/test/NumericUuid.perf.tests.d.ts.map +1 -0
  439. package/lib/test/NumericUuid.perf.tests.js +68 -0
  440. package/lib/test/NumericUuid.perf.tests.js.map +1 -0
  441. package/lib/test/NumericUuid.tests.d.ts +6 -0
  442. package/lib/test/NumericUuid.tests.d.ts.map +1 -0
  443. package/lib/test/NumericUuid.tests.js +191 -0
  444. package/lib/test/NumericUuid.tests.js.map +1 -0
  445. package/lib/test/RevisionView.tests.d.ts +6 -0
  446. package/lib/test/RevisionView.tests.d.ts.map +1 -0
  447. package/lib/test/RevisionView.tests.js +133 -0
  448. package/lib/test/RevisionView.tests.js.map +1 -0
  449. package/lib/test/SharedTree.perf.tests.d.ts +6 -0
  450. package/lib/test/SharedTree.perf.tests.d.ts.map +1 -0
  451. package/lib/test/SharedTree.perf.tests.js +39 -0
  452. package/lib/test/SharedTree.perf.tests.js.map +1 -0
  453. package/lib/test/SharedTree.tests.js +15 -3
  454. package/lib/test/SharedTree.tests.js.map +1 -1
  455. package/lib/test/StringInterner.tests.d.ts +6 -0
  456. package/lib/test/StringInterner.tests.d.ts.map +1 -0
  457. package/lib/test/StringInterner.tests.js +71 -0
  458. package/lib/test/StringInterner.tests.js.map +1 -0
  459. package/lib/test/Summary.tests.d.ts +8 -0
  460. package/lib/test/Summary.tests.d.ts.map +1 -0
  461. package/lib/test/Summary.tests.js +407 -0
  462. package/lib/test/Summary.tests.js.map +1 -0
  463. package/lib/test/Transaction.tests.js +76 -330
  464. package/lib/test/Transaction.tests.js.map +1 -1
  465. package/lib/test/TransactionInternal.tests.d.ts +6 -0
  466. package/lib/test/TransactionInternal.tests.d.ts.map +1 -0
  467. package/lib/test/TransactionInternal.tests.js +568 -0
  468. package/lib/test/TransactionInternal.tests.js.map +1 -0
  469. package/lib/test/TreeCompression.tests.d.ts +6 -0
  470. package/lib/test/TreeCompression.tests.d.ts.map +1 -0
  471. package/lib/test/TreeCompression.tests.js +292 -0
  472. package/lib/test/TreeCompression.tests.js.map +1 -0
  473. package/lib/test/TreeView.tests.d.ts +6 -0
  474. package/lib/test/TreeView.tests.d.ts.map +1 -0
  475. package/lib/test/TreeView.tests.js +176 -0
  476. package/lib/test/TreeView.tests.js.map +1 -0
  477. package/lib/test/UndoRedoHandler.tests.js +2 -2
  478. package/lib/test/UndoRedoHandler.tests.js.map +1 -1
  479. package/lib/test/Virtualization.tests.js +146 -62
  480. package/lib/test/Virtualization.tests.js.map +1 -1
  481. package/lib/test/fuzz/Generators.d.ts +19 -0
  482. package/lib/test/fuzz/Generators.d.ts.map +1 -0
  483. package/lib/test/fuzz/Generators.js +420 -0
  484. package/lib/test/fuzz/Generators.js.map +1 -0
  485. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +20 -0
  486. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -0
  487. package/lib/test/fuzz/SharedTreeFuzzTests.js +217 -0
  488. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -0
  489. package/lib/test/fuzz/Types.d.ts +133 -0
  490. package/lib/test/fuzz/Types.d.ts.map +1 -0
  491. package/lib/test/{GenericTransactionWithAnchors.tests.d.ts → fuzz/Types.js} +2 -2
  492. package/lib/test/fuzz/Types.js.map +1 -0
  493. package/lib/test/utilities/IdCompressorTestUtilities.d.ts +180 -0
  494. package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -0
  495. package/lib/test/utilities/IdCompressorTestUtilities.js +528 -0
  496. package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -0
  497. package/lib/test/utilities/MockTransaction.d.ts +26 -7
  498. package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
  499. package/lib/test/utilities/MockTransaction.js +40 -11
  500. package/lib/test/utilities/MockTransaction.js.map +1 -1
  501. package/lib/test/utilities/PendingLocalStateTests.d.ts +12 -0
  502. package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -0
  503. package/lib/test/utilities/PendingLocalStateTests.js +105 -0
  504. package/lib/test/utilities/PendingLocalStateTests.js.map +1 -0
  505. package/lib/test/utilities/SharedTreeTests.d.ts +3 -4
  506. package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
  507. package/lib/test/utilities/SharedTreeTests.js +696 -439
  508. package/lib/test/utilities/SharedTreeTests.js.map +1 -1
  509. package/lib/test/utilities/SharedTreeVersioningTests.d.ts +11 -0
  510. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -0
  511. package/lib/test/utilities/SharedTreeVersioningTests.js +370 -0
  512. package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -0
  513. package/lib/test/utilities/SummaryLoadPerfTests.d.ts +10 -0
  514. package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -0
  515. package/lib/test/utilities/SummaryLoadPerfTests.js +102 -0
  516. package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -0
  517. package/lib/test/utilities/SummarySizeTests.d.ts +11 -0
  518. package/lib/test/utilities/SummarySizeTests.d.ts.map +1 -0
  519. package/lib/test/utilities/SummarySizeTests.js +158 -0
  520. package/lib/test/utilities/SummarySizeTests.js.map +1 -0
  521. package/lib/test/utilities/TestCommon.d.ts +9 -0
  522. package/lib/test/utilities/TestCommon.d.ts.map +1 -0
  523. package/lib/test/utilities/TestCommon.js +13 -0
  524. package/lib/test/utilities/TestCommon.js.map +1 -0
  525. package/lib/test/utilities/TestNode.d.ts +140 -0
  526. package/lib/test/utilities/TestNode.d.ts.map +1 -0
  527. package/lib/test/utilities/TestNode.js +292 -0
  528. package/lib/test/utilities/TestNode.js.map +1 -0
  529. package/lib/test/utilities/TestUtilities.d.ts +84 -70
  530. package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
  531. package/lib/test/utilities/TestUtilities.js +218 -143
  532. package/lib/test/utilities/TestUtilities.js.map +1 -1
  533. package/lib/test/utilities/UndoRedoTests.d.ts +4 -5
  534. package/lib/test/utilities/UndoRedoTests.d.ts.map +1 -1
  535. package/lib/test/utilities/UndoRedoTests.js +138 -149
  536. package/lib/test/utilities/UndoRedoTests.js.map +1 -1
  537. package/package.json +22 -17
  538. package/src/ChangeCompression.ts +159 -0
  539. package/src/{default-edits/PersistedTypes.ts → ChangeTypes.ts} +62 -125
  540. package/src/Checkout.ts +82 -53
  541. package/src/Common.ts +317 -117
  542. package/src/EagerCheckout.ts +38 -0
  543. package/src/EditLog.ts +153 -100
  544. package/src/EditUtilities.ts +559 -0
  545. package/src/EventTypes.ts +74 -0
  546. package/src/Forest.ts +81 -73
  547. package/src/{default-edits/HistoryEditFactory.ts → HistoryEditFactory.ts} +103 -53
  548. package/src/IdConversion.ts +125 -0
  549. package/src/Identifiers.ts +101 -1
  550. package/src/InitialTree.ts +5 -4
  551. package/src/LazyCheckout.ts +51 -0
  552. package/src/LogViewer.ts +242 -166
  553. package/src/MergeHealth.ts +447 -0
  554. package/src/NodeIdUtilities.ts +156 -0
  555. package/src/PayloadUtilities.ts +124 -0
  556. package/src/ReconciliationPath.ts +18 -13
  557. package/src/RevisionValueCache.ts +14 -5
  558. package/src/RevisionView.ts +252 -0
  559. package/src/SerializationUtilities.ts +130 -0
  560. package/src/SharedTree.ts +1501 -0
  561. package/src/SharedTreeEncoder.ts +493 -0
  562. package/src/StringInterner.ts +72 -0
  563. package/src/Summary.ts +48 -0
  564. package/src/SummaryBackCompatibility.ts +47 -57
  565. package/src/SummaryTestUtilities.ts +54 -0
  566. package/src/Transaction.ts +89 -0
  567. package/src/TransactionInternal.ts +1087 -0
  568. package/src/TreeCompressor.ts +213 -0
  569. package/src/TreeNodeHandle.ts +19 -32
  570. package/src/TreeView.ts +322 -0
  571. package/src/TreeViewUtilities.ts +77 -0
  572. package/src/{default-edits/UndoRedoHandler.ts → UndoRedoHandler.ts} +8 -13
  573. package/src/id-compressor/AppendOnlySortedMap.ts +325 -0
  574. package/src/id-compressor/IdCompressor.md +3 -0
  575. package/src/id-compressor/IdCompressor.ts +1848 -0
  576. package/src/id-compressor/IdRange.ts +33 -0
  577. package/src/id-compressor/NumericUuid.ts +414 -0
  578. package/src/id-compressor/index.ts +13 -0
  579. package/src/id-compressor/persisted-types/0.0.1.ts +179 -0
  580. package/src/id-compressor/persisted-types/README.md +3 -0
  581. package/src/id-compressor/persisted-types/index.ts +6 -0
  582. package/src/index.ts +118 -59
  583. package/src/persisted-types/0.0.2.ts +442 -0
  584. package/src/persisted-types/0.1.1.ts +476 -0
  585. package/src/persisted-types/README.md +22 -0
  586. package/src/persisted-types/index.ts +9 -0
  587. package/.mocharc.js +0 -41
  588. package/api/tree.api.md +0 -729
  589. package/dist/BasicCheckout.d.ts +0 -23
  590. package/dist/BasicCheckout.d.ts.map +0 -1
  591. package/dist/BasicCheckout.js.map +0 -1
  592. package/dist/Snapshot.d.ts +0 -198
  593. package/dist/Snapshot.d.ts.map +0 -1
  594. package/dist/Snapshot.js +0 -267
  595. package/dist/Snapshot.js.map +0 -1
  596. package/dist/SnapshotUtilities.d.ts +0 -29
  597. package/dist/SnapshotUtilities.d.ts.map +0 -1
  598. package/dist/SnapshotUtilities.js +0 -73
  599. package/dist/SnapshotUtilities.js.map +0 -1
  600. package/dist/anchored-edits/AnchorResolution.d.ts +0 -144
  601. package/dist/anchored-edits/AnchorResolution.d.ts.map +0 -1
  602. package/dist/anchored-edits/AnchorResolution.js +0 -162
  603. package/dist/anchored-edits/AnchorResolution.js.map +0 -1
  604. package/dist/anchored-edits/Factory.d.ts +0 -56
  605. package/dist/anchored-edits/Factory.d.ts.map +0 -1
  606. package/dist/anchored-edits/Factory.js +0 -79
  607. package/dist/anchored-edits/Factory.js.map +0 -1
  608. package/dist/anchored-edits/PersistedTypes.d.ts +0 -245
  609. package/dist/anchored-edits/PersistedTypes.d.ts.map +0 -1
  610. package/dist/anchored-edits/PersistedTypes.js +0 -131
  611. package/dist/anchored-edits/PersistedTypes.js.map +0 -1
  612. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  613. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  614. package/dist/anchored-edits/SharedTreeWithAnchors.js +0 -115
  615. package/dist/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  616. package/dist/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  617. package/dist/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  618. package/dist/anchored-edits/TransactionWithAnchors.js +0 -36
  619. package/dist/anchored-edits/TransactionWithAnchors.js.map +0 -1
  620. package/dist/anchored-edits/index.d.ts +0 -10
  621. package/dist/anchored-edits/index.d.ts.map +0 -1
  622. package/dist/anchored-edits/index.js +0 -34
  623. package/dist/anchored-edits/index.js.map +0 -1
  624. package/dist/default-edits/EditUtilities.d.ts +0 -57
  625. package/dist/default-edits/EditUtilities.d.ts.map +0 -1
  626. package/dist/default-edits/EditUtilities.js +0 -192
  627. package/dist/default-edits/EditUtilities.js.map +0 -1
  628. package/dist/default-edits/Factory.d.ts +0 -56
  629. package/dist/default-edits/Factory.d.ts.map +0 -1
  630. package/dist/default-edits/Factory.js +0 -79
  631. package/dist/default-edits/Factory.js.map +0 -1
  632. package/dist/default-edits/HistoryEditFactory.d.ts +0 -19
  633. package/dist/default-edits/HistoryEditFactory.d.ts.map +0 -1
  634. package/dist/default-edits/HistoryEditFactory.js +0 -187
  635. package/dist/default-edits/HistoryEditFactory.js.map +0 -1
  636. package/dist/default-edits/PersistedTypes.d.ts.map +0 -1
  637. package/dist/default-edits/PersistedTypes.js.map +0 -1
  638. package/dist/default-edits/SharedTree.d.ts +0 -111
  639. package/dist/default-edits/SharedTree.d.ts.map +0 -1
  640. package/dist/default-edits/SharedTree.js +0 -124
  641. package/dist/default-edits/SharedTree.js.map +0 -1
  642. package/dist/default-edits/Summary.d.ts +0 -15
  643. package/dist/default-edits/Summary.d.ts.map +0 -1
  644. package/dist/default-edits/Summary.js +0 -35
  645. package/dist/default-edits/Summary.js.map +0 -1
  646. package/dist/default-edits/Transaction.d.ts +0 -41
  647. package/dist/default-edits/Transaction.d.ts.map +0 -1
  648. package/dist/default-edits/Transaction.js +0 -225
  649. package/dist/default-edits/Transaction.js.map +0 -1
  650. package/dist/default-edits/UndoRedoHandler.d.ts.map +0 -1
  651. package/dist/default-edits/UndoRedoHandler.js.map +0 -1
  652. package/dist/default-edits/index.d.ts +0 -13
  653. package/dist/default-edits/index.d.ts.map +0 -1
  654. package/dist/default-edits/index.js +0 -41
  655. package/dist/default-edits/index.js.map +0 -1
  656. package/dist/generic/GenericEditUtilities.d.ts +0 -26
  657. package/dist/generic/GenericEditUtilities.d.ts.map +0 -1
  658. package/dist/generic/GenericEditUtilities.js +0 -45
  659. package/dist/generic/GenericEditUtilities.js.map +0 -1
  660. package/dist/generic/GenericSharedTree.d.ts +0 -221
  661. package/dist/generic/GenericSharedTree.d.ts.map +0 -1
  662. package/dist/generic/GenericSharedTree.js +0 -447
  663. package/dist/generic/GenericSharedTree.js.map +0 -1
  664. package/dist/generic/GenericTransaction.d.ts +0 -87
  665. package/dist/generic/GenericTransaction.d.ts.map +0 -1
  666. package/dist/generic/GenericTransaction.js +0 -144
  667. package/dist/generic/GenericTransaction.js.map +0 -1
  668. package/dist/generic/PersistedTypes.d.ts +0 -194
  669. package/dist/generic/PersistedTypes.d.ts.map +0 -1
  670. package/dist/generic/PersistedTypes.js +0 -42
  671. package/dist/generic/PersistedTypes.js.map +0 -1
  672. package/dist/generic/Summary.d.ts +0 -63
  673. package/dist/generic/Summary.d.ts.map +0 -1
  674. package/dist/generic/Summary.js +0 -64
  675. package/dist/generic/Summary.js.map +0 -1
  676. package/dist/generic/index.d.ts +0 -10
  677. package/dist/generic/index.d.ts.map +0 -1
  678. package/dist/generic/index.js +0 -26
  679. package/dist/generic/index.js.map +0 -1
  680. package/docs/Future.md +0 -155
  681. package/lib/BasicCheckout.d.ts +0 -23
  682. package/lib/BasicCheckout.d.ts.map +0 -1
  683. package/lib/BasicCheckout.js.map +0 -1
  684. package/lib/Snapshot.d.ts +0 -198
  685. package/lib/Snapshot.d.ts.map +0 -1
  686. package/lib/Snapshot.js +0 -263
  687. package/lib/Snapshot.js.map +0 -1
  688. package/lib/SnapshotUtilities.d.ts +0 -29
  689. package/lib/SnapshotUtilities.d.ts.map +0 -1
  690. package/lib/SnapshotUtilities.js +0 -67
  691. package/lib/SnapshotUtilities.js.map +0 -1
  692. package/lib/anchored-edits/AnchorResolution.d.ts +0 -144
  693. package/lib/anchored-edits/AnchorResolution.d.ts.map +0 -1
  694. package/lib/anchored-edits/AnchorResolution.js +0 -152
  695. package/lib/anchored-edits/AnchorResolution.js.map +0 -1
  696. package/lib/anchored-edits/Factory.d.ts +0 -56
  697. package/lib/anchored-edits/Factory.d.ts.map +0 -1
  698. package/lib/anchored-edits/Factory.js +0 -74
  699. package/lib/anchored-edits/Factory.js.map +0 -1
  700. package/lib/anchored-edits/PersistedTypes.d.ts +0 -245
  701. package/lib/anchored-edits/PersistedTypes.d.ts.map +0 -1
  702. package/lib/anchored-edits/PersistedTypes.js +0 -128
  703. package/lib/anchored-edits/PersistedTypes.js.map +0 -1
  704. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  705. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  706. package/lib/anchored-edits/SharedTreeWithAnchors.js +0 -110
  707. package/lib/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  708. package/lib/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  709. package/lib/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  710. package/lib/anchored-edits/TransactionWithAnchors.js +0 -32
  711. package/lib/anchored-edits/TransactionWithAnchors.js.map +0 -1
  712. package/lib/anchored-edits/index.d.ts +0 -10
  713. package/lib/anchored-edits/index.d.ts.map +0 -1
  714. package/lib/anchored-edits/index.js +0 -11
  715. package/lib/anchored-edits/index.js.map +0 -1
  716. package/lib/default-edits/EditUtilities.d.ts +0 -57
  717. package/lib/default-edits/EditUtilities.d.ts.map +0 -1
  718. package/lib/default-edits/EditUtilities.js +0 -181
  719. package/lib/default-edits/EditUtilities.js.map +0 -1
  720. package/lib/default-edits/Factory.d.ts +0 -56
  721. package/lib/default-edits/Factory.d.ts.map +0 -1
  722. package/lib/default-edits/Factory.js +0 -74
  723. package/lib/default-edits/Factory.js.map +0 -1
  724. package/lib/default-edits/HistoryEditFactory.d.ts +0 -19
  725. package/lib/default-edits/HistoryEditFactory.d.ts.map +0 -1
  726. package/lib/default-edits/HistoryEditFactory.js.map +0 -1
  727. package/lib/default-edits/PersistedTypes.d.ts.map +0 -1
  728. package/lib/default-edits/PersistedTypes.js.map +0 -1
  729. package/lib/default-edits/SharedTree.d.ts +0 -111
  730. package/lib/default-edits/SharedTree.d.ts.map +0 -1
  731. package/lib/default-edits/SharedTree.js +0 -100
  732. package/lib/default-edits/SharedTree.js.map +0 -1
  733. package/lib/default-edits/Summary.d.ts +0 -15
  734. package/lib/default-edits/Summary.d.ts.map +0 -1
  735. package/lib/default-edits/Summary.js +0 -31
  736. package/lib/default-edits/Summary.js.map +0 -1
  737. package/lib/default-edits/Transaction.d.ts +0 -41
  738. package/lib/default-edits/Transaction.d.ts.map +0 -1
  739. package/lib/default-edits/Transaction.js +0 -221
  740. package/lib/default-edits/Transaction.js.map +0 -1
  741. package/lib/default-edits/UndoRedoHandler.d.ts.map +0 -1
  742. package/lib/default-edits/UndoRedoHandler.js.map +0 -1
  743. package/lib/default-edits/index.d.ts +0 -13
  744. package/lib/default-edits/index.d.ts.map +0 -1
  745. package/lib/default-edits/index.js +0 -14
  746. package/lib/default-edits/index.js.map +0 -1
  747. package/lib/generic/GenericEditUtilities.d.ts +0 -26
  748. package/lib/generic/GenericEditUtilities.d.ts.map +0 -1
  749. package/lib/generic/GenericEditUtilities.js +0 -38
  750. package/lib/generic/GenericEditUtilities.js.map +0 -1
  751. package/lib/generic/GenericSharedTree.d.ts +0 -221
  752. package/lib/generic/GenericSharedTree.d.ts.map +0 -1
  753. package/lib/generic/GenericSharedTree.js +0 -443
  754. package/lib/generic/GenericSharedTree.js.map +0 -1
  755. package/lib/generic/GenericTransaction.d.ts +0 -87
  756. package/lib/generic/GenericTransaction.d.ts.map +0 -1
  757. package/lib/generic/GenericTransaction.js +0 -140
  758. package/lib/generic/GenericTransaction.js.map +0 -1
  759. package/lib/generic/PersistedTypes.d.ts +0 -194
  760. package/lib/generic/PersistedTypes.d.ts.map +0 -1
  761. package/lib/generic/PersistedTypes.js +0 -39
  762. package/lib/generic/PersistedTypes.js.map +0 -1
  763. package/lib/generic/Summary.d.ts +0 -63
  764. package/lib/generic/Summary.d.ts.map +0 -1
  765. package/lib/generic/Summary.js +0 -58
  766. package/lib/generic/Summary.js.map +0 -1
  767. package/lib/generic/index.d.ts +0 -10
  768. package/lib/generic/index.d.ts.map +0 -1
  769. package/lib/generic/index.js +0 -11
  770. package/lib/generic/index.js.map +0 -1
  771. package/lib/test/Anchors.glassBox.tests.d.ts.map +0 -1
  772. package/lib/test/Anchors.glassBox.tests.js +0 -410
  773. package/lib/test/Anchors.glassBox.tests.js.map +0 -1
  774. package/lib/test/BasicCheckout.tests.d.ts.map +0 -1
  775. package/lib/test/BasicCheckout.tests.js +0 -8
  776. package/lib/test/BasicCheckout.tests.js.map +0 -1
  777. package/lib/test/GenericTransactionWithAnchors.tests.d.ts.map +0 -1
  778. package/lib/test/GenericTransactionWithAnchors.tests.js +0 -25
  779. package/lib/test/GenericTransactionWithAnchors.tests.js.map +0 -1
  780. package/lib/test/SharedTreeWithAnchors.tests.d.ts.map +0 -1
  781. package/lib/test/SharedTreeWithAnchors.tests.js +0 -420
  782. package/lib/test/SharedTreeWithAnchors.tests.js.map +0 -1
  783. package/lib/test/Snapshot.tests.d.ts.map +0 -1
  784. package/lib/test/Snapshot.tests.js +0 -96
  785. package/lib/test/Snapshot.tests.js.map +0 -1
  786. package/lib/test/SnapshotUtilities.tests.d.ts.map +0 -1
  787. package/lib/test/SnapshotUtilities.tests.js +0 -168
  788. package/lib/test/SnapshotUtilities.tests.js.map +0 -1
  789. package/lib/test/undoRedoStackManager.d.ts +0 -26
  790. package/lib/test/undoRedoStackManager.d.ts.map +0 -1
  791. package/lib/test/undoRedoStackManager.js +0 -176
  792. package/lib/test/undoRedoStackManager.js.map +0 -1
  793. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts +0 -13
  794. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts.map +0 -1
  795. package/lib/test/utilities/SummaryFormatCompatibilityTests.js +0 -154
  796. package/lib/test/utilities/SummaryFormatCompatibilityTests.js.map +0 -1
  797. package/src/BasicCheckout.ts +0 -34
  798. package/src/Snapshot.ts +0 -363
  799. package/src/SnapshotUtilities.ts +0 -88
  800. package/src/anchored-edits/AnchorResolution.ts +0 -442
  801. package/src/anchored-edits/Factory.ts +0 -94
  802. package/src/anchored-edits/PersistedTypes.ts +0 -310
  803. package/src/anchored-edits/SharedTreeWithAnchors.ts +0 -200
  804. package/src/anchored-edits/TransactionWithAnchors.ts +0 -39
  805. package/src/anchored-edits/index.ts +0 -21
  806. package/src/default-edits/EditUtilities.ts +0 -220
  807. package/src/default-edits/Factory.ts +0 -94
  808. package/src/default-edits/SharedTree.ts +0 -174
  809. package/src/default-edits/Summary.ts +0 -44
  810. package/src/default-edits/Transaction.ts +0 -262
  811. package/src/default-edits/index.ts +0 -29
  812. package/src/generic/GenericEditUtilities.ts +0 -46
  813. package/src/generic/GenericSharedTree.ts +0 -593
  814. package/src/generic/GenericTransaction.ts +0 -194
  815. package/src/generic/PersistedTypes.ts +0 -221
  816. package/src/generic/Summary.ts +0 -113
  817. package/src/generic/index.ts +0 -41
@@ -5,73 +5,125 @@
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';
14
- 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) {
8
+ import { CachingLogViewer, } from '../LogViewer';
9
+ import { assert, copyPropertyIfDefined } from '../Common';
10
+ import { initialTree } from '../InitialTree';
11
+ import { ChangeInternal, ChangeTypeInternal, 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';
18
+ import { refreshTestTree, testTraitLabel } from './utilities/TestUtilities';
19
+ /**
20
+ * Creates an {@link EditLog} and accompanying {@link RevisionView} with pre-existing edits.
21
+ *
22
+ * @remarks Intended to be used with {@link getSimpleLogBaseView}
23
+ * @param testTree - Test tree to work on
24
+ * @param numEdits - The number of edits to make to the base tree
25
+ */
26
+ function getTestTreeLog(testTree) {
27
+ const log = new EditLog();
28
+ log.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeaf(testTree.left.identifier)], StablePlaceInternal.atStartOf(testTree.left.traitLocation))), { sequenceNumber: 1, referenceSequenceNumber: 0 });
29
+ log.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeaf(testTree.right.identifier)], StablePlaceInternal.atStartOf(testTree.right.traitLocation))), { sequenceNumber: 2, referenceSequenceNumber: 1 });
30
+ return log;
31
+ }
32
+ function getLogWithNumEdits(nodeIdContext, numEdits) {
18
33
  const log = new EditLog();
19
34
  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 });
35
+ log.addSequencedEdit(newEdit(ChangeInternal.insertTree([buildLeaf(nodeIdContext.generateNodeId())], StablePlaceInternal.atStartOf({
36
+ label: testTraitLabel,
37
+ parent: nodeIdContext.convertToNodeId(initialTree.identifier),
38
+ }))), {
39
+ sequenceNumber: i + 1,
40
+ referenceSequenceNumber: i,
41
+ });
23
42
  }
24
43
  return log;
25
44
  }
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))));
45
+ /**
46
+ * Get a base view for a log created with {@link getTestTreeLog}.
47
+ * This can then be used to construct a {@link LogViewer} for that log.
48
+ *
49
+ * @param testTree - Test tree to work from
50
+ */
51
+ function getSimpleLogBaseView(testTree) {
52
+ const node = { definition: testTree.definition, identifier: testTree.identifier, traits: {} };
53
+ copyPropertyIfDefined(testTree, node, 'payload');
54
+ return RevisionView.fromTree(node);
55
+ }
56
+ function getSimpleLogWithLocalEdits(testTree) {
57
+ const logWithLocalEdits = getTestTreeLog(testTree);
58
+ logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.left.traitLocation))));
59
+ logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))));
60
+ logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.left.traitLocation))));
31
61
  return logWithLocalEdits;
32
62
  }
33
- function getSnapshotsForLog(log, baseSnapshot) {
34
- const snapshots = [baseSnapshot];
63
+ function getViewsForLog(log, baseView) {
64
+ const views = [baseView];
35
65
  for (let i = 0; i < log.length; i++) {
36
66
  const edit = log.getEditInSessionAtIndex(i);
37
- snapshots.push(new Transaction(snapshots[i]).applyChanges(edit.changes).view);
67
+ const result = TransactionInternal.factory(views[i]).applyChanges(edit.changes).close();
68
+ if (result.status === EditStatus.Applied) {
69
+ views.push(result.after);
70
+ }
71
+ else {
72
+ expect.fail('edit failed to apply');
73
+ }
38
74
  }
39
- return snapshots;
75
+ return views;
40
76
  }
41
77
  function runLogViewerCorrectnessTests(viewerCreator) {
42
78
  return describe('LogViewer', () => {
43
- const log = getSimpleLog();
79
+ let simpleLog;
80
+ let simpleLogBaseView;
81
+ let simpleLogInitialView;
82
+ const testTree = refreshTestTree(undefined, (t) => {
83
+ simpleLogBaseView = getSimpleLogBaseView(t);
84
+ simpleLog = getTestTreeLog(t);
85
+ simpleLogInitialView = t.view;
86
+ });
44
87
  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;
88
+ const viewer = viewerCreator(new EditLog(), simpleLogBaseView);
89
+ const headView = viewer.getRevisionViewInSession(0);
90
+ expect(headView.equals(expectDefined(RevisionView.fromTree(initialTree, testTree))));
48
91
  });
49
92
  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;
93
+ const viewer = viewerCreator(simpleLog, simpleLogBaseView);
94
+ const headView = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
95
+ expect(areRevisionViewsSemanticallyEqual(headView, testTree, simpleLogInitialView, testTree));
96
+ expect(headView.equals(simpleLogInitialView)).to.be.true;
53
97
  });
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;
98
+ it('can generate all revision views for an EditLog', () => {
99
+ const baseView = expectDefined(RevisionView.fromTree(initialTree, testTree));
100
+ const numNodes = 10;
101
+ const viewer = viewerCreator(getLogWithNumEdits(testTree, numNodes), baseView);
102
+ const initialRevision = viewer.getRevisionViewInSession(0);
103
+ expect(initialRevision.equals(baseView)).to.be.true;
104
+ expect(initialRevision.size).to.equal(1);
105
+ const oneNodeView = viewer.getRevisionViewInSession(1);
106
+ const testTrait = {
107
+ label: testTraitLabel,
108
+ parent: testTree.convertToNodeId(initialTree.identifier),
109
+ };
110
+ expect(oneNodeView.getTrait(testTrait).length).to.equal(1);
111
+ const twoNodeView = viewer.getRevisionViewInSession(2);
112
+ expect(twoNodeView.getTrait(testTrait).length).to.equal(2);
113
+ const finalView = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
114
+ expect(finalView.getTrait(testTrait).length).to.equal(numNodes);
62
115
  });
63
- it('produces correct snapshots when the log is mutated', () => {
64
- const simpleLog = getSimpleLog();
116
+ it('produces correct revision views when the log is mutated', () => {
65
117
  const mutableLog = new EditLog();
66
- const viewer = viewerCreator(mutableLog, simpleSnapshotNoTraits);
67
- const snapshotsForLog = getSnapshotsForLog(simpleLog, simpleSnapshotNoTraits);
118
+ const viewer = viewerCreator(mutableLog, simpleLogBaseView);
119
+ const viewsForLog = getViewsForLog(simpleLog, simpleLogBaseView);
68
120
  // 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.
121
+ // After each addition, the test code will iterate from [0, length_of_A] and get a view for each revision via LogViewer
122
+ // and assert that none of the views differ from those created via pure Transaction APIs.
71
123
  for (let i = 0; i <= simpleLog.length; i++) {
72
124
  for (let j = 0; j <= mutableLog.length; j++) {
73
- const viewerSnapshot = viewer.getSnapshotInSession(j);
74
- expect(viewerSnapshot.equals(snapshotsForLog[j])).to.be.true;
125
+ const viewerView = viewer.getRevisionViewInSession(j);
126
+ expect(viewerView.equals(viewsForLog[j])).to.be.true;
75
127
  }
76
128
  // Revisions are from [0, simpleLog.length], edits are at indices [0, simpleLog.length)
77
129
  if (i < simpleLog.length) {
@@ -80,95 +132,111 @@ function runLogViewerCorrectnessTests(viewerCreator) {
80
132
  }
81
133
  }
82
134
  });
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 = [];
135
+ it('produces correct revision views when local edits are shifted in the log due to sequenced edits being added', () => {
136
+ function getViewsFromViewer(viewer, lastRevision) {
137
+ const views = [];
86
138
  for (let i = 0; i <= lastRevision; i++) {
87
- snapshots.push(viewer.getSnapshotInSession(i));
139
+ views.push(viewer.getRevisionViewInSession(i));
88
140
  }
89
- return snapshots;
141
+ return views;
90
142
  }
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;
143
+ function expectViewsAreEqual(log, viewer) {
144
+ const viewsForLog = getViewsForLog(log, simpleLogBaseView);
145
+ const viewsForViewer = getViewsFromViewer(viewer, log.length);
146
+ expect(viewsForLog.length).to.equal(viewsForViewer.length);
147
+ for (let i = 0; i < viewsForLog.length; i++) {
148
+ expect(viewsForLog[i].equals(viewsForViewer[i])).to.be.true;
97
149
  }
98
150
  }
99
- const logWithLocalEdits = getSimpleLogWithLocalEdits();
100
- const viewer = viewerCreator(logWithLocalEdits, simpleSnapshotNoTraits);
101
- expectSnapshotsAreEqual(logWithLocalEdits, viewer);
151
+ const logWithLocalEdits = getSimpleLogWithLocalEdits(testTree);
152
+ const viewer = viewerCreator(logWithLocalEdits, simpleLogBaseView);
153
+ expectViewsAreEqual(logWithLocalEdits, viewer);
102
154
  let seqNumber = 1;
103
- // Sequence the existing local edits and ensure viewer generates the correct snapshots
155
+ // Sequence the existing local edits and ensure viewer generates the correct views
104
156
  while (logWithLocalEdits.numberOfLocalEdits > 0) {
105
157
  // Add a remote sequenced edit
106
- logWithLocalEdits.addSequencedEdit(newEdit(Insert.create([makeEmptyNode()], StablePlace.atStartOf(rightTraitLocation))), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
158
+ logWithLocalEdits.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atStartOf(testTree.right.traitLocation))), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
107
159
  ++seqNumber;
108
- expectSnapshotsAreEqual(logWithLocalEdits, viewer);
160
+ expectViewsAreEqual(logWithLocalEdits, viewer);
109
161
  // Sequence a local edit
110
162
  logWithLocalEdits.addSequencedEdit(logWithLocalEdits.getEditInSessionAtIndex(logWithLocalEdits.numberOfSequencedEdits), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
111
163
  ++seqNumber;
112
- expectSnapshotsAreEqual(logWithLocalEdits, viewer);
164
+ expectViewsAreEqual(logWithLocalEdits, viewer);
113
165
  }
114
166
  });
115
167
  });
116
168
  }
117
169
  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);
170
+ // TODO: Dedupe? shared hook for getting all of this stuff?
171
+ let simpleLog;
172
+ let simpleLogBaseView;
173
+ let simpleLogInitialView;
174
+ // An arbitrary revision view which can be used to check to see if it gets used when provided as a cached value.
175
+ let arbitraryRevisionView;
176
+ const testTree = refreshTestTree(undefined, (t) => {
177
+ simpleLogBaseView = getSimpleLogBaseView(t);
178
+ simpleLog = getTestTreeLog(t);
179
+ simpleLogInitialView = t.view;
180
+ arbitraryRevisionView = RevisionView.fromTree(t.buildLeaf(t.generateNodeId()));
181
+ });
182
+ function getCachingLogViewerAssumeAppliedEdits(log, baseView, editStatusCallback, sequencedEditResultCallback, knownRevisions) {
183
+ return new CachingLogViewer(log, baseView, knownRevisions === null || knownRevisions === void 0 ? void 0 : knownRevisions.map((pair) => [pair[0], { view: pair[1], result: EditStatus.Applied }]),
184
+ /* expensiveValidation */ true, editStatusCallback, sequencedEditResultCallback, log.numberOfSequencedEdits);
124
185
  }
125
186
  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');
187
+ it('detects non-integer revisions when setting revision views', async () => {
188
+ expect(() => {
189
+ return getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, undefined, undefined, [
190
+ [2.4, simpleLogInitialView],
191
+ ]);
192
+ }).to.throw('revision must be an integer');
130
193
  });
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');
194
+ it('detects out-of-bounds revisions when setting revision views', async () => {
195
+ expect(() => {
196
+ return getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, undefined, undefined, [
197
+ [1000, simpleLogInitialView],
198
+ ]);
199
+ }).to.throw('revision must correspond to the result of a SequencedEdit');
135
200
  });
136
201
  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;
202
+ const views = getViewsForLog(simpleLog, simpleLogBaseView);
203
+ const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, undefined, undefined, Array.from(views.keys()).map((revision) => [revision, views[revision]]));
204
+ for (let i = simpleLog.length; i >= 0; i--) {
205
+ expect(viewer.getRevisionViewInSession(i).equals(views[i])).to.be.true;
143
206
  }
144
207
  });
145
- async function requestAllSnapshots(viewer, log) {
208
+ async function requestAllRevisionViews(viewer, log) {
146
209
  for (let i = 0; i <= log.length; i++) {
147
- await viewer.getSnapshot(i);
210
+ await viewer.getRevisionView(i);
148
211
  }
149
212
  }
150
- it('caches snapshots for sequenced edits', async () => {
151
- const log = getSimpleLog();
213
+ it('caches revision views for sequenced edits', async () => {
152
214
  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);
215
+ const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, () => editsProcessed++);
216
+ assert(simpleLog.length < CachingLogViewer.sequencedCacheSizeMax);
217
+ await requestAllRevisionViews(viewer, simpleLog);
218
+ expect(editsProcessed).to.equal(simpleLog.length);
219
+ // Ask for every view; no edit application should occur, since the views will be cached.
220
+ for (let i = 0; i <= simpleLog.length; i++) {
221
+ await viewer.getRevisionView(i);
160
222
  }
161
- expect(editsProcessed).to.equal(log.length);
223
+ expect(editsProcessed).to.equal(simpleLog.length);
162
224
  });
163
225
  it('caches edit results for sequenced edits', async () => {
164
- const log = getSimpleLog(2);
165
226
  // Add an invalid edit
166
- log.addSequencedEdit(newEdit([Change.constraint(StableRange.only(left), ConstraintEffect.InvalidAndDiscard, undefined, 0)]), { sequenceNumber: 3, referenceSequenceNumber: 2, minimumSequenceNumber: 2 });
227
+ simpleLog.addSequencedEdit(newEdit([
228
+ {
229
+ type: ChangeTypeInternal.Constraint,
230
+ toConstrain: StableRange.only(testTree.left),
231
+ effect: ConstraintEffect.InvalidAndDiscard,
232
+ length: 0,
233
+ },
234
+ ]), { sequenceNumber: 3, referenceSequenceNumber: 2, minimumSequenceNumber: 2 });
167
235
  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);
236
+ const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, () => editsProcessed++);
237
+ assert(simpleLog.length < CachingLogViewer.sequencedCacheSizeMax);
238
+ await requestAllRevisionViews(viewer, simpleLog);
239
+ expect(editsProcessed).to.equal(simpleLog.length);
172
240
  expect((await viewer.getEditResult(0)).status).equals(undefined);
173
241
  expect((await viewer.getEditResult(1)).status).equals(EditStatus.Applied);
174
242
  expect((await viewer.getEditResult(2)).status).equals(EditStatus.Applied);
@@ -178,209 +246,226 @@ describe('CachingLogViewer', () => {
178
246
  expect(viewer.getEditResultInSession(2).status).equals(EditStatus.Applied);
179
247
  expect(viewer.getEditResultInSession(3).status).equals(EditStatus.Invalid);
180
248
  });
181
- it('evicts least recently set cached snapshots for sequenced edits', async () => {
249
+ it('caches the highest revision', async () => {
250
+ const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView);
251
+ expect(viewer.highestRevisionCached()).to.be.false;
252
+ await requestAllRevisionViews(viewer, simpleLog);
253
+ expect(viewer.highestRevisionCached()).to.be.true;
254
+ simpleLog.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))));
255
+ simpleLog.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))), {
256
+ sequenceNumber: 3,
257
+ referenceSequenceNumber: 2,
258
+ minimumSequenceNumber: 2,
259
+ });
260
+ expect(viewer.highestRevisionCached()).to.be.false;
261
+ });
262
+ it('evicts least recently set cached revision views for sequenced edits', async () => {
182
263
  let editsProcessed = 0;
183
- const log = getSimpleLog(CachingLogViewer.sequencedCacheSizeMax * 2);
184
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, () => editsProcessed++);
264
+ const log = getLogWithNumEdits(testTree, CachingLogViewer.sequencedCacheSizeMax * 2);
265
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, expectDefined(RevisionView.fromTree(initialTree, testTree)), () => editsProcessed++);
185
266
  viewer.setMinimumSequenceNumber(log.length + 1); // simulate all edits being subject to eviction
186
- await requestAllSnapshots(viewer, log);
267
+ await requestAllRevisionViews(viewer, log);
187
268
  expect(editsProcessed).to.equal(log.length);
188
269
  editsProcessed = 0;
189
270
  for (let i = CachingLogViewer.sequencedCacheSizeMax + 1; i <= log.length; i++) {
190
- await viewer.getSnapshot(i);
271
+ await viewer.getRevisionView(i);
191
272
  }
192
273
  expect(editsProcessed).to.equal(0);
193
- await viewer.getSnapshot(CachingLogViewer.sequencedCacheSizeMax);
274
+ await viewer.getRevisionView(CachingLogViewer.sequencedCacheSizeMax);
194
275
  expect(editsProcessed).to.equal(CachingLogViewer.sequencedCacheSizeMax);
195
276
  });
196
- it('never evicts the snapshot for the most recent sequenced edit', async () => {
277
+ it('never evicts the revision view for the most recent sequenced edit', async () => {
197
278
  let editsProcessed = 0;
198
- const log = getSimpleLog(CachingLogViewer.sequencedCacheSizeMax * 2);
199
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, () => editsProcessed++);
279
+ const log = getLogWithNumEdits(testTree, CachingLogViewer.sequencedCacheSizeMax * 2);
280
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, expectDefined(RevisionView.fromTree(initialTree, testTree)), () => editsProcessed++);
200
281
  // Simulate all clients being caught up.
201
282
  viewer.setMinimumSequenceNumber(log.numberOfSequencedEdits);
202
- await requestAllSnapshots(viewer, log);
283
+ await requestAllRevisionViews(viewer, log);
203
284
  expect(editsProcessed).to.equal(log.length);
204
285
  editsProcessed = 0;
205
286
  for (let i = 0; i <= CachingLogViewer.sequencedCacheSizeMax; i++) {
206
- await viewer.getSnapshot(i);
287
+ await viewer.getRevisionView(i);
207
288
  }
208
289
  expect(editsProcessed).to.equal(CachingLogViewer.sequencedCacheSizeMax);
209
290
  editsProcessed = 0;
210
- await viewer.getSnapshot(log.numberOfSequencedEdits);
291
+ await viewer.getRevisionView(log.numberOfSequencedEdits);
211
292
  expect(editsProcessed).to.equal(0);
212
293
  });
213
- it('caches snapshots for local revisions', async () => {
214
- const logWithLocalEdits = getSimpleLogWithLocalEdits();
294
+ it('caches revision views for local revisions', async () => {
295
+ const logWithLocalEdits = getSimpleLogWithLocalEdits(testTree);
215
296
  let editsProcessed = 0;
216
- const viewer = getCachingLogViewerAssumeAppliedEdits(logWithLocalEdits, simpleSnapshotNoTraits, () => editsProcessed++);
297
+ const viewer = getCachingLogViewerAssumeAppliedEdits(logWithLocalEdits, simpleLogBaseView, () => editsProcessed++);
217
298
  assert(logWithLocalEdits.length < CachingLogViewer.sequencedCacheSizeMax);
218
- await requestAllSnapshots(viewer, logWithLocalEdits);
299
+ await requestAllRevisionViews(viewer, logWithLocalEdits);
219
300
  expect(editsProcessed).to.equal(logWithLocalEdits.length);
220
301
  // Local edits should now be cached until next remote sequenced edit arrives
221
302
  editsProcessed = 0;
222
303
  for (let i = logWithLocalEdits.numberOfSequencedEdits + 1; i <= logWithLocalEdits.length; i++) {
223
- await viewer.getSnapshot(i);
304
+ await viewer.getRevisionView(i);
224
305
  expect(editsProcessed).to.equal(0);
225
306
  }
226
307
  // Add a new local edit, and request the latest view.
227
308
  // This should apply only a single edit, as the most recent HEAD should be cached.
228
309
  editsProcessed = 0;
229
- logWithLocalEdits.addLocalEdit(newEdit(Insert.create([makeEmptyNode()], StablePlace.atEndOf(rightTraitLocation))));
230
- await requestAllSnapshots(viewer, logWithLocalEdits);
310
+ logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))));
311
+ await requestAllRevisionViews(viewer, logWithLocalEdits);
231
312
  expect(editsProcessed).to.equal(1);
232
313
  editsProcessed = 0;
233
314
  let seqNumber = 1;
234
315
  while (logWithLocalEdits.numberOfLocalEdits > 0) {
235
316
  logWithLocalEdits.addSequencedEdit(logWithLocalEdits.getEditInSessionAtIndex(logWithLocalEdits.numberOfSequencedEdits), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
236
317
  ++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
318
+ await viewer.getRevisionView(logWithLocalEdits.numberOfSequencedEdits); // get the latest (just added) sequenced edit
319
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY); // get the last view, which is a local revision
239
320
  expect(editsProcessed).to.equal(0);
240
321
  }
241
322
  });
242
- it('invalidates cached snapshots for local revisions when remote edits are received', () => {
243
- const logWithLocalEdits = getSimpleLogWithLocalEdits();
323
+ it('invalidates cached revision views for local revisions when remote edits are received', () => {
324
+ const logWithLocalEdits = getSimpleLogWithLocalEdits(testTree);
244
325
  let editsProcessed = 0;
245
- const viewer = getCachingLogViewerAssumeAppliedEdits(logWithLocalEdits, simpleSnapshotNoTraits, () => editsProcessed++);
326
+ const viewer = getCachingLogViewerAssumeAppliedEdits(logWithLocalEdits, simpleLogBaseView, () => editsProcessed++);
246
327
  // Request twice, should only process edits once
247
- viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
248
- viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
328
+ viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
329
+ viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
249
330
  expect(editsProcessed).to.equal(logWithLocalEdits.length);
250
331
  // Remote edit arrives
251
332
  editsProcessed = 0;
252
- logWithLocalEdits.addSequencedEdit(newEdit(Insert.create([makeEmptyNode()], StablePlace.atEndOf(rightTraitLocation))), { sequenceNumber: 3, referenceSequenceNumber: 2, minimumSequenceNumber: 2 });
253
- viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
333
+ logWithLocalEdits.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))), { sequenceNumber: 3, referenceSequenceNumber: 2, minimumSequenceNumber: 2 });
334
+ viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
254
335
  expect(editsProcessed).to.equal(logWithLocalEdits.numberOfLocalEdits + 1);
255
336
  });
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
337
  it('uses known editing result', () => {
259
338
  const log = new EditLog();
260
339
  const editsProcessed = [];
261
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, (_, _2, wasCached) => editsProcessed.push(wasCached));
262
- const before = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
340
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
341
+ const before = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
263
342
  const edit = newEdit([]);
264
343
  log.addLocalEdit(edit);
265
344
  viewer.setKnownEditingResult(edit, {
266
345
  status: EditStatus.Applied,
267
346
  changes: edit.changes,
268
347
  before,
269
- after: arbitrarySnapshot,
348
+ after: arbitraryRevisionView,
270
349
  steps: [],
271
350
  });
272
- const after = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
351
+ const after = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
273
352
  expect(editsProcessed).deep.equal([true]);
274
- expect(after).equal(arbitrarySnapshot);
353
+ expect(after).equal(arbitraryRevisionView);
275
354
  });
276
- it('ignores known editing if for wrong before snapshot', () => {
355
+ it('ignores known editing if for wrong before revision view', () => {
277
356
  const log = new EditLog();
278
357
  const editsProcessed = [];
279
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, (_, _2, wasCached) => editsProcessed.push(wasCached));
358
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
280
359
  const edit = newEdit([]);
281
360
  log.addLocalEdit(edit);
282
361
  viewer.setKnownEditingResult(edit, {
283
362
  status: EditStatus.Applied,
284
363
  changes: edit.changes,
285
- before: arbitrarySnapshot,
286
- after: arbitrarySnapshot,
364
+ before: arbitraryRevisionView,
365
+ after: arbitraryRevisionView,
287
366
  steps: [],
288
367
  });
289
- const after = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
368
+ const after = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
290
369
  expect(editsProcessed).deep.equal([false]);
291
- expect(after).not.equal(arbitrarySnapshot);
370
+ expect(after).not.equal(arbitraryRevisionView);
292
371
  });
293
372
  it('ignores known editing if for wrong edit', () => {
294
373
  const log = new EditLog();
295
374
  const editsProcessed = [];
296
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, (_, _2, wasCached) => editsProcessed.push(wasCached));
297
- const before = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
375
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
376
+ const before = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
298
377
  const edit = newEdit([]);
299
378
  log.addLocalEdit(edit);
300
379
  viewer.setKnownEditingResult(newEdit([]), {
301
380
  status: EditStatus.Applied,
302
381
  changes: edit.changes,
303
382
  before,
304
- after: arbitrarySnapshot,
383
+ after: arbitraryRevisionView,
305
384
  steps: [],
306
385
  });
307
- const after = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
386
+ const after = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
308
387
  expect(editsProcessed).deep.equal([false]);
309
- expect(after).not.equal(arbitrarySnapshot);
388
+ expect(after).not.equal(arbitraryRevisionView);
310
389
  });
311
390
  it('uses known editing result with multiple edits', () => {
312
391
  const log = new EditLog();
313
392
  const editsProcessed = [];
314
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleSnapshotNoTraits, (_, _2, wasCached) => editsProcessed.push(wasCached));
393
+ const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
315
394
  const edit1 = newEdit([]);
316
395
  const edit2 = newEdit([]);
317
396
  const edit3 = newEdit([]);
318
397
  log.addLocalEdit(edit1);
319
- const before = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
398
+ const before = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
320
399
  expect(editsProcessed).deep.equal([false]);
321
400
  log.addLocalEdit(edit2);
322
401
  viewer.setKnownEditingResult(edit2, {
323
402
  status: EditStatus.Applied,
324
403
  changes: edit2.changes,
325
404
  before,
326
- after: arbitrarySnapshot,
405
+ after: arbitraryRevisionView,
327
406
  steps: [],
328
407
  });
329
- const after = viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
408
+ const after = viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
330
409
  expect(editsProcessed).deep.equal([false, true]);
331
- expect(after).equal(arbitrarySnapshot);
410
+ expect(after).equal(arbitraryRevisionView);
332
411
  log.addLocalEdit(edit3);
333
- viewer.getSnapshotInSession(Number.POSITIVE_INFINITY);
412
+ viewer.getRevisionViewInSession(Number.POSITIVE_INFINITY);
334
413
  expect(editsProcessed).deep.equal([false, true, false]);
335
414
  });
336
- describe('Telemetry', () => {
415
+ describe('Callbacks', () => {
337
416
  function getViewer() {
338
- const log = getSimpleLog();
417
+ const log = getTestTreeLog(testTree);
339
418
  const events = [];
340
- const viewer = new CachingLogViewer(log, simpleSnapshotNoTraits, [],
341
- /* expensiveValidation */ true, undefined, getMockLogger((event) => events.push(event)), Transaction.factory);
419
+ const viewer = new CachingLogViewer(log, simpleLogBaseView, [],
420
+ /* expensiveValidation */ true, undefined, (args) => events.push(args));
342
421
  return { log, viewer, events };
343
422
  }
344
423
  function addInvalidEdit(log) {
345
424
  // 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
- })));
425
+ const edit = newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], expectDefined(StablePlaceInternal.atEndOf({
426
+ label: testTraitLabel,
427
+ parent: testTree.generateNodeId(),
428
+ }))));
350
429
  log.addLocalEdit(edit);
351
430
  return edit;
352
431
  }
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 () => {
432
+ it('processSequencedEditResult is called when a sequenced edit is applied', async () => {
363
433
  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);
434
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY);
435
+ events.splice(0);
436
+ // Non-sequenced edit should not trigger a call
437
+ const invalidEdit = addInvalidEdit(log);
438
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY);
367
439
  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
- }
440
+ log.addSequencedEdit(invalidEdit, { sequenceNumber: 3, referenceSequenceNumber: 2 });
441
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY);
442
+ expect(events.length).equals(1);
443
+ expect(events[0].edit.id).equals(invalidEdit.id);
444
+ expect(events[0].wasLocal).equals(true);
445
+ expect(events[0].result.status).equals(EditStatus.Invalid);
446
+ expect(events[0].reconciliationPath.length).equals(0);
447
+ const validEdit1 = newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atStartOf(testTree.left.traitLocation)));
448
+ log.addSequencedEdit(validEdit1, { sequenceNumber: 3, referenceSequenceNumber: 2 });
449
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY);
450
+ expect(events.length).equals(2);
451
+ expect(events[1].edit.id).equals(validEdit1.id);
452
+ expect(events[1].wasLocal).equals(false);
453
+ expect(events[1].result.status).equals(EditStatus.Applied);
454
+ expect(events[1].reconciliationPath.length).equals(0);
455
+ const validEdit2 = newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atStartOf(testTree.left.traitLocation)));
456
+ log.addSequencedEdit(validEdit2, { sequenceNumber: 4, referenceSequenceNumber: 2 });
457
+ await viewer.getRevisionView(Number.POSITIVE_INFINITY);
458
+ expect(events.length).equals(3);
459
+ expect(events[2].edit.id).equals(validEdit2.id);
460
+ expect(events[2].wasLocal).equals(false);
461
+ expect(events[2].result.status).equals(EditStatus.Applied);
462
+ expect(events[2].reconciliationPath.length).equals(1);
377
463
  });
378
464
  });
379
465
  describe('Sequencing', () => {
380
466
  function addFakeEdit(logViewer, sequenceNumber, referenceSequenceNumber) {
381
467
  const id = String(sequenceNumber !== null && sequenceNumber !== void 0 ? sequenceNumber : uuidv4());
382
- const fakeChange = id;
383
- const edit = { changes: [fakeChange], id };
468
+ const edit = { changes: [ChangeInternal.setPayload(simpleLogBaseView.root, id)], id };
384
469
  logViewer.log.addSequencedEdit(edit, {
385
470
  sequenceNumber,
386
471
  referenceSequenceNumber: referenceSequenceNumber !== null && referenceSequenceNumber !== void 0 ? referenceSequenceNumber : sequenceNumber - 1,
@@ -388,8 +473,7 @@ describe('CachingLogViewer', () => {
388
473
  return edit;
389
474
  }
390
475
  function minimalLogViewer() {
391
- return new CachingLogViewer(new EditLog(), undefined, [],
392
- /* expensiveValidation */ true, undefined, getMockLogger(), MockTransaction.factory);
476
+ return new CachingLogViewer(new EditLog(), simpleLogBaseView, [], /* expensiveValidation */ true);
393
477
  }
394
478
  it('tracks the earliest sequenced edit in the session', () => {
395
479
  const logViewer = minimalLogViewer();
@@ -445,7 +529,8 @@ describe('CachingLogViewer', () => {
445
529
  expect(actual.length).equals(path.length);
446
530
  for (let i = 0; i < path.length; ++i) {
447
531
  expect(actual[i].length).equals(1);
448
- expect(actual[i][0].resolvedChange).equals(path[i].id);
532
+ const change = actual[i][0].resolvedChange;
533
+ expect(change.payload).equals(path[i].id);
449
534
  }
450
535
  }
451
536
  // Non-sequenced edit
@@ -458,11 +543,11 @@ describe('CachingLogViewer', () => {
458
543
  // This is deliberately done to simulate scenarios where a given DDS may not be sent all sequenced ops (because an other DDS
459
544
  // might be receiving them).
460
545
  const edit2 = addFakeEdit(logViewer, 2001, 1001);
461
- expectReconciliationPath(edit2, [edit1]);
462
- const edit3 = addFakeEdit(logViewer, 3001, 2001);
546
+ expectReconciliationPath(edit2, []);
547
+ const edit3 = addFakeEdit(logViewer, 3001, 2000);
463
548
  expectReconciliationPath(edit3, [edit2]);
464
549
  const edit4 = addFakeEdit(logViewer, 4001, 2500);
465
- expectReconciliationPath(edit4, [edit2, edit3]);
550
+ expectReconciliationPath(edit4, [edit3]);
466
551
  const edit5 = addFakeEdit(logViewer, 5001, 500);
467
552
  expectReconciliationPath(edit5, [edit1, edit2, edit3, edit4]);
468
553
  });