@fluid-experimental/tree 2.0.0-rc.2.0.1 → 2.0.0-rc.3.0.0

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 (571) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/api-report/experimental-tree.api.md +2 -2
  3. package/dist/ChangeCompression.d.ts +2 -2
  4. package/dist/ChangeCompression.d.ts.map +1 -1
  5. package/dist/ChangeCompression.js +1 -1
  6. package/dist/ChangeCompression.js.map +1 -1
  7. package/dist/ChangeTypes.d.ts +1 -1
  8. package/dist/ChangeTypes.d.ts.map +1 -1
  9. package/dist/ChangeTypes.js +4 -4
  10. package/dist/ChangeTypes.js.map +1 -1
  11. package/dist/Checkout.d.ts +3 -3
  12. package/dist/Checkout.d.ts.map +1 -1
  13. package/dist/Checkout.js +17 -17
  14. package/dist/Checkout.js.map +1 -1
  15. package/dist/EditLog.d.ts +1 -1
  16. package/dist/EditLog.d.ts.map +1 -1
  17. package/dist/EditLog.js +9 -9
  18. package/dist/EditLog.js.map +1 -1
  19. package/dist/EditUtilities.d.ts +3 -3
  20. package/dist/EditUtilities.d.ts.map +1 -1
  21. package/dist/EditUtilities.js +6 -6
  22. package/dist/EditUtilities.js.map +1 -1
  23. package/dist/Forest.d.ts.map +1 -1
  24. package/dist/Forest.js +23 -23
  25. package/dist/Forest.js.map +1 -1
  26. package/dist/HistoryEditFactory.d.ts +1 -1
  27. package/dist/HistoryEditFactory.d.ts.map +1 -1
  28. package/dist/HistoryEditFactory.js +7 -7
  29. package/dist/HistoryEditFactory.js.map +1 -1
  30. package/dist/IdConversion.d.ts.map +1 -1
  31. package/dist/IdConversion.js.map +1 -1
  32. package/dist/LogViewer.d.ts +2 -2
  33. package/dist/LogViewer.d.ts.map +1 -1
  34. package/dist/LogViewer.js +7 -7
  35. package/dist/LogViewer.js.map +1 -1
  36. package/dist/MergeHealth.d.ts.map +1 -1
  37. package/dist/MergeHealth.js +1 -1
  38. package/dist/MergeHealth.js.map +1 -1
  39. package/dist/NodeIdUtilities.d.ts +1 -1
  40. package/dist/NodeIdUtilities.d.ts.map +1 -1
  41. package/dist/NodeIdUtilities.js +1 -1
  42. package/dist/NodeIdUtilities.js.map +1 -1
  43. package/dist/PayloadUtilities.d.ts.map +1 -1
  44. package/dist/PayloadUtilities.js +2 -2
  45. package/dist/PayloadUtilities.js.map +1 -1
  46. package/dist/ReconciliationPath.d.ts +1 -1
  47. package/dist/ReconciliationPath.d.ts.map +1 -1
  48. package/dist/ReconciliationPath.js.map +1 -1
  49. package/dist/RevisionValueCache.d.ts.map +1 -1
  50. package/dist/RevisionValueCache.js +2 -2
  51. package/dist/RevisionValueCache.js.map +1 -1
  52. package/dist/RevisionView.d.ts +2 -2
  53. package/dist/RevisionView.d.ts.map +1 -1
  54. package/dist/RevisionView.js.map +1 -1
  55. package/dist/SerializationUtilities.d.ts +1 -1
  56. package/dist/SerializationUtilities.d.ts.map +1 -1
  57. package/dist/SerializationUtilities.js.map +1 -1
  58. package/dist/SharedTree.d.ts +8 -7
  59. package/dist/SharedTree.d.ts.map +1 -1
  60. package/dist/SharedTree.js +78 -78
  61. package/dist/SharedTree.js.map +1 -1
  62. package/dist/SharedTreeEncoder.d.ts +1 -1
  63. package/dist/SharedTreeEncoder.d.ts.map +1 -1
  64. package/dist/SharedTreeEncoder.js +31 -31
  65. package/dist/SharedTreeEncoder.js.map +1 -1
  66. package/dist/Summary.d.ts +2 -2
  67. package/dist/Summary.d.ts.map +1 -1
  68. package/dist/Summary.js +2 -2
  69. package/dist/Summary.js.map +1 -1
  70. package/dist/SummaryBackCompatibility.d.ts.map +1 -1
  71. package/dist/SummaryBackCompatibility.js.map +1 -1
  72. package/dist/SummaryTestUtilities.d.ts +1 -1
  73. package/dist/SummaryTestUtilities.d.ts.map +1 -1
  74. package/dist/SummaryTestUtilities.js.map +1 -1
  75. package/dist/Transaction.d.ts +3 -3
  76. package/dist/Transaction.d.ts.map +1 -1
  77. package/dist/Transaction.js +3 -3
  78. package/dist/Transaction.js.map +1 -1
  79. package/dist/TransactionInternal.d.ts +3 -3
  80. package/dist/TransactionInternal.d.ts.map +1 -1
  81. package/dist/TransactionInternal.js +6 -6
  82. package/dist/TransactionInternal.js.map +1 -1
  83. package/dist/TreeCompressor.d.ts +5 -1
  84. package/dist/TreeCompressor.d.ts.map +1 -1
  85. package/dist/TreeCompressor.js +5 -5
  86. package/dist/TreeCompressor.js.map +1 -1
  87. package/dist/TreeNodeHandle.d.ts +1 -1
  88. package/dist/TreeNodeHandle.d.ts.map +1 -1
  89. package/dist/TreeNodeHandle.js.map +1 -1
  90. package/dist/TreeView.d.ts +1 -1
  91. package/dist/TreeView.d.ts.map +1 -1
  92. package/dist/TreeView.js +2 -3
  93. package/dist/TreeView.js.map +1 -1
  94. package/dist/UuidUtilities.d.ts.map +1 -1
  95. package/dist/UuidUtilities.js.map +1 -1
  96. package/dist/id-compressor/AppendOnlySortedMap.d.ts.map +1 -1
  97. package/dist/id-compressor/AppendOnlySortedMap.js +3 -3
  98. package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -1
  99. package/dist/id-compressor/IdCompressor.d.ts +1 -1
  100. package/dist/id-compressor/IdCompressor.d.ts.map +1 -1
  101. package/dist/id-compressor/IdCompressor.js +25 -26
  102. package/dist/id-compressor/IdCompressor.js.map +1 -1
  103. package/dist/id-compressor/IdRange.d.ts.map +1 -1
  104. package/dist/id-compressor/IdRange.js +2 -2
  105. package/dist/id-compressor/IdRange.js.map +1 -1
  106. package/dist/id-compressor/NumericUuid.d.ts.map +1 -1
  107. package/dist/id-compressor/NumericUuid.js +2 -1
  108. package/dist/id-compressor/NumericUuid.js.map +1 -1
  109. package/dist/id-compressor/SessionIdNormalizer.d.ts.map +1 -1
  110. package/dist/id-compressor/SessionIdNormalizer.js +8 -9
  111. package/dist/id-compressor/SessionIdNormalizer.js.map +1 -1
  112. package/dist/migration-shim/migrationDeltaHandler.d.ts +1 -1
  113. package/dist/migration-shim/migrationDeltaHandler.d.ts.map +1 -1
  114. package/dist/migration-shim/migrationDeltaHandler.js +11 -11
  115. package/dist/migration-shim/migrationDeltaHandler.js.map +1 -1
  116. package/dist/migration-shim/migrationShim.d.ts +8 -4
  117. package/dist/migration-shim/migrationShim.d.ts.map +1 -1
  118. package/dist/migration-shim/migrationShim.js +13 -13
  119. package/dist/migration-shim/migrationShim.js.map +1 -1
  120. package/dist/migration-shim/migrationShimFactory.d.ts +2 -2
  121. package/dist/migration-shim/migrationShimFactory.d.ts.map +1 -1
  122. package/dist/migration-shim/migrationShimFactory.js +2 -2
  123. package/dist/migration-shim/migrationShimFactory.js.map +1 -1
  124. package/dist/migration-shim/packageVersion.d.ts +0 -2
  125. package/dist/migration-shim/packageVersion.d.ts.map +1 -1
  126. package/dist/migration-shim/packageVersion.js +0 -2
  127. package/dist/migration-shim/packageVersion.js.map +1 -1
  128. package/dist/migration-shim/sharedTreeDeltaHandler.d.ts.map +1 -1
  129. package/dist/migration-shim/sharedTreeDeltaHandler.js +8 -8
  130. package/dist/migration-shim/sharedTreeDeltaHandler.js.map +1 -1
  131. package/dist/migration-shim/sharedTreeShim.d.ts +2 -2
  132. package/dist/migration-shim/sharedTreeShim.d.ts.map +1 -1
  133. package/dist/migration-shim/sharedTreeShim.js +8 -4
  134. package/dist/migration-shim/sharedTreeShim.js.map +1 -1
  135. package/dist/migration-shim/sharedTreeShimFactory.d.ts +1 -1
  136. package/dist/migration-shim/sharedTreeShimFactory.d.ts.map +1 -1
  137. package/dist/migration-shim/sharedTreeShimFactory.js +2 -2
  138. package/dist/migration-shim/sharedTreeShimFactory.js.map +1 -1
  139. package/dist/migration-shim/shimChannelServices.d.ts +1 -1
  140. package/dist/migration-shim/shimChannelServices.d.ts.map +1 -1
  141. package/dist/migration-shim/shimChannelServices.js.map +1 -1
  142. package/dist/migration-shim/shimDeltaConnection.d.ts +1 -1
  143. package/dist/migration-shim/shimDeltaConnection.d.ts.map +1 -1
  144. package/dist/migration-shim/shimDeltaConnection.js +2 -2
  145. package/dist/migration-shim/shimDeltaConnection.js.map +1 -1
  146. package/dist/migration-shim/shimHandle.d.ts.map +1 -1
  147. package/dist/migration-shim/shimHandle.js.map +1 -1
  148. package/dist/migration-shim/types.d.ts +1 -1
  149. package/dist/migration-shim/types.d.ts.map +1 -1
  150. package/dist/migration-shim/types.js.map +1 -1
  151. package/dist/migration-shim/utils.d.ts +1 -1
  152. package/dist/migration-shim/utils.d.ts.map +1 -1
  153. package/dist/migration-shim/utils.js.map +1 -1
  154. package/dist/persisted-types/0.0.2.d.ts +1 -1
  155. package/dist/persisted-types/0.0.2.d.ts.map +1 -1
  156. package/dist/persisted-types/0.0.2.js.map +1 -1
  157. package/dist/persisted-types/0.1.1.d.ts +1 -1
  158. package/dist/persisted-types/0.1.1.d.ts.map +1 -1
  159. package/dist/persisted-types/0.1.1.js +3 -3
  160. package/dist/persisted-types/0.1.1.js.map +1 -1
  161. package/lib/ChangeCompression.d.ts +2 -2
  162. package/lib/ChangeCompression.d.ts.map +1 -1
  163. package/lib/ChangeCompression.js +1 -1
  164. package/lib/ChangeCompression.js.map +1 -1
  165. package/lib/ChangeTypes.d.ts +1 -1
  166. package/lib/ChangeTypes.d.ts.map +1 -1
  167. package/lib/ChangeTypes.js +2 -2
  168. package/lib/ChangeTypes.js.map +1 -1
  169. package/lib/Checkout.d.ts +3 -3
  170. package/lib/Checkout.d.ts.map +1 -1
  171. package/lib/Checkout.js +4 -4
  172. package/lib/Checkout.js.map +1 -1
  173. package/lib/EditLog.d.ts +1 -1
  174. package/lib/EditLog.d.ts.map +1 -1
  175. package/lib/EditLog.js +2 -2
  176. package/lib/EditLog.js.map +1 -1
  177. package/lib/EditUtilities.d.ts +3 -3
  178. package/lib/EditUtilities.d.ts.map +1 -1
  179. package/lib/EditUtilities.js +5 -5
  180. package/lib/EditUtilities.js.map +1 -1
  181. package/lib/Forest.d.ts.map +1 -1
  182. package/lib/Forest.js +2 -2
  183. package/lib/Forest.js.map +1 -1
  184. package/lib/HistoryEditFactory.d.ts +1 -1
  185. package/lib/HistoryEditFactory.d.ts.map +1 -1
  186. package/lib/HistoryEditFactory.js +5 -5
  187. package/lib/HistoryEditFactory.js.map +1 -1
  188. package/lib/IdConversion.d.ts.map +1 -1
  189. package/lib/IdConversion.js.map +1 -1
  190. package/lib/LogViewer.d.ts +2 -2
  191. package/lib/LogViewer.d.ts.map +1 -1
  192. package/lib/LogViewer.js +3 -3
  193. package/lib/LogViewer.js.map +1 -1
  194. package/lib/MergeHealth.d.ts.map +1 -1
  195. package/lib/MergeHealth.js +1 -1
  196. package/lib/MergeHealth.js.map +1 -1
  197. package/lib/NodeIdUtilities.d.ts +1 -1
  198. package/lib/NodeIdUtilities.d.ts.map +1 -1
  199. package/lib/NodeIdUtilities.js +1 -1
  200. package/lib/NodeIdUtilities.js.map +1 -1
  201. package/lib/PayloadUtilities.d.ts.map +1 -1
  202. package/lib/PayloadUtilities.js +1 -1
  203. package/lib/PayloadUtilities.js.map +1 -1
  204. package/lib/ReconciliationPath.d.ts +1 -1
  205. package/lib/ReconciliationPath.d.ts.map +1 -1
  206. package/lib/ReconciliationPath.js.map +1 -1
  207. package/lib/RevisionValueCache.d.ts.map +1 -1
  208. package/lib/RevisionValueCache.js +2 -2
  209. package/lib/RevisionValueCache.js.map +1 -1
  210. package/lib/RevisionView.d.ts +2 -2
  211. package/lib/RevisionView.d.ts.map +1 -1
  212. package/lib/RevisionView.js.map +1 -1
  213. package/lib/SerializationUtilities.d.ts +1 -1
  214. package/lib/SerializationUtilities.d.ts.map +1 -1
  215. package/lib/SerializationUtilities.js.map +1 -1
  216. package/lib/SharedTree.d.ts +8 -7
  217. package/lib/SharedTree.d.ts.map +1 -1
  218. package/lib/SharedTree.js +13 -13
  219. package/lib/SharedTree.js.map +1 -1
  220. package/lib/SharedTreeEncoder.d.ts +1 -1
  221. package/lib/SharedTreeEncoder.d.ts.map +1 -1
  222. package/lib/SharedTreeEncoder.js +5 -5
  223. package/lib/SharedTreeEncoder.js.map +1 -1
  224. package/lib/Summary.d.ts +2 -2
  225. package/lib/Summary.d.ts.map +1 -1
  226. package/lib/Summary.js +1 -1
  227. package/lib/Summary.js.map +1 -1
  228. package/lib/SummaryBackCompatibility.d.ts.map +1 -1
  229. package/lib/SummaryBackCompatibility.js.map +1 -1
  230. package/lib/SummaryTestUtilities.d.ts +1 -1
  231. package/lib/SummaryTestUtilities.d.ts.map +1 -1
  232. package/lib/SummaryTestUtilities.js.map +1 -1
  233. package/lib/Transaction.d.ts +3 -3
  234. package/lib/Transaction.d.ts.map +1 -1
  235. package/lib/Transaction.js +3 -3
  236. package/lib/Transaction.js.map +1 -1
  237. package/lib/TransactionInternal.d.ts +3 -3
  238. package/lib/TransactionInternal.d.ts.map +1 -1
  239. package/lib/TransactionInternal.js +3 -3
  240. package/lib/TransactionInternal.js.map +1 -1
  241. package/lib/TreeCompressor.d.ts +5 -1
  242. package/lib/TreeCompressor.d.ts.map +1 -1
  243. package/lib/TreeCompressor.js +2 -2
  244. package/lib/TreeCompressor.js.map +1 -1
  245. package/lib/TreeNodeHandle.d.ts +1 -1
  246. package/lib/TreeNodeHandle.d.ts.map +1 -1
  247. package/lib/TreeNodeHandle.js.map +1 -1
  248. package/lib/TreeView.d.ts +1 -1
  249. package/lib/TreeView.d.ts.map +1 -1
  250. package/lib/TreeView.js +1 -2
  251. package/lib/TreeView.js.map +1 -1
  252. package/lib/UuidUtilities.d.ts.map +1 -1
  253. package/lib/UuidUtilities.js +1 -1
  254. package/lib/UuidUtilities.js.map +1 -1
  255. package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -1
  256. package/lib/id-compressor/AppendOnlySortedMap.js +1 -1
  257. package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -1
  258. package/lib/id-compressor/IdCompressor.d.ts +1 -1
  259. package/lib/id-compressor/IdCompressor.d.ts.map +1 -1
  260. package/lib/id-compressor/IdCompressor.js +4 -5
  261. package/lib/id-compressor/IdCompressor.js.map +1 -1
  262. package/lib/id-compressor/IdRange.d.ts.map +1 -1
  263. package/lib/id-compressor/IdRange.js +1 -1
  264. package/lib/id-compressor/IdRange.js.map +1 -1
  265. package/lib/id-compressor/NumericUuid.d.ts.map +1 -1
  266. package/lib/id-compressor/NumericUuid.js +2 -1
  267. package/lib/id-compressor/NumericUuid.js.map +1 -1
  268. package/lib/id-compressor/SessionIdNormalizer.d.ts.map +1 -1
  269. package/lib/id-compressor/SessionIdNormalizer.js +1 -2
  270. package/lib/id-compressor/SessionIdNormalizer.js.map +1 -1
  271. package/lib/migration-shim/migrationDeltaHandler.d.ts +1 -1
  272. package/lib/migration-shim/migrationDeltaHandler.d.ts.map +1 -1
  273. package/lib/migration-shim/migrationDeltaHandler.js +1 -1
  274. package/lib/migration-shim/migrationDeltaHandler.js.map +1 -1
  275. package/lib/migration-shim/migrationShim.d.ts +8 -4
  276. package/lib/migration-shim/migrationShim.d.ts.map +1 -1
  277. package/lib/migration-shim/migrationShim.js +3 -3
  278. package/lib/migration-shim/migrationShim.js.map +1 -1
  279. package/lib/migration-shim/migrationShimFactory.d.ts +2 -2
  280. package/lib/migration-shim/migrationShimFactory.d.ts.map +1 -1
  281. package/lib/migration-shim/migrationShimFactory.js +1 -1
  282. package/lib/migration-shim/migrationShimFactory.js.map +1 -1
  283. package/lib/migration-shim/packageVersion.d.ts +0 -2
  284. package/lib/migration-shim/packageVersion.d.ts.map +1 -1
  285. package/lib/migration-shim/packageVersion.js +0 -2
  286. package/lib/migration-shim/packageVersion.js.map +1 -1
  287. package/lib/migration-shim/sharedTreeDeltaHandler.d.ts.map +1 -1
  288. package/lib/migration-shim/sharedTreeDeltaHandler.js +1 -1
  289. package/lib/migration-shim/sharedTreeDeltaHandler.js.map +1 -1
  290. package/lib/migration-shim/sharedTreeShim.d.ts +2 -2
  291. package/lib/migration-shim/sharedTreeShim.d.ts.map +1 -1
  292. package/lib/migration-shim/sharedTreeShim.js +6 -2
  293. package/lib/migration-shim/sharedTreeShim.js.map +1 -1
  294. package/lib/migration-shim/sharedTreeShimFactory.d.ts +1 -1
  295. package/lib/migration-shim/sharedTreeShimFactory.d.ts.map +1 -1
  296. package/lib/migration-shim/sharedTreeShimFactory.js +1 -1
  297. package/lib/migration-shim/sharedTreeShimFactory.js.map +1 -1
  298. package/lib/migration-shim/shimChannelServices.d.ts +1 -1
  299. package/lib/migration-shim/shimChannelServices.d.ts.map +1 -1
  300. package/lib/migration-shim/shimChannelServices.js.map +1 -1
  301. package/lib/migration-shim/shimDeltaConnection.d.ts +1 -1
  302. package/lib/migration-shim/shimDeltaConnection.d.ts.map +1 -1
  303. package/lib/migration-shim/shimDeltaConnection.js +1 -1
  304. package/lib/migration-shim/shimDeltaConnection.js.map +1 -1
  305. package/lib/migration-shim/shimHandle.d.ts.map +1 -1
  306. package/lib/migration-shim/shimHandle.js.map +1 -1
  307. package/lib/migration-shim/types.d.ts +1 -1
  308. package/lib/migration-shim/types.d.ts.map +1 -1
  309. package/lib/migration-shim/types.js.map +1 -1
  310. package/lib/migration-shim/utils.d.ts +1 -1
  311. package/lib/migration-shim/utils.d.ts.map +1 -1
  312. package/lib/migration-shim/utils.js.map +1 -1
  313. package/lib/persisted-types/0.0.2.d.ts +1 -1
  314. package/lib/persisted-types/0.0.2.d.ts.map +1 -1
  315. package/lib/persisted-types/0.0.2.js.map +1 -1
  316. package/lib/persisted-types/0.1.1.d.ts +1 -1
  317. package/lib/persisted-types/0.1.1.d.ts.map +1 -1
  318. package/lib/persisted-types/0.1.1.js +1 -1
  319. package/lib/persisted-types/0.1.1.js.map +1 -1
  320. package/package.json +33 -32
  321. package/src/ChangeCompression.ts +8 -8
  322. package/src/ChangeTypes.ts +5 -4
  323. package/src/Checkout.ts +9 -7
  324. package/src/EditLog.ts +4 -3
  325. package/src/EditUtilities.ts +9 -8
  326. package/src/Forest.ts +3 -2
  327. package/src/HistoryEditFactory.ts +12 -11
  328. package/src/IdConversion.ts +2 -2
  329. package/src/LogViewer.ts +5 -4
  330. package/src/MergeHealth.ts +2 -1
  331. package/src/NodeIdUtilities.ts +2 -2
  332. package/src/PayloadUtilities.ts +2 -1
  333. package/src/ReconciliationPath.ts +1 -1
  334. package/src/RevisionValueCache.ts +3 -2
  335. package/src/RevisionView.ts +3 -3
  336. package/src/SerializationUtilities.ts +1 -1
  337. package/src/SharedTree.ts +46 -49
  338. package/src/SharedTreeEncoder.ts +30 -29
  339. package/src/Summary.ts +5 -3
  340. package/src/SummaryBackCompatibility.ts +1 -0
  341. package/src/SummaryTestUtilities.ts +2 -1
  342. package/src/Transaction.ts +7 -6
  343. package/src/TransactionInternal.ts +17 -16
  344. package/src/TreeCompressor.ts +6 -4
  345. package/src/TreeNodeHandle.ts +2 -2
  346. package/src/TreeView.ts +3 -3
  347. package/src/UuidUtilities.ts +2 -1
  348. package/src/id-compressor/AppendOnlySortedMap.ts +2 -1
  349. package/src/id-compressor/IdCompressor.ts +18 -17
  350. package/src/id-compressor/IdRange.ts +2 -1
  351. package/src/id-compressor/NumericUuid.ts +1 -1
  352. package/src/id-compressor/SessionIdNormalizer.ts +3 -3
  353. package/src/migration-shim/migrationDeltaHandler.ts +3 -2
  354. package/src/migration-shim/migrationShim.ts +14 -10
  355. package/src/migration-shim/migrationShimFactory.ts +6 -4
  356. package/src/migration-shim/packageVersion.ts +0 -2
  357. package/src/migration-shim/sharedTreeDeltaHandler.ts +3 -2
  358. package/src/migration-shim/sharedTreeShim.ts +7 -5
  359. package/src/migration-shim/sharedTreeShimFactory.ts +3 -3
  360. package/src/migration-shim/shimChannelServices.ts +1 -1
  361. package/src/migration-shim/shimDeltaConnection.ts +3 -2
  362. package/src/migration-shim/shimHandle.ts +1 -0
  363. package/src/migration-shim/types.ts +3 -1
  364. package/src/migration-shim/utils.ts +2 -1
  365. package/src/persisted-types/0.0.2.ts +2 -2
  366. package/src/persisted-types/0.1.1.ts +10 -8
  367. package/dist/tree-alpha.d.ts +0 -2901
  368. package/dist/tree-beta.d.ts +0 -348
  369. package/dist/tree-public.d.ts +0 -348
  370. package/dist/tree-untrimmed.d.ts +0 -3820
  371. package/lib/test/AppendOnlySortedMap.perf.tests.d.ts +0 -6
  372. package/lib/test/AppendOnlySortedMap.perf.tests.d.ts.map +0 -1
  373. package/lib/test/AppendOnlySortedMap.perf.tests.js +0 -49
  374. package/lib/test/AppendOnlySortedMap.perf.tests.js.map +0 -1
  375. package/lib/test/AppendOnlySortedMap.tests.d.ts +0 -6
  376. package/lib/test/AppendOnlySortedMap.tests.d.ts.map +0 -1
  377. package/lib/test/AppendOnlySortedMap.tests.js +0 -213
  378. package/lib/test/AppendOnlySortedMap.tests.js.map +0 -1
  379. package/lib/test/ChangeCompression.tests.d.ts +0 -6
  380. package/lib/test/ChangeCompression.tests.d.ts.map +0 -1
  381. package/lib/test/ChangeCompression.tests.js +0 -154
  382. package/lib/test/ChangeCompression.tests.js.map +0 -1
  383. package/lib/test/Checkout.tests.d.ts +0 -10
  384. package/lib/test/Checkout.tests.d.ts.map +0 -1
  385. package/lib/test/Checkout.tests.js +0 -460
  386. package/lib/test/Checkout.tests.js.map +0 -1
  387. package/lib/test/Common.tests.d.ts +0 -6
  388. package/lib/test/Common.tests.d.ts.map +0 -1
  389. package/lib/test/Common.tests.js +0 -102
  390. package/lib/test/Common.tests.js.map +0 -1
  391. package/lib/test/EagerCheckout.tests.d.ts +0 -6
  392. package/lib/test/EagerCheckout.tests.d.ts.map +0 -1
  393. package/lib/test/EagerCheckout.tests.js +0 -20
  394. package/lib/test/EagerCheckout.tests.js.map +0 -1
  395. package/lib/test/Edit.tests.d.ts +0 -6
  396. package/lib/test/Edit.tests.d.ts.map +0 -1
  397. package/lib/test/Edit.tests.js +0 -60
  398. package/lib/test/Edit.tests.js.map +0 -1
  399. package/lib/test/EditLog.perf.tests.d.ts +0 -6
  400. package/lib/test/EditLog.perf.tests.d.ts.map +0 -1
  401. package/lib/test/EditLog.perf.tests.js +0 -41
  402. package/lib/test/EditLog.perf.tests.js.map +0 -1
  403. package/lib/test/EditLog.tests.d.ts +0 -6
  404. package/lib/test/EditLog.tests.d.ts.map +0 -1
  405. package/lib/test/EditLog.tests.js +0 -355
  406. package/lib/test/EditLog.tests.js.map +0 -1
  407. package/lib/test/EditUtilities.tests.d.ts +0 -6
  408. package/lib/test/EditUtilities.tests.d.ts.map +0 -1
  409. package/lib/test/EditUtilities.tests.js +0 -512
  410. package/lib/test/EditUtilities.tests.js.map +0 -1
  411. package/lib/test/Forest.perf.tests.d.ts +0 -6
  412. package/lib/test/Forest.perf.tests.d.ts.map +0 -1
  413. package/lib/test/Forest.perf.tests.js +0 -135
  414. package/lib/test/Forest.perf.tests.js.map +0 -1
  415. package/lib/test/Forest.tests.d.ts +0 -6
  416. package/lib/test/Forest.tests.d.ts.map +0 -1
  417. package/lib/test/Forest.tests.js +0 -213
  418. package/lib/test/Forest.tests.js.map +0 -1
  419. package/lib/test/GenericTransaction.tests.d.ts +0 -6
  420. package/lib/test/GenericTransaction.tests.d.ts.map +0 -1
  421. package/lib/test/GenericTransaction.tests.js +0 -31
  422. package/lib/test/GenericTransaction.tests.js.map +0 -1
  423. package/lib/test/HistoryEditFactory.tests.d.ts +0 -6
  424. package/lib/test/HistoryEditFactory.tests.d.ts.map +0 -1
  425. package/lib/test/HistoryEditFactory.tests.js +0 -170
  426. package/lib/test/HistoryEditFactory.tests.js.map +0 -1
  427. package/lib/test/IdCompressor.perf.tests.d.ts +0 -6
  428. package/lib/test/IdCompressor.perf.tests.d.ts.map +0 -1
  429. package/lib/test/IdCompressor.perf.tests.js +0 -290
  430. package/lib/test/IdCompressor.perf.tests.js.map +0 -1
  431. package/lib/test/IdCompressor.tests.d.ts +0 -6
  432. package/lib/test/IdCompressor.tests.d.ts.map +0 -1
  433. package/lib/test/IdCompressor.tests.js +0 -1542
  434. package/lib/test/IdCompressor.tests.js.map +0 -1
  435. package/lib/test/IdConversion.tests.d.ts +0 -6
  436. package/lib/test/IdConversion.tests.d.ts.map +0 -1
  437. package/lib/test/IdConversion.tests.js +0 -36
  438. package/lib/test/IdConversion.tests.js.map +0 -1
  439. package/lib/test/LazyCheckout.tests.d.ts +0 -6
  440. package/lib/test/LazyCheckout.tests.d.ts.map +0 -1
  441. package/lib/test/LazyCheckout.tests.js +0 -22
  442. package/lib/test/LazyCheckout.tests.js.map +0 -1
  443. package/lib/test/LogViewer.tests.d.ts +0 -6
  444. package/lib/test/LogViewer.tests.d.ts.map +0 -1
  445. package/lib/test/LogViewer.tests.js +0 -588
  446. package/lib/test/LogViewer.tests.js.map +0 -1
  447. package/lib/test/MergeHealthTelemetryHeartbeat.tests.d.ts +0 -6
  448. package/lib/test/MergeHealthTelemetryHeartbeat.tests.d.ts.map +0 -1
  449. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +0 -351
  450. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +0 -1
  451. package/lib/test/NumericUuid.perf.tests.d.ts +0 -6
  452. package/lib/test/NumericUuid.perf.tests.d.ts.map +0 -1
  453. package/lib/test/NumericUuid.perf.tests.js +0 -68
  454. package/lib/test/NumericUuid.perf.tests.js.map +0 -1
  455. package/lib/test/NumericUuid.tests.d.ts +0 -6
  456. package/lib/test/NumericUuid.tests.d.ts.map +0 -1
  457. package/lib/test/NumericUuid.tests.js +0 -192
  458. package/lib/test/NumericUuid.tests.js.map +0 -1
  459. package/lib/test/RevisionValueCache.tests.d.ts +0 -6
  460. package/lib/test/RevisionValueCache.tests.d.ts.map +0 -1
  461. package/lib/test/RevisionValueCache.tests.js +0 -106
  462. package/lib/test/RevisionValueCache.tests.js.map +0 -1
  463. package/lib/test/RevisionView.tests.d.ts +0 -6
  464. package/lib/test/RevisionView.tests.d.ts.map +0 -1
  465. package/lib/test/RevisionView.tests.js +0 -131
  466. package/lib/test/RevisionView.tests.js.map +0 -1
  467. package/lib/test/SessionIdNormalizer.tests.d.ts +0 -6
  468. package/lib/test/SessionIdNormalizer.tests.d.ts.map +0 -1
  469. package/lib/test/SessionIdNormalizer.tests.js +0 -377
  470. package/lib/test/SessionIdNormalizer.tests.js.map +0 -1
  471. package/lib/test/SharedTree.fuzz.tests.d.ts +0 -6
  472. package/lib/test/SharedTree.fuzz.tests.d.ts.map +0 -1
  473. package/lib/test/SharedTree.fuzz.tests.js +0 -9
  474. package/lib/test/SharedTree.fuzz.tests.js.map +0 -1
  475. package/lib/test/SharedTree.perf.tests.d.ts +0 -6
  476. package/lib/test/SharedTree.perf.tests.d.ts.map +0 -1
  477. package/lib/test/SharedTree.perf.tests.js +0 -39
  478. package/lib/test/SharedTree.perf.tests.js.map +0 -1
  479. package/lib/test/SharedTree.tests.d.ts +0 -6
  480. package/lib/test/SharedTree.tests.d.ts.map +0 -1
  481. package/lib/test/SharedTree.tests.js +0 -22
  482. package/lib/test/SharedTree.tests.js.map +0 -1
  483. package/lib/test/StringInterner.tests.d.ts +0 -6
  484. package/lib/test/StringInterner.tests.d.ts.map +0 -1
  485. package/lib/test/StringInterner.tests.js +0 -73
  486. package/lib/test/StringInterner.tests.js.map +0 -1
  487. package/lib/test/Summary.tests.d.ts +0 -7
  488. package/lib/test/Summary.tests.d.ts.map +0 -1
  489. package/lib/test/Summary.tests.js +0 -386
  490. package/lib/test/Summary.tests.js.map +0 -1
  491. package/lib/test/Transaction.tests.d.ts +0 -6
  492. package/lib/test/Transaction.tests.d.ts.map +0 -1
  493. package/lib/test/Transaction.tests.js +0 -124
  494. package/lib/test/Transaction.tests.js.map +0 -1
  495. package/lib/test/TransactionInternal.tests.d.ts +0 -6
  496. package/lib/test/TransactionInternal.tests.d.ts.map +0 -1
  497. package/lib/test/TransactionInternal.tests.js +0 -576
  498. package/lib/test/TransactionInternal.tests.js.map +0 -1
  499. package/lib/test/TreeCompression.tests.d.ts +0 -6
  500. package/lib/test/TreeCompression.tests.d.ts.map +0 -1
  501. package/lib/test/TreeCompression.tests.js +0 -291
  502. package/lib/test/TreeCompression.tests.js.map +0 -1
  503. package/lib/test/TreeView.tests.d.ts +0 -6
  504. package/lib/test/TreeView.tests.d.ts.map +0 -1
  505. package/lib/test/TreeView.tests.js +0 -178
  506. package/lib/test/TreeView.tests.js.map +0 -1
  507. package/lib/test/UndoRedoHandler.tests.d.ts +0 -6
  508. package/lib/test/UndoRedoHandler.tests.d.ts.map +0 -1
  509. package/lib/test/UndoRedoHandler.tests.js +0 -37
  510. package/lib/test/UndoRedoHandler.tests.js.map +0 -1
  511. package/lib/test/fuzz/Generators.d.ts +0 -8
  512. package/lib/test/fuzz/Generators.d.ts.map +0 -1
  513. package/lib/test/fuzz/Generators.js +0 -345
  514. package/lib/test/fuzz/Generators.js.map +0 -1
  515. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +0 -23
  516. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +0 -1
  517. package/lib/test/fuzz/SharedTreeFuzzTests.js +0 -241
  518. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +0 -1
  519. package/lib/test/fuzz/Types.d.ts +0 -136
  520. package/lib/test/fuzz/Types.d.ts.map +0 -1
  521. package/lib/test/fuzz/Types.js +0 -6
  522. package/lib/test/fuzz/Types.js.map +0 -1
  523. package/lib/test/utilities/IdCompressorTestUtilities.d.ts +0 -246
  524. package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +0 -1
  525. package/lib/test/utilities/IdCompressorTestUtilities.js +0 -608
  526. package/lib/test/utilities/IdCompressorTestUtilities.js.map +0 -1
  527. package/lib/test/utilities/MockTransaction.d.ts +0 -35
  528. package/lib/test/utilities/MockTransaction.d.ts.map +0 -1
  529. package/lib/test/utilities/MockTransaction.js +0 -51
  530. package/lib/test/utilities/MockTransaction.js.map +0 -1
  531. package/lib/test/utilities/PendingLocalStateTests.d.ts +0 -12
  532. package/lib/test/utilities/PendingLocalStateTests.d.ts.map +0 -1
  533. package/lib/test/utilities/PendingLocalStateTests.js +0 -223
  534. package/lib/test/utilities/PendingLocalStateTests.js.map +0 -1
  535. package/lib/test/utilities/SharedTreeTests.d.ts +0 -12
  536. package/lib/test/utilities/SharedTreeTests.d.ts.map +0 -1
  537. package/lib/test/utilities/SharedTreeTests.js +0 -949
  538. package/lib/test/utilities/SharedTreeTests.js.map +0 -1
  539. package/lib/test/utilities/SharedTreeVersioningTests.d.ts +0 -11
  540. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +0 -1
  541. package/lib/test/utilities/SharedTreeVersioningTests.js +0 -439
  542. package/lib/test/utilities/SharedTreeVersioningTests.js.map +0 -1
  543. package/lib/test/utilities/SummaryLoadPerfTests.d.ts +0 -10
  544. package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +0 -1
  545. package/lib/test/utilities/SummaryLoadPerfTests.js +0 -105
  546. package/lib/test/utilities/SummaryLoadPerfTests.js.map +0 -1
  547. package/lib/test/utilities/SummarySizeTests.d.ts +0 -11
  548. package/lib/test/utilities/SummarySizeTests.d.ts.map +0 -1
  549. package/lib/test/utilities/SummarySizeTests.js +0 -160
  550. package/lib/test/utilities/SummarySizeTests.js.map +0 -1
  551. package/lib/test/utilities/TestCommon.d.ts +0 -13
  552. package/lib/test/utilities/TestCommon.d.ts.map +0 -1
  553. package/lib/test/utilities/TestCommon.js +0 -19
  554. package/lib/test/utilities/TestCommon.js.map +0 -1
  555. package/lib/test/utilities/TestNode.d.ts +0 -140
  556. package/lib/test/utilities/TestNode.d.ts.map +0 -1
  557. package/lib/test/utilities/TestNode.js +0 -282
  558. package/lib/test/utilities/TestNode.js.map +0 -1
  559. package/lib/test/utilities/TestSerializer.d.ts +0 -24
  560. package/lib/test/utilities/TestSerializer.d.ts.map +0 -1
  561. package/lib/test/utilities/TestSerializer.js +0 -40
  562. package/lib/test/utilities/TestSerializer.js.map +0 -1
  563. package/lib/test/utilities/TestUtilities.d.ts +0 -212
  564. package/lib/test/utilities/TestUtilities.d.ts.map +0 -1
  565. package/lib/test/utilities/TestUtilities.js +0 -413
  566. package/lib/test/utilities/TestUtilities.js.map +0 -1
  567. package/lib/test/utilities/UndoRedoTests.d.ts +0 -32
  568. package/lib/test/utilities/UndoRedoTests.d.ts.map +0 -1
  569. package/lib/test/utilities/UndoRedoTests.js +0 -317
  570. package/lib/test/utilities/UndoRedoTests.js.map +0 -1
  571. /package/{dist → lib}/tsdoc-metadata.json +0 -0
