@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,178 +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 { RevisionView } from '../RevisionView.js';
9
- import { refreshTestTree } from './utilities/TestUtilities.js';
10
- import { expectDefined } from './utilities/TestCommon.js';
11
- describe('TreeView', () => {
12
- const testTree = refreshTestTree();
13
- describe('can compute deltas', () => {
14
- it('that are the same object', () => {
15
- const view = testTree.view;
16
- expect(view.delta(view)).deep.equals({
17
- changed: [],
18
- added: [],
19
- removed: [],
20
- });
21
- });
22
- it('that have the same tree', () => {
23
- const viewA = RevisionView.fromTree(testTree);
24
- const viewB = RevisionView.fromTree(testTree);
25
- expect(viewA.delta(viewB)).deep.equals({
26
- changed: [],
27
- added: [],
28
- removed: [],
29
- });
30
- });
31
- it('with different root ids', () => {
32
- const viewA = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));
33
- const viewB = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));
34
- assert.throws(() => viewA.delta(viewB), (e) => validateAssertionError(e, 'Delta can only be calculated between views that share a root'));
35
- });
36
- it('with different subtrees', () => {
37
- const rootId = testTree.generateNodeId();
38
- const leafA = testTree.buildLeaf(testTree.generateNodeId());
39
- const leafB = testTree.buildLeaf(testTree.generateNodeId());
40
- const subtreeA = {
41
- identifier: testTree.generateNodeId(),
42
- definition: 'node',
43
- traits: { children: [leafA] },
44
- };
45
- const subtreeB = {
46
- identifier: testTree.generateNodeId(),
47
- definition: 'node',
48
- traits: { children: [leafB] },
49
- };
50
- const rootA = {
51
- identifier: rootId,
52
- definition: 'node',
53
- traits: {
54
- children: [subtreeA],
55
- },
56
- };
57
- const rootB = {
58
- identifier: rootId,
59
- definition: 'node',
60
- traits: {
61
- children: [subtreeB],
62
- },
63
- };
64
- const viewA = RevisionView.fromTree(rootA);
65
- const viewB = RevisionView.fromTree(rootB);
66
- const delta = viewA.delta(viewB);
67
- expect(delta.changed).deep.equals([rootId]);
68
- expect(delta.removed.length).equals(2);
69
- expect(delta.added.length).equals(2);
70
- expect(delta.removed).contains(subtreeA.identifier);
71
- expect(delta.removed).contains(leafA.identifier);
72
- expect(delta.added).contains(subtreeB.identifier);
73
- expect(delta.added).contains(leafB.identifier);
74
- });
75
- it('with different payloads', () => {
76
- const rootId = testTree.generateNodeId();
77
- const nodeA = {
78
- identifier: rootId,
79
- definition: 'node',
80
- payload: 'test1',
81
- traits: {},
82
- };
83
- const nodeB = {
84
- identifier: rootId,
85
- definition: 'node',
86
- payload: 'test2',
87
- traits: {},
88
- };
89
- const viewA = RevisionView.fromTree(nodeA);
90
- const viewB = RevisionView.fromTree(nodeB);
91
- const delta = viewA.delta(viewB);
92
- expect(delta.changed).deep.equals([rootId]);
93
- expect(delta.removed).deep.equals([]);
94
- expect(delta.added).deep.equals([]);
95
- });
96
- it('after an insert', () => {
97
- const viewA = testTree.view;
98
- const insertedNode = testTree.buildLeaf(testTree.generateNodeId());
99
- const treeB = {
100
- identifier: testTree.identifier,
101
- definition: testTree.definition,
102
- traits: { ...testTree.traits, left: [insertedNode, testTree.left] },
103
- };
104
- const viewB = RevisionView.fromTree(treeB);
105
- const delta = viewA.delta(viewB);
106
- expect(delta.changed).deep.equals([testTree.identifier]);
107
- expect(delta.removed).deep.equals([]);
108
- expect(delta.added).deep.equals([insertedNode.identifier]);
109
- });
110
- it('after a delete', () => {
111
- const viewA = testTree.view;
112
- const treeB = {
113
- identifier: testTree.identifier,
114
- definition: testTree.definition,
115
- traits: { ...testTree.traits, left: [] },
116
- };
117
- const viewB = RevisionView.fromTree(treeB);
118
- const delta = viewA.delta(viewB);
119
- expect(delta.changed).deep.equals([testTree.identifier]);
120
- expect(delta.removed).deep.equals([testTree.left.identifier]);
121
- expect(delta.added).deep.equals([]);
122
- });
123
- it('after a move', () => {
124
- const viewA = testTree.view;
125
- const treeB = {
126
- identifier: testTree.identifier,
127
- definition: testTree.definition,
128
- traits: { ...testTree.traits, left: [], right: [testTree.right, testTree.left] },
129
- };
130
- const viewB = RevisionView.fromTree(treeB);
131
- const delta = viewA.delta(viewB);
132
- expect(delta.changed).deep.equals([testTree.identifier]);
133
- expect(delta.removed).deep.equals([]);
134
- expect(delta.added).deep.equals([]);
135
- });
136
- });
137
- it('correctly returns node parentage', () => {
138
- const view = testTree.view;
139
- for (const node of view) {
140
- const parentNode = view.tryGetParentViewNode(node.identifier);
141
- if (parentNode !== undefined) {
142
- const parentage = expectDefined(node.parentage);
143
- expect(parentage.label).to.equal(view.getTraitLabel(node.identifier));
144
- expect(parentage.parent).to.equal(parentNode.identifier);
145
- }
146
- }
147
- });
148
- // Regression test for the issue fixed in #9824
149
- it('can be iterated in a consistent order', () => {
150
- const [id1, id2, id3] = Array.from({ length: 3 }).map(() => testTree.generateNodeId());
151
- const label1 = 'traitLabelA';
152
- const label2 = 'traitLabelB';
153
- const { definition } = testTree;
154
- const tree1 = {
155
- identifier: id1,
156
- definition,
157
- traits: {
158
- [label1]: [{ identifier: id2, definition, traits: {} }],
159
- [label2]: [{ identifier: id3, definition, traits: {} }],
160
- },
161
- };
162
- // Like tree1, but defined with the labels in the opposite order and with different node ids under each trait.
163
- const tree2 = {
164
- identifier: id1,
165
- definition,
166
- traits: {
167
- [label2]: [{ identifier: id2, definition, traits: {} }],
168
- [label1]: [{ identifier: id3, definition, traits: {} }],
169
- },
170
- };
171
- const view1 = RevisionView.fromTree(tree1);
172
- const view2 = RevisionView.fromTree(tree2);
173
- expect(Array.from(view1).map((node) => node.identifier)).to.deep.equal([id1, id2, id3]);
174
- // Child iteration should be sorted on trait labels.
175
- expect(Array.from(view2).map((node) => node.identifier)).to.deep.equal([id1, id3, id2]);
176
- });
177
- });
178
- //# sourceMappingURL=TreeView.tests.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeView.tests.js","sourceRoot":"","sources":["../../src/test/TreeView.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 { Definition, TraitLabel } from '../Identifiers.js';\nimport { RevisionView } from '../RevisionView.js';\nimport { ChangeNode } from '../persisted-types/index.js';\nimport { refreshTestTree } from './utilities/TestUtilities.js';\nimport { TestNode } from './utilities/TestNode.js';\nimport { expectDefined } from './utilities/TestCommon.js';\n\ndescribe('TreeView', () => {\n\tconst testTree = refreshTestTree();\n\n\tdescribe('can compute deltas', () => {\n\t\tit('that are the same object', () => {\n\t\t\tconst view = testTree.view;\n\t\t\texpect(view.delta(view)).deep.equals({\n\t\t\t\tchanged: [],\n\t\t\t\tadded: [],\n\t\t\t\tremoved: [],\n\t\t\t});\n\t\t});\n\n\t\tit('that have the same tree', () => {\n\t\t\tconst viewA = RevisionView.fromTree<TestNode>(testTree);\n\t\t\tconst viewB = RevisionView.fromTree<TestNode>(testTree);\n\t\t\texpect(viewA.delta(viewB)).deep.equals({\n\t\t\t\tchanged: [],\n\t\t\t\tadded: [],\n\t\t\t\tremoved: [],\n\t\t\t});\n\t\t});\n\n\t\tit('with different root ids', () => {\n\t\t\tconst viewA = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));\n\t\t\tconst viewB = RevisionView.fromTree(testTree.buildLeaf(testTree.generateNodeId()));\n\t\t\tassert.throws(\n\t\t\t\t() => viewA.delta(viewB),\n\t\t\t\t(e: Error) => validateAssertionError(e, 'Delta can only be calculated between views that share a root')\n\t\t\t);\n\t\t});\n\n\t\tit('with different subtrees', () => {\n\t\t\tconst rootId = testTree.generateNodeId();\n\n\t\t\tconst leafA = testTree.buildLeaf(testTree.generateNodeId());\n\t\t\tconst leafB = testTree.buildLeaf(testTree.generateNodeId());\n\n\t\t\tconst subtreeA = {\n\t\t\t\tidentifier: testTree.generateNodeId(),\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: { children: [leafA] },\n\t\t\t};\n\t\t\tconst subtreeB = {\n\t\t\t\tidentifier: testTree.generateNodeId(),\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: { children: [leafB] },\n\t\t\t};\n\n\t\t\tconst rootA: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: {\n\t\t\t\t\tchildren: [subtreeA],\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst rootB: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\ttraits: {\n\t\t\t\t\tchildren: [subtreeB],\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst viewA = RevisionView.fromTree(rootA);\n\t\t\tconst viewB = RevisionView.fromTree(rootB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([rootId]);\n\t\t\texpect(delta.removed.length).equals(2);\n\t\t\texpect(delta.added.length).equals(2);\n\t\t\texpect(delta.removed).contains(subtreeA.identifier);\n\t\t\texpect(delta.removed).contains(leafA.identifier);\n\t\t\texpect(delta.added).contains(subtreeB.identifier);\n\t\t\texpect(delta.added).contains(leafB.identifier);\n\t\t});\n\n\t\tit('with different payloads', () => {\n\t\t\tconst rootId = testTree.generateNodeId();\n\t\t\tconst nodeA: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\tpayload: 'test1',\n\t\t\t\ttraits: {},\n\t\t\t};\n\t\t\tconst nodeB: ChangeNode = {\n\t\t\t\tidentifier: rootId,\n\t\t\t\tdefinition: 'node' as Definition,\n\t\t\t\tpayload: 'test2',\n\t\t\t\ttraits: {},\n\t\t\t};\n\n\t\t\tconst viewA = RevisionView.fromTree(nodeA);\n\t\t\tconst viewB = RevisionView.fromTree(nodeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([rootId]);\n\t\t\texpect(delta.removed).deep.equals([]);\n\t\t\texpect(delta.added).deep.equals([]);\n\t\t});\n\n\t\tit('after an insert', () => {\n\t\t\tconst viewA = testTree.view;\n\t\t\tconst insertedNode = testTree.buildLeaf(testTree.generateNodeId());\n\t\t\tconst treeB: ChangeNode = {\n\t\t\t\tidentifier: testTree.identifier,\n\t\t\t\tdefinition: testTree.definition,\n\t\t\t\ttraits: { ...testTree.traits, left: [insertedNode, testTree.left] },\n\t\t\t};\n\t\t\tconst viewB = RevisionView.fromTree(treeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([testTree.identifier]);\n\t\t\texpect(delta.removed).deep.equals([]);\n\t\t\texpect(delta.added).deep.equals([insertedNode.identifier]);\n\t\t});\n\n\t\tit('after a delete', () => {\n\t\t\tconst viewA = testTree.view;\n\t\t\tconst treeB: ChangeNode = {\n\t\t\t\tidentifier: testTree.identifier,\n\t\t\t\tdefinition: testTree.definition,\n\t\t\t\ttraits: { ...testTree.traits, left: [] },\n\t\t\t};\n\t\t\tconst viewB = RevisionView.fromTree(treeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([testTree.identifier]);\n\t\t\texpect(delta.removed).deep.equals([testTree.left.identifier]);\n\t\t\texpect(delta.added).deep.equals([]);\n\t\t});\n\n\t\tit('after a move', () => {\n\t\t\tconst viewA = testTree.view;\n\t\t\tconst treeB: ChangeNode = {\n\t\t\t\tidentifier: testTree.identifier,\n\t\t\t\tdefinition: testTree.definition,\n\t\t\t\ttraits: { ...testTree.traits, left: [], right: [testTree.right, testTree.left] },\n\t\t\t};\n\t\t\tconst viewB = RevisionView.fromTree(treeB);\n\t\t\tconst delta = viewA.delta(viewB);\n\t\t\texpect(delta.changed).deep.equals([testTree.identifier]);\n\t\t\texpect(delta.removed).deep.equals([]);\n\t\t\texpect(delta.added).deep.equals([]);\n\t\t});\n\t});\n\n\tit('correctly returns node parentage', () => {\n\t\tconst view = testTree.view;\n\t\tfor (const node of view) {\n\t\t\tconst parentNode = view.tryGetParentViewNode(node.identifier);\n\t\t\tif (parentNode !== undefined) {\n\t\t\t\tconst parentage = expectDefined(node.parentage);\n\t\t\t\texpect(parentage.label).to.equal(view.getTraitLabel(node.identifier));\n\t\t\t\texpect(parentage.parent).to.equal(parentNode.identifier);\n\t\t\t}\n\t\t}\n\t});\n\n\t// Regression test for the issue fixed in #9824\n\tit('can be iterated in a consistent order', () => {\n\t\tconst [id1, id2, id3] = Array.from({ length: 3 }).map(() => testTree.generateNodeId());\n\t\tconst label1 = 'traitLabelA' as TraitLabel;\n\t\tconst label2 = 'traitLabelB' as TraitLabel;\n\t\tconst { definition } = testTree;\n\t\tconst tree1: ChangeNode = {\n\t\t\tidentifier: id1,\n\t\t\tdefinition,\n\t\t\ttraits: {\n\t\t\t\t[label1]: [{ identifier: id2, definition, traits: {} }],\n\t\t\t\t[label2]: [{ identifier: id3, definition, traits: {} }],\n\t\t\t},\n\t\t};\n\t\t// Like tree1, but defined with the labels in the opposite order and with different node ids under each trait.\n\t\tconst tree2: ChangeNode = {\n\t\t\tidentifier: id1,\n\t\t\tdefinition,\n\t\t\ttraits: {\n\t\t\t\t[label2]: [{ identifier: id2, definition, traits: {} }],\n\t\t\t\t[label1]: [{ identifier: id3, definition, traits: {} }],\n\t\t\t},\n\t\t};\n\t\tconst view1 = RevisionView.fromTree(tree1);\n\t\tconst view2 = RevisionView.fromTree(tree2);\n\t\texpect(Array.from(view1).map((node) => node.identifier)).to.deep.equal([id1, id2, id3]);\n\t\t// Child iteration should be sorted on trait labels.\n\t\texpect(Array.from(view2).map((node) => node.identifier)).to.deep.equal([id1, id3, id2]);\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=UndoRedoHandler.tests.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UndoRedoHandler.tests.d.ts","sourceRoot":"","sources":["../../src/test/UndoRedoHandler.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -1,37 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { UndoRedoStackManager } from '@fluidframework/undo-redo';
6
- import { SharedTreeUndoRedoHandler } from '../UndoRedoHandler.js';
7
- import { runSharedTreeUndoRedoTestSuite } from './utilities/UndoRedoTests.js';
8
- describe('SharedTreeUndoRedoHandler', () => {
9
- let undoRedoStack;
10
- let handler;
11
- const undoRedoOptions = {
12
- beforeEach: (trees) => {
13
- undoRedoStack = new UndoRedoStackManager();
14
- handler = new SharedTreeUndoRedoHandler(undoRedoStack);
15
- // Attach each tree to the handler
16
- trees.forEach((tree) => handler.attachTree(tree));
17
- },
18
- undo: (tree, editId) => {
19
- undoRedoStack.undoOperation();
20
- // Returns a dummy edit id in order to satisfy the interface.
21
- return 'aa26ef18-76a9-4238-9c29-9b796d21ef5a';
22
- },
23
- redo: (tree, editId) => {
24
- undoRedoStack.redoOperation();
25
- // Returns a dummy edit id in order to satisfy the interface.
26
- return 'aa26ef18-76a9-4238-9c29-9b796d21ef5a';
27
- },
28
- afterEdit: () => {
29
- undoRedoStack.closeCurrentOperation();
30
- },
31
- // The SharedTreeUndoRedoHandler does not support out of order revert.
32
- testOutOfOrderRevert: false,
33
- };
34
- runSharedTreeUndoRedoTestSuite({ localMode: true, title: 'in local mode', ...undoRedoOptions });
35
- runSharedTreeUndoRedoTestSuite({ localMode: false, title: 'in connected mode', ...undoRedoOptions });
36
- });
37
- //# sourceMappingURL=UndoRedoHandler.tests.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UndoRedoHandler.tests.js","sourceRoot":"","sources":["../../src/test/UndoRedoHandler.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAE9E,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,IAAI,aAAmC,CAAC;IACxC,IAAI,OAAkC,CAAC;IAEvC,MAAM,eAAe,GAAG;QACvB,UAAU,EAAE,CAAC,KAAmB,EAAE,EAAE;YACnC,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC3C,OAAO,GAAG,IAAI,yBAAyB,CAAC,aAAa,CAAC,CAAC;YAEvD,kCAAkC;YAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,EAAE,CAAC,IAAgB,EAAE,MAAc,EAAE,EAAE;YAC1C,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,6DAA6D;YAC7D,OAAO,sCAAgD,CAAC;QACzD,CAAC;QACD,IAAI,EAAE,CAAC,IAAgB,EAAE,MAAc,EAAE,EAAE;YAC1C,aAAa,CAAC,aAAa,EAAE,CAAC;YAE9B,6DAA6D;YAC7D,OAAO,sCAAgD,CAAC;QACzD,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACf,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACvC,CAAC;QACD,sEAAsE;QACtE,oBAAoB,EAAE,KAAK;KAC3B,CAAC;IAEF,8BAA8B,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;IAChG,8BAA8B,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;AACtG,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { UndoRedoStackManager } from '@fluidframework/undo-redo';\nimport { EditId } from '../Identifiers.js';\nimport { SharedTree } from '../SharedTree.js';\nimport { SharedTreeUndoRedoHandler } from '../UndoRedoHandler.js';\nimport { runSharedTreeUndoRedoTestSuite } from './utilities/UndoRedoTests.js';\n\ndescribe('SharedTreeUndoRedoHandler', () => {\n\tlet undoRedoStack: UndoRedoStackManager;\n\tlet handler: SharedTreeUndoRedoHandler;\n\n\tconst undoRedoOptions = {\n\t\tbeforeEach: (trees: SharedTree[]) => {\n\t\t\tundoRedoStack = new UndoRedoStackManager();\n\t\t\thandler = new SharedTreeUndoRedoHandler(undoRedoStack);\n\n\t\t\t// Attach each tree to the handler\n\t\t\ttrees.forEach((tree) => handler.attachTree(tree));\n\t\t},\n\t\tundo: (tree: SharedTree, editId: EditId) => {\n\t\t\tundoRedoStack.undoOperation();\n\n\t\t\t// Returns a dummy edit id in order to satisfy the interface.\n\t\t\treturn 'aa26ef18-76a9-4238-9c29-9b796d21ef5a' as EditId;\n\t\t},\n\t\tredo: (tree: SharedTree, editId: EditId) => {\n\t\t\tundoRedoStack.redoOperation();\n\n\t\t\t// Returns a dummy edit id in order to satisfy the interface.\n\t\t\treturn 'aa26ef18-76a9-4238-9c29-9b796d21ef5a' as EditId;\n\t\t},\n\t\tafterEdit: () => {\n\t\t\tundoRedoStack.closeCurrentOperation();\n\t\t},\n\t\t// The SharedTreeUndoRedoHandler does not support out of order revert.\n\t\ttestOutOfOrderRevert: false,\n\t};\n\n\trunSharedTreeUndoRedoTestSuite({ localMode: true, title: 'in local mode', ...undoRedoOptions });\n\trunSharedTreeUndoRedoTestSuite({ localMode: false, title: 'in connected mode', ...undoRedoOptions });\n});\n"]}
@@ -1,8 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { AsyncGenerator } from '@fluid-private/stochastic-test-utils';
6
- import { FuzzTestState, Operation, OperationGenerationConfig } from './Types.js';
7
- export declare function makeOpGenerator(passedConfig: OperationGenerationConfig): AsyncGenerator<Operation, FuzzTestState>;
8
- //# sourceMappingURL=Generators.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Generators.d.ts","sourceRoot":"","sources":["../../../src/test/fuzz/Generators.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAEN,cAAc,EAMd,MAAM,sCAAsC,CAAC;AAO9C,OAAO,EAMN,aAAa,EAGb,SAAS,EACT,yBAAyB,EAGzB,MAAM,YAAY,CAAC;AAgXpB,wBAAgB,eAAe,CAAC,YAAY,EAAE,yBAAyB,GAAG,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,CA6BjH"}
@@ -1,345 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { IsoBuffer } from '@fluid-internal/client-utils';
6
- import { createWeightedAsyncGenerator, done, makeRandom, } from '@fluid-private/stochastic-test-utils';
7
- import { Side, WriteFormat } from '../../persisted-types/index.js';
8
- import { ChangeType, StablePlace, StableRange } from '../../ChangeTypes.js';
9
- import { fail } from '../../Common.js';
10
- import { rangeFromStableRange } from '../../TreeViewUtilities.js';
11
- const defaultJoinConfig = {
12
- maximumActiveCollaborators: 10,
13
- maximumPassiveCollaborators: 10,
14
- writeFormat: [WriteFormat.v0_0_2, WriteFormat.v0_1_1],
15
- summarizeHistory: [false],
16
- };
17
- function makeJoinGenerator(passedConfig) {
18
- const config = { ...defaultJoinConfig, ...passedConfig };
19
- return async ({ random, activeCollaborators, passiveCollaborators }) => {
20
- const activeAllowed = activeCollaborators.length < config.maximumActiveCollaborators;
21
- const passiveAllowed = passiveCollaborators.length < config.maximumPassiveCollaborators;
22
- const isObserver = activeAllowed && passiveAllowed
23
- ? random.bool()
24
- : activeAllowed
25
- ? false
26
- : passiveAllowed
27
- ? true
28
- : fail('Cannot generate join op when both active and passive collaborators are at the configured limit.');
29
- return {
30
- type: 'join',
31
- summarizeHistory: random.pick(config.summarizeHistory),
32
- writeFormat: random.pick(config.writeFormat),
33
- isObserver,
34
- };
35
- };
36
- }
37
- async function leaveGenerator({ random, activeCollaborators, passiveCollaborators, }) {
38
- const canUsePassive = passiveCollaborators.length > 0;
39
- const canUseActive = activeCollaborators.length > 0;
40
- const isObserver = canUsePassive && canUseActive
41
- ? random.bool()
42
- : canUsePassive
43
- ? true
44
- : canUseActive
45
- ? false
46
- : fail('Cannot generate a leave op when there are no clients.');
47
- const index = random.integer(0, (isObserver ? passiveCollaborators : activeCollaborators).length - 1);
48
- return { type: 'leave', isObserver, index };
49
- }
50
- const defaultInsertConfig = {
51
- definitionPoolSize: 20,
52
- maxTreeSequenceSize: 3,
53
- };
54
- const defaultEditConfig = {
55
- maxTreeSize: Number.POSITIVE_INFINITY,
56
- insertWeight: 3,
57
- insertConfig: defaultInsertConfig,
58
- deleteWeight: 1,
59
- moveWeight: 1,
60
- setPayloadWeight: 1,
61
- traitLabelPoolSize: 20,
62
- };
63
- const makeEditGenerator = (passedConfig, passedJoinConfig, stashOps = false) => {
64
- const config = { ...defaultEditConfig, ...passedConfig };
65
- const insertConfig = { ...defaultInsertConfig, ...config.insertConfig };
66
- const poolRand = makeRandom(0);
67
- const traitLabelPool = Array.from({ length: config.traitLabelPoolSize }, () => poolRand.uuid4());
68
- const traitLabelGenerator = ({ random }) => random.pick(traitLabelPool);
69
- const definitionPool = Array.from({ length: insertConfig.definitionPoolSize }, () => poolRand.uuid4());
70
- const definitionGenerator = ({ random }) => random.pick(definitionPool);
71
- function traitGenerator(state) {
72
- const { idList, random, view } = state;
73
- const id = random.pick(idList);
74
- return view.tryGetTraitLocation(id) ?? { parent: id, label: traitLabelGenerator(state) };
75
- }
76
- function placeGenerator(state) {
77
- const { idList, random, view } = state;
78
- // Note: this gives a 50% chance of adding to a new trait; we may want to tune this at some point
79
- if (random.bool()) {
80
- const parent = random.pick(idList);
81
- return StablePlace.atStartOf({ parent, label: traitLabelGenerator(state) });
82
- }
83
- const traitLocation = traitGenerator(state);
84
- const trait = view.getTrait(traitLocation);
85
- // For a trait of length N, there are 2N + 2valid places: start, before index 1, after index 1, etc.
86
- // index === trait.length is treated as either the start or end of the trait.
87
- const makeDescriptor = () => ({
88
- index: random.integer(0, trait.length),
89
- side: random.bool() ? Side.Before : Side.After,
90
- });
91
- const descriptor = makeDescriptor();
92
- const placeFromDescriptor = ({ index, side }) => index === trait.length ? { referenceTrait: traitLocation, side } : { referenceSibling: trait[index], side };
93
- return placeFromDescriptor(descriptor);
94
- }
95
- function rangeGenerator(state) {
96
- const { random, view } = state;
97
- const traitLocation = traitGenerator(state);
98
- const trait = view.getTrait(traitLocation);
99
- // For a trait of length N, there are 2N + 2valid places: start, before index 1, after index 1, etc.
100
- // index === trait.length is treated as either the start or end of the trait.
101
- const makeDescriptor = () => ({
102
- index: random.integer(0, trait.length),
103
- side: random.bool() ? Side.Before : Side.After,
104
- });
105
- const descriptor1 = makeDescriptor();
106
- let descriptor2;
107
- do {
108
- descriptor2 = makeDescriptor();
109
- } while (descriptor1.index === descriptor2.index && descriptor1.side === descriptor2.side);
110
- const sortedDescriptors = [descriptor1, descriptor2];
111
- sortedDescriptors.sort((a, b) => {
112
- if (a.index === b.index && a.side === b.side) {
113
- return 0;
114
- }
115
- if (a.index === trait.length) {
116
- if (a.side === Side.After) {
117
- return -1;
118
- }
119
- return 1;
120
- }
121
- if (b.index === trait.length) {
122
- if (b.side === Side.After) {
123
- return 1;
124
- }
125
- return -1;
126
- }
127
- if (a.index < b.index) {
128
- return -1;
129
- }
130
- return a.side === Side.Before ? -1 : 1;
131
- });
132
- const [startDescriptor, endDescriptor] = sortedDescriptors;
133
- const placeFromDescriptor = ({ index, side }) => index === trait.length ? { referenceTrait: traitLocation, side } : { referenceSibling: trait[index], side };
134
- const start = placeFromDescriptor(startDescriptor);
135
- const end = placeFromDescriptor(endDescriptor);
136
- return StableRange.from(start).to(end);
137
- }
138
- function treeGenerator(state) {
139
- const { random, idGenerator } = state;
140
- const treeType = random.pick(['leaf', 'stick', 'balanced']);
141
- const makeNode = (traits) => ({
142
- identifier: idGenerator.generateNodeId(),
143
- definition: definitionGenerator(state),
144
- traits: traits ?? {},
145
- });
146
- switch (treeType) {
147
- case 'leaf':
148
- return makeNode();
149
- case 'stick':
150
- return makeNode({
151
- [traitLabelGenerator(state)]: [makeNode({ [traitLabelGenerator(state)]: [makeNode()] })],
152
- });
153
- case 'balanced':
154
- return makeNode({
155
- [traitLabelGenerator(state)]: [makeNode()],
156
- [traitLabelGenerator(state)]: [makeNode()],
157
- });
158
- default:
159
- fail(`Unexpected treeType ${treeType}`);
160
- }
161
- }
162
- async function insertGenerator(state) {
163
- const { maxTreeSequenceSize } = insertConfig;
164
- const id = 1;
165
- const { view } = state;
166
- const isValidInsertPlace = (destination) => {
167
- // Disallow insertion adjacent to the root node.
168
- if (destination.referenceSibling === view.root) {
169
- return false;
170
- }
171
- return true;
172
- };
173
- let destination;
174
- do {
175
- destination = placeGenerator(state);
176
- } while (!isValidInsertPlace(destination));
177
- return {
178
- fuzzType: 'insert',
179
- build: {
180
- type: ChangeType.Build,
181
- destination: id,
182
- source: Array.from({ length: state.random.integer(1, maxTreeSequenceSize) }, () => treeGenerator(state)),
183
- },
184
- insert: {
185
- type: ChangeType.Insert,
186
- destination,
187
- source: id,
188
- },
189
- };
190
- }
191
- async function deleteGenerator(state) {
192
- const { view } = state;
193
- const isValidDeleteRange = (source) => {
194
- // Disallow deletion of the root node.
195
- if (source.start.referenceSibling === view.root || source.end.referenceSibling === view.root) {
196
- return false;
197
- }
198
- return true;
199
- };
200
- let source;
201
- do {
202
- source = rangeGenerator(state);
203
- } while (!isValidDeleteRange(source));
204
- return {
205
- fuzzType: 'delete',
206
- type: ChangeType.Detach,
207
- source,
208
- };
209
- }
210
- async function moveGenerator(state) {
211
- const id = 1;
212
- const { view } = state;
213
- const isValidMoveRange = ({ start, end }, destination) => {
214
- // An ancestor cannot be moved to be a sibling of its descendant.
215
- const forbiddenDescendantId = destination.referenceTrait?.parent ?? destination.referenceSibling ?? fail('Invalid place');
216
- const startIndex = view.findIndexWithinTrait(start);
217
- const endIndex = view.findIndexWithinTrait(end);
218
- const idsInSource = new Set(view.getTrait(start.trait).slice(startIndex, endIndex));
219
- for (let current = forbiddenDescendantId; current !== undefined; current = view.tryGetParentViewNode(current)?.identifier) {
220
- if (idsInSource.has(current)) {
221
- return false;
222
- }
223
- }
224
- return true;
225
- };
226
- let source;
227
- let destination;
228
- do {
229
- source = rangeGenerator(state);
230
- destination = placeGenerator(state);
231
- } while (!isValidMoveRange(rangeFromStableRange(view, source), destination));
232
- return {
233
- fuzzType: 'move',
234
- detach: {
235
- type: ChangeType.Detach,
236
- destination: id,
237
- source,
238
- },
239
- insert: {
240
- type: ChangeType.Insert,
241
- destination,
242
- source: id,
243
- },
244
- };
245
- }
246
- async function setPayloadGenerator({ dataStoreRuntime, idList, random, view }) {
247
- const nodeToModify = random.pick(idList);
248
- const getPayloadContents = async (random) => {
249
- if (random.bool()) {
250
- return random.string(4);
251
- }
252
- const handle = await dataStoreRuntime.uploadBlob(IsoBuffer.from(random.string(10)));
253
- return { blob: handle };
254
- };
255
- const viewNode = view.getViewNode(nodeToModify);
256
- const payload = viewNode.payload !== undefined ? (random.bool() ? await getPayloadContents(random) : undefined) : undefined;
257
- return {
258
- fuzzType: 'setPayload',
259
- type: ChangeType.SetValue,
260
- nodeToModify: random.pick(idList),
261
- payload,
262
- };
263
- }
264
- const baseEditGenerator = createWeightedAsyncGenerator([
265
- [insertGenerator, config.insertWeight, ({ idList }) => idList.length < config.maxTreeSize],
266
- [deleteGenerator, config.deleteWeight, ({ idList }) => idList.length > 1],
267
- [moveGenerator, config.moveWeight, ({ idList }) => idList.length > 1],
268
- [setPayloadGenerator, config.setPayloadWeight],
269
- ]);
270
- return async (state) => {
271
- const { random, activeCollaborators } = state;
272
- const index = random.integer(0, activeCollaborators.length - 1);
273
- const { tree } = activeCollaborators[index];
274
- const view = tree.currentView;
275
- const idList = getIdList(view);
276
- const contents = await baseEditGenerator({
277
- ...state,
278
- view,
279
- idList,
280
- dataStoreRuntime: tree.getRuntime(),
281
- idGenerator: tree,
282
- });
283
- if (contents === done) {
284
- return done;
285
- }
286
- if (stashOps) {
287
- const joinConfig = { ...defaultJoinConfig, ...passedJoinConfig };
288
- return {
289
- type: 'stash',
290
- contents,
291
- index,
292
- summarizeHistory: random.pick(joinConfig.summarizeHistory),
293
- writeFormat: random.pick(joinConfig.writeFormat),
294
- };
295
- }
296
- return { type: 'edit', contents, index };
297
- };
298
- };
299
- const defaultOpConfig = {
300
- editConfig: defaultEditConfig,
301
- joinConfig: defaultJoinConfig,
302
- editWeight: 100,
303
- joinWeight: 10,
304
- leaveWeight: 10,
305
- stashWeight: 1,
306
- synchronizeWeight: 10,
307
- };
308
- export function makeOpGenerator(passedConfig) {
309
- const config = {
310
- ...defaultOpConfig,
311
- ...passedConfig,
312
- };
313
- const { maximumPassiveCollaborators, maximumActiveCollaborators } = { ...defaultJoinConfig, ...config.joinConfig };
314
- const maximumCollaborators = maximumPassiveCollaborators + maximumActiveCollaborators;
315
- const collaboratorsMatches = (criteria) => ({ activeCollaborators, passiveCollaborators }) => criteria(activeCollaborators.length + passiveCollaborators.length);
316
- const atLeastOneClient = collaboratorsMatches((count) => count > 0);
317
- const atLeastOneActiveClient = ({ activeCollaborators }) => activeCollaborators.length > 0;
318
- const opWeights = [
319
- [makeEditGenerator(config.editConfig, config.joinConfig), config.editWeight, atLeastOneActiveClient],
320
- [
321
- makeJoinGenerator(config.joinConfig),
322
- config.joinWeight,
323
- collaboratorsMatches((count) => count < maximumCollaborators),
324
- ],
325
- [leaveGenerator, config.leaveWeight, atLeastOneClient],
326
- // TODO:#5357: Re-enable stashed ops tests
327
- // [makeEditGenerator(config.editConfig, config.joinConfig, true), config.stashWeight, atLeastOneActiveClient],
328
- [{ type: 'synchronize' }, config.synchronizeWeight, atLeastOneClient],
329
- ];
330
- return createWeightedAsyncGenerator(opWeights);
331
- }
332
- function getIdList(tree) {
333
- const allIds = [];
334
- const toVisit = [tree.root];
335
- while (toVisit.length > 0) {
336
- const id = toVisit.pop() ?? fail();
337
- allIds.push(id);
338
- const node = tree.getViewNode(id);
339
- for (const [_, childIds] of node.traits) {
340
- toVisit.push(...childIds);
341
- }
342
- }
343
- return allIds;
344
- }
345
- //# sourceMappingURL=Generators.js.map