@fluid-experimental/tree 0.58.2000 → 0.58.3000-61081

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (815) hide show
  1. package/README.md +9 -9
  2. package/dist/ChangeCompression.d.ts +39 -0
  3. package/dist/ChangeCompression.d.ts.map +1 -0
  4. package/dist/ChangeCompression.js +117 -0
  5. package/dist/ChangeCompression.js.map +1 -0
  6. package/{lib/default-edits/PersistedTypes.d.ts → dist/ChangeTypes.d.ts} +58 -100
  7. package/dist/ChangeTypes.d.ts.map +1 -0
  8. package/dist/{default-edits/PersistedTypes.js → ChangeTypes.js} +21 -76
  9. package/dist/ChangeTypes.js.map +1 -0
  10. package/dist/Checkout.d.ts +39 -27
  11. package/dist/Checkout.d.ts.map +1 -1
  12. package/dist/Checkout.js +59 -31
  13. package/dist/Checkout.js.map +1 -1
  14. package/dist/Common.d.ts +175 -38
  15. package/dist/Common.d.ts.map +1 -1
  16. package/dist/Common.js +240 -103
  17. package/dist/Common.js.map +1 -1
  18. package/dist/EagerCheckout.d.ts +24 -0
  19. package/dist/EagerCheckout.d.ts.map +1 -0
  20. package/dist/{BasicCheckout.js → EagerCheckout.js} +9 -6
  21. package/dist/EagerCheckout.js.map +1 -0
  22. package/dist/EditLog.d.ts +77 -63
  23. package/dist/EditLog.d.ts.map +1 -1
  24. package/dist/EditLog.js +85 -48
  25. package/dist/EditLog.js.map +1 -1
  26. package/dist/EditUtilities.d.ts +168 -0
  27. package/dist/EditUtilities.d.ts.map +1 -0
  28. package/dist/EditUtilities.js +373 -0
  29. package/dist/EditUtilities.js.map +1 -0
  30. package/dist/EventTypes.d.ts +73 -0
  31. package/dist/EventTypes.d.ts.map +1 -0
  32. package/dist/EventTypes.js +78 -0
  33. package/dist/EventTypes.js.map +1 -0
  34. package/dist/Forest.d.ts +29 -7
  35. package/dist/Forest.d.ts.map +1 -1
  36. package/dist/Forest.js +60 -36
  37. package/dist/Forest.js.map +1 -1
  38. package/dist/HistoryEditFactory.d.ts +20 -0
  39. package/dist/HistoryEditFactory.d.ts.map +1 -0
  40. package/dist/HistoryEditFactory.js +226 -0
  41. package/dist/HistoryEditFactory.js.map +1 -0
  42. package/dist/IdConversion.d.ts +12 -0
  43. package/dist/IdConversion.d.ts.map +1 -0
  44. package/dist/IdConversion.js +98 -0
  45. package/dist/IdConversion.js.map +1 -0
  46. package/dist/Identifiers.d.ts +89 -2
  47. package/dist/Identifiers.d.ts.map +1 -1
  48. package/dist/Identifiers.js +10 -0
  49. package/dist/Identifiers.js.map +1 -1
  50. package/dist/InitialTree.d.ts +2 -2
  51. package/dist/InitialTree.d.ts.map +1 -1
  52. package/dist/InitialTree.js +2 -1
  53. package/dist/InitialTree.js.map +1 -1
  54. package/dist/LazyCheckout.d.ts +28 -0
  55. package/dist/LazyCheckout.d.ts.map +1 -0
  56. package/dist/LazyCheckout.js +44 -0
  57. package/dist/LazyCheckout.js.map +1 -0
  58. package/dist/LogViewer.d.ts +130 -85
  59. package/dist/LogViewer.d.ts.map +1 -1
  60. package/dist/LogViewer.js +110 -85
  61. package/dist/LogViewer.js.map +1 -1
  62. package/dist/MergeHealth.d.ts +221 -0
  63. package/dist/MergeHealth.d.ts.map +1 -0
  64. package/dist/MergeHealth.js +263 -0
  65. package/dist/MergeHealth.js.map +1 -0
  66. package/dist/NodeIdUtilities.d.ts +90 -0
  67. package/dist/NodeIdUtilities.d.ts.map +1 -0
  68. package/dist/NodeIdUtilities.js +60 -0
  69. package/dist/NodeIdUtilities.js.map +1 -0
  70. package/dist/PayloadUtilities.d.ts +42 -0
  71. package/dist/PayloadUtilities.d.ts.map +1 -0
  72. package/dist/PayloadUtilities.js +114 -0
  73. package/dist/PayloadUtilities.js.map +1 -0
  74. package/dist/ReconciliationPath.d.ts +18 -13
  75. package/dist/ReconciliationPath.d.ts.map +1 -1
  76. package/dist/ReconciliationPath.js.map +1 -1
  77. package/dist/RevisionValueCache.d.ts +11 -2
  78. package/dist/RevisionValueCache.d.ts.map +1 -1
  79. package/dist/RevisionValueCache.js +2 -3
  80. package/dist/RevisionValueCache.js.map +1 -1
  81. package/dist/RevisionView.d.ts +83 -0
  82. package/dist/RevisionView.d.ts.map +1 -0
  83. package/dist/RevisionView.js +182 -0
  84. package/dist/RevisionView.js.map +1 -0
  85. package/dist/SerializationUtilities.d.ts +36 -0
  86. package/dist/SerializationUtilities.d.ts.map +1 -0
  87. package/dist/SerializationUtilities.js +102 -0
  88. package/dist/SerializationUtilities.js.map +1 -0
  89. package/dist/SharedTree.d.ts +400 -0
  90. package/dist/SharedTree.d.ts.map +1 -0
  91. package/dist/SharedTree.js +1064 -0
  92. package/dist/SharedTree.js.map +1 -0
  93. package/dist/SharedTreeEncoder.d.ts +102 -0
  94. package/dist/SharedTreeEncoder.d.ts.map +1 -0
  95. package/dist/SharedTreeEncoder.js +313 -0
  96. package/dist/SharedTreeEncoder.js.map +1 -0
  97. package/dist/StringInterner.d.ts +46 -0
  98. package/dist/StringInterner.d.ts.map +1 -0
  99. package/dist/StringInterner.js +61 -0
  100. package/dist/StringInterner.js.map +1 -0
  101. package/dist/Summary.d.ts +40 -0
  102. package/dist/Summary.d.ts.map +1 -0
  103. package/dist/Summary.js +23 -0
  104. package/dist/Summary.js.map +1 -0
  105. package/dist/SummaryBackCompatibility.d.ts +22 -22
  106. package/dist/SummaryBackCompatibility.d.ts.map +1 -1
  107. package/dist/SummaryBackCompatibility.js +30 -33
  108. package/dist/SummaryBackCompatibility.js.map +1 -1
  109. package/dist/SummaryTestUtilities.d.ts +31 -0
  110. package/dist/SummaryTestUtilities.d.ts.map +1 -0
  111. package/dist/SummaryTestUtilities.js +37 -0
  112. package/dist/SummaryTestUtilities.js.map +1 -0
  113. package/dist/Transaction.d.ts +53 -0
  114. package/dist/Transaction.d.ts.map +1 -0
  115. package/dist/Transaction.js +76 -0
  116. package/dist/Transaction.js.map +1 -0
  117. package/dist/TransactionInternal.d.ts +543 -0
  118. package/dist/TransactionInternal.d.ts.map +1 -0
  119. package/dist/TransactionInternal.js +622 -0
  120. package/dist/TransactionInternal.js.map +1 -0
  121. package/dist/TreeCompressor.d.ts +37 -0
  122. package/dist/TreeCompressor.d.ts.map +1 -0
  123. package/dist/TreeCompressor.js +132 -0
  124. package/dist/TreeCompressor.js.map +1 -0
  125. package/dist/TreeNodeHandle.d.ts +12 -18
  126. package/dist/TreeNodeHandle.d.ts.map +1 -1
  127. package/dist/TreeNodeHandle.js +13 -23
  128. package/dist/TreeNodeHandle.js.map +1 -1
  129. package/dist/TreeView.d.ts +166 -0
  130. package/dist/TreeView.d.ts.map +1 -0
  131. package/dist/TreeView.js +217 -0
  132. package/dist/TreeView.js.map +1 -0
  133. package/dist/TreeViewUtilities.d.ts +21 -0
  134. package/dist/TreeViewUtilities.d.ts.map +1 -0
  135. package/dist/TreeViewUtilities.js +77 -0
  136. package/dist/TreeViewUtilities.js.map +1 -0
  137. package/dist/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  138. package/dist/UndoRedoHandler.d.ts.map +1 -0
  139. package/dist/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +5 -9
  140. package/dist/UndoRedoHandler.js.map +1 -0
  141. package/dist/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  142. package/dist/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  143. package/dist/id-compressor/AppendOnlySortedMap.js +283 -0
  144. package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -0
  145. package/dist/id-compressor/IdCompressor.d.ts +389 -0
  146. package/dist/id-compressor/IdCompressor.d.ts.map +1 -0
  147. package/dist/id-compressor/IdCompressor.js +1353 -0
  148. package/dist/id-compressor/IdCompressor.js.map +1 -0
  149. package/dist/id-compressor/IdRange.d.ts +11 -0
  150. package/dist/id-compressor/IdRange.d.ts.map +1 -0
  151. package/dist/id-compressor/IdRange.js +29 -0
  152. package/dist/id-compressor/IdRange.js.map +1 -0
  153. package/dist/id-compressor/NumericUuid.d.ts +63 -0
  154. package/dist/id-compressor/NumericUuid.d.ts.map +1 -0
  155. package/dist/id-compressor/NumericUuid.js +377 -0
  156. package/dist/id-compressor/NumericUuid.js.map +1 -0
  157. package/dist/id-compressor/index.d.ts +12 -0
  158. package/dist/id-compressor/index.d.ts.map +1 -0
  159. package/dist/id-compressor/index.js +26 -0
  160. package/dist/id-compressor/index.js.map +1 -0
  161. package/dist/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  162. package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  163. package/dist/id-compressor/persisted-types/0.0.1.js +7 -0
  164. package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -0
  165. package/dist/id-compressor/persisted-types/index.d.ts +6 -0
  166. package/dist/id-compressor/persisted-types/index.d.ts.map +1 -0
  167. package/dist/id-compressor/persisted-types/index.js +18 -0
  168. package/dist/id-compressor/persisted-types/index.js.map +1 -0
  169. package/dist/index.d.ts +29 -9
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +50 -35
  172. package/dist/index.js.map +1 -1
  173. package/dist/persisted-types/0.0.2.d.ts +385 -0
  174. package/dist/persisted-types/0.0.2.d.ts.map +1 -0
  175. package/dist/persisted-types/0.0.2.js +113 -0
  176. package/dist/persisted-types/0.0.2.js.map +1 -0
  177. package/dist/persisted-types/0.1.1.d.ts +314 -0
  178. package/dist/persisted-types/0.1.1.d.ts.map +1 -0
  179. package/dist/persisted-types/0.1.1.js +153 -0
  180. package/dist/persisted-types/0.1.1.js.map +1 -0
  181. package/dist/persisted-types/index.d.ts +7 -0
  182. package/dist/persisted-types/index.d.ts.map +1 -0
  183. package/dist/persisted-types/index.js +20 -0
  184. package/dist/persisted-types/index.js.map +1 -0
  185. package/docs/0-1-1-Compression.md +228 -0
  186. package/docs/Breaking-Change-Migration.md +52 -0
  187. package/docs/Compression.md +2 -2
  188. package/docs/Telemetry.md +43 -0
  189. package/lib/ChangeCompression.d.ts +39 -0
  190. package/lib/ChangeCompression.d.ts.map +1 -0
  191. package/lib/ChangeCompression.js +111 -0
  192. package/lib/ChangeCompression.js.map +1 -0
  193. package/{dist/default-edits/PersistedTypes.d.ts → lib/ChangeTypes.d.ts} +58 -100
  194. package/lib/ChangeTypes.d.ts.map +1 -0
  195. package/lib/{default-edits/PersistedTypes.js → ChangeTypes.js} +15 -68
  196. package/lib/ChangeTypes.js.map +1 -0
  197. package/lib/Checkout.d.ts +39 -27
  198. package/lib/Checkout.d.ts.map +1 -1
  199. package/lib/Checkout.js +51 -23
  200. package/lib/Checkout.js.map +1 -1
  201. package/lib/Common.d.ts +175 -38
  202. package/lib/Common.d.ts.map +1 -1
  203. package/lib/Common.js +226 -101
  204. package/lib/Common.js.map +1 -1
  205. package/lib/EagerCheckout.d.ts +24 -0
  206. package/lib/EagerCheckout.d.ts.map +1 -0
  207. package/lib/{BasicCheckout.js → EagerCheckout.js} +7 -4
  208. package/lib/EagerCheckout.js.map +1 -0
  209. package/lib/EditLog.d.ts +77 -63
  210. package/lib/EditLog.d.ts.map +1 -1
  211. package/lib/EditLog.js +83 -47
  212. package/lib/EditLog.js.map +1 -1
  213. package/lib/EditUtilities.d.ts +168 -0
  214. package/lib/EditUtilities.d.ts.map +1 -0
  215. package/lib/EditUtilities.js +353 -0
  216. package/lib/EditUtilities.js.map +1 -0
  217. package/lib/EventTypes.d.ts +73 -0
  218. package/lib/EventTypes.d.ts.map +1 -0
  219. package/lib/EventTypes.js +75 -0
  220. package/lib/EventTypes.js.map +1 -0
  221. package/lib/Forest.d.ts +29 -7
  222. package/lib/Forest.d.ts.map +1 -1
  223. package/lib/Forest.js +58 -35
  224. package/lib/Forest.js.map +1 -1
  225. package/lib/HistoryEditFactory.d.ts +20 -0
  226. package/lib/HistoryEditFactory.d.ts.map +1 -0
  227. package/lib/{default-edits/HistoryEditFactory.js → HistoryEditFactory.js} +78 -39
  228. package/lib/HistoryEditFactory.js.map +1 -0
  229. package/lib/IdConversion.d.ts +12 -0
  230. package/lib/IdConversion.d.ts.map +1 -0
  231. package/lib/IdConversion.js +91 -0
  232. package/lib/IdConversion.js.map +1 -0
  233. package/lib/Identifiers.d.ts +89 -2
  234. package/lib/Identifiers.d.ts.map +1 -1
  235. package/lib/Identifiers.js +8 -1
  236. package/lib/Identifiers.js.map +1 -1
  237. package/lib/InitialTree.d.ts +2 -2
  238. package/lib/InitialTree.d.ts.map +1 -1
  239. package/lib/InitialTree.js +2 -1
  240. package/lib/InitialTree.js.map +1 -1
  241. package/lib/LazyCheckout.d.ts +28 -0
  242. package/lib/LazyCheckout.d.ts.map +1 -0
  243. package/lib/LazyCheckout.js +40 -0
  244. package/lib/LazyCheckout.js.map +1 -0
  245. package/lib/LogViewer.d.ts +130 -85
  246. package/lib/LogViewer.d.ts.map +1 -1
  247. package/lib/LogViewer.js +102 -77
  248. package/lib/LogViewer.js.map +1 -1
  249. package/lib/MergeHealth.d.ts +221 -0
  250. package/lib/MergeHealth.d.ts.map +1 -0
  251. package/lib/MergeHealth.js +258 -0
  252. package/lib/MergeHealth.js.map +1 -0
  253. package/lib/NodeIdUtilities.d.ts +90 -0
  254. package/lib/NodeIdUtilities.d.ts.map +1 -0
  255. package/lib/NodeIdUtilities.js +53 -0
  256. package/lib/NodeIdUtilities.js.map +1 -0
  257. package/lib/PayloadUtilities.d.ts +42 -0
  258. package/lib/PayloadUtilities.d.ts.map +1 -0
  259. package/lib/PayloadUtilities.js +110 -0
  260. package/lib/PayloadUtilities.js.map +1 -0
  261. package/lib/ReconciliationPath.d.ts +18 -13
  262. package/lib/ReconciliationPath.d.ts.map +1 -1
  263. package/lib/ReconciliationPath.js.map +1 -1
  264. package/lib/RevisionValueCache.d.ts +11 -2
  265. package/lib/RevisionValueCache.d.ts.map +1 -1
  266. package/lib/RevisionValueCache.js +2 -3
  267. package/lib/RevisionValueCache.js.map +1 -1
  268. package/lib/RevisionView.d.ts +83 -0
  269. package/lib/RevisionView.d.ts.map +1 -0
  270. package/lib/RevisionView.js +175 -0
  271. package/lib/RevisionView.js.map +1 -0
  272. package/lib/SerializationUtilities.d.ts +36 -0
  273. package/lib/SerializationUtilities.d.ts.map +1 -0
  274. package/lib/SerializationUtilities.js +95 -0
  275. package/lib/SerializationUtilities.js.map +1 -0
  276. package/lib/SharedTree.d.ts +400 -0
  277. package/lib/SharedTree.d.ts.map +1 -0
  278. package/lib/SharedTree.js +1059 -0
  279. package/lib/SharedTree.js.map +1 -0
  280. package/lib/SharedTreeEncoder.d.ts +102 -0
  281. package/lib/SharedTreeEncoder.d.ts.map +1 -0
  282. package/lib/SharedTreeEncoder.js +308 -0
  283. package/lib/SharedTreeEncoder.js.map +1 -0
  284. package/lib/StringInterner.d.ts +46 -0
  285. package/lib/StringInterner.d.ts.map +1 -0
  286. package/lib/StringInterner.js +57 -0
  287. package/lib/StringInterner.js.map +1 -0
  288. package/lib/Summary.d.ts +40 -0
  289. package/lib/Summary.d.ts.map +1 -0
  290. package/lib/Summary.js +19 -0
  291. package/lib/Summary.js.map +1 -0
  292. package/lib/SummaryBackCompatibility.d.ts +22 -22
  293. package/lib/SummaryBackCompatibility.d.ts.map +1 -1
  294. package/lib/SummaryBackCompatibility.js +29 -32
  295. package/lib/SummaryBackCompatibility.js.map +1 -1
  296. package/lib/SummaryTestUtilities.d.ts +31 -0
  297. package/lib/SummaryTestUtilities.d.ts.map +1 -0
  298. package/lib/SummaryTestUtilities.js +32 -0
  299. package/lib/SummaryTestUtilities.js.map +1 -0
  300. package/lib/Transaction.d.ts +53 -0
  301. package/lib/Transaction.d.ts.map +1 -0
  302. package/lib/Transaction.js +72 -0
  303. package/lib/Transaction.js.map +1 -0
  304. package/lib/TransactionInternal.d.ts +543 -0
  305. package/lib/TransactionInternal.d.ts.map +1 -0
  306. package/lib/TransactionInternal.js +618 -0
  307. package/lib/TransactionInternal.js.map +1 -0
  308. package/lib/TreeCompressor.d.ts +37 -0
  309. package/lib/TreeCompressor.d.ts.map +1 -0
  310. package/lib/TreeCompressor.js +128 -0
  311. package/lib/TreeCompressor.js.map +1 -0
  312. package/lib/TreeNodeHandle.d.ts +12 -18
  313. package/lib/TreeNodeHandle.d.ts.map +1 -1
  314. package/lib/TreeNodeHandle.js +14 -24
  315. package/lib/TreeNodeHandle.js.map +1 -1
  316. package/lib/TreeView.d.ts +166 -0
  317. package/lib/TreeView.d.ts.map +1 -0
  318. package/lib/TreeView.js +213 -0
  319. package/lib/TreeView.js.map +1 -0
  320. package/lib/TreeViewUtilities.d.ts +21 -0
  321. package/lib/TreeViewUtilities.d.ts.map +1 -0
  322. package/lib/TreeViewUtilities.js +71 -0
  323. package/lib/TreeViewUtilities.js.map +1 -0
  324. package/lib/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  325. package/lib/UndoRedoHandler.d.ts.map +1 -0
  326. package/lib/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +3 -7
  327. package/lib/UndoRedoHandler.js.map +1 -0
  328. package/lib/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  329. package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  330. package/lib/id-compressor/AppendOnlySortedMap.js +278 -0
  331. package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -0
  332. package/lib/id-compressor/IdCompressor.d.ts +389 -0
  333. package/lib/id-compressor/IdCompressor.d.ts.map +1 -0
  334. package/lib/id-compressor/IdCompressor.js +1343 -0
  335. package/lib/id-compressor/IdCompressor.js.map +1 -0
  336. package/lib/id-compressor/IdRange.d.ts +11 -0
  337. package/lib/id-compressor/IdRange.d.ts.map +1 -0
  338. package/lib/id-compressor/IdRange.js +25 -0
  339. package/lib/id-compressor/IdRange.js.map +1 -0
  340. package/lib/id-compressor/NumericUuid.d.ts +63 -0
  341. package/lib/id-compressor/NumericUuid.d.ts.map +1 -0
  342. package/lib/id-compressor/NumericUuid.js +365 -0
  343. package/lib/id-compressor/NumericUuid.js.map +1 -0
  344. package/lib/id-compressor/index.d.ts +12 -0
  345. package/lib/id-compressor/index.d.ts.map +1 -0
  346. package/lib/id-compressor/index.js +12 -0
  347. package/lib/id-compressor/index.js.map +1 -0
  348. package/lib/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  349. package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  350. package/lib/{test/Snapshot.tests.d.ts → id-compressor/persisted-types/0.0.1.js} +1 -1
  351. package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -0
  352. package/lib/id-compressor/persisted-types/index.d.ts +6 -0
  353. package/lib/id-compressor/persisted-types/index.d.ts.map +1 -0
  354. package/lib/id-compressor/persisted-types/index.js +6 -0
  355. package/lib/id-compressor/persisted-types/index.js.map +1 -0
  356. package/lib/index.d.ts +29 -9
  357. package/lib/index.d.ts.map +1 -1
  358. package/lib/index.js +23 -6
  359. package/lib/index.js.map +1 -1
  360. package/lib/persisted-types/0.0.2.d.ts +385 -0
  361. package/lib/persisted-types/0.0.2.d.ts.map +1 -0
  362. package/lib/persisted-types/0.0.2.js +110 -0
  363. package/lib/persisted-types/0.0.2.js.map +1 -0
  364. package/lib/persisted-types/0.1.1.d.ts +314 -0
  365. package/lib/persisted-types/0.1.1.d.ts.map +1 -0
  366. package/lib/persisted-types/0.1.1.js +150 -0
  367. package/lib/persisted-types/0.1.1.js.map +1 -0
  368. package/lib/persisted-types/index.d.ts +7 -0
  369. package/lib/persisted-types/index.d.ts.map +1 -0
  370. package/lib/persisted-types/index.js +8 -0
  371. package/lib/persisted-types/index.js.map +1 -0
  372. package/lib/test/AppendOnlySortedMap.tests.d.ts +6 -0
  373. package/lib/test/AppendOnlySortedMap.tests.d.ts.map +1 -0
  374. package/lib/test/AppendOnlySortedMap.tests.js +169 -0
  375. package/lib/test/AppendOnlySortedMap.tests.js.map +1 -0
  376. package/lib/test/{SnapshotUtilities.tests.d.ts → ChangeCompression.tests.d.ts} +1 -1
  377. package/lib/test/ChangeCompression.tests.d.ts.map +1 -0
  378. package/lib/test/ChangeCompression.tests.js +145 -0
  379. package/lib/test/ChangeCompression.tests.js.map +1 -0
  380. package/lib/test/Checkout.tests.d.ts +2 -3
  381. package/lib/test/Checkout.tests.d.ts.map +1 -1
  382. package/lib/test/Checkout.tests.js +126 -69
  383. package/lib/test/Checkout.tests.js.map +1 -1
  384. package/lib/test/Common.tests.js +60 -2
  385. package/lib/test/Common.tests.js.map +1 -1
  386. package/lib/test/{BasicCheckout.tests.d.ts → EagerCheckout.tests.d.ts} +1 -1
  387. package/lib/test/EagerCheckout.tests.d.ts.map +1 -0
  388. package/lib/test/EagerCheckout.tests.js +20 -0
  389. package/lib/test/EagerCheckout.tests.js.map +1 -0
  390. package/lib/test/Edit.tests.js +22 -14
  391. package/lib/test/Edit.tests.js.map +1 -1
  392. package/lib/test/{Anchors.glassBox.tests.d.ts → EditLog.perf.tests.d.ts} +1 -1
  393. package/lib/test/EditLog.perf.tests.d.ts.map +1 -0
  394. package/lib/test/EditLog.perf.tests.js +30 -0
  395. package/lib/test/EditLog.perf.tests.js.map +1 -0
  396. package/lib/test/EditLog.tests.js +10 -6
  397. package/lib/test/EditLog.tests.js.map +1 -1
  398. package/lib/test/EditUtilities.tests.d.ts +6 -0
  399. package/lib/test/EditUtilities.tests.d.ts.map +1 -0
  400. package/lib/test/EditUtilities.tests.js +503 -0
  401. package/lib/test/EditUtilities.tests.js.map +1 -0
  402. package/lib/test/Forest.perf.tests.d.ts +6 -0
  403. package/lib/test/Forest.perf.tests.d.ts.map +1 -0
  404. package/lib/test/Forest.perf.tests.js +133 -0
  405. package/lib/test/Forest.perf.tests.js.map +1 -0
  406. package/lib/test/Forest.tests.js +54 -27
  407. package/lib/test/Forest.tests.js.map +1 -1
  408. package/lib/test/GenericTransaction.tests.js +12 -3
  409. package/lib/test/GenericTransaction.tests.js.map +1 -1
  410. package/lib/test/HistoryEditFactory.tests.d.ts +6 -0
  411. package/lib/test/HistoryEditFactory.tests.d.ts.map +1 -0
  412. package/lib/test/HistoryEditFactory.tests.js +90 -0
  413. package/lib/test/HistoryEditFactory.tests.js.map +1 -0
  414. package/lib/test/IdCompressor.perf.tests.d.ts +6 -0
  415. package/lib/test/IdCompressor.perf.tests.d.ts.map +1 -0
  416. package/lib/test/IdCompressor.perf.tests.js +304 -0
  417. package/lib/test/IdCompressor.perf.tests.js.map +1 -0
  418. package/lib/test/IdCompressor.tests.d.ts +6 -0
  419. package/lib/test/IdCompressor.tests.d.ts.map +1 -0
  420. package/lib/test/IdCompressor.tests.js +1075 -0
  421. package/lib/test/IdCompressor.tests.js.map +1 -0
  422. package/lib/test/IdConversion.tests.d.ts +6 -0
  423. package/lib/test/IdConversion.tests.d.ts.map +1 -0
  424. package/lib/test/IdConversion.tests.js +36 -0
  425. package/lib/test/IdConversion.tests.js.map +1 -0
  426. package/lib/test/LazyCheckout.tests.d.ts +6 -0
  427. package/lib/test/LazyCheckout.tests.d.ts.map +1 -0
  428. package/lib/test/LazyCheckout.tests.js +22 -0
  429. package/lib/test/LazyCheckout.tests.js.map +1 -0
  430. package/lib/test/LogViewer.tests.js +269 -187
  431. package/lib/test/LogViewer.tests.js.map +1 -1
  432. package/lib/test/{SharedTreeWithAnchors.tests.d.ts → MergeHealthTelemetryHeartbeat.tests.d.ts} +1 -1
  433. package/lib/test/MergeHealthTelemetryHeartbeat.tests.d.ts.map +1 -0
  434. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +342 -0
  435. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -0
  436. package/lib/test/NumericUuid.perf.tests.d.ts +6 -0
  437. package/lib/test/NumericUuid.perf.tests.d.ts.map +1 -0
  438. package/lib/test/NumericUuid.perf.tests.js +68 -0
  439. package/lib/test/NumericUuid.perf.tests.js.map +1 -0
  440. package/lib/test/NumericUuid.tests.d.ts +6 -0
  441. package/lib/test/NumericUuid.tests.d.ts.map +1 -0
  442. package/lib/test/NumericUuid.tests.js +191 -0
  443. package/lib/test/NumericUuid.tests.js.map +1 -0
  444. package/lib/test/RevisionView.tests.d.ts +6 -0
  445. package/lib/test/RevisionView.tests.d.ts.map +1 -0
  446. package/lib/test/RevisionView.tests.js +133 -0
  447. package/lib/test/RevisionView.tests.js.map +1 -0
  448. package/lib/test/SharedTree.perf.tests.d.ts +6 -0
  449. package/lib/test/SharedTree.perf.tests.d.ts.map +1 -0
  450. package/lib/test/SharedTree.perf.tests.js +39 -0
  451. package/lib/test/SharedTree.perf.tests.js.map +1 -0
  452. package/lib/test/SharedTree.tests.js +15 -3
  453. package/lib/test/SharedTree.tests.js.map +1 -1
  454. package/lib/test/StringInterner.tests.d.ts +6 -0
  455. package/lib/test/StringInterner.tests.d.ts.map +1 -0
  456. package/lib/test/StringInterner.tests.js +71 -0
  457. package/lib/test/StringInterner.tests.js.map +1 -0
  458. package/lib/test/Summary.tests.d.ts +8 -0
  459. package/lib/test/Summary.tests.d.ts.map +1 -0
  460. package/lib/test/Summary.tests.js +407 -0
  461. package/lib/test/Summary.tests.js.map +1 -0
  462. package/lib/test/Transaction.tests.js +76 -330
  463. package/lib/test/Transaction.tests.js.map +1 -1
  464. package/lib/test/TransactionInternal.tests.d.ts +6 -0
  465. package/lib/test/TransactionInternal.tests.d.ts.map +1 -0
  466. package/lib/test/TransactionInternal.tests.js +568 -0
  467. package/lib/test/TransactionInternal.tests.js.map +1 -0
  468. package/lib/test/TreeCompression.tests.d.ts +6 -0
  469. package/lib/test/TreeCompression.tests.d.ts.map +1 -0
  470. package/lib/test/TreeCompression.tests.js +292 -0
  471. package/lib/test/TreeCompression.tests.js.map +1 -0
  472. package/lib/test/TreeView.tests.d.ts +6 -0
  473. package/lib/test/TreeView.tests.d.ts.map +1 -0
  474. package/lib/test/TreeView.tests.js +147 -0
  475. package/lib/test/TreeView.tests.js.map +1 -0
  476. package/lib/test/UndoRedoHandler.tests.js +2 -2
  477. package/lib/test/UndoRedoHandler.tests.js.map +1 -1
  478. package/lib/test/Virtualization.tests.js +147 -62
  479. package/lib/test/Virtualization.tests.js.map +1 -1
  480. package/lib/test/fuzz/Generators.d.ts +19 -0
  481. package/lib/test/fuzz/Generators.d.ts.map +1 -0
  482. package/lib/test/fuzz/Generators.js +420 -0
  483. package/lib/test/fuzz/Generators.js.map +1 -0
  484. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +20 -0
  485. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -0
  486. package/lib/test/fuzz/SharedTreeFuzzTests.js +200 -0
  487. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -0
  488. package/lib/test/fuzz/Types.d.ts +133 -0
  489. package/lib/test/fuzz/Types.d.ts.map +1 -0
  490. package/lib/test/{GenericTransactionWithAnchors.tests.d.ts → fuzz/Types.js} +2 -2
  491. package/lib/test/fuzz/Types.js.map +1 -0
  492. package/lib/test/utilities/IdCompressorTestUtilities.d.ts +180 -0
  493. package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -0
  494. package/lib/test/utilities/IdCompressorTestUtilities.js +528 -0
  495. package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -0
  496. package/lib/test/utilities/MockTransaction.d.ts +26 -7
  497. package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
  498. package/lib/test/utilities/MockTransaction.js +40 -11
  499. package/lib/test/utilities/MockTransaction.js.map +1 -1
  500. package/lib/test/utilities/PendingLocalStateTests.d.ts +12 -0
  501. package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -0
  502. package/lib/test/utilities/PendingLocalStateTests.js +105 -0
  503. package/lib/test/utilities/PendingLocalStateTests.js.map +1 -0
  504. package/lib/test/utilities/SharedTreeTests.d.ts +3 -4
  505. package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
  506. package/lib/test/utilities/SharedTreeTests.js +696 -439
  507. package/lib/test/utilities/SharedTreeTests.js.map +1 -1
  508. package/lib/test/utilities/SharedTreeVersioningTests.d.ts +11 -0
  509. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -0
  510. package/lib/test/utilities/SharedTreeVersioningTests.js +345 -0
  511. package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -0
  512. package/lib/test/utilities/SummaryLoadPerfTests.d.ts +10 -0
  513. package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -0
  514. package/lib/test/utilities/SummaryLoadPerfTests.js +102 -0
  515. package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -0
  516. package/lib/test/utilities/SummarySizeTests.d.ts +11 -0
  517. package/lib/test/utilities/SummarySizeTests.d.ts.map +1 -0
  518. package/lib/test/utilities/SummarySizeTests.js +158 -0
  519. package/lib/test/utilities/SummarySizeTests.js.map +1 -0
  520. package/lib/test/utilities/TestCommon.d.ts +9 -0
  521. package/lib/test/utilities/TestCommon.d.ts.map +1 -0
  522. package/lib/test/utilities/TestCommon.js +13 -0
  523. package/lib/test/utilities/TestCommon.js.map +1 -0
  524. package/lib/test/utilities/TestNode.d.ts +140 -0
  525. package/lib/test/utilities/TestNode.d.ts.map +1 -0
  526. package/lib/test/utilities/TestNode.js +292 -0
  527. package/lib/test/utilities/TestNode.js.map +1 -0
  528. package/lib/test/utilities/TestUtilities.d.ts +84 -70
  529. package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
  530. package/lib/test/utilities/TestUtilities.js +218 -143
  531. package/lib/test/utilities/TestUtilities.js.map +1 -1
  532. package/lib/test/utilities/UndoRedoTests.d.ts +4 -5
  533. package/lib/test/utilities/UndoRedoTests.d.ts.map +1 -1
  534. package/lib/test/utilities/UndoRedoTests.js +138 -149
  535. package/lib/test/utilities/UndoRedoTests.js.map +1 -1
  536. package/package.json +19 -14
  537. package/src/ChangeCompression.ts +159 -0
  538. package/src/{default-edits/PersistedTypes.ts → ChangeTypes.ts} +62 -120
  539. package/src/Checkout.ts +81 -52
  540. package/src/Common.ts +317 -117
  541. package/src/EagerCheckout.ts +38 -0
  542. package/src/EditLog.ts +153 -100
  543. package/src/EditUtilities.ts +559 -0
  544. package/src/EventTypes.ts +74 -0
  545. package/src/Forest.ts +81 -73
  546. package/src/{default-edits/HistoryEditFactory.ts → HistoryEditFactory.ts} +103 -53
  547. package/src/IdConversion.ts +125 -0
  548. package/src/Identifiers.ts +101 -1
  549. package/src/InitialTree.ts +5 -4
  550. package/src/LazyCheckout.ts +51 -0
  551. package/src/LogViewer.ts +242 -166
  552. package/src/MergeHealth.ts +447 -0
  553. package/src/NodeIdUtilities.ts +141 -0
  554. package/src/PayloadUtilities.ts +124 -0
  555. package/src/ReconciliationPath.ts +18 -13
  556. package/src/RevisionValueCache.ts +14 -5
  557. package/src/RevisionView.ts +252 -0
  558. package/src/SerializationUtilities.ts +130 -0
  559. package/src/SharedTree.ts +1448 -0
  560. package/src/SharedTreeEncoder.ts +493 -0
  561. package/src/StringInterner.ts +72 -0
  562. package/src/Summary.ts +48 -0
  563. package/src/SummaryBackCompatibility.ts +47 -57
  564. package/src/SummaryTestUtilities.ts +54 -0
  565. package/src/Transaction.ts +94 -0
  566. package/src/TransactionInternal.ts +1088 -0
  567. package/src/TreeCompressor.ts +222 -0
  568. package/src/TreeNodeHandle.ts +19 -32
  569. package/src/TreeView.ts +321 -0
  570. package/src/TreeViewUtilities.ts +77 -0
  571. package/src/{default-edits/UndoRedoHandler.ts → UndoRedoHandler.ts} +8 -13
  572. package/src/id-compressor/AppendOnlySortedMap.ts +325 -0
  573. package/src/id-compressor/IdCompressor.md +3 -0
  574. package/src/id-compressor/IdCompressor.ts +1848 -0
  575. package/src/id-compressor/IdRange.ts +33 -0
  576. package/src/id-compressor/NumericUuid.ts +414 -0
  577. package/src/id-compressor/index.ts +13 -0
  578. package/src/id-compressor/persisted-types/0.0.1.ts +179 -0
  579. package/src/id-compressor/persisted-types/README.md +3 -0
  580. package/src/id-compressor/persisted-types/index.ts +6 -0
  581. package/src/index.ts +119 -59
  582. package/src/persisted-types/0.0.2.ts +442 -0
  583. package/src/persisted-types/0.1.1.ts +476 -0
  584. package/src/persisted-types/README.md +22 -0
  585. package/src/persisted-types/index.ts +9 -0
  586. package/.mocharc.js +0 -41
  587. package/api/tree.api.md +0 -729
  588. package/dist/BasicCheckout.d.ts +0 -23
  589. package/dist/BasicCheckout.d.ts.map +0 -1
  590. package/dist/BasicCheckout.js.map +0 -1
  591. package/dist/Snapshot.d.ts +0 -198
  592. package/dist/Snapshot.d.ts.map +0 -1
  593. package/dist/Snapshot.js +0 -267
  594. package/dist/Snapshot.js.map +0 -1
  595. package/dist/SnapshotUtilities.d.ts +0 -29
  596. package/dist/SnapshotUtilities.d.ts.map +0 -1
  597. package/dist/SnapshotUtilities.js +0 -73
  598. package/dist/SnapshotUtilities.js.map +0 -1
  599. package/dist/anchored-edits/AnchorResolution.d.ts +0 -144
  600. package/dist/anchored-edits/AnchorResolution.d.ts.map +0 -1
  601. package/dist/anchored-edits/AnchorResolution.js +0 -162
  602. package/dist/anchored-edits/AnchorResolution.js.map +0 -1
  603. package/dist/anchored-edits/Factory.d.ts +0 -56
  604. package/dist/anchored-edits/Factory.d.ts.map +0 -1
  605. package/dist/anchored-edits/Factory.js +0 -79
  606. package/dist/anchored-edits/Factory.js.map +0 -1
  607. package/dist/anchored-edits/PersistedTypes.d.ts +0 -245
  608. package/dist/anchored-edits/PersistedTypes.d.ts.map +0 -1
  609. package/dist/anchored-edits/PersistedTypes.js +0 -131
  610. package/dist/anchored-edits/PersistedTypes.js.map +0 -1
  611. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  612. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  613. package/dist/anchored-edits/SharedTreeWithAnchors.js +0 -115
  614. package/dist/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  615. package/dist/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  616. package/dist/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  617. package/dist/anchored-edits/TransactionWithAnchors.js +0 -36
  618. package/dist/anchored-edits/TransactionWithAnchors.js.map +0 -1
  619. package/dist/anchored-edits/index.d.ts +0 -10
  620. package/dist/anchored-edits/index.d.ts.map +0 -1
  621. package/dist/anchored-edits/index.js +0 -34
  622. package/dist/anchored-edits/index.js.map +0 -1
  623. package/dist/default-edits/EditUtilities.d.ts +0 -57
  624. package/dist/default-edits/EditUtilities.d.ts.map +0 -1
  625. package/dist/default-edits/EditUtilities.js +0 -192
  626. package/dist/default-edits/EditUtilities.js.map +0 -1
  627. package/dist/default-edits/Factory.d.ts +0 -56
  628. package/dist/default-edits/Factory.d.ts.map +0 -1
  629. package/dist/default-edits/Factory.js +0 -79
  630. package/dist/default-edits/Factory.js.map +0 -1
  631. package/dist/default-edits/HistoryEditFactory.d.ts +0 -19
  632. package/dist/default-edits/HistoryEditFactory.d.ts.map +0 -1
  633. package/dist/default-edits/HistoryEditFactory.js +0 -187
  634. package/dist/default-edits/HistoryEditFactory.js.map +0 -1
  635. package/dist/default-edits/PersistedTypes.d.ts.map +0 -1
  636. package/dist/default-edits/PersistedTypes.js.map +0 -1
  637. package/dist/default-edits/SharedTree.d.ts +0 -111
  638. package/dist/default-edits/SharedTree.d.ts.map +0 -1
  639. package/dist/default-edits/SharedTree.js +0 -124
  640. package/dist/default-edits/SharedTree.js.map +0 -1
  641. package/dist/default-edits/Summary.d.ts +0 -15
  642. package/dist/default-edits/Summary.d.ts.map +0 -1
  643. package/dist/default-edits/Summary.js +0 -35
  644. package/dist/default-edits/Summary.js.map +0 -1
  645. package/dist/default-edits/Transaction.d.ts +0 -41
  646. package/dist/default-edits/Transaction.d.ts.map +0 -1
  647. package/dist/default-edits/Transaction.js +0 -225
  648. package/dist/default-edits/Transaction.js.map +0 -1
  649. package/dist/default-edits/UndoRedoHandler.d.ts.map +0 -1
  650. package/dist/default-edits/UndoRedoHandler.js.map +0 -1
  651. package/dist/default-edits/index.d.ts +0 -13
  652. package/dist/default-edits/index.d.ts.map +0 -1
  653. package/dist/default-edits/index.js +0 -41
  654. package/dist/default-edits/index.js.map +0 -1
  655. package/dist/generic/GenericEditUtilities.d.ts +0 -26
  656. package/dist/generic/GenericEditUtilities.d.ts.map +0 -1
  657. package/dist/generic/GenericEditUtilities.js +0 -45
  658. package/dist/generic/GenericEditUtilities.js.map +0 -1
  659. package/dist/generic/GenericSharedTree.d.ts +0 -221
  660. package/dist/generic/GenericSharedTree.d.ts.map +0 -1
  661. package/dist/generic/GenericSharedTree.js +0 -447
  662. package/dist/generic/GenericSharedTree.js.map +0 -1
  663. package/dist/generic/GenericTransaction.d.ts +0 -87
  664. package/dist/generic/GenericTransaction.d.ts.map +0 -1
  665. package/dist/generic/GenericTransaction.js +0 -144
  666. package/dist/generic/GenericTransaction.js.map +0 -1
  667. package/dist/generic/PersistedTypes.d.ts +0 -194
  668. package/dist/generic/PersistedTypes.d.ts.map +0 -1
  669. package/dist/generic/PersistedTypes.js +0 -42
  670. package/dist/generic/PersistedTypes.js.map +0 -1
  671. package/dist/generic/Summary.d.ts +0 -63
  672. package/dist/generic/Summary.d.ts.map +0 -1
  673. package/dist/generic/Summary.js +0 -64
  674. package/dist/generic/Summary.js.map +0 -1
  675. package/dist/generic/index.d.ts +0 -10
  676. package/dist/generic/index.d.ts.map +0 -1
  677. package/dist/generic/index.js +0 -26
  678. package/dist/generic/index.js.map +0 -1
  679. package/lib/BasicCheckout.d.ts +0 -23
  680. package/lib/BasicCheckout.d.ts.map +0 -1
  681. package/lib/BasicCheckout.js.map +0 -1
  682. package/lib/Snapshot.d.ts +0 -198
  683. package/lib/Snapshot.d.ts.map +0 -1
  684. package/lib/Snapshot.js +0 -263
  685. package/lib/Snapshot.js.map +0 -1
  686. package/lib/SnapshotUtilities.d.ts +0 -29
  687. package/lib/SnapshotUtilities.d.ts.map +0 -1
  688. package/lib/SnapshotUtilities.js +0 -67
  689. package/lib/SnapshotUtilities.js.map +0 -1
  690. package/lib/anchored-edits/AnchorResolution.d.ts +0 -144
  691. package/lib/anchored-edits/AnchorResolution.d.ts.map +0 -1
  692. package/lib/anchored-edits/AnchorResolution.js +0 -152
  693. package/lib/anchored-edits/AnchorResolution.js.map +0 -1
  694. package/lib/anchored-edits/Factory.d.ts +0 -56
  695. package/lib/anchored-edits/Factory.d.ts.map +0 -1
  696. package/lib/anchored-edits/Factory.js +0 -74
  697. package/lib/anchored-edits/Factory.js.map +0 -1
  698. package/lib/anchored-edits/PersistedTypes.d.ts +0 -245
  699. package/lib/anchored-edits/PersistedTypes.d.ts.map +0 -1
  700. package/lib/anchored-edits/PersistedTypes.js +0 -128
  701. package/lib/anchored-edits/PersistedTypes.js.map +0 -1
  702. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  703. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  704. package/lib/anchored-edits/SharedTreeWithAnchors.js +0 -110
  705. package/lib/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  706. package/lib/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  707. package/lib/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  708. package/lib/anchored-edits/TransactionWithAnchors.js +0 -32
  709. package/lib/anchored-edits/TransactionWithAnchors.js.map +0 -1
  710. package/lib/anchored-edits/index.d.ts +0 -10
  711. package/lib/anchored-edits/index.d.ts.map +0 -1
  712. package/lib/anchored-edits/index.js +0 -11
  713. package/lib/anchored-edits/index.js.map +0 -1
  714. package/lib/default-edits/EditUtilities.d.ts +0 -57
  715. package/lib/default-edits/EditUtilities.d.ts.map +0 -1
  716. package/lib/default-edits/EditUtilities.js +0 -181
  717. package/lib/default-edits/EditUtilities.js.map +0 -1
  718. package/lib/default-edits/Factory.d.ts +0 -56
  719. package/lib/default-edits/Factory.d.ts.map +0 -1
  720. package/lib/default-edits/Factory.js +0 -74
  721. package/lib/default-edits/Factory.js.map +0 -1
  722. package/lib/default-edits/HistoryEditFactory.d.ts +0 -19
  723. package/lib/default-edits/HistoryEditFactory.d.ts.map +0 -1
  724. package/lib/default-edits/HistoryEditFactory.js.map +0 -1
  725. package/lib/default-edits/PersistedTypes.d.ts.map +0 -1
  726. package/lib/default-edits/PersistedTypes.js.map +0 -1
  727. package/lib/default-edits/SharedTree.d.ts +0 -111
  728. package/lib/default-edits/SharedTree.d.ts.map +0 -1
  729. package/lib/default-edits/SharedTree.js +0 -100
  730. package/lib/default-edits/SharedTree.js.map +0 -1
  731. package/lib/default-edits/Summary.d.ts +0 -15
  732. package/lib/default-edits/Summary.d.ts.map +0 -1
  733. package/lib/default-edits/Summary.js +0 -31
  734. package/lib/default-edits/Summary.js.map +0 -1
  735. package/lib/default-edits/Transaction.d.ts +0 -41
  736. package/lib/default-edits/Transaction.d.ts.map +0 -1
  737. package/lib/default-edits/Transaction.js +0 -221
  738. package/lib/default-edits/Transaction.js.map +0 -1
  739. package/lib/default-edits/UndoRedoHandler.d.ts.map +0 -1
  740. package/lib/default-edits/UndoRedoHandler.js.map +0 -1
  741. package/lib/default-edits/index.d.ts +0 -13
  742. package/lib/default-edits/index.d.ts.map +0 -1
  743. package/lib/default-edits/index.js +0 -14
  744. package/lib/default-edits/index.js.map +0 -1
  745. package/lib/generic/GenericEditUtilities.d.ts +0 -26
  746. package/lib/generic/GenericEditUtilities.d.ts.map +0 -1
  747. package/lib/generic/GenericEditUtilities.js +0 -38
  748. package/lib/generic/GenericEditUtilities.js.map +0 -1
  749. package/lib/generic/GenericSharedTree.d.ts +0 -221
  750. package/lib/generic/GenericSharedTree.d.ts.map +0 -1
  751. package/lib/generic/GenericSharedTree.js +0 -443
  752. package/lib/generic/GenericSharedTree.js.map +0 -1
  753. package/lib/generic/GenericTransaction.d.ts +0 -87
  754. package/lib/generic/GenericTransaction.d.ts.map +0 -1
  755. package/lib/generic/GenericTransaction.js +0 -140
  756. package/lib/generic/GenericTransaction.js.map +0 -1
  757. package/lib/generic/PersistedTypes.d.ts +0 -194
  758. package/lib/generic/PersistedTypes.d.ts.map +0 -1
  759. package/lib/generic/PersistedTypes.js +0 -39
  760. package/lib/generic/PersistedTypes.js.map +0 -1
  761. package/lib/generic/Summary.d.ts +0 -63
  762. package/lib/generic/Summary.d.ts.map +0 -1
  763. package/lib/generic/Summary.js +0 -58
  764. package/lib/generic/Summary.js.map +0 -1
  765. package/lib/generic/index.d.ts +0 -10
  766. package/lib/generic/index.d.ts.map +0 -1
  767. package/lib/generic/index.js +0 -11
  768. package/lib/generic/index.js.map +0 -1
  769. package/lib/test/Anchors.glassBox.tests.d.ts.map +0 -1
  770. package/lib/test/Anchors.glassBox.tests.js +0 -410
  771. package/lib/test/Anchors.glassBox.tests.js.map +0 -1
  772. package/lib/test/BasicCheckout.tests.d.ts.map +0 -1
  773. package/lib/test/BasicCheckout.tests.js +0 -8
  774. package/lib/test/BasicCheckout.tests.js.map +0 -1
  775. package/lib/test/GenericTransactionWithAnchors.tests.d.ts.map +0 -1
  776. package/lib/test/GenericTransactionWithAnchors.tests.js +0 -25
  777. package/lib/test/GenericTransactionWithAnchors.tests.js.map +0 -1
  778. package/lib/test/SharedTreeWithAnchors.tests.d.ts.map +0 -1
  779. package/lib/test/SharedTreeWithAnchors.tests.js +0 -420
  780. package/lib/test/SharedTreeWithAnchors.tests.js.map +0 -1
  781. package/lib/test/Snapshot.tests.d.ts.map +0 -1
  782. package/lib/test/Snapshot.tests.js +0 -96
  783. package/lib/test/Snapshot.tests.js.map +0 -1
  784. package/lib/test/SnapshotUtilities.tests.d.ts.map +0 -1
  785. package/lib/test/SnapshotUtilities.tests.js +0 -168
  786. package/lib/test/SnapshotUtilities.tests.js.map +0 -1
  787. package/lib/test/undoRedoStackManager.d.ts +0 -26
  788. package/lib/test/undoRedoStackManager.d.ts.map +0 -1
  789. package/lib/test/undoRedoStackManager.js +0 -176
  790. package/lib/test/undoRedoStackManager.js.map +0 -1
  791. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts +0 -13
  792. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts.map +0 -1
  793. package/lib/test/utilities/SummaryFormatCompatibilityTests.js +0 -154
  794. package/lib/test/utilities/SummaryFormatCompatibilityTests.js.map +0 -1
  795. package/src/BasicCheckout.ts +0 -34
  796. package/src/Snapshot.ts +0 -363
  797. package/src/SnapshotUtilities.ts +0 -88
  798. package/src/anchored-edits/AnchorResolution.ts +0 -442
  799. package/src/anchored-edits/Factory.ts +0 -94
  800. package/src/anchored-edits/PersistedTypes.ts +0 -310
  801. package/src/anchored-edits/SharedTreeWithAnchors.ts +0 -200
  802. package/src/anchored-edits/TransactionWithAnchors.ts +0 -39
  803. package/src/anchored-edits/index.ts +0 -21
  804. package/src/default-edits/EditUtilities.ts +0 -220
  805. package/src/default-edits/Factory.ts +0 -94
  806. package/src/default-edits/SharedTree.ts +0 -174
  807. package/src/default-edits/Summary.ts +0 -44
  808. package/src/default-edits/Transaction.ts +0 -262
  809. package/src/default-edits/index.ts +0 -29
  810. package/src/generic/GenericEditUtilities.ts +0 -46
  811. package/src/generic/GenericSharedTree.ts +0 -593
  812. package/src/generic/GenericTransaction.ts +0 -194
  813. package/src/generic/PersistedTypes.ts +0 -221
  814. package/src/generic/Summary.ts +0 -113
  815. package/src/generic/index.ts +0 -41
