@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
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 } 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,44 @@ 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,
219
264
  minimumSequenceNumber = 0
220
265
  ) {
221
266
  this.log = log;
@@ -229,83 +274,86 @@ export class CachingLogViewer<TChange> implements LogViewer {
229
274
  });
230
275
  }
231
276
 
232
- this.sequencedSnapshotCache = new RevisionValueCache(
277
+ this.sequencedRevisionCache = new RevisionValueCache(
233
278
  CachingLogViewer.sequencedCacheSizeMax,
234
279
  minimumSequenceNumber,
235
- [...knownRevisions, [0, { snapshot: baseSnapshot }]]
280
+ [...knownRevisions, [0, { view: baseView }]]
236
281
  );
237
282
  this.processEditStatus = processEditStatus ?? noop;
283
+ this.processSequencedEditResult = processSequencedEditResult ?? noop;
238
284
  this.expensiveValidation = expensiveValidation;
239
- this.logger = logger;
240
- this.transactionFactory = transactionFactory;
241
- this.log.registerEditAddedHandler(this.handleEditAdded.bind(this));
285
+ this.detachFromEditLog = this.log.registerEditAddedHandler(this.handleEditAdded.bind(this));
242
286
  }
243
287
 
244
288
  /**
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
289
+ * As a performance optimization, this method caches views generated by local edits if they are sequenced without
247
290
  * being interleaved with remote edits.
248
291
  */