@@ -1,588 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { strict as assert } from 'assert';
6
- import { expect } from 'chai';
7
- import { v4 as uuidv4 } from 'uuid';
8
- import { validateAssertionError } from '@fluidframework/test-runtime-utils';
9
- import { EditLog } from '../EditLog.js';
10
- import { CachingLogViewer, CachingLogViewerDiagnosticEvents, } from '../LogViewer.js';
11
- import { copyPropertyIfDefined, fail } from '../Common.js';
12
- import { initialTree } from '../InitialTree.js';
13
- import { ChangeInternal, ChangeTypeInternal, ConstraintEffect, EditStatus, StablePlaceInternal, } from '../persisted-types/index.js';
14
- import { areRevisionViewsSemanticallyEqual, newEdit } from '../EditUtilities.js';
15
- import { RevisionView } from '../RevisionView.js';
16
- import { TransactionInternal } from '../TransactionInternal.js';
17
- import { StableRange } from '../ChangeTypes.js';
18
- import { expectDefined } from './utilities/TestCommon.js';
19
- import { buildLeaf } from './utilities/TestNode.js';
20
- import { refreshTestTree, testTraitLabel } from './utilities/TestUtilities.js';
21
- /**
22
- * Creates an {@link EditLog} and accompanying {@link RevisionView} with pre-existing edits.
23
- *
24
- * @remarks Intended to be used with {@link getSimpleLogBaseView}
25
- * @param testTree - Test tree to work on
26
- * @param numEdits - The number of edits to make to the base tree
27
- */
28
- function getTestTreeLog(testTree) {
29
- const log = new EditLog();
30
- log.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeaf(testTree.left.identifier)], StablePlaceInternal.atStartOf(testTree.left.traitLocation))), { sequenceNumber: 1, referenceSequenceNumber: 0 });
31
- log.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeaf(testTree.right.identifier)], StablePlaceInternal.atStartOf(testTree.right.traitLocation))), { sequenceNumber: 2, referenceSequenceNumber: 1 });
32
- return log;
33
- }
34
- function getLogWithNumEdits(nodeIdContext, numEdits) {
35
- const log = new EditLog();
36
- for (let i = 0; i < numEdits; i++) {
37
- log.addSequencedEdit(newEdit(ChangeInternal.insertTree([buildLeaf(nodeIdContext.generateNodeId())], StablePlaceInternal.atStartOf({
38
- label: testTraitLabel,
39
- parent: nodeIdContext.convertToNodeId(initialTree.identifier),
40
- }))), {
41
- sequenceNumber: i + 1,
42
- referenceSequenceNumber: i,
43
- });
44
- }
45
- return log;
46
- }
47
- /**
48
- * Get a base view for a log created with {@link getTestTreeLog}.
49
- * This can then be used to construct a {@link LogViewer} for that log.
50
- *
51
- * @param testTree - Test tree to work from
52
- */
53
- function getSimpleLogBaseView(testTree) {
54
- const node = { definition: testTree.definition, identifier: testTree.identifier, traits: {} };
55
- copyPropertyIfDefined(testTree, node, 'payload');
56
- return RevisionView.fromTree(node);
57
- }
58
- function getSimpleLogWithLocalEdits(testTree) {
59
- const logWithLocalEdits = getTestTreeLog(testTree);
60
- logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.left.traitLocation))));
61
- logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))));
62
- logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.left.traitLocation))));
63
- return logWithLocalEdits;
64
- }
65
- function getViewsForLog(log, baseView) {
66
- const views = [baseView];
67
- for (let i = 0; i < log.length; i++) {
68
- const edit = log.tryGetEditAtIndex(i) ?? fail('edit not found');
69
- const result = TransactionInternal.factory(views[i]).applyChanges(edit.changes).close();
70
- if (result.status === EditStatus.Applied) {
71
- views.push(result.after);
72
- }
73
- else {
74
- expect.fail('edit failed to apply');
75
- }
76
- }
77
- return views;
78
- }
79
- function runLogViewerCorrectnessTests(viewerCreator) {
80
- return describe('LogViewer', () => {
81
- let simpleLog;
82
- let simpleLogBaseView;
83
- let simpleLogInitialView;
84
- const testTree = refreshTestTree(undefined, (t) => {
85
- simpleLogBaseView = getSimpleLogBaseView(t);
86
- simpleLog = getTestTreeLog(t);
87
- simpleLogInitialView = t.view;
88
- });
89
- it('generates initialTree by default for the 0th revision', () => {
90
- const viewer = viewerCreator(new EditLog(), simpleLogBaseView);
91
- const headView = viewer.getRevisionViewInMemory(0);
92
- expect(headView.equals(expectDefined(RevisionView.fromTree(initialTree, testTree))));
93
- });
94
- it('can be constructed from a non-empty EditLog', () => {
95
- const viewer = viewerCreator(simpleLog, simpleLogBaseView);
96
- const headView = viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
97
- expect(areRevisionViewsSemanticallyEqual(headView, testTree, simpleLogInitialView, testTree));
98
- expect(headView.equals(simpleLogInitialView)).to.be.true;
99
- });
100
- it('can generate all revision views for an EditLog', () => {
101
- const baseView = expectDefined(RevisionView.fromTree(initialTree, testTree));
102
- const numNodes = 10;
103
- const viewer = viewerCreator(getLogWithNumEdits(testTree, numNodes), baseView);
104
- const initialRevision = viewer.getRevisionViewInMemory(0);
105
- expect(initialRevision.equals(baseView)).to.be.true;
106
- expect(initialRevision.size).to.equal(1);
107
- const oneNodeView = viewer.getRevisionViewInMemory(1);
108
- const testTrait = {
109
- label: testTraitLabel,
110
- parent: testTree.convertToNodeId(initialTree.identifier),
111
- };
112
- expect(oneNodeView.getTrait(testTrait).length).to.equal(1);
113
- const twoNodeView = viewer.getRevisionViewInMemory(2);
114
- expect(twoNodeView.getTrait(testTrait).length).to.equal(2);
115
- const finalView = viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
116
- expect(finalView.getTrait(testTrait).length).to.equal(numNodes);
117
- });
118
- it('produces correct revision views when the log is mutated', () => {
119
- const mutableLog = new EditLog();
120
- const viewer = viewerCreator(mutableLog, simpleLogBaseView);
121
- const viewsForLog = getViewsForLog(simpleLog, simpleLogBaseView);
122
- // This test takes an empty log (A) and a log with edits in it (B), and adds the edits from B to A.
123
- // After each addition, the test code will iterate from [0, length_of_A] and get a view for each revision via LogViewer
124
- // and assert that none of the views differ from those created via pure Transaction APIs.
125
- for (let i = 0; i <= simpleLog.length; i++) {
126
- for (let j = 0; j <= mutableLog.length; j++) {
127
- const viewerView = viewer.getRevisionViewInMemory(j);
128
- expect(viewerView.equals(viewsForLog[j])).to.be.true;
129
- }
130
- // Revisions are from [0, simpleLog.length], edits are at indices [0, simpleLog.length)
131
- if (i < simpleLog.length) {
132
- const edit = simpleLog.tryGetEditAtIndex(i) ?? fail('edit not found');
133
- mutableLog.addSequencedEdit(edit, { sequenceNumber: i + 1, referenceSequenceNumber: i });
134
- }
135
- }
136
- });
137
- it('produces correct revision views when local edits are shifted in the log due to sequenced edits being added', () => {
138
- function getViewsFromViewer(viewer, lastRevision) {
139
- const views = [];
140
- for (let i = 0; i <= lastRevision; i++) {
141
- views.push(viewer.getRevisionViewInMemory(i));
142
- }
143
- return views;
144
- }
145
- function expectViewsAreEqual(log, viewer) {
146
- const viewsForLog = getViewsForLog(log, simpleLogBaseView);
147
- const viewsForViewer = getViewsFromViewer(viewer, log.length);
148
- expect(viewsForLog.length).to.equal(viewsForViewer.length);
149
- for (let i = 0; i < viewsForLog.length; i++) {
150
- expect(viewsForLog[i].equals(viewsForViewer[i])).to.be.true;
151
- }
152
- }
153
- const logWithLocalEdits = getSimpleLogWithLocalEdits(testTree);
154
- const viewer = viewerCreator(logWithLocalEdits, simpleLogBaseView);
155
- expectViewsAreEqual(logWithLocalEdits, viewer);
156
- let seqNumber = 1;
157
- // Sequence the existing local edits and ensure viewer generates the correct views
158
- while (logWithLocalEdits.numberOfLocalEdits > 0) {
159
- // Add a remote sequenced edit
160
- logWithLocalEdits.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atStartOf(testTree.right.traitLocation))), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
161
- ++seqNumber;
162
- expectViewsAreEqual(logWithLocalEdits, viewer);
163
- // Sequence a local edit
164
- logWithLocalEdits.addSequencedEdit(logWithLocalEdits.tryGetEditAtIndex(logWithLocalEdits.numberOfSequencedEdits) ??
165
- fail('edit not found'), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
166
- ++seqNumber;
167
- expectViewsAreEqual(logWithLocalEdits, viewer);
168
- }
169
- });
170
- });
171
- }
172
- describe('CachingLogViewer', () => {
173
- // TODO: Dedupe? shared hook for getting all of this stuff?
174
- let simpleLog;
175
- let simpleLogBaseView;
176
- let simpleLogInitialView;
177
- // An arbitrary revision view which can be used to check to see if it gets used when provided as a cached value.
178
- let arbitraryRevisionView;
179
- const testTree = refreshTestTree(undefined, (t) => {
180
- simpleLogBaseView = getSimpleLogBaseView(t);
181
- simpleLog = getTestTreeLog(t);
182
- simpleLogInitialView = t.view;
183
- arbitraryRevisionView = RevisionView.fromTree(t.buildLeaf(t.generateNodeId()));
184
- });
185
- function getCachingLogViewerAssumeAppliedEdits(log, baseView, editStatusCallback, sequencedEditResultCallback, initialRevision) {
186
- return new CachingLogViewer(log, baseView, initialRevision !== undefined
187
- ? [initialRevision[0], { view: initialRevision[1], status: EditStatus.Applied, steps: [] }]
188
- : undefined, editStatusCallback, sequencedEditResultCallback, log.numberOfSequencedEdits);
189
- }
190
- runLogViewerCorrectnessTests(getCachingLogViewerAssumeAppliedEdits);
191
- it('detects non-integer revisions when setting revision views', async () => {
192
- assert.throws(() => {
193
- return getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, undefined, undefined, [
194
- 2.4,
195
- simpleLogInitialView,
196
- ]);
197
- }, (e) => validateAssertionError(e, 'revision must be an integer'));
198
- });
199
- it('detects out-of-bounds revisions when setting revision views', async () => {
200
- assert.throws(() => {
201
- return getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, undefined, undefined, [
202
- 1000,
203
- simpleLogInitialView,
204
- ]);
205
- }, (e) => validateAssertionError(e, 'revision must correspond to the result of a SequencedEdit'));
206
- });
207
- it('can be created with an initial revision', async () => {
208
- const views = getViewsForLog(simpleLog, simpleLogBaseView);
209
- const initialRevision = 0;
210
- const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, undefined, undefined, [initialRevision, views[initialRevision]]);
211
- expect(viewer.getRevisionViewInMemory(initialRevision).equals(views[initialRevision])).to.be.true;
212
- });
213
- function requestAllRevisionViews(viewer, log) {
214
- for (let i = 0; i <= log.length; i++) {
215
- viewer.getRevisionViewInMemory(i);
216
- }
217
- }
218
- it('caches revision views for sequenced edits', async () => {
219
- let editsProcessed = 0;
220
- const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, () => editsProcessed++);
221
- assert(simpleLog.length < CachingLogViewer.sequencedCacheSizeMax);
222
- requestAllRevisionViews(viewer, simpleLog);
223
- expect(editsProcessed).to.equal(simpleLog.length);
224
- // Ask for every view; no edit application should occur, since the views will be cached.
225
- for (let i = 0; i <= simpleLog.length; i++) {
226
- viewer.getRevisionViewInMemory(i);
227
- }
228
- expect(editsProcessed).to.equal(simpleLog.length);
229
- });
230
- it('caches edit results for sequenced edits', async () => {
231
- // Add an invalid edit
232
- simpleLog.addSequencedEdit(newEdit([
233
- {
234
- type: ChangeTypeInternal.Constraint,
235
- toConstrain: StableRange.only(testTree.left),
236
- effect: ConstraintEffect.InvalidAndDiscard,
237
- length: 0,
238
- },
239
- ]), { sequenceNumber: 3, referenceSequenceNumber: 2, minimumSequenceNumber: 2 });
240
- let editsProcessed = 0;
241
- const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView, () => editsProcessed++);
242
- assert(simpleLog.length < CachingLogViewer.sequencedCacheSizeMax);
243
- requestAllRevisionViews(viewer, simpleLog);
244
- expect(editsProcessed).to.equal(simpleLog.length);
245
- expect(viewer.getEditResultInMemory(0).status).equals(undefined);
246
- expect(viewer.getEditResultInMemory(1).status).equals(EditStatus.Applied);
247
- expect(viewer.getEditResultInMemory(2).status).equals(EditStatus.Applied);
248
- expect(viewer.getEditResultInMemory(3).status).equals(EditStatus.Invalid);
249
- });
250
- it('caches the highest revision', async () => {
251
- const viewer = getCachingLogViewerAssumeAppliedEdits(simpleLog, simpleLogBaseView);
252
- expect(viewer.highestRevisionCached()).to.be.false;
253
- requestAllRevisionViews(viewer, simpleLog);
254
- expect(viewer.highestRevisionCached()).to.be.true;
255
- simpleLog.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))));
256
- simpleLog.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))), {
257
- sequenceNumber: 3,
258
- referenceSequenceNumber: 2,
259
- minimumSequenceNumber: 2,
260
- });
261
- expect(viewer.highestRevisionCached()).to.be.false;
262
- });
263
- it('evicts least recently set cached revision views for sequenced edits', async () => {
264
- let editsProcessed = 0;
265
- const log = getLogWithNumEdits(testTree, CachingLogViewer.sequencedCacheSizeMax * 2);
266
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, expectDefined(RevisionView.fromTree(initialTree, testTree)), () => editsProcessed++);
267
- viewer.setMinimumSequenceNumber(log.length + 1); // simulate all edits being subject to eviction
268
- requestAllRevisionViews(viewer, log);
269
- expect(editsProcessed).to.equal(log.length);
270
- editsProcessed = 0;
271
- for (let i = CachingLogViewer.sequencedCacheSizeMax + 1; i <= log.length; i++) {
272
- viewer.getRevisionViewInMemory(i);
273
- }
274
- expect(editsProcessed).to.equal(0);
275
- viewer.getRevisionViewInMemory(CachingLogViewer.sequencedCacheSizeMax);
276
- expect(editsProcessed).to.equal(CachingLogViewer.sequencedCacheSizeMax);
277
- });
278
- it('never evicts the revision view for the most recent sequenced edit', async () => {
279
- let editsProcessed = 0;
280
- const log = getLogWithNumEdits(testTree, CachingLogViewer.sequencedCacheSizeMax * 2);
281
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, expectDefined(RevisionView.fromTree(initialTree, testTree)), () => editsProcessed++);
282
- // Simulate all clients being caught up.
283
- viewer.setMinimumSequenceNumber(log.numberOfSequencedEdits);
284
- requestAllRevisionViews(viewer, log);
285
- expect(editsProcessed).to.equal(log.length);
286
- editsProcessed = 0;
287
- for (let i = 0; i <= CachingLogViewer.sequencedCacheSizeMax; i++) {
288
- viewer.getRevisionViewInMemory(i);
289
- }
290
- expect(editsProcessed).to.equal(CachingLogViewer.sequencedCacheSizeMax);
291
- editsProcessed = 0;
292
- viewer.getRevisionViewInMemory(log.numberOfSequencedEdits);
293
- expect(editsProcessed).to.equal(0);
294
- });
295
- it('caches revision views for local revisions', async () => {
296
- const logWithLocalEdits = getSimpleLogWithLocalEdits(testTree);
297
- let editsProcessed = 0;
298
- const viewer = getCachingLogViewerAssumeAppliedEdits(logWithLocalEdits, simpleLogBaseView, () => editsProcessed++);
299
- assert(logWithLocalEdits.length < CachingLogViewer.sequencedCacheSizeMax);
300
- requestAllRevisionViews(viewer, logWithLocalEdits);
301
- expect(editsProcessed).to.equal(logWithLocalEdits.length);
302
- // Local edits should now be cached until next remote sequenced edit arrives
303
- editsProcessed = 0;
304
- for (let i = logWithLocalEdits.numberOfSequencedEdits + 1; i <= logWithLocalEdits.length; i++) {
305
- viewer.getRevisionViewInMemory(i);
306
- expect(editsProcessed).to.equal(0);
307
- }
308
- // Add a new local edit, and request the latest view.
309
- // This should apply only a single edit, as the most recent HEAD should be cached.
310
- editsProcessed = 0;
311
- logWithLocalEdits.addLocalEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))));
312
- requestAllRevisionViews(viewer, logWithLocalEdits);
313
- expect(editsProcessed).to.equal(1);
314
- editsProcessed = 0;
315
- let seqNumber = 1;
316
- while (logWithLocalEdits.numberOfLocalEdits > 0) {
317
- logWithLocalEdits.addSequencedEdit(logWithLocalEdits.tryGetEditAtIndex(logWithLocalEdits.numberOfSequencedEdits) ?? fail('edit not found'), { sequenceNumber: seqNumber, referenceSequenceNumber: seqNumber - 1 });
318
- ++seqNumber;
319
- viewer.getRevisionViewInMemory(logWithLocalEdits.numberOfSequencedEdits); // get the latest (just added) sequenced edit
320
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY); // get the last view, which is a local revision
321
- expect(editsProcessed).to.equal(0);
322
- }
323
- });
324
- it('invalidates cached revision views for local revisions when remote edits are received', () => {
325
- const logWithLocalEdits = getSimpleLogWithLocalEdits(testTree);
326
- let editsProcessed = 0;
327
- const viewer = getCachingLogViewerAssumeAppliedEdits(logWithLocalEdits, simpleLogBaseView, () => editsProcessed++);
328
- // Request twice, should only process edits once
329
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
330
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
331
- expect(editsProcessed).to.equal(logWithLocalEdits.length);
332
- // Remote edit arrives
333
- editsProcessed = 0;
334
- logWithLocalEdits.addSequencedEdit(newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atEndOf(testTree.right.traitLocation))), { sequenceNumber: 3, referenceSequenceNumber: 2, minimumSequenceNumber: 2 });
335
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
336
- expect(editsProcessed).to.equal(logWithLocalEdits.numberOfLocalEdits + 1);
337
- });
338
- it('uses known editing result', () => {
339
- const log = new EditLog();
340
- const editsProcessed = [];
341
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
342
- const before = viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
343
- const edit = newEdit([]);
344
- log.addLocalEdit(edit);
345
- viewer.setKnownEditingResult(edit, {
346
- status: EditStatus.Applied,
347
- changes: edit.changes,
348
- before,
349
- after: arbitraryRevisionView,
350
- steps: [],
351
- });
352
- const after = viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
353
- expect(editsProcessed).deep.equal([true]);
354
- expect(after).equal(arbitraryRevisionView);
355
- });
356
- it('ignores known editing if for wrong before revision view', () => {
357
- const log = new EditLog();
358
- const editsProcessed = [];
359
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
360
- const edit = newEdit([]);
361
- log.addLocalEdit(edit);
362
- viewer.setKnownEditingResult(edit, {
363
- status: EditStatus.Applied,
364
- changes: edit.changes,
365
- before: arbitraryRevisionView,
366
- after: arbitraryRevisionView,
367
- steps: [],
368
- });
369
- const after = viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
370
- expect(editsProcessed).deep.equal([false]);
371
- expect(after).not.equal(arbitraryRevisionView);
372
- });
373
- it('ignores known editing if for wrong edit', () => {
374
- const log = new EditLog();
375
- const editsProcessed = [];
376
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
377
- const before = viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
378
- const edit = newEdit([]);
379
- log.addLocalEdit(edit);
380
- viewer.setKnownEditingResult(newEdit([]), {
381
- status: EditStatus.Applied,
382
- changes: edit.changes,
383
- before,
384
- after: arbitraryRevisionView,
385
- steps: [],
386
- });
387
- const after = viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
388
- expect(editsProcessed).deep.equal([false]);
389
- expect(after).not.equal(arbitraryRevisionView);
390
- });
391
- it('uses known editing result with multiple edits', () => {
392
- const log = new EditLog();
393
- const editsProcessed = [];
394
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView, (_, _2, wasCached) => editsProcessed.push(wasCached));
395
- const edit1 = newEdit([]);
396
- const edit2 = newEdit([]);
397
- const edit3 = newEdit([]);
398
- log.addLocalEdit(edit1);
399
- const before = viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
400
- expect(editsProcessed).deep.equal([false]);
401
- log.addLocalEdit(edit2);
402
- viewer.setKnownEditingResult(edit2, {
403
- status: EditStatus.Applied,
404
- changes: edit2.changes,
405
- before,
406
- after: arbitraryRevisionView,
407
- steps: [],
408
- });
409
- const after = viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
410
- expect(editsProcessed).deep.equal([false, true]);
411
- expect(after).equal(arbitraryRevisionView);
412
- log.addLocalEdit(edit3);
413
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
414
- expect(editsProcessed).deep.equal([false, true, false]);
415
- });
416
- it('caches the oldest in memory revision when edits are evicted', async () => {
417
- let retainedRevision = 0;
418
- const targetEditLogSize = 10;
419
- const log = new EditLog(undefined, undefined, undefined, targetEditLogSize, targetEditLogSize * 2);
420
- const viewer = getCachingLogViewerAssumeAppliedEdits(log, simpleLogBaseView);
421
- viewer.on(CachingLogViewerDiagnosticEvents.RevisionRetained, (revision) => {
422
- retainedRevision = revision;
423
- });
424
- // Add enough edits to the log to start evicting
425
- for (let i = 0; i < targetEditLogSize; i++) {
426
- const edit = newEdit([]);
427
- log.addSequencedEdit(edit, { sequenceNumber: i, referenceSequenceNumber: i - 1 });
428
- expect(log.getIndexOfId(edit.id)).equals(i);
429
- }
430
- expect(log.length)
431
- .equals(log.numberOfSequencedEdits)
432
- .and.equals(targetEditLogSize, 'Only sequenced edits should be present.');
433
- // Add more edits so that the oldest get evicted
434
- for (let i = 0; i < targetEditLogSize; i++) {
435
- const edit = newEdit([]);
436
- const sequenceNumber = targetEditLogSize + i;
437
- log.addSequencedEdit(edit, {
438
- sequenceNumber,
439
- referenceSequenceNumber: sequenceNumber - 1,
440
- minimumSequenceNumber: sequenceNumber - 1,
441
- });
442
- }
443
- // Check to see that the revision was retained
444
- expect(retainedRevision).to.equal(targetEditLogSize);
445
- // Make sure retrieving the latest revision is possible after edit eviction
446
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
447
- });
448
- describe('Callbacks', () => {
449
- function getViewer() {
450
- const log = getTestTreeLog(testTree);
451
- const events = [];
452
- const viewer = new CachingLogViewer(log, simpleLogBaseView, undefined, undefined, (args) => events.push(args));
453
- return { log, viewer, events };
454
- }
455
- function addInvalidEdit(log) {
456
- // Add a local edit that will be invalid (inserts a node at a location that doesn't exist)
457
- const edit = newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], expectDefined(StablePlaceInternal.atEndOf({
458
- label: testTraitLabel,
459
- parent: testTree.generateNodeId(),
460
- }))));
461
- log.addLocalEdit(edit);
462
- return edit;
463
- }
464
- it('processSequencedEditResult is called when a sequenced edit is applied', async () => {
465
- const { log, events, viewer } = getViewer();
466
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
467
- events.splice(0);
468
- // Non-sequenced edit should not trigger a call
469
- const invalidEdit = addInvalidEdit(log);
470
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
471
- expect(events.length).equals(0);
472
- log.addSequencedEdit(invalidEdit, { sequenceNumber: 3, referenceSequenceNumber: 2 });
473
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
474
- expect(events.length).equals(1);
475
- expect(events[0].edit.id).equals(invalidEdit.id);
476
- expect(events[0].wasLocal).equals(true);
477
- expect(events[0].result.status).equals(EditStatus.Invalid);
478
- expect(events[0].reconciliationPath.length).equals(0);
479
- const validEdit1 = newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atStartOf(testTree.left.traitLocation)));
480
- log.addSequencedEdit(validEdit1, { sequenceNumber: 3, referenceSequenceNumber: 2 });
481
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
482
- expect(events.length).equals(2);
483
- expect(events[1].edit.id).equals(validEdit1.id);
484
- expect(events[1].wasLocal).equals(false);
485
- expect(events[1].result.status).equals(EditStatus.Applied);
486
- expect(events[1].reconciliationPath.length).equals(0);
487
- const validEdit2 = newEdit(ChangeInternal.insertTree([testTree.buildLeafInternal()], StablePlaceInternal.atStartOf(testTree.left.traitLocation)));
488
- log.addSequencedEdit(validEdit2, { sequenceNumber: 4, referenceSequenceNumber: 2 });
489
- viewer.getRevisionViewInMemory(Number.POSITIVE_INFINITY);
490
- expect(events.length).equals(3);
491
- expect(events[2].edit.id).equals(validEdit2.id);
492
- expect(events[2].wasLocal).equals(false);
493
- expect(events[2].result.status).equals(EditStatus.Applied);
494
- expect(events[2].reconciliationPath.length).equals(1);
495
- });
496
- });
497
- describe('Sequencing', () => {
498
- function addFakeEdit(logViewer, sequenceNumber, referenceSequenceNumber) {
499
- const id = String(sequenceNumber ?? uuidv4());
500
- const edit = { changes: [ChangeInternal.setPayload(simpleLogBaseView.root, id)], id };
501
- logViewer.log.addSequencedEdit(edit, {
502
- sequenceNumber,
503
- referenceSequenceNumber: referenceSequenceNumber ?? sequenceNumber - 1,
504
- });
505
- return edit;
506
- }
507
- function minimalLogViewer() {
508
- return new CachingLogViewer(new EditLog(), simpleLogBaseView);
509
- }
510
- it('tracks the earliest sequenced edit in the session', () => {
511
- const logViewer = minimalLogViewer();
512
- expect(logViewer.earliestSequencedEditInMemory()).undefined;
513
- // Non-sequenced edit
514
- logViewer.log.addLocalEdit({ id: uuidv4(), changes: [] });
515
- expect(logViewer.earliestSequencedEditInMemory()).undefined;
516
- // First sequenced edit
517
- const edit = addFakeEdit(logViewer, 123);
518
- const expected = { edit, sequenceNumber: 123 };
519
- expect(logViewer.earliestSequencedEditInMemory()).deep.equals(expected);
520
- // Non-sequenced edit
521
- logViewer.log.addLocalEdit({ id: uuidv4(), changes: [] });
522
- expect(logViewer.earliestSequencedEditInMemory()).deep.equals(expected);
523
- // Second sequenced edit
524
- addFakeEdit(logViewer, 456);
525
- expect(logViewer.earliestSequencedEditInMemory()).deep.equals(expected);
526
- });
527
- it('can provide edit results for sequenced edits', () => {
528
- const logViewer = minimalLogViewer();
529
- expect(logViewer.getEditResultFromSequenceNumber(42)).undefined;
530
- // Non-sequenced edit
531
- logViewer.log.addLocalEdit({ id: uuidv4(), changes: [] });
532
- expect(logViewer.getEditResultFromSequenceNumber(42)).undefined;
533
- // First sequenced edit
534
- const edit1 = addFakeEdit(logViewer, 123);
535
- expect(logViewer.getEditResultFromSequenceNumber(42)).undefined;
536
- const expected1 = {
537
- id: edit1.id,
538
- };
539
- expect(logViewer.getEditResultFromSequenceNumber(123)).contains(expected1);
540
- // Check that when no such sequence number exists, the closest earlier edit is returned
541
- expect(logViewer.getEditResultFromSequenceNumber(124)).contains(expected1);
542
- // Second sequenced edit
543
- // Note that this edit is given a greater sequence number than simply incrementing after edit 1.
544
- // This is deliberately done to simulate scenarios where a given DDS may not be sent all sequenced ops (because an other DDS
545
- // might be receiving them).
546
- const edit2 = addFakeEdit(logViewer, 456);
547
- expect(logViewer.getEditResultFromSequenceNumber(123)).contains(expected1);
548
- // Check that when no such sequence number exists, the closest earlier edit is returned
549
- expect(logViewer.getEditResultFromSequenceNumber(124)).contains(expected1);
550
- const expected2 = {
551
- id: edit2.id,
552
- };
553
- expect(logViewer.getEditResultFromSequenceNumber(456)).contains(expected2);
554
- // Check that when no such sequence number exists, the closest earlier edit is returned
555
- expect(logViewer.getEditResultFromSequenceNumber(457)).contains(expected2);
556
- });
557
- it('can provide the reconciliation path for an edit', () => {
558
- const logViewer = minimalLogViewer();
559
- function expectReconciliationPath(edit, path) {
560
- const actual = logViewer.reconciliationPathFromEdit(edit.id);
561
- expect(actual.length).equals(path.length);
562
- for (let i = 0; i < path.length; ++i) {
563
- expect(actual[i].length).equals(1);
564
- const change = actual[i][0].resolvedChange;
565
- expect(change.payload).equals(path[i].id);
566
- }
567
- }
568
- // Non-sequenced edit
569
- const nonSeqEdit = { id: uuidv4(), changes: [] };
570
- logViewer.log.addLocalEdit(nonSeqEdit);
571
- expectReconciliationPath(nonSeqEdit, []);
572
- const edit1 = addFakeEdit(logViewer, 1001);
573
- expectReconciliationPath(edit1, []);
574
- // Note that this edit is given a greater sequence number than simply incrementing after edit 1.
575
- // This is deliberately done to simulate scenarios where a given DDS may not be sent all sequenced ops (because an other DDS
576
- // might be receiving them).
577
- const edit2 = addFakeEdit(logViewer, 2001, 1001);
578
- expectReconciliationPath(edit2, []);
579
- const edit3 = addFakeEdit(logViewer, 3001, 2000);
580
- expectReconciliationPath(edit3, [edit2]);
581
- const edit4 = addFakeEdit(logViewer, 4001, 2500);
582
- expectReconciliationPath(edit4, [edit3]);
583
- const edit5 = addFakeEdit(logViewer, 5001, 500);
584
- expectReconciliationPath(edit5, [edit1, edit2, edit3, edit4]);
585
- });
586
- });
587
- });
588
- //# sourceMappingURL=LogViewer.tests.js.map