@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,355 +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 { validateAssertionError } from '@fluidframework/test-runtime-utils';
8
- import { EditLog, separateEditAndId } from '../EditLog.js';
9
- import { assertNotUndefined } from '../Common.js';
10
- import { newEdit } from '../EditUtilities.js';
11
- describe('EditLog', () => {
12
- const edit0 = newEdit([]);
13
- const edit1 = newEdit([]);
14
- const { id: id0, editWithoutId: editWithoutId0 } = separateEditAndId(edit0);
15
- const { id: id1, editWithoutId: editWithoutId1 } = separateEditAndId(edit1);
16
- it('can be constructed from sequenced edits', () => {
17
- const editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];
18
- const editIds = [id0, id1];
19
- const log = new EditLog({ editChunks, editIds });
20
- expect(log.numberOfLocalEdits).to.equal(0, 'Newly initialized log should not have local edits.');
21
- expect(log.numberOfSequencedEdits).to.equal(editChunks[0].chunk.length, 'Log should have as many sequenced edits as it was initialized with.');
22
- expect(log.length).to.equal(editChunks[0].chunk.length, "Log's total length should match its sequenced edits on construction");
23
- expect(log.getIdAtIndex(0)).to.equal(id0, 'Log should have edits in order of construction.');
24
- expect(log.getIdAtIndex(1)).to.equal(id1, 'Log should have edits in order of construction.');
25
- });
26
- it('can get the index from an edit id of sequenced edits', () => {
27
- const editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];
28
- const editIds = [id0, id1];
29
- const log = new EditLog({ editChunks, editIds });
30
- expect(log.getIndexOfId(id0)).to.equal(0);
31
- expect(log.getIndexOfId(id1)).to.equal(1);
32
- });
33
- it('can get the index from an edit id of a local edit', () => {
34
- const editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];
35
- const editIds = [id0];
36
- const log = new EditLog({ editChunks, editIds });
37
- log.addLocalEdit(edit1);
38
- expect(log.getIndexOfId(id0)).to.equal(0);
39
- expect(log.getIndexOfId(id1)).to.equal(1);
40
- });
41
- describe('tryGetIndexOfId', () => {
42
- it('can get the index from an existing edit', () => {
43
- const editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];
44
- const editIds = [id0];
45
- const log = new EditLog({ editChunks, editIds });
46
- expect(log.tryGetIndexOfId(id0)).to.equal(0);
47
- });
48
- it('returns undefined when queried with a nonexistent edit', () => {
49
- const editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];
50
- const editIds = ['f9379af1-6f1a-4f71-8f8c-859359621404'];
51
- const log = new EditLog({ editChunks, editIds });
52
- expect(log.tryGetIndexOfId('aa203fc3-bc28-437d-b01c-f9398dc859ef')).to.equal(undefined);
53
- });
54
- });
55
- it('can get an edit from an index', async () => {
56
- const editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];
57
- const editIds = [id0, id1];
58
- const log = new EditLog({ editChunks, editIds });
59
- expect(log.tryGetEditAtIndex(0)?.id).to.equal(id0);
60
- expect(log.tryGetEditAtIndex(1)?.id).to.equal(id1);
61
- });
62
- it('can get an edit from an edit id', async () => {
63
- const editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];
64
- const editIds = [id0, id1];
65
- const log = new EditLog({ editChunks, editIds });
66
- const editFromId0 = log.tryGetEditFromId(id0);
67
- const editFromId1 = log.tryGetEditFromId(id1);
68
- expect(editFromId0).to.not.be.undefined;
69
- expect(editFromId1).to.not.be.undefined;
70
- expect(assertNotUndefined(editFromId0).id).to.equal(edit0.id);
71
- expect(assertNotUndefined(editFromId1).id).to.equal(edit1.id);
72
- });
73
- it('can be iterated', () => {
74
- const log = new EditLog();
75
- log.addLocalEdit(edit1);
76
- log.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });
77
- // Sequenced edits should be iterated before local edits
78
- const expectedEditIdStack = [id1, id0];
79
- log.editIds.forEach((editId) => {
80
- expect(editId).to.equal(expectedEditIdStack.pop());
81
- });
82
- expect(expectedEditIdStack.length).to.equal(0);
83
- });
84
- it('can add sequenced edits', () => {
85
- const log = new EditLog();
86
- log.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });
87
- expect(log.numberOfSequencedEdits).to.equal(1);
88
- expect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');
89
- log.addSequencedEdit(edit1, { sequenceNumber: 2, referenceSequenceNumber: 1 });
90
- expect(log.numberOfSequencedEdits).to.equal(2);
91
- expect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');
92
- expect(log.length).to.equal(2);
93
- });
94
- it('can add local edits', () => {
95
- const log = new EditLog();
96
- log.addLocalEdit(edit0);
97
- expect(log.numberOfLocalEdits).to.equal(1);
98
- expect(log.numberOfSequencedEdits).to.equal(0, 'Log should have only local edits.');
99
- log.addLocalEdit(edit1);
100
- expect(log.numberOfLocalEdits).to.equal(2);
101
- expect(log.numberOfSequencedEdits).to.equal(0, 'Log should have only local edits.');
102
- expect(log.length).to.equal(2);
103
- });
104
- it('tracks the min sequence index of sequenced edits', () => {
105
- const log = new EditLog();
106
- expect(log.minSequenceNumber).equals(0);
107
- log.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });
108
- expect(log.minSequenceNumber).equals(0);
109
- log.addSequencedEdit(edit1, { sequenceNumber: 43, referenceSequenceNumber: 42, minimumSequenceNumber: 42 });
110
- expect(log.minSequenceNumber).equals(42);
111
- assert.throws(() => log.addSequencedEdit('fake-edit', {
112
- sequenceNumber: 44,
113
- referenceSequenceNumber: 43,
114
- }), (e) => validateAssertionError(e, /min number/));
115
- });
116
- it('detects causal ordering violations', () => {
117
- const log = new EditLog();
118
- log.addLocalEdit(edit0);
119
- log.addLocalEdit(edit1);
120
- assert.throws(() => log.addSequencedEdit(edit1, { sequenceNumber: 1, referenceSequenceNumber: 0 }), (e) => validateAssertionError(e, /ordering/));
121
- });
122
- it('can sequence a local edit', async () => {
123
- const log = new EditLog();
124
- log.addLocalEdit(edit0);
125
- expect(log.numberOfLocalEdits).to.equal(1);
126
- let editFromId0 = log.tryGetEditFromId(id0);
127
- expect(editFromId0).to.not.be.undefined;
128
- expect(assertNotUndefined(editFromId0).id).equals(edit0.id, 'Log should contain local edit.');
129
- log.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });
130
- expect(log.length).to.equal(1);
131
- expect(log.numberOfSequencedEdits).to.equal(1);
132
- expect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');
133
- editFromId0 = log.tryGetEditFromId(id0);
134
- expect(editFromId0).to.not.be.undefined;
135
- expect(assertNotUndefined(editFromId0).id).equals(edit0.id, 'Log should contain sequenced edit.');
136
- });
137
- it('Throws on duplicate sequenced edits', async () => {
138
- const log = new EditLog();
139
- log.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });
140
- assert.throws(() => log.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 }), (e) => validateAssertionError(e, /Duplicate/));
141
- });
142
- it('can sequence multiple local edits', async () => {
143
- const log = new EditLog();
144
- const ids = [];
145
- const numEdits = 10;
146
- for (let i = 0; i < numEdits; i++) {
147
- const edit = newEdit([]);
148
- log.addLocalEdit(edit);
149
- ids.push(edit.id);
150
- expect(log.getIndexOfId(edit.id)).equals(i, 'Local edits should be appended to the end of the log.');
151
- }
152
- expect(log.length).equals(log.numberOfLocalEdits).and.equals(numEdits, 'Only local edits should be present.');
153
- log.sequenceLocalEdits();
154
- expect(log.editIds).to.deep.equal(ids, 'Sequencing a local edit should not change its index.');
155
- expect(log.length)
156
- .equals(log.numberOfSequencedEdits)
157
- .and.equals(numEdits, 'Only sequenced edits should be present.');
158
- });
159
- it('can correctly compare equality to other edit logs', () => {
160
- const edit0Copy = { ...edit0 };
161
- const edit1Copy = { ...edit1 };
162
- const { editWithoutId: editWithoutId0Copy } = separateEditAndId(edit0Copy);
163
- const { editWithoutId: editWithoutId1Copy } = separateEditAndId(edit1Copy);
164
- const editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];
165
- const editChunksCopy = [{ startRevision: 0, chunk: [editWithoutId0Copy, editWithoutId1Copy] }];
166
- const editIds = [id0, id1];
167
- const log0 = new EditLog({ editChunks, editIds });
168
- const log1 = new EditLog({ editChunks: editChunksCopy, editIds });
169
- expect(log0.equals(log1)).to.be.true;
170
- const log2 = new EditLog({
171
- editChunks: [{ startRevision: 0, chunk: [editWithoutId0] }],
172
- editIds: [id0],
173
- });
174
- log2.addLocalEdit(edit1Copy);
175
- expect(log0.equals(log2)).to.be.true;
176
- const differentLog = new EditLog({
177
- editChunks: [{ startRevision: 0, chunk: [editWithoutId0] }],
178
- editIds: [id0],
179
- });
180
- expect(log0.equals(differentLog)).to.be.false;
181
- });
182
- it('can configure a maximum size and evict edits once it grows larger than that size', () => {
183
- const targetEditLogSize = 10;
184
- const log = new EditLog(undefined, undefined, undefined, targetEditLogSize, targetEditLogSize * 2);
185
- const ids = [];
186
- let editsEvicted = 0;
187
- log.registerEditEvictionHandler((editsToEvict) => {
188
- editsEvicted += editsToEvict;
189
- });
190
- for (let i = 0; i < targetEditLogSize; i++) {
191
- const edit = newEdit([]);
192
- log.addSequencedEdit(edit, {
193
- sequenceNumber: i,
194
- referenceSequenceNumber: i - 1,
195
- });
196
- ids.push(edit.id);
197
- expect(log.getIndexOfId(edit.id)).equals(i);
198
- }
199
- expect(log.length)
200
- .equals(log.numberOfSequencedEdits)
201
- .and.equals(targetEditLogSize, 'Only sequenced edits should be present.');
202
- const newIds = [];
203
- for (let i = 0; i < targetEditLogSize; i++) {
204
- const edit = newEdit([]);
205
- const sequenceNumber = targetEditLogSize + i;
206
- log.addSequencedEdit(edit, {
207
- sequenceNumber,
208
- referenceSequenceNumber: sequenceNumber - 1,
209
- minimumSequenceNumber: sequenceNumber - 1,
210
- });
211
- newIds.push(edit.id);
212
- }
213
- expect(log.editIds).to.deep.equal(newIds, 'Edit IDs should have been evicted.');
214
- expect(log.length)
215
- .equals(log.numberOfSequencedEdits)
216
- .and.equals(targetEditLogSize, 'Edits should have been evicted');
217
- expect(editsEvicted).to.equal(targetEditLogSize);
218
- // Check that indices are the same after eviction
219
- expect(log.tryGetEditAtIndex(15)?.id).to.equal(ids.concat(newIds)[15]);
220
- });
221
- it('can handle sparse sequence numbers', () => {
222
- const targetEditLogSize = 10;
223
- const log = new EditLog(undefined, undefined, undefined, targetEditLogSize, targetEditLogSize * 2);
224
- const sequenceNumberInterval = 3;
225
- let editsEvicted = 0;
226
- log.registerEditEvictionHandler((editsToEvict) => {
227
- editsEvicted += editsToEvict;
228
- });
229
- let sequenceNumber = 0;
230
- for (let i = 0; i < targetEditLogSize; i++) {
231
- const edit = newEdit([]);
232
- log.addSequencedEdit(edit, {
233
- sequenceNumber,
234
- referenceSequenceNumber: sequenceNumber - 1,
235
- });
236
- sequenceNumber += sequenceNumberInterval;
237
- expect(log.getIndexOfId(edit.id)).equals(i);
238
- }
239
- expect(log.length)
240
- .equals(log.numberOfSequencedEdits)
241
- .and.equals(targetEditLogSize, 'Only sequenced edits should be present.');
242
- const extraEditsToKeep = 3;
243
- const collaborationWindowSize = targetEditLogSize + extraEditsToKeep;
244
- const minimumSequenceNumber = sequenceNumber - extraEditsToKeep * sequenceNumberInterval;
245
- for (let i = 0; i < targetEditLogSize; i++) {
246
- const edit = newEdit([]);
247
- log.addSequencedEdit(edit, {
248
- sequenceNumber,
249
- referenceSequenceNumber: sequenceNumber - 1,
250
- minimumSequenceNumber,
251
- });
252
- sequenceNumber += sequenceNumberInterval;
253
- }
254
- expect(log.length)
255
- .equals(log.numberOfSequencedEdits)
256
- .and.equals(collaborationWindowSize, 'Edits should have been evicted');
257
- expect(editsEvicted).to.equal(targetEditLogSize * 2 - collaborationWindowSize);
258
- });
259
- it("can handle sparse sequence numbers with a minimum sequence number that's not in memory", () => {
260
- const targetEditLogSize = 10;
261
- const log = new EditLog(undefined, undefined, undefined, targetEditLogSize, targetEditLogSize * 2);
262
- const sequenceNumberInterval = 3;
263
- let editsEvicted = 0;
264
- log.registerEditEvictionHandler((editsToEvict) => {
265
- editsEvicted += editsToEvict;
266
- });
267
- let sequenceNumber = 0;
268
- for (let i = 0; i < targetEditLogSize; i++) {
269
- const edit = newEdit([]);
270
- log.addSequencedEdit(edit, {
271
- sequenceNumber,
272
- referenceSequenceNumber: sequenceNumber - 1,
273
- });
274
- sequenceNumber += sequenceNumberInterval;
275
- expect(log.getIndexOfId(edit.id)).equals(i);
276
- }
277
- expect(log.length)
278
- .equals(log.numberOfSequencedEdits)
279
- .and.equals(targetEditLogSize, 'Only sequenced edits should be present.');
280
- const extraEditsToKeep = 3;
281
- const collaborationWindowSize = targetEditLogSize + extraEditsToKeep;
282
- // Adjusts the minimum sequence number to one that's not associated with any of the edits added
283
- const minimumSequenceNumber = sequenceNumber - 1 - extraEditsToKeep * sequenceNumberInterval;
284
- for (let i = 0; i < targetEditLogSize; i++) {
285
- const edit = newEdit([]);
286
- log.addSequencedEdit(edit, {
287
- sequenceNumber,
288
- referenceSequenceNumber: sequenceNumber - 1,
289
- minimumSequenceNumber,
290
- });
291
- sequenceNumber += sequenceNumberInterval;
292
- }
293
- expect(log.length)
294
- .equals(log.numberOfSequencedEdits)
295
- .and.equals(collaborationWindowSize, 'Edits should have been evicted');
296
- expect(editsEvicted).to.equal(targetEditLogSize * 2 - collaborationWindowSize);
297
- });
298
- describe('does not evict edits in the collaboration window', () => {
299
- [0, 2, 8, 23, 50, 68, 255].forEach((startSequenceNumber) => {
300
- [1, 7, 10, 13, 52].forEach((targetEditLogSize) => {
301
- [2, 15, 21, Math.floor(targetEditLogSize * 1.5), targetEditLogSize * 2].forEach((collaborationWindowSize) => {
302
- it(`when accepting edits starting from sequence number ${startSequenceNumber} and targeting an edit log size of ${targetEditLogSize} and a collaboration window size of ${collaborationWindowSize}`, () => {
303
- const log = new EditLog(undefined, undefined, undefined, targetEditLogSize, targetEditLogSize * 2);
304
- let editsEvicted = 0;
305
- log.registerEditEvictionHandler((editsToEvict) => {
306
- editsEvicted += editsToEvict;
307
- });
308
- let sequenceNumber = startSequenceNumber;
309
- const addEditsTillEviction = (minimumSequenceNumber) => {
310
- for (let i = 0; i < targetEditLogSize; i++) {
311
- const edit = newEdit([]);
312
- log.addSequencedEdit(edit, {
313
- sequenceNumber,
314
- referenceSequenceNumber: sequenceNumber - 1,
315
- minimumSequenceNumber,
316
- });
317
- sequenceNumber += 1;
318
- }
319
- };
320
- // Add enough edits to hit the target size
321
- addEditsTillEviction();
322
- expect(log.length)
323
- .equals(log.numberOfSequencedEdits)
324
- .and.equals(targetEditLogSize, 'Only sequenced edits should be present.');
325
- // Add another set of edits to trigger eviction while setting the collaboration window size
326
- const minimumSequenceNumber = Math.max(0, startSequenceNumber + targetEditLogSize * 2 - collaborationWindowSize);
327
- addEditsTillEviction(minimumSequenceNumber);
328
- const expectedEditLogSize =
329
- // If the target edit log size is larger than the collaboration window size, we can evict everything we want to
330
- targetEditLogSize > collaborationWindowSize
331
- ? targetEditLogSize
332
- : Math.min(targetEditLogSize * 2, collaborationWindowSize);
333
- expect(log.length)
334
- .equals(log.numberOfSequencedEdits)
335
- .and.equals(expectedEditLogSize, 'Only edits outside the collab window should have been evicted');
336
- expect(editsEvicted).to.equal(targetEditLogSize * 2 - expectedEditLogSize);
337
- // Trigger a second eviction to ensure that eviction works after an eviction has already occurred
338
- const secondMinimumSequenceNumber = Math.max(0, startSequenceNumber + targetEditLogSize * 3 - collaborationWindowSize);
339
- addEditsTillEviction(secondMinimumSequenceNumber);
340
- const secondExpectedEditLogSize =
341
- // If the target edit log size is larger than the collaboration window size, we can evict everything we want to
342
- targetEditLogSize > collaborationWindowSize
343
- ? targetEditLogSize
344
- : Math.min(targetEditLogSize * 3, collaborationWindowSize);
345
- expect(log.length)
346
- .equals(log.numberOfSequencedEdits)
347
- .and.equals(secondExpectedEditLogSize, 'Only edits outside the collab window should have been evicted');
348
- expect(editsEvicted).to.equal(targetEditLogSize * 3 - secondExpectedEditLogSize);
349
- });
350
- });
351
- });
352
- });
353
- });
354
- });
355
- //# sourceMappingURL=EditLog.tests.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditLog.tests.js","sourceRoot":"","sources":["../../src/test/EditLog.tests.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from 'assert';\nimport { expect } from 'chai';\nimport { validateAssertionError } from '@fluidframework/test-runtime-utils';\nimport { EditLog, separateEditAndId } from '../EditLog.js';\nimport { EditId } from '../Identifiers.js';\nimport { assertNotUndefined } from '../Common.js';\nimport { Edit } from '../persisted-types/index.js';\nimport { newEdit } from '../EditUtilities.js';\n\ntype DummyChange = never;\n\ndescribe('EditLog', () => {\n\tconst edit0 = newEdit([]);\n\tconst edit1 = newEdit([]);\n\tconst { id: id0, editWithoutId: editWithoutId0 } = separateEditAndId(edit0);\n\tconst { id: id1, editWithoutId: editWithoutId1 } = separateEditAndId(edit1);\n\n\tit('can be constructed from sequenced edits', () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Newly initialized log should not have local edits.');\n\t\texpect(log.numberOfSequencedEdits).to.equal(\n\t\t\teditChunks[0].chunk.length,\n\t\t\t'Log should have as many sequenced edits as it was initialized with.'\n\t\t);\n\t\texpect(log.length).to.equal(\n\t\t\teditChunks[0].chunk.length,\n\t\t\t\"Log's total length should match its sequenced edits on construction\"\n\t\t);\n\n\t\texpect(log.getIdAtIndex(0)).to.equal(id0, 'Log should have edits in order of construction.');\n\t\texpect(log.getIdAtIndex(1)).to.equal(id1, 'Log should have edits in order of construction.');\n\t});\n\n\tit('can get the index from an edit id of sequenced edits', () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\n\t\texpect(log.getIndexOfId(id0)).to.equal(0);\n\t\texpect(log.getIndexOfId(id1)).to.equal(1);\n\t});\n\n\tit('can get the index from an edit id of a local edit', () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];\n\t\tconst editIds = [id0];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\t\tlog.addLocalEdit(edit1);\n\n\t\texpect(log.getIndexOfId(id0)).to.equal(0);\n\t\texpect(log.getIndexOfId(id1)).to.equal(1);\n\t});\n\n\tdescribe('tryGetIndexOfId', () => {\n\t\tit('can get the index from an existing edit', () => {\n\t\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];\n\t\t\tconst editIds = [id0];\n\t\t\tconst log = new EditLog({ editChunks, editIds });\n\t\t\texpect(log.tryGetIndexOfId(id0)).to.equal(0);\n\t\t});\n\n\t\tit('returns undefined when queried with a nonexistent edit', () => {\n\t\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0] }];\n\t\t\tconst editIds = ['f9379af1-6f1a-4f71-8f8c-859359621404' as EditId];\n\t\t\tconst log = new EditLog({ editChunks, editIds });\n\t\t\texpect(log.tryGetIndexOfId('aa203fc3-bc28-437d-b01c-f9398dc859ef' as EditId)).to.equal(undefined);\n\t\t});\n\t});\n\n\tit('can get an edit from an index', async () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\n\t\texpect(log.tryGetEditAtIndex(0)?.id).to.equal(id0);\n\t\texpect(log.tryGetEditAtIndex(1)?.id).to.equal(id1);\n\t});\n\n\tit('can get an edit from an edit id', async () => {\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log = new EditLog({ editChunks, editIds });\n\n\t\tconst editFromId0 = log.tryGetEditFromId(id0);\n\t\tconst editFromId1 = log.tryGetEditFromId(id1);\n\n\t\texpect(editFromId0).to.not.be.undefined;\n\t\texpect(editFromId1).to.not.be.undefined;\n\t\texpect(assertNotUndefined(editFromId0).id).to.equal(edit0.id);\n\t\texpect(assertNotUndefined(editFromId1).id).to.equal(edit1.id);\n\t});\n\n\tit('can be iterated', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit1);\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\n\t\t// Sequenced edits should be iterated before local edits\n\t\tconst expectedEditIdStack = [id1, id0];\n\n\t\tlog.editIds.forEach((editId) => {\n\t\t\texpect(editId).to.equal(expectedEditIdStack.pop());\n\t\t});\n\n\t\texpect(expectedEditIdStack.length).to.equal(0);\n\t});\n\n\tit('can add sequenced edits', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(log.numberOfSequencedEdits).to.equal(1);\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');\n\n\t\tlog.addSequencedEdit(edit1, { sequenceNumber: 2, referenceSequenceNumber: 1 });\n\t\texpect(log.numberOfSequencedEdits).to.equal(2);\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');\n\t\texpect(log.length).to.equal(2);\n\t});\n\n\tit('can add local edits', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit0);\n\t\texpect(log.numberOfLocalEdits).to.equal(1);\n\t\texpect(log.numberOfSequencedEdits).to.equal(0, 'Log should have only local edits.');\n\n\t\tlog.addLocalEdit(edit1);\n\t\texpect(log.numberOfLocalEdits).to.equal(2);\n\t\texpect(log.numberOfSequencedEdits).to.equal(0, 'Log should have only local edits.');\n\t\texpect(log.length).to.equal(2);\n\t});\n\n\tit('tracks the min sequence index of sequenced edits', () => {\n\t\tconst log = new EditLog();\n\n\t\texpect(log.minSequenceNumber).equals(0);\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(log.minSequenceNumber).equals(0);\n\t\tlog.addSequencedEdit(edit1, { sequenceNumber: 43, referenceSequenceNumber: 42, minimumSequenceNumber: 42 });\n\t\texpect(log.minSequenceNumber).equals(42);\n\t\tassert.throws(\n\t\t\t() =>\n\t\t\t\tlog.addSequencedEdit('fake-edit' as unknown as Edit<unknown>, {\n\t\t\t\t\tsequenceNumber: 44,\n\t\t\t\t\treferenceSequenceNumber: 43,\n\t\t\t\t}),\n\t\t\t(e: Error) => validateAssertionError(e, /min number/)\n\t\t);\n\t});\n\n\tit('detects causal ordering violations', () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit0);\n\t\tlog.addLocalEdit(edit1);\n\t\tassert.throws(\n\t\t\t() => log.addSequencedEdit(edit1, { sequenceNumber: 1, referenceSequenceNumber: 0 }),\n\t\t\t(e: Error) => validateAssertionError(e, /ordering/)\n\t\t);\n\t});\n\n\tit('can sequence a local edit', async () => {\n\t\tconst log = new EditLog();\n\n\t\tlog.addLocalEdit(edit0);\n\t\texpect(log.numberOfLocalEdits).to.equal(1);\n\t\tlet editFromId0 = log.tryGetEditFromId(id0);\n\t\texpect(editFromId0).to.not.be.undefined;\n\t\texpect(assertNotUndefined(editFromId0).id).equals(edit0.id, 'Log should contain local edit.');\n\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\texpect(log.length).to.equal(1);\n\t\texpect(log.numberOfSequencedEdits).to.equal(1);\n\t\texpect(log.numberOfLocalEdits).to.equal(0, 'Log should have only sequenced edits.');\n\t\teditFromId0 = log.tryGetEditFromId(id0);\n\t\texpect(editFromId0).to.not.be.undefined;\n\t\texpect(assertNotUndefined(editFromId0).id).equals(edit0.id, 'Log should contain sequenced edit.');\n\t});\n\n\tit('Throws on duplicate sequenced edits', async () => {\n\t\tconst log = new EditLog();\n\t\tlog.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 });\n\t\tassert.throws(\n\t\t\t() => log.addSequencedEdit(edit0, { sequenceNumber: 1, referenceSequenceNumber: 0 }),\n\t\t\t(e: Error) => validateAssertionError(e, /Duplicate/)\n\t\t);\n\t});\n\n\tit('can sequence multiple local edits', async () => {\n\t\tconst log = new EditLog();\n\t\tconst ids: EditId[] = [];\n\n\t\tconst numEdits = 10;\n\t\tfor (let i = 0; i < numEdits; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tlog.addLocalEdit(edit);\n\t\t\tids.push(edit.id);\n\t\t\texpect(log.getIndexOfId(edit.id)).equals(i, 'Local edits should be appended to the end of the log.');\n\t\t}\n\t\texpect(log.length).equals(log.numberOfLocalEdits).and.equals(numEdits, 'Only local edits should be present.');\n\n\t\tlog.sequenceLocalEdits();\n\n\t\texpect(log.editIds).to.deep.equal(ids, 'Sequencing a local edit should not change its index.');\n\n\t\texpect(log.length)\n\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t.and.equals(numEdits, 'Only sequenced edits should be present.');\n\t});\n\n\tit('can correctly compare equality to other edit logs', () => {\n\t\tconst edit0Copy: Edit<DummyChange> = { ...edit0 };\n\t\tconst edit1Copy: Edit<DummyChange> = { ...edit1 };\n\t\tconst { editWithoutId: editWithoutId0Copy } = separateEditAndId(edit0Copy);\n\t\tconst { editWithoutId: editWithoutId1Copy } = separateEditAndId(edit1Copy);\n\n\t\tconst editChunks = [{ startRevision: 0, chunk: [editWithoutId0, editWithoutId1] }];\n\t\tconst editChunksCopy = [{ startRevision: 0, chunk: [editWithoutId0Copy, editWithoutId1Copy] }];\n\t\tconst editIds = [id0, id1];\n\n\t\tconst log0 = new EditLog({ editChunks, editIds });\n\t\tconst log1 = new EditLog({ editChunks: editChunksCopy, editIds });\n\n\t\texpect(log0.equals(log1)).to.be.true;\n\n\t\tconst log2 = new EditLog<DummyChange>({\n\t\t\teditChunks: [{ startRevision: 0, chunk: [editWithoutId0] }],\n\t\t\teditIds: [id0],\n\t\t});\n\t\tlog2.addLocalEdit(edit1Copy);\n\n\t\texpect(log0.equals(log2)).to.be.true;\n\n\t\tconst differentLog = new EditLog({\n\t\t\teditChunks: [{ startRevision: 0, chunk: [editWithoutId0] }],\n\t\t\teditIds: [id0],\n\t\t});\n\n\t\texpect(log0.equals(differentLog)).to.be.false;\n\t});\n\n\tit('can configure a maximum size and evict edits once it grows larger than that size', () => {\n\t\tconst targetEditLogSize = 10;\n\t\tconst log = new EditLog(undefined, undefined, undefined, targetEditLogSize, targetEditLogSize * 2);\n\t\tconst ids: EditId[] = [];\n\n\t\tlet editsEvicted = 0;\n\n\t\tlog.registerEditEvictionHandler((editsToEvict) => {\n\t\t\teditsEvicted += editsToEvict;\n\t\t});\n\n\t\tfor (let i = 0; i < targetEditLogSize; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tlog.addSequencedEdit(edit, {\n\t\t\t\tsequenceNumber: i,\n\t\t\t\treferenceSequenceNumber: i - 1,\n\t\t\t});\n\t\t\tids.push(edit.id);\n\t\t\texpect(log.getIndexOfId(edit.id)).equals(i);\n\t\t}\n\t\texpect(log.length)\n\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t.and.equals(targetEditLogSize, 'Only sequenced edits should be present.');\n\n\t\tconst newIds: EditId[] = [];\n\t\tfor (let i = 0; i < targetEditLogSize; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tconst sequenceNumber = targetEditLogSize + i;\n\t\t\tlog.addSequencedEdit(edit, {\n\t\t\t\tsequenceNumber,\n\t\t\t\treferenceSequenceNumber: sequenceNumber - 1,\n\t\t\t\tminimumSequenceNumber: sequenceNumber - 1,\n\t\t\t});\n\t\t\tnewIds.push(edit.id);\n\t\t}\n\n\t\texpect(log.editIds).to.deep.equal(newIds, 'Edit IDs should have been evicted.');\n\t\texpect(log.length)\n\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t.and.equals(targetEditLogSize, 'Edits should have been evicted');\n\t\texpect(editsEvicted).to.equal(targetEditLogSize);\n\n\t\t// Check that indices are the same after eviction\n\t\texpect(log.tryGetEditAtIndex(15)?.id).to.equal(ids.concat(newIds)[15]);\n\t});\n\n\tit('can handle sparse sequence numbers', () => {\n\t\tconst targetEditLogSize = 10;\n\t\tconst log = new EditLog(undefined, undefined, undefined, targetEditLogSize, targetEditLogSize * 2);\n\t\tconst sequenceNumberInterval = 3;\n\n\t\tlet editsEvicted = 0;\n\n\t\tlog.registerEditEvictionHandler((editsToEvict) => {\n\t\t\teditsEvicted += editsToEvict;\n\t\t});\n\n\t\tlet sequenceNumber = 0;\n\n\t\tfor (let i = 0; i < targetEditLogSize; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tlog.addSequencedEdit(edit, {\n\t\t\t\tsequenceNumber,\n\t\t\t\treferenceSequenceNumber: sequenceNumber - 1,\n\t\t\t});\n\t\t\tsequenceNumber += sequenceNumberInterval;\n\t\t\texpect(log.getIndexOfId(edit.id)).equals(i);\n\t\t}\n\t\texpect(log.length)\n\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t.and.equals(targetEditLogSize, 'Only sequenced edits should be present.');\n\n\t\tconst extraEditsToKeep = 3;\n\t\tconst collaborationWindowSize = targetEditLogSize + extraEditsToKeep;\n\t\tconst minimumSequenceNumber = sequenceNumber - extraEditsToKeep * sequenceNumberInterval;\n\t\tfor (let i = 0; i < targetEditLogSize; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tlog.addSequencedEdit(edit, {\n\t\t\t\tsequenceNumber,\n\t\t\t\treferenceSequenceNumber: sequenceNumber - 1,\n\t\t\t\tminimumSequenceNumber,\n\t\t\t});\n\t\t\tsequenceNumber += sequenceNumberInterval;\n\t\t}\n\n\t\texpect(log.length)\n\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t.and.equals(collaborationWindowSize, 'Edits should have been evicted');\n\t\texpect(editsEvicted).to.equal(targetEditLogSize * 2 - collaborationWindowSize);\n\t});\n\n\tit(\"can handle sparse sequence numbers with a minimum sequence number that's not in memory\", () => {\n\t\tconst targetEditLogSize = 10;\n\t\tconst log = new EditLog(undefined, undefined, undefined, targetEditLogSize, targetEditLogSize * 2);\n\t\tconst sequenceNumberInterval = 3;\n\n\t\tlet editsEvicted = 0;\n\n\t\tlog.registerEditEvictionHandler((editsToEvict) => {\n\t\t\teditsEvicted += editsToEvict;\n\t\t});\n\n\t\tlet sequenceNumber = 0;\n\n\t\tfor (let i = 0; i < targetEditLogSize; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tlog.addSequencedEdit(edit, {\n\t\t\t\tsequenceNumber,\n\t\t\t\treferenceSequenceNumber: sequenceNumber - 1,\n\t\t\t});\n\t\t\tsequenceNumber += sequenceNumberInterval;\n\t\t\texpect(log.getIndexOfId(edit.id)).equals(i);\n\t\t}\n\t\texpect(log.length)\n\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t.and.equals(targetEditLogSize, 'Only sequenced edits should be present.');\n\n\t\tconst extraEditsToKeep = 3;\n\t\tconst collaborationWindowSize = targetEditLogSize + extraEditsToKeep;\n\t\t// Adjusts the minimum sequence number to one that's not associated with any of the edits added\n\t\tconst minimumSequenceNumber = sequenceNumber - 1 - extraEditsToKeep * sequenceNumberInterval;\n\t\tfor (let i = 0; i < targetEditLogSize; i++) {\n\t\t\tconst edit = newEdit([]);\n\t\t\tlog.addSequencedEdit(edit, {\n\t\t\t\tsequenceNumber,\n\t\t\t\treferenceSequenceNumber: sequenceNumber - 1,\n\t\t\t\tminimumSequenceNumber,\n\t\t\t});\n\t\t\tsequenceNumber += sequenceNumberInterval;\n\t\t}\n\n\t\texpect(log.length)\n\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t.and.equals(collaborationWindowSize, 'Edits should have been evicted');\n\t\texpect(editsEvicted).to.equal(targetEditLogSize * 2 - collaborationWindowSize);\n\t});\n\n\tdescribe('does not evict edits in the collaboration window', () => {\n\t\t[0, 2, 8, 23, 50, 68, 255].forEach((startSequenceNumber) => {\n\t\t\t[1, 7, 10, 13, 52].forEach((targetEditLogSize) => {\n\t\t\t\t[2, 15, 21, Math.floor(targetEditLogSize * 1.5), targetEditLogSize * 2].forEach(\n\t\t\t\t\t(collaborationWindowSize) => {\n\t\t\t\t\t\tit(`when accepting edits starting from sequence number ${startSequenceNumber} and targeting an edit log size of ${targetEditLogSize} and a collaboration window size of ${collaborationWindowSize}`, () => {\n\t\t\t\t\t\t\tconst log = new EditLog(\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\ttargetEditLogSize,\n\t\t\t\t\t\t\t\ttargetEditLogSize * 2\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tlet editsEvicted = 0;\n\n\t\t\t\t\t\t\tlog.registerEditEvictionHandler((editsToEvict) => {\n\t\t\t\t\t\t\t\teditsEvicted += editsToEvict;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tlet sequenceNumber = startSequenceNumber;\n\n\t\t\t\t\t\t\tconst addEditsTillEviction = (minimumSequenceNumber?: number) => {\n\t\t\t\t\t\t\t\tfor (let i = 0; i < targetEditLogSize; i++) {\n\t\t\t\t\t\t\t\t\tconst edit = newEdit([]);\n\t\t\t\t\t\t\t\t\tlog.addSequencedEdit(edit, {\n\t\t\t\t\t\t\t\t\t\tsequenceNumber,\n\t\t\t\t\t\t\t\t\t\treferenceSequenceNumber: sequenceNumber - 1,\n\t\t\t\t\t\t\t\t\t\tminimumSequenceNumber,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tsequenceNumber += 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Add enough edits to hit the target size\n\t\t\t\t\t\t\taddEditsTillEviction();\n\t\t\t\t\t\t\texpect(log.length)\n\t\t\t\t\t\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t\t\t\t\t\t.and.equals(targetEditLogSize, 'Only sequenced edits should be present.');\n\n\t\t\t\t\t\t\t// Add another set of edits to trigger eviction while setting the collaboration window size\n\t\t\t\t\t\t\tconst minimumSequenceNumber = Math.max(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tstartSequenceNumber + targetEditLogSize * 2 - collaborationWindowSize\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\taddEditsTillEviction(minimumSequenceNumber);\n\n\t\t\t\t\t\t\tconst expectedEditLogSize =\n\t\t\t\t\t\t\t\t// If the target edit log size is larger than the collaboration window size, we can evict everything we want to\n\t\t\t\t\t\t\t\ttargetEditLogSize > collaborationWindowSize\n\t\t\t\t\t\t\t\t\t? targetEditLogSize\n\t\t\t\t\t\t\t\t\t: Math.min(targetEditLogSize * 2, collaborationWindowSize);\n\t\t\t\t\t\t\texpect(log.length)\n\t\t\t\t\t\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t\t\t\t\t\t.and.equals(\n\t\t\t\t\t\t\t\t\texpectedEditLogSize,\n\t\t\t\t\t\t\t\t\t'Only edits outside the collab window should have been evicted'\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\texpect(editsEvicted).to.equal(targetEditLogSize * 2 - expectedEditLogSize);\n\n\t\t\t\t\t\t\t// Trigger a second eviction to ensure that eviction works after an eviction has already occurred\n\t\t\t\t\t\t\tconst secondMinimumSequenceNumber = Math.max(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tstartSequenceNumber + targetEditLogSize * 3 - collaborationWindowSize\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\taddEditsTillEviction(secondMinimumSequenceNumber);\n\n\t\t\t\t\t\t\tconst secondExpectedEditLogSize =\n\t\t\t\t\t\t\t\t// If the target edit log size is larger than the collaboration window size, we can evict everything we want to\n\t\t\t\t\t\t\t\ttargetEditLogSize > collaborationWindowSize\n\t\t\t\t\t\t\t\t\t? targetEditLogSize\n\t\t\t\t\t\t\t\t\t: Math.min(targetEditLogSize * 3, collaborationWindowSize);\n\t\t\t\t\t\t\texpect(log.length)\n\t\t\t\t\t\t\t\t.equals(log.numberOfSequencedEdits)\n\t\t\t\t\t\t\t\t.and.equals(\n\t\t\t\t\t\t\t\t\tsecondExpectedEditLogSize,\n\t\t\t\t\t\t\t\t\t'Only edits outside the collab window should have been evicted'\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\texpect(editsEvicted).to.equal(targetEditLogSize * 3 - secondExpectedEditLogSize);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t});\n});\n"]}
@@ -1,6 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- export {};
6
- //# sourceMappingURL=EditUtilities.tests.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EditUtilities.tests.d.ts","sourceRoot":"","sources":["../../src/test/EditUtilities.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG"}