@fluid-experimental/tree 0.58.2001 → 0.59.1000-61898

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (815) hide show
  1. package/README.md +9 -9
  2. package/dist/ChangeCompression.d.ts +39 -0
  3. package/dist/ChangeCompression.d.ts.map +1 -0
  4. package/dist/ChangeCompression.js +117 -0
  5. package/dist/ChangeCompression.js.map +1 -0
  6. package/{lib/default-edits/PersistedTypes.d.ts → dist/ChangeTypes.d.ts} +58 -100
  7. package/dist/ChangeTypes.d.ts.map +1 -0
  8. package/dist/{default-edits/PersistedTypes.js → ChangeTypes.js} +21 -76
  9. package/dist/ChangeTypes.js.map +1 -0
  10. package/dist/Checkout.d.ts +39 -27
  11. package/dist/Checkout.d.ts.map +1 -1
  12. package/dist/Checkout.js +59 -31
  13. package/dist/Checkout.js.map +1 -1
  14. package/dist/Common.d.ts +175 -38
  15. package/dist/Common.d.ts.map +1 -1
  16. package/dist/Common.js +240 -103
  17. package/dist/Common.js.map +1 -1
  18. package/dist/EagerCheckout.d.ts +24 -0
  19. package/dist/EagerCheckout.d.ts.map +1 -0
  20. package/dist/{BasicCheckout.js → EagerCheckout.js} +9 -6
  21. package/dist/EagerCheckout.js.map +1 -0
  22. package/dist/EditLog.d.ts +77 -63
  23. package/dist/EditLog.d.ts.map +1 -1
  24. package/dist/EditLog.js +85 -48
  25. package/dist/EditLog.js.map +1 -1
  26. package/dist/EditUtilities.d.ts +168 -0
  27. package/dist/EditUtilities.d.ts.map +1 -0
  28. package/dist/EditUtilities.js +373 -0
  29. package/dist/EditUtilities.js.map +1 -0
  30. package/dist/EventTypes.d.ts +73 -0
  31. package/dist/EventTypes.d.ts.map +1 -0
  32. package/dist/EventTypes.js +78 -0
  33. package/dist/EventTypes.js.map +1 -0
  34. package/dist/Forest.d.ts +29 -7
  35. package/dist/Forest.d.ts.map +1 -1
  36. package/dist/Forest.js +60 -36
  37. package/dist/Forest.js.map +1 -1
  38. package/dist/HistoryEditFactory.d.ts +20 -0
  39. package/dist/HistoryEditFactory.d.ts.map +1 -0
  40. package/dist/HistoryEditFactory.js +226 -0
  41. package/dist/HistoryEditFactory.js.map +1 -0
  42. package/dist/IdConversion.d.ts +12 -0
  43. package/dist/IdConversion.d.ts.map +1 -0
  44. package/dist/IdConversion.js +98 -0
  45. package/dist/IdConversion.js.map +1 -0
  46. package/dist/Identifiers.d.ts +89 -2
  47. package/dist/Identifiers.d.ts.map +1 -1
  48. package/dist/Identifiers.js +10 -0
  49. package/dist/Identifiers.js.map +1 -1
  50. package/dist/InitialTree.d.ts +2 -2
  51. package/dist/InitialTree.d.ts.map +1 -1
  52. package/dist/InitialTree.js +2 -1
  53. package/dist/InitialTree.js.map +1 -1
  54. package/dist/LazyCheckout.d.ts +28 -0
  55. package/dist/LazyCheckout.d.ts.map +1 -0
  56. package/dist/LazyCheckout.js +44 -0
  57. package/dist/LazyCheckout.js.map +1 -0
  58. package/dist/LogViewer.d.ts +130 -85
  59. package/dist/LogViewer.d.ts.map +1 -1
  60. package/dist/LogViewer.js +110 -85
  61. package/dist/LogViewer.js.map +1 -1
  62. package/dist/MergeHealth.d.ts +221 -0
  63. package/dist/MergeHealth.d.ts.map +1 -0
  64. package/dist/MergeHealth.js +263 -0
  65. package/dist/MergeHealth.js.map +1 -0
  66. package/dist/NodeIdUtilities.d.ts +90 -0
  67. package/dist/NodeIdUtilities.d.ts.map +1 -0
  68. package/dist/NodeIdUtilities.js +60 -0
  69. package/dist/NodeIdUtilities.js.map +1 -0
  70. package/dist/PayloadUtilities.d.ts +42 -0
  71. package/dist/PayloadUtilities.d.ts.map +1 -0
  72. package/dist/PayloadUtilities.js +114 -0
  73. package/dist/PayloadUtilities.js.map +1 -0
  74. package/dist/ReconciliationPath.d.ts +18 -13
  75. package/dist/ReconciliationPath.d.ts.map +1 -1
  76. package/dist/ReconciliationPath.js.map +1 -1
  77. package/dist/RevisionValueCache.d.ts +11 -2
  78. package/dist/RevisionValueCache.d.ts.map +1 -1
  79. package/dist/RevisionValueCache.js +2 -3
  80. package/dist/RevisionValueCache.js.map +1 -1
  81. package/dist/RevisionView.d.ts +83 -0
  82. package/dist/RevisionView.d.ts.map +1 -0
  83. package/dist/RevisionView.js +182 -0
  84. package/dist/RevisionView.js.map +1 -0
  85. package/dist/SerializationUtilities.d.ts +36 -0
  86. package/dist/SerializationUtilities.d.ts.map +1 -0
  87. package/dist/SerializationUtilities.js +102 -0
  88. package/dist/SerializationUtilities.js.map +1 -0
  89. package/dist/SharedTree.d.ts +400 -0
  90. package/dist/SharedTree.d.ts.map +1 -0
  91. package/dist/SharedTree.js +1074 -0
  92. package/dist/SharedTree.js.map +1 -0
  93. package/dist/SharedTreeEncoder.d.ts +102 -0
  94. package/dist/SharedTreeEncoder.d.ts.map +1 -0
  95. package/dist/SharedTreeEncoder.js +313 -0
  96. package/dist/SharedTreeEncoder.js.map +1 -0
  97. package/dist/StringInterner.d.ts +46 -0
  98. package/dist/StringInterner.d.ts.map +1 -0
  99. package/dist/StringInterner.js +61 -0
  100. package/dist/StringInterner.js.map +1 -0
  101. package/dist/Summary.d.ts +40 -0
  102. package/dist/Summary.d.ts.map +1 -0
  103. package/dist/Summary.js +23 -0
  104. package/dist/Summary.js.map +1 -0
  105. package/dist/SummaryBackCompatibility.d.ts +22 -22
  106. package/dist/SummaryBackCompatibility.d.ts.map +1 -1
  107. package/dist/SummaryBackCompatibility.js +30 -33
  108. package/dist/SummaryBackCompatibility.js.map +1 -1
  109. package/dist/SummaryTestUtilities.d.ts +31 -0
  110. package/dist/SummaryTestUtilities.d.ts.map +1 -0
  111. package/dist/SummaryTestUtilities.js +37 -0
  112. package/dist/SummaryTestUtilities.js.map +1 -0
  113. package/dist/Transaction.d.ts +53 -0
  114. package/dist/Transaction.d.ts.map +1 -0
  115. package/dist/Transaction.js +76 -0
  116. package/dist/Transaction.js.map +1 -0
  117. package/dist/TransactionInternal.d.ts +543 -0
  118. package/dist/TransactionInternal.d.ts.map +1 -0
  119. package/dist/TransactionInternal.js +622 -0
  120. package/dist/TransactionInternal.js.map +1 -0
  121. package/dist/TreeCompressor.d.ts +36 -0
  122. package/dist/TreeCompressor.d.ts.map +1 -0
  123. package/dist/TreeCompressor.js +137 -0
  124. package/dist/TreeCompressor.js.map +1 -0
  125. package/dist/TreeNodeHandle.d.ts +12 -18
  126. package/dist/TreeNodeHandle.d.ts.map +1 -1
  127. package/dist/TreeNodeHandle.js +13 -23
  128. package/dist/TreeNodeHandle.js.map +1 -1
  129. package/dist/TreeView.d.ts +166 -0
  130. package/dist/TreeView.d.ts.map +1 -0
  131. package/dist/TreeView.js +218 -0
  132. package/dist/TreeView.js.map +1 -0
  133. package/dist/TreeViewUtilities.d.ts +21 -0
  134. package/dist/TreeViewUtilities.d.ts.map +1 -0
  135. package/dist/TreeViewUtilities.js +77 -0
  136. package/dist/TreeViewUtilities.js.map +1 -0
  137. package/dist/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  138. package/dist/UndoRedoHandler.d.ts.map +1 -0
  139. package/dist/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +5 -9
  140. package/dist/UndoRedoHandler.js.map +1 -0
  141. package/dist/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  142. package/dist/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  143. package/dist/id-compressor/AppendOnlySortedMap.js +283 -0
  144. package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -0
  145. package/dist/id-compressor/IdCompressor.d.ts +389 -0
  146. package/dist/id-compressor/IdCompressor.d.ts.map +1 -0
  147. package/dist/id-compressor/IdCompressor.js +1353 -0
  148. package/dist/id-compressor/IdCompressor.js.map +1 -0
  149. package/dist/id-compressor/IdRange.d.ts +11 -0
  150. package/dist/id-compressor/IdRange.d.ts.map +1 -0
  151. package/dist/id-compressor/IdRange.js +29 -0
  152. package/dist/id-compressor/IdRange.js.map +1 -0
  153. package/dist/id-compressor/NumericUuid.d.ts +63 -0
  154. package/dist/id-compressor/NumericUuid.d.ts.map +1 -0
  155. package/dist/id-compressor/NumericUuid.js +377 -0
  156. package/dist/id-compressor/NumericUuid.js.map +1 -0
  157. package/dist/id-compressor/index.d.ts +12 -0
  158. package/dist/id-compressor/index.d.ts.map +1 -0
  159. package/dist/id-compressor/index.js +26 -0
  160. package/dist/id-compressor/index.js.map +1 -0
  161. package/dist/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  162. package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  163. package/dist/id-compressor/persisted-types/0.0.1.js +7 -0
  164. package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -0
  165. package/dist/id-compressor/persisted-types/index.d.ts +6 -0
  166. package/dist/id-compressor/persisted-types/index.d.ts.map +1 -0
  167. package/dist/id-compressor/persisted-types/index.js +18 -0
  168. package/dist/id-compressor/persisted-types/index.js.map +1 -0
  169. package/dist/index.d.ts +29 -9
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +50 -35
  172. package/dist/index.js.map +1 -1
  173. package/dist/persisted-types/0.0.2.d.ts +385 -0
  174. package/dist/persisted-types/0.0.2.d.ts.map +1 -0
  175. package/dist/persisted-types/0.0.2.js +113 -0
  176. package/dist/persisted-types/0.0.2.js.map +1 -0
  177. package/dist/persisted-types/0.1.1.d.ts +314 -0
  178. package/dist/persisted-types/0.1.1.d.ts.map +1 -0
  179. package/dist/persisted-types/0.1.1.js +153 -0
  180. package/dist/persisted-types/0.1.1.js.map +1 -0
  181. package/dist/persisted-types/index.d.ts +7 -0
  182. package/dist/persisted-types/index.d.ts.map +1 -0
  183. package/dist/persisted-types/index.js +20 -0
  184. package/dist/persisted-types/index.js.map +1 -0
  185. package/docs/0-1-1-Compression.md +228 -0
  186. package/docs/Breaking-Change-Migration.md +52 -0
  187. package/docs/Compression.md +2 -2
  188. package/docs/Telemetry.md +43 -0
  189. package/lib/ChangeCompression.d.ts +39 -0
  190. package/lib/ChangeCompression.d.ts.map +1 -0
  191. package/lib/ChangeCompression.js +111 -0
  192. package/lib/ChangeCompression.js.map +1 -0
  193. package/{dist/default-edits/PersistedTypes.d.ts → lib/ChangeTypes.d.ts} +58 -100
  194. package/lib/ChangeTypes.d.ts.map +1 -0
  195. package/lib/{default-edits/PersistedTypes.js → ChangeTypes.js} +15 -68
  196. package/lib/ChangeTypes.js.map +1 -0
  197. package/lib/Checkout.d.ts +39 -27
  198. package/lib/Checkout.d.ts.map +1 -1
  199. package/lib/Checkout.js +51 -23
  200. package/lib/Checkout.js.map +1 -1
  201. package/lib/Common.d.ts +175 -38
  202. package/lib/Common.d.ts.map +1 -1
  203. package/lib/Common.js +226 -101
  204. package/lib/Common.js.map +1 -1
  205. package/lib/EagerCheckout.d.ts +24 -0
  206. package/lib/EagerCheckout.d.ts.map +1 -0
  207. package/lib/{BasicCheckout.js → EagerCheckout.js} +7 -4
  208. package/lib/EagerCheckout.js.map +1 -0
  209. package/lib/EditLog.d.ts +77 -63
  210. package/lib/EditLog.d.ts.map +1 -1
  211. package/lib/EditLog.js +83 -47
  212. package/lib/EditLog.js.map +1 -1
  213. package/lib/EditUtilities.d.ts +168 -0
  214. package/lib/EditUtilities.d.ts.map +1 -0
  215. package/lib/EditUtilities.js +353 -0
  216. package/lib/EditUtilities.js.map +1 -0
  217. package/lib/EventTypes.d.ts +73 -0
  218. package/lib/EventTypes.d.ts.map +1 -0
  219. package/lib/EventTypes.js +75 -0
  220. package/lib/EventTypes.js.map +1 -0
  221. package/lib/Forest.d.ts +29 -7
  222. package/lib/Forest.d.ts.map +1 -1
  223. package/lib/Forest.js +58 -35
  224. package/lib/Forest.js.map +1 -1
  225. package/lib/HistoryEditFactory.d.ts +20 -0
  226. package/lib/HistoryEditFactory.d.ts.map +1 -0
  227. package/lib/{default-edits/HistoryEditFactory.js → HistoryEditFactory.js} +78 -39
  228. package/lib/HistoryEditFactory.js.map +1 -0
  229. package/lib/IdConversion.d.ts +12 -0
  230. package/lib/IdConversion.d.ts.map +1 -0
  231. package/lib/IdConversion.js +91 -0
  232. package/lib/IdConversion.js.map +1 -0
  233. package/lib/Identifiers.d.ts +89 -2
  234. package/lib/Identifiers.d.ts.map +1 -1
  235. package/lib/Identifiers.js +8 -1
  236. package/lib/Identifiers.js.map +1 -1
  237. package/lib/InitialTree.d.ts +2 -2
  238. package/lib/InitialTree.d.ts.map +1 -1
  239. package/lib/InitialTree.js +2 -1
  240. package/lib/InitialTree.js.map +1 -1
  241. package/lib/LazyCheckout.d.ts +28 -0
  242. package/lib/LazyCheckout.d.ts.map +1 -0
  243. package/lib/LazyCheckout.js +40 -0
  244. package/lib/LazyCheckout.js.map +1 -0
  245. package/lib/LogViewer.d.ts +130 -85
  246. package/lib/LogViewer.d.ts.map +1 -1
  247. package/lib/LogViewer.js +102 -77
  248. package/lib/LogViewer.js.map +1 -1
  249. package/lib/MergeHealth.d.ts +221 -0
  250. package/lib/MergeHealth.d.ts.map +1 -0
  251. package/lib/MergeHealth.js +258 -0
  252. package/lib/MergeHealth.js.map +1 -0
  253. package/lib/NodeIdUtilities.d.ts +90 -0
  254. package/lib/NodeIdUtilities.d.ts.map +1 -0
  255. package/lib/NodeIdUtilities.js +53 -0
  256. package/lib/NodeIdUtilities.js.map +1 -0
  257. package/lib/PayloadUtilities.d.ts +42 -0
  258. package/lib/PayloadUtilities.d.ts.map +1 -0
  259. package/lib/PayloadUtilities.js +110 -0
  260. package/lib/PayloadUtilities.js.map +1 -0
  261. package/lib/ReconciliationPath.d.ts +18 -13
  262. package/lib/ReconciliationPath.d.ts.map +1 -1
  263. package/lib/ReconciliationPath.js.map +1 -1
  264. package/lib/RevisionValueCache.d.ts +11 -2
  265. package/lib/RevisionValueCache.d.ts.map +1 -1
  266. package/lib/RevisionValueCache.js +2 -3
  267. package/lib/RevisionValueCache.js.map +1 -1
  268. package/lib/RevisionView.d.ts +83 -0
  269. package/lib/RevisionView.d.ts.map +1 -0
  270. package/lib/RevisionView.js +175 -0
  271. package/lib/RevisionView.js.map +1 -0
  272. package/lib/SerializationUtilities.d.ts +36 -0
  273. package/lib/SerializationUtilities.d.ts.map +1 -0
  274. package/lib/SerializationUtilities.js +95 -0
  275. package/lib/SerializationUtilities.js.map +1 -0
  276. package/lib/SharedTree.d.ts +400 -0
  277. package/lib/SharedTree.d.ts.map +1 -0
  278. package/lib/SharedTree.js +1069 -0
  279. package/lib/SharedTree.js.map +1 -0
  280. package/lib/SharedTreeEncoder.d.ts +102 -0
  281. package/lib/SharedTreeEncoder.d.ts.map +1 -0
  282. package/lib/SharedTreeEncoder.js +308 -0
  283. package/lib/SharedTreeEncoder.js.map +1 -0
  284. package/lib/StringInterner.d.ts +46 -0
  285. package/lib/StringInterner.d.ts.map +1 -0
  286. package/lib/StringInterner.js +57 -0
  287. package/lib/StringInterner.js.map +1 -0
  288. package/lib/Summary.d.ts +40 -0
  289. package/lib/Summary.d.ts.map +1 -0
  290. package/lib/Summary.js +19 -0
  291. package/lib/Summary.js.map +1 -0
  292. package/lib/SummaryBackCompatibility.d.ts +22 -22
  293. package/lib/SummaryBackCompatibility.d.ts.map +1 -1
  294. package/lib/SummaryBackCompatibility.js +29 -32
  295. package/lib/SummaryBackCompatibility.js.map +1 -1
  296. package/lib/SummaryTestUtilities.d.ts +31 -0
  297. package/lib/SummaryTestUtilities.d.ts.map +1 -0
  298. package/lib/SummaryTestUtilities.js +32 -0
  299. package/lib/SummaryTestUtilities.js.map +1 -0
  300. package/lib/Transaction.d.ts +53 -0
  301. package/lib/Transaction.d.ts.map +1 -0
  302. package/lib/Transaction.js +72 -0
  303. package/lib/Transaction.js.map +1 -0
  304. package/lib/TransactionInternal.d.ts +543 -0
  305. package/lib/TransactionInternal.d.ts.map +1 -0
  306. package/lib/TransactionInternal.js +618 -0
  307. package/lib/TransactionInternal.js.map +1 -0
  308. package/lib/TreeCompressor.d.ts +36 -0
  309. package/lib/TreeCompressor.d.ts.map +1 -0
  310. package/lib/TreeCompressor.js +133 -0
  311. package/lib/TreeCompressor.js.map +1 -0
  312. package/lib/TreeNodeHandle.d.ts +12 -18
  313. package/lib/TreeNodeHandle.d.ts.map +1 -1
  314. package/lib/TreeNodeHandle.js +14 -24
  315. package/lib/TreeNodeHandle.js.map +1 -1
  316. package/lib/TreeView.d.ts +166 -0
  317. package/lib/TreeView.d.ts.map +1 -0
  318. package/lib/TreeView.js +214 -0
  319. package/lib/TreeView.js.map +1 -0
  320. package/lib/TreeViewUtilities.d.ts +21 -0
  321. package/lib/TreeViewUtilities.d.ts.map +1 -0
  322. package/lib/TreeViewUtilities.js +71 -0
  323. package/lib/TreeViewUtilities.js.map +1 -0
  324. package/lib/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  325. package/lib/UndoRedoHandler.d.ts.map +1 -0
  326. package/lib/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +3 -7
  327. package/lib/UndoRedoHandler.js.map +1 -0
  328. package/lib/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  329. package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  330. package/lib/id-compressor/AppendOnlySortedMap.js +278 -0
  331. package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -0
  332. package/lib/id-compressor/IdCompressor.d.ts +389 -0
  333. package/lib/id-compressor/IdCompressor.d.ts.map +1 -0
  334. package/lib/id-compressor/IdCompressor.js +1343 -0
  335. package/lib/id-compressor/IdCompressor.js.map +1 -0
  336. package/lib/id-compressor/IdRange.d.ts +11 -0
  337. package/lib/id-compressor/IdRange.d.ts.map +1 -0
  338. package/lib/id-compressor/IdRange.js +25 -0
  339. package/lib/id-compressor/IdRange.js.map +1 -0
  340. package/lib/id-compressor/NumericUuid.d.ts +63 -0
  341. package/lib/id-compressor/NumericUuid.d.ts.map +1 -0
  342. package/lib/id-compressor/NumericUuid.js +365 -0
  343. package/lib/id-compressor/NumericUuid.js.map +1 -0
  344. package/lib/id-compressor/index.d.ts +12 -0
  345. package/lib/id-compressor/index.d.ts.map +1 -0
  346. package/lib/id-compressor/index.js +12 -0
  347. package/lib/id-compressor/index.js.map +1 -0
  348. package/lib/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  349. package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  350. package/lib/{test/Snapshot.tests.d.ts → id-compressor/persisted-types/0.0.1.js} +1 -1
  351. package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -0
  352. package/lib/id-compressor/persisted-types/index.d.ts +6 -0
  353. package/lib/id-compressor/persisted-types/index.d.ts.map +1 -0
  354. package/lib/id-compressor/persisted-types/index.js +6 -0
  355. package/lib/id-compressor/persisted-types/index.js.map +1 -0
  356. package/lib/index.d.ts +29 -9
  357. package/lib/index.d.ts.map +1 -1
  358. package/lib/index.js +23 -6
  359. package/lib/index.js.map +1 -1
  360. package/lib/persisted-types/0.0.2.d.ts +385 -0
  361. package/lib/persisted-types/0.0.2.d.ts.map +1 -0
  362. package/lib/persisted-types/0.0.2.js +110 -0
  363. package/lib/persisted-types/0.0.2.js.map +1 -0
  364. package/lib/persisted-types/0.1.1.d.ts +314 -0
  365. package/lib/persisted-types/0.1.1.d.ts.map +1 -0
  366. package/lib/persisted-types/0.1.1.js +150 -0
  367. package/lib/persisted-types/0.1.1.js.map +1 -0
  368. package/lib/persisted-types/index.d.ts +7 -0
  369. package/lib/persisted-types/index.d.ts.map +1 -0
  370. package/lib/persisted-types/index.js +8 -0
  371. package/lib/persisted-types/index.js.map +1 -0
  372. package/lib/test/AppendOnlySortedMap.tests.d.ts +6 -0
  373. package/lib/test/AppendOnlySortedMap.tests.d.ts.map +1 -0
  374. package/lib/test/AppendOnlySortedMap.tests.js +169 -0
  375. package/lib/test/AppendOnlySortedMap.tests.js.map +1 -0
  376. package/lib/test/{SnapshotUtilities.tests.d.ts → ChangeCompression.tests.d.ts} +1 -1
  377. package/lib/test/ChangeCompression.tests.d.ts.map +1 -0
  378. package/lib/test/ChangeCompression.tests.js +145 -0
  379. package/lib/test/ChangeCompression.tests.js.map +1 -0
  380. package/lib/test/Checkout.tests.d.ts +2 -3
  381. package/lib/test/Checkout.tests.d.ts.map +1 -1
  382. package/lib/test/Checkout.tests.js +126 -69
  383. package/lib/test/Checkout.tests.js.map +1 -1
  384. package/lib/test/Common.tests.js +60 -2
  385. package/lib/test/Common.tests.js.map +1 -1
  386. package/lib/test/{BasicCheckout.tests.d.ts → EagerCheckout.tests.d.ts} +1 -1
  387. package/lib/test/EagerCheckout.tests.d.ts.map +1 -0
  388. package/lib/test/EagerCheckout.tests.js +20 -0
  389. package/lib/test/EagerCheckout.tests.js.map +1 -0
  390. package/lib/test/Edit.tests.js +22 -14
  391. package/lib/test/Edit.tests.js.map +1 -1
  392. package/lib/test/{Anchors.glassBox.tests.d.ts → EditLog.perf.tests.d.ts} +1 -1
  393. package/lib/test/EditLog.perf.tests.d.ts.map +1 -0
  394. package/lib/test/EditLog.perf.tests.js +30 -0
  395. package/lib/test/EditLog.perf.tests.js.map +1 -0
  396. package/lib/test/EditLog.tests.js +10 -6
  397. package/lib/test/EditLog.tests.js.map +1 -1
  398. package/lib/test/EditUtilities.tests.d.ts +6 -0
  399. package/lib/test/EditUtilities.tests.d.ts.map +1 -0
  400. package/lib/test/EditUtilities.tests.js +503 -0
  401. package/lib/test/EditUtilities.tests.js.map +1 -0
  402. package/lib/test/Forest.perf.tests.d.ts +6 -0
  403. package/lib/test/Forest.perf.tests.d.ts.map +1 -0
  404. package/lib/test/Forest.perf.tests.js +133 -0
  405. package/lib/test/Forest.perf.tests.js.map +1 -0
  406. package/lib/test/Forest.tests.js +54 -27
  407. package/lib/test/Forest.tests.js.map +1 -1
  408. package/lib/test/GenericTransaction.tests.js +12 -3
  409. package/lib/test/GenericTransaction.tests.js.map +1 -1
  410. package/lib/test/HistoryEditFactory.tests.d.ts +6 -0
  411. package/lib/test/HistoryEditFactory.tests.d.ts.map +1 -0
  412. package/lib/test/HistoryEditFactory.tests.js +90 -0
  413. package/lib/test/HistoryEditFactory.tests.js.map +1 -0
  414. package/lib/test/IdCompressor.perf.tests.d.ts +6 -0
  415. package/lib/test/IdCompressor.perf.tests.d.ts.map +1 -0
  416. package/lib/test/IdCompressor.perf.tests.js +304 -0
  417. package/lib/test/IdCompressor.perf.tests.js.map +1 -0
  418. package/lib/test/IdCompressor.tests.d.ts +6 -0
  419. package/lib/test/IdCompressor.tests.d.ts.map +1 -0
  420. package/lib/test/IdCompressor.tests.js +1075 -0
  421. package/lib/test/IdCompressor.tests.js.map +1 -0
  422. package/lib/test/IdConversion.tests.d.ts +6 -0
  423. package/lib/test/IdConversion.tests.d.ts.map +1 -0
  424. package/lib/test/IdConversion.tests.js +36 -0
  425. package/lib/test/IdConversion.tests.js.map +1 -0
  426. package/lib/test/LazyCheckout.tests.d.ts +6 -0
  427. package/lib/test/LazyCheckout.tests.d.ts.map +1 -0
  428. package/lib/test/LazyCheckout.tests.js +22 -0
  429. package/lib/test/LazyCheckout.tests.js.map +1 -0
  430. package/lib/test/LogViewer.tests.js +269 -187
  431. package/lib/test/LogViewer.tests.js.map +1 -1
  432. package/lib/test/{SharedTreeWithAnchors.tests.d.ts → MergeHealthTelemetryHeartbeat.tests.d.ts} +1 -1
  433. package/lib/test/MergeHealthTelemetryHeartbeat.tests.d.ts.map +1 -0
  434. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +342 -0
  435. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -0
  436. package/lib/test/NumericUuid.perf.tests.d.ts +6 -0
  437. package/lib/test/NumericUuid.perf.tests.d.ts.map +1 -0
  438. package/lib/test/NumericUuid.perf.tests.js +68 -0
  439. package/lib/test/NumericUuid.perf.tests.js.map +1 -0
  440. package/lib/test/NumericUuid.tests.d.ts +6 -0
  441. package/lib/test/NumericUuid.tests.d.ts.map +1 -0
  442. package/lib/test/NumericUuid.tests.js +191 -0
  443. package/lib/test/NumericUuid.tests.js.map +1 -0
  444. package/lib/test/RevisionView.tests.d.ts +6 -0
  445. package/lib/test/RevisionView.tests.d.ts.map +1 -0
  446. package/lib/test/RevisionView.tests.js +133 -0
  447. package/lib/test/RevisionView.tests.js.map +1 -0
  448. package/lib/test/SharedTree.perf.tests.d.ts +6 -0
  449. package/lib/test/SharedTree.perf.tests.d.ts.map +1 -0
  450. package/lib/test/SharedTree.perf.tests.js +39 -0
  451. package/lib/test/SharedTree.perf.tests.js.map +1 -0
  452. package/lib/test/SharedTree.tests.js +15 -3
  453. package/lib/test/SharedTree.tests.js.map +1 -1
  454. package/lib/test/StringInterner.tests.d.ts +6 -0
  455. package/lib/test/StringInterner.tests.d.ts.map +1 -0
  456. package/lib/test/StringInterner.tests.js +71 -0
  457. package/lib/test/StringInterner.tests.js.map +1 -0
  458. package/lib/test/Summary.tests.d.ts +8 -0
  459. package/lib/test/Summary.tests.d.ts.map +1 -0
  460. package/lib/test/Summary.tests.js +407 -0
  461. package/lib/test/Summary.tests.js.map +1 -0
  462. package/lib/test/Transaction.tests.js +76 -330
  463. package/lib/test/Transaction.tests.js.map +1 -1
  464. package/lib/test/TransactionInternal.tests.d.ts +6 -0
  465. package/lib/test/TransactionInternal.tests.d.ts.map +1 -0
  466. package/lib/test/TransactionInternal.tests.js +568 -0
  467. package/lib/test/TransactionInternal.tests.js.map +1 -0
  468. package/lib/test/TreeCompression.tests.d.ts +6 -0
  469. package/lib/test/TreeCompression.tests.d.ts.map +1 -0
  470. package/lib/test/TreeCompression.tests.js +292 -0
  471. package/lib/test/TreeCompression.tests.js.map +1 -0
  472. package/lib/test/TreeView.tests.d.ts +6 -0
  473. package/lib/test/TreeView.tests.d.ts.map +1 -0
  474. package/lib/test/TreeView.tests.js +176 -0
  475. package/lib/test/TreeView.tests.js.map +1 -0
  476. package/lib/test/UndoRedoHandler.tests.js +2 -2
  477. package/lib/test/UndoRedoHandler.tests.js.map +1 -1
  478. package/lib/test/Virtualization.tests.js +147 -62
  479. package/lib/test/Virtualization.tests.js.map +1 -1
  480. package/lib/test/fuzz/Generators.d.ts +19 -0
  481. package/lib/test/fuzz/Generators.d.ts.map +1 -0
  482. package/lib/test/fuzz/Generators.js +420 -0
  483. package/lib/test/fuzz/Generators.js.map +1 -0
  484. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +20 -0
  485. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -0
  486. package/lib/test/fuzz/SharedTreeFuzzTests.js +217 -0
  487. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -0
  488. package/lib/test/fuzz/Types.d.ts +133 -0
  489. package/lib/test/fuzz/Types.d.ts.map +1 -0
  490. package/lib/test/{GenericTransactionWithAnchors.tests.d.ts → fuzz/Types.js} +2 -2
  491. package/lib/test/fuzz/Types.js.map +1 -0
  492. package/lib/test/utilities/IdCompressorTestUtilities.d.ts +180 -0
  493. package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -0
  494. package/lib/test/utilities/IdCompressorTestUtilities.js +528 -0
  495. package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -0
  496. package/lib/test/utilities/MockTransaction.d.ts +26 -7
  497. package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
  498. package/lib/test/utilities/MockTransaction.js +40 -11
  499. package/lib/test/utilities/MockTransaction.js.map +1 -1
  500. package/lib/test/utilities/PendingLocalStateTests.d.ts +12 -0
  501. package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -0
  502. package/lib/test/utilities/PendingLocalStateTests.js +105 -0
  503. package/lib/test/utilities/PendingLocalStateTests.js.map +1 -0
  504. package/lib/test/utilities/SharedTreeTests.d.ts +3 -4
  505. package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
  506. package/lib/test/utilities/SharedTreeTests.js +696 -439
  507. package/lib/test/utilities/SharedTreeTests.js.map +1 -1
  508. package/lib/test/utilities/SharedTreeVersioningTests.d.ts +11 -0
  509. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -0
  510. package/lib/test/utilities/SharedTreeVersioningTests.js +370 -0
  511. package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -0
  512. package/lib/test/utilities/SummaryLoadPerfTests.d.ts +10 -0
  513. package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -0
  514. package/lib/test/utilities/SummaryLoadPerfTests.js +102 -0
  515. package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -0
  516. package/lib/test/utilities/SummarySizeTests.d.ts +11 -0
  517. package/lib/test/utilities/SummarySizeTests.d.ts.map +1 -0
  518. package/lib/test/utilities/SummarySizeTests.js +158 -0
  519. package/lib/test/utilities/SummarySizeTests.js.map +1 -0
  520. package/lib/test/utilities/TestCommon.d.ts +9 -0
  521. package/lib/test/utilities/TestCommon.d.ts.map +1 -0
  522. package/lib/test/utilities/TestCommon.js +13 -0
  523. package/lib/test/utilities/TestCommon.js.map +1 -0
  524. package/lib/test/utilities/TestNode.d.ts +140 -0
  525. package/lib/test/utilities/TestNode.d.ts.map +1 -0
  526. package/lib/test/utilities/TestNode.js +292 -0
  527. package/lib/test/utilities/TestNode.js.map +1 -0
  528. package/lib/test/utilities/TestUtilities.d.ts +84 -70
  529. package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
  530. package/lib/test/utilities/TestUtilities.js +218 -143
  531. package/lib/test/utilities/TestUtilities.js.map +1 -1
  532. package/lib/test/utilities/UndoRedoTests.d.ts +4 -5
  533. package/lib/test/utilities/UndoRedoTests.d.ts.map +1 -1
  534. package/lib/test/utilities/UndoRedoTests.js +138 -149
  535. package/lib/test/utilities/UndoRedoTests.js.map +1 -1
  536. package/package.json +22 -17
  537. package/src/ChangeCompression.ts +159 -0
  538. package/src/{default-edits/PersistedTypes.ts → ChangeTypes.ts} +62 -120
  539. package/src/Checkout.ts +81 -52
  540. package/src/Common.ts +317 -117
  541. package/src/EagerCheckout.ts +38 -0
  542. package/src/EditLog.ts +153 -100
  543. package/src/EditUtilities.ts +559 -0
  544. package/src/EventTypes.ts +74 -0
  545. package/src/Forest.ts +81 -73
  546. package/src/{default-edits/HistoryEditFactory.ts → HistoryEditFactory.ts} +103 -53
  547. package/src/IdConversion.ts +125 -0
  548. package/src/Identifiers.ts +101 -1
  549. package/src/InitialTree.ts +5 -4
  550. package/src/LazyCheckout.ts +51 -0
  551. package/src/LogViewer.ts +242 -166
  552. package/src/MergeHealth.ts +447 -0
  553. package/src/NodeIdUtilities.ts +141 -0
  554. package/src/PayloadUtilities.ts +124 -0
  555. package/src/ReconciliationPath.ts +18 -13
  556. package/src/RevisionValueCache.ts +14 -5
  557. package/src/RevisionView.ts +252 -0
  558. package/src/SerializationUtilities.ts +130 -0
  559. package/src/SharedTree.ts +1458 -0
  560. package/src/SharedTreeEncoder.ts +493 -0
  561. package/src/StringInterner.ts +72 -0
  562. package/src/Summary.ts +48 -0
  563. package/src/SummaryBackCompatibility.ts +47 -57
  564. package/src/SummaryTestUtilities.ts +54 -0
  565. package/src/Transaction.ts +94 -0
  566. package/src/TransactionInternal.ts +1088 -0
  567. package/src/TreeCompressor.ts +213 -0
  568. package/src/TreeNodeHandle.ts +19 -32
  569. package/src/TreeView.ts +322 -0
  570. package/src/TreeViewUtilities.ts +77 -0
  571. package/src/{default-edits/UndoRedoHandler.ts → UndoRedoHandler.ts} +8 -13
  572. package/src/id-compressor/AppendOnlySortedMap.ts +325 -0
  573. package/src/id-compressor/IdCompressor.md +3 -0
  574. package/src/id-compressor/IdCompressor.ts +1848 -0
  575. package/src/id-compressor/IdRange.ts +33 -0
  576. package/src/id-compressor/NumericUuid.ts +414 -0
  577. package/src/id-compressor/index.ts +13 -0
  578. package/src/id-compressor/persisted-types/0.0.1.ts +179 -0
  579. package/src/id-compressor/persisted-types/README.md +3 -0
  580. package/src/id-compressor/persisted-types/index.ts +6 -0
  581. package/src/index.ts +119 -59
  582. package/src/persisted-types/0.0.2.ts +442 -0
  583. package/src/persisted-types/0.1.1.ts +476 -0
  584. package/src/persisted-types/README.md +22 -0
  585. package/src/persisted-types/index.ts +9 -0
  586. package/.mocharc.js +0 -41
  587. package/api/tree.api.md +0 -729
  588. package/dist/BasicCheckout.d.ts +0 -23
  589. package/dist/BasicCheckout.d.ts.map +0 -1
  590. package/dist/BasicCheckout.js.map +0 -1
  591. package/dist/Snapshot.d.ts +0 -198
  592. package/dist/Snapshot.d.ts.map +0 -1
  593. package/dist/Snapshot.js +0 -267
  594. package/dist/Snapshot.js.map +0 -1
  595. package/dist/SnapshotUtilities.d.ts +0 -29
  596. package/dist/SnapshotUtilities.d.ts.map +0 -1
  597. package/dist/SnapshotUtilities.js +0 -73
  598. package/dist/SnapshotUtilities.js.map +0 -1
  599. package/dist/anchored-edits/AnchorResolution.d.ts +0 -144
  600. package/dist/anchored-edits/AnchorResolution.d.ts.map +0 -1
  601. package/dist/anchored-edits/AnchorResolution.js +0 -162
  602. package/dist/anchored-edits/AnchorResolution.js.map +0 -1
  603. package/dist/anchored-edits/Factory.d.ts +0 -56
  604. package/dist/anchored-edits/Factory.d.ts.map +0 -1
  605. package/dist/anchored-edits/Factory.js +0 -79
  606. package/dist/anchored-edits/Factory.js.map +0 -1
  607. package/dist/anchored-edits/PersistedTypes.d.ts +0 -245
  608. package/dist/anchored-edits/PersistedTypes.d.ts.map +0 -1
  609. package/dist/anchored-edits/PersistedTypes.js +0 -131
  610. package/dist/anchored-edits/PersistedTypes.js.map +0 -1
  611. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  612. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  613. package/dist/anchored-edits/SharedTreeWithAnchors.js +0 -115
  614. package/dist/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  615. package/dist/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  616. package/dist/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  617. package/dist/anchored-edits/TransactionWithAnchors.js +0 -36
  618. package/dist/anchored-edits/TransactionWithAnchors.js.map +0 -1
  619. package/dist/anchored-edits/index.d.ts +0 -10
  620. package/dist/anchored-edits/index.d.ts.map +0 -1
  621. package/dist/anchored-edits/index.js +0 -34
  622. package/dist/anchored-edits/index.js.map +0 -1
  623. package/dist/default-edits/EditUtilities.d.ts +0 -57
  624. package/dist/default-edits/EditUtilities.d.ts.map +0 -1
  625. package/dist/default-edits/EditUtilities.js +0 -192
  626. package/dist/default-edits/EditUtilities.js.map +0 -1
  627. package/dist/default-edits/Factory.d.ts +0 -56
  628. package/dist/default-edits/Factory.d.ts.map +0 -1
  629. package/dist/default-edits/Factory.js +0 -79
  630. package/dist/default-edits/Factory.js.map +0 -1
  631. package/dist/default-edits/HistoryEditFactory.d.ts +0 -19
  632. package/dist/default-edits/HistoryEditFactory.d.ts.map +0 -1
  633. package/dist/default-edits/HistoryEditFactory.js +0 -187
  634. package/dist/default-edits/HistoryEditFactory.js.map +0 -1
  635. package/dist/default-edits/PersistedTypes.d.ts.map +0 -1
  636. package/dist/default-edits/PersistedTypes.js.map +0 -1
  637. package/dist/default-edits/SharedTree.d.ts +0 -111
  638. package/dist/default-edits/SharedTree.d.ts.map +0 -1
  639. package/dist/default-edits/SharedTree.js +0 -124
  640. package/dist/default-edits/SharedTree.js.map +0 -1
  641. package/dist/default-edits/Summary.d.ts +0 -15
  642. package/dist/default-edits/Summary.d.ts.map +0 -1
  643. package/dist/default-edits/Summary.js +0 -35
  644. package/dist/default-edits/Summary.js.map +0 -1
  645. package/dist/default-edits/Transaction.d.ts +0 -41
  646. package/dist/default-edits/Transaction.d.ts.map +0 -1
  647. package/dist/default-edits/Transaction.js +0 -225
  648. package/dist/default-edits/Transaction.js.map +0 -1
  649. package/dist/default-edits/UndoRedoHandler.d.ts.map +0 -1
  650. package/dist/default-edits/UndoRedoHandler.js.map +0 -1
  651. package/dist/default-edits/index.d.ts +0 -13
  652. package/dist/default-edits/index.d.ts.map +0 -1
  653. package/dist/default-edits/index.js +0 -41
  654. package/dist/default-edits/index.js.map +0 -1
  655. package/dist/generic/GenericEditUtilities.d.ts +0 -26
  656. package/dist/generic/GenericEditUtilities.d.ts.map +0 -1
  657. package/dist/generic/GenericEditUtilities.js +0 -45
  658. package/dist/generic/GenericEditUtilities.js.map +0 -1
  659. package/dist/generic/GenericSharedTree.d.ts +0 -221
  660. package/dist/generic/GenericSharedTree.d.ts.map +0 -1
  661. package/dist/generic/GenericSharedTree.js +0 -447
  662. package/dist/generic/GenericSharedTree.js.map +0 -1
  663. package/dist/generic/GenericTransaction.d.ts +0 -87
  664. package/dist/generic/GenericTransaction.d.ts.map +0 -1
  665. package/dist/generic/GenericTransaction.js +0 -144
  666. package/dist/generic/GenericTransaction.js.map +0 -1
  667. package/dist/generic/PersistedTypes.d.ts +0 -194
  668. package/dist/generic/PersistedTypes.d.ts.map +0 -1
  669. package/dist/generic/PersistedTypes.js +0 -42
  670. package/dist/generic/PersistedTypes.js.map +0 -1
  671. package/dist/generic/Summary.d.ts +0 -63
  672. package/dist/generic/Summary.d.ts.map +0 -1
  673. package/dist/generic/Summary.js +0 -64
  674. package/dist/generic/Summary.js.map +0 -1
  675. package/dist/generic/index.d.ts +0 -10
  676. package/dist/generic/index.d.ts.map +0 -1
  677. package/dist/generic/index.js +0 -26
  678. package/dist/generic/index.js.map +0 -1
  679. package/lib/BasicCheckout.d.ts +0 -23
  680. package/lib/BasicCheckout.d.ts.map +0 -1
  681. package/lib/BasicCheckout.js.map +0 -1
  682. package/lib/Snapshot.d.ts +0 -198
  683. package/lib/Snapshot.d.ts.map +0 -1
  684. package/lib/Snapshot.js +0 -263
  685. package/lib/Snapshot.js.map +0 -1
  686. package/lib/SnapshotUtilities.d.ts +0 -29
  687. package/lib/SnapshotUtilities.d.ts.map +0 -1
  688. package/lib/SnapshotUtilities.js +0 -67
  689. package/lib/SnapshotUtilities.js.map +0 -1
  690. package/lib/anchored-edits/AnchorResolution.d.ts +0 -144
  691. package/lib/anchored-edits/AnchorResolution.d.ts.map +0 -1
  692. package/lib/anchored-edits/AnchorResolution.js +0 -152
  693. package/lib/anchored-edits/AnchorResolution.js.map +0 -1
  694. package/lib/anchored-edits/Factory.d.ts +0 -56
  695. package/lib/anchored-edits/Factory.d.ts.map +0 -1
  696. package/lib/anchored-edits/Factory.js +0 -74
  697. package/lib/anchored-edits/Factory.js.map +0 -1
  698. package/lib/anchored-edits/PersistedTypes.d.ts +0 -245
  699. package/lib/anchored-edits/PersistedTypes.d.ts.map +0 -1
  700. package/lib/anchored-edits/PersistedTypes.js +0 -128
  701. package/lib/anchored-edits/PersistedTypes.js.map +0 -1
  702. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  703. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  704. package/lib/anchored-edits/SharedTreeWithAnchors.js +0 -110
  705. package/lib/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  706. package/lib/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  707. package/lib/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  708. package/lib/anchored-edits/TransactionWithAnchors.js +0 -32
  709. package/lib/anchored-edits/TransactionWithAnchors.js.map +0 -1
  710. package/lib/anchored-edits/index.d.ts +0 -10
  711. package/lib/anchored-edits/index.d.ts.map +0 -1
  712. package/lib/anchored-edits/index.js +0 -11
  713. package/lib/anchored-edits/index.js.map +0 -1
  714. package/lib/default-edits/EditUtilities.d.ts +0 -57
  715. package/lib/default-edits/EditUtilities.d.ts.map +0 -1
  716. package/lib/default-edits/EditUtilities.js +0 -181
  717. package/lib/default-edits/EditUtilities.js.map +0 -1
  718. package/lib/default-edits/Factory.d.ts +0 -56
  719. package/lib/default-edits/Factory.d.ts.map +0 -1
  720. package/lib/default-edits/Factory.js +0 -74
  721. package/lib/default-edits/Factory.js.map +0 -1
  722. package/lib/default-edits/HistoryEditFactory.d.ts +0 -19
  723. package/lib/default-edits/HistoryEditFactory.d.ts.map +0 -1
  724. package/lib/default-edits/HistoryEditFactory.js.map +0 -1
  725. package/lib/default-edits/PersistedTypes.d.ts.map +0 -1
  726. package/lib/default-edits/PersistedTypes.js.map +0 -1
  727. package/lib/default-edits/SharedTree.d.ts +0 -111
  728. package/lib/default-edits/SharedTree.d.ts.map +0 -1
  729. package/lib/default-edits/SharedTree.js +0 -100
  730. package/lib/default-edits/SharedTree.js.map +0 -1
  731. package/lib/default-edits/Summary.d.ts +0 -15
  732. package/lib/default-edits/Summary.d.ts.map +0 -1
  733. package/lib/default-edits/Summary.js +0 -31
  734. package/lib/default-edits/Summary.js.map +0 -1
  735. package/lib/default-edits/Transaction.d.ts +0 -41
  736. package/lib/default-edits/Transaction.d.ts.map +0 -1
  737. package/lib/default-edits/Transaction.js +0 -221
  738. package/lib/default-edits/Transaction.js.map +0 -1
  739. package/lib/default-edits/UndoRedoHandler.d.ts.map +0 -1
  740. package/lib/default-edits/UndoRedoHandler.js.map +0 -1
  741. package/lib/default-edits/index.d.ts +0 -13
  742. package/lib/default-edits/index.d.ts.map +0 -1
  743. package/lib/default-edits/index.js +0 -14
  744. package/lib/default-edits/index.js.map +0 -1
  745. package/lib/generic/GenericEditUtilities.d.ts +0 -26
  746. package/lib/generic/GenericEditUtilities.d.ts.map +0 -1
  747. package/lib/generic/GenericEditUtilities.js +0 -38
  748. package/lib/generic/GenericEditUtilities.js.map +0 -1
  749. package/lib/generic/GenericSharedTree.d.ts +0 -221
  750. package/lib/generic/GenericSharedTree.d.ts.map +0 -1
  751. package/lib/generic/GenericSharedTree.js +0 -443
  752. package/lib/generic/GenericSharedTree.js.map +0 -1
  753. package/lib/generic/GenericTransaction.d.ts +0 -87
  754. package/lib/generic/GenericTransaction.d.ts.map +0 -1
  755. package/lib/generic/GenericTransaction.js +0 -140
  756. package/lib/generic/GenericTransaction.js.map +0 -1
  757. package/lib/generic/PersistedTypes.d.ts +0 -194
  758. package/lib/generic/PersistedTypes.d.ts.map +0 -1
  759. package/lib/generic/PersistedTypes.js +0 -39
  760. package/lib/generic/PersistedTypes.js.map +0 -1
  761. package/lib/generic/Summary.d.ts +0 -63
  762. package/lib/generic/Summary.d.ts.map +0 -1
  763. package/lib/generic/Summary.js +0 -58
  764. package/lib/generic/Summary.js.map +0 -1
  765. package/lib/generic/index.d.ts +0 -10
  766. package/lib/generic/index.d.ts.map +0 -1
  767. package/lib/generic/index.js +0 -11
  768. package/lib/generic/index.js.map +0 -1
  769. package/lib/test/Anchors.glassBox.tests.d.ts.map +0 -1
  770. package/lib/test/Anchors.glassBox.tests.js +0 -410
  771. package/lib/test/Anchors.glassBox.tests.js.map +0 -1
  772. package/lib/test/BasicCheckout.tests.d.ts.map +0 -1
  773. package/lib/test/BasicCheckout.tests.js +0 -8
  774. package/lib/test/BasicCheckout.tests.js.map +0 -1
  775. package/lib/test/GenericTransactionWithAnchors.tests.d.ts.map +0 -1
  776. package/lib/test/GenericTransactionWithAnchors.tests.js +0 -25
  777. package/lib/test/GenericTransactionWithAnchors.tests.js.map +0 -1
  778. package/lib/test/SharedTreeWithAnchors.tests.d.ts.map +0 -1
  779. package/lib/test/SharedTreeWithAnchors.tests.js +0 -420
  780. package/lib/test/SharedTreeWithAnchors.tests.js.map +0 -1
  781. package/lib/test/Snapshot.tests.d.ts.map +0 -1
  782. package/lib/test/Snapshot.tests.js +0 -96
  783. package/lib/test/Snapshot.tests.js.map +0 -1
  784. package/lib/test/SnapshotUtilities.tests.d.ts.map +0 -1
  785. package/lib/test/SnapshotUtilities.tests.js +0 -168
  786. package/lib/test/SnapshotUtilities.tests.js.map +0 -1
  787. package/lib/test/undoRedoStackManager.d.ts +0 -26
  788. package/lib/test/undoRedoStackManager.d.ts.map +0 -1
  789. package/lib/test/undoRedoStackManager.js +0 -176
  790. package/lib/test/undoRedoStackManager.js.map +0 -1
  791. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts +0 -13
  792. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts.map +0 -1
  793. package/lib/test/utilities/SummaryFormatCompatibilityTests.js +0 -154
  794. package/lib/test/utilities/SummaryFormatCompatibilityTests.js.map +0 -1
  795. package/src/BasicCheckout.ts +0 -34
  796. package/src/Snapshot.ts +0 -363
  797. package/src/SnapshotUtilities.ts +0 -88
  798. package/src/anchored-edits/AnchorResolution.ts +0 -442
  799. package/src/anchored-edits/Factory.ts +0 -94
  800. package/src/anchored-edits/PersistedTypes.ts +0 -310
  801. package/src/anchored-edits/SharedTreeWithAnchors.ts +0 -200
  802. package/src/anchored-edits/TransactionWithAnchors.ts +0 -39
  803. package/src/anchored-edits/index.ts +0 -21
  804. package/src/default-edits/EditUtilities.ts +0 -220
  805. package/src/default-edits/Factory.ts +0 -94
  806. package/src/default-edits/SharedTree.ts +0 -174
  807. package/src/default-edits/Summary.ts +0 -44
  808. package/src/default-edits/Transaction.ts +0 -262
  809. package/src/default-edits/index.ts +0 -29
  810. package/src/generic/GenericEditUtilities.ts +0 -46
  811. package/src/generic/GenericSharedTree.ts +0 -593
  812. package/src/generic/GenericTransaction.ts +0 -194
  813. package/src/generic/PersistedTypes.ts +0 -221
  814. package/src/generic/Summary.ts +0 -113
  815. package/src/generic/index.ts +0 -41
