@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
@@ -1 +1 @@
1
- {"version":3,"file":"EditLog.tests.js","sourceRoot":"","sources":["../../src/test/EditLog.tests.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { expect } from 'chai';\nimport { IsoBuffer } from '@fluidframework/common-utils';\nimport { EditHandle, EditLog, separateEditAndId } from '../EditLog';\nimport { Change } from '../default-edits';\nimport { EditId } from '../Identifiers';\nimport { assertNotUndefined } from '../Common';\nimport { newEdit, Edit, EditWithoutId } from '../generic';\n\n/**\n * Creates an edit log with the specified number of chunks, stored as handles instead of edits.\n * @param numberOfChunks - The number of chunks to add to the edit log.\n * @param editsPerChunk - The number of edits per chunk that gets added to the edit log.\n * @param editsPerChunkOnEditLog - The number of edits per chunk that gets set for future edits to the edit log.\n * @returns The edit log created with handles.\n */\nfunction createEditLogWithHandles(\n\tnumberOfChunks = 2,\n\teditsPerChunk = 5,\n\teditsPerChunkOnEditLog = 100\n): EditLog<Change> {\n\tconst editIds: EditId[] = [];\n\tconst editChunks: EditWithoutId<Change>[][] = [];\n\n\tlet inProgessChunk: EditWithoutId<Change>[] = [];\n\tfor (let i = 0; i < numberOfChunks * editsPerChunk; i++) {\n\t\tconst { id, editWithoutId } = separateEditAndId(newEdit([]));\n\t\teditIds.push(id);\n\n\t\tinProgessChunk.push(editWithoutId);\n\n\t\tif (inProgessChunk.length === editsPerChunk) {\n\t\t\teditChunks.push(inProgessChunk.slice());\n\t\t\tinProgessChunk = [];\n\t\t}\n\t}\n\n\tconst handles: EditHandle[] = editChunks.map((chunk) => {\n\t\treturn {\n\t\t\tget: async () => {\n\t\t\t\treturn IsoBuffer.from(JSON.stringify({ edits: chunk }));\n\t\t\t},\n\t\t};\n\t});\n\n\tlet startRevision = 0;\n\tconst handlesWithKeys = handles.map((chunk) => {\n\t\tconst handle = {\n\t\t\tstartRevision,\n\t\t\tchunk,\n\t\t};\n\t\tstartRevision = startRevision + 5;\n\t\treturn handle;\n\t});\n\n\tconst editLog = new EditLog<Change>({ editChunks: handlesWithKeys, editIds }, undefined, editsPerChunkOnEditLog);\n\n\treturn editLog;\n}\n\ndescribe('EditLog', () => {\n\tconst edit0 = newEdit([]);\n\tconst edit1 = newEdit([]);\n\tconst { id: id0, editWithoutId: editWithoutId0 } = separateEditAndId(edit0);\n\tconst { id: id1, editWithoutId: editWithoutId1 } = separateEditAndId(edit1);\n\n\tit('can be constructed from sequenced edits', () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Newly initialized log should not have local edits.');\n\t\texpect(log.numberOfSequencedEdits).to.equal(\n\t\t\teditChunks[0].chunk.length,\n\t\t\t'Log should have as many sequenced edits as it was initialized with.'\n\t\t);\n\t\texpect(log.length).to.equal(\n\t\t\teditChunks[0].chunk.length,\n\t\t\t\"Log's total length should match its sequenced edits on construction\"\n\t\t);\n\n\t\texpect(log.getIdAtIndex(0)).to.equal(id0, 'Log should have edits in order of construction.');\n\t\texpect(log.getIdAtIndex(1)).to.equal(id1, 'Log should have edits in order of construction.');\n\t});\n\n\tit('can get the index from an edit id of sequenced edits', () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\n\t\texpect(log.getIndexOfId(id0)).to.equal(0);\n\t\texpect(log.getIndexOfId(id1)).to.equal(1);\n\t});\n\n\tit('can get the index from an edit id of a local edit', () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];\n\t\tconst editIds = [id0];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\t\tlog.addLocalEdit(edit1);\n\n\t\texpect(log.getIndexOfId(id0)).to.equal(0);\n\t\texpect(log.getIndexOfId(id1)).to.equal(1);\n\t});\n\n\tdescribe('tryGetIndexOfId', () => {\n\t\tit('can get the index from an existing edit', () => {\n\t\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];\n\t\t\tconst editIds = [id0];\n\t\t\tconst log = new EditLog({ editChunks, editIds });\n\t\t\texpect(log.tryGetIndexOfId(id0)).to.equal(0);\n\t\t});\n\n\t\tit('returns undefined when queried with a nonexistent edit', () => {\n\t\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];\n\t\t\tconst editIds = ['f9379af1-6f1a-4f71-8f8c-859359621404' as EditId];\n\t\t\tconst log = new EditLog({ editChunks, editIds });\n\t\t\texpect(log.tryGetIndexOfId('aa203fc3-bc28-437d-b01c-f9398dc859ef' as EditId)).to.equal(undefined);\n\t\t});\n\t});\n\n\tit('can get an edit from an index', async () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\n\t\texpect((await log.getEditAtIndex(0)).id).to.equal(id0);\n\t\texpect((await log.getEditAtIndex(1)).id).to.equal(id1);\n\t});\n\n\tit('can get an edit from an edit id', async () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\n\t\tconst editFromId0 = await log.tryGetEdit(id0);\n\t\tconst editFromId1 = await log.tryGetEdit(id1);\n\n\t\texpect(editFromId0).to.not.be.undefined;\n\t\texpect(editFromId1).to.not.be.undefined;\n\t\texpect(assertNotUndefined(editFromId0).id).to.equal(edit0.id);\n\t\texpect(assertNotUndefined(editFromId1).id).to.equal(edit1.id);\n\t});\n\n\tit('can be iterated', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit1);\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\n\t\t// Sequenced edits should be iterated before local edits\n\t\tconst expectedEditIdStack = [id1, id0];\n\n\t\tlog.editIds.forEach((editId) => {\n\t\t\texpect(editId).to.equal(expectedEditIdStack.pop());\n\t\t});\n\n\t\texpect(expectedEditIdStack.length).to.equal(0);\n\t});\n\n\tit('can add sequenced edits', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(log.numberOfSequencedEdits).to.equal(1);\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');\n\n\t\tlog.addSequencedEdit(edit1, { sequenceNumber: 2, referenceSequenceNumber: 1 });\n\t\texpect(log.numberOfSequencedEdits).to.equal(2);\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');\n\t\texpect(log.length).to.equal(2);\n\t});\n\n\tit('can add local edits', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit0);\n\t\texpect(log.numberOfLocalEdits).to.equal(1);\n\t\texpect(log.numberOfSequencedEdits).to.equal(0, 'Log should have only local edits.');\n\n\t\tlog.addLocalEdit(edit1);\n\t\texpect(log.numberOfLocalEdits).to.equal(2);\n\t\texpect(log.numberOfSequencedEdits).to.equal(0, 'Log should have only local edits.');\n\t\texpect(log.length).to.equal(2);\n\t});\n\n\tit('tracks the min sequence number of sequenced edits', () => {\n\t\tconst log = new EditLog();\n\n\t\texpect(log.minSequenceNumber).equals(0);\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(log.minSequenceNumber).equals(0);\n\t\tlog.addSequencedEdit(edit1, { sequenceNumber: 43, referenceSequenceNumber: 42, minimumSequenceNumber: 42 });\n\t\texpect(log.minSequenceNumber).equals(42);\n\t\texpect(() =>\n\t\t\tlog.addSequencedEdit('fake-edit' as unknown as Edit<unknown>, {\n\t\t\t\tsequenceNumber: 44,\n\t\t\t\treferenceSequenceNumber: 43,\n\t\t\t})\n\t\t).throws('min number');\n\t});\n\n\tit('detects causal ordering violations', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit0);\n\t\tlog.addLocalEdit(edit1);\n\t\texpect(() => log.addSequencedEdit(edit1, { sequenceNumber: 1, referenceSequenceNumber: 0 })).throws('ordering');\n\t});\n\n\tit('can sequence a local edit', async () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit0);\n\t\texpect(log.numberOfLocalEdits).to.equal(1);\n\t\tlet editFromId0 = await log.tryGetEdit(id0);\n\t\texpect(editFromId0).to.not.be.undefined;\n\t\texpect(assertNotUndefined(editFromId0).id).equals(edit0.id, 'Log should contain local edit.');\n\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(log.length).to.equal(1);\n\t\texpect(log.numberOfSequencedEdits).to.equal(1);\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');\n\t\teditFromId0 = await log.tryGetEdit(id0);\n\t\texpect(editFromId0).to.not.be.undefined;\n\t\texpect(assertNotUndefined(editFromId0).id).equals(edit0.id, 'Log should contain sequenced edit.');\n\t});\n\n\tit('Throws on duplicate sequenced edits', async () => {\n\t\tconst log = new EditLog();\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(() => log.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 }))\n\t\t\t.to.throw(Error)\n\t\t\t.that.has.property('message')\n\t\t\t.which.matches(/Duplicate/);\n\t});\n\n\tit('can sequence multiple local edits', async () => {\n\t\tconst log = new EditLog();\n\t\tconst ids: EditId[] = [];\n\n\t\tconst numEdits = 10;\n\t\tfor (let i = 0; i < numEdits; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tlog.addLocalEdit(edit);\n\t\t\tids.push(edit.id);\n\t\t\texpect(log.getIndexOfId(edit.id)).equals(i, 'Local edits should be appended to the end of the log.');\n\t\t}\n\t\texpect(log.length).equals(log.numberOfLocalEdits).and.equals(numEdits, 'Only local edits should be present.');\n\n\t\tlog.sequenceLocalEdits();\n\n\t\texpect(log.editIds).to.deep.equal(ids, 'Sequencing a local edit should not change its index.');\n\n\t\texpect(log.length)\n\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t.and.equals(numEdits, 'Only sequenced edits should be present.');\n\t});\n\n\tit('can correctly compare equality to other edit logs', () => {\n\t\tconst edit0Copy: Edit<Change> = { ...edit0 };\n\t\tconst edit1Copy: Edit<Change> = { ...edit1 };\n\t\tconst { editWithoutId: editWithoutId0Copy } = separateEditAndId(edit0Copy);\n\t\tconst { editWithoutId: editWithoutId1Copy } = separateEditAndId(edit1Copy);\n\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editChunksCopy = [{ startRevision: 0, chunk: [editWithoutId0Copy, editWithoutId1Copy] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log0 = new EditLog({ editChunks, editIds });\n\t\tconst log1 = new EditLog({ editChunks: editChunksCopy, editIds });\n\n\t\texpect(log0.equals(log1)).to.be.true;\n\n\t\tconst log2 = new EditLog<Change>({\n\t\t\teditChunks: [{ startRevision: 0, chunk: [editWithoutId0] }],\n\t\t\teditIds: [id0],\n\t\t});\n\t\tlog2.addLocalEdit(edit1Copy);\n\n\t\texpect(log0.equals(log2)).to.be.true;\n\n\t\tconst differentLog = new EditLog({\n\t\t\teditChunks: [{ startRevision: 0, chunk: [editWithoutId0] }],\n\t\t\teditIds: [id0],\n\t\t});\n\n\t\texpect(log0.equals(differentLog)).to.be.false;\n\t});\n\n\tit('creates a new edit chunk once the previous one has been filled', () => {\n\t\tconst log = new EditLog();\n\n\t\tfor (let i = 0; i < log.editsPerChunk; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tlog.addSequencedEdit(edit, { sequenceNumber: i + 1, referenceSequenceNumber: i });\n\t\t\texpect(log.getEditLogSummary().editChunks.length).to.be.equal(1);\n\t\t}\n\n\t\tconst edit = newEdit([]);\n\t\tlog.addSequencedEdit(edit, {\n\t\t\tsequenceNumber: log.editsPerChunk,\n\t\t\treferenceSequenceNumber: log.editsPerChunk - 1,\n\t\t});\n\t\texpect(log.getEditLogSummary().editChunks.length).to.be.equal(2);\n\t});\n\n\tit('can load edits from a handle', async () => {\n\t\tconst log = createEditLogWithHandles();\n\n\t\t// Check that each edit can be retrieved correctly\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\texpect((await log.getEditAtIndex(i)).id).to.equal(log.editIds[i]);\n\t\t}\n\t});\n\n\tit('can add edits to logs with varying edit chunk sizes', async () => {\n\t\tconst numberOfChunks = 2;\n\t\tconst editsPerChunk = 5;\n\t\tconst log = createEditLogWithHandles(numberOfChunks, editsPerChunk, 100);\n\n\t\t// Load the edits for the last edit chunk\n\t\tawait log.getEditAtIndex(numberOfChunks * editsPerChunk - 1);\n\n\t\t// Add a sequenced edit and check it's been added\n\t\tconst edit = newEdit([]);\n\t\tlog.addSequencedEdit(edit, {\n\t\t\tsequenceNumber: log.editsPerChunk,\n\t\t\treferenceSequenceNumber: log.editsPerChunk - 1,\n\t\t});\n\n\t\texpect(log.getIdAtIndex(numberOfChunks * editsPerChunk)).to.equal(edit.id);\n\t});\n});\n"]}
1
+ {"version":3,"file":"EditLog.tests.js","sourceRoot":"","sources":["../../src/test/EditLog.tests.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { expect } from 'chai';\nimport { IsoBuffer } from '@fluidframework/common-utils';\nimport { EditLog, separateEditAndId } from '../EditLog';\nimport { EditId } from '../Identifiers';\nimport { assertNotUndefined } from '../Common';\nimport { Edit, EditChunkContents, EditWithoutId, FluidEditHandle } from '../persisted-types';\nimport { newEdit } from '../EditUtilities';\n\ntype DummyChange = never;\n\n/**\n * Creates an edit log with the specified number of chunks, stored as handles instead of edits.\n * @param numberOfChunks - The number of chunks to add to the edit log.\n * @param editsPerChunk - The number of edits per chunk that gets added to the edit log.\n * @param editsPerChunkOnEditLog - The number of edits per chunk that gets set for future edits to the edit log.\n * @returns The edit log created with handles.\n */\nfunction createEditLogWithHandles(numberOfChunks = 2, editsPerChunk = 5): EditLog<DummyChange> {\n\tconst editIds: EditId[] = [];\n\tconst editChunks: EditWithoutId<DummyChange>[][] = [];\n\n\tlet inProgessChunk: EditWithoutId<DummyChange>[] = [];\n\tfor (let i = 0; i < numberOfChunks * editsPerChunk; i++) {\n\t\tconst { id, editWithoutId } = separateEditAndId(newEdit([]));\n\t\teditIds.push(id);\n\n\t\tinProgessChunk.push(editWithoutId);\n\n\t\tif (inProgessChunk.length === editsPerChunk) {\n\t\t\teditChunks.push(inProgessChunk.slice());\n\t\t\tinProgessChunk = [];\n\t\t}\n\t}\n\n\tconst handles: FluidEditHandle[] = editChunks.map((chunk) => {\n\t\treturn {\n\t\t\tabsolutePath: 'test blob',\n\t\t\tget: async () => {\n\t\t\t\treturn IsoBuffer.from(JSON.stringify({ edits: chunk }));\n\t\t\t},\n\t\t};\n\t});\n\n\tlet startRevision = 0;\n\tconst handlesWithKeys = handles.map((baseHandle) => {\n\t\tconst handle = {\n\t\t\tstartRevision,\n\t\t\tchunk: {\n\t\t\t\tget: async () =>\n\t\t\t\t\t(\n\t\t\t\t\t\tJSON.parse(IsoBuffer.from(await baseHandle.get()).toString()) as Omit<\n\t\t\t\t\t\t\tEditChunkContents,\n\t\t\t\t\t\t\t'edits'\n\t\t\t\t\t\t> & { edits: EditWithoutId<DummyChange>[] }\n\t\t\t\t\t).edits,\n\t\t\t\tbaseHandle,\n\t\t\t},\n\t\t};\n\t\tstartRevision = startRevision + 5;\n\t\treturn handle;\n\t});\n\n\tconst editLog = new EditLog({ editChunks: handlesWithKeys, editIds });\n\n\treturn editLog;\n}\n\ndescribe('EditLog', () => {\n\tconst edit0 = newEdit([]);\n\tconst edit1 = newEdit([]);\n\tconst { id: id0, editWithoutId: editWithoutId0 } = separateEditAndId(edit0);\n\tconst { id: id1, editWithoutId: editWithoutId1 } = separateEditAndId(edit1);\n\n\tit('can be constructed from sequenced edits', () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Newly initialized log should not have local edits.');\n\t\texpect(log.numberOfSequencedEdits).to.equal(\n\t\t\teditChunks[0].chunk.length,\n\t\t\t'Log should have as many sequenced edits as it was initialized with.'\n\t\t);\n\t\texpect(log.length).to.equal(\n\t\t\teditChunks[0].chunk.length,\n\t\t\t\"Log's total length should match its sequenced edits on construction\"\n\t\t);\n\n\t\texpect(log.getIdAtIndex(0)).to.equal(id0, 'Log should have edits in order of construction.');\n\t\texpect(log.getIdAtIndex(1)).to.equal(id1, 'Log should have edits in order of construction.');\n\t});\n\n\tit('can get the index from an edit id of sequenced edits', () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\n\t\texpect(log.getIndexOfId(id0)).to.equal(0);\n\t\texpect(log.getIndexOfId(id1)).to.equal(1);\n\t});\n\n\tit('can get the index from an edit id of a local edit', () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];\n\t\tconst editIds = [id0];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\t\tlog.addLocalEdit(edit1);\n\n\t\texpect(log.getIndexOfId(id0)).to.equal(0);\n\t\texpect(log.getIndexOfId(id1)).to.equal(1);\n\t});\n\n\tdescribe('tryGetIndexOfId', () => {\n\t\tit('can get the index from an existing edit', () => {\n\t\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];\n\t\t\tconst editIds = [id0];\n\t\t\tconst log = new EditLog({ editChunks, editIds });\n\t\t\texpect(log.tryGetIndexOfId(id0)).to.equal(0);\n\t\t});\n\n\t\tit('returns undefined when queried with a nonexistent edit', () => {\n\t\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];\n\t\t\tconst editIds = ['f9379af1-6f1a-4f71-8f8c-859359621404' as EditId];\n\t\t\tconst log = new EditLog({ editChunks, editIds });\n\t\t\texpect(log.tryGetIndexOfId('aa203fc3-bc28-437d-b01c-f9398dc859ef' as EditId)).to.equal(undefined);\n\t\t});\n\t});\n\n\tit('can get an edit from an index', async () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\n\t\texpect((await log.getEditAtIndex(0)).id).to.equal(id0);\n\t\texpect((await log.getEditAtIndex(1)).id).to.equal(id1);\n\t});\n\n\tit('can get an edit from an edit id', async () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\n\t\tconst editFromId0 = await log.tryGetEdit(id0);\n\t\tconst editFromId1 = await log.tryGetEdit(id1);\n\n\t\texpect(editFromId0).to.not.be.undefined;\n\t\texpect(editFromId1).to.not.be.undefined;\n\t\texpect(assertNotUndefined(editFromId0).id).to.equal(edit0.id);\n\t\texpect(assertNotUndefined(editFromId1).id).to.equal(edit1.id);\n\t});\n\n\tit('can be iterated', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit1);\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\n\t\t// Sequenced edits should be iterated before local edits\n\t\tconst expectedEditIdStack = [id1, id0];\n\n\t\tlog.editIds.forEach((editId) => {\n\t\t\texpect(editId).to.equal(expectedEditIdStack.pop());\n\t\t});\n\n\t\texpect(expectedEditIdStack.length).to.equal(0);\n\t});\n\n\tit('can add sequenced edits', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(log.numberOfSequencedEdits).to.equal(1);\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');\n\n\t\tlog.addSequencedEdit(edit1, { sequenceNumber: 2, referenceSequenceNumber: 1 });\n\t\texpect(log.numberOfSequencedEdits).to.equal(2);\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');\n\t\texpect(log.length).to.equal(2);\n\t});\n\n\tit('can add local edits', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit0);\n\t\texpect(log.numberOfLocalEdits).to.equal(1);\n\t\texpect(log.numberOfSequencedEdits).to.equal(0, 'Log should have only local edits.');\n\n\t\tlog.addLocalEdit(edit1);\n\t\texpect(log.numberOfLocalEdits).to.equal(2);\n\t\texpect(log.numberOfSequencedEdits).to.equal(0, 'Log should have only local edits.');\n\t\texpect(log.length).to.equal(2);\n\t});\n\n\tit('tracks the min sequence number of sequenced edits', () => {\n\t\tconst log = new EditLog();\n\n\t\texpect(log.minSequenceNumber).equals(0);\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(log.minSequenceNumber).equals(0);\n\t\tlog.addSequencedEdit(edit1, { sequenceNumber: 43, referenceSequenceNumber: 42, minimumSequenceNumber: 42 });\n\t\texpect(log.minSequenceNumber).equals(42);\n\t\texpect(() =>\n\t\t\tlog.addSequencedEdit('fake-edit' as unknown as Edit<unknown>, {\n\t\t\t\tsequenceNumber: 44,\n\t\t\t\treferenceSequenceNumber: 43,\n\t\t\t})\n\t\t).throws('min number');\n\t});\n\n\tit('detects causal ordering violations', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit0);\n\t\tlog.addLocalEdit(edit1);\n\t\texpect(() => log.addSequencedEdit(edit1, { sequenceNumber: 1, referenceSequenceNumber: 0 })).throws('ordering');\n\t});\n\n\tit('can sequence a local edit', async () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit0);\n\t\texpect(log.numberOfLocalEdits).to.equal(1);\n\t\tlet editFromId0 = await log.tryGetEdit(id0);\n\t\texpect(editFromId0).to.not.be.undefined;\n\t\texpect(assertNotUndefined(editFromId0).id).equals(edit0.id, 'Log should contain local edit.');\n\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(log.length).to.equal(1);\n\t\texpect(log.numberOfSequencedEdits).to.equal(1);\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');\n\t\teditFromId0 = await log.tryGetEdit(id0);\n\t\texpect(editFromId0).to.not.be.undefined;\n\t\texpect(assertNotUndefined(editFromId0).id).equals(edit0.id, 'Log should contain sequenced edit.');\n\t});\n\n\tit('Throws on duplicate sequenced edits', async () => {\n\t\tconst log = new EditLog();\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(() => log.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 }))\n\t\t\t.to.throw(Error)\n\t\t\t.that.has.property('message')\n\t\t\t.which.matches(/Duplicate/);\n\t});\n\n\tit('can sequence multiple local edits', async () => {\n\t\tconst log = new EditLog();\n\t\tconst ids: EditId[] = [];\n\n\t\tconst numEdits = 10;\n\t\tfor (let i = 0; i < numEdits; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tlog.addLocalEdit(edit);\n\t\t\tids.push(edit.id);\n\t\t\texpect(log.getIndexOfId(edit.id)).equals(i, 'Local edits should be appended to the end of the log.');\n\t\t}\n\t\texpect(log.length).equals(log.numberOfLocalEdits).and.equals(numEdits, 'Only local edits should be present.');\n\n\t\tlog.sequenceLocalEdits();\n\n\t\texpect(log.editIds).to.deep.equal(ids, 'Sequencing a local edit should not change its index.');\n\n\t\texpect(log.length)\n\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t.and.equals(numEdits, 'Only sequenced edits should be present.');\n\t});\n\n\tit('can correctly compare equality to other edit logs', () => {\n\t\tconst edit0Copy: Edit<DummyChange> = { ...edit0 };\n\t\tconst edit1Copy: Edit<DummyChange> = { ...edit1 };\n\t\tconst { editWithoutId: editWithoutId0Copy } = separateEditAndId(edit0Copy);\n\t\tconst { editWithoutId: editWithoutId1Copy } = separateEditAndId(edit1Copy);\n\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editChunksCopy = [{ startRevision: 0, chunk: [editWithoutId0Copy, editWithoutId1Copy] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log0 = new EditLog({ editChunks, editIds });\n\t\tconst log1 = new EditLog({ editChunks: editChunksCopy, editIds });\n\n\t\texpect(log0.equals(log1)).to.be.true;\n\n\t\tconst log2 = new EditLog<DummyChange>({\n\t\t\teditChunks: [{ startRevision: 0, chunk: [editWithoutId0] }],\n\t\t\teditIds: [id0],\n\t\t});\n\t\tlog2.addLocalEdit(edit1Copy);\n\n\t\texpect(log0.equals(log2)).to.be.true;\n\n\t\tconst differentLog = new EditLog({\n\t\t\teditChunks: [{ startRevision: 0, chunk: [editWithoutId0] }],\n\t\t\teditIds: [id0],\n\t\t});\n\n\t\texpect(log0.equals(differentLog)).to.be.false;\n\t});\n\n\tit('creates a new edit chunk once the previous one has been filled', () => {\n\t\tconst log = new EditLog();\n\n\t\tfor (let i = 0; i < log.editsPerChunk; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tlog.addSequencedEdit(edit, { sequenceNumber: i + 1, referenceSequenceNumber: i });\n\t\t\texpect(log.getEditLogSummary().editChunks.length).to.be.equal(1);\n\t\t}\n\n\t\tconst edit = newEdit([]);\n\t\tlog.addSequencedEdit(edit, {\n\t\t\tsequenceNumber: log.editsPerChunk,\n\t\t\treferenceSequenceNumber: log.editsPerChunk - 1,\n\t\t});\n\t\texpect(log.getEditLogSummary().editChunks.length).to.be.equal(2);\n\t});\n\n\tit('can load edits from a handle', async () => {\n\t\tconst log = createEditLogWithHandles();\n\n\t\t// Check that each edit can be retrieved correctly\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\texpect((await log.getEditAtIndex(i)).id).to.equal(log.editIds[i]);\n\t\t}\n\t});\n\n\tit('can add edits to logs with varying edit chunk sizes', async () => {\n\t\tconst numberOfChunks = 2;\n\t\tconst editsPerChunk = 5;\n\t\tconst log = createEditLogWithHandles(numberOfChunks, editsPerChunk);\n\n\t\t// Load the edits for the last edit chunk\n\t\tawait log.getEditAtIndex(numberOfChunks * editsPerChunk - 1);\n\n\t\t// Add a sequenced edit and check it's been added\n\t\tconst edit = newEdit([]);\n\t\tlog.addSequencedEdit(edit, {\n\t\t\tsequenceNumber: log.editsPerChunk,\n\t\t\treferenceSequenceNumber: log.editsPerChunk - 1,\n\t\t});\n\n\t\texpect(log.getIdAtIndex(numberOfChunks * editsPerChunk)).to.equal(edit.id);\n\t});\n});\n"]}
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=EditUtilities.tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditUtilities.tests.d.ts","sourceRoot":"","sources":["../../src/test/EditUtilities.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,503 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { expect } from 'chai';
6
+ import { assert } from '@fluidframework/common-utils';
7
+ import { MockFluidDataStoreRuntime } from '@fluidframework/test-runtime-utils';
8
+ import { FluidSerializer } from '@fluidframework/shared-object-base';
9
+ import { getChangeNodeFromView } from '../SerializationUtilities';
10
+ import { noop } from '../Common';
11
+ import { convertTreeNodes, deepCompareNodes, internalizeBuildNode, PlaceValidationResult, RangeValidationResultKind, validateStablePlace, validateStableRange, walkTree, } from '../EditUtilities';
12
+ import { Side } from '../persisted-types';
13
+ import { comparePayloads } from '../PayloadUtilities';
14
+ import { refreshTestTree } from './utilities/TestUtilities';
15
+ describe('EditUtilities', () => {
16
+ const testTree = refreshTestTree(undefined, undefined, /* expensiveValidation: */ true);
17
+ describe('validateStablePlace', () => {
18
+ it('accepts valid places', () => {
19
+ expect(validateStablePlace(testTree.view, {
20
+ referenceSibling: testTree.left.identifier,
21
+ side: Side.Before,
22
+ })).deep.equals({
23
+ result: PlaceValidationResult.Valid,
24
+ referenceSibling: testTree.left.identifier,
25
+ side: Side.Before,
26
+ });
27
+ });
28
+ it('detects malformed places', () => {
29
+ expect(validateStablePlace(testTree.view, {
30
+ referenceTrait: testTree.left.traitLocation,
31
+ referenceSibling: testTree.left.identifier,
32
+ side: Side.Before,
33
+ })).deep.equals({ result: PlaceValidationResult.Malformed });
34
+ });
35
+ it('detects missing siblings', () => {
36
+ expect(validateStablePlace(testTree.view, {
37
+ referenceSibling: testTree.generateNodeId(),
38
+ side: Side.Before,
39
+ })).deep.equals({ result: PlaceValidationResult.MissingSibling });
40
+ });
41
+ it('detects missing parents', () => {
42
+ expect(validateStablePlace(testTree.view, {
43
+ referenceTrait: {
44
+ parent: testTree.generateNodeId(),
45
+ label: testTree.left.traitLabel,
46
+ },
47
+ side: Side.Before,
48
+ })).deep.equals({ result: PlaceValidationResult.MissingParent });
49
+ });
50
+ it('detects root places', () => {
51
+ expect(validateStablePlace(testTree.view, {
52
+ referenceSibling: testTree.identifier,
53
+ side: Side.Before,
54
+ })).deep.equals({ result: PlaceValidationResult.SiblingIsRootOrDetached });
55
+ });
56
+ });
57
+ describe('validateStableRange', () => {
58
+ it('accepts valid ranges', () => {
59
+ const validatedRange = validateStableRange(testTree.view, {
60
+ start: { referenceSibling: testTree.left.identifier, side: Side.Before },
61
+ end: { referenceSibling: testTree.left.identifier, side: Side.After },
62
+ });
63
+ expect(validatedRange.result).to.equal(RangeValidationResultKind.Valid);
64
+ if (validatedRange.result === RangeValidationResultKind.Valid) {
65
+ expect(validatedRange.start.referenceSibling).to.equal(testTree.left.identifier);
66
+ expect(validatedRange.start.referenceTrait).to.be.undefined;
67
+ expect(validatedRange.start.side).to.equal(Side.Before);
68
+ expect(validatedRange.end.referenceSibling).to.equal(testTree.left.identifier);
69
+ expect(validatedRange.end.referenceTrait).to.be.undefined;
70
+ expect(validatedRange.end.side).to.equal(Side.After);
71
+ }
72
+ else {
73
+ expect.fail();
74
+ }
75
+ });
76
+ it('detects inverted ranges', () => {
77
+ expect(validateStableRange(testTree.view, {
78
+ start: { referenceSibling: testTree.left.identifier, side: Side.After },
79
+ end: { referenceSibling: testTree.left.identifier, side: Side.Before },
80
+ })).deep.equals({ result: RangeValidationResultKind.Inverted });
81
+ });
82
+ it('detects when place are in different traits', () => {
83
+ expect(validateStableRange(testTree.view, {
84
+ start: { referenceSibling: testTree.left.identifier, side: Side.Before },
85
+ end: { referenceSibling: testTree.right.identifier, side: Side.After },
86
+ })).deep.equals({ result: RangeValidationResultKind.PlacesInDifferentTraits });
87
+ });
88
+ it('detects malformed places', () => {
89
+ const start = {
90
+ referenceTrait: testTree.left.traitLocation,
91
+ referenceSibling: testTree.left.identifier,
92
+ side: Side.Before,
93
+ };
94
+ expect(validateStableRange(testTree.view, {
95
+ // trait and sibling should be mutually exclusive
96
+ start,
97
+ end: { referenceSibling: testTree.left.identifier, side: Side.After },
98
+ })).deep.equals({
99
+ result: {
100
+ kind: RangeValidationResultKind.BadPlace,
101
+ place: start,
102
+ placeFailure: PlaceValidationResult.Malformed,
103
+ },
104
+ });
105
+ });
106
+ it('detects invalid places', () => {
107
+ const start = {
108
+ referenceSibling: testTree.generateNodeId(),
109
+ side: Side.Before,
110
+ };
111
+ expect(validateStableRange(testTree.view, {
112
+ start,
113
+ end: { referenceSibling: testTree.right.identifier, side: Side.After },
114
+ })).deep.equals({
115
+ result: {
116
+ kind: RangeValidationResultKind.BadPlace,
117
+ place: start,
118
+ placeFailure: PlaceValidationResult.MissingSibling,
119
+ },
120
+ });
121
+ });
122
+ });
123
+ describe('Tree node conversion', () => {
124
+ it('can clone a tree', () => {
125
+ const clone = convertTreeNodes(getChangeNodeFromView(testTree.view), (node) => (Object.assign({}, node)));
126
+ expect(testTree).to.not.equal(clone);
127
+ expect(deepCompareNodes(testTree, clone)).to.be.true;
128
+ });
129
+ it('can clone a leaf', () => {
130
+ let converted = false;
131
+ expect(convertTreeNodes(42, (n) => {
132
+ converted = true;
133
+ return n;
134
+ }, isNumber)).to.equal(42);
135
+ expect(converted).to.be.false;
136
+ });
137
+ it('can clone a tree with a leaf', () => {
138
+ const leafTrait = 'main';
139
+ const leafId = testTree.generateNodeId();
140
+ const tree = Object.assign(Object.assign({}, testTree.buildLeaf(testTree.generateNodeId())), { payload: 'payload', traits: { [leafTrait]: [testTree.buildLeaf(leafId)] } });
141
+ const clone = convertTreeNodes(tree, (node) => (Object.assign({}, node)));
142
+ assert(typeof clone !== 'number', '');
143
+ expect(clone.definition).to.equal(tree.definition);
144
+ expect(clone.identifier).to.equal(tree.identifier);
145
+ expect(clone.payload).to.equal(tree.payload);
146
+ expect(clone.traits[leafTrait][0].identifier).to.equal(leafId);
147
+ });
148
+ it('correctly invokes the convert function', () => {
149
+ const node = Object.assign(Object.assign({}, testTree.buildLeaf(testTree.generateNodeId())), { payload: 'payload' });
150
+ let converted = false;
151
+ convertTreeNodes(node, (n) => {
152
+ converted = true;
153
+ expect(node.definition).to.equal(node.definition);
154
+ expect(node.identifier).to.equal(node.identifier);
155
+ expect(node.payload).to.equal(node.payload);
156
+ return n;
157
+ }, isNumber);
158
+ expect(converted).to.be.true;
159
+ });
160
+ it('can convert a node', () => {
161
+ const node = Object.assign(Object.assign({}, testTree.buildLeaf(testTree.generateNodeId())), { payload: 'payload' });
162
+ const id = testTree.generateNodeId();
163
+ const converted = convertTreeNodes(node, (_) => ({ definition: '_def', identifier: id, payload: 'payload2' }), isNumber);
164
+ expect(converted).to.deep.equal({ definition: '_def', identifier: id, payload: 'payload2', traits: {} });
165
+ });
166
+ it('creates empty trait objects for the root', () => {
167
+ const node = Object.assign({}, testTree.buildLeaf(testTree.generateNodeId()));
168
+ const converted = convertTreeNodes(node, (n) => internalizeBuildNode(n, testTree), isNumber);
169
+ assert(typeof converted !== 'number', 'unexpected detached ID');
170
+ expect(converted.traits).to.not.be.undefined;
171
+ });
172
+ it('creates empty trait objects for children', () => {
173
+ const node = Object.assign(Object.assign({}, testTree.buildLeaf()), { traits: { main: Object.assign({}, testTree.buildLeaf()) } });
174
+ const converted = convertTreeNodes(node, (n) => internalizeBuildNode(n, testTree), isNumber);
175
+ assert(typeof converted !== 'number', 'unexpected detached ID');
176
+ expect(converted.traits).to.not.be.undefined;
177
+ });
178
+ it('can convert a tree with children', () => {
179
+ const childA = Object.assign(Object.assign({}, testTree.buildLeaf(testTree.generateNodeId())), { payload: 'a' });
180
+ const childB = Object.assign(Object.assign({}, testTree.buildLeaf(testTree.generateNodeId())), { payload: 'b' });
181
+ const node = Object.assign(Object.assign({}, testTree.buildLeaf(testTree.generateNodeId())), { traits: { main: [childA, childB] } });
182
+ const converted = convertTreeNodes(node, (node) => {
183
+ if (node.identifier === childB.identifier) {
184
+ return { definition: node.definition, identifier: node.identifier, payload: 'c' };
185
+ }
186
+ return node;
187
+ });
188
+ expect(converted).to.deep.equal({
189
+ definition: node.definition,
190
+ identifier: node.identifier,
191
+ traits: {
192
+ main: [
193
+ { definition: childA.definition, identifier: childA.identifier, payload: 'a', traits: {} },
194
+ { definition: childB.definition, identifier: childB.identifier, payload: 'c', traits: {} },
195
+ ],
196
+ },
197
+ });
198
+ });
199
+ it('can convert a tree with a grandchild', () => {
200
+ const grandchild = Object.assign(Object.assign({}, testTree.buildLeaf(testTree.generateNodeId())), { payload: 'g' });
201
+ const child = Object.assign(Object.assign({}, testTree.buildLeaf(testTree.generateNodeId())), { traits: { main: [grandchild] } });
202
+ const parent = Object.assign(Object.assign({}, testTree.buildLeaf(testTree.generateNodeId())), { traits: { main: [child] } });
203
+ const converted = convertTreeNodes(parent, (node) => {
204
+ if (node.identifier === grandchild.identifier) {
205
+ return { definition: node.definition, identifier: node.identifier, payload: 'h' };
206
+ }
207
+ return node;
208
+ });
209
+ expect(converted).to.deep.equal({
210
+ definition: parent.definition,
211
+ identifier: parent.identifier,
212
+ traits: {
213
+ main: [
214
+ {
215
+ definition: child.definition,
216
+ identifier: child.identifier,
217
+ traits: {
218
+ main: [
219
+ {
220
+ definition: grandchild.definition,
221
+ identifier: grandchild.identifier,
222
+ payload: 'h',
223
+ traits: {},
224
+ },
225
+ ],
226
+ },
227
+ },
228
+ ],
229
+ },
230
+ });
231
+ });
232
+ it('walks trees in a consistent order', () => {
233
+ // Construct two trees that are the same but have their traits defined in different orders
234
+ const buildTreeA = {
235
+ definition: 'parent',
236
+ traits: {
237
+ left: {
238
+ definition: 'left child',
239
+ traits: {
240
+ left: {
241
+ definition: 'left grandchild under left',
242
+ },
243
+ right: {
244
+ definition: 'right grandchild under left',
245
+ },
246
+ main: [
247
+ { definition: 'grandchild A under left main' },
248
+ { definition: 'grandchild B under left main' },
249
+ { definition: 'grandchild C under left main' },
250
+ ],
251
+ },
252
+ },
253
+ right: {
254
+ definition: 'right child',
255
+ traits: {
256
+ left: {
257
+ definition: 'left grandchild under right',
258
+ },
259
+ right: {
260
+ definition: 'right grandchild under right',
261
+ },
262
+ main: [
263
+ { definition: 'grandchild A under right main' },
264
+ { definition: 'grandchild B under right main' },
265
+ { definition: 'grandchild C under right main' },
266
+ ],
267
+ },
268
+ },
269
+ main: [
270
+ { definition: 'child A under main' },
271
+ { definition: 'child B under main' },
272
+ { definition: 'child C under main' },
273
+ ],
274
+ },
275
+ };
276
+ const buildTreeB = {
277
+ definition: 'parent',
278
+ traits: {
279
+ right: {
280
+ definition: 'right child',
281
+ traits: {
282
+ left: {
283
+ definition: 'left grandchild under right',
284
+ },
285
+ main: [
286
+ { definition: 'grandchild A under right main' },
287
+ { definition: 'grandchild B under right main' },
288
+ { definition: 'grandchild C under right main' },
289
+ ],
290
+ right: {
291
+ definition: 'right grandchild under right',
292
+ },
293
+ },
294
+ },
295
+ main: [
296
+ { definition: 'child A under main' },
297
+ { definition: 'child B under main' },
298
+ { definition: 'child C under main' },
299
+ ],
300
+ left: {
301
+ definition: 'left child',
302
+ traits: {
303
+ main: [
304
+ { definition: 'grandchild A under left main' },
305
+ { definition: 'grandchild B under left main' },
306
+ { definition: 'grandchild C under left main' },
307
+ ],
308
+ right: {
309
+ definition: 'right grandchild under left',
310
+ },
311
+ left: {
312
+ definition: 'left grandchild under left',
313
+ },
314
+ },
315
+ },
316
+ },
317
+ };
318
+ // Record the order in which the tree walk visits each node in each tree
319
+ const definitionsA = [];
320
+ walkTree(buildTreeA, (n) => definitionsA.push(n.definition), (x) => typeof x === 'number');
321
+ const definitionsB = [];
322
+ walkTree(buildTreeB, (n) => definitionsB.push(n.definition), (x) => typeof x === 'number');
323
+ // The orders should be the same, even though the trees had their traits defined in different orders
324
+ expect(definitionsA).to.deep.equal(definitionsB);
325
+ });
326
+ });
327
+ describe('Build tree internalization', () => {
328
+ it('does not copy extraneous properties from input tree', () => {
329
+ const node = Object.assign(Object.assign({}, testTree.buildLeaf(testTree.generateNodeId())), { traits: { main: [testTree.buildLeaf(testTree.generateNodeId())] } });
330
+ node.extra = 'This is extra data that should not be copied';
331
+ const converted = convertTreeNodes(node, (node) => internalizeBuildNode(node, testTree), isNumber);
332
+ expect(converted).to.deep.equal({
333
+ definition: node.definition,
334
+ identifier: node.identifier,
335
+ traits: node.traits,
336
+ });
337
+ });
338
+ it('does not copy extraneous properties from converter', () => {
339
+ const node = testTree.buildLeaf(testTree.generateNodeId());
340
+ expect(Object.prototype.hasOwnProperty.call(node, 'payload')).to.be.false;
341
+ const converted = convertTreeNodes(node, (node) => internalizeBuildNode(node, testTree), isNumber);
342
+ expect(Object.prototype.hasOwnProperty.call(converted, 'payload')).to.be.false;
343
+ });
344
+ });
345
+ function isNumber(node) {
346
+ return typeof node === 'number';
347
+ }
348
+ describe('comparePayloads', () => {
349
+ const serializer = new FluidSerializer(new MockFluidDataStoreRuntime().IFluidHandleContext, () => { });
350
+ const binder = { bind: noop };
351
+ let Equality;
352
+ (function (Equality) {
353
+ Equality[Equality["Equal"] = 0] = "Equal";
354
+ Equality[Equality["Unequal"] = 1] = "Unequal";
355
+ Equality[Equality["Unspecified"] = 2] = "Unspecified";
356
+ })(Equality || (Equality = {}));
357
+ function checkEquality(equal, equality) {
358
+ if (equality !== Equality.Unspecified) {
359
+ expect(equal).equals(equality === Equality.Equal);
360
+ }
361
+ }
362
+ function check(a, b, flags) {
363
+ // Check reflexive
364
+ expect(comparePayloads(a, a)).equal(true);
365
+ expect(comparePayloads(b, b)).equal(true);
366
+ checkEquality(comparePayloads(a, b), flags.initial);
367
+ // Check commutative
368
+ checkEquality(comparePayloads(b, a), flags.initial);
369
+ const [aString, aDeserialized] = checkSerialization(a, flags.roundtrip);
370
+ const [bString, bDeserialized] = checkSerialization(b, flags.roundtrip);
371
+ checkEquality(aString === bString, flags.serialized);
372
+ checkEquality(comparePayloads(aDeserialized, bDeserialized), flags.deserialized);
373
+ // Check commutative
374
+ checkEquality(comparePayloads(bDeserialized, aDeserialized), flags.deserialized);
375
+ }
376
+ function checkSerialization(a, roundtrip) {
377
+ const aString = serializer.stringify(a, binder);
378
+ const a2 = serializer.parse(aString);
379
+ const aString2 = serializer.stringify(a2, binder);
380
+ expect(aString2).equal(aString);
381
+ checkEquality(comparePayloads(a, a2), roundtrip);
382
+ // Check second round trip, should always be equal
383
+ const a3 = serializer.parse(aString2);
384
+ expect(comparePayloads(a3, a2)).true;
385
+ return [aString, a2];
386
+ }
387
+ const allEqual = {
388
+ initial: Equality.Equal,
389
+ serialized: Equality.Equal,
390
+ deserialized: Equality.Equal,
391
+ roundtrip: Equality.Equal,
392
+ };
393
+ // For when the inputs are logically equal, but may serialize differently due to field ordering.
394
+ const allEqualUnstable = {
395
+ initial: Equality.Equal,
396
+ serialized: Equality.Unspecified,
397
+ deserialized: Equality.Equal,
398
+ roundtrip: Equality.Equal,
399
+ };
400
+ const allUnequal = {
401
+ initial: Equality.Unequal,
402
+ serialized: Equality.Unequal,
403
+ deserialized: Equality.Unequal,
404
+ roundtrip: Equality.Equal,
405
+ };
406
+ it('compares numbers correctly', () => {
407
+ check(0, 0, allEqual);
408
+ check(1, 1, allEqual);
409
+ check(0, 1, allUnequal);
410
+ check(-1, 1, allUnequal);
411
+ check(5.2, 5.200000001, allUnequal);
412
+ });
413
+ it('compares strings', () => {
414
+ check('', '', allEqual);
415
+ check(' ', '', allUnequal);
416
+ check('1', '+1', allUnequal);
417
+ // This character makes sure multi-byte utf-8 and multi-word utf-16 at least somewhat work
418
+ // Cases like unicode normalization are not covered here here. Normalization or not will be considered ok.
419
+ check('𤭢', '𤭢', allEqual);
420
+ check('𤭢', '', allUnequal);
421
+ check('several characters', 'several characters', allEqual);
422
+ check('several characters', 'several_characters', allUnequal);
423
+ });
424
+ it('compares arrays', () => {
425
+ check([], [], allEqual);
426
+ check([1], [1], allEqual);
427
+ check([[1]], [[1]], allEqual);
428
+ check([[1]], [[2]], allUnequal);
429
+ check([], [1], allUnequal);
430
+ check([1, 2], [2, 1], allUnequal);
431
+ });
432
+ it('compares objects', () => {
433
+ check({ 1: 'x' }, { 1: 'x' }, allEqual);
434
+ check({ x: 'x' }, { y: 'x' }, allUnequal);
435
+ check({ x: 'x' }, { x: {} }, allUnequal);
436
+ check({ x: {} }, { x: {} }, allEqual);
437
+ check({ x: [1, 2, 3, 5] }, { x: [1, 2, 3, 4] }, allUnequal);
438
+ check({ 1: 'x' }, {}, allUnequal);
439
+ check({ x: 'x' }, { x: 'x', y: 'x' }, allUnequal);
440
+ check({ field: 'a' }, { field: 'b' }, allUnequal);
441
+ // Fluid Serialization arbitrarily orders fields.
442
+ // Thus any object with more than one field may have non-deterministic serialization.
443
+ // However objects have field order, and we need to check comparePayloads is not impacted by it.
444
+ check({ y: 'a', x: 'b' }, { x: 'b', y: 'a' }, allEqualUnstable);
445
+ });
446
+ it('compares mixed types', () => {
447
+ check({ 0: 1 }, [1], allUnequal);
448
+ // Rationale: 'undefined' is reserved for future use (see 'SetValue' interface)
449
+ check(null, 'null', allUnequal);
450
+ check(null, 'null', allUnequal);
451
+ check(1, '1', allUnequal);
452
+ check(null, 0, allUnequal);
453
+ check('', 0, allUnequal);
454
+ });
455
+ const sameAfter = {
456
+ initial: Equality.Unspecified,
457
+ serialized: Equality.Unspecified,
458
+ deserialized: Equality.Equal,
459
+ roundtrip: Equality.Unspecified,
460
+ };
461
+ const differentAfter = {
462
+ initial: Equality.Unequal,
463
+ serialized: Equality.Unequal,
464
+ deserialized: Equality.Unequal,
465
+ roundtrip: Equality.Unspecified,
466
+ };
467
+ it('lossy cases', () => {
468
+ // Undefined fields are omitted in json, and thus lost on the round trip.
469
+ check({ x: undefined }, { y: undefined }, sameAfter);
470
+ check({ x: undefined }, {}, sameAfter);
471
+ // NaN and Infinity become null
472
+ check(NaN, NaN, sameAfter);
473
+ check(NaN, 7, differentAfter);
474
+ check(Infinity, Infinity, sameAfter);
475
+ check(-Infinity, Infinity, sameAfter);
476
+ check(NaN, 'NaN', differentAfter);
477
+ // json loses -0 on round trip
478
+ check(-0, -0, sameAfter);
479
+ });
480
+ it('compares handles', () => {
481
+ // This is used instead of MockHandle so equal handles compare deeply equal.
482
+ function makeMockHandle(data) {
483
+ // `/` prefix is needed to prevent serializing from modifying handle.
484
+ const handleObject = { absolutePath: `/${data}`, IFluidHandle: undefined };
485
+ handleObject.IFluidHandle = handleObject;
486
+ return handleObject;
487
+ }
488
+ // Theoretically handles serialize as objects with 2 fields and thus serialization is allowed to be non-deterministic
489
+ // so use allEqualUnstable not allEqual.
490
+ check(makeMockHandle('x'), makeMockHandle('x'), allEqualUnstable);
491
+ check(makeMockHandle('x'), makeMockHandle('y'), allUnequal);
492
+ check({ x: makeMockHandle('x') }, makeMockHandle('x'), allUnequal);
493
+ });
494
+ // These are cases that are allowed by the type system and produce unexpected results due to Json serialization.
495
+ // Clear documentation and/or adjustments to equality, type checking or serialization would help with these cases.
496
+ it.skip('strange cases', () => {
497
+ // Top level undefined fails in JSON.parse.
498
+ // Rationale: 'undefined' is reserved for future use (see 'SetValue' interface.)
499
+ check(undefined, null, sameAfter);
500
+ });
501
+ });
502
+ });
503
+ //# sourceMappingURL=EditUtilities.tests.js.map