@fluid-experimental/tree 0.58.2001 → 0.59.2000-61729

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 +71 -0
  114. package/dist/Transaction.d.ts.map +1 -0
  115. package/dist/Transaction.js +92 -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 +71 -0
  302. package/lib/Transaction.d.ts.map +1 -0
  303. package/lib/Transaction.js +88 -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 +109 -329
  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 +120 -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/Forest.ts CHANGED
@@ -4,28 +4,44 @@
4
4
  */
5
5
 
6
6
  import BTree from 'sorted-btree';
7
- import { fail, assert, comparePayloads, copyPropertyIfDefined } from './Common';
8
- import { NodeData, Payload } from './generic';
7
+ import { fail, assert, copyPropertyIfDefined, compareBtrees, compareFiniteNumbers } from './Common';
9
8
  import { NodeId, TraitLabel } from './Identifiers';
10
- import { compareStrings } from './SnapshotUtilities';
11
-
12
- type Optional<T> = {
13
- [P in keyof T]: T[P] | undefined;
14
- };
9
+ import { comparePayloads } from './PayloadUtilities';
10
+ import { NodeData, Payload } from './persisted-types';
15
11
 
16
12
  /**
17
- * A node that can be contained within a Forest.
13
+ * A node that can be contained within a Forest
14
+ *
15
+ * @public
18
16
  */