package/src/LogViewer.ts CHANGED
@@ -3,22 +3,21 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryBaseLogger } from '@fluidframework/common-definitions';
7
6
  import Denque from 'denque';
8
7
  import { assert, fail, noop } from './Common';
9
8
  import { EditLog, SequencedOrderedEditId } from './EditLog';
10
- import { Snapshot } from './Snapshot';
11
- import { Edit, EditStatus, EditingResult, GenericTransaction } from './generic';
12
9
  import { EditId } from './Identifiers';
13
- import { RevisionValueCache } from './RevisionValueCache';
14
- import { initialTree } from './InitialTree';
15
- import { ReconciliationEdit, ReconciliationPath } from './ReconciliationPath';
10
+ import { Revision, RevisionValueCache } from './RevisionValueCache';
11
+ import { ReconciliationChange, ReconciliationEdit, ReconciliationPath } from './ReconciliationPath';
12
+ import { ChangeInternal, Edit, EditStatus } from './persisted-types';
13
+ import { RevisionView } from './RevisionView';
14
+ import { EditingResult, TransactionInternal, TransactionFactory } from './TransactionInternal';
16
15
 
17
16
  /**
18
- * Callback for when an edit is applied (meaning the result of applying it to a particular snapshot is computed).
17
+ * Callback for when an edit is applied (meaning the result of applying it to a particular revision is computed).
19
18
  *
20
- * Edits may be applied any time a Snapshot is computed that includes them.
21
- * Depending on the caching policy of the LogViewer, a given edit may or may not be applied in order to compute a Snapshot containing it.
19
+ * Edits may be applied any time a TreeView is computed that includes them.
20
+ * Depending on the caching policy of the LogViewer, a given edit may or may not be applied in order to compute a TreeView containing it.
22
21
  *
23
22
  * If the same edit occurs in different contexts (ex: a local edit is adjusted for a new remote edit),
24
23
  * that it will be reapplied, and this may result in different results.
@@ -36,46 +35,63 @@ import { ReconciliationEdit, ReconciliationPath } from './ReconciliationPath';
36
35
  export type EditStatusCallback = (editResult: EditStatus, editId: EditId, wasCached: boolean) => void;
37
36
 
38
37
  /**
39
- * Result of applying an identified transaction.
40
- * @public
38
+ * Callback for when a sequenced edit is applied.
39
+ * This includes local edits though the callback is only invoked once the sequenced version is received.
40
+ *
41
+ * For edits that were local (see {@link SequencedEditResult.wasLocal}, this callback will only be called once.
42
+ * For non-local edits, it may be called multiple times: the number of calls and when they occur depends on caching and is an implementation
43
+ * detail.
44
+ */
45
+ export type SequencedEditResultCallback = (args: SequencedEditResult) => void;
46
+
47
+ /**
48
+ * The relevant information pertaining to the application of a sequenced edit.
41
49
  */