249
- private handleEditAdded(edit: Edit<TChange>, isLocal: boolean, wasLocal: boolean): void {
292
+ private handleEditAdded(edit: Edit<ChangeInternal>, isLocal: boolean, wasLocal: boolean): void {
293
+ // Clear highestRevisionCacheEntry, since what revision is highest might change.
294
+ // Note that as an optimization we could skip clearing this when a local edit is sequenced.
295
+ this.highestRevisionCacheEntry = undefined;
296
+
250
297
  if (isLocal) {
251
298
  this.unappliedSelfEdits.push(edit.id);
252
299
  } else if (wasLocal) {
253
300
  // If the new sequenced edit was generated by this client, the corresponding cache entry (if there is one)
254
301
  // will be at the front of the queue. If the queue is empty, then a concurrent sequenced edit from remote client
255
302
  // must have invalidated the queue cache.
256
- const entry = this.localSnapshotCache.shift();
303
+ const entry = this.localRevisionCache.shift();
257
304
  if (entry !== undefined) {
258
305
  const revision = this.log.numberOfSequencedEdits;
259
- const snapshot = entry.snapshot;
260
- this.sequencedSnapshotCache.cacheValue(
306
+ const { view } = entry;
307
+ this.sequencedRevisionCache.cacheValue(
261
308
  revision,
262
309
  entry.status === EditStatus.Applied
263
310
  ? {
264
- snapshot,
311
+ view,
265
312
  status: entry.status,
266
313
  steps: entry.steps,
267
314
  }
268
315
  : {
269
- snapshot,
316
+ view,
270
317
  status: entry.status,
318
+ failure: entry.failure,
271
319
  }
272
320
  );
273
- this.handleSequencedEditResult(edit, entry);
321
+ this.handleSequencedEditResult(edit, entry, []);
274
322
  }
275
323
  } else {
276
324
  // Invalidate any cached results of applying edits which are ordered after `edit` (which are all remaining local edits)
277
- this.localSnapshotCache.clear();
325
+ this.localRevisionCache.clear();
278
326
  }
279
327
  }
280
328
 
281
- public async getEditResult(revision: Revision): Promise<EditCacheEntry<TChange>> {
329
+ public async getEditResult(revision: Revision): Promise<EditCacheEntry> {
282
330
  const startingPoint = this.getStartingPoint(revision);
283
331
  const { startRevision } = startingPoint;
284
- let current: EditCacheEntry<TChange> = startingPoint;
332
+ let current: EditCacheEntry = startingPoint;
285
333
  for (let i = startRevision; i < revision && i < this.log.length; i++) {
286
334
  const edit = await this.log.getEditAtIndex(i);
287
- current = this.applyEdit(current.snapshot, edit, i);
335
+ current = this.applyEdit(current.view, edit, i);
288
336
  }
289
337
  return current;
290
338
  }
291
339
 
292
- public async getSnapshot(revision: Revision): Promise<Snapshot> {
293
- return (await this.getEditResult(revision)).snapshot;
340
+ public async getRevisionView(revision: Revision): Promise<RevisionView> {
341
+ return (await this.getEditResult(revision)).view;
294
342
  }
295
343
 
296
- public getEditResultInSession(revision: Revision): EditCacheEntry<TChange> {
344
+ public getEditResultInSession(revision: Revision): EditCacheEntry {
297
345
  const startingPoint = this.getStartingPoint(revision);
298
346
  const { startRevision } = startingPoint;
299
- let current: EditCacheEntry<TChange> = startingPoint;
347
+ let current: EditCacheEntry = startingPoint;
300
348
  for (let i = startRevision; i < revision && i < this.log.length; i++) {
301
349
  const edit = this.log.getEditInSessionAtIndex(i);
302
- current = this.applyEdit(current.snapshot, edit, i);
350
+ current = this.applyEdit(current.view, edit, i);
303
351
  }
304
352
  return current;
305
353
  }
306
354
 
307
- public getSnapshotInSession(revision: Revision): Snapshot {
308
- return this.getEditResultInSession(revision).snapshot;
355
+ public getRevisionViewInSession(revision: Revision): RevisionView {
356
+ return this.getEditResultInSession(revision).view;
309
357
  }
310
358
 
311
359
  /**
@@ -318,105 +366,120 @@ export class CachingLogViewer<TChange> implements LogViewer {
318
366
  // Sequence numbers in Fluid are 1-indexed, meaning they correspond to revisions, and can be used as revisions.
319
367
  // This ensures that all revisions >= minimumSequenceNumber are kept in the cache, meaning that even if all clients are caught up
320
368
  // the most recent sequenced revision will be cached.
321
- this.sequencedSnapshotCache.updateRetentionWindow(minimumSequenceNumber);
369
+ this.sequencedRevisionCache.updateRetentionWindow(minimumSequenceNumber);
322
370
  }
323
371
 
324
372
  /**
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.
373
+ * Inform the CachingLogViewer that a particular edit is known to have a specific result when applied to a particular TreeView.
374
+ * CachingLogViewer may use this information as an optimization to avoid re-running the edit if re-applied to the same TreeView.
327
375
  */
328
- public setKnownEditingResult(edit: Edit<TChange>, result: EditingResult<TChange>): void {
376
+ public setKnownEditingResult(edit: Edit<ChangeInternal>, result: EditingResult): void {
329
377
  this.cachedEditResult = { editId: edit.id, result };
330
378
  }
331
379
 
332
380
  /**
333
- * @returns the cached snapshot closest to the requested `revision`.
381
+ * @returns the cached revision view closest to the requested `revision`.
334
382
  */
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`.
383
+ private getStartingPoint(revision: Revision): { startRevision: Revision } & EditCacheEntry {
384
+ // Per the documentation for revision, the returned view should be the output of the edit at the largest index <= `revision`.
337
385
  const revisionClamped = Math.min(revision, this.log.length);
338
- let current: EditCacheEntry<TChange>;
386
+
387
+ // If the highest revision is requested, and it's cached, use highestRevisionCacheEntry.
388
+ if (revisionClamped === this.log.length && this.highestRevisionCacheEntry !== undefined) {
389
+ return { ...this.highestRevisionCacheEntry, startRevision: revisionClamped };
390
+ }
391
+
392
+ let current: EditCacheEntry;
339
393
  let startRevision: Revision;
340
394
  const { numberOfSequencedEdits } = this.log;
341
395
  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.
396
+ if (isLocalRevision && !this.localRevisionCache.isEmpty()) {
397
+ const { length } = this.localRevisionCache;
398
+ // 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
399
  // This is because the local cache does not contain an entry for the implicit initial tree edit.
346
400
  const localCacheIndex = revisionClamped - 1 - numberOfSequencedEdits;
347
401
  if (localCacheIndex < length) {
348
402
  const cached =
349
- this.localSnapshotCache.peekAt(localCacheIndex) ?? fail('missing tail of localSnapshotCache');
403
+ this.localRevisionCache.peekAt(localCacheIndex) ?? fail('missing tail of localRevisionViewCache');
350
404
  return {
351
405
  ...cached,
352
406
  startRevision: revisionClamped,
353
407
  };
354
408
  } else {
355
- current = this.localSnapshotCache.peekAt(length - 1) ?? fail('missing tail of localSnapshotCache');
409
+ current = this.localRevisionCache.peekAt(length - 1) ?? fail('missing tail of localRevisionViewCache');
356
410
  startRevision = numberOfSequencedEdits + length;
357
411
  }
358
412
  } else {
359
- const [cachedRevision, cachedSnapshot] =
360
- this.sequencedSnapshotCache.getClosestEntry(revisionClamped) ?? fail('No preceding snapshot cached.');
413
+ const [cachedRevision, cachedView] =
414
+ this.sequencedRevisionCache.getClosestEntry(revisionClamped) ??
415
+ fail('No preceding revision view cached.');
416
+
361
417
  startRevision = cachedRevision;
362
- current = cachedSnapshot;
418
+ current = cachedView;
363
419
  }
364
420
  return { startRevision, ...current };
365
421
  }
366
422
 
367
423
  /**
368
- * Helper for applying an edit at the supplied snapshot.
424
+ * Helper for applying an edit at the supplied revision view.
369
425
  * Must only be called in the order that edits appear in the log.
370
426
  * Must only be called once for a given local edit as long as the local cache has not been invalidated.
371
427
  * Must only be called once for a given sequenced edit.
372
- * @returns the resulting snapshot and the outcome of edit that produced it.
428
+ * @returns the resulting revision view and the outcome of edit that produced it.
373
429
  */
374
430
  private applyEdit(
375
- prevSnapshot: Snapshot,
376
- edit: Edit<TChange>,
431
+ prevView: RevisionView,
432
+ edit: Edit<ChangeInternal>,
377
433
  editIndex: number
378
- ): AttemptedEditResultCacheEntry<TChange> {
379
- let editingResult: EditingResult<TChange>;
434
+ ): AttemptedEditResultCacheEntry {
435
+ let editingResult: EditingResult;
380
436
  let cached;
437
+ let reconciliationPath: ReconciliationPath = [];
381
438
  if (
382
439
  this.cachedEditResult !== undefined &&
383
440
  this.cachedEditResult.editId === edit.id &&
384
- this.cachedEditResult.result.before === prevSnapshot
441
+ this.cachedEditResult.result.before === prevView
385
442
  ) {
386
443
  editingResult = this.cachedEditResult.result;
387
444
  cached = true;
388
445
  } else {
389
- editingResult = this.transactionFactory(prevSnapshot)
390
- .applyChanges(edit.changes, this.reconciliationPathFromEdit(edit.id))
446
+ reconciliationPath = this.reconciliationPathFromEdit(edit.id);
447
+ editingResult = TransactionInternal.factory(prevView)
448
+ .applyChanges(edit.changes, reconciliationPath)
391
449
  .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
  }