19
- export interface ForestNode extends NodeData {
17
+ export interface ForestNode extends NodeData<NodeId> {
20
18
  readonly traits: ReadonlyMap<TraitLabel, readonly NodeId[]>;
21
19
  }
22
20
 
23
- interface ForestNodeWithParentage extends ForestNode, Optional<ParentData> {
24
- readonly _brand: unique symbol;
21
+ /**
22
+ * A node within a Forest that has a parent (and is therefore not the root node)
23
+ *
24
+ * @public
25
+ */
26
+ export interface ParentedForestNode extends ForestNode, ParentData {}
27
+
28
+ /**
29
+ * Check whether or not the given node in a forest is parented
30
+ *
31
+ * @public
32
+ */
33
+ export function isParentedForestNode(node: ForestNode): node is ParentedForestNode {
34
+ const parentedNode = node as ForestNode & Partial<ParentedForestNode>;
35
+ const hasParent = parentedNode.parentId !== undefined;
36
+ const hasTraitParent = parentedNode.traitParent !== undefined;
37
+ assert(hasParent === hasTraitParent, 'node must have either both parent and traitParent set or neither');
38
+ return hasParent;
25
39
  }
26
40
 
27
41
  /**
28
42
  * Information about a ForestNode's parent
43
+ *
44
+ * @public
29
45
  */
30
46
  export interface ParentData {
31
47
  readonly parentId: NodeId;
@@ -51,20 +67,22 @@ export interface Delta<NodeId> {
51
67
  }
52
68
 
53
69
  interface ForestState {
54
- nodes: BTree<NodeId, ForestNodeWithParentage>;
70
+ nodes: BTree<NodeId, ForestNode>;
55
71
  expensiveValidation: boolean;
56
72
  }
57
73
 
58
74
  /**
59
75
  * An immutable forest of ForestNode.
60
76
  * Enforces single parenting, and allows querying the parent.
77
+ *
78
+ * @public
61
79
  */
62
80
  export class Forest {
63
81
  /**
64
82
  * Contains the nodes in the forest.
65
83
  * Used as an immutable data-structure: must not be modified.
66
84
  */
67
- private readonly nodes: BTree<NodeId, ForestNodeWithParentage>;
85
+ private readonly nodes: BTree<NodeId, ForestNode>;
68
86
 
69
87
  /**
70
88
  * If true, consistency checks will be applied after forest operations.
@@ -87,7 +105,7 @@ export class Forest {
87
105
  this.nodes = data.nodes;
88
106
  this.expensiveValidation = data.expensiveValidation;
89
107
  } else {
90
- this.nodes = new BTree<NodeId, ForestNodeWithParentage>(undefined, compareStrings);
108
+ this.nodes = new BTree<NodeId, ForestNode>(undefined, compareFiniteNumbers);
91
109
  this.expensiveValidation = data ?? false;
92
110
  }
93
111
  if (this.expensiveValidation) {
@@ -110,14 +128,21 @@ export class Forest {
110
128
  }
111
129
 
112
130
  /**
113
- * Adds the supplied nodes to the forest. The IDs must be unique in the forest.
131
+ * Adds the supplied nodes to the forest. The nodes' IDs must be unique in the forest.
114
132
  * @param nodes - the sequence of nodes to add to the forest. If any of them have children which exist in the forest already, those
115
- * children will be parented. Any trait arrays present in a node must be non-empty.
133
+ * children will be parented. Any trait arrays present in a node must be non-empty. The nodes may be provided in any order.
116
134
  */
117
135
  public add(nodes: Iterable<ForestNode>): Forest {
118
136
  const newNodes = [...nodes];
119
- const childToParent = new Map<NodeId, ParentData>();
120
137
  const mutableNodes = this.nodes.clone();
138
+
139
+ // This method iterates through the supplied nodes in two passes, first looking only at children and second actually adding the
140
+ // nodes. This allows nodes to be passed in any order, e.g. a parent followed by a child or a child followed by a parent.
141
+
142
+ const childToParent = new Map<NodeId, ParentData>(); // Temporarily records the parentage of children that don't exist yet
143
+
144
+ // First, inspect the children of each node. If the child is already in the forest, update its parentage. If it is not in the
145
+ // forest, it may be about to be added in the second loop below so record its parentage temporarily for when that happens.
121
146
  for (const node of newNodes) {
122
147
  const { identifier } = node;
123
148
  for (const [traitLabel, trait] of node.traits) {
@@ -125,8 +150,8 @@ export class Forest {
125
150
  for (const childId of trait) {
126
151
  const child = mutableNodes.get(childId);
127
152
  if (child !== undefined) {
128
- assert(child.parentId === undefined, 'can not give a child multiple parents');
129
153
  // A child already exists in the forest, and its parent is now being added
154
+ assert(!isParentedForestNode(child), 'can not give a child multiple parents');
130
155
  const parentedChild = {
131
156
  definition: child.definition,
132
157
  identifier: child.identifier,
@@ -135,19 +160,22 @@ export class Forest {
135
160
  traitParent: traitLabel,
136
161
  };
137
162
  copyPropertyIfDefined(child, parentedChild, 'payload');
138
- mutableNodes.set(childId, parentedChild as ForestNodeWithParentage);
163
+ // Overwrite the existing child with its parented version
164
+ mutableNodes.set(childId, parentedChild);
139
165
  } else {
166
+ // The child hasn't been added yet, so record its parentage to use when it is added below
140
167
  childToParent.set(childId, { parentId: identifier, traitParent: traitLabel });
141
168
  }
142
169
  }
143
170
  }
144
171
  }
145
172
 
173
+ // Now add each node to the forest and apply any parentage information that was recorded above
146
174
  for (const node of newNodes) {
147
175
  const parentData = childToParent.get(node.identifier);
148
176
  assert(!mutableNodes.has(node.identifier), 'can not add node with already existing id');
149
177
  if (parentData !== undefined) {
150
- // A parent and child have both been added for the first time
178
+ // This is a child whom we haven't added yet, but whose parent we already added above. Supply the recorded parentage info.
151
179
  const child = {
152
180
  definition: node.definition,
153
181
  identifier: node.identifier,
@@ -155,10 +183,10 @@ export class Forest {
155
183
  ...parentData,
156
184
  };
157
185
  copyPropertyIfDefined(node, child, 'payload');
158
- mutableNodes.set(node.identifier, child as ForestNodeWithParentage);
186
+ mutableNodes.set(node.identifier, child);
159
187
  } else {
160
- // A root node (no parent) has been added to the forest
161
- mutableNodes.set(node.identifier, node as ForestNodeWithParentage);
188
+ // This is a node that has no parent. Add it with no parentage information.
189
+ mutableNodes.set(node.identifier, node);
162
190
  }
163
191
  }
164
192
 
@@ -200,8 +228,8 @@ export class Forest {
200
228
 
201
229
  for (const childId of childIds) {
202
230
  mutableNodes.editRange(childId, childId, true, (_, n) => {
203
- assert(n.parentId === undefined, 'can not attach node that already has a parent');
204
- const breakVal: { value: ForestNodeWithParentage } = {
231
+ assert(!isParentedForestNode(n), 'can not attach node that already has a parent');
232
+ const breakVal: { value: ParentedForestNode } = {
205
233
  value: {
206
234
  ...n,
207
235
  parentId,
@@ -255,13 +283,14 @@ export class Forest {
255
283
  mutableNodes.set(parentId, { ...parentNode, traits });
256
284
  for (const childId of detached) {
257
285
  mutableNodes.editRange(childId, childId, true, (_, n) => {
258
- const breakVal: { value: ForestNodeWithParentage } = {
286
+ const breakVal: { value: ForestNode } = {
259
287
  value: {
260
- ...n,
261
- parentId: undefined,
262
- traitParent: undefined,
288
+ definition: n.definition,
289
+ identifier: n.identifier,
290
+ traits: n.traits,
263
291
  },
264
292
  };
293
+ copyPropertyIfDefined(n, breakVal.value, 'payload');
265
294
  return breakVal;
266
295
  });
267
296
  }
@@ -280,6 +309,7 @@ export class Forest {
280
309
  * @param nodeId - the id of the node
281
310
  * @param value - the new value
282
311
  */
312
+ // eslint-disable-next-line @rushstack/no-new-null
283
313
  public setValue(nodeId: NodeId, value: Payload | null): Forest {
284
314
  const node = this.nodes.get(nodeId);
285
315
  assert(node, 'can not replace payload for node that does not exist');
@@ -290,13 +320,20 @@ export class Forest {
290
320
  } else {
291
321
  delete newNode.payload;
292
322
  }
293
- mutableNodes.set(nodeId, newNode as ForestNodeWithParentage);
323
+ mutableNodes.set(nodeId, newNode);
294
324
  return new Forest({
295
325
  nodes: mutableNodes,
296
326
  expensiveValidation: this.expensiveValidation,
297
327
  });
298
328
  }
299
329
 
330
+ /**
331
+ * @returns true if the node associated with `id` exists in this forest, otherwise false
332
+ */
333
+ public has(id: NodeId): boolean {
334
+ return this.nodes.has(id);
335
+ }
336
+
300
337
  /**
301
338
  * @returns the node associated with `id`. Should not be used if there is no node with the provided id.
302
339
  */
@@ -328,24 +365,21 @@ export class Forest {
328
365
  });
329
366
  }
330
367
 
331
- private deleteRecursive(
332
- mutableNodes: BTree<NodeId, ForestNodeWithParentage>,
333
- id: NodeId,
334
- deleteChildren: boolean
335
- ): void {
368
+ private deleteRecursive(mutableNodes: BTree<NodeId, ForestNode>, id: NodeId, deleteChildren: boolean): void {
336
369
  const node = mutableNodes.get(id) ?? fail('node to delete must exist');
337
- assert(node.parentId === undefined && node.traitParent === undefined, 'deleted nodes must be unparented');
370
+ assert(!isParentedForestNode(node), 'deleted nodes must be unparented');
338
371
  mutableNodes.delete(id);
339
372
  for (const trait of node.traits.values()) {
340
373
  for (const childId of trait) {
341
374
  mutableNodes.editRange(childId, childId, true, (_, n) => {
342
- const breakVal: { value: ForestNodeWithParentage } = {
375
+ const breakVal: { value: ForestNode } = {
343
376
  value: {
344
- ...n,
345
- parentId: undefined,
346
- traitParent: undefined,
377
+ definition: n.definition,
378
+ identifier: n.identifier,
379
+ traits: n.traits,
347
380
  },
348
381
  };
382
+ copyPropertyIfDefined(n, breakVal.value, 'payload');
349
383
  return breakVal;
350
384
  });
351
385
 
@@ -363,12 +397,7 @@ export class Forest {
363
397
  public assertConsistent(): void {
364
398
  const checkedChildren = new Set<NodeId>([]);
365
399
  for (const [nodeId, node] of this.nodes.entries(undefined, [])) {
366
- assert(
367
- (node.parentId === undefined) === (node.traitParent === undefined),
368
- 'node must have either both parent and traitParent set or neither'
369
- );
370
-
371
- if (node.parentId !== undefined && node.traitParent !== undefined) {
400
+ if (isParentedForestNode(node)) {
372
401
  const parent = this.get(node.parentId);
373
402
  const trait = parent.traits.get(node.traitParent);
374
403
  assert(trait !== undefined);
@@ -380,6 +409,7 @@ export class Forest {
380
409
  for (const childId of trait) {
381
410
  const child = this.nodes.get(childId);
382
411
  assert(child, 'child in trait is not in forest');
412
+ assert(isParentedForestNode(child), 'child is not parented');
383
413
  assert(child.parentId === node.identifier, 'child parent pointer is incorrect');
384
414
  assert(
385
415
  !checkedChildren.has(childId),
@@ -404,10 +434,8 @@ export class Forest {
404
434
  fail('NodeId not found');
405
435
  }
406
436
 
407
- return {
408
- parentId: child.parentId ?? fail('Node is not parented'),
409
- traitParent: child.traitParent ?? fail('Node is not parented'),
410
- };
437
+ assert(isParentedForestNode(child), 'Node is not parented');
438
+ return { parentId: child.parentId, traitParent: child.traitParent };
411
439
  }
412
440
 
413
441
  /**
@@ -415,11 +443,7 @@ export class Forest {
415
443
  */
416
444
  public tryGetParent(id: NodeId): ParentData | undefined {
417
445
  const child = this.nodes.get(id);
418
- if (child === undefined) {
419
- return undefined;
420
- }
421
-
422
- if (child.parentId === undefined || child.traitParent === undefined) {
446
+ if (child === undefined || !isParentedForestNode(child)) {
423
447
  return undefined;
424
448
  }
425
449
 
@@ -429,10 +453,6 @@ export class Forest {
429
453
  };
430
454
  }
431
455
 
432
- private static breakOnDifference(): { break: boolean } {
433
- return { break: true };
434
- }
435
-
436
456
  /**
437
457
  * Compares two forests for equality.
438
458
  * @param forest - the other forest to compare to this one
@@ -448,19 +468,7 @@ export class Forest {
448
468
  return false;
449
469
  }
450
470
 
451
- const diff = this.nodes.diffAgainst(
452
- forest.nodes,
453
- Forest.breakOnDifference,
454
- Forest.breakOnDifference,
455
- (_, nodeThis, nodeOther) => {
456
- if (!compareForestNodes(nodeThis, nodeOther)) {
457
- return { break: true };
458
- }
459
- return undefined;
460
- }
461
- );
462
-
463
- return diff === undefined;
471
+ return compareBtrees(this.nodes, forest.nodes, compareForestNodes);
464
472
  }
465
473
 
466
474
  /**
@@ -496,7 +504,7 @@ export class Forest {
496
504
  }
497
505
 
498
506
  /**
499
- * @returns true iff two `SnapshotNodes` are equivalent.
507
+ * @returns true iff two `ForestNodes` are equivalent.
500
508
  * May return false for nodes they contain equivalent payloads encoded differently.
501
509
  */
502
510
  export function compareForestNodes(nodeA: ForestNode, nodeB: ForestNode): boolean {
@@ -3,49 +3,72 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { DetachedSequenceId, NodeId } from '../Identifiers';
7
- import { assert, fail } from '../Common';
8
- import { Snapshot, Side } from '../Snapshot';
9
- import { BuildNode, TreeNode } from '../generic';
10
- import { Change, ChangeType, Detach, Insert, SetValue, StableRange, StablePlace } from './PersistedTypes';
11
- import { Transaction } from './Transaction';
12
- import { rangeFromStableRange } from './EditUtilities';
6
+ import { DetachedSequenceId, isDetachedSequenceId, NodeId } from './Identifiers';
7
+ import { assert, fail } from './Common';
8
+ import { rangeFromStableRange } from './TreeViewUtilities';
9
+ import {
10
+ ChangeInternal,
11
+ ChangeTypeInternal,
12
+ DetachInternal,
13
+ SetValueInternal,
14
+ InsertInternal,
15
+ BuildNodeInternal,
16
+ Side,
17
+ StableRangeInternal,
18
+ } from './persisted-types';
19
+ import { TransactionInternal } from './TransactionInternal';
20
+ import { RangeValidationResultKind, validateStableRange } from './EditUtilities';
21
+ import { StablePlace } from './ChangeTypes';
22
+ import { RevisionView } from './RevisionView';
23
+ import { TreeView } from './TreeView';
24
+ import { getChangeNodeFromViewNode } from './SerializationUtilities';
13
25
 
14
26
  /**
15
27
  * Given a sequence of changes, produces an inverse sequence of changes, i.e. the minimal changes required to revert the given changes
16
28
  * @param changes - the changes for which to produce an inverse.
17
- * @param before - a snapshot of the tree state before `changes` are/were applied - used as a basis for generating the inverse.
18
- * @returns a sequence of changes _r_ that will produce `before` if applied to a snapshot _A_, where _A_ is the result of
19
- * applying `changes` to `before`. Applying _r_ to snapshots other than _A_ is legal but may cause the changes to fail to apply or may
20
- * not be a true semantic inverse.
29
+ * @param before - a view of the tree state before `changes` are/were applied - used as a basis for generating the inverse.
30
+ * @returns if the changes could be reverted, a sequence of changes _r_ that will produce `before` if applied to a view _A_, where _A_ is the result of
31
+ * applying `changes` to `before`. Applying _r_ to views other than _A_ is legal but may cause the changes to fail to apply or may
32
+ * not be a true semantic inverse. If the changes could not be reverted given the state of `before`, returns undefined.
21
33
  *
22
34
  * TODO: what should this do if `changes` fails to apply to `before`?
23
- * @public
35
+ * TODO:#68574: Pass a view that corresponds to the appropriate Fluid reference sequence number rather than the view just before
36
+ * @internal
24
37
  */
25
- export function revert(changes: readonly Change[], before: Snapshot): Change[] {
26
- const result: Change[] = [];
38
+ export function revert(changes: readonly ChangeInternal[], before: RevisionView): ChangeInternal[] | undefined {
39
+ const result: ChangeInternal[] = [];
27
40
 
28
41
  const builtNodes = new Map<DetachedSequenceId, NodeId[]>();
29
42
  const detachedNodes = new Map<DetachedSequenceId, NodeId[]>();
30
43
 
31
44
  // Open edit on revision to update it as changes are walked through
32
- const editor = new Transaction(before);
45
+ const editor = TransactionInternal.factory(before);
33
46
  // Apply `edit`, generating an inverse as we go.
34
47
  for (const change of changes) {
35
48
  // Generate an inverse of each change
36
49
  switch (change.type) {
37
- case ChangeType.Build: {
50
+ case ChangeTypeInternal.Build: {
38
51
  // Save nodes added to the detached state for use in future changes
39
52
  const { destination, source } = change;
40
53
  assert(!builtNodes.has(destination), `Cannot revert Build: destination is already used by a Build`);
41
54
  assert(!detachedNodes.has(destination), `Cannot revert Build: destination is already used by a Detach`);
42
55
  builtNodes.set(
43
56
  destination,
44
- source.map((node) => (node as TreeNode<BuildNode>).identifier)
57
+ source.reduce((ids: NodeId[], curr: BuildNodeInternal) => {
58
+ if (isDetachedSequenceId(curr)) {
59
+ const nodesForDetachedSequence =
60
+ builtNodes.get(curr) ?? fail('detached sequence must have associated built nodes');
61
+
62
+ ids.push(...nodesForDetachedSequence);
63
+ } else {
64
+ ids.push(curr.identifier);
65
+ }
66
+ return ids;
67
+ }, [])
45
68
  );
46
69
  break;
47
70
  }
48
- case ChangeType.Insert: {
71
+ case ChangeTypeInternal.Insert: {
49
72
  const { source } = change;
50
73
  const nodesBuilt = builtNodes.get(source);
51
74
  const nodesDetached = detachedNodes.get(source);
@@ -57,37 +80,46 @@ export function revert(changes: readonly Change[], before: Snapshot): Change[] {
57
80
  result.unshift(createInvertedInsert(change, nodesDetached, true));
58
81
  detachedNodes.delete(source);
59
82
  } else {
60
- fail('Cannot revert Insert: source has not been built or detached.');
83
+ // Cannot revert an insert whose source is no longer available for inserting (i.e. not just built, and not detached)
84
+ return undefined;
61
85
  }
62
86
 
63
87
  break;
64
88
  }
65
- case ChangeType.Detach: {
89
+ case ChangeTypeInternal.Detach: {
66
90
  const { destination } = change;
67
- const { invertedDetach, detachedNodeIds } = createInvertedDetach(change, editor.view);
91
+ const invert = createInvertedDetach(change, editor.view);
92
+ if (invert === undefined) {
93
+ // Cannot revert a detach whose source does not exist in the tree
94
+ // TODO:68574: May not be possible once associated todo in `createInvertedDetach` is addressed
95
+ return undefined;
96
+ }
97
+ const { invertedDetach, detachedNodeIds } = invert;
68
98
 
69
99
  if (destination !== undefined) {
70
- assert(
71
- !builtNodes.has(destination),
72
- `Cannot revert Detach: destination is already used by a Build`
73
- );
74
- assert(
75
- !detachedNodes.has(destination),
76
- `Cannot revert Detach: destination is already used by a Detach`
77
- );
100
+ if (builtNodes.has(destination) || detachedNodes.has(destination)) {
101
+ // Malformed: destination was already used by a prior build or detach
102
+ return undefined;
103
+ }
78
104
  detachedNodes.set(destination, detachedNodeIds);
79
105
  }
80
106
 
81
107
  result.unshift(...invertedDetach);
82
108
  break;
83
109
  }
84
- case ChangeType.SetValue:
85
- result.unshift(...createInvertedSetValue(change, editor.view));
110
+ case ChangeTypeInternal.SetValue: {
111
+ const invert = createInvertedSetValue(change, editor.view);
112
+ if (invert === undefined) {
113
+ // Cannot revert a set for a node that does not exist in the tree
114
+ // TODO:68574: May not be possible once associated todo in `createInvertedSetValue` is addressed
115
+ return undefined;
116
+ }
117
+ result.unshift(...invert);
86
118
  break;
87
- case ChangeType.Constraint:
119
+ }
120
+ case ChangeTypeInternal.Constraint:
88
121
  // TODO:#46759: Support Constraint in reverts
89
122
  fail('Revert currently does not support Constraints');
90
- break;
91
123
  default:
92
124
  fail('Revert does not support the change type.');
93
125
  }
@@ -101,13 +133,17 @@ export function revert(changes: readonly Change[], before: Snapshot): Change[] {
101
133
  }
102
134
 
103
135
  /**
104
- * Inverse of an Insert is a Detach that starts before the leftmost node inserted and ends after the rightmost.
136
+ * The inverse of an Insert is a Detach that starts before the leftmost node inserted and ends after the rightmost.
105
137
  */
106
- function createInvertedInsert(insert: Insert, nodesInserted: readonly NodeId[], saveDetached = false): Change {
138
+ function createInvertedInsert(
139
+ insert: InsertInternal,
140
+ nodesInserted: readonly NodeId[],
141
+ saveDetached = false
142
+ ): ChangeInternal {
107
143
  const leftmostNode = nodesInserted[0];
108
144
  const rightmostNode = nodesInserted[nodesInserted.length - 1];
109
145
 
110
- const source: StableRange = {
146
+ const source: StableRangeInternal = {
111
147
  start: {
112
148
  referenceSibling: leftmostNode,
113
149
  side: Side.Before,
@@ -118,7 +154,7 @@ function createInvertedInsert(insert: Insert, nodesInserted: readonly NodeId[],
118
154
  },
119
155
  };
120
156
 
121
- return Change.detach(source, saveDetached ? insert.source : undefined);
157
+ return ChangeInternal.detach(source, saveDetached ? insert.source : undefined);
122
158
  }
123
159
 
124
160
  /**
@@ -150,17 +186,21 @@ function createInvertedInsert(insert: Insert, nodesInserted: readonly NodeId[],
150
186
  * anchor to the left of the originally detached nodes is chosen.
151
187
  */
152
188
  function createInvertedDetach(
153
- detach: Detach,
154
- snapshotBeforeEdit: Snapshot
155
- ): { invertedDetach: Change[]; detachedNodeIds: NodeId[] } {
156
- const { source } = detach;
189
+ detach: DetachInternal,
190
+ viewBeforeChange: TreeView
191
+ ): { invertedDetach: ChangeInternal[]; detachedNodeIds: NodeId[] } | undefined {
192
+ const validatedSource = validateStableRange(viewBeforeChange, detach.source);
193
+ if (validatedSource.result !== RangeValidationResultKind.Valid) {
194
+ // TODO:#68574: having the reference view would potentially allow us to revert some detaches that currently conflict
195
+ return undefined;
196
+ }
157
197
 
158
- const { start, end } = rangeFromStableRange(snapshotBeforeEdit, source);
198
+ const { start, end } = rangeFromStableRange(viewBeforeChange, validatedSource);
159
199
  const { trait: referenceTrait } = start;
160
- const nodes = snapshotBeforeEdit.getTrait(referenceTrait);
200
+ const nodes = viewBeforeChange.getTrait(referenceTrait);
161
201
 
162
- const startIndex = snapshotBeforeEdit.findIndexWithinTrait(start);
163
- const endIndex = snapshotBeforeEdit.findIndexWithinTrait(end);
202
+ const startIndex = viewBeforeChange.findIndexWithinTrait(start);
203
+ const endIndex = viewBeforeChange.findIndexWithinTrait(end);
164
204
  const detachedNodeIds: NodeId[] = nodes.slice(startIndex, endIndex);
165
205
 
166
206
  const leftOfDetached = nodes.slice(0, startIndex);
@@ -188,7 +228,7 @@ function createInvertedDetach(
188
228
 
189
229
  if (detach.destination !== undefined) {
190
230
  return {
191
- invertedDetach: [Change.insert(detach.destination, insertDestination)],
231
+ invertedDetach: [ChangeInternal.insert(detach.destination, insertDestination)],
192
232
  detachedNodeIds,
193
233
  };
194
234
  }
@@ -196,20 +236,30 @@ function createInvertedDetach(
196
236
  const detachedSequenceId = 0 as DetachedSequenceId;
197
237
  return {
198
238
  invertedDetach: [
199
- Change.build(snapshotBeforeEdit.getChangeNodes(detachedNodeIds), detachedSequenceId),
200
- Change.insert(detachedSequenceId, insertDestination),
239
+ ChangeInternal.build(
240
+ detachedNodeIds.map((id) => getChangeNodeFromViewNode(viewBeforeChange, id)),
241
+ detachedSequenceId
242
+ ),
243
+ ChangeInternal.insert(detachedSequenceId, insertDestination),
201
244
  ],
202
245
  detachedNodeIds,
203
246
  };
204
247
  }
205
248
 
206
- function createInvertedSetValue(setValue: SetValue, revisionBeforeEdit: Snapshot): Change[] {
249
+ /**
250
+ * The inverse of a SetValue is a SetValue that sets the value to what it was prior to the change.
251
+ */
252
+ function createInvertedSetValue(setValue: SetValueInternal, viewBeforeChange: TreeView): ChangeInternal[] | undefined {
207
253
  const { nodeToModify } = setValue;
208
- const oldPayload = revisionBeforeEdit.getSnapshotNode(nodeToModify).payload;
254
+ const node = viewBeforeChange.tryGetViewNode(nodeToModify);
255
+ if (node === undefined) {
256
+ // TODO:68574: With a reference view, may be able to better resolve conflicting sets
257
+ return undefined;
258
+ }
209
259
 
210
260
  // Rationale: 'undefined' is reserved for future use (see 'SetValue' interface)
211
- if (oldPayload !== null) {
212
- return [Change.setPayload(nodeToModify, oldPayload)];
261
+ if (node.payload !== null) {
262
+ return [ChangeInternal.setPayload(nodeToModify, node.payload)];
213
263
  }
214
- return [Change.clearPayload(nodeToModify)];
264
+ return [ChangeInternal.clearPayload(nodeToModify)];
215
265
  }