42
- export type EditingResultWithId<TChange> = EditingResult<TChange> & {
50
+ export interface SequencedEditResult {
43
51
  /**
44
- * Unique identifier for this edit. Must never be reused.
45
- * Used for referencing and de-duplicating edits.
52
+ * The edit that was applied.
46
53
  */
47
- readonly id: EditId;
48
- };
54
+ edit: Edit<ChangeInternal>;
55
+ /**
56
+ * true iff the edit was local.
57
+ */
58
+ wasLocal: boolean;
59
+ /**
60
+ * The result of applying the edit.
61
+ */
62
+ result: AttemptedEditResultCacheEntry;
63
+ /**
64
+ * The reconciliation path for the edit.
65
+ */
66
+ reconciliationPath: ReconciliationPath;
67
+ }
49
68
 
50
69
  /**
51
70
  * The data cached by `CachingLogViewer` for an edit.
52
71
  */
53
- export type EditCacheEntry<TChange> =
54
- | SuccessfulEditCacheEntry<TChange>
55
- | UnsuccessfulEditCacheEntry
56
- | SummarizedEditResultCacheEntry;
72
+ export type EditCacheEntry = SuccessfulEditCacheEntry | UnsuccessfulEditCacheEntry | SummarizedEditResultCacheEntry;
57
73
 