@@ -0,0 +1,222 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { isDetachedSequenceId } from './Identifiers';
6
+ import type { Definition, DetachedSequenceId, InternedStringId, OpSpaceNodeId, TraitLabel } from './Identifiers';
7
+ import type { StringInterner } from './StringInterner';
8
+ import type { CompressedTraits, CompressedPlaceholderTree, PlaceholderTree, Payload } from './persisted-types';
9
+ import type { ContextualizedNodeIdNormalizer } from './NodeIdUtilities';
10
+ import { assert, fail } from './Common';
11
+
12
+ /**
13
+ * Compresses a given {@link PlaceholderTree} into a more compact serializable format.
14
+ */
15
+ export interface TreeCompressor<TPlaceholder extends DetachedSequenceId | never> {
16
+ /**
17
+ * @param node - The {@link PlaceholderTree} to compress.
18
+ * @param interner - The StringInterner to use to intern strings.
19
+ * @param idNormalizer - A normalizer to transform node IDs into op-space
20
+ */
21
+ compress<TId extends OpSpaceNodeId>(
22
+ node: PlaceholderTree<TPlaceholder>,
23
+ interner: StringInterner,
24
+ idNormalizer: ContextualizedNodeIdNormalizer<TId>
25
+ ): CompressedPlaceholderTree<TId, TPlaceholder>;
26
+
27
+ /**
28
+ * @param node - The {@link PlaceholderTree} to compress.
29
+ * @param interner - The StringInterner to use to intern strings.
30
+ * @param idNormalizer - A normalizer to transform node IDs into op-space
31
+ */
32
+ decompress<TId extends OpSpaceNodeId>(
33
+ node: CompressedPlaceholderTree<TId, TPlaceholder>,
34
+ interner: StringInterner,
35
+ idNormalizer: ContextualizedNodeIdNormalizer<TId>
36
+ ): PlaceholderTree<TPlaceholder>;
37
+ }
38
+
39
+ /**
40
+ * Compresses a given {@link PlaceholderTree}
41
+ * (Such as a {@link ChangeNode} or {@link BuildNode}) into an array,
42
+ * while also string interning all node {@link Definition}s and {@link TraitLabel}s.
43
+ * See {@link CompressedPlaceholderTree} for format.
44
+ */
45
+ export class InterningTreeCompressor<TPlaceholder extends DetachedSequenceId | never>
46
+ implements TreeCompressor<TPlaceholder>
47
+ {
48
+ public compress<TId extends OpSpaceNodeId>(
49
+ node: PlaceholderTree<TPlaceholder>,
50
+ interner: StringInterner,
51
+ idNormalizer: ContextualizedNodeIdNormalizer<TId>
52
+ ): CompressedPlaceholderTree<TId, TPlaceholder> {
53
+ this.previousId = undefined;
54
+ return this.compressI(node, interner, idNormalizer);
55
+ }
56
+
57
+ private compressI<TId extends OpSpaceNodeId>(
58
+ node: PlaceholderTree<TPlaceholder>,
59
+ interner: StringInterner,
60
+ idNormalizer: ContextualizedNodeIdNormalizer<TId>
61
+ ): CompressedPlaceholderTree<TId, TPlaceholder> {
62
+ if (isDetachedSequenceId(node)) {
63
+ return node;
64
+ }
65
+
66
+ const internedDefinition = interner.getInternedId(node.definition) ?? node.definition;
67
+ const normalizedId = idNormalizer.normalizeToOpSpace(node.identifier);
68
+ const compressedId = canElideId(this.previousId, normalizedId) ? undefined : normalizedId;
69
+ this.previousId = normalizedId;
70
+ const compressedTraits: CompressedTraits<TId, TPlaceholder> = [];
71
+
72
+ // Omit traits if empty and payload is undefined.
73
+ const traits = Object.entries(node.traits).sort();
74
+ if (traits.length > 0 || node.payload !== undefined) {
75
+ for (const [label, trait] of traits) {
76
+ compressedTraits.push(
77
+ interner.getInternedId(label) ?? (label as TraitLabel),
78
+ trait.map((child) => this.compressI(child, interner, idNormalizer))
79
+ );
80
+ }
81
+ }
82
+
83
+ const payloadTraits = node.payload !== undefined ? [node.payload, ...compressedTraits] : compressedTraits;
84
+ if (payloadTraits.length > 0) {
85
+ if (compressedId !== undefined) {
86
+ return [internedDefinition, compressedId, payloadTraits];
87
+ }
88
+ return [internedDefinition, payloadTraits];
89
+ }
90
+
91
+ if (compressedId !== undefined) {
92
+ return [internedDefinition, compressedId];
93
+ }
94
+
95
+ return [internedDefinition];
96
+ }
97
+
98
+ /** The ID that was compressed or decompressed most recently */
99
+ private previousId?: OpSpaceNodeId;
100
+
101
+ public decompress<TId extends OpSpaceNodeId>(
102
+ node: CompressedPlaceholderTree<TId, TPlaceholder>,
103
+ interner: StringInterner,
104
+ idNormalizer: ContextualizedNodeIdNormalizer<TId>
105
+ ): PlaceholderTree<TPlaceholder> {
106
+ if (isDetachedSequenceId(node)) {
107
+ return node;
108
+ }
109
+ const rootId = node[1];
110
+ assert(typeof rootId === 'number', 'Root node was compressed with no ID');
111
+ this.previousId = rootId;
112
+ return this.decompressI(node, interner, idNormalizer);
113
+ }
114
+
115
+ private decompressI<TId extends OpSpaceNodeId>(
116
+ node: CompressedPlaceholderTree<TId, TPlaceholder>,
117
+ interner: StringInterner,
118
+ idNormalizer: ContextualizedNodeIdNormalizer<TId>
119
+ ): PlaceholderTree<TPlaceholder> {
120
+ if (isDetachedSequenceId(node)) {
121
+ return node;
122
+ }
123
+
124
+ let compressedId: TId | undefined;
125
+ let compressedTraits: CompressedTraits<TId, TPlaceholder> | undefined;
126
+ let payload: Payload | undefined;
127
+ const [maybeInternedDefinition, idOrPayloadTraits, payloadTraits] = node;
128
+ if (idOrPayloadTraits !== undefined) {
129
+ if (typeof idOrPayloadTraits === 'number') {
130
+ compressedId = idOrPayloadTraits;
131
+ if (payloadTraits !== undefined) {
132
+ ({ compressedTraits, payload } = this.parseTraitsAndPayload(payloadTraits));
133
+ }
134
+ } else {
135
+ // TODO: This cast can be removed on typescript 4.6
136
+ ({ compressedTraits, payload } = this.parseTraitsAndPayload(
137
+ idOrPayloadTraits as
138
+ | [Payload, ...CompressedTraits<TId, TPlaceholder>]
139
+ | CompressedTraits<TId, TPlaceholder>
140
+ ));
141
+ }
142
+ }
143
+
144
+ const definition =
145
+ typeof maybeInternedDefinition === 'string'
146
+ ? maybeInternedDefinition
147
+ : // TODO: This cast can be removed on typescript 4.6
148
+ (interner.getString(maybeInternedDefinition as number) as Definition);
149
+ const identifier = compressedId ?? (getNextElidedId(this.previousId ?? fail()) as TId);
150
+ this.previousId = identifier;
151
+
152
+ const traits = {};
153
+ if (compressedTraits !== undefined) {
154
+ for (let i = 0; i < Object.entries(compressedTraits).sort().length; i += 2) {
155
+ const maybeCompressedLabel = compressedTraits[i] as InternedStringId;
156
+ const compressedChildren = compressedTraits[i + 1] as (
157
+ | TPlaceholder
158
+ | CompressedPlaceholderTree<TId, TPlaceholder>
159
+ )[];
160
+
161
+ const decompressedTraits = compressedChildren.map((child) =>
162
+ this.decompressI(child, interner, idNormalizer)
163
+ );
164
+
165
+ const label =
166
+ typeof maybeCompressedLabel === 'string'
167
+ ? maybeCompressedLabel
168
+ : (interner.getString(maybeCompressedLabel) as TraitLabel);
169
+ traits[label] = decompressedTraits;
170
+ }
171
+ }
172
+
173
+ const decompressedNode = {
174
+ identifier: idNormalizer.normalizeToSessionSpace(identifier),
175
+ definition,
176
+ traits,
177
+ ...(payload !== undefined ? { payload } : {}),
178
+ };
179
+
180
+ return decompressedNode;
181
+ }
182
+
183
+ private parseTraitsAndPayload<TId extends OpSpaceNodeId>(
184
+ traitsAndPayload: [Payload, ...CompressedTraits<TId, TPlaceholder>] | CompressedTraits<TId, TPlaceholder>
185
+ ): {
186
+ compressedTraits: CompressedTraits<TId, TPlaceholder>;
187
+ payload?: Payload;
188
+ } {
189
+ if (traitsAndPayload.length % 2 === 1) {
190
+ return {
191
+ compressedTraits: traitsAndPayload.slice(1),
192
+ payload: traitsAndPayload[0],
193
+ };
194
+ }
195
+
196
+ return {
197
+ compressedTraits: traitsAndPayload,
198
+ };
199
+ }
200
+ }
201
+
202
+ function getNextElidedId<TId extends OpSpaceNodeId>(id: TId): TId {
203
+ const numericId: number = id;
204
+ if (numericId < 0) {
205
+ return (numericId - 1) as TId;
206
+ }
207
+
208
+ return (numericId + 1) as TId;
209
+ }
210
+
211
+ function canElideId<TId extends OpSpaceNodeId>(previousId: TId | undefined, id: TId): boolean {
212
+ if (previousId === undefined) {
213
+ return false;
214
+ }
215
+
216
+ const numericId: number = previousId;
217
+ if (numericId < 0) {
218
+ return id === numericId - 1;
219
+ }
220
+
221
+ return id === numericId + 1;
222
+ }
@@ -4,25 +4,24 @@
4
4
  */
