@fluid-experimental/tree 0.58.2002 → 0.59.1000

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (817) hide show
  1. package/README.md +159 -46
  2. package/dist/ChangeCompression.d.ts +39 -0
  3. package/dist/ChangeCompression.d.ts.map +1 -0
  4. package/dist/ChangeCompression.js +117 -0
  5. package/dist/ChangeCompression.js.map +1 -0
  6. package/{lib/default-edits/PersistedTypes.d.ts → dist/ChangeTypes.d.ts} +58 -105
  7. package/dist/ChangeTypes.d.ts.map +1 -0
  8. package/dist/{default-edits/PersistedTypes.js → ChangeTypes.js} +21 -76
  9. package/dist/ChangeTypes.js.map +1 -0
  10. package/dist/Checkout.d.ts +39 -27
  11. package/dist/Checkout.d.ts.map +1 -1
  12. package/dist/Checkout.js +61 -32
  13. package/dist/Checkout.js.map +1 -1
  14. package/dist/Common.d.ts +175 -38
  15. package/dist/Common.d.ts.map +1 -1
  16. package/dist/Common.js +240 -103
  17. package/dist/Common.js.map +1 -1
  18. package/dist/EagerCheckout.d.ts +24 -0
  19. package/dist/EagerCheckout.d.ts.map +1 -0
  20. package/dist/{BasicCheckout.js → EagerCheckout.js} +9 -6
  21. package/dist/EagerCheckout.js.map +1 -0
  22. package/dist/EditLog.d.ts +77 -63
  23. package/dist/EditLog.d.ts.map +1 -1
  24. package/dist/EditLog.js +85 -48
  25. package/dist/EditLog.js.map +1 -1
  26. package/dist/EditUtilities.d.ts +168 -0
  27. package/dist/EditUtilities.d.ts.map +1 -0
  28. package/dist/EditUtilities.js +373 -0
  29. package/dist/EditUtilities.js.map +1 -0
  30. package/dist/EventTypes.d.ts +73 -0
  31. package/dist/EventTypes.d.ts.map +1 -0
  32. package/dist/EventTypes.js +78 -0
  33. package/dist/EventTypes.js.map +1 -0
  34. package/dist/Forest.d.ts +29 -7
  35. package/dist/Forest.d.ts.map +1 -1
  36. package/dist/Forest.js +60 -36
  37. package/dist/Forest.js.map +1 -1
  38. package/dist/HistoryEditFactory.d.ts +20 -0
  39. package/dist/HistoryEditFactory.d.ts.map +1 -0
  40. package/dist/HistoryEditFactory.js +226 -0
  41. package/dist/HistoryEditFactory.js.map +1 -0
  42. package/dist/IdConversion.d.ts +12 -0
  43. package/dist/IdConversion.d.ts.map +1 -0
  44. package/dist/IdConversion.js +98 -0
  45. package/dist/IdConversion.js.map +1 -0
  46. package/dist/Identifiers.d.ts +89 -2
  47. package/dist/Identifiers.d.ts.map +1 -1
  48. package/dist/Identifiers.js +10 -0
  49. package/dist/Identifiers.js.map +1 -1
  50. package/dist/InitialTree.d.ts +2 -2
  51. package/dist/InitialTree.d.ts.map +1 -1
  52. package/dist/InitialTree.js +2 -1
  53. package/dist/InitialTree.js.map +1 -1
  54. package/dist/LazyCheckout.d.ts +28 -0
  55. package/dist/LazyCheckout.d.ts.map +1 -0
  56. package/dist/LazyCheckout.js +44 -0
  57. package/dist/LazyCheckout.js.map +1 -0
  58. package/dist/LogViewer.d.ts +129 -85
  59. package/dist/LogViewer.d.ts.map +1 -1
  60. package/dist/LogViewer.js +111 -85
  61. package/dist/LogViewer.js.map +1 -1
  62. package/dist/MergeHealth.d.ts +221 -0
  63. package/dist/MergeHealth.d.ts.map +1 -0
  64. package/dist/MergeHealth.js +263 -0
  65. package/dist/MergeHealth.js.map +1 -0
  66. package/dist/NodeIdUtilities.d.ts +105 -0
  67. package/dist/NodeIdUtilities.d.ts.map +1 -0
  68. package/dist/NodeIdUtilities.js +60 -0
  69. package/dist/NodeIdUtilities.js.map +1 -0
  70. package/dist/PayloadUtilities.d.ts +42 -0
  71. package/dist/PayloadUtilities.d.ts.map +1 -0
  72. package/dist/PayloadUtilities.js +114 -0
  73. package/dist/PayloadUtilities.js.map +1 -0
  74. package/dist/ReconciliationPath.d.ts +18 -13
  75. package/dist/ReconciliationPath.d.ts.map +1 -1
  76. package/dist/ReconciliationPath.js.map +1 -1
  77. package/dist/RevisionValueCache.d.ts +11 -2
  78. package/dist/RevisionValueCache.d.ts.map +1 -1
  79. package/dist/RevisionValueCache.js +2 -3
  80. package/dist/RevisionValueCache.js.map +1 -1
  81. package/dist/RevisionView.d.ts +83 -0
  82. package/dist/RevisionView.d.ts.map +1 -0
  83. package/dist/RevisionView.js +182 -0
  84. package/dist/RevisionView.js.map +1 -0
  85. package/dist/SerializationUtilities.d.ts +36 -0
  86. package/dist/SerializationUtilities.d.ts.map +1 -0
  87. package/dist/SerializationUtilities.js +102 -0
  88. package/dist/SerializationUtilities.js.map +1 -0
  89. package/dist/SharedTree.d.ts +439 -0
  90. package/dist/SharedTree.d.ts.map +1 -0
  91. package/dist/SharedTree.js +1109 -0
  92. package/dist/SharedTree.js.map +1 -0
  93. package/dist/SharedTreeEncoder.d.ts +102 -0
  94. package/dist/SharedTreeEncoder.d.ts.map +1 -0
  95. package/dist/SharedTreeEncoder.js +313 -0
  96. package/dist/SharedTreeEncoder.js.map +1 -0
  97. package/dist/StringInterner.d.ts +46 -0
  98. package/dist/StringInterner.d.ts.map +1 -0
  99. package/dist/StringInterner.js +61 -0
  100. package/dist/StringInterner.js.map +1 -0
  101. package/dist/Summary.d.ts +40 -0
  102. package/dist/Summary.d.ts.map +1 -0
  103. package/dist/Summary.js +23 -0
  104. package/dist/Summary.js.map +1 -0
  105. package/dist/SummaryBackCompatibility.d.ts +22 -22
  106. package/dist/SummaryBackCompatibility.d.ts.map +1 -1
  107. package/dist/SummaryBackCompatibility.js +30 -33
  108. package/dist/SummaryBackCompatibility.js.map +1 -1
  109. package/dist/SummaryTestUtilities.d.ts +31 -0
  110. package/dist/SummaryTestUtilities.d.ts.map +1 -0
  111. package/dist/SummaryTestUtilities.js +37 -0
  112. package/dist/SummaryTestUtilities.js.map +1 -0
  113. package/dist/Transaction.d.ts +52 -0
  114. package/dist/Transaction.d.ts.map +1 -0
  115. package/dist/Transaction.js +72 -0
  116. package/dist/Transaction.js.map +1 -0
  117. package/dist/TransactionInternal.d.ts +540 -0
  118. package/dist/TransactionInternal.d.ts.map +1 -0
  119. package/dist/TransactionInternal.js +626 -0
  120. package/dist/TransactionInternal.js.map +1 -0
  121. package/dist/TreeCompressor.d.ts +36 -0
  122. package/dist/TreeCompressor.d.ts.map +1 -0
  123. package/dist/TreeCompressor.js +137 -0
  124. package/dist/TreeCompressor.js.map +1 -0
  125. package/dist/TreeNodeHandle.d.ts +12 -18
  126. package/dist/TreeNodeHandle.d.ts.map +1 -1
  127. package/dist/TreeNodeHandle.js +13 -23
  128. package/dist/TreeNodeHandle.js.map +1 -1
  129. package/dist/TreeView.d.ts +166 -0
  130. package/dist/TreeView.d.ts.map +1 -0
  131. package/dist/TreeView.js +218 -0
  132. package/dist/TreeView.js.map +1 -0
  133. package/dist/TreeViewUtilities.d.ts +21 -0
  134. package/dist/TreeViewUtilities.d.ts.map +1 -0
  135. package/dist/TreeViewUtilities.js +77 -0
  136. package/dist/TreeViewUtilities.js.map +1 -0
  137. package/dist/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  138. package/dist/UndoRedoHandler.d.ts.map +1 -0
  139. package/dist/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +5 -9
  140. package/dist/UndoRedoHandler.js.map +1 -0
  141. package/dist/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  142. package/dist/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  143. package/dist/id-compressor/AppendOnlySortedMap.js +283 -0
  144. package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -0
  145. package/dist/id-compressor/IdCompressor.d.ts +389 -0
  146. package/dist/id-compressor/IdCompressor.d.ts.map +1 -0
  147. package/dist/id-compressor/IdCompressor.js +1353 -0
  148. package/dist/id-compressor/IdCompressor.js.map +1 -0
  149. package/dist/id-compressor/IdRange.d.ts +11 -0
  150. package/dist/id-compressor/IdRange.d.ts.map +1 -0
  151. package/dist/id-compressor/IdRange.js +29 -0
  152. package/dist/id-compressor/IdRange.js.map +1 -0
  153. package/dist/id-compressor/NumericUuid.d.ts +63 -0
  154. package/dist/id-compressor/NumericUuid.d.ts.map +1 -0
  155. package/dist/id-compressor/NumericUuid.js +377 -0
  156. package/dist/id-compressor/NumericUuid.js.map +1 -0
  157. package/dist/id-compressor/index.d.ts +12 -0
  158. package/dist/id-compressor/index.d.ts.map +1 -0
  159. package/dist/id-compressor/index.js +26 -0
  160. package/dist/id-compressor/index.js.map +1 -0
  161. package/dist/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  162. package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  163. package/dist/id-compressor/persisted-types/0.0.1.js +7 -0
  164. package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -0
  165. package/dist/id-compressor/persisted-types/index.d.ts +6 -0
  166. package/dist/id-compressor/persisted-types/index.d.ts.map +1 -0
  167. package/dist/id-compressor/persisted-types/index.js +18 -0
  168. package/dist/id-compressor/persisted-types/index.js.map +1 -0
  169. package/dist/index.d.ts +29 -9
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +50 -35
  172. package/dist/index.js.map +1 -1
  173. package/dist/persisted-types/0.0.2.d.ts +385 -0
  174. package/dist/persisted-types/0.0.2.d.ts.map +1 -0
  175. package/dist/persisted-types/0.0.2.js +113 -0
  176. package/dist/persisted-types/0.0.2.js.map +1 -0
  177. package/dist/persisted-types/0.1.1.d.ts +314 -0
  178. package/dist/persisted-types/0.1.1.d.ts.map +1 -0
  179. package/dist/persisted-types/0.1.1.js +153 -0
  180. package/dist/persisted-types/0.1.1.js.map +1 -0
  181. package/dist/persisted-types/index.d.ts +7 -0
  182. package/dist/persisted-types/index.d.ts.map +1 -0
  183. package/dist/persisted-types/index.js +20 -0
  184. package/dist/persisted-types/index.js.map +1 -0
  185. package/docs/0-1-1-Compression.md +228 -0
  186. package/docs/Breaking-Change-Migration.md +52 -0
  187. package/docs/Compression.md +2 -2
  188. package/docs/Telemetry.md +43 -0
  189. package/docs/Write-Format.md +19 -0
  190. package/lib/ChangeCompression.d.ts +39 -0
  191. package/lib/ChangeCompression.d.ts.map +1 -0
  192. package/lib/ChangeCompression.js +111 -0
  193. package/lib/ChangeCompression.js.map +1 -0
  194. package/{dist/default-edits/PersistedTypes.d.ts → lib/ChangeTypes.d.ts} +58 -105
  195. package/lib/ChangeTypes.d.ts.map +1 -0
  196. package/lib/{default-edits/PersistedTypes.js → ChangeTypes.js} +15 -68
  197. package/lib/ChangeTypes.js.map +1 -0
  198. package/lib/Checkout.d.ts +39 -27
  199. package/lib/Checkout.d.ts.map +1 -1
  200. package/lib/Checkout.js +53 -24
  201. package/lib/Checkout.js.map +1 -1
  202. package/lib/Common.d.ts +175 -38
  203. package/lib/Common.d.ts.map +1 -1
  204. package/lib/Common.js +226 -101
  205. package/lib/Common.js.map +1 -1
  206. package/lib/EagerCheckout.d.ts +24 -0
  207. package/lib/EagerCheckout.d.ts.map +1 -0
  208. package/lib/{BasicCheckout.js → EagerCheckout.js} +7 -4
  209. package/lib/EagerCheckout.js.map +1 -0
  210. package/lib/EditLog.d.ts +77 -63
  211. package/lib/EditLog.d.ts.map +1 -1
  212. package/lib/EditLog.js +83 -47
  213. package/lib/EditLog.js.map +1 -1
  214. package/lib/EditUtilities.d.ts +168 -0
  215. package/lib/EditUtilities.d.ts.map +1 -0
  216. package/lib/EditUtilities.js +353 -0
  217. package/lib/EditUtilities.js.map +1 -0
  218. package/lib/EventTypes.d.ts +73 -0
  219. package/lib/EventTypes.d.ts.map +1 -0
  220. package/lib/EventTypes.js +75 -0
  221. package/lib/EventTypes.js.map +1 -0
  222. package/lib/Forest.d.ts +29 -7
  223. package/lib/Forest.d.ts.map +1 -1
  224. package/lib/Forest.js +58 -35
  225. package/lib/Forest.js.map +1 -1
  226. package/lib/HistoryEditFactory.d.ts +20 -0
  227. package/lib/HistoryEditFactory.d.ts.map +1 -0
  228. package/lib/{default-edits/HistoryEditFactory.js → HistoryEditFactory.js} +78 -39
  229. package/lib/HistoryEditFactory.js.map +1 -0
  230. package/lib/IdConversion.d.ts +12 -0
  231. package/lib/IdConversion.d.ts.map +1 -0
  232. package/lib/IdConversion.js +91 -0
  233. package/lib/IdConversion.js.map +1 -0
  234. package/lib/Identifiers.d.ts +89 -2
  235. package/lib/Identifiers.d.ts.map +1 -1
  236. package/lib/Identifiers.js +8 -1
  237. package/lib/Identifiers.js.map +1 -1
  238. package/lib/InitialTree.d.ts +2 -2
  239. package/lib/InitialTree.d.ts.map +1 -1
  240. package/lib/InitialTree.js +2 -1
  241. package/lib/InitialTree.js.map +1 -1
  242. package/lib/LazyCheckout.d.ts +28 -0
  243. package/lib/LazyCheckout.d.ts.map +1 -0
  244. package/lib/LazyCheckout.js +40 -0
  245. package/lib/LazyCheckout.js.map +1 -0
  246. package/lib/LogViewer.d.ts +129 -85
  247. package/lib/LogViewer.d.ts.map +1 -1
  248. package/lib/LogViewer.js +103 -77
  249. package/lib/LogViewer.js.map +1 -1
  250. package/lib/MergeHealth.d.ts +221 -0
  251. package/lib/MergeHealth.d.ts.map +1 -0
  252. package/lib/MergeHealth.js +258 -0
  253. package/lib/MergeHealth.js.map +1 -0
  254. package/lib/NodeIdUtilities.d.ts +105 -0
  255. package/lib/NodeIdUtilities.d.ts.map +1 -0
  256. package/lib/NodeIdUtilities.js +53 -0
  257. package/lib/NodeIdUtilities.js.map +1 -0
  258. package/lib/PayloadUtilities.d.ts +42 -0
  259. package/lib/PayloadUtilities.d.ts.map +1 -0
  260. package/lib/PayloadUtilities.js +110 -0
  261. package/lib/PayloadUtilities.js.map +1 -0
  262. package/lib/ReconciliationPath.d.ts +18 -13
  263. package/lib/ReconciliationPath.d.ts.map +1 -1
  264. package/lib/ReconciliationPath.js.map +1 -1
  265. package/lib/RevisionValueCache.d.ts +11 -2
  266. package/lib/RevisionValueCache.d.ts.map +1 -1
  267. package/lib/RevisionValueCache.js +2 -3
  268. package/lib/RevisionValueCache.js.map +1 -1
  269. package/lib/RevisionView.d.ts +83 -0
  270. package/lib/RevisionView.d.ts.map +1 -0
  271. package/lib/RevisionView.js +175 -0
  272. package/lib/RevisionView.js.map +1 -0
  273. package/lib/SerializationUtilities.d.ts +36 -0
  274. package/lib/SerializationUtilities.d.ts.map +1 -0
  275. package/lib/SerializationUtilities.js +95 -0
  276. package/lib/SerializationUtilities.js.map +1 -0
  277. package/lib/SharedTree.d.ts +439 -0
  278. package/lib/SharedTree.d.ts.map +1 -0
  279. package/lib/SharedTree.js +1104 -0
  280. package/lib/SharedTree.js.map +1 -0
  281. package/lib/SharedTreeEncoder.d.ts +102 -0
  282. package/lib/SharedTreeEncoder.d.ts.map +1 -0
  283. package/lib/SharedTreeEncoder.js +308 -0
  284. package/lib/SharedTreeEncoder.js.map +1 -0
  285. package/lib/StringInterner.d.ts +46 -0
  286. package/lib/StringInterner.d.ts.map +1 -0
  287. package/lib/StringInterner.js +57 -0
  288. package/lib/StringInterner.js.map +1 -0
  289. package/lib/Summary.d.ts +40 -0
  290. package/lib/Summary.d.ts.map +1 -0
  291. package/lib/Summary.js +19 -0
  292. package/lib/Summary.js.map +1 -0
  293. package/lib/SummaryBackCompatibility.d.ts +22 -22
  294. package/lib/SummaryBackCompatibility.d.ts.map +1 -1
  295. package/lib/SummaryBackCompatibility.js +29 -32
  296. package/lib/SummaryBackCompatibility.js.map +1 -1
  297. package/lib/SummaryTestUtilities.d.ts +31 -0
  298. package/lib/SummaryTestUtilities.d.ts.map +1 -0
  299. package/lib/SummaryTestUtilities.js +32 -0
  300. package/lib/SummaryTestUtilities.js.map +1 -0
  301. package/lib/Transaction.d.ts +52 -0
  302. package/lib/Transaction.d.ts.map +1 -0
  303. package/lib/Transaction.js +68 -0
  304. package/lib/Transaction.js.map +1 -0
  305. package/lib/TransactionInternal.d.ts +540 -0
  306. package/lib/TransactionInternal.d.ts.map +1 -0
  307. package/lib/TransactionInternal.js +622 -0
  308. package/lib/TransactionInternal.js.map +1 -0
  309. package/lib/TreeCompressor.d.ts +36 -0
  310. package/lib/TreeCompressor.d.ts.map +1 -0
  311. package/lib/TreeCompressor.js +133 -0
  312. package/lib/TreeCompressor.js.map +1 -0
  313. package/lib/TreeNodeHandle.d.ts +12 -18
  314. package/lib/TreeNodeHandle.d.ts.map +1 -1
  315. package/lib/TreeNodeHandle.js +14 -24
  316. package/lib/TreeNodeHandle.js.map +1 -1
  317. package/lib/TreeView.d.ts +166 -0
  318. package/lib/TreeView.d.ts.map +1 -0
  319. package/lib/TreeView.js +214 -0
  320. package/lib/TreeView.js.map +1 -0
  321. package/lib/TreeViewUtilities.d.ts +21 -0
  322. package/lib/TreeViewUtilities.d.ts.map +1 -0
  323. package/lib/TreeViewUtilities.js +71 -0
  324. package/lib/TreeViewUtilities.js.map +1 -0
  325. package/lib/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  326. package/lib/UndoRedoHandler.d.ts.map +1 -0
  327. package/lib/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +3 -7
  328. package/lib/UndoRedoHandler.js.map +1 -0
  329. package/lib/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  330. package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  331. package/lib/id-compressor/AppendOnlySortedMap.js +278 -0
  332. package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -0
  333. package/lib/id-compressor/IdCompressor.d.ts +389 -0
  334. package/lib/id-compressor/IdCompressor.d.ts.map +1 -0
  335. package/lib/id-compressor/IdCompressor.js +1343 -0
  336. package/lib/id-compressor/IdCompressor.js.map +1 -0
  337. package/lib/id-compressor/IdRange.d.ts +11 -0
  338. package/lib/id-compressor/IdRange.d.ts.map +1 -0
  339. package/lib/id-compressor/IdRange.js +25 -0
  340. package/lib/id-compressor/IdRange.js.map +1 -0
  341. package/lib/id-compressor/NumericUuid.d.ts +63 -0
  342. package/lib/id-compressor/NumericUuid.d.ts.map +1 -0
  343. package/lib/id-compressor/NumericUuid.js +365 -0
  344. package/lib/id-compressor/NumericUuid.js.map +1 -0
  345. package/lib/id-compressor/index.d.ts +12 -0
  346. package/lib/id-compressor/index.d.ts.map +1 -0
  347. package/lib/id-compressor/index.js +12 -0
  348. package/lib/id-compressor/index.js.map +1 -0
  349. package/lib/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  350. package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  351. package/lib/{test/Snapshot.tests.d.ts → id-compressor/persisted-types/0.0.1.js} +1 -1
  352. package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -0
  353. package/lib/id-compressor/persisted-types/index.d.ts +6 -0
  354. package/lib/id-compressor/persisted-types/index.d.ts.map +1 -0
  355. package/lib/id-compressor/persisted-types/index.js +6 -0
  356. package/lib/id-compressor/persisted-types/index.js.map +1 -0
  357. package/lib/index.d.ts +29 -9
  358. package/lib/index.d.ts.map +1 -1
  359. package/lib/index.js +23 -6
  360. package/lib/index.js.map +1 -1
  361. package/lib/persisted-types/0.0.2.d.ts +385 -0
  362. package/lib/persisted-types/0.0.2.d.ts.map +1 -0
  363. package/lib/persisted-types/0.0.2.js +110 -0
  364. package/lib/persisted-types/0.0.2.js.map +1 -0
  365. package/lib/persisted-types/0.1.1.d.ts +314 -0
  366. package/lib/persisted-types/0.1.1.d.ts.map +1 -0
  367. package/lib/persisted-types/0.1.1.js +150 -0
  368. package/lib/persisted-types/0.1.1.js.map +1 -0
  369. package/lib/persisted-types/index.d.ts +7 -0
  370. package/lib/persisted-types/index.d.ts.map +1 -0
  371. package/lib/persisted-types/index.js +8 -0
  372. package/lib/persisted-types/index.js.map +1 -0
  373. package/lib/test/AppendOnlySortedMap.tests.d.ts +6 -0
  374. package/lib/test/AppendOnlySortedMap.tests.d.ts.map +1 -0
  375. package/lib/test/AppendOnlySortedMap.tests.js +169 -0
  376. package/lib/test/AppendOnlySortedMap.tests.js.map +1 -0
  377. package/lib/test/{SnapshotUtilities.tests.d.ts → ChangeCompression.tests.d.ts} +1 -1
  378. package/lib/test/ChangeCompression.tests.d.ts.map +1 -0
  379. package/lib/test/ChangeCompression.tests.js +145 -0
  380. package/lib/test/ChangeCompression.tests.js.map +1 -0
  381. package/lib/test/Checkout.tests.d.ts +2 -3
  382. package/lib/test/Checkout.tests.d.ts.map +1 -1
  383. package/lib/test/Checkout.tests.js +126 -69
  384. package/lib/test/Checkout.tests.js.map +1 -1
  385. package/lib/test/Common.tests.js +60 -2
  386. package/lib/test/Common.tests.js.map +1 -1
  387. package/lib/test/{BasicCheckout.tests.d.ts → EagerCheckout.tests.d.ts} +1 -1
  388. package/lib/test/EagerCheckout.tests.d.ts.map +1 -0
  389. package/lib/test/EagerCheckout.tests.js +20 -0
  390. package/lib/test/EagerCheckout.tests.js.map +1 -0
  391. package/lib/test/Edit.tests.js +22 -14
  392. package/lib/test/Edit.tests.js.map +1 -1
  393. package/lib/test/{Anchors.glassBox.tests.d.ts → EditLog.perf.tests.d.ts} +1 -1
  394. package/lib/test/EditLog.perf.tests.d.ts.map +1 -0
  395. package/lib/test/EditLog.perf.tests.js +30 -0
  396. package/lib/test/EditLog.perf.tests.js.map +1 -0
  397. package/lib/test/EditLog.tests.js +10 -6
  398. package/lib/test/EditLog.tests.js.map +1 -1
  399. package/lib/test/EditUtilities.tests.d.ts +6 -0
  400. package/lib/test/EditUtilities.tests.d.ts.map +1 -0
  401. package/lib/test/EditUtilities.tests.js +503 -0
  402. package/lib/test/EditUtilities.tests.js.map +1 -0
  403. package/lib/test/Forest.perf.tests.d.ts +6 -0
  404. package/lib/test/Forest.perf.tests.d.ts.map +1 -0
  405. package/lib/test/Forest.perf.tests.js +133 -0
  406. package/lib/test/Forest.perf.tests.js.map +1 -0
  407. package/lib/test/Forest.tests.js +54 -27
  408. package/lib/test/Forest.tests.js.map +1 -1
  409. package/lib/test/GenericTransaction.tests.js +12 -3
  410. package/lib/test/GenericTransaction.tests.js.map +1 -1
  411. package/lib/test/HistoryEditFactory.tests.d.ts +6 -0
  412. package/lib/test/HistoryEditFactory.tests.d.ts.map +1 -0
  413. package/lib/test/HistoryEditFactory.tests.js +90 -0
  414. package/lib/test/HistoryEditFactory.tests.js.map +1 -0
  415. package/lib/test/IdCompressor.perf.tests.d.ts +6 -0
  416. package/lib/test/IdCompressor.perf.tests.d.ts.map +1 -0
  417. package/lib/test/IdCompressor.perf.tests.js +304 -0
  418. package/lib/test/IdCompressor.perf.tests.js.map +1 -0
  419. package/lib/test/IdCompressor.tests.d.ts +6 -0
  420. package/lib/test/IdCompressor.tests.d.ts.map +1 -0
  421. package/lib/test/IdCompressor.tests.js +1075 -0
  422. package/lib/test/IdCompressor.tests.js.map +1 -0
  423. package/lib/test/IdConversion.tests.d.ts +6 -0
  424. package/lib/test/IdConversion.tests.d.ts.map +1 -0
  425. package/lib/test/IdConversion.tests.js +36 -0
  426. package/lib/test/IdConversion.tests.js.map +1 -0
  427. package/lib/test/LazyCheckout.tests.d.ts +6 -0
  428. package/lib/test/LazyCheckout.tests.d.ts.map +1 -0
  429. package/lib/test/LazyCheckout.tests.js +22 -0
  430. package/lib/test/LazyCheckout.tests.js.map +1 -0
  431. package/lib/test/LogViewer.tests.js +276 -191
  432. package/lib/test/LogViewer.tests.js.map +1 -1
  433. package/lib/test/{SharedTreeWithAnchors.tests.d.ts → MergeHealthTelemetryHeartbeat.tests.d.ts} +1 -1
  434. package/lib/test/MergeHealthTelemetryHeartbeat.tests.d.ts.map +1 -0
  435. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +342 -0
  436. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -0
  437. package/lib/test/NumericUuid.perf.tests.d.ts +6 -0
  438. package/lib/test/NumericUuid.perf.tests.d.ts.map +1 -0
  439. package/lib/test/NumericUuid.perf.tests.js +68 -0
  440. package/lib/test/NumericUuid.perf.tests.js.map +1 -0
  441. package/lib/test/NumericUuid.tests.d.ts +6 -0
  442. package/lib/test/NumericUuid.tests.d.ts.map +1 -0
  443. package/lib/test/NumericUuid.tests.js +191 -0
  444. package/lib/test/NumericUuid.tests.js.map +1 -0
  445. package/lib/test/RevisionView.tests.d.ts +6 -0
  446. package/lib/test/RevisionView.tests.d.ts.map +1 -0
  447. package/lib/test/RevisionView.tests.js +133 -0
  448. package/lib/test/RevisionView.tests.js.map +1 -0
  449. package/lib/test/SharedTree.perf.tests.d.ts +6 -0
  450. package/lib/test/SharedTree.perf.tests.d.ts.map +1 -0
  451. package/lib/test/SharedTree.perf.tests.js +39 -0
  452. package/lib/test/SharedTree.perf.tests.js.map +1 -0
  453. package/lib/test/SharedTree.tests.js +15 -3
  454. package/lib/test/SharedTree.tests.js.map +1 -1
  455. package/lib/test/StringInterner.tests.d.ts +6 -0
  456. package/lib/test/StringInterner.tests.d.ts.map +1 -0
  457. package/lib/test/StringInterner.tests.js +71 -0
  458. package/lib/test/StringInterner.tests.js.map +1 -0
  459. package/lib/test/Summary.tests.d.ts +8 -0
  460. package/lib/test/Summary.tests.d.ts.map +1 -0
  461. package/lib/test/Summary.tests.js +407 -0
  462. package/lib/test/Summary.tests.js.map +1 -0
  463. package/lib/test/Transaction.tests.js +76 -330
  464. package/lib/test/Transaction.tests.js.map +1 -1
  465. package/lib/test/TransactionInternal.tests.d.ts +6 -0
  466. package/lib/test/TransactionInternal.tests.d.ts.map +1 -0
  467. package/lib/test/TransactionInternal.tests.js +568 -0
  468. package/lib/test/TransactionInternal.tests.js.map +1 -0
  469. package/lib/test/TreeCompression.tests.d.ts +6 -0
  470. package/lib/test/TreeCompression.tests.d.ts.map +1 -0
  471. package/lib/test/TreeCompression.tests.js +292 -0
  472. package/lib/test/TreeCompression.tests.js.map +1 -0
  473. package/lib/test/TreeView.tests.d.ts +6 -0
  474. package/lib/test/TreeView.tests.d.ts.map +1 -0
  475. package/lib/test/TreeView.tests.js +176 -0
  476. package/lib/test/TreeView.tests.js.map +1 -0
  477. package/lib/test/UndoRedoHandler.tests.js +2 -2
  478. package/lib/test/UndoRedoHandler.tests.js.map +1 -1
  479. package/lib/test/Virtualization.tests.js +146 -62
  480. package/lib/test/Virtualization.tests.js.map +1 -1
  481. package/lib/test/fuzz/Generators.d.ts +19 -0
  482. package/lib/test/fuzz/Generators.d.ts.map +1 -0
  483. package/lib/test/fuzz/Generators.js +420 -0
  484. package/lib/test/fuzz/Generators.js.map +1 -0
  485. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +20 -0
  486. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -0
  487. package/lib/test/fuzz/SharedTreeFuzzTests.js +217 -0
  488. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -0
  489. package/lib/test/fuzz/Types.d.ts +133 -0
  490. package/lib/test/fuzz/Types.d.ts.map +1 -0
  491. package/lib/test/{GenericTransactionWithAnchors.tests.d.ts → fuzz/Types.js} +2 -2
  492. package/lib/test/fuzz/Types.js.map +1 -0
  493. package/lib/test/utilities/IdCompressorTestUtilities.d.ts +180 -0
  494. package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -0
  495. package/lib/test/utilities/IdCompressorTestUtilities.js +528 -0
  496. package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -0
  497. package/lib/test/utilities/MockTransaction.d.ts +26 -7
  498. package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
  499. package/lib/test/utilities/MockTransaction.js +40 -11
  500. package/lib/test/utilities/MockTransaction.js.map +1 -1
  501. package/lib/test/utilities/PendingLocalStateTests.d.ts +12 -0
  502. package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -0
  503. package/lib/test/utilities/PendingLocalStateTests.js +105 -0
  504. package/lib/test/utilities/PendingLocalStateTests.js.map +1 -0
  505. package/lib/test/utilities/SharedTreeTests.d.ts +3 -4
  506. package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
  507. package/lib/test/utilities/SharedTreeTests.js +696 -439
  508. package/lib/test/utilities/SharedTreeTests.js.map +1 -1
  509. package/lib/test/utilities/SharedTreeVersioningTests.d.ts +11 -0
  510. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -0
  511. package/lib/test/utilities/SharedTreeVersioningTests.js +370 -0
  512. package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -0
  513. package/lib/test/utilities/SummaryLoadPerfTests.d.ts +10 -0
  514. package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -0
  515. package/lib/test/utilities/SummaryLoadPerfTests.js +102 -0
  516. package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -0
  517. package/lib/test/utilities/SummarySizeTests.d.ts +11 -0
  518. package/lib/test/utilities/SummarySizeTests.d.ts.map +1 -0
  519. package/lib/test/utilities/SummarySizeTests.js +158 -0
  520. package/lib/test/utilities/SummarySizeTests.js.map +1 -0
  521. package/lib/test/utilities/TestCommon.d.ts +9 -0
  522. package/lib/test/utilities/TestCommon.d.ts.map +1 -0
  523. package/lib/test/utilities/TestCommon.js +13 -0
  524. package/lib/test/utilities/TestCommon.js.map +1 -0
  525. package/lib/test/utilities/TestNode.d.ts +140 -0
  526. package/lib/test/utilities/TestNode.d.ts.map +1 -0
  527. package/lib/test/utilities/TestNode.js +292 -0
  528. package/lib/test/utilities/TestNode.js.map +1 -0
  529. package/lib/test/utilities/TestUtilities.d.ts +84 -70
  530. package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
  531. package/lib/test/utilities/TestUtilities.js +218 -143
  532. package/lib/test/utilities/TestUtilities.js.map +1 -1
  533. package/lib/test/utilities/UndoRedoTests.d.ts +4 -5
  534. package/lib/test/utilities/UndoRedoTests.d.ts.map +1 -1
  535. package/lib/test/utilities/UndoRedoTests.js +138 -149
  536. package/lib/test/utilities/UndoRedoTests.js.map +1 -1
  537. package/package.json +22 -17
  538. package/src/ChangeCompression.ts +159 -0
  539. package/src/{default-edits/PersistedTypes.ts → ChangeTypes.ts} +62 -125
  540. package/src/Checkout.ts +82 -53
  541. package/src/Common.ts +317 -117
  542. package/src/EagerCheckout.ts +38 -0
  543. package/src/EditLog.ts +153 -100
  544. package/src/EditUtilities.ts +559 -0
  545. package/src/EventTypes.ts +74 -0
  546. package/src/Forest.ts +81 -73
  547. package/src/{default-edits/HistoryEditFactory.ts → HistoryEditFactory.ts} +103 -53
  548. package/src/IdConversion.ts +125 -0
  549. package/src/Identifiers.ts +101 -1
  550. package/src/InitialTree.ts +5 -4
  551. package/src/LazyCheckout.ts +51 -0
  552. package/src/LogViewer.ts +242 -166
  553. package/src/MergeHealth.ts +447 -0
  554. package/src/NodeIdUtilities.ts +156 -0
  555. package/src/PayloadUtilities.ts +124 -0
  556. package/src/ReconciliationPath.ts +18 -13
  557. package/src/RevisionValueCache.ts +14 -5
  558. package/src/RevisionView.ts +252 -0
  559. package/src/SerializationUtilities.ts +130 -0
  560. package/src/SharedTree.ts +1501 -0
  561. package/src/SharedTreeEncoder.ts +493 -0
  562. package/src/StringInterner.ts +72 -0
  563. package/src/Summary.ts +48 -0
  564. package/src/SummaryBackCompatibility.ts +47 -57
  565. package/src/SummaryTestUtilities.ts +54 -0
  566. package/src/Transaction.ts +89 -0
  567. package/src/TransactionInternal.ts +1087 -0
  568. package/src/TreeCompressor.ts +213 -0
  569. package/src/TreeNodeHandle.ts +19 -32
  570. package/src/TreeView.ts +322 -0
  571. package/src/TreeViewUtilities.ts +77 -0
  572. package/src/{default-edits/UndoRedoHandler.ts → UndoRedoHandler.ts} +8 -13
  573. package/src/id-compressor/AppendOnlySortedMap.ts +325 -0
  574. package/src/id-compressor/IdCompressor.md +3 -0
  575. package/src/id-compressor/IdCompressor.ts +1848 -0
  576. package/src/id-compressor/IdRange.ts +33 -0
  577. package/src/id-compressor/NumericUuid.ts +414 -0
  578. package/src/id-compressor/index.ts +13 -0
  579. package/src/id-compressor/persisted-types/0.0.1.ts +179 -0
  580. package/src/id-compressor/persisted-types/README.md +3 -0
  581. package/src/id-compressor/persisted-types/index.ts +6 -0
  582. package/src/index.ts +118 -59
  583. package/src/persisted-types/0.0.2.ts +442 -0
  584. package/src/persisted-types/0.1.1.ts +476 -0
  585. package/src/persisted-types/README.md +22 -0
  586. package/src/persisted-types/index.ts +9 -0
  587. package/.mocharc.js +0 -41
  588. package/api/tree.api.md +0 -729
  589. package/dist/BasicCheckout.d.ts +0 -23
  590. package/dist/BasicCheckout.d.ts.map +0 -1
  591. package/dist/BasicCheckout.js.map +0 -1
  592. package/dist/Snapshot.d.ts +0 -198
  593. package/dist/Snapshot.d.ts.map +0 -1
  594. package/dist/Snapshot.js +0 -267
  595. package/dist/Snapshot.js.map +0 -1
  596. package/dist/SnapshotUtilities.d.ts +0 -29
  597. package/dist/SnapshotUtilities.d.ts.map +0 -1
  598. package/dist/SnapshotUtilities.js +0 -73
  599. package/dist/SnapshotUtilities.js.map +0 -1
  600. package/dist/anchored-edits/AnchorResolution.d.ts +0 -144
  601. package/dist/anchored-edits/AnchorResolution.d.ts.map +0 -1
  602. package/dist/anchored-edits/AnchorResolution.js +0 -162
  603. package/dist/anchored-edits/AnchorResolution.js.map +0 -1
  604. package/dist/anchored-edits/Factory.d.ts +0 -56
  605. package/dist/anchored-edits/Factory.d.ts.map +0 -1
  606. package/dist/anchored-edits/Factory.js +0 -79
  607. package/dist/anchored-edits/Factory.js.map +0 -1
  608. package/dist/anchored-edits/PersistedTypes.d.ts +0 -245
  609. package/dist/anchored-edits/PersistedTypes.d.ts.map +0 -1
  610. package/dist/anchored-edits/PersistedTypes.js +0 -131
  611. package/dist/anchored-edits/PersistedTypes.js.map +0 -1
  612. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  613. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  614. package/dist/anchored-edits/SharedTreeWithAnchors.js +0 -115
  615. package/dist/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  616. package/dist/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  617. package/dist/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  618. package/dist/anchored-edits/TransactionWithAnchors.js +0 -36
  619. package/dist/anchored-edits/TransactionWithAnchors.js.map +0 -1
  620. package/dist/anchored-edits/index.d.ts +0 -10
  621. package/dist/anchored-edits/index.d.ts.map +0 -1
  622. package/dist/anchored-edits/index.js +0 -34
  623. package/dist/anchored-edits/index.js.map +0 -1
  624. package/dist/default-edits/EditUtilities.d.ts +0 -57
  625. package/dist/default-edits/EditUtilities.d.ts.map +0 -1
  626. package/dist/default-edits/EditUtilities.js +0 -192
  627. package/dist/default-edits/EditUtilities.js.map +0 -1
  628. package/dist/default-edits/Factory.d.ts +0 -56
  629. package/dist/default-edits/Factory.d.ts.map +0 -1
  630. package/dist/default-edits/Factory.js +0 -79
  631. package/dist/default-edits/Factory.js.map +0 -1
  632. package/dist/default-edits/HistoryEditFactory.d.ts +0 -19
  633. package/dist/default-edits/HistoryEditFactory.d.ts.map +0 -1
  634. package/dist/default-edits/HistoryEditFactory.js +0 -187
  635. package/dist/default-edits/HistoryEditFactory.js.map +0 -1
  636. package/dist/default-edits/PersistedTypes.d.ts.map +0 -1
  637. package/dist/default-edits/PersistedTypes.js.map +0 -1
  638. package/dist/default-edits/SharedTree.d.ts +0 -111
  639. package/dist/default-edits/SharedTree.d.ts.map +0 -1
  640. package/dist/default-edits/SharedTree.js +0 -124
  641. package/dist/default-edits/SharedTree.js.map +0 -1
  642. package/dist/default-edits/Summary.d.ts +0 -15
  643. package/dist/default-edits/Summary.d.ts.map +0 -1
  644. package/dist/default-edits/Summary.js +0 -35
  645. package/dist/default-edits/Summary.js.map +0 -1
  646. package/dist/default-edits/Transaction.d.ts +0 -41
  647. package/dist/default-edits/Transaction.d.ts.map +0 -1
  648. package/dist/default-edits/Transaction.js +0 -225
  649. package/dist/default-edits/Transaction.js.map +0 -1
  650. package/dist/default-edits/UndoRedoHandler.d.ts.map +0 -1
  651. package/dist/default-edits/UndoRedoHandler.js.map +0 -1
  652. package/dist/default-edits/index.d.ts +0 -13
  653. package/dist/default-edits/index.d.ts.map +0 -1
  654. package/dist/default-edits/index.js +0 -41
  655. package/dist/default-edits/index.js.map +0 -1
  656. package/dist/generic/GenericEditUtilities.d.ts +0 -26
  657. package/dist/generic/GenericEditUtilities.d.ts.map +0 -1
  658. package/dist/generic/GenericEditUtilities.js +0 -45
  659. package/dist/generic/GenericEditUtilities.js.map +0 -1
  660. package/dist/generic/GenericSharedTree.d.ts +0 -221
  661. package/dist/generic/GenericSharedTree.d.ts.map +0 -1
  662. package/dist/generic/GenericSharedTree.js +0 -447
  663. package/dist/generic/GenericSharedTree.js.map +0 -1
  664. package/dist/generic/GenericTransaction.d.ts +0 -87
  665. package/dist/generic/GenericTransaction.d.ts.map +0 -1
  666. package/dist/generic/GenericTransaction.js +0 -144
  667. package/dist/generic/GenericTransaction.js.map +0 -1
  668. package/dist/generic/PersistedTypes.d.ts +0 -194
  669. package/dist/generic/PersistedTypes.d.ts.map +0 -1
  670. package/dist/generic/PersistedTypes.js +0 -42
  671. package/dist/generic/PersistedTypes.js.map +0 -1
  672. package/dist/generic/Summary.d.ts +0 -63
  673. package/dist/generic/Summary.d.ts.map +0 -1
  674. package/dist/generic/Summary.js +0 -64
  675. package/dist/generic/Summary.js.map +0 -1
  676. package/dist/generic/index.d.ts +0 -10
  677. package/dist/generic/index.d.ts.map +0 -1
  678. package/dist/generic/index.js +0 -26
  679. package/dist/generic/index.js.map +0 -1
  680. package/docs/Future.md +0 -155
  681. package/lib/BasicCheckout.d.ts +0 -23
  682. package/lib/BasicCheckout.d.ts.map +0 -1
  683. package/lib/BasicCheckout.js.map +0 -1
  684. package/lib/Snapshot.d.ts +0 -198
  685. package/lib/Snapshot.d.ts.map +0 -1
  686. package/lib/Snapshot.js +0 -263
  687. package/lib/Snapshot.js.map +0 -1
  688. package/lib/SnapshotUtilities.d.ts +0 -29
  689. package/lib/SnapshotUtilities.d.ts.map +0 -1
  690. package/lib/SnapshotUtilities.js +0 -67
  691. package/lib/SnapshotUtilities.js.map +0 -1
  692. package/lib/anchored-edits/AnchorResolution.d.ts +0 -144
  693. package/lib/anchored-edits/AnchorResolution.d.ts.map +0 -1
  694. package/lib/anchored-edits/AnchorResolution.js +0 -152
  695. package/lib/anchored-edits/AnchorResolution.js.map +0 -1
  696. package/lib/anchored-edits/Factory.d.ts +0 -56
  697. package/lib/anchored-edits/Factory.d.ts.map +0 -1
  698. package/lib/anchored-edits/Factory.js +0 -74
  699. package/lib/anchored-edits/Factory.js.map +0 -1
  700. package/lib/anchored-edits/PersistedTypes.d.ts +0 -245
  701. package/lib/anchored-edits/PersistedTypes.d.ts.map +0 -1
  702. package/lib/anchored-edits/PersistedTypes.js +0 -128
  703. package/lib/anchored-edits/PersistedTypes.js.map +0 -1
  704. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  705. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  706. package/lib/anchored-edits/SharedTreeWithAnchors.js +0 -110
  707. package/lib/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  708. package/lib/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  709. package/lib/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  710. package/lib/anchored-edits/TransactionWithAnchors.js +0 -32
  711. package/lib/anchored-edits/TransactionWithAnchors.js.map +0 -1
  712. package/lib/anchored-edits/index.d.ts +0 -10
  713. package/lib/anchored-edits/index.d.ts.map +0 -1
  714. package/lib/anchored-edits/index.js +0 -11
  715. package/lib/anchored-edits/index.js.map +0 -1
  716. package/lib/default-edits/EditUtilities.d.ts +0 -57
  717. package/lib/default-edits/EditUtilities.d.ts.map +0 -1
  718. package/lib/default-edits/EditUtilities.js +0 -181
  719. package/lib/default-edits/EditUtilities.js.map +0 -1
  720. package/lib/default-edits/Factory.d.ts +0 -56
  721. package/lib/default-edits/Factory.d.ts.map +0 -1
  722. package/lib/default-edits/Factory.js +0 -74
  723. package/lib/default-edits/Factory.js.map +0 -1
  724. package/lib/default-edits/HistoryEditFactory.d.ts +0 -19
  725. package/lib/default-edits/HistoryEditFactory.d.ts.map +0 -1
  726. package/lib/default-edits/HistoryEditFactory.js.map +0 -1
  727. package/lib/default-edits/PersistedTypes.d.ts.map +0 -1
  728. package/lib/default-edits/PersistedTypes.js.map +0 -1
  729. package/lib/default-edits/SharedTree.d.ts +0 -111
  730. package/lib/default-edits/SharedTree.d.ts.map +0 -1
  731. package/lib/default-edits/SharedTree.js +0 -100
  732. package/lib/default-edits/SharedTree.js.map +0 -1
  733. package/lib/default-edits/Summary.d.ts +0 -15
  734. package/lib/default-edits/Summary.d.ts.map +0 -1
  735. package/lib/default-edits/Summary.js +0 -31
  736. package/lib/default-edits/Summary.js.map +0 -1
  737. package/lib/default-edits/Transaction.d.ts +0 -41
  738. package/lib/default-edits/Transaction.d.ts.map +0 -1
  739. package/lib/default-edits/Transaction.js +0 -221
  740. package/lib/default-edits/Transaction.js.map +0 -1
  741. package/lib/default-edits/UndoRedoHandler.d.ts.map +0 -1
  742. package/lib/default-edits/UndoRedoHandler.js.map +0 -1
  743. package/lib/default-edits/index.d.ts +0 -13
  744. package/lib/default-edits/index.d.ts.map +0 -1
  745. package/lib/default-edits/index.js +0 -14
  746. package/lib/default-edits/index.js.map +0 -1
  747. package/lib/generic/GenericEditUtilities.d.ts +0 -26
  748. package/lib/generic/GenericEditUtilities.d.ts.map +0 -1
  749. package/lib/generic/GenericEditUtilities.js +0 -38
  750. package/lib/generic/GenericEditUtilities.js.map +0 -1
  751. package/lib/generic/GenericSharedTree.d.ts +0 -221
  752. package/lib/generic/GenericSharedTree.d.ts.map +0 -1
  753. package/lib/generic/GenericSharedTree.js +0 -443
  754. package/lib/generic/GenericSharedTree.js.map +0 -1
  755. package/lib/generic/GenericTransaction.d.ts +0 -87
  756. package/lib/generic/GenericTransaction.d.ts.map +0 -1
  757. package/lib/generic/GenericTransaction.js +0 -140
  758. package/lib/generic/GenericTransaction.js.map +0 -1
  759. package/lib/generic/PersistedTypes.d.ts +0 -194
  760. package/lib/generic/PersistedTypes.d.ts.map +0 -1
  761. package/lib/generic/PersistedTypes.js +0 -39
  762. package/lib/generic/PersistedTypes.js.map +0 -1
  763. package/lib/generic/Summary.d.ts +0 -63
  764. package/lib/generic/Summary.d.ts.map +0 -1
  765. package/lib/generic/Summary.js +0 -58
  766. package/lib/generic/Summary.js.map +0 -1
  767. package/lib/generic/index.d.ts +0 -10
  768. package/lib/generic/index.d.ts.map +0 -1
  769. package/lib/generic/index.js +0 -11
  770. package/lib/generic/index.js.map +0 -1
  771. package/lib/test/Anchors.glassBox.tests.d.ts.map +0 -1
  772. package/lib/test/Anchors.glassBox.tests.js +0 -410
  773. package/lib/test/Anchors.glassBox.tests.js.map +0 -1
  774. package/lib/test/BasicCheckout.tests.d.ts.map +0 -1
  775. package/lib/test/BasicCheckout.tests.js +0 -8
  776. package/lib/test/BasicCheckout.tests.js.map +0 -1
  777. package/lib/test/GenericTransactionWithAnchors.tests.d.ts.map +0 -1
  778. package/lib/test/GenericTransactionWithAnchors.tests.js +0 -25
  779. package/lib/test/GenericTransactionWithAnchors.tests.js.map +0 -1
  780. package/lib/test/SharedTreeWithAnchors.tests.d.ts.map +0 -1
  781. package/lib/test/SharedTreeWithAnchors.tests.js +0 -420
  782. package/lib/test/SharedTreeWithAnchors.tests.js.map +0 -1
  783. package/lib/test/Snapshot.tests.d.ts.map +0 -1
  784. package/lib/test/Snapshot.tests.js +0 -96
  785. package/lib/test/Snapshot.tests.js.map +0 -1
  786. package/lib/test/SnapshotUtilities.tests.d.ts.map +0 -1
  787. package/lib/test/SnapshotUtilities.tests.js +0 -168
  788. package/lib/test/SnapshotUtilities.tests.js.map +0 -1
  789. package/lib/test/undoRedoStackManager.d.ts +0 -26
  790. package/lib/test/undoRedoStackManager.d.ts.map +0 -1
  791. package/lib/test/undoRedoStackManager.js +0 -176
  792. package/lib/test/undoRedoStackManager.js.map +0 -1
  793. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts +0 -13
  794. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts.map +0 -1
  795. package/lib/test/utilities/SummaryFormatCompatibilityTests.js +0 -154
  796. package/lib/test/utilities/SummaryFormatCompatibilityTests.js.map +0 -1
  797. package/src/BasicCheckout.ts +0 -34
  798. package/src/Snapshot.ts +0 -363
  799. package/src/SnapshotUtilities.ts +0 -88
  800. package/src/anchored-edits/AnchorResolution.ts +0 -442
  801. package/src/anchored-edits/Factory.ts +0 -94
  802. package/src/anchored-edits/PersistedTypes.ts +0 -310
  803. package/src/anchored-edits/SharedTreeWithAnchors.ts +0 -200
  804. package/src/anchored-edits/TransactionWithAnchors.ts +0 -39
  805. package/src/anchored-edits/index.ts +0 -21
  806. package/src/default-edits/EditUtilities.ts +0 -220
  807. package/src/default-edits/Factory.ts +0 -94
  808. package/src/default-edits/SharedTree.ts +0 -174
  809. package/src/default-edits/Summary.ts +0 -44
  810. package/src/default-edits/Transaction.ts +0 -262
  811. package/src/default-edits/index.ts +0 -29
  812. package/src/generic/GenericEditUtilities.ts +0 -46
  813. package/src/generic/GenericSharedTree.ts +0 -593
  814. package/src/generic/GenericTransaction.ts +0 -194
  815. package/src/generic/PersistedTypes.ts +0 -221
  816. package/src/generic/Summary.ts +0 -113
  817. package/src/generic/index.ts +0 -41