58
74
  /**
59
75
  * The data cached by `CachingLogViewer` for an edit that it has attempted to apply locally.
60
76
  */
61
- export type AttemptedEditResultCacheEntry<TChange> = SuccessfulEditCacheEntry<TChange> | UnsuccessfulEditCacheEntry;
77
+ export type AttemptedEditResultCacheEntry = SuccessfulEditCacheEntry | UnsuccessfulEditCacheEntry;
62
78
 
63
79
  /**
64
80
  * The data cached by `CachingLogViewer` for an edit that it has successfully applied locally.
65
81
  */
66
- export interface SuccessfulEditCacheEntry<TChange> {
82
+ export interface SuccessfulEditCacheEntry {
67
83
  /**
68
- * The snapshot resulting from the edit.
84
+ * The revision view resulting from the edit.
69
85
  */
70
- snapshot: Snapshot;
86
+ readonly view: RevisionView;
71
87
  /**
72
- * The status code for the edit that produced the snapshot.
88
+ * The status code for the edit that produced the revision.
73
89
  */
74
- status: EditStatus.Applied;
90
+ readonly status: EditStatus.Applied;
75
91
  /**
76
92
  * The resolved changes that were applied during the edit and their associated outcome.
77
93
  */
78
- steps: readonly { resolvedChange: TChange; after: Snapshot }[];
94
+ readonly steps: readonly ReconciliationChange[];
79
95
  }
80
96
 
81
97
  /**
@@ -83,13 +99,17 @@ export interface SuccessfulEditCacheEntry<TChange> {
83
99
  */
84
100
  export interface UnsuccessfulEditCacheEntry {
85
101
  /**
86
- * The snapshot resulting from the edit.
102
+ * The revision view resulting from the edit.
87
103
  */
88
- readonly snapshot: Snapshot;
104
+ readonly view: RevisionView;
89
105
  /**
90
- * The status code for the edit that produced the snapshot.
106
+ * The status code for the edit that produced the revision.
91
107
  */
92
- status: EditStatus.Invalid | EditStatus.Malformed;
108
+ readonly status: EditStatus.Invalid | EditStatus.Malformed;
109
+ /**
110
+ * Information about the failure encountered by the edit
111
+ */
112
+ readonly failure: TransactionInternal.Failure;
93
113
  }
94
114
 
95
115
  /**
@@ -98,71 +118,85 @@ export interface UnsuccessfulEditCacheEntry {
98
118
  */
99
119
  export interface SummarizedEditResultCacheEntry {
100
120
  /**
101
- * The snapshot resulting from the edit.
121
+ * The revision view resulting from the edit.
122
+ */
123
+ readonly view: RevisionView;
124
+ /**
125
+ * Not specified on `SummarizedEditResultCacheEntry`.
126
+ * Declared to allow checking `entry.status` against undefined.
102
127
  */
103
- snapshot: Snapshot;
104
- status?: undefined;
128
+ readonly status?: never;
105
129
  }
106
130
 
107
- /**
108
- * A revision corresponds to an index in an `EditLog`.
109
- *
110
- * It is associated with the output `Snapshot` of applying the edit at the index to the previous revision.
111
- * For example:
112
- * - revision 0 corresponds to the initialSnapshot.
113
- * - revision 1 corresponds to the output of editLog[0] applied to the initialSnapshot.
114
- */
115
- export type Revision = number;
131
+ export type CachedEditingResult = AttemptedEditResultCacheEntry & {
132
+ /**
133
+ * Unique identifier for this edit. Must never be reused.
134
+ * Used for referencing and de-duplicating edits.
135
+ */
136
+ readonly id: EditId;
137
+ readonly before: RevisionView;
138
+ readonly changes: readonly ChangeInternal[];
139
+ };
116
140
 
117
141
  /**
118
- * Creates `Snapshot`s for the revisions in an `EditLog`
142
+ * Creates `RevisionView`s for the revisions in an `EditLog`
119
143
  */
120
144
  export interface LogViewer {
121
145
  /**
122
- * Returns the `Snapshot` output associated with the largest revision in `editLog` less than (but not equal to) the supplied revision.
146
+ * Returns the `TreeView` output associated with the largest revision in `editLog` less than (but not equal to) the supplied revision.
123
147
  *
124
148
  * For example:
125
- * - revision 0 returns the initialSnapshot.
126
- * - revision 1 returns the output of editLog[0] (or initialSnapshot if there is no edit 0).
149
+ * - revision 0 returns the initialRevision.
150
+ * - revision 1 returns the output of editLog[0] (or initialRevision if there is no edit 0).
127
151
  * - revision Number.POSITIVE_INFINITY returns the newest revision.
128
152
  */
129
- getSnapshot(revision: Revision): Promise<Snapshot>;
153
+ getRevisionView(revision: Revision): Promise<RevisionView>;
130
154
 
131
155
  /**
132
- * Returns the `Snapshot` output associated with the largest revision in `editLog` less than (but not equal to) the supplied revision.
156
+ * Returns the `TreeView` output associated with the largest revision in `editLog` less than (but not equal to) the supplied revision.
133
157
  * Can only be used to retrieve revisions added during the current sessions.
134
158
  *
135
159
  * For example:
136
- * - revision 0 returns the initialSnapshot.
137
- * - revision 1 returns the output of editLog[0] (or initialSnapshot if there is no edit 0).
160
+ * - revision 0 returns the initialRevision.
161
+ * - revision 1 returns the output of editLog[0] (or initialRevision if there is no edit 0).
138
162
  * - revision Number.POSITIVE_INFINITY returns the newest revision.
139
163
  */
140
- getSnapshotInSession(revision: Revision): Snapshot;
164
+ getRevisionViewInSession(revision: Revision): RevisionView;
141
165
  }
142
166
 
143
167
  /**
144
- * Creates Snapshots for revisions associated with an EditLog and caches the results.
168
+ * Creates views for revisions associated with an EditLog and caches the results.
169
+ *
170
+ * Does so by listening for edits added to the log. If the underlying EditLog or its listeners need to be reused beyond the lifetime of
171
+ * a CachingLogViewer instance, that instance should be disposed with `detachFromEditLog` to ensure it is garbage-collectable.
145
172
  * @internal
146
173
  */
147
- export class CachingLogViewer<TChange> implements LogViewer {
148
- public readonly log: EditLog<TChange>;
174
+ export class CachingLogViewer implements LogViewer {
175
+ public readonly log: EditLog<ChangeInternal>;
149
176
 
150
177
  /**
151
- * Maximum size of the sequenced snapshot cache.
178
+ * Maximum size of the sequenced revision cache.
152
179
  */
153
180
  public static readonly sequencedCacheSizeMax = 50;
154
181
 
155
182
  /**
156
- * A cache for local snapshots.
183
+ * A cache for local revisions.
157
184
  * It is invalidated whenever a new sequenced edit (that was not already a local edit) is added to the log.
158
185
  * When a previously local edit is sequenced, this cache is adjusted to account for it, not invalidated.
159
186
  */
160
- private readonly localSnapshotCache = new Denque<AttemptedEditResultCacheEntry<TChange>>();
187
+ private readonly localRevisionCache = new Denque<AttemptedEditResultCacheEntry>();
161
188
 
162
189
  /**
163
- * Cache of sequenced snapshots.
190
+ * Cache of sequenced revisions.
164
191
  */
165
- private readonly sequencedSnapshotCache: RevisionValueCache<EditCacheEntry<TChange>>;
192
+ private readonly sequencedRevisionCache: RevisionValueCache<EditCacheEntry>;
193
+
194
+ /**
195
+ * Called whenever a sequenced edit is applied.
196
+ * This will have been called at least once for any edit if a revision after than edit has been requested.
197
+ * It may be called multiple times: the number of calls and when they occur depends on caching and is an implementation detail.
198
+ */
199
+ private readonly processSequencedEditResult: SequencedEditResultCallback;
166
200
 
167
201
  /**
168
202
  * Called whenever an edit is processed.
@@ -176,11 +210,6 @@ export class CachingLogViewer<TChange> implements LogViewer {
176
210
  */
177
211
  private readonly expensiveValidation: boolean;
178
212
 
179
- /**
180
- * Telemetry logger, used to log events such as edit application rejection.
181
- */
182
- private readonly logger: ITelemetryBaseLogger;
183
-
184
213
  /**
185
214
  * The ordered queue of edits that originated from this client that have never been applied (by this log viewer) in a sequenced state.
186
215
  * This means these edits may be local or sequenced, and may have been applied (possibly multiple times) while still local.
@@ -194,28 +223,45 @@ export class CachingLogViewer<TChange> implements LogViewer {
194
223
  * as part of the transaction, then submitting it.
195
224
  * This cache helps optimize that case by avoiding recomputing the edit if no other edits were added during the transaction.
196
225
  */
197
- private cachedEditResult?: { editId: EditId; result: EditingResult<TChange> };
226
+ private cachedEditResult?: { editId: EditId; result: EditingResult };
227
+
228
+ /**
229
+ * Cache entry for the highest revision.
230
+ * `undefined` when not cached.
231
+ */
232
+ private highestRevisionCacheEntry?: EditCacheEntry;
233
+
234
+ /**
235
+ * Removes this log viewer from the set of handleEditAdded listeners on its underlying log.
236
+ * This should be called if the underlying log or its listeners are re-used past the lifetime of this log viewer.
237
+ */
238
+ public readonly detachFromEditLog: () => void;
198
239
 
199
- private readonly transactionFactory: (snapshot: Snapshot) => GenericTransaction<TChange>;
240
+ /**
241
+ * @returns true if the highest revision is cached.
242
+ */
243
+ public highestRevisionCached(): boolean {
244
+ return this.highestRevisionCacheEntry !== undefined;
245
+ }
200
246
 
201
247
  /**
202
248
  * Create a new LogViewer
203
- * @param log - the edit log which snapshots will be based on.
204
- * @param baseTree - the tree used in the snapshot corresponding to the 0th revision. Defaults to `initialTree`.
205
- * @param knownRevisions - a set of [sequencedRevision, snapshot] pairs that are known (have been precomputed) at construction time.
249
+ * @param log - the edit log which revisions will be based on.
250
+ * @param baseTree - the tree used in the view corresponding to the 0th revision.
251
+ * @param knownRevisions - a set of [sequencedRevision, view] pairs that are known (have been precomputed) at construction time.
206
252
  * These revisions are guaranteed to never be evicted from the cache.
207
253
  * @param expensiveValidation - Iff true, additional correctness assertions will be run during LogViewer operations.
208
254
  * @param processEditStatus - called after applying an edit.
209
- * @param logger - used to log telemetry
255
+ * @param processSequencedEditResult - called after applying a sequenced edit.
210
256
  */
211
257
  public constructor(
212
- log: EditLog<TChange>,
213
- baseSnapshot: Snapshot = Snapshot.fromTree(initialTree),
214
- knownRevisions: [Revision, EditCacheEntry<TChange>][] = [],
258
+ log: EditLog<ChangeInternal>,
259
+ baseView: RevisionView,
260
+ knownRevisions: [Revision, EditCacheEntry][] = [],
215
261
  expensiveValidation = false,
216
262
  processEditStatus: EditStatusCallback = noop,
217
- logger: ITelemetryBaseLogger,
218
- transactionFactory: (snapshot: Snapshot) => GenericTransaction<TChange>,
263
+ processSequencedEditResult: SequencedEditResultCallback = noop,
264
+ private readonly transactionFactory: TransactionFactory,
219
265
  minimumSequenceNumber = 0
220
266
  ) {
221
267
  this.log = log;
@@ -229,83 +275,87 @@ export class CachingLogViewer<TChange> implements LogViewer {
229
275
  });
230
276
  }
231
277
 
232
- this.sequencedSnapshotCache = new RevisionValueCache(
278
+ this.sequencedRevisionCache = new RevisionValueCache(
233
279
  CachingLogViewer.sequencedCacheSizeMax,
234
280
  minimumSequenceNumber,
235
- [...knownRevisions, [0, { snapshot: baseSnapshot }]]
281
+ [...knownRevisions, [0, { view: baseView }]]
236
282
  );
237
283
  this.processEditStatus = processEditStatus ?? noop;
284
+ this.processSequencedEditResult = processSequencedEditResult ?? noop;
238
285
  this.expensiveValidation = expensiveValidation;
239
- this.logger = logger;
240
286
  this.transactionFactory = transactionFactory;
241
- this.log.registerEditAddedHandler(this.handleEditAdded.bind(this));
287
+ this.detachFromEditLog = this.log.registerEditAddedHandler(this.handleEditAdded.bind(this));
242
288
  }
243
289
 
244
290
  /**
245
- * Performs the tracking needed to log telemetry about failed (invalid/malformed) local edits when they are sequenced.
246
- * As a performance optimization, this method also caches snapshots generated by local edits if they are sequenced without
291
+ * As a performance optimization, this method caches views generated by local edits if they are sequenced without
247
292
  * being interleaved with remote edits.
248
293
  */
249
- private handleEditAdded(edit: Edit<TChange>, isLocal: boolean, wasLocal: boolean): void {
294
+ private handleEditAdded(edit: Edit<ChangeInternal>, isLocal: boolean, wasLocal: boolean): void {
295
+ // Clear highestRevisionCacheEntry, since what revision is highest might change.
296
+ // Note that as an optimization we could skip clearing this when a local edit is sequenced.
297
+ this.highestRevisionCacheEntry = undefined;
298
+
250
299
  if (isLocal) {
251
300
  this.unappliedSelfEdits.push(edit.id);
252
301
  } else if (wasLocal) {
253
302
  // If the new sequenced edit was generated by this client, the corresponding cache entry (if there is one)
254
303
  // will be at the front of the queue. If the queue is empty, then a concurrent sequenced edit from remote client
255
304
  // must have invalidated the queue cache.
256
- const entry = this.localSnapshotCache.shift();
305
+ const entry = this.localRevisionCache.shift();
257
306
  if (entry !== undefined) {
258
307
  const revision = this.log.numberOfSequencedEdits;
259
- const snapshot = entry.snapshot;
260
- this.sequencedSnapshotCache.cacheValue(
308
+ const { view } = entry;
309
+ this.sequencedRevisionCache.cacheValue(
261
310
  revision,
262
311
  entry.status === EditStatus.Applied
263
312
  ? {
264
- snapshot,
313
+ view,
265
314
  status: entry.status,
266
315
  steps: entry.steps,
267
316
  }
268
317
  : {
269
- snapshot,
318
+ view,
270
319
  status: entry.status,
320
+ failure: entry.failure,
271
321
  }
272
322
  );
273
- this.handleSequencedEditResult(edit, entry);
323
+ this.handleSequencedEditResult(edit, entry, []);
274
324
  }
275
325
  } else {
276
326
  // Invalidate any cached results of applying edits which are ordered after `edit` (which are all remaining local edits)
277
- this.localSnapshotCache.clear();
327
+ this.localRevisionCache.clear();
278
328
  }
279
329
  }
280
330
 
281
- public async getEditResult(revision: Revision): Promise<EditCacheEntry<TChange>> {
331
+ public async getEditResult(revision: Revision): Promise<EditCacheEntry> {
282
332
  const startingPoint = this.getStartingPoint(revision);
283
333
  const { startRevision } = startingPoint;
284
- let current: EditCacheEntry<TChange> = startingPoint;
334
+ let current: EditCacheEntry = startingPoint;
285
335
  for (let i = startRevision; i < revision && i < this.log.length; i++) {
286
336
  const edit = await this.log.getEditAtIndex(i);
287
- current = this.applyEdit(current.snapshot, edit, i);
337
+ current = this.applyEdit(current.view, edit, i);
288
338
  }
289
339
  return current;
290
340
  }
291
341
 
292
- public async getSnapshot(revision: Revision): Promise<Snapshot> {
293
- return (await this.getEditResult(revision)).snapshot;
342
+ public async getRevisionView(revision: Revision): Promise<RevisionView> {
343
+ return (await this.getEditResult(revision)).view;
294
344
  }
295
345
 
296
- public getEditResultInSession(revision: Revision): EditCacheEntry<TChange> {
346
+ public getEditResultInSession(revision: Revision): EditCacheEntry {
297
347
  const startingPoint = this.getStartingPoint(revision);
298
348
  const { startRevision } = startingPoint;
299
- let current: EditCacheEntry<TChange> = startingPoint;
349
+ let current: EditCacheEntry = startingPoint;
300
350
  for (let i = startRevision; i < revision && i < this.log.length; i++) {
301
351
  const edit = this.log.getEditInSessionAtIndex(i);
302
- current = this.applyEdit(current.snapshot, edit, i);
352
+ current = this.applyEdit(current.view, edit, i);
303
353
  }
304
354
  return current;
305
355
  }
306
356
 
307
- public getSnapshotInSession(revision: Revision): Snapshot {
308
- return this.getEditResultInSession(revision).snapshot;
357
+ public getRevisionViewInSession(revision: Revision): RevisionView {
358
+ return this.getEditResultInSession(revision).view;
309
359
  }
310
360
 
311
361
  /**
@@ -318,105 +368,118 @@ export class CachingLogViewer<TChange> implements LogViewer {
318
368
  // Sequence numbers in Fluid are 1-indexed, meaning they correspond to revisions, and can be used as revisions.
319
369
  // This ensures that all revisions >= minimumSequenceNumber are kept in the cache, meaning that even if all clients are caught up
320
370
  // the most recent sequenced revision will be cached.
321
- this.sequencedSnapshotCache.updateRetentionWindow(minimumSequenceNumber);
371
+ this.sequencedRevisionCache.updateRetentionWindow(minimumSequenceNumber);
322
372
  }
323
373
 
324
374
  /**
325
- * Inform the CachingLogViewer that a particular edit is know to have a specific result when applied to a particular Snapshot.
326
- * LogViewer may use this information to as a optimization to avoid re-running the edit if re-applied to the same Snapshot.
375
+ * Inform the CachingLogViewer that a particular edit is known to have a specific result when applied to a particular TreeView.
376
+ * CachingLogViewer may use this information as an optimization to avoid re-running the edit if re-applied to the same TreeView.
327
377
  */
328
- public setKnownEditingResult(edit: Edit<TChange>, result: EditingResult<TChange>): void {
378
+ public setKnownEditingResult(edit: Edit<ChangeInternal>, result: EditingResult): void {
329
379
  this.cachedEditResult = { editId: edit.id, result };
330
380
  }
331
381
 
332
382
  /**
333
- * @returns the cached snapshot closest to the requested `revision`.
383
+ * @returns the cached revision view closest to the requested `revision`.
334
384
  */
335
- private getStartingPoint(revision: Revision): { startRevision: Revision } & EditCacheEntry<TChange> {
336
- // Per the documentation for revision, the returned snapshot should be the output of the edit at the largest index <= `revision`.
385
+ private getStartingPoint(revision: Revision): { startRevision: Revision } & EditCacheEntry {
386
+ // Per the documentation for revision, the returned view should be the output of the edit at the largest index <= `revision`.
337
387
  const revisionClamped = Math.min(revision, this.log.length);
338
- let current: EditCacheEntry<TChange>;
388
+
389
+ // If the highest revision is requested, and it's cached, use highestRevisionCacheEntry.
390
+ if (revisionClamped === this.log.length && this.highestRevisionCacheEntry !== undefined) {
391
+ return { ...this.highestRevisionCacheEntry, startRevision: revisionClamped };
392
+ }
393
+
394
+ let current: EditCacheEntry;
339
395
  let startRevision: Revision;
340
396
  const { numberOfSequencedEdits } = this.log;
341
397
  const isLocalRevision = revisionClamped > numberOfSequencedEdits;
342
- if (isLocalRevision && !this.localSnapshotCache.isEmpty()) {
343
- const { length } = this.localSnapshotCache;
344
- // Local snapshot cache is indexed such that the snapshot for revision 0 (a local edit) is stored at index 0 in the cache.
398
+ if (isLocalRevision && !this.localRevisionCache.isEmpty()) {
399
+ const { length } = this.localRevisionCache;
400
+ // Local revision view cache is indexed such that the view for revision 0 (a local edit) is stored at index 0 in the cache.
345
401
  // This is because the local cache does not contain an entry for the implicit initial tree edit.
346
402
  const localCacheIndex = revisionClamped - 1 - numberOfSequencedEdits;
347
403
  if (localCacheIndex < length) {
348
404
  const cached =
349
- this.localSnapshotCache.peekAt(localCacheIndex) ?? fail('missing tail of localSnapshotCache');
405
+ this.localRevisionCache.peekAt(localCacheIndex) ?? fail('missing tail of localRevisionViewCache');
350
406
  return {
351
407
  ...cached,
352
408
  startRevision: revisionClamped,
353
409
  };
354
410
  } else {
355
- current = this.localSnapshotCache.peekAt(length - 1) ?? fail('missing tail of localSnapshotCache');
411
+ current = this.localRevisionCache.peekAt(length - 1) ?? fail('missing tail of localRevisionViewCache');
356
412
  startRevision = numberOfSequencedEdits + length;
357
413
  }
358
414
  } else {
359
- const [cachedRevision, cachedSnapshot] =
360
- this.sequencedSnapshotCache.getClosestEntry(revisionClamped) ?? fail('No preceding snapshot cached.');
415
+ const [cachedRevision, cachedView] =
416
+ this.sequencedRevisionCache.getClosestEntry(revisionClamped) ??
417
+ fail('No preceding revision view cached.');
418
+
361
419
  startRevision = cachedRevision;
362
- current = cachedSnapshot;
420
+ current = cachedView;
363
421
  }
364
422
  return { startRevision, ...current };
365
423
  }
366
424
 
367
425
  /**
368
- * Helper for applying an edit at the supplied snapshot.
426
+ * Helper for applying an edit at the supplied revision view.
369
427
  * Must only be called in the order that edits appear in the log.
370
428
  * Must only be called once for a given local edit as long as the local cache has not been invalidated.
371
429
  * Must only be called once for a given sequenced edit.
372
- * @returns the resulting snapshot and the outcome of edit that produced it.
430
+ * @returns the resulting revision view and the outcome of edit that produced it.
373
431
  */
374
432
  private applyEdit(
375
- prevSnapshot: Snapshot,
376
- edit: Edit<TChange>,
433
+ prevView: RevisionView,
434
+ edit: Edit<ChangeInternal>,
377
435
  editIndex: number
378
- ): AttemptedEditResultCacheEntry<TChange> {
379
- let editingResult: EditingResult<TChange>;
436
+ ): AttemptedEditResultCacheEntry {
437
+ let editingResult: EditingResult;
380
438
  let cached;
439
+ let reconciliationPath: ReconciliationPath = [];
381
440
  if (
382
441
  this.cachedEditResult !== undefined &&
383
442
  this.cachedEditResult.editId === edit.id &&
384
- this.cachedEditResult.result.before === prevSnapshot
443
+ this.cachedEditResult.result.before === prevView
385
444
  ) {
386
445
  editingResult = this.cachedEditResult.result;
387
446
  cached = true;
388
447
  } else {
389
- editingResult = this.transactionFactory(prevSnapshot)
390
- .applyChanges(edit.changes, this.reconciliationPathFromEdit(edit.id))
391
- .close();
448
+ reconciliationPath = this.reconciliationPathFromEdit(edit.id);
449
+ editingResult = this.transactionFactory(prevView).applyChanges(edit.changes, reconciliationPath).close();
392
450
  cached = false;
393
451
  }
394
452
 
395
453
  const revision = editIndex + 1;
396
- let nextSnapshot: Snapshot;
454
+ let nextView: RevisionView;
397
455
  if (editingResult.status === EditStatus.Applied) {
398
- nextSnapshot = editingResult.after;
456
+ nextView = editingResult.after;
399
457
  } else {
400
- nextSnapshot = prevSnapshot;
458
+ nextView = prevView;
401
459
  }
402
460
 
403
461
  const computedCacheEntry =
404
462
  editingResult.status === EditStatus.Applied
405
- ? { snapshot: nextSnapshot, status: editingResult.status, steps: editingResult.steps }
406
- : { snapshot: nextSnapshot, status: editingResult.status };
463
+ ? { view: nextView, status: editingResult.status, steps: editingResult.steps }
464
+ : { view: nextView, status: editingResult.status, failure: editingResult.failure };
407
465
 
408
466
  if (this.log.isSequencedRevision(revision)) {
409
- this.sequencedSnapshotCache.cacheValue(revision, computedCacheEntry);
410
- this.handleSequencedEditResult(edit, computedCacheEntry);
467
+ this.sequencedRevisionCache.cacheValue(revision, computedCacheEntry);
468
+ this.handleSequencedEditResult(edit, computedCacheEntry, reconciliationPath);
411
469
  } else {
412
- // This relies on local edits being append only, and that generating the snapshot for a local revision requires generating
413
- // the snapshot for all local revisions before it in the log. Thus, generating such a snapshot will necessarily require
470
+ // This relies on local edits being append only, and that generating the view for a local revision requires generating
471
+ // the views for all local revisions before it in the log. Thus, generating such a view will necessarily require
414
472
  // calls to this method for all local revisions prior, guaranteeing the correct push order.
415
473
  assert(
416
- revision === this.log.numberOfSequencedEdits + this.localSnapshotCache.length + 1,
417
- 'Local snapshot cached out of order.'
474
+ revision === this.log.numberOfSequencedEdits + this.localRevisionCache.length + 1,
475
+ 'Local revision view cached out of order.'
418
476
  );
419
- this.localSnapshotCache.push(computedCacheEntry);
477
+ this.localRevisionCache.push(computedCacheEntry);
478
+ }
479
+
480
+ // Only update highestRevisionCacheEntry if this snapshot is the highest revision.
481
+ if (revision >= this.log.length) {
482
+ this.highestRevisionCacheEntry = computedCacheEntry;
420
483
  }
421
484
 
422
485
  this.processEditStatus(editingResult.status, this.log.getIdAtIndex(editIndex), cached);
@@ -424,23 +487,21 @@ export class CachingLogViewer<TChange> implements LogViewer {
424
487
  }
425
488
 
426
489
  /**
427
- * Helper for performing caching and telemetry logging when a sequenced local edit is first applied.
490
+ * Helper for performing caching when a sequenced local edit is first applied.
491
+ * Invokes the `processSequencedEditResult` handler that was passed to the constructor (if any).
428
492
  * Must only be called for non-cached sequenced edits.
429
493
  */
430
- private handleSequencedEditResult(edit: Edit<TChange>, result: AttemptedEditResultCacheEntry<TChange>): void {
494
+ private handleSequencedEditResult(
495
+ edit: Edit<ChangeInternal>,
496
+ result: AttemptedEditResultCacheEntry,
497
+ reconciliationPath: ReconciliationPath
498
+ ): void {
499
+ let wasLocal = false;
431
500
  // This is the first time this sequenced edit has been processed by this LogViewer. If it was a local edit, log telemetry
432
501
  // in the event that it was invalid or malformed.
433
502
  if (this.unappliedSelfEdits.length > 0) {
434
503
  if (edit.id === this.unappliedSelfEdits.peekFront()) {
435
- if (result.status !== EditStatus.Applied) {
436
- this.logger.send({
437
- category: 'generic',
438
- eventName:
439
- result.status === EditStatus.Malformed
440
- ? 'MalformedSharedTreeEdit'
441
- : 'InvalidSharedTreeEdit',
442
- });
443
- }
504
+ wasLocal = true;
444
505
  this.unappliedSelfEdits.shift();
445
506
  } else if (this.expensiveValidation) {
446
507
  for (let i = 0; i < this.unappliedSelfEdits.length; i++) {
@@ -448,6 +509,7 @@ export class CachingLogViewer<TChange> implements LogViewer {
448
509
  }
449
510
  }
450
511
  }
512
+ this.processSequencedEditResult({ edit, wasLocal, result, reconciliationPath });
451
513
  }
452
514
 
453
515
  /**
@@ -456,8 +518,8 @@ export class CachingLogViewer<TChange> implements LogViewer {
456
518
  * yet supported.
457
519
  * @param editId - The ID for the edit to get the reconciliation path for.
458
520
  */
459
- public reconciliationPathFromEdit(editId: EditId): ReconciliationPath<TChange> {
460
- const reconciliationPath: ReconciliationEdit<TChange>[] = [];
521
+ public reconciliationPathFromEdit(editId: EditId): ReconciliationPath {
522
+ const reconciliationPath: ReconciliationEdit[] = [];
461
523
  let cached = false;
462
524
  return new Proxy(reconciliationPath, {
463
525
  get: (target, prop): unknown => {
@@ -476,12 +538,21 @@ export class CachingLogViewer<TChange> implements LogViewer {
476
538
  const firstEdit = this.getEditResultFromSequenceNumber(targetSequenceNumber);
477
539
  if (firstEdit !== undefined) {
478
540
  if (firstEdit.status === EditStatus.Applied) {
479
- reconciliationPath.push({
480
- ...firstEdit.steps,
481
- before: firstEdit.before,
482
- after: firstEdit.after,
483
- length: firstEdit.steps.length,
484
- });
541
+ const firstEditInfo = this.log.getOrderedEditId(
542
+ firstEdit.id
543
+ ) as SequencedOrderedEditId;
544
+ if (
545
+ firstEditInfo.sequenceInfo !== undefined &&
546
+ firstEditInfo.sequenceInfo.sequenceNumber >
547
+ orderedId.sequenceInfo.referenceSequenceNumber
548
+ ) {
549
+ reconciliationPath.push({
550
+ ...firstEdit.steps,
551
+ before: firstEdit.before,
552
+ after: firstEdit.view,
553
+ length: firstEdit.steps.length,
554
+ });
555
+ }
485
556
  }
486
557
  const lowestIndex = this.log.getIndexOfId(firstEdit.id) + 1;
487
558
  const highestIndex = this.log.getIndexOfId(editId) - 1;
@@ -491,7 +562,7 @@ export class CachingLogViewer<TChange> implements LogViewer {
491
562
  reconciliationPath.push({
492
563
  ...edit.steps,
493
564
  before: edit.before,
494
- after: edit.after,
565
+ after: edit.view,
495
566
  length: edit.steps.length,
496
567
  });
497
568
  }
@@ -509,7 +580,7 @@ export class CachingLogViewer<TChange> implements LogViewer {
509
580
  /**
510
581
  * @returns Edit information for the earliest known sequenced edit.
511
582
  */
512
- public earliestSequencedEditInSession(): { edit: Edit<TChange>; sequenceNumber: number } | undefined {
583
+ public earliestSequencedEditInSession(): { edit: Edit<ChangeInternal>; sequenceNumber: number } | undefined {
513
584
  const earliestEditIndex = this.log.earliestAvailableEditIndex;
514
585
  const lastSequencedEdit = this.log.numberOfSequencedEdits + earliestEditIndex - 1;
515
586
  for (let index = earliestEditIndex; index <= lastSequencedEdit; ++index) {
@@ -525,9 +596,9 @@ export class CachingLogViewer<TChange> implements LogViewer {
525
596
  /**
526
597
  * @returns Edit result information for the edit at the given `index`.
527
598
  */
528
- private getEditResultFromIndex(index: number): EditingResultWithId<TChange> {
599
+ private getEditResultFromIndex(index: number): CachedEditingResult {
529
600
  const edit = this.log.getEditInSessionAtIndex(index);
530
- const before = this.getSnapshotInSession(index);
601
+ const before = this.getRevisionViewInSession(index);
531
602
  const resultAfter = this.getEditResultInSession(index + 1);
532
603
  if (resultAfter.status === undefined) {
533
604
  fail('The status of every edit in session should be known');
@@ -538,22 +609,25 @@ export class CachingLogViewer<TChange> implements LogViewer {
538
609
  status: EditStatus.Applied,
539
610
  before,
540
611
  changes: edit.changes,
541
- after: resultAfter.snapshot,
612
+ view: resultAfter.view,
542
613
  steps: resultAfter.steps,
543
614
  }
544
615
  : {
545
616
  id: edit.id,
546
617
  status: resultAfter.status,
618
+ failure: resultAfter.failure,
547
619
  before,
620
+ view: resultAfter.view,
548
621
  changes: edit.changes,
549
622
  };
550
623
  }
551
624
 
552
625
  /**
553
626
  * @param sequenceNumber - The server-assigned sequenced number assigned to the edit of interest.
554
- * @returns Edit result information for the edit with the given sequence number. Undefined if no such edit is known.
627
+ * @returns Edit result information for the edit with the given sequence number or the nearest sequenced edit before that.
628
+ * Undefined if no sequenced edit occurred at or prior to the given sequenceNumber.
555
629
  */
556
- public getEditResultFromSequenceNumber(sequenceNumber: number): EditingResultWithId<TChange> | undefined {
630
+ public getEditResultFromSequenceNumber(sequenceNumber: number): CachedEditingResult | undefined {
557
631
  const earliestSequenced = this.earliestSequencedEditInSession();
558
632
  if (earliestSequenced !== undefined && sequenceNumber >= earliestSequenced.sequenceNumber) {
559
633
  const lowestIndex = this.log.getIndexOfId(earliestSequenced.edit.id);
@@ -568,7 +642,7 @@ export class CachingLogViewer<TChange> implements LogViewer {
568
642
  // has been processed by a different DDS (several DDSes can share the same stream of operations and will only see those
569
643
  // relevant to them). In such cases, we return the edit info for the last known edit before that.
570
644
  if (orderedId.sequenceInfo && orderedId.sequenceInfo.sequenceNumber <= sequenceNumber) {
571
- const before = this.getSnapshotInSession(index);
645
+ const before = this.getRevisionViewInSession(index);
572
646
  const resultAfter = this.getEditResultInSession(index + 1);
573
647
  if (resultAfter.status === undefined) {
574
648
  fail('The status of every edit in session should be known');
@@ -579,13 +653,15 @@ export class CachingLogViewer<TChange> implements LogViewer {
579
653
  status: EditStatus.Applied,
580
654
  before,
581
655
  changes: edit.changes,
582
- after: resultAfter.snapshot,
656
+ view: resultAfter.view,
583
657
  steps: resultAfter.steps,
584
658
  }
585
659
  : {
586
660
  id: edit.id,
587
661
  status: resultAfter.status,
662
+ failure: resultAfter.failure,
588
663
  before,
664
+ view: resultAfter.view,
589
665
  changes: edit.changes,
590
666
  };
591
667
  }