5
5
 
6
6
  import { Definition, NodeId } from './Identifiers';
7
- import { ChangeNode, Payload, TraitMap, TreeNode } from './generic';
8
- import { Snapshot } from './Snapshot';
9
- import { memoizeGetter } from './Common';
10
- import { getChangeNodeFromSnapshot } from './SnapshotUtilities';
7
+ import { fail, memoizeGetter } from './Common';
8
+ import { Payload, TraitMap, TreeNode } from './persisted-types';
9
+ import { TreeView, TreeViewNode } from './TreeView';
11
10
 
12
11
  /**
13
- * A handle to a `TreeNode` that exists within a specific `Snapshot`. This type provides a convenient
14
- * API for traversing trees of nodes in a Snapshot and is not designed to provide maximum runtime
15
- * performance; if performance is a concern, consider using the Snapshot and SnapshotNode APIs directly.
12
+ * A handle to a `TreeNode` that exists within a specific `TreeView`. This type provides a convenient
13
+ * API for traversing trees of nodes in a TreeView and is not designed to provide maximum runtime
14
+ * performance; if performance is a concern, consider using the TreeView and TreeViewNode APIs directly.
16
15
  * @public
17
16
  */
18
- export class TreeNodeHandle implements TreeNode<TreeNodeHandle> {
19
- private readonly snapshot: Snapshot;
20
- private readonly nodeId: NodeId;
17
+ export class TreeNodeHandle implements TreeNode<TreeNodeHandle, NodeId> {
18
+ private readonly view: TreeView;
19
+ private readonly viewNode: TreeViewNode;
21
20
 
22
- /** Construct a handle which references the node with the given id in the given `Snapshot` */
23
- public constructor(snapshot: Snapshot, nodeId: NodeId) {
24
- this.snapshot = snapshot;
25
- this.nodeId = nodeId;
21
+ /** Construct a handle which references the node with the given id in the given `TreeView` */
22
+ public constructor(view: TreeView, nodeId: NodeId) {
23
+ this.view = view;
24
+ this.viewNode = view.tryGetViewNode(nodeId) ?? fail('Failed to create handle: node is not present in view');
26
25
  }
27
26
 
28
27
  public get payload(): Payload | undefined {
@@ -40,11 +39,11 @@ export class TreeNodeHandle implements TreeNode<TreeNodeHandle> {
40
39
  public get traits(): TraitMap<TreeNodeHandle> {
41
40
  // Construct a new trait map that wraps each node in each trait in a handle
42
41
  const traitMap: TraitMap<TreeNodeHandle> = {};
43
- const { snapshot } = this;
44
- for (const [label, trait] of Object.entries(this.node.traits)) {
42
+ const { view } = this;
43
+ for (const [label, trait] of this.node.traits.entries()) {
45
44
  Object.defineProperty(traitMap, label, {
46
45
  get() {
47
- const handleTrait = trait.map((node) => new TreeNodeHandle(snapshot, node.identifier));
46
+ const handleTrait = trait.map((node) => new TreeNodeHandle(view, node));
48
47
  return memoizeGetter(this as TraitMap<TreeNodeHandle>, label, handleTrait);
49
48
  },
50
49
  configurable: true,
@@ -56,21 +55,9 @@ export class TreeNodeHandle implements TreeNode<TreeNodeHandle> {
56
55
  }
57
56
 
58
57
  /**
59
- * Get a `ChangeNode` for the snapshot node that this handle references
58
+ * Get a `TreeViewNode` for the tree view node that this handle references
60
59
  */
61
- public get node(): ChangeNode {
62
- return memoizeGetter(this, 'node', getChangeNodeFromSnapshot(this.snapshot, this.nodeId, true));
63
- }
64
-
65
- /**
66
- * Generate a new `ChangeNode` for the snapshot node that this handle references. The returned node will be fully
67
- * demanded, i.e. will contain no lazy/virtualized subtrees.
68
- */
69
- public demandTree(): ChangeNode {
70
- return getChangeNodeFromSnapshot(this.snapshot, this.nodeId, false);
71
- }
72
-
73
- public toString(): string {
74
- return JSON.stringify(this.demandTree());
60
+ public get node(): TreeViewNode {
61
+ return memoizeGetter(this, 'node', this.viewNode);
75
62
  }
76
63
  }
@@ -0,0 +1,321 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { assert, copyPropertyIfDefined, fail } from './Common';
7
+ import { NodeId, TraitLabel } from './Identifiers';
8
+ import { Delta, Forest, isParentedForestNode } from './Forest';
9
+ import { NodeData, Side } from './persisted-types';
10
+
11
+ /**
12
+ * Specifies the location of a trait (a labeled sequence of nodes) within the tree.
13
+ * @public
14
+ */
15
+ export interface TraitLocation {
16
+ readonly parent: NodeId;
17
+ readonly label: TraitLabel;
18
+ }
19
+
20
+ /**
21
+ * An immutable view of a distributed tree node.
22
+ * @public
23
+ */
24
+ export interface TreeViewNode extends NodeData<NodeId> {
25
+ /** The IDs of the children under this node */
26
+ readonly traits: ReadonlyMap<TraitLabel, readonly NodeId[]>;
27
+ /** The parent and trait under which this node resides. Undefined iff this is the root node of the tree (i.e. {@link initialTree}). */
28
+ readonly parentage?: TraitLocation;
29
+ }
30
+
31
+ /**
32
+ * Index of a place within a trait.
33
+ * 0 = before all nodes,
34
+ * 1 = after first node,
35
+ * etc.
36
+ * @public
37
+ */
38
+ export type PlaceIndex = number & { readonly PlaceIndex: unique symbol };
39
+
40
+ /**
41
+ * Index of a node within a trait.
42
+ * 0 = first node,
43
+ * 1 = second node,
44
+ * etc.
45
+ * @public
46
+ */
47
+ export type TraitNodeIndex = number & { readonly TraitNodeIndex: unique symbol };
48
+
49
+ /**
50
+ * A place within a particular `TreeView` that is anchored relative to a specific node in the tree, or relative to the outside of the trait.
51
+ * Valid iff 'trait' is valid and, if provided, sibling is in the Location specified by 'trait'.
52
+ * @public
53
+ */
54
+ export interface TreeViewPlace {
55
+ readonly sibling?: NodeId;
56
+ readonly side: Side;
57
+ readonly trait: TraitLocation;
58
+ }
59
+
60
+ /**
61
+ * Specifies the range of nodes from `start` to `end` within a trait within a particular `TreeView`.
62
+ * Valid iff start and end are valid and are within the same trait.
63
+ * @public
64
+ */
65
+ export interface TreeViewRange {
66
+ readonly start: TreeViewPlace;
67
+ readonly end: TreeViewPlace;
68
+ }
69
+
70
+ /**
71
+ * Contains some redundant information. Use only in computations between edits. Do not store.
72
+ * @public
73
+ */
74
+ export interface NodeInTrait {
75
+ readonly trait: TraitLocation;
76
+ readonly index: TraitNodeIndex;
77
+ }
78
+
79
+ /**
80
+ * A view of a distributed tree.
81
+ * @public
82
+ */
83
+ export abstract class TreeView {
84
+ public readonly root: NodeId;
85
+ protected readonly forest: Forest;
86
+ private readonly rootNode: TreeViewNode;
87
+
88
+ /**
89
+ * A cache of node's index within their parent trait.
90
+ * Used to avoid redundant linear scans of traits.
91
+ * Not shared across views; initialized to empty each time a TreeView is created.
92
+ */
93
+ private traitIndicesCache?: Map<NodeId, TraitNodeIndex>;
94
+
95
+ protected constructor(root: NodeId, forest: Forest) {
96
+ this.root = root;
97
+ this.forest = forest;
98
+ this.rootNode = this.getViewNode(root);
99
+ }
100
+
101
+ /** @returns the number of nodes in this view */
102
+ public get size(): number {
103
+ return this.forest.size;
104
+ }
105
+
106
+ /** @returns true iff a node with the given id exists in this view */
107
+ public hasNode(id: NodeId): boolean {
108
+ return this.forest.has(id);
109
+ }
110
+
111
+ /**
112
+ * @returns the index just after place (which specifies a location between items).
113
+ * Performance note: this is O(siblings in trait).
114
+ */
115
+ public findIndexWithinTrait(place: TreeViewPlace): PlaceIndex {
116
+ if (place.sibling === undefined) {
117
+ return this.getIndexOfSide(place.side, place.trait);
118
+ }
119
+ return getIndex(place.side, this.getIndexInTrait(place.sibling));
120
+ }
121
+
122
+ /** @returns the node associated with the given id in this view. Fails if the node does not exist in this view. */
123
+ public getViewNode(id: NodeId): TreeViewNode {
124
+ return this.tryGetViewNode(id) ?? fail('NodeId not found');
125
+ }
126
+
127
+ /** @returns the node associated with the given id in this view, or undefined if the node does not exist in this view */
128
+ public tryGetViewNode(id: NodeId): TreeViewNode | undefined {
129
+ const forestNode = this.forest.tryGet(id);
130
+ if (forestNode !== undefined && isParentedForestNode(forestNode)) {
131
+ const viewNode: TreeViewNode = {
132
+ definition: forestNode.definition,
133
+ identifier: forestNode.identifier,
134
+ traits: forestNode.traits,
135
+ parentage: {
136
+ label: forestNode.traitParent,
137
+ parent: forestNode.parentId,
138
+ },
139
+ };
140
+ copyPropertyIfDefined(forestNode, viewNode, 'payload');
141
+ return viewNode;
142
+ }
143
+
144
+ return forestNode;
145
+ }
146
+
147
+ /**
148
+ * @returns the label of the trait under which a node with the given id resides. Fails if the node does not exist in this view or if
149
+ * it is the root node.
150
+ */
151
+ public getTraitLabel(id: NodeId): TraitLabel {
152
+ return this.forest.getParent(id).traitParent;
153
+ }
154
+
155
+ /**
156
+ * @returns the label of the trait under which a node with the given id resides, or undefined if the node is not present in this
157
+ * view or if it is the root node
158
+ */
159
+ public tryGetTraitLabel(id: NodeId): TraitLabel | undefined {
160
+ return this.forest.tryGetParent(id)?.traitParent;
161
+ }
162
+
163
+ /**
164
+ * @returns the parent of the node with the given id. Fails if the node does not exist in this view or if it is the root node.
165
+ */
166
+ public getParentViewNode(id: NodeId): TreeViewNode {
167
+ const parentInfo = this.forest.getParent(id);
168
+ return this.getViewNode(parentInfo.parentId);
169
+ }
170
+
171
+ /**
172
+ * @returns the parent of the node with the given id. Returns undefined if the node does not exist in this view or if it is the root
173
+ * node.
174
+ */
175
+ public tryGetParentViewNode(id: NodeId): TreeViewNode | undefined {
176
+ const parentInfo = this.forest.tryGetParent(id);
177
+ if (parentInfo === undefined) {
178
+ return undefined;
179
+ }
180
+ return this.getViewNode(parentInfo.parentId);
181
+ }
182
+
183
+ /**
184
+ * @returns the trait location of the node with the given id. Fails if the node does not exist in this view or of it is the root
185
+ * node
186
+ */
187
+ public getTraitLocation(id: NodeId): TraitLocation {
188
+ const parentData = this.forest.getParent(id);
189
+ return {
190
+ parent: parentData.parentId,
191
+ label: parentData.traitParent,
192
+ };
193
+ }
194
+
195
+ /**
196
+ * @returns the trait location of the node with the given id, or undefined if the node does not exist in this view or if it is the root
197
+ * node
198
+ */
199
+ public tryGetTraitLocation(id: NodeId): TraitLocation | undefined {
200
+ const parentData = this.forest.tryGetParent(id);
201
+ if (parentData === undefined) {
202
+ return undefined;
203
+ }
204
+ return {
205
+ parent: parentData.parentId,
206
+ label: parentData.traitParent,
207
+ };
208
+ }
209
+
210
+ /**
211
+ * @returns the index within the trait under which the node with the given id resides. The node must exist in this view and must have a
212
+ * parent.
213
+ * Performance note: this is O(siblings in trait).
214
+ */
215
+ public getIndexInTrait(id: NodeId): TraitNodeIndex {
216
+ const index = this.tryGetIndexInTrait(id);
217
+ return index ?? fail('ID does not exist in the forest.');
218
+ }
219
+
220
+ /**
221
+ * @returns the index within the trait under which the node with the given id resides, or undefined if the node does not exist in this
222
+ * view or does not have a parent.
223
+ * Performance note: this is O(siblings in trait).
224
+ */
225
+ public tryGetIndexInTrait(id: NodeId): TraitNodeIndex | undefined {
226
+ const cachedIndex = this.traitIndicesCache?.get(id);
227
+ if (cachedIndex !== undefined) {
228
+ return cachedIndex;
229
+ }
230
+
231
+ const parentData = this.forest.tryGetParent(id);
232
+ if (parentData === undefined) {
233
+ return undefined;
234
+ }
235
+
236
+ const parent = this.forest.tryGet(parentData.parentId);
237
+ if (parent === undefined) {
238
+ return undefined;
239
+ }
240
+
241
+ const trait = parent.traits.get(parentData.traitParent) ?? fail('inconsistent forest: trait parent not found');
242
+ let foundIndex: TraitNodeIndex | undefined;
243
+ if (trait.length === 0) {
244
+ return foundIndex;
245
+ }
246
+
247
+ this.traitIndicesCache ??= new Map();
248
+ for (let i = 0; i < trait.length; i++) {
249
+ const nodeInTrait = trait[i];
250
+ const index = i as TraitNodeIndex;
251
+ this.traitIndicesCache.set(nodeInTrait, index);
252
+ if (nodeInTrait === id) {
253
+ foundIndex = index;
254
+ }
255
+ }
256
+
257
+ return foundIndex;
258
+ }
259
+
260
+ /**
261
+ * @returns the trait at the given location. If no such trait exists, returns an empty trait.
262
+ */
263
+ public getTrait(traitLocation: TraitLocation): readonly NodeId[] {
264
+ return this.getViewNode(traitLocation.parent).traits.get(traitLocation.label) ?? [];
265
+ }
266
+
267
+ /** Asserts that the view's internal state is consistent. Useful for testing/validation. */
268
+ public assertConsistent(): void {
269
+ this.forest.assertConsistent();
270
+ }
271
+
272
+ public [Symbol.iterator](): IterableIterator<TreeViewNode> {
273
+ return this.iterateNodeDescendants(this.rootNode);
274
+ }
275
+
276
+ /** @returns true iff the given view is equal to this view */
277
+ public abstract equals(view: TreeView): boolean;
278
+
279
+ /**
280
+ * @returns true iff the given view's forest of nodes is equivalent to this view's forest of nodes
281
+ * @param strict - if true, the views' forests must be the same object, otherwise they must merely be equivalent
282
+ */
283
+ public hasEqualForest(view: TreeView, strict = false): boolean {
284
+ if (this.root === view.root) {
285
+ // TODO:#49100:Perf: make this faster and/or remove use by PrefetchingCheckout.
286
+ return strict ? this.forest === view.forest : this.forest.equals(view.forest);
287
+ }
288
+
289
+ return false;
290
+ }
291
+
292
+ private *iterateNodeDescendants(node: TreeViewNode): IterableIterator<TreeViewNode> {
293
+ yield node;
294
+ for (const trait of Array.from(node.traits.values()).sort()) {
295
+ for (const childId of trait) {
296
+ const child = this.getViewNode(childId);
297
+ yield* this.iterateNodeDescendants(child);
298
+ }
299
+ }
300
+ }
301
+
302
+ private getIndexOfSide(side: Side, traitLocation: TraitLocation): PlaceIndex {
303
+ return side === Side.After ? (0 as PlaceIndex) : (this.getTrait(traitLocation).length as PlaceIndex);
304
+ }
305
+
306
+ /**
307
+ * Calculate the difference between two `TreeView`s
308
+ * @param view - the other view to compare to this one
309
+ * @returns A {@link Delta} which nodes must be changed, added, and removed to get from `this` to `view`.
310
+ * The views must share a root.
311
+ */
312
+ public delta(view: TreeView): Delta<NodeId> {
313
+ assert(this.root === view.root, 'Delta can only be calculated between views that share a root');
314
+ return this.forest.delta(view.forest);
315
+ }
316
+ }
317
+
318
+ function getIndex(side: Side, index: TraitNodeIndex): PlaceIndex {
319
+ // eslint-disable-next-line @typescript-eslint/restrict-plus-operands
320
+ return (side + index) as PlaceIndex;
321
+ }
@@ -0,0 +1,77 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { StablePlace, StableRange } from './ChangeTypes';
7
+ import { assert, fail } from './Common';
8
+ import { TraitLocation, TreeView, TreeViewPlace, TreeViewRange } from './TreeView';
9
+
10
+ /**
11
+ * Express the given {@link (StableRange:interface)} as a {@link TreeViewRange}
12
+ */
13
+ export function rangeFromStableRange(view: TreeView, range: StableRange): TreeViewRange {
14
+ const location = getTraitLocationOfRange(view, range);
15
+ // This can be optimized for better constant factors.
16
+ return {
17
+ start: sideOfRange(range, SideOfRange.Start, location),
18
+ end: sideOfRange(range, SideOfRange.End, location),
19
+ };
20
+ }
21
+
22
+ /**
23
+ * Express the given {@link (StablePlace:interface)} as a {@link TreeViewPlace}
24
+ */
25
+ export function placeFromStablePlace(view: TreeView, stablePlace: StablePlace): TreeViewPlace {
26
+ const { side } = stablePlace;
27
+ if (stablePlace.referenceSibling === undefined) {
28
+ assert(stablePlace.referenceTrait !== undefined);
29
+ return {
30
+ trait: stablePlace.referenceTrait,
31
+ side,
32
+ };
33
+ }
34
+ return {
35
+ trait: view.getTraitLocation(stablePlace.referenceSibling),
36
+ side: stablePlace.side,
37
+ sibling: stablePlace.referenceSibling,
38
+ };
39
+ }
40
+
41
+ /**
42
+ * Return the trait under which the given range resides
43
+ * @param view - the {@link TreeView} within which to retrieve the trait location
44
+ * @param range - must be well formed and valid
45
+ */
46
+ export function getTraitLocationOfRange(view: TreeView, range: StableRange): TraitLocation {
47
+ const referenceTrait = range.start.referenceTrait ?? range.end.referenceTrait;
48
+ if (referenceTrait) {
49
+ return referenceTrait;
50
+ }
51
+ const sibling =
52
+ range.start.referenceSibling ?? range.end.referenceSibling ?? fail('malformed range does not indicate trait');
53
+ return view.getTraitLocation(sibling);
54
+ }
55
+
56
+ function sideOfRange(range: StableRange, sideOfRange: SideOfRange, trait: TraitLocation): TreeViewPlace {
57
+ const siblingRelative = sideOfRange === SideOfRange.Start ? range.start : range.end;
58
+ return {
59
+ trait,
60
+ side: siblingRelative.side,
61
+ sibling: siblingRelative.referenceSibling,
62
+ };
63
+ }
64
+
65
+ /**
66
+ * Denotes either the start or end of a range
67
+ */
68
+ enum SideOfRange {
69
+ /**
70
+ * The start of the range
71
+ */
72
+ Start = 0,
73
+ /**
74
+ * The end of the range
75
+ */
76
+ End = 1,
77
+ }