@@ -1 +1 @@
1
- {"version":3,"file":"Checkout.tests.js","sourceRoot":"","sources":["../../src/test/Checkout.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 {\n\tsetTrait,\n\tDelete,\n\tEditStatus,\n\tInsert,\n\tMove,\n\tStableRange,\n\tStablePlace,\n\tSide,\n\tEditValidationResult,\n\tSharedTree,\n\tSharedTreeEvent,\n\tCheckout,\n\tCheckoutEvent,\n\tChange,\n} from '../index';\nimport {\n\tleft,\n\tleftTraitLocation,\n\tmakeEmptyNode,\n\tright,\n\trightTraitLocation,\n\tsetUpTestSharedTree,\n\tSharedTreeTestingOptions,\n\tsimpleTestTree,\n} from './utilities/TestUtilities';\n\n/**\n * Checkout test suite\n */\nexport function checkoutTests(\n\tsuiteName: string,\n\tcheckoutFactory: (tree: SharedTree) => Promise<Checkout<Change>>\n): Mocha.Suite {\n\tasync function setUpTestCheckout(\n\t\toptions: SharedTreeTestingOptions = { localMode: true, noFailOnError: true }\n\t): Promise<{ checkout: Checkout<Change>; tree: SharedTree }> {\n\t\tconst { tree } = setUpTestSharedTree(options);\n\t\treturn { checkout: await checkoutFactory(tree), tree };\n\t}\n\n\t/**\n\t * Counts the number of times ViewChange occurs while performing `action`.\n\t * Checks arguments to ViewChange are correct as well.\n\t * @param action Action to perform\n\t * @param options Options object used to construct the initial SharedTree\n\t */\n\tasync function countViewChange(\n\t\taction: (checkout: Checkout<Change>, data: { changeCount: number }) => void | Promise<void>,\n\t\toptions: SharedTreeTestingOptions = { localMode: true }\n\t): Promise<number> {\n\t\tconst { checkout } = await setUpTestCheckout(options);\n\t\tlet lastView = checkout.currentView;\n\t\tconst data = { changeCount: 0 };\n\t\tcheckout.on(CheckoutEvent.ViewChange, (before, after) => {\n\t\t\texpect(after).equals(checkout.currentView);\n\t\t\texpect(before).equals(lastView);\n\t\t\tlastView = after;\n\t\t\tdata.changeCount++;\n\t\t});\n\t\t// Prevent errors from errors (like failed expects) from being hidden.\n\t\tconst errors: Error[] = [];\n\t\tcheckout.on('error', (error) => {\n\t\t\terrors.push(error);\n\t\t});\n\n\t\tawait action(checkout, data);\n\t\texpect(errors).deep.equal([]);\n\t\treturn data.changeCount;\n\t}\n\n\treturn describe(suiteName, () => {\n\t\tit('can only have one edit open at a time', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\t\t\tcheckout.openEdit();\n\t\t\texpect(() => checkout.openEdit()).throws();\n\t\t});\n\n\t\tit('can only close an edit if one is open', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\t\t\texpect(() => checkout.closeEdit()).throws();\n\t\t});\n\n\t\tit('can only apply changes if an edit is open', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\t\t\texpect(() => checkout.applyChanges(Delete.create(StableRange.only(left)))).throws();\n\t\t});\n\n\t\tit('cannot abort an edit if no edit is open', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\t\t\texpect(() => checkout.abortEdit()).throws();\n\t\t});\n\n\t\tit('can abort valid edits', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout({ initialTree: simpleTestTree });\n\n\t\t\tcheckout.openEdit();\n\t\t\t// Is still valid after a valid edit\n\t\t\tcheckout.applyChanges(Delete.create(StableRange.only(left)));\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.abortEdit();\n\n\t\t\t// The left node should still be there\n\t\t\texpect(checkout.currentView.getSnapshotNode(left.identifier).identifier).not.undefined;\n\t\t});\n\n\t\tit('can abort invalid edits', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout({ initialTree: simpleTestTree });\n\n\t\t\tcheckout.openEdit();\n\t\t\t// Starts as valid\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\t// Is invalid after an invalid edit\n\t\t\texpect(() => checkout.applyChanges(...Insert.create([left], StablePlace.after(left)))).throws(\n\t\t\t\t'Locally constructed edits must be well-formed and valid.'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Invalid);\n\t\t\tcheckout.abortEdit();\n\n\t\t\t// Next edit is unaffected\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('can abort malformed edits', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout({ initialTree: simpleTestTree });\n\n\t\t\tcheckout.openEdit();\n\t\t\t// Starts as valid\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\t// Is malformed after a malformed edit\n\t\t\tconst malformedMove = Move.create(\n\t\t\t\t{\n\t\t\t\t\tstart: { side: Side.Before },\n\t\t\t\t\tend: { side: Side.After },\n\t\t\t\t},\n\t\t\t\t{ side: Side.After }\n\t\t\t);\n\t\t\texpect(() => checkout.applyChanges(...malformedMove)).throws(\n\t\t\t\t'Locally constructed edits must be well-formed and valid.'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Malformed);\n\n\t\t\t// Is still malformed after a subsequent valid edit\n\t\t\texpect(() => checkout.applyChanges(Delete.create(StableRange.only(left)))).throws(\n\t\t\t\t'Cannot apply change to an edit unless all previous changes have applied'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Malformed);\n\n\t\t\tcheckout.abortEdit();\n\n\t\t\t// Next edit is unaffected\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('cannot get the edit status if no edit is open', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\t\t\texpect(() => checkout.getEditStatus()).throws();\n\t\t});\n\n\t\tit('Surfaces error events to SharedTree', async () => {\n\t\t\tconst { checkout, tree } = await setUpTestCheckout();\n\t\t\tconst message = 'Simulated unexpected error in ViewChange event handler';\n\t\t\tcheckout.on(CheckoutEvent.ViewChange, () => {\n\t\t\t\tthrow Error(message);\n\t\t\t});\n\t\t\tlet treeErrorHandlerWasCalled = false;\n\t\t\ttree.on('error', (error) => {\n\t\t\t\ttreeErrorHandlerWasCalled = true;\n\t\t\t\texpect(error).to.have.property('message').that.equals(message);\n\t\t\t});\n\n\t\t\t// This could alternatively actually cause a ViewChange via application of an edit.\n\t\t\tcheckout.emit(CheckoutEvent.ViewChange, checkout.currentView, checkout.currentView);\n\t\t\texpect(treeErrorHandlerWasCalled).equals(true);\n\t\t});\n\n\t\tit('exposes the current edit status in the face of valid edits', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout({ initialTree: simpleTestTree });\n\n\t\t\tcheckout.openEdit();\n\t\t\t// Starts as valid\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\t// Is still valid after a valid edit\n\t\t\tcheckout.applyChanges(Delete.create(StableRange.only(left)));\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('exposes the current edit status in the face of invalid edits', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout({ initialTree: simpleTestTree });\n\n\t\t\tcheckout.openEdit();\n\t\t\t// Starts as valid\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\t// Is invalid after an invalid edit\n\t\t\texpect(() => checkout.applyChanges(...Insert.create([left], StablePlace.after(left)))).throws(\n\t\t\t\t'Locally constructed edits must be well-formed and valid.'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Invalid);\n\n\t\t\t// Is still invalid after a subsequent valid edit\n\t\t\texpect(() => checkout.applyChanges(Delete.create(StableRange.only(left)))).throws(\n\t\t\t\t'Cannot apply change to an edit unless all previous changes have applied'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Invalid);\n\n\t\t\texpect(() => checkout.closeEdit()).throws('Locally constructed edits must be well-formed and valid');\n\n\t\t\t// Next edit is unaffected\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('exposes the current edit status in the face of malformed edits', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout({ initialTree: simpleTestTree });\n\n\t\t\tcheckout.openEdit();\n\t\t\t// Starts as valid\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\t// Is malformed after a malformed edit\n\t\t\tconst malformedMove = Move.create(\n\t\t\t\t{\n\t\t\t\t\tstart: { side: Side.Before },\n\t\t\t\t\tend: { side: Side.After },\n\t\t\t\t},\n\t\t\t\t{ side: Side.After }\n\t\t\t);\n\t\t\texpect(() => checkout.applyChanges(...malformedMove)).throws(\n\t\t\t\t'Locally constructed edits must be well-formed and valid.'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Malformed);\n\n\t\t\t// Is still malformed after a subsequent valid edit\n\t\t\texpect(() => checkout.applyChanges(Delete.create(StableRange.only(left)))).throws(\n\t\t\t\t'Cannot apply change to an edit unless all previous changes have applied'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Malformed);\n\n\t\t\texpect(() => checkout.closeEdit()).throws('Locally constructed edits must be well-formed and valid');\n\n\t\t\t// Next edit is unaffected\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('does not invalidate in response to an empty edit', async () => {\n\t\t\tconst invalidations = await countViewChange((checkout) => {\n\t\t\t\tcheckout.openEdit();\n\t\t\t\tcheckout.closeEdit();\n\t\t\t});\n\t\t\texpect(invalidations).equals(0);\n\t\t});\n\n\t\tit('records empty edits', async () => {\n\t\t\tconst { checkout, tree } = await setUpTestCheckout();\n\t\t\tcheckout.openEdit();\n\t\t\tconst editId = checkout.closeEdit();\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\texpect(tree.edits.length).equals(1);\n\t\t\texpect(tree.edits.tryGetEdit(editId)).is.not.undefined;\n\t\t});\n\n\t\tit('will emit invalidation messages in response to changes', async () => {\n\t\t\tconst invalidations = await countViewChange(\n\t\t\t\t(checkout) => {\n\t\t\t\t\tcheckout.applyEdit(Delete.create(StableRange.only(left)));\n\t\t\t\t},\n\t\t\t\t{ initialTree: simpleTestTree }\n\t\t\t);\n\t\t\texpect(invalidations).equals(1);\n\t\t});\n\n\t\tit('will emit invalidation messages in response to payload change', async () => {\n\t\t\tconst invalidations = await countViewChange(\n\t\t\t\t(checkout) => {\n\t\t\t\t\tcheckout.applyEdit(Change.setPayload(left.identifier, 5));\n\t\t\t\t},\n\t\t\t\t{ initialTree: simpleTestTree }\n\t\t\t);\n\t\t\texpect(invalidations).equals(1);\n\t\t});\n\n\t\tit('emits a change event for each batch of changes in a local edit', async () => {\n\t\t\tconst changes = await countViewChange(\n\t\t\t\tasync (checkout, data) => {\n\t\t\t\t\tcheckout.on(CheckoutEvent.ViewChange, () => {\n\t\t\t\t\t\tconst leftTrait = checkout.currentView.getTrait(leftTraitLocation);\n\t\t\t\t\t\tconst rightTrait = checkout.currentView.getTrait(rightTraitLocation);\n\n\t\t\t\t\t\tif (data.changeCount === 1) {\n\t\t\t\t\t\t\texpect(leftTrait.length).to.equal(0); // \"left\" child is deleted...\n\t\t\t\t\t\t\texpect(rightTrait.length).to.equal(1); // ...but \"right\" child is not\n\t\t\t\t\t\t} else if (data.changeCount === 2) {\n\t\t\t\t\t\t\texpect(leftTrait.length).to.equal(0); // \"left\" child is deleted...\n\t\t\t\t\t\t\texpect(rightTrait.length).to.equal(0); // ...and so is \"right\" child\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tcheckout.openEdit();\n\t\t\t\t\texpect(data.changeCount).equals(0);\n\t\t\t\t\tcheckout.applyChanges(Delete.create(StableRange.only(left)));\n\t\t\t\t\texpect(data.changeCount).equals(1);\n\t\t\t\t\tcheckout.applyChanges(Delete.create(StableRange.only(right)));\n\t\t\t\t\texpect(data.changeCount).equals(2);\n\t\t\t\t\tcheckout.closeEdit();\n\t\t\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\t\t},\n\t\t\t\t{ initialTree: simpleTestTree }\n\t\t\t);\n\n\t\t\t// Checkout's use of LogViewer.setKnownEditingResult should enable CachingLogViewer\n\t\t\t// to return the exact same SnapShot object, allowing checkout to so skip an extra change event from closeEdit.\n\t\t\texpect(changes).equals(2);\n\t\t});\n\n\t\tit('emits ViewChange events for edits directly on tree', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout({ initialTree: simpleTestTree });\n\t\t\tlet changeCount = 0;\n\t\t\tcheckout.on(CheckoutEvent.ViewChange, () => {\n\t\t\t\tchangeCount += 1;\n\t\t\t});\n\t\t\texpect(changeCount).equals(0);\n\t\t\tcheckout.tree.applyEdit(Delete.create(StableRange.only(left)));\n\t\t\t// Wait for edit to be included in checkout.\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\texpect(changeCount).equals(1);\n\t\t});\n\n\t\tconst treeOptions = { initialTree: simpleTestTree, localMode: false };\n\t\tconst secondTreeOptions = {\n\t\t\tid: 'secondTestSharedTree',\n\t\t\tlocalMode: false,\n\t\t\tallowInvalid: true,\n\t\t};\n\n\t\tit('emits ViewChange events for remote edits', async () => {\n\t\t\tconst { containerRuntimeFactory, tree } = setUpTestSharedTree({ ...treeOptions });\n\n\t\t\tconst { tree: secondTree } = setUpTestSharedTree({\n\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\t...secondTreeOptions,\n\t\t\t});\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst checkout = await checkoutFactory(tree);\n\n\t\t\tlet changeCount = 0;\n\t\t\tcheckout.on(CheckoutEvent.ViewChange, () => {\n\t\t\t\tchangeCount += 1;\n\t\t\t});\n\n\t\t\tsecondTree.applyEdit(Delete.create(StableRange.only(left)));\n\t\t\texpect(changeCount).equals(0);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t// Wait for edit to be included in checkout.\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\texpect(changeCount).equals(1);\n\t\t});\n\n\t\tit('connected state with a remote SharedTree equates correctly during edits', async () => {\n\t\t\t// Invalid edits are allowed here because this test creates edits concurrently in two trees,\n\t\t\t// which after syncing, end up with one being invalid.\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({ ...treeOptions, allowInvalid: true });\n\t\t\tconst { tree: secondTree } = setUpTestSharedTree({\n\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\t...secondTreeOptions,\n\t\t\t});\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst checkout = await checkoutFactory(tree);\n\t\t\tconst secondCheckout = await checkoutFactory(tree);\n\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(tree.equals(secondTree)).to.be.true;\n\t\t\tsecondCheckout.openEdit();\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(tree.equals(secondTree)).to.be.true;\n\t\t\tcheckout.applyChanges(Delete.create(StableRange.only(left)));\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.false;\n\t\t\tsecondCheckout.applyChanges(Delete.create(StableRange.only(left)));\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(tree.equals(secondTree)).to.be.true;\n\t\t\tcheckout.closeEdit();\n\t\t\tsecondCheckout.closeEdit();\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\texpect(tree.equals(secondTree)).to.be.true;\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.true;\n\t\t});\n\n\t\tit('can successfully rebase an ongoing local edit', async () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tconst { tree: secondTree } = setUpTestSharedTree({ containerRuntimeFactory, ...secondTreeOptions });\n\n\t\t\t// Sync initial tree\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst checkout = await checkoutFactory(tree);\n\t\t\tconst secondCheckout = await checkoutFactory(secondTree);\n\n\t\t\tconst newLeftNode = makeEmptyNode();\n\t\t\tcheckout.openEdit();\n\t\t\tcheckout.applyChanges(...setTrait(leftTraitLocation, [newLeftNode]));\n\n\t\t\t// Concurrently, the second client deletes the right node. This will not conflict with the operation performed\n\t\t\t// on the left trait on the first client.\n\t\t\tsecondCheckout.applyEdit(Delete.create(StableRange.only(right)));\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\n\t\t\t// Deliver the remote change. Since there will not be any conflicts, the result should merge locally and both trait\n\t\t\t// modifications should be reflected in the current view.\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\n\t\t\tlet leftTrait = checkout.currentView.getTrait(leftTraitLocation);\n\t\t\tlet rightTrait = checkout.currentView.getTrait(rightTraitLocation);\n\t\t\texpect(leftTrait).deep.equals([newLeftNode.identifier]);\n\t\t\t// The remote deletion of the right node, while delivered, will not be reflected in the view yet.\n\t\t\texpect(rightTrait).deep.equals([right.identifier]);\n\n\t\t\tconst secondLeftTrait = secondCheckout.currentView.getTrait(leftTraitLocation);\n\t\t\tconst secondRightTrait = secondCheckout.currentView.getTrait(rightTraitLocation);\n\t\t\texpect(secondLeftTrait).deep.equals([left.identifier]);\n\t\t\texpect(secondRightTrait.length).equals(0);\n\n\t\t\t// Merge in the latest changes.\n\t\t\tconst rebaseResult = checkout.rebaseCurrentEdit();\n\t\t\texpect(rebaseResult).equals(EditValidationResult.Valid);\n\t\t\tleftTrait = checkout.currentView.getTrait(leftTraitLocation);\n\t\t\trightTrait = checkout.currentView.getTrait(rightTraitLocation);\n\t\t\texpect(leftTrait).deep.equals([newLeftNode.identifier]);\n\t\t\texpect(rightTrait.length).equals(0);\n\n\t\t\tcheckout.closeEdit();\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\texpect(tree.equals(secondTree)).to.be.true;\n\t\t});\n\n\t\tit('can handle a failed rebase of an ongoing local edit', async () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree(treeOptions);\n\t\t\tconst { tree: secondTree } = setUpTestSharedTree({ containerRuntimeFactory, ...secondTreeOptions });\n\n\t\t\t// Sync initial tree\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst checkout = await checkoutFactory(tree);\n\t\t\tconst secondCheckout = await checkoutFactory(secondTree);\n\n\t\t\tcheckout.openEdit();\n\t\t\t// Move the left node to after the right node\n\t\t\tcheckout.applyChanges(...Move.create(StableRange.only(left), StablePlace.after(right)));\n\n\t\t\t// Concurrently, the second client deletes the right node. This will conflict with the move operation by the first client.\n\t\t\tsecondCheckout.applyEdit(Delete.create(StableRange.only(right)));\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\n\t\t\t// Before rebasing, the first client should still see the right node and will have moved the left node after it.\n\t\t\tconst leftTrait = checkout.currentView.getTrait(leftTraitLocation);\n\t\t\tconst rightTrait = checkout.currentView.getTrait(rightTraitLocation);\n\t\t\texpect(leftTrait).deep.equals([]);\n\t\t\texpect(rightTrait).deep.equals([right.identifier, left.identifier]);\n\n\t\t\t// Merge in the latest changes.\n\t\t\tconst rebaseResult = checkout.rebaseCurrentEdit();\n\t\t\texpect(rebaseResult).equals(EditValidationResult.Invalid);\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.true;\n\t\t});\n\n\t\tit('can dispose and remove listeners', async () => {\n\t\t\t// Arrange\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\n\t\t\t// Assert\n\t\t\texpect(checkout.tree.listenerCount(SharedTreeEvent.EditCommitted)).to.equal(1);\n\n\t\t\t// Act\n\t\t\tcheckout.dispose();\n\n\t\t\t// Assert\n\t\t\texpect(checkout.tree.listenerCount(SharedTreeEvent.EditCommitted)).to.equal(0);\n\t\t});\n\t});\n}\n"]}
1
+ {"version":3,"file":"Checkout.tests.js","sourceRoot":"","sources":["../../src/test/Checkout.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 {\n\tsetTrait,\n\tEditStatus,\n\tStableRange,\n\tStablePlace,\n\tEditValidationResult,\n\tSharedTree,\n\tSharedTreeEvent,\n\tCheckout,\n\tCheckoutEvent,\n\tChange,\n\tSide,\n\tareRevisionViewsSemanticallyEqual,\n} from '../index';\nimport { TestTree } from './utilities/TestNode';\nimport { setUpTestSharedTree, SharedTreeTestingOptions, setUpTestTree } from './utilities/TestUtilities';\n\n/**\n * Checkout test suite\n */\nexport function checkoutTests(\n\tcheckoutName: string,\n\tcheckoutFactory: (tree: SharedTree) => Promise<Checkout>,\n\tadditionalTests?: () => void\n): void {\n\tasync function setUpTestCheckout(\n\t\toptions: SharedTreeTestingOptions = { localMode: true, noFailOnError: true }\n\t): Promise<{ checkout: Checkout; tree: SharedTree }> {\n\t\tconst { tree } = setUpTestSharedTree(options);\n\t\treturn { checkout: await checkoutFactory(tree), tree };\n\t}\n\n\t/**\n\t * Counts the number of times ViewChange occurs while performing `action`.\n\t * Checks arguments to ViewChange are correct as well.\n\t * @param action Action to perform\n\t * @param options Options object used to construct the initial SharedTree\n\t */\n\tasync function countViewChange(\n\t\taction: (checkout: Checkout, simpleTestTree: TestTree, data: { changeCount: number }) => void | Promise<void>,\n\t\toptions: SharedTreeTestingOptions = { localMode: true }\n\t): Promise<number> {\n\t\tconst { checkout, tree } = await setUpTestCheckout(options);\n\t\tconst simpleTestTree = setUpTestTree(tree);\n\t\tawait checkout.waitForPendingUpdates();\n\t\tlet lastView = checkout.currentView;\n\t\tconst data = { changeCount: 0 };\n\t\tcheckout.on(CheckoutEvent.ViewChange, (before, after) => {\n\t\t\texpect(after).equals(checkout.currentView);\n\t\t\texpect(before).equals(lastView);\n\t\t\tlastView = after;\n\t\t\tdata.changeCount++;\n\t\t});\n\t\t// Prevent errors from errors (like failed expects) from being hidden.\n\t\tconst errors: Error[] = [];\n\t\tcheckout.on('error', (error) => {\n\t\t\terrors.push(error);\n\t\t});\n\n\t\tawait action(checkout, simpleTestTree, data);\n\t\texpect(errors).deep.equal([]);\n\t\treturn data.changeCount;\n\t}\n\n\tasync function setUpTestTreeCheckout(): Promise<{\n\t\tcheckout: Checkout;\n\t\tsharedTree: SharedTree;\n\t\ttestTree: TestTree;\n\t}> {\n\t\tconst { checkout, tree } = await setUpTestCheckout();\n\t\tconst testTree = setUpTestTree(tree);\n\t\tawait checkout.waitForPendingUpdates();\n\t\treturn { checkout, sharedTree: tree, testTree };\n\t}\n\n\tdescribe(checkoutName, () => {\n\t\tit('can only have one edit open at a time', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\t\t\tcheckout.openEdit();\n\t\t\texpect(() => checkout.openEdit()).throws();\n\t\t});\n\n\t\tit('can only close an edit if one is open', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\t\t\texpect(() => checkout.closeEdit()).throws();\n\t\t});\n\n\t\tit('can only apply changes if an edit is open', async () => {\n\t\t\tconst { checkout, testTree } = await setUpTestTreeCheckout();\n\t\t\texpect(() => checkout.applyChanges(Change.delete(StableRange.only(testTree.left)))).throws();\n\t\t});\n\n\t\tit('cannot abort an edit if no edit is open', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\t\t\texpect(() => checkout.abortEdit()).throws();\n\t\t});\n\n\t\tit('can abort valid edits', async () => {\n\t\t\tconst { checkout, testTree } = await setUpTestTreeCheckout();\n\t\t\tcheckout.openEdit();\n\t\t\t// Is still valid after a valid edit\n\t\t\tcheckout.applyChanges(Change.delete(StableRange.only(testTree.left.identifier)));\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.abortEdit();\n\n\t\t\t// The left node should still be there\n\t\t\texpect(checkout.currentView.getViewNode(testTree.left.identifier).identifier).not.undefined;\n\t\t});\n\n\t\tit('can abort invalid edits', async () => {\n\t\t\tconst { checkout, testTree } = await setUpTestTreeCheckout();\n\t\t\tcheckout.openEdit();\n\t\t\t// Starts as valid\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\t// Is invalid after an invalid edit\n\t\t\texpect(() =>\n\t\t\t\tcheckout.applyChanges(...Change.insertTree(testTree.left, StablePlace.after(testTree.left)))\n\t\t\t).throws('Locally constructed edits must be well-formed and valid.');\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Invalid);\n\t\t\tcheckout.abortEdit();\n\n\t\t\t// Next edit is unaffected\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('can abort malformed edits', async () => {\n\t\t\tconst { checkout, testTree } = await setUpTestTreeCheckout();\n\t\t\tcheckout.openEdit();\n\t\t\t// Starts as valid\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\t// Is malformed after a malformed edit\n\t\t\tconst malformedMove = Change.move(\n\t\t\t\t{\n\t\t\t\t\tstart: { side: Side.Before },\n\t\t\t\t\tend: { side: Side.After },\n\t\t\t\t},\n\t\t\t\t{ side: Side.After }\n\t\t\t);\n\t\t\texpect(() => checkout.applyChanges(...malformedMove)).throws(\n\t\t\t\t'Locally constructed edits must be well-formed and valid.'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Malformed);\n\n\t\t\t// Is still malformed after a subsequent valid edit\n\t\t\texpect(() => checkout.applyChanges(Change.delete(StableRange.only(testTree.left)))).throws(\n\t\t\t\t'Cannot apply change to an edit unless all previous changes have applied'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Malformed);\n\n\t\t\tcheckout.abortEdit();\n\n\t\t\t// Next edit is unaffected\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('can try to apply an invalid edit and abort without causing an error', async () => {\n\t\t\tconst { checkout, tree } = await setUpTestCheckout();\n\t\t\tconst simpleTestTree = setUpTestTree(tree);\n\n\t\t\t// tryApplyEdit aborts when applying an invalid edit and returns undefined\n\t\t\texpect(\n\t\t\t\tcheckout.tryApplyEdit(...Change.insertTree(simpleTestTree.left, StablePlace.after(simpleTestTree.left)))\n\t\t\t).to.be.undefined;\n\n\t\t\t// Next edit is unaffected\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('cannot get the edit status if no edit is open', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\t\t\texpect(() => checkout.getEditStatus()).throws();\n\t\t});\n\n\t\tit('Surfaces error events to SharedTree', async () => {\n\t\t\tconst { checkout, tree } = await setUpTestCheckout();\n\t\t\tconst message = 'Simulated unexpected error in ViewChange event handler';\n\t\t\tcheckout.on(CheckoutEvent.ViewChange, () => {\n\t\t\t\tthrow Error(message);\n\t\t\t});\n\t\t\tlet treeErrorHandlerWasCalled = false;\n\t\t\ttree.on('error', (error) => {\n\t\t\t\ttreeErrorHandlerWasCalled = true;\n\t\t\t\texpect(error).to.have.property('message').that.equals(message);\n\t\t\t});\n\n\t\t\t// This could alternatively actually cause a ViewChange via application of an edit.\n\t\t\tcheckout.emit(CheckoutEvent.ViewChange, checkout.currentView, checkout.currentView);\n\t\t\texpect(treeErrorHandlerWasCalled).equals(true);\n\t\t});\n\n\t\tit('exposes the current edit status in the face of valid edits', async () => {\n\t\t\tconst { checkout, testTree } = await setUpTestTreeCheckout();\n\t\t\tcheckout.openEdit();\n\t\t\t// Starts as valid\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\t// Is still valid after a valid edit\n\t\t\tcheckout.applyChanges(Change.delete(StableRange.only(testTree.left)));\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('exposes the current edit status in the face of invalid edits', async () => {\n\t\t\tconst { checkout, testTree } = await setUpTestTreeCheckout();\n\t\t\tcheckout.openEdit();\n\t\t\t// Starts as valid\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\t// Is invalid after an invalid edit\n\t\t\texpect(() =>\n\t\t\t\tcheckout.applyChanges(...Change.insertTree(testTree.left, StablePlace.after(testTree.left)))\n\t\t\t).throws('Locally constructed edits must be well-formed and valid.');\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Invalid);\n\n\t\t\t// Is still invalid after a subsequent valid edit\n\t\t\texpect(() => checkout.applyChanges(Change.delete(StableRange.only(testTree.left)))).throws(\n\t\t\t\t'Cannot apply change to an edit unless all previous changes have applied'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Invalid);\n\n\t\t\texpect(() => checkout.closeEdit()).throws('Locally constructed edits must be well-formed and valid');\n\n\t\t\t// Next edit is unaffected\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('exposes the current edit status in the face of malformed edits', async () => {\n\t\t\tconst { checkout, testTree } = await setUpTestTreeCheckout();\n\t\t\tcheckout.openEdit();\n\t\t\t// Starts as valid\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\n\t\t\t// Is malformed after a malformed edit\n\t\t\tconst malformedMove = Change.move(\n\t\t\t\t{\n\t\t\t\t\tstart: { side: Side.Before },\n\t\t\t\t\tend: { side: Side.After },\n\t\t\t\t},\n\t\t\t\t{ side: Side.After }\n\t\t\t);\n\t\t\texpect(() => checkout.applyChanges(...malformedMove)).throws(\n\t\t\t\t'Locally constructed edits must be well-formed and valid.'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Malformed);\n\n\t\t\t// Is still malformed after a subsequent valid edit\n\t\t\texpect(() => checkout.applyChanges(Change.delete(StableRange.only(testTree.left)))).throws(\n\t\t\t\t'Cannot apply change to an edit unless all previous changes have applied'\n\t\t\t);\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Malformed);\n\n\t\t\texpect(() => checkout.closeEdit()).throws('Locally constructed edits must be well-formed and valid');\n\n\t\t\t// Next edit is unaffected\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.getEditStatus()).equals(EditStatus.Applied);\n\t\t\tcheckout.closeEdit();\n\t\t});\n\n\t\tit('does not invalidate in response to an empty edit', async () => {\n\t\t\tconst invalidations = await countViewChange((checkout) => {\n\t\t\t\tcheckout.openEdit();\n\t\t\t\tcheckout.closeEdit();\n\t\t\t});\n\t\t\texpect(invalidations).equals(0);\n\t\t});\n\n\t\tit('records empty edits', async () => {\n\t\t\tconst { checkout, tree } = await setUpTestCheckout();\n\t\t\tcheckout.openEdit();\n\t\t\tconst editId = checkout.closeEdit();\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\texpect(tree.edits.length).equals(1);\n\t\t\texpect(tree.edits.tryGetEdit(editId)).is.not.undefined;\n\t\t});\n\n\t\tit('will emit invalidation messages in response to changes', async () => {\n\t\t\tconst invalidations = await countViewChange((checkout, simpleTestTree) => {\n\t\t\t\tcheckout.applyEdit(Change.delete(StableRange.only(simpleTestTree.left)));\n\t\t\t});\n\t\t\texpect(invalidations).equals(1);\n\t\t});\n\n\t\tit('will emit invalidation messages in response to payload change', async () => {\n\t\t\tconst invalidations = await countViewChange((checkout, simpleTestTree) => {\n\t\t\t\tcheckout.applyEdit(Change.setPayload(simpleTestTree.left.identifier, 5));\n\t\t\t});\n\t\t\texpect(invalidations).equals(1);\n\t\t});\n\n\t\tit('emits a change event for each batch of changes in a local edit', async () => {\n\t\t\tconst changes = await countViewChange(async (checkout, simpleTestTree, data) => {\n\t\t\t\tcheckout.on(CheckoutEvent.ViewChange, () => {\n\t\t\t\t\tconst leftTrait = checkout.currentView.getTrait(simpleTestTree.left.traitLocation);\n\t\t\t\t\tconst rightTrait = checkout.currentView.getTrait(simpleTestTree.right.traitLocation);\n\n\t\t\t\t\tif (data.changeCount === 1) {\n\t\t\t\t\t\texpect(leftTrait.length).to.equal(0); // \"left\" child is deleted...\n\t\t\t\t\t\texpect(rightTrait.length).to.equal(1); // ...but \"right\" child is not\n\t\t\t\t\t} else if (data.changeCount === 2) {\n\t\t\t\t\t\texpect(leftTrait.length).to.equal(0); // \"left\" child is deleted...\n\t\t\t\t\t\texpect(rightTrait.length).to.equal(0); // ...and so is \"right\" child\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tcheckout.openEdit();\n\t\t\t\texpect(data.changeCount).equals(0);\n\t\t\t\tcheckout.applyChanges(Change.delete(StableRange.only(simpleTestTree.left)));\n\t\t\t\texpect(data.changeCount).equals(1);\n\t\t\t\tcheckout.applyChanges(Change.delete(StableRange.only(simpleTestTree.right)));\n\t\t\t\texpect(data.changeCount).equals(2);\n\t\t\t\tcheckout.closeEdit();\n\t\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\t});\n\n\t\t\t// Checkout's use of LogViewer.setKnownEditingResult should enable CachingLogViewer\n\t\t\t// to return the exact same revision view object, allowing checkout to skip an extra change event from closeEdit.\n\t\t\texpect(changes).equals(2);\n\t\t});\n\n\t\tit('emits ViewChange events for edits directly on tree', async () => {\n\t\t\tconst { checkout, testTree } = await setUpTestTreeCheckout();\n\t\t\tlet changeCount = 0;\n\t\t\tcheckout.on(CheckoutEvent.ViewChange, () => {\n\t\t\t\tchangeCount += 1;\n\t\t\t});\n\t\t\texpect(changeCount).equals(0);\n\t\t\tcheckout.tree.applyEdit(Change.delete(StableRange.only(testTree.left)));\n\t\t\t// Wait for edit to be included in checkout.\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\texpect(changeCount).equals(1);\n\t\t});\n\n\t\tit('automatically loads views from edits committed directly on it', async () => {\n\t\t\tconst { checkout, testTree } = await setUpTestTreeCheckout();\n\t\t\tconst viewBefore = checkout.currentView;\n\t\t\tlet changeCount = 0;\n\t\t\tcheckout.on(CheckoutEvent.ViewChange, () => {\n\t\t\t\tchangeCount += 1;\n\t\t\t});\n\t\t\tcheckout.applyEdit(Change.delete(StableRange.only(testTree.left)));\n\t\t\texpect(changeCount).equals(1);\n\t\t\texpect(viewBefore.equals(checkout.currentView)).to.be.false;\n\t\t});\n\n\t\tconst secondTreeOptions = {\n\t\t\tid: 'secondTestSharedTree',\n\t\t\tlocalMode: false,\n\t\t\tallowInvalid: true,\n\t\t};\n\n\t\tit('can wait on edits to be submitted', async () => {\n\t\t\tconst { checkout, testTree } = await setUpTestTreeCheckout();\n\t\t\tlet committedEditsCount = 0;\n\t\t\tcheckout.tree.on(SharedTreeEvent.EditCommitted, () => {\n\t\t\t\tcommittedEditsCount += 1;\n\t\t\t});\n\t\t\texpect(committedEditsCount).equals(0);\n\t\t\tcheckout.tree.applyEdit(Change.delete(StableRange.only(testTree.left)));\n\t\t\tawait checkout.waitForEditsToSubmit();\n\t\t\texpect(committedEditsCount).equals(1);\n\t\t});\n\n\t\tit('emits ViewChange events for remote edits', async () => {\n\t\t\tconst { containerRuntimeFactory, tree } = setUpTestSharedTree({ localMode: false });\n\t\t\tconst simpleTestTree = setUpTestTree(tree);\n\n\t\t\tconst { tree: secondTree } = setUpTestSharedTree({\n\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\t...secondTreeOptions,\n\t\t\t});\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst checkout = await checkoutFactory(tree);\n\n\t\t\tlet changeCount = 0;\n\t\t\tcheckout.on(CheckoutEvent.ViewChange, () => {\n\t\t\t\tchangeCount += 1;\n\t\t\t});\n\n\t\t\tsecondTree.applyEdit(Change.delete(StableRange.only(simpleTestTree.left.translateId(secondTree))));\n\t\t\texpect(changeCount).equals(0);\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t// Wait for edit to be included in checkout.\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\texpect(changeCount).equals(1);\n\t\t\texpect(secondTree.equals(tree));\n\t\t});\n\n\t\tit('connected state with a remote SharedTree equates correctly during edits', async () => {\n\t\t\t// Invalid edits are allowed here because this test creates edits concurrently in two trees,\n\t\t\t// which after syncing, end up with one being invalid.\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({ localMode: false, allowInvalid: true });\n\t\t\tconst simpleTestTree = setUpTestTree(tree);\n\t\t\tconst { tree: secondTree } = setUpTestSharedTree({\n\t\t\t\tcontainerRuntimeFactory,\n\t\t\t\t...secondTreeOptions,\n\t\t\t});\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tconst checkout = await checkoutFactory(tree);\n\t\t\tconst secondCheckout = await checkoutFactory(tree);\n\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(checkout.currentView.hasEqualForest(secondCheckout.currentView)).to.be.true;\n\t\t\tcheckout.openEdit();\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.false;\n\t\t\texpect(checkout.currentView.hasEqualForest(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(tree.equals(secondTree)).to.be.true;\n\t\t\tsecondCheckout.openEdit();\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(checkout.currentView.hasEqualForest(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(tree.equals(secondTree)).to.be.true;\n\t\t\tcheckout.applyChanges(Change.delete(StableRange.only(simpleTestTree.left)));\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.false;\n\t\t\texpect(checkout.currentView.hasEqualForest(secondCheckout.currentView)).to.be.false;\n\t\t\tsecondCheckout.applyChanges(Change.delete(StableRange.only(simpleTestTree.left)));\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(checkout.currentView.hasEqualForest(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(tree.equals(secondTree)).to.be.true;\n\t\t\tcheckout.closeEdit();\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.false;\n\t\t\texpect(checkout.currentView.hasEqualForest(secondCheckout.currentView)).to.be.true;\n\t\t\tsecondCheckout.closeEdit();\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(checkout.currentView.hasEqualForest(secondCheckout.currentView)).to.be.true;\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\texpect(tree.equals(secondTree)).to.be.true;\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\t\t\texpect(checkout.currentView.equals(secondCheckout.currentView)).to.be.true;\n\t\t\texpect(checkout.currentView.hasEqualForest(secondCheckout.currentView)).to.be.true;\n\t\t});\n\n\t\tit('can successfully rebase an ongoing local edit', async () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({ localMode: false });\n\t\t\tconst simpleTestTree = setUpTestTree(tree);\n\t\t\tconst { tree: secondTree } = setUpTestSharedTree({ containerRuntimeFactory, ...secondTreeOptions });\n\n\t\t\t// Sync initial tree\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst checkout = await checkoutFactory(tree);\n\t\t\tconst secondCheckout = await checkoutFactory(secondTree);\n\n\t\t\tconst newLeftNode = simpleTestTree.buildLeaf(simpleTestTree.generateNodeId());\n\t\t\tcheckout.openEdit();\n\t\t\tcheckout.applyChanges(...setTrait(simpleTestTree.left.traitLocation, [newLeftNode]));\n\n\t\t\t// Concurrently, the second client deletes the right node. This will not conflict with the operation performed\n\t\t\t// on the left trait on the first client.\n\t\t\tsecondCheckout.applyEdit(Change.delete(StableRange.only(simpleTestTree.right.translateId(secondTree))));\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\n\t\t\t// Deliver the remote change. Since there will not be any conflicts, the result should merge locally and both trait\n\t\t\t// modifications should be reflected in the current view.\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\n\t\t\tlet leftTrait = checkout.currentView.getTrait(simpleTestTree.left.traitLocation);\n\t\t\tlet rightTrait = checkout.currentView.getTrait(simpleTestTree.right.traitLocation);\n\t\t\texpect(leftTrait).deep.equals([newLeftNode.identifier]);\n\t\t\t// The remote deletion of the right node, while delivered, will not be reflected in the view yet.\n\t\t\texpect(rightTrait).deep.equals([simpleTestTree.right.identifier]);\n\n\t\t\tconst secondLeftTrait = secondCheckout.currentView.getTrait(\n\t\t\t\tsimpleTestTree.left.traitLocation.translate(secondTree)\n\t\t\t);\n\t\t\tconst secondRightTrait = secondCheckout.currentView.getTrait(\n\t\t\t\tsimpleTestTree.right.traitLocation.translate(secondTree)\n\t\t\t);\n\t\t\texpect(secondLeftTrait).deep.equals([simpleTestTree.left.translateId(secondTree)]);\n\t\t\texpect(secondRightTrait.length).equals(0);\n\n\t\t\t// Merge in the latest changes.\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tconst rebaseResult = checkout.rebaseCurrentEdit();\n\t\t\texpect(rebaseResult).equals(EditValidationResult.Valid);\n\t\t\tleftTrait = checkout.currentView.getTrait(simpleTestTree.left.traitLocation);\n\t\t\trightTrait = checkout.currentView.getTrait(simpleTestTree.right.traitLocation);\n\t\t\texpect(leftTrait).deep.equals([newLeftNode.identifier]);\n\t\t\texpect(rightTrait.length).equals(0);\n\n\t\t\tcheckout.closeEdit();\n\t\t\t// Again, call this prior to processing ops to accommodate PrefetchingCheckout\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\t\t\texpect(tree.equals(secondTree)).to.be.true;\n\t\t});\n\n\t\tit('can handle a failed rebase of an ongoing local edit', async () => {\n\t\t\tconst { tree, containerRuntimeFactory } = setUpTestSharedTree({ localMode: false });\n\t\t\tconst simpleTestTree = setUpTestTree(tree);\n\t\t\tconst { tree: secondTree } = setUpTestSharedTree({ containerRuntimeFactory, ...secondTreeOptions });\n\n\t\t\t// Sync initial tree\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\n\t\t\tconst checkout = await checkoutFactory(tree);\n\t\t\tconst secondCheckout = await checkoutFactory(secondTree);\n\n\t\t\tcheckout.openEdit();\n\t\t\t// Move the left node to after the right node\n\t\t\tcheckout.applyChanges(\n\t\t\t\t...Change.move(StableRange.only(simpleTestTree.left), StablePlace.after(simpleTestTree.right))\n\t\t\t);\n\n\t\t\t// Concurrently, the second client deletes the right node. This will conflict with the move operation by the first client.\n\t\t\tsecondCheckout.applyEdit(Change.delete(StableRange.only(simpleTestTree.right.translateId(secondTree))));\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\n\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\tawait checkout.waitForPendingUpdates();\n\t\t\tawait secondCheckout.waitForPendingUpdates();\n\n\t\t\t// Before rebasing, the first client should still see the right node and will have moved the left node after it.\n\t\t\tconst leftTrait = checkout.currentView.getTrait(simpleTestTree.left.traitLocation);\n\t\t\tconst rightTrait = checkout.currentView.getTrait(simpleTestTree.right.traitLocation);\n\t\t\texpect(leftTrait).deep.equals([]);\n\t\t\texpect(rightTrait).deep.equals([simpleTestTree.right.identifier, simpleTestTree.left.identifier]);\n\n\t\t\t// Merge in the latest changes.\n\t\t\tconst rebaseResult = checkout.rebaseCurrentEdit();\n\t\t\texpect(rebaseResult).equals(EditValidationResult.Invalid);\n\t\t\texpect(\n\t\t\t\tareRevisionViewsSemanticallyEqual(checkout.currentView, tree, secondCheckout.currentView, secondTree)\n\t\t\t).to.be.true;\n\t\t});\n\n\t\tit('can dispose and remove listeners', async () => {\n\t\t\tconst { checkout } = await setUpTestCheckout();\n\t\t\texpect(checkout.tree.listenerCount(SharedTreeEvent.EditCommitted)).to.equal(1);\n\t\t\tcheckout.dispose();\n\t\t\texpect(checkout.tree.listenerCount(SharedTreeEvent.EditCommitted)).to.equal(0);\n\t\t});\n\n\t\tadditionalTests?.();\n\t});\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { expect } from 'chai';
6
- import { memoizeGetter } from '../Common';
7
- describe('SharedTree common', () => {
6
+ import { filter, find, getOrCreate, identity, map, memoizeGetter, reduce } from '../Common';
7
+ describe('Common', () => {
8
8
  it('function memoizeGetter() correctly memoizes', () => {
9
9
  let x = 0;
10
10
  const getAndInc = () => x++;
@@ -21,5 +21,63 @@ describe('SharedTree common', () => {
21
21
  expect(obj.getCached).to.equal(2);
22
22
  expect(obj.getCached).to.equal(2); // Cached, no increment
23
23
  });
24
+ it('identity function returns its input', () => {
25
+ const inputs = [42, 'test', true];
26
+ for (const input of inputs) {
27
+ expect(identity(input)).to.equal(input);
28
+ }
29
+ });
30
+ describe('getOrCreate', () => {
31
+ it('returns existing values', () => {
32
+ const map = new Map();
33
+ const key = 42;
34
+ const value = 'test';
35
+ map.set(key, value);
36
+ expect(getOrCreate(map, key, () => expect.fail('should not call value creator for existing values'))).to.equal(value);
37
+ });
38
+ it('inserts new values', () => {
39
+ const map = new Map();
40
+ const key = 42;
41
+ const value = 'test';
42
+ expect(getOrCreate(map, key, () => value)).to.equal(value);
43
+ expect(map.get(key)).to.equal(value);
44
+ });
45
+ });
46
+ it('maps iterables correctly', () => {
47
+ const inputs = [0, 1, 2, 3];
48
+ const mapper = (n) => n * 2;
49
+ expect([...map(inputs, mapper)]).to.deep.equal(inputs.map(mapper));
50
+ });
51
+ it('filters iterables correctly', () => {
52
+ const inputs = [0, 1, 2, 3];
53
+ const predicate = (n) => n < 2;
54
+ expect([...filter(inputs, predicate)]).to.deep.equal(inputs.filter(predicate));
55
+ });
56
+ describe('reduces iterables', () => {
57
+ const reducer = (p, c) => p + c;
58
+ it('that are empty', () => {
59
+ const inputs = [];
60
+ expect(reduce(inputs, reducer)).to.be.undefined;
61
+ });
62
+ it('that have a single element', () => {
63
+ const inputs = [42];
64
+ expect(reduce(inputs, reducer)).to.equal(inputs.reduce(reducer));
65
+ });
66
+ it('with no initial value', () => {
67
+ const inputs = [0, 1, 2, 3];
68
+ expect(reduce(inputs, reducer)).to.equal(inputs.reduce(reducer));
69
+ });
70
+ it('with an initial value', () => {
71
+ const inputs = [0, 1, 2, 3];
72
+ expect(reduce(inputs, reducer, 42)).to.equal(inputs.reduce(reducer, 42));
73
+ });
74
+ });
75
+ it('finds elements in iterables', () => {
76
+ const inputs = [0, 1, 2, 3];
77
+ const predicateFind = (n) => n >= 2;
78
+ expect(find(inputs, predicateFind)).to.equal(inputs.find(predicateFind));
79
+ const predicateNever = (n) => n < 0;
80
+ expect(find(inputs, predicateNever)).to.equal(inputs.find(predicateNever));
81
+ });
24
82
  });
25
83
  //# sourceMappingURL=Common.tests.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Common.tests.js","sourceRoot":"","sources":["../../src/test/Common.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACtD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG;YACX,IAAI,WAAW;gBACd,OAAO,SAAS,EAAE,CAAC;YACpB,CAAC;YACD,IAAI,SAAS;gBACZ,OAAO,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;YACtD,CAAC;SACD,CAAC;QAEF,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;IAC3D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { expect } from 'chai';\nimport { memoizeGetter } from '../Common';\n\ndescribe('SharedTree common', () => {\n\tit('function memoizeGetter() correctly memoizes', () => {\n\t\tlet x = 0;\n\t\tconst getAndInc = () => x++;\n\t\tconst obj = {\n\t\t\tget getUncached(): number {\n\t\t\t\treturn getAndInc();\n\t\t\t},\n\t\t\tget getCached(): number {\n\t\t\t\treturn memoizeGetter(this, 'getCached', getAndInc());\n\t\t\t},\n\t\t};\n\n\t\texpect(obj.getUncached).to.equal(0);\n\t\texpect(obj.getUncached).to.equal(1);\n\t\texpect(obj.getCached).to.equal(2);\n\t\texpect(obj.getCached).to.equal(2); // Cached, no increment\n\t});\n});\n"]}
1
+ {"version":3,"file":"Common.tests.js","sourceRoot":"","sources":["../../src/test/Common.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 { filter, find, getOrCreate, identity, map, memoizeGetter, reduce } from '../Common';\n\ndescribe('Common', () => {\n\tit('function memoizeGetter() correctly memoizes', () => {\n\t\tlet x = 0;\n\t\tconst getAndInc = () => x++;\n\t\tconst obj = {\n\t\t\tget getUncached(): number {\n\t\t\t\treturn getAndInc();\n\t\t\t},\n\t\t\tget getCached(): number {\n\t\t\t\treturn memoizeGetter(this, 'getCached', getAndInc());\n\t\t\t},\n\t\t};\n\n\t\texpect(obj.getUncached).to.equal(0);\n\t\texpect(obj.getUncached).to.equal(1);\n\t\texpect(obj.getCached).to.equal(2);\n\t\texpect(obj.getCached).to.equal(2); // Cached, no increment\n\t});\n\n\tit('identity function returns its input', () => {\n\t\tconst inputs = [42, 'test', true];\n\t\tfor (const input of inputs) {\n\t\t\texpect(identity(input)).to.equal(input);\n\t\t}\n\t});\n\n\tdescribe('getOrCreate', () => {\n\t\tit('returns existing values', () => {\n\t\t\tconst map = new Map<number, string>();\n\t\t\tconst key = 42;\n\t\t\tconst value = 'test';\n\t\t\tmap.set(key, value);\n\t\t\texpect(\n\t\t\t\tgetOrCreate(map, key, () => expect.fail('should not call value creator for existing values'))\n\t\t\t).to.equal(value);\n\t\t});\n\n\t\tit('inserts new values', () => {\n\t\t\tconst map = new Map<number, string>();\n\t\t\tconst key = 42;\n\t\t\tconst value = 'test';\n\t\t\texpect(getOrCreate(map, key, () => value)).to.equal(value);\n\t\t\texpect(map.get(key)).to.equal(value);\n\t\t});\n\t});\n\n\tit('maps iterables correctly', () => {\n\t\tconst inputs = [0, 1, 2, 3];\n\t\tconst mapper = (n: number) => n * 2;\n\t\texpect([...map(inputs, mapper)]).to.deep.equal(inputs.map(mapper));\n\t});\n\n\tit('filters iterables correctly', () => {\n\t\tconst inputs = [0, 1, 2, 3];\n\t\tconst predicate = (n: number) => n < 2;\n\t\texpect([...filter(inputs, predicate)]).to.deep.equal(inputs.filter(predicate));\n\t});\n\n\tdescribe('reduces iterables', () => {\n\t\tconst reducer = (p: number, c: number) => p + c;\n\n\t\tit('that are empty', () => {\n\t\t\tconst inputs: number[] = [];\n\t\t\texpect(reduce(inputs, reducer)).to.be.undefined;\n\t\t});\n\n\t\tit('that have a single element', () => {\n\t\t\tconst inputs = [42];\n\t\t\texpect(reduce(inputs, reducer)).to.equal(inputs.reduce(reducer));\n\t\t});\n\n\t\tit('with no initial value', () => {\n\t\t\tconst inputs = [0, 1, 2, 3];\n\t\t\texpect(reduce(inputs, reducer)).to.equal(inputs.reduce(reducer));\n\t\t});\n\n\t\tit('with an initial value', () => {\n\t\t\tconst inputs = [0, 1, 2, 3];\n\t\t\texpect(reduce(inputs, reducer, 42)).to.equal(inputs.reduce(reducer, 42));\n\t\t});\n\t});\n\n\tit('finds elements in iterables', () => {\n\t\tconst inputs = [0, 1, 2, 3];\n\t\tconst predicateFind = (n: number) => n >= 2;\n\t\texpect(find(inputs, predicateFind)).to.equal(inputs.find(predicateFind));\n\t\tconst predicateNever = (n: number) => n < 0;\n\t\texpect(find(inputs, predicateNever)).to.equal(inputs.find(predicateNever));\n\t});\n});\n"]}
@@ -3,4 +3,4 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  export {};
6
- //# sourceMappingURL=BasicCheckout.tests.d.ts.map
6
+ //# sourceMappingURL=EagerCheckout.tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EagerCheckout.tests.d.ts","sourceRoot":"","sources":["../../src/test/EagerCheckout.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,20 @@
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 { Change, StableRange } from '../ChangeTypes';
7
+ import { EagerCheckout } from '../EagerCheckout';
8
+ import { checkoutTests } from './Checkout.tests';
9
+ import { setUpTestSharedTree, setUpTestTree } from './utilities/TestUtilities';
10
+ checkoutTests('EagerCheckout', async (tree) => Promise.resolve(new EagerCheckout(tree)), () => {
11
+ it('updates eagerly', () => {
12
+ const { tree } = setUpTestSharedTree();
13
+ const testTree = setUpTestTree(tree);
14
+ const checkout = new EagerCheckout(tree);
15
+ expect(tree.currentView.equals(checkout.currentView)).to.be.true;
16
+ tree.applyEdit(Change.delete(StableRange.only(testTree.left)));
17
+ expect(tree.currentView.equals(checkout.currentView)).to.be.true;
18
+ });
19
+ });
20
+ //# sourceMappingURL=EagerCheckout.tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EagerCheckout.tests.js","sourceRoot":"","sources":["../../src/test/EagerCheckout.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/E,aAAa,CACZ,eAAe,EACf,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,EACxD,GAAG,EAAE;IACJ,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,mBAAmB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAClE,CAAC,CAAC,CAAC;AACJ,CAAC,CACD,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { expect } from 'chai';\nimport { Change, StableRange } from '../ChangeTypes';\nimport { EagerCheckout } from '../EagerCheckout';\nimport { checkoutTests } from './Checkout.tests';\nimport { setUpTestSharedTree, setUpTestTree } from './utilities/TestUtilities';\n\ncheckoutTests(\n\t'EagerCheckout',\n\tasync (tree) => Promise.resolve(new EagerCheckout(tree)),\n\t() => {\n\t\tit('updates eagerly', () => {\n\t\t\tconst { tree } = setUpTestSharedTree();\n\t\t\tconst testTree = setUpTestTree(tree);\n\t\t\tconst checkout = new EagerCheckout(tree);\n\n\t\t\texpect(tree.currentView.equals(checkout.currentView)).to.be.true;\n\t\t\ttree.applyEdit(Change.delete(StableRange.only(testTree.left)));\n\t\t\texpect(tree.currentView.equals(checkout.currentView)).to.be.true;\n\t\t});\n\t}\n);\n"]}
@@ -3,7 +3,8 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { expect } from 'chai';
6
- import { makeEmptyNode, makeTestNode, deepCompareNodes } from './utilities/TestUtilities';
6
+ import { deepCompareNodes } from '../EditUtilities';
7
+ import { refreshTestTree } from './utilities/TestUtilities';
7
8
  // TODO #45414: Re-enable when compareEdits compares the actual changes instead of just the edit IDs.
8
9
  // Commented out instead of skipped to avoid linting errors.
9
10
  // describe('compareSequencedEdits', () => {
@@ -11,10 +12,10 @@ import { makeEmptyNode, makeTestNode, deepCompareNodes } from './utilities/TestU
11
12
  // const node = makeTestNode();
12
13
  // const editId = '75dd0d7d-ea87-40cf-8860-dc2b9d827597' as EditId;
13
14
  // const editA: Edit = {
14
- // changes: [Delete.create(StableRange.only(node))],
15
+ // changes: [Change.delete(StableRange.only(node))],
15
16
  // };
16
17
  // const sequencedEditB: Edit = {
17
- // changes: [Delete.create(StableRange.only(node))],
18
+ // changes: [Change.delete(StableRange.only(node))],
18
19
  // };
19
20
  // expect(compareEdits(editA, sequencedEditB)).to.be.true;
20
21
  // });
@@ -22,31 +23,38 @@ import { makeEmptyNode, makeTestNode, deepCompareNodes } from './utilities/TestU
22
23
  // const node = makeTestNode();
23
24
  // const nodeDestination = makeTestNode();
24
25
  // const sequencedEditA: Edit = {
25
- // changes: [Delete.create(StableRange.only(node))],
26
+ // changes: [Change.delete(StableRange.only(node))],
26
27
  // id: '7366efae-f96a-4f5d-9c6c-eea62ac6dffb' as EditId,
27
28
  // };
28
29
  // const sequencedEditB: Edit = {
29
- // changes: [...Move.create(StableRange.only(node), StablePlace.before(nodeDestination))],
30
+ // changes: [...Change.move(StableRange.only(node), StablePlace.before(nodeDestination))],
30
31
  // id: '57cb9fa9-9d1d-49eb-919a-5636ed55a65a' as EditId,
31
32
  // };
32
33
  // expect(compareEdits(sequencedEditA, sequencedEditB)).to.be.false;
33
34
  // });
34
35
  // });
35
36
  describe('deepCompareNodes', () => {
37
+ const testTree = refreshTestTree();
36
38
  it('correctly compares two empty nodes', () => {
37
- const nodeId = '8d39e7ee-890a-4443-aef7-16d7e8ef3de0';
38
- expect(deepCompareNodes(makeEmptyNode(nodeId), makeEmptyNode(nodeId))).to.be.true;
39
+ const nodeId = testTree.generateNodeId();
40
+ expect(deepCompareNodes(testTree.buildLeaf(nodeId), testTree.buildLeaf(nodeId))).to.be.true;
39
41
  });
40
42
  it('correctly compares two deeply equal nodes', () => {
41
- const nodeId = 'a5946b8c-fb40-4631-81c8-c5473da50359';
42
- expect(deepCompareNodes(makeTestNode(nodeId), makeTestNode(nodeId))).to.be.true;
43
+ const otherTree = {
44
+ definition: testTree.definition,
45
+ identifier: testTree.identifier,
46
+ traits: {
47
+ left: [{ definition: testTree.left.definition, identifier: testTree.left.identifier, traits: {} }],
48
+ right: [{ definition: testTree.right.definition, identifier: testTree.right.identifier, traits: {} }],
49
+ },
50
+ };
51
+ expect(deepCompareNodes(testTree, otherTree)).to.be.true;
43
52
  });
44
53
  it('returns false for unequal nodes', () => {
45
- const nodeId = '30df2134-f347-494b-9f47-ddc9a73f227b';
46
- expect(deepCompareNodes(makeEmptyNode(), makeEmptyNode())).to.be.false;
47
- expect(deepCompareNodes(makeEmptyNode(nodeId), makeTestNode(nodeId))).to.be.false;
48
- expect(deepCompareNodes(makeEmptyNode(), makeTestNode())).to.be.false;
49
- expect(deepCompareNodes(makeTestNode(), makeEmptyNode())).to.be.false;
54
+ expect(deepCompareNodes(testTree.buildLeaf(testTree.generateNodeId()), testTree.buildLeaf(testTree.generateNodeId()))).to.be.false;
55
+ expect(deepCompareNodes(testTree.buildLeaf(testTree.identifier), testTree)).to.be.false;
56
+ expect(deepCompareNodes(testTree.buildLeaf(testTree.identifier), testTree)).to.be.false;
57
+ expect(deepCompareNodes(testTree, testTree.buildLeaf(testTree.identifier))).to.be.false;
50
58
  });
51
59
  });
52
60
  //# sourceMappingURL=Edit.tests.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Edit.tests.js","sourceRoot":"","sources":["../../src/test/Edit.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE1F,qGAAqG;AACrG,mEAAmE;AACnE,4CAA4C;AAC5C,8DAA8D;AAC9D,iCAAiC;AACjC,qEAAqE;AACrE,0BAA0B;AAC1B,uDAAuD;AACvD,OAAO;AAEP,mCAAmC;AACnC,uDAAuD;AACvD,OAAO;AAEP,4DAA4D;AAC5D,OAAO;AAEP,kEAAkE;AAClE,iCAAiC;AACjC,4CAA4C;AAE5C,mCAAmC;AACnC,uDAAuD;AACvD,2DAA2D;AAC3D,OAAO;AAEP,mCAAmC;AACnC,6FAA6F;AAC7F,2DAA2D;AAC3D,OAAO;AAEP,sEAAsE;AACtE,OAAO;AACP,MAAM;AAEN,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,sCAAgD,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,sCAAgD,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,sCAAgD,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACvE,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAClF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACtE,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IACvE,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { expect } from 'chai';\nimport { NodeId } from '../Identifiers';\nimport { makeEmptyNode, makeTestNode, deepCompareNodes } from './utilities/TestUtilities';\n\n// TODO #45414: Re-enable when compareEdits compares the actual changes instead of just the edit IDs.\n// \t\t\t Commented out instead of skipped to avoid linting errors.\n// describe('compareSequencedEdits', () => {\n// \tit('correctly compares two equal sequenced edits', () => {\n// \t\tconst node = makeTestNode();\n// \t\tconst editId = '75dd0d7d-ea87-40cf-8860-dc2b9d827597' as EditId;\n// \t\tconst editA: Edit = {\n// \t\t\tchanges: [Delete.create(StableRange.only(node))],\n// \t\t};\n\n// \t\tconst sequencedEditB: Edit = {\n// \t\t\tchanges: [Delete.create(StableRange.only(node))],\n// \t\t};\n\n// \t\texpect(compareEdits(editA, sequencedEditB)).to.be.true;\n// \t});\n\n// \tit('correctly compares two non-equal sequenced edits', () => {\n// \t\tconst node = makeTestNode();\n// \t\tconst nodeDestination = makeTestNode();\n\n// \t\tconst sequencedEditA: Edit = {\n// \t\t\tchanges: [Delete.create(StableRange.only(node))],\n// \t\t\tid: '7366efae-f96a-4f5d-9c6c-eea62ac6dffb' as EditId,\n// \t\t};\n\n// \t\tconst sequencedEditB: Edit = {\n// \t\t\tchanges: [...Move.create(StableRange.only(node), StablePlace.before(nodeDestination))],\n// \t\t\tid: '57cb9fa9-9d1d-49eb-919a-5636ed55a65a' as EditId,\n// \t\t};\n\n// \t\texpect(compareEdits(sequencedEditA, sequencedEditB)).to.be.false;\n// \t});\n// });\n\ndescribe('deepCompareNodes', () => {\n\tit('correctly compares two empty nodes', () => {\n\t\tconst nodeId = '8d39e7ee-890a-4443-aef7-16d7e8ef3de0' as NodeId;\n\t\texpect(deepCompareNodes(makeEmptyNode(nodeId), makeEmptyNode(nodeId))).to.be.true;\n\t});\n\n\tit('correctly compares two deeply equal nodes', () => {\n\t\tconst nodeId = 'a5946b8c-fb40-4631-81c8-c5473da50359' as NodeId;\n\t\texpect(deepCompareNodes(makeTestNode(nodeId), makeTestNode(nodeId))).to.be.true;\n\t});\n\n\tit('returns false for unequal nodes', () => {\n\t\tconst nodeId = '30df2134-f347-494b-9f47-ddc9a73f227b' as NodeId;\n\t\texpect(deepCompareNodes(makeEmptyNode(), makeEmptyNode())).to.be.false;\n\t\texpect(deepCompareNodes(makeEmptyNode(nodeId), makeTestNode(nodeId))).to.be.false;\n\t\texpect(deepCompareNodes(makeEmptyNode(), makeTestNode())).to.be.false;\n\t\texpect(deepCompareNodes(makeTestNode(), makeEmptyNode())).to.be.false;\n\t});\n});\n"]}
1
+ {"version":3,"file":"Edit.tests.js","sourceRoot":"","sources":["../../src/test/Edit.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,qGAAqG;AACrG,mEAAmE;AACnE,4CAA4C;AAC5C,8DAA8D;AAC9D,iCAAiC;AACjC,qEAAqE;AACrE,0BAA0B;AAC1B,uDAAuD;AACvD,OAAO;AAEP,mCAAmC;AACnC,uDAAuD;AACvD,OAAO;AAEP,4DAA4D;AAC5D,OAAO;AAEP,kEAAkE;AAClE,iCAAiC;AACjC,4CAA4C;AAE5C,mCAAmC;AACnC,uDAAuD;AACvD,2DAA2D;AAC3D,OAAO;AAEP,mCAAmC;AACnC,6FAA6F;AAC7F,2DAA2D;AAC3D,OAAO;AAEP,sEAAsE;AACtE,OAAO;AACP,MAAM;AAEN,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IAEnC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACpD,MAAM,SAAS,GAAe;YAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,MAAM,EAAE;gBACP,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;gBAClG,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;aACrG;SACD,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC1C,MAAM,CACL,gBAAgB,CACf,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,EAC7C,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAC7C,CACD,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACd,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACxF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACxF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IACzF,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { expect } from 'chai';\nimport { deepCompareNodes } from '../EditUtilities';\nimport { ChangeNode } from '../persisted-types';\nimport { refreshTestTree } from './utilities/TestUtilities';\n\n// TODO #45414: Re-enable when compareEdits compares the actual changes instead of just the edit IDs.\n// \t\t\t Commented out instead of skipped to avoid linting errors.\n// describe('compareSequencedEdits', () => {\n// \tit('correctly compares two equal sequenced edits', () => {\n// \t\tconst node = makeTestNode();\n// \t\tconst editId = '75dd0d7d-ea87-40cf-8860-dc2b9d827597' as EditId;\n// \t\tconst editA: Edit = {\n// \t\t\tchanges: [Change.delete(StableRange.only(node))],\n// \t\t};\n\n// \t\tconst sequencedEditB: Edit = {\n// \t\t\tchanges: [Change.delete(StableRange.only(node))],\n// \t\t};\n\n// \t\texpect(compareEdits(editA, sequencedEditB)).to.be.true;\n// \t});\n\n// \tit('correctly compares two non-equal sequenced edits', () => {\n// \t\tconst node = makeTestNode();\n// \t\tconst nodeDestination = makeTestNode();\n\n// \t\tconst sequencedEditA: Edit = {\n// \t\t\tchanges: [Change.delete(StableRange.only(node))],\n// \t\t\tid: '7366efae-f96a-4f5d-9c6c-eea62ac6dffb' as EditId,\n// \t\t};\n\n// \t\tconst sequencedEditB: Edit = {\n// \t\t\tchanges: [...Change.move(StableRange.only(node), StablePlace.before(nodeDestination))],\n// \t\t\tid: '57cb9fa9-9d1d-49eb-919a-5636ed55a65a' as EditId,\n// \t\t};\n\n// \t\texpect(compareEdits(sequencedEditA, sequencedEditB)).to.be.false;\n// \t});\n// });\n\ndescribe('deepCompareNodes', () => {\n\tconst testTree = refreshTestTree();\n\n\tit('correctly compares two empty nodes', () => {\n\t\tconst nodeId = testTree.generateNodeId();\n\t\texpect(deepCompareNodes(testTree.buildLeaf(nodeId), testTree.buildLeaf(nodeId))).to.be.true;\n\t});\n\n\tit('correctly compares two deeply equal nodes', () => {\n\t\tconst otherTree: ChangeNode = {\n\t\t\tdefinition: testTree.definition,\n\t\t\tidentifier: testTree.identifier,\n\t\t\ttraits: {\n\t\t\t\tleft: [{ definition: testTree.left.definition, identifier: testTree.left.identifier, traits: {} }],\n\t\t\t\tright: [{ definition: testTree.right.definition, identifier: testTree.right.identifier, traits: {} }],\n\t\t\t},\n\t\t};\n\t\texpect(deepCompareNodes(testTree, otherTree)).to.be.true;\n\t});\n\n\tit('returns false for unequal nodes', () => {\n\t\texpect(\n\t\t\tdeepCompareNodes(\n\t\t\t\ttestTree.buildLeaf(testTree.generateNodeId()),\n\t\t\t\ttestTree.buildLeaf(testTree.generateNodeId())\n\t\t\t)\n\t\t).to.be.false;\n\t\texpect(deepCompareNodes(testTree.buildLeaf(testTree.identifier), testTree)).to.be.false;\n\t\texpect(deepCompareNodes(testTree.buildLeaf(testTree.identifier), testTree)).to.be.false;\n\t\texpect(deepCompareNodes(testTree, testTree.buildLeaf(testTree.identifier))).to.be.false;\n\t});\n});\n"]}
@@ -3,4 +3,4 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  export {};
6
- //# sourceMappingURL=Anchors.glassBox.tests.d.ts.map
6
+ //# sourceMappingURL=EditLog.perf.tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditLog.perf.tests.d.ts","sourceRoot":"","sources":["../../src/test/EditLog.perf.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,30 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { benchmark, BenchmarkType } from '@fluid-tools/benchmark';
6
+ import { Change, StablePlace } from '../ChangeTypes';
7
+ import { EditLog } from '../EditLog';
8
+ import { newEdit } from '../EditUtilities';
9
+ import { setUpTestTree } from './utilities/TestUtilities';
10
+ describe('EditLog Perf', () => {
11
+ const insertNumbers = [10, 50, 100, 500, 1000];
12
+ insertNumbers.forEach((numberOfInserts) => {
13
+ const edits = [];
14
+ const testTree = setUpTestTree();
15
+ for (let i = 0; i < numberOfInserts; i++) {
16
+ edits.push(newEdit(Change.insertTree(testTree.buildLeaf(), StablePlace.atEndOf(testTree.traitLocation))));
17
+ }
18
+ benchmark({
19
+ type: BenchmarkType.Measurement,
20
+ title: `process ${numberOfInserts} sequenced inserts`,
21
+ benchmarkFn: () => {
22
+ const log = new EditLog();
23
+ edits.forEach((edit) => {
24
+ log.addSequencedEdit(edit, { sequenceNumber: 1, referenceSequenceNumber: 0 });
25
+ });
26
+ },
27
+ });
28
+ });
29
+ });
30
+ //# sourceMappingURL=EditLog.perf.tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditLog.perf.tests.js","sourceRoot":"","sources":["../../src/test/EditLog.perf.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC7B,MAAM,aAAa,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAE/C,aAAa,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,EAAE;QACzC,MAAM,KAAK,GAAmB,EAAE,CAAC;QAEjC,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE;YACzC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1G;QAED,SAAS,CAAC;YACT,IAAI,EAAE,aAAa,CAAC,WAAW;YAC/B,KAAK,EAAE,WAAW,eAAe,oBAAoB;YACrD,WAAW,EAAE,GAAG,EAAE;gBACjB,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;gBAE1B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACtB,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/E,CAAC,CAAC,CAAC;YACJ,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { benchmark, BenchmarkType } from '@fluid-tools/benchmark';\nimport { Change, StablePlace } from '../ChangeTypes';\nimport { EditLog } from '../EditLog';\nimport { newEdit } from '../EditUtilities';\nimport { Edit } from '../persisted-types';\nimport { setUpTestTree } from './utilities/TestUtilities';\n\ndescribe('EditLog Perf', () => {\n\tconst insertNumbers = [10, 50, 100, 500, 1000];\n\n\tinsertNumbers.forEach((numberOfInserts) => {\n\t\tconst edits: Edit<Change>[] = [];\n\n\t\tconst testTree = setUpTestTree();\n\t\tfor (let i = 0; i < numberOfInserts; i++) {\n\t\t\tedits.push(newEdit(Change.insertTree(testTree.buildLeaf(), StablePlace.atEndOf(testTree.traitLocation))));\n\t\t}\n\n\t\tbenchmark({\n\t\t\ttype: BenchmarkType.Measurement,\n\t\t\ttitle: `process ${numberOfInserts} sequenced inserts`,\n\t\t\tbenchmarkFn: () => {\n\t\t\t\tconst log = new EditLog();\n\n\t\t\t\tedits.forEach((edit) => {\n\t\t\t\t\tlog.addSequencedEdit(edit, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t});\n});\n"]}
@@ -6,7 +6,7 @@ import { expect } from 'chai';
6
6
  import { IsoBuffer } from '@fluidframework/common-utils';
7
7
  import { EditLog, separateEditAndId } from '../EditLog';
8
8
  import { assertNotUndefined } from '../Common';
9
- import { newEdit } from '../generic';
9
+ import { newEdit } from '../EditUtilities';
10
10
  /**
11
11
  * Creates an edit log with the specified number of chunks, stored as handles instead of edits.
12
12
  * @param numberOfChunks - The number of chunks to add to the edit log.
@@ -14,7 +14,7 @@ import { newEdit } from '../generic';
14
14
  * @param editsPerChunkOnEditLog - The number of edits per chunk that gets set for future edits to the edit log.
15
15
  * @returns The edit log created with handles.
16
16
  */
17
- function createEditLogWithHandles(numberOfChunks = 2, editsPerChunk = 5, editsPerChunkOnEditLog = 100) {
17
+ function createEditLogWithHandles(numberOfChunks = 2, editsPerChunk = 5) {
18
18
  const editIds = [];
19
19
  const editChunks = [];
20
20
  let inProgessChunk = [];
@@ -29,21 +29,25 @@ function createEditLogWithHandles(numberOfChunks = 2, editsPerChunk = 5, editsPe
29
29
  }
30
30
  const handles = editChunks.map((chunk) => {
31
31
  return {
32
+ absolutePath: 'test blob',
32
33
  get: async () => {
33
34
  return IsoBuffer.from(JSON.stringify({ edits: chunk }));
34
35
  },
35
36
  };
36
37
  });
37
38
  let startRevision = 0;
38
- const handlesWithKeys = handles.map((chunk) => {
39
+ const handlesWithKeys = handles.map((baseHandle) => {
39
40
  const handle = {
40
41
  startRevision,
41
- chunk,
42
+ chunk: {
43
+ get: async () => JSON.parse(IsoBuffer.from(await baseHandle.get()).toString()).edits,
44
+ baseHandle,
45
+ },
42
46
  };
43
47
  startRevision = startRevision + 5;
44
48
  return handle;
45
49
  });
46
- const editLog = new EditLog({ editChunks: handlesWithKeys, editIds }, undefined, editsPerChunkOnEditLog);
50
+ const editLog = new EditLog({ editChunks: handlesWithKeys, editIds });
47
51
  return editLog;
48
52
  }
49
53
  describe('EditLog', () => {
@@ -244,7 +248,7 @@ describe('EditLog', () => {
244
248
  it('can add edits to logs with varying edit chunk sizes', async () => {
245
249
  const numberOfChunks = 2;
246
250
  const editsPerChunk = 5;
247
- const log = createEditLogWithHandles(numberOfChunks, editsPerChunk, 100);
251
+ const log = createEditLogWithHandles(numberOfChunks, editsPerChunk);
248
252
  // Load the edits for the last edit chunk
249
253
  await log.getEditAtIndex(numberOfChunks * editsPerChunk - 1);
250
254
  // Add a sequenced edit and check it's been added