@fluid-experimental/tree 0.58.2001 → 0.59.2000-61729

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (817) hide show
  1. package/README.md +159 -46
  2. package/dist/ChangeCompression.d.ts +39 -0
  3. package/dist/ChangeCompression.d.ts.map +1 -0
  4. package/dist/ChangeCompression.js +117 -0
  5. package/dist/ChangeCompression.js.map +1 -0
  6. package/{lib/default-edits/PersistedTypes.d.ts → dist/ChangeTypes.d.ts} +58 -105
  7. package/dist/ChangeTypes.d.ts.map +1 -0
  8. package/dist/{default-edits/PersistedTypes.js → ChangeTypes.js} +21 -76
  9. package/dist/ChangeTypes.js.map +1 -0
  10. package/dist/Checkout.d.ts +39 -27
  11. package/dist/Checkout.d.ts.map +1 -1
  12. package/dist/Checkout.js +61 -32
  13. package/dist/Checkout.js.map +1 -1
  14. package/dist/Common.d.ts +175 -38
  15. package/dist/Common.d.ts.map +1 -1
  16. package/dist/Common.js +240 -103
  17. package/dist/Common.js.map +1 -1
  18. package/dist/EagerCheckout.d.ts +24 -0
  19. package/dist/EagerCheckout.d.ts.map +1 -0
  20. package/dist/{BasicCheckout.js → EagerCheckout.js} +9 -6
  21. package/dist/EagerCheckout.js.map +1 -0
  22. package/dist/EditLog.d.ts +77 -63
  23. package/dist/EditLog.d.ts.map +1 -1
  24. package/dist/EditLog.js +85 -48
  25. package/dist/EditLog.js.map +1 -1
  26. package/dist/EditUtilities.d.ts +168 -0
  27. package/dist/EditUtilities.d.ts.map +1 -0
  28. package/dist/EditUtilities.js +373 -0
  29. package/dist/EditUtilities.js.map +1 -0
  30. package/dist/EventTypes.d.ts +73 -0
  31. package/dist/EventTypes.d.ts.map +1 -0
  32. package/dist/EventTypes.js +78 -0
  33. package/dist/EventTypes.js.map +1 -0
  34. package/dist/Forest.d.ts +29 -7
  35. package/dist/Forest.d.ts.map +1 -1
  36. package/dist/Forest.js +60 -36
  37. package/dist/Forest.js.map +1 -1
  38. package/dist/HistoryEditFactory.d.ts +20 -0
  39. package/dist/HistoryEditFactory.d.ts.map +1 -0
  40. package/dist/HistoryEditFactory.js +226 -0
  41. package/dist/HistoryEditFactory.js.map +1 -0
  42. package/dist/IdConversion.d.ts +12 -0
  43. package/dist/IdConversion.d.ts.map +1 -0
  44. package/dist/IdConversion.js +98 -0
  45. package/dist/IdConversion.js.map +1 -0
  46. package/dist/Identifiers.d.ts +89 -2
  47. package/dist/Identifiers.d.ts.map +1 -1
  48. package/dist/Identifiers.js +10 -0
  49. package/dist/Identifiers.js.map +1 -1
  50. package/dist/InitialTree.d.ts +2 -2
  51. package/dist/InitialTree.d.ts.map +1 -1
  52. package/dist/InitialTree.js +2 -1
  53. package/dist/InitialTree.js.map +1 -1
  54. package/dist/LazyCheckout.d.ts +28 -0
  55. package/dist/LazyCheckout.d.ts.map +1 -0
  56. package/dist/LazyCheckout.js +44 -0
  57. package/dist/LazyCheckout.js.map +1 -0
  58. package/dist/LogViewer.d.ts +129 -85
  59. package/dist/LogViewer.d.ts.map +1 -1
  60. package/dist/LogViewer.js +111 -85
  61. package/dist/LogViewer.js.map +1 -1
  62. package/dist/MergeHealth.d.ts +221 -0
  63. package/dist/MergeHealth.d.ts.map +1 -0
  64. package/dist/MergeHealth.js +263 -0
  65. package/dist/MergeHealth.js.map +1 -0
  66. package/dist/NodeIdUtilities.d.ts +105 -0
  67. package/dist/NodeIdUtilities.d.ts.map +1 -0
  68. package/dist/NodeIdUtilities.js +60 -0
  69. package/dist/NodeIdUtilities.js.map +1 -0
  70. package/dist/PayloadUtilities.d.ts +42 -0
  71. package/dist/PayloadUtilities.d.ts.map +1 -0
  72. package/dist/PayloadUtilities.js +114 -0
  73. package/dist/PayloadUtilities.js.map +1 -0
  74. package/dist/ReconciliationPath.d.ts +18 -13
  75. package/dist/ReconciliationPath.d.ts.map +1 -1
  76. package/dist/ReconciliationPath.js.map +1 -1
  77. package/dist/RevisionValueCache.d.ts +11 -2
  78. package/dist/RevisionValueCache.d.ts.map +1 -1
  79. package/dist/RevisionValueCache.js +2 -3
  80. package/dist/RevisionValueCache.js.map +1 -1
  81. package/dist/RevisionView.d.ts +83 -0
  82. package/dist/RevisionView.d.ts.map +1 -0
  83. package/dist/RevisionView.js +182 -0
  84. package/dist/RevisionView.js.map +1 -0
  85. package/dist/SerializationUtilities.d.ts +36 -0
  86. package/dist/SerializationUtilities.d.ts.map +1 -0
  87. package/dist/SerializationUtilities.js +102 -0
  88. package/dist/SerializationUtilities.js.map +1 -0
  89. package/dist/SharedTree.d.ts +439 -0
  90. package/dist/SharedTree.d.ts.map +1 -0
  91. package/dist/SharedTree.js +1109 -0
  92. package/dist/SharedTree.js.map +1 -0
  93. package/dist/SharedTreeEncoder.d.ts +102 -0
  94. package/dist/SharedTreeEncoder.d.ts.map +1 -0
  95. package/dist/SharedTreeEncoder.js +313 -0
  96. package/dist/SharedTreeEncoder.js.map +1 -0
  97. package/dist/StringInterner.d.ts +46 -0
  98. package/dist/StringInterner.d.ts.map +1 -0
  99. package/dist/StringInterner.js +61 -0
  100. package/dist/StringInterner.js.map +1 -0
  101. package/dist/Summary.d.ts +40 -0
  102. package/dist/Summary.d.ts.map +1 -0
  103. package/dist/Summary.js +23 -0
  104. package/dist/Summary.js.map +1 -0
  105. package/dist/SummaryBackCompatibility.d.ts +22 -22
  106. package/dist/SummaryBackCompatibility.d.ts.map +1 -1
  107. package/dist/SummaryBackCompatibility.js +30 -33
  108. package/dist/SummaryBackCompatibility.js.map +1 -1
  109. package/dist/SummaryTestUtilities.d.ts +31 -0
  110. package/dist/SummaryTestUtilities.d.ts.map +1 -0
  111. package/dist/SummaryTestUtilities.js +37 -0
  112. package/dist/SummaryTestUtilities.js.map +1 -0
  113. package/dist/Transaction.d.ts +71 -0
  114. package/dist/Transaction.d.ts.map +1 -0
  115. package/dist/Transaction.js +92 -0
  116. package/dist/Transaction.js.map +1 -0
  117. package/dist/TransactionInternal.d.ts +540 -0
  118. package/dist/TransactionInternal.d.ts.map +1 -0
  119. package/dist/TransactionInternal.js +626 -0
  120. package/dist/TransactionInternal.js.map +1 -0
  121. package/dist/TreeCompressor.d.ts +36 -0
  122. package/dist/TreeCompressor.d.ts.map +1 -0
  123. package/dist/TreeCompressor.js +137 -0
  124. package/dist/TreeCompressor.js.map +1 -0
  125. package/dist/TreeNodeHandle.d.ts +12 -18
  126. package/dist/TreeNodeHandle.d.ts.map +1 -1
  127. package/dist/TreeNodeHandle.js +13 -23
  128. package/dist/TreeNodeHandle.js.map +1 -1
  129. package/dist/TreeView.d.ts +166 -0
  130. package/dist/TreeView.d.ts.map +1 -0
  131. package/dist/TreeView.js +218 -0
  132. package/dist/TreeView.js.map +1 -0
  133. package/dist/TreeViewUtilities.d.ts +21 -0
  134. package/dist/TreeViewUtilities.d.ts.map +1 -0
  135. package/dist/TreeViewUtilities.js +77 -0
  136. package/dist/TreeViewUtilities.js.map +1 -0
  137. package/dist/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  138. package/dist/UndoRedoHandler.d.ts.map +1 -0
  139. package/dist/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +5 -9
  140. package/dist/UndoRedoHandler.js.map +1 -0
  141. package/dist/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  142. package/dist/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  143. package/dist/id-compressor/AppendOnlySortedMap.js +283 -0
  144. package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -0
  145. package/dist/id-compressor/IdCompressor.d.ts +389 -0
  146. package/dist/id-compressor/IdCompressor.d.ts.map +1 -0
  147. package/dist/id-compressor/IdCompressor.js +1353 -0
  148. package/dist/id-compressor/IdCompressor.js.map +1 -0
  149. package/dist/id-compressor/IdRange.d.ts +11 -0
  150. package/dist/id-compressor/IdRange.d.ts.map +1 -0
  151. package/dist/id-compressor/IdRange.js +29 -0
  152. package/dist/id-compressor/IdRange.js.map +1 -0
  153. package/dist/id-compressor/NumericUuid.d.ts +63 -0
  154. package/dist/id-compressor/NumericUuid.d.ts.map +1 -0
  155. package/dist/id-compressor/NumericUuid.js +377 -0
  156. package/dist/id-compressor/NumericUuid.js.map +1 -0
  157. package/dist/id-compressor/index.d.ts +12 -0
  158. package/dist/id-compressor/index.d.ts.map +1 -0
  159. package/dist/id-compressor/index.js +26 -0
  160. package/dist/id-compressor/index.js.map +1 -0
  161. package/dist/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  162. package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  163. package/dist/id-compressor/persisted-types/0.0.1.js +7 -0
  164. package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -0
  165. package/dist/id-compressor/persisted-types/index.d.ts +6 -0
  166. package/dist/id-compressor/persisted-types/index.d.ts.map +1 -0
  167. package/dist/id-compressor/persisted-types/index.js +18 -0
  168. package/dist/id-compressor/persisted-types/index.js.map +1 -0
  169. package/dist/index.d.ts +29 -9
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +50 -35
  172. package/dist/index.js.map +1 -1
  173. package/dist/persisted-types/0.0.2.d.ts +385 -0
  174. package/dist/persisted-types/0.0.2.d.ts.map +1 -0
  175. package/dist/persisted-types/0.0.2.js +113 -0
  176. package/dist/persisted-types/0.0.2.js.map +1 -0
  177. package/dist/persisted-types/0.1.1.d.ts +314 -0
  178. package/dist/persisted-types/0.1.1.d.ts.map +1 -0
  179. package/dist/persisted-types/0.1.1.js +153 -0
  180. package/dist/persisted-types/0.1.1.js.map +1 -0
  181. package/dist/persisted-types/index.d.ts +7 -0
  182. package/dist/persisted-types/index.d.ts.map +1 -0
  183. package/dist/persisted-types/index.js +20 -0
  184. package/dist/persisted-types/index.js.map +1 -0
  185. package/docs/0-1-1-Compression.md +228 -0
  186. package/docs/Breaking-Change-Migration.md +52 -0
  187. package/docs/Compression.md +2 -2
  188. package/docs/Telemetry.md +43 -0
  189. package/docs/Write-Format.md +19 -0
  190. package/lib/ChangeCompression.d.ts +39 -0
  191. package/lib/ChangeCompression.d.ts.map +1 -0
  192. package/lib/ChangeCompression.js +111 -0
  193. package/lib/ChangeCompression.js.map +1 -0
  194. package/{dist/default-edits/PersistedTypes.d.ts → lib/ChangeTypes.d.ts} +58 -105
  195. package/lib/ChangeTypes.d.ts.map +1 -0
  196. package/lib/{default-edits/PersistedTypes.js → ChangeTypes.js} +15 -68
  197. package/lib/ChangeTypes.js.map +1 -0
  198. package/lib/Checkout.d.ts +39 -27
  199. package/lib/Checkout.d.ts.map +1 -1
  200. package/lib/Checkout.js +53 -24
  201. package/lib/Checkout.js.map +1 -1
  202. package/lib/Common.d.ts +175 -38
  203. package/lib/Common.d.ts.map +1 -1
  204. package/lib/Common.js +226 -101
  205. package/lib/Common.js.map +1 -1
  206. package/lib/EagerCheckout.d.ts +24 -0
  207. package/lib/EagerCheckout.d.ts.map +1 -0
  208. package/lib/{BasicCheckout.js → EagerCheckout.js} +7 -4
  209. package/lib/EagerCheckout.js.map +1 -0
  210. package/lib/EditLog.d.ts +77 -63
  211. package/lib/EditLog.d.ts.map +1 -1
  212. package/lib/EditLog.js +83 -47
  213. package/lib/EditLog.js.map +1 -1
  214. package/lib/EditUtilities.d.ts +168 -0
  215. package/lib/EditUtilities.d.ts.map +1 -0
  216. package/lib/EditUtilities.js +353 -0
  217. package/lib/EditUtilities.js.map +1 -0
  218. package/lib/EventTypes.d.ts +73 -0
  219. package/lib/EventTypes.d.ts.map +1 -0
  220. package/lib/EventTypes.js +75 -0
  221. package/lib/EventTypes.js.map +1 -0
  222. package/lib/Forest.d.ts +29 -7
  223. package/lib/Forest.d.ts.map +1 -1
  224. package/lib/Forest.js +58 -35
  225. package/lib/Forest.js.map +1 -1
  226. package/lib/HistoryEditFactory.d.ts +20 -0
  227. package/lib/HistoryEditFactory.d.ts.map +1 -0
  228. package/lib/{default-edits/HistoryEditFactory.js → HistoryEditFactory.js} +78 -39
  229. package/lib/HistoryEditFactory.js.map +1 -0
  230. package/lib/IdConversion.d.ts +12 -0
  231. package/lib/IdConversion.d.ts.map +1 -0
  232. package/lib/IdConversion.js +91 -0
  233. package/lib/IdConversion.js.map +1 -0
  234. package/lib/Identifiers.d.ts +89 -2
  235. package/lib/Identifiers.d.ts.map +1 -1
  236. package/lib/Identifiers.js +8 -1
  237. package/lib/Identifiers.js.map +1 -1
  238. package/lib/InitialTree.d.ts +2 -2
  239. package/lib/InitialTree.d.ts.map +1 -1
  240. package/lib/InitialTree.js +2 -1
  241. package/lib/InitialTree.js.map +1 -1
  242. package/lib/LazyCheckout.d.ts +28 -0
  243. package/lib/LazyCheckout.d.ts.map +1 -0
  244. package/lib/LazyCheckout.js +40 -0
  245. package/lib/LazyCheckout.js.map +1 -0
  246. package/lib/LogViewer.d.ts +129 -85
  247. package/lib/LogViewer.d.ts.map +1 -1
  248. package/lib/LogViewer.js +103 -77
  249. package/lib/LogViewer.js.map +1 -1
  250. package/lib/MergeHealth.d.ts +221 -0
  251. package/lib/MergeHealth.d.ts.map +1 -0
  252. package/lib/MergeHealth.js +258 -0
  253. package/lib/MergeHealth.js.map +1 -0
  254. package/lib/NodeIdUtilities.d.ts +105 -0
  255. package/lib/NodeIdUtilities.d.ts.map +1 -0
  256. package/lib/NodeIdUtilities.js +53 -0
  257. package/lib/NodeIdUtilities.js.map +1 -0
  258. package/lib/PayloadUtilities.d.ts +42 -0
  259. package/lib/PayloadUtilities.d.ts.map +1 -0
  260. package/lib/PayloadUtilities.js +110 -0
  261. package/lib/PayloadUtilities.js.map +1 -0
  262. package/lib/ReconciliationPath.d.ts +18 -13
  263. package/lib/ReconciliationPath.d.ts.map +1 -1
  264. package/lib/ReconciliationPath.js.map +1 -1
  265. package/lib/RevisionValueCache.d.ts +11 -2
  266. package/lib/RevisionValueCache.d.ts.map +1 -1
  267. package/lib/RevisionValueCache.js +2 -3
  268. package/lib/RevisionValueCache.js.map +1 -1
  269. package/lib/RevisionView.d.ts +83 -0
  270. package/lib/RevisionView.d.ts.map +1 -0
  271. package/lib/RevisionView.js +175 -0
  272. package/lib/RevisionView.js.map +1 -0
  273. package/lib/SerializationUtilities.d.ts +36 -0
  274. package/lib/SerializationUtilities.d.ts.map +1 -0
  275. package/lib/SerializationUtilities.js +95 -0
  276. package/lib/SerializationUtilities.js.map +1 -0
  277. package/lib/SharedTree.d.ts +439 -0
  278. package/lib/SharedTree.d.ts.map +1 -0
  279. package/lib/SharedTree.js +1104 -0
  280. package/lib/SharedTree.js.map +1 -0
  281. package/lib/SharedTreeEncoder.d.ts +102 -0
  282. package/lib/SharedTreeEncoder.d.ts.map +1 -0
  283. package/lib/SharedTreeEncoder.js +308 -0
  284. package/lib/SharedTreeEncoder.js.map +1 -0
  285. package/lib/StringInterner.d.ts +46 -0
  286. package/lib/StringInterner.d.ts.map +1 -0
  287. package/lib/StringInterner.js +57 -0
  288. package/lib/StringInterner.js.map +1 -0
  289. package/lib/Summary.d.ts +40 -0
  290. package/lib/Summary.d.ts.map +1 -0
  291. package/lib/Summary.js +19 -0
  292. package/lib/Summary.js.map +1 -0
  293. package/lib/SummaryBackCompatibility.d.ts +22 -22
  294. package/lib/SummaryBackCompatibility.d.ts.map +1 -1
  295. package/lib/SummaryBackCompatibility.js +29 -32
  296. package/lib/SummaryBackCompatibility.js.map +1 -1
  297. package/lib/SummaryTestUtilities.d.ts +31 -0
  298. package/lib/SummaryTestUtilities.d.ts.map +1 -0
  299. package/lib/SummaryTestUtilities.js +32 -0
  300. package/lib/SummaryTestUtilities.js.map +1 -0
  301. package/lib/Transaction.d.ts +71 -0
  302. package/lib/Transaction.d.ts.map +1 -0
  303. package/lib/Transaction.js +88 -0
  304. package/lib/Transaction.js.map +1 -0
  305. package/lib/TransactionInternal.d.ts +540 -0
  306. package/lib/TransactionInternal.d.ts.map +1 -0
  307. package/lib/TransactionInternal.js +622 -0
  308. package/lib/TransactionInternal.js.map +1 -0
  309. package/lib/TreeCompressor.d.ts +36 -0
  310. package/lib/TreeCompressor.d.ts.map +1 -0
  311. package/lib/TreeCompressor.js +133 -0
  312. package/lib/TreeCompressor.js.map +1 -0
  313. package/lib/TreeNodeHandle.d.ts +12 -18
  314. package/lib/TreeNodeHandle.d.ts.map +1 -1
  315. package/lib/TreeNodeHandle.js +14 -24
  316. package/lib/TreeNodeHandle.js.map +1 -1
  317. package/lib/TreeView.d.ts +166 -0
  318. package/lib/TreeView.d.ts.map +1 -0
  319. package/lib/TreeView.js +214 -0
  320. package/lib/TreeView.js.map +1 -0
  321. package/lib/TreeViewUtilities.d.ts +21 -0
  322. package/lib/TreeViewUtilities.d.ts.map +1 -0
  323. package/lib/TreeViewUtilities.js +71 -0
  324. package/lib/TreeViewUtilities.js.map +1 -0
  325. package/lib/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  326. package/lib/UndoRedoHandler.d.ts.map +1 -0
  327. package/lib/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +3 -7
  328. package/lib/UndoRedoHandler.js.map +1 -0
  329. package/lib/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  330. package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  331. package/lib/id-compressor/AppendOnlySortedMap.js +278 -0
  332. package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -0
  333. package/lib/id-compressor/IdCompressor.d.ts +389 -0
  334. package/lib/id-compressor/IdCompressor.d.ts.map +1 -0
  335. package/lib/id-compressor/IdCompressor.js +1343 -0
  336. package/lib/id-compressor/IdCompressor.js.map +1 -0
  337. package/lib/id-compressor/IdRange.d.ts +11 -0
  338. package/lib/id-compressor/IdRange.d.ts.map +1 -0
  339. package/lib/id-compressor/IdRange.js +25 -0
  340. package/lib/id-compressor/IdRange.js.map +1 -0
  341. package/lib/id-compressor/NumericUuid.d.ts +63 -0
  342. package/lib/id-compressor/NumericUuid.d.ts.map +1 -0
  343. package/lib/id-compressor/NumericUuid.js +365 -0
  344. package/lib/id-compressor/NumericUuid.js.map +1 -0
  345. package/lib/id-compressor/index.d.ts +12 -0
  346. package/lib/id-compressor/index.d.ts.map +1 -0
  347. package/lib/id-compressor/index.js +12 -0
  348. package/lib/id-compressor/index.js.map +1 -0
  349. package/lib/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  350. package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  351. package/lib/{test/Snapshot.tests.d.ts → id-compressor/persisted-types/0.0.1.js} +1 -1
  352. package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -0
  353. package/lib/id-compressor/persisted-types/index.d.ts +6 -0
  354. package/lib/id-compressor/persisted-types/index.d.ts.map +1 -0
  355. package/lib/id-compressor/persisted-types/index.js +6 -0
  356. package/lib/id-compressor/persisted-types/index.js.map +1 -0
  357. package/lib/index.d.ts +29 -9
  358. package/lib/index.d.ts.map +1 -1
  359. package/lib/index.js +23 -6
  360. package/lib/index.js.map +1 -1
  361. package/lib/persisted-types/0.0.2.d.ts +385 -0
  362. package/lib/persisted-types/0.0.2.d.ts.map +1 -0
  363. package/lib/persisted-types/0.0.2.js +110 -0
  364. package/lib/persisted-types/0.0.2.js.map +1 -0
  365. package/lib/persisted-types/0.1.1.d.ts +314 -0
  366. package/lib/persisted-types/0.1.1.d.ts.map +1 -0
  367. package/lib/persisted-types/0.1.1.js +150 -0
  368. package/lib/persisted-types/0.1.1.js.map +1 -0
  369. package/lib/persisted-types/index.d.ts +7 -0
  370. package/lib/persisted-types/index.d.ts.map +1 -0
  371. package/lib/persisted-types/index.js +8 -0
  372. package/lib/persisted-types/index.js.map +1 -0
  373. package/lib/test/AppendOnlySortedMap.tests.d.ts +6 -0
  374. package/lib/test/AppendOnlySortedMap.tests.d.ts.map +1 -0
  375. package/lib/test/AppendOnlySortedMap.tests.js +169 -0
  376. package/lib/test/AppendOnlySortedMap.tests.js.map +1 -0
  377. package/lib/test/{SnapshotUtilities.tests.d.ts → ChangeCompression.tests.d.ts} +1 -1
  378. package/lib/test/ChangeCompression.tests.d.ts.map +1 -0
  379. package/lib/test/ChangeCompression.tests.js +145 -0
  380. package/lib/test/ChangeCompression.tests.js.map +1 -0
  381. package/lib/test/Checkout.tests.d.ts +2 -3
  382. package/lib/test/Checkout.tests.d.ts.map +1 -1
  383. package/lib/test/Checkout.tests.js +126 -69
  384. package/lib/test/Checkout.tests.js.map +1 -1
  385. package/lib/test/Common.tests.js +60 -2
  386. package/lib/test/Common.tests.js.map +1 -1
  387. package/lib/test/{BasicCheckout.tests.d.ts → EagerCheckout.tests.d.ts} +1 -1
  388. package/lib/test/EagerCheckout.tests.d.ts.map +1 -0
  389. package/lib/test/EagerCheckout.tests.js +20 -0
  390. package/lib/test/EagerCheckout.tests.js.map +1 -0
  391. package/lib/test/Edit.tests.js +22 -14
  392. package/lib/test/Edit.tests.js.map +1 -1
  393. package/lib/test/{Anchors.glassBox.tests.d.ts → EditLog.perf.tests.d.ts} +1 -1
  394. package/lib/test/EditLog.perf.tests.d.ts.map +1 -0
  395. package/lib/test/EditLog.perf.tests.js +30 -0
  396. package/lib/test/EditLog.perf.tests.js.map +1 -0
  397. package/lib/test/EditLog.tests.js +10 -6
  398. package/lib/test/EditLog.tests.js.map +1 -1
  399. package/lib/test/EditUtilities.tests.d.ts +6 -0
  400. package/lib/test/EditUtilities.tests.d.ts.map +1 -0
  401. package/lib/test/EditUtilities.tests.js +503 -0
  402. package/lib/test/EditUtilities.tests.js.map +1 -0
  403. package/lib/test/Forest.perf.tests.d.ts +6 -0
  404. package/lib/test/Forest.perf.tests.d.ts.map +1 -0
  405. package/lib/test/Forest.perf.tests.js +133 -0
  406. package/lib/test/Forest.perf.tests.js.map +1 -0
  407. package/lib/test/Forest.tests.js +54 -27
  408. package/lib/test/Forest.tests.js.map +1 -1
  409. package/lib/test/GenericTransaction.tests.js +12 -3
  410. package/lib/test/GenericTransaction.tests.js.map +1 -1
  411. package/lib/test/HistoryEditFactory.tests.d.ts +6 -0
  412. package/lib/test/HistoryEditFactory.tests.d.ts.map +1 -0
  413. package/lib/test/HistoryEditFactory.tests.js +90 -0
  414. package/lib/test/HistoryEditFactory.tests.js.map +1 -0
  415. package/lib/test/IdCompressor.perf.tests.d.ts +6 -0
  416. package/lib/test/IdCompressor.perf.tests.d.ts.map +1 -0
  417. package/lib/test/IdCompressor.perf.tests.js +304 -0
  418. package/lib/test/IdCompressor.perf.tests.js.map +1 -0
  419. package/lib/test/IdCompressor.tests.d.ts +6 -0
  420. package/lib/test/IdCompressor.tests.d.ts.map +1 -0
  421. package/lib/test/IdCompressor.tests.js +1075 -0
  422. package/lib/test/IdCompressor.tests.js.map +1 -0
  423. package/lib/test/IdConversion.tests.d.ts +6 -0
  424. package/lib/test/IdConversion.tests.d.ts.map +1 -0
  425. package/lib/test/IdConversion.tests.js +36 -0
  426. package/lib/test/IdConversion.tests.js.map +1 -0
  427. package/lib/test/LazyCheckout.tests.d.ts +6 -0
  428. package/lib/test/LazyCheckout.tests.d.ts.map +1 -0
  429. package/lib/test/LazyCheckout.tests.js +22 -0
  430. package/lib/test/LazyCheckout.tests.js.map +1 -0
  431. package/lib/test/LogViewer.tests.js +276 -191
  432. package/lib/test/LogViewer.tests.js.map +1 -1
  433. package/lib/test/{SharedTreeWithAnchors.tests.d.ts → MergeHealthTelemetryHeartbeat.tests.d.ts} +1 -1
  434. package/lib/test/MergeHealthTelemetryHeartbeat.tests.d.ts.map +1 -0
  435. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +342 -0
  436. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -0
  437. package/lib/test/NumericUuid.perf.tests.d.ts +6 -0
  438. package/lib/test/NumericUuid.perf.tests.d.ts.map +1 -0
  439. package/lib/test/NumericUuid.perf.tests.js +68 -0
  440. package/lib/test/NumericUuid.perf.tests.js.map +1 -0
  441. package/lib/test/NumericUuid.tests.d.ts +6 -0
  442. package/lib/test/NumericUuid.tests.d.ts.map +1 -0
  443. package/lib/test/NumericUuid.tests.js +191 -0
  444. package/lib/test/NumericUuid.tests.js.map +1 -0
  445. package/lib/test/RevisionView.tests.d.ts +6 -0
  446. package/lib/test/RevisionView.tests.d.ts.map +1 -0
  447. package/lib/test/RevisionView.tests.js +133 -0
  448. package/lib/test/RevisionView.tests.js.map +1 -0
  449. package/lib/test/SharedTree.perf.tests.d.ts +6 -0
  450. package/lib/test/SharedTree.perf.tests.d.ts.map +1 -0
  451. package/lib/test/SharedTree.perf.tests.js +39 -0
  452. package/lib/test/SharedTree.perf.tests.js.map +1 -0
  453. package/lib/test/SharedTree.tests.js +15 -3
  454. package/lib/test/SharedTree.tests.js.map +1 -1
  455. package/lib/test/StringInterner.tests.d.ts +6 -0
  456. package/lib/test/StringInterner.tests.d.ts.map +1 -0
  457. package/lib/test/StringInterner.tests.js +71 -0
  458. package/lib/test/StringInterner.tests.js.map +1 -0
  459. package/lib/test/Summary.tests.d.ts +8 -0
  460. package/lib/test/Summary.tests.d.ts.map +1 -0
  461. package/lib/test/Summary.tests.js +407 -0
  462. package/lib/test/Summary.tests.js.map +1 -0
  463. package/lib/test/Transaction.tests.js +109 -329
  464. package/lib/test/Transaction.tests.js.map +1 -1
  465. package/lib/test/TransactionInternal.tests.d.ts +6 -0
  466. package/lib/test/TransactionInternal.tests.d.ts.map +1 -0
  467. package/lib/test/TransactionInternal.tests.js +568 -0
  468. package/lib/test/TransactionInternal.tests.js.map +1 -0
  469. package/lib/test/TreeCompression.tests.d.ts +6 -0
  470. package/lib/test/TreeCompression.tests.d.ts.map +1 -0
  471. package/lib/test/TreeCompression.tests.js +292 -0
  472. package/lib/test/TreeCompression.tests.js.map +1 -0
  473. package/lib/test/TreeView.tests.d.ts +6 -0
  474. package/lib/test/TreeView.tests.d.ts.map +1 -0
  475. package/lib/test/TreeView.tests.js +176 -0
  476. package/lib/test/TreeView.tests.js.map +1 -0
  477. package/lib/test/UndoRedoHandler.tests.js +2 -2
  478. package/lib/test/UndoRedoHandler.tests.js.map +1 -1
  479. package/lib/test/Virtualization.tests.js +146 -62
  480. package/lib/test/Virtualization.tests.js.map +1 -1
  481. package/lib/test/fuzz/Generators.d.ts +19 -0
  482. package/lib/test/fuzz/Generators.d.ts.map +1 -0
  483. package/lib/test/fuzz/Generators.js +420 -0
  484. package/lib/test/fuzz/Generators.js.map +1 -0
  485. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +20 -0
  486. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -0
  487. package/lib/test/fuzz/SharedTreeFuzzTests.js +217 -0
  488. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -0
  489. package/lib/test/fuzz/Types.d.ts +133 -0
  490. package/lib/test/fuzz/Types.d.ts.map +1 -0
  491. package/lib/test/{GenericTransactionWithAnchors.tests.d.ts → fuzz/Types.js} +2 -2
  492. package/lib/test/fuzz/Types.js.map +1 -0
  493. package/lib/test/utilities/IdCompressorTestUtilities.d.ts +180 -0
  494. package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -0
  495. package/lib/test/utilities/IdCompressorTestUtilities.js +528 -0
  496. package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -0
  497. package/lib/test/utilities/MockTransaction.d.ts +26 -7
  498. package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
  499. package/lib/test/utilities/MockTransaction.js +40 -11
  500. package/lib/test/utilities/MockTransaction.js.map +1 -1
  501. package/lib/test/utilities/PendingLocalStateTests.d.ts +12 -0
  502. package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -0
  503. package/lib/test/utilities/PendingLocalStateTests.js +105 -0
  504. package/lib/test/utilities/PendingLocalStateTests.js.map +1 -0
  505. package/lib/test/utilities/SharedTreeTests.d.ts +3 -4
  506. package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
  507. package/lib/test/utilities/SharedTreeTests.js +696 -439
  508. package/lib/test/utilities/SharedTreeTests.js.map +1 -1
  509. package/lib/test/utilities/SharedTreeVersioningTests.d.ts +11 -0
  510. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -0
  511. package/lib/test/utilities/SharedTreeVersioningTests.js +370 -0
  512. package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -0
  513. package/lib/test/utilities/SummaryLoadPerfTests.d.ts +10 -0
  514. package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -0
  515. package/lib/test/utilities/SummaryLoadPerfTests.js +102 -0
  516. package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -0
  517. package/lib/test/utilities/SummarySizeTests.d.ts +11 -0
  518. package/lib/test/utilities/SummarySizeTests.d.ts.map +1 -0
  519. package/lib/test/utilities/SummarySizeTests.js +158 -0
  520. package/lib/test/utilities/SummarySizeTests.js.map +1 -0
  521. package/lib/test/utilities/TestCommon.d.ts +9 -0
  522. package/lib/test/utilities/TestCommon.d.ts.map +1 -0
  523. package/lib/test/utilities/TestCommon.js +13 -0
  524. package/lib/test/utilities/TestCommon.js.map +1 -0
  525. package/lib/test/utilities/TestNode.d.ts +140 -0
  526. package/lib/test/utilities/TestNode.d.ts.map +1 -0
  527. package/lib/test/utilities/TestNode.js +292 -0
  528. package/lib/test/utilities/TestNode.js.map +1 -0
  529. package/lib/test/utilities/TestUtilities.d.ts +84 -70
  530. package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
  531. package/lib/test/utilities/TestUtilities.js +218 -143
  532. package/lib/test/utilities/TestUtilities.js.map +1 -1
  533. package/lib/test/utilities/UndoRedoTests.d.ts +4 -5
  534. package/lib/test/utilities/UndoRedoTests.d.ts.map +1 -1
  535. package/lib/test/utilities/UndoRedoTests.js +138 -149
  536. package/lib/test/utilities/UndoRedoTests.js.map +1 -1
  537. package/package.json +22 -17
  538. package/src/ChangeCompression.ts +159 -0
  539. package/src/{default-edits/PersistedTypes.ts → ChangeTypes.ts} +62 -125
  540. package/src/Checkout.ts +82 -53
  541. package/src/Common.ts +317 -117
  542. package/src/EagerCheckout.ts +38 -0
  543. package/src/EditLog.ts +153 -100
  544. package/src/EditUtilities.ts +559 -0
  545. package/src/EventTypes.ts +74 -0
  546. package/src/Forest.ts +81 -73
  547. package/src/{default-edits/HistoryEditFactory.ts → HistoryEditFactory.ts} +103 -53
  548. package/src/IdConversion.ts +125 -0
  549. package/src/Identifiers.ts +101 -1
  550. package/src/InitialTree.ts +5 -4
  551. package/src/LazyCheckout.ts +51 -0
  552. package/src/LogViewer.ts +242 -166
  553. package/src/MergeHealth.ts +447 -0
  554. package/src/NodeIdUtilities.ts +156 -0
  555. package/src/PayloadUtilities.ts +124 -0
  556. package/src/ReconciliationPath.ts +18 -13
  557. package/src/RevisionValueCache.ts +14 -5
  558. package/src/RevisionView.ts +252 -0
  559. package/src/SerializationUtilities.ts +130 -0
  560. package/src/SharedTree.ts +1501 -0
  561. package/src/SharedTreeEncoder.ts +493 -0
  562. package/src/StringInterner.ts +72 -0
  563. package/src/Summary.ts +48 -0
  564. package/src/SummaryBackCompatibility.ts +47 -57
  565. package/src/SummaryTestUtilities.ts +54 -0
  566. package/src/Transaction.ts +120 -0
  567. package/src/TransactionInternal.ts +1087 -0
  568. package/src/TreeCompressor.ts +213 -0
  569. package/src/TreeNodeHandle.ts +19 -32
  570. package/src/TreeView.ts +322 -0
  571. package/src/TreeViewUtilities.ts +77 -0
  572. package/src/{default-edits/UndoRedoHandler.ts → UndoRedoHandler.ts} +8 -13
  573. package/src/id-compressor/AppendOnlySortedMap.ts +325 -0
  574. package/src/id-compressor/IdCompressor.md +3 -0
  575. package/src/id-compressor/IdCompressor.ts +1848 -0
  576. package/src/id-compressor/IdRange.ts +33 -0
  577. package/src/id-compressor/NumericUuid.ts +414 -0
  578. package/src/id-compressor/index.ts +13 -0
  579. package/src/id-compressor/persisted-types/0.0.1.ts +179 -0
  580. package/src/id-compressor/persisted-types/README.md +3 -0
  581. package/src/id-compressor/persisted-types/index.ts +6 -0
  582. package/src/index.ts +118 -59
  583. package/src/persisted-types/0.0.2.ts +442 -0
  584. package/src/persisted-types/0.1.1.ts +476 -0
  585. package/src/persisted-types/README.md +22 -0
  586. package/src/persisted-types/index.ts +9 -0
  587. package/.mocharc.js +0 -41
  588. package/api/tree.api.md +0 -729
  589. package/dist/BasicCheckout.d.ts +0 -23
  590. package/dist/BasicCheckout.d.ts.map +0 -1
  591. package/dist/BasicCheckout.js.map +0 -1
  592. package/dist/Snapshot.d.ts +0 -198
  593. package/dist/Snapshot.d.ts.map +0 -1
  594. package/dist/Snapshot.js +0 -267
  595. package/dist/Snapshot.js.map +0 -1
  596. package/dist/SnapshotUtilities.d.ts +0 -29
  597. package/dist/SnapshotUtilities.d.ts.map +0 -1
  598. package/dist/SnapshotUtilities.js +0 -73
  599. package/dist/SnapshotUtilities.js.map +0 -1
  600. package/dist/anchored-edits/AnchorResolution.d.ts +0 -144
  601. package/dist/anchored-edits/AnchorResolution.d.ts.map +0 -1
  602. package/dist/anchored-edits/AnchorResolution.js +0 -162
  603. package/dist/anchored-edits/AnchorResolution.js.map +0 -1
  604. package/dist/anchored-edits/Factory.d.ts +0 -56
  605. package/dist/anchored-edits/Factory.d.ts.map +0 -1
  606. package/dist/anchored-edits/Factory.js +0 -79
  607. package/dist/anchored-edits/Factory.js.map +0 -1
  608. package/dist/anchored-edits/PersistedTypes.d.ts +0 -245
  609. package/dist/anchored-edits/PersistedTypes.d.ts.map +0 -1
  610. package/dist/anchored-edits/PersistedTypes.js +0 -131
  611. package/dist/anchored-edits/PersistedTypes.js.map +0 -1
  612. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  613. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  614. package/dist/anchored-edits/SharedTreeWithAnchors.js +0 -115
  615. package/dist/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  616. package/dist/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  617. package/dist/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  618. package/dist/anchored-edits/TransactionWithAnchors.js +0 -36
  619. package/dist/anchored-edits/TransactionWithAnchors.js.map +0 -1
  620. package/dist/anchored-edits/index.d.ts +0 -10
  621. package/dist/anchored-edits/index.d.ts.map +0 -1
  622. package/dist/anchored-edits/index.js +0 -34
  623. package/dist/anchored-edits/index.js.map +0 -1
  624. package/dist/default-edits/EditUtilities.d.ts +0 -57
  625. package/dist/default-edits/EditUtilities.d.ts.map +0 -1
  626. package/dist/default-edits/EditUtilities.js +0 -192
  627. package/dist/default-edits/EditUtilities.js.map +0 -1
  628. package/dist/default-edits/Factory.d.ts +0 -56
  629. package/dist/default-edits/Factory.d.ts.map +0 -1
  630. package/dist/default-edits/Factory.js +0 -79
  631. package/dist/default-edits/Factory.js.map +0 -1
  632. package/dist/default-edits/HistoryEditFactory.d.ts +0 -19
  633. package/dist/default-edits/HistoryEditFactory.d.ts.map +0 -1
  634. package/dist/default-edits/HistoryEditFactory.js +0 -187
  635. package/dist/default-edits/HistoryEditFactory.js.map +0 -1
  636. package/dist/default-edits/PersistedTypes.d.ts.map +0 -1
  637. package/dist/default-edits/PersistedTypes.js.map +0 -1
  638. package/dist/default-edits/SharedTree.d.ts +0 -111
  639. package/dist/default-edits/SharedTree.d.ts.map +0 -1
  640. package/dist/default-edits/SharedTree.js +0 -124
  641. package/dist/default-edits/SharedTree.js.map +0 -1
  642. package/dist/default-edits/Summary.d.ts +0 -15
  643. package/dist/default-edits/Summary.d.ts.map +0 -1
  644. package/dist/default-edits/Summary.js +0 -35
  645. package/dist/default-edits/Summary.js.map +0 -1
  646. package/dist/default-edits/Transaction.d.ts +0 -41
  647. package/dist/default-edits/Transaction.d.ts.map +0 -1
  648. package/dist/default-edits/Transaction.js +0 -225
  649. package/dist/default-edits/Transaction.js.map +0 -1
  650. package/dist/default-edits/UndoRedoHandler.d.ts.map +0 -1
  651. package/dist/default-edits/UndoRedoHandler.js.map +0 -1
  652. package/dist/default-edits/index.d.ts +0 -13
  653. package/dist/default-edits/index.d.ts.map +0 -1
  654. package/dist/default-edits/index.js +0 -41
  655. package/dist/default-edits/index.js.map +0 -1
  656. package/dist/generic/GenericEditUtilities.d.ts +0 -26
  657. package/dist/generic/GenericEditUtilities.d.ts.map +0 -1
  658. package/dist/generic/GenericEditUtilities.js +0 -45
  659. package/dist/generic/GenericEditUtilities.js.map +0 -1
  660. package/dist/generic/GenericSharedTree.d.ts +0 -221
  661. package/dist/generic/GenericSharedTree.d.ts.map +0 -1
  662. package/dist/generic/GenericSharedTree.js +0 -447
  663. package/dist/generic/GenericSharedTree.js.map +0 -1
  664. package/dist/generic/GenericTransaction.d.ts +0 -87
  665. package/dist/generic/GenericTransaction.d.ts.map +0 -1
  666. package/dist/generic/GenericTransaction.js +0 -144
  667. package/dist/generic/GenericTransaction.js.map +0 -1
  668. package/dist/generic/PersistedTypes.d.ts +0 -194
  669. package/dist/generic/PersistedTypes.d.ts.map +0 -1
  670. package/dist/generic/PersistedTypes.js +0 -42
  671. package/dist/generic/PersistedTypes.js.map +0 -1
  672. package/dist/generic/Summary.d.ts +0 -63
  673. package/dist/generic/Summary.d.ts.map +0 -1
  674. package/dist/generic/Summary.js +0 -64
  675. package/dist/generic/Summary.js.map +0 -1
  676. package/dist/generic/index.d.ts +0 -10
  677. package/dist/generic/index.d.ts.map +0 -1
  678. package/dist/generic/index.js +0 -26
  679. package/dist/generic/index.js.map +0 -1
  680. package/docs/Future.md +0 -155
  681. package/lib/BasicCheckout.d.ts +0 -23
  682. package/lib/BasicCheckout.d.ts.map +0 -1
  683. package/lib/BasicCheckout.js.map +0 -1
  684. package/lib/Snapshot.d.ts +0 -198
  685. package/lib/Snapshot.d.ts.map +0 -1
  686. package/lib/Snapshot.js +0 -263
  687. package/lib/Snapshot.js.map +0 -1
  688. package/lib/SnapshotUtilities.d.ts +0 -29
  689. package/lib/SnapshotUtilities.d.ts.map +0 -1
  690. package/lib/SnapshotUtilities.js +0 -67
  691. package/lib/SnapshotUtilities.js.map +0 -1
  692. package/lib/anchored-edits/AnchorResolution.d.ts +0 -144
  693. package/lib/anchored-edits/AnchorResolution.d.ts.map +0 -1
  694. package/lib/anchored-edits/AnchorResolution.js +0 -152
  695. package/lib/anchored-edits/AnchorResolution.js.map +0 -1
  696. package/lib/anchored-edits/Factory.d.ts +0 -56
  697. package/lib/anchored-edits/Factory.d.ts.map +0 -1
  698. package/lib/anchored-edits/Factory.js +0 -74
  699. package/lib/anchored-edits/Factory.js.map +0 -1
  700. package/lib/anchored-edits/PersistedTypes.d.ts +0 -245
  701. package/lib/anchored-edits/PersistedTypes.d.ts.map +0 -1
  702. package/lib/anchored-edits/PersistedTypes.js +0 -128
  703. package/lib/anchored-edits/PersistedTypes.js.map +0 -1
  704. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  705. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  706. package/lib/anchored-edits/SharedTreeWithAnchors.js +0 -110
  707. package/lib/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  708. package/lib/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  709. package/lib/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  710. package/lib/anchored-edits/TransactionWithAnchors.js +0 -32
  711. package/lib/anchored-edits/TransactionWithAnchors.js.map +0 -1
  712. package/lib/anchored-edits/index.d.ts +0 -10
  713. package/lib/anchored-edits/index.d.ts.map +0 -1
  714. package/lib/anchored-edits/index.js +0 -11
  715. package/lib/anchored-edits/index.js.map +0 -1
  716. package/lib/default-edits/EditUtilities.d.ts +0 -57
  717. package/lib/default-edits/EditUtilities.d.ts.map +0 -1
  718. package/lib/default-edits/EditUtilities.js +0 -181
  719. package/lib/default-edits/EditUtilities.js.map +0 -1
  720. package/lib/default-edits/Factory.d.ts +0 -56
  721. package/lib/default-edits/Factory.d.ts.map +0 -1
  722. package/lib/default-edits/Factory.js +0 -74
  723. package/lib/default-edits/Factory.js.map +0 -1
  724. package/lib/default-edits/HistoryEditFactory.d.ts +0 -19
  725. package/lib/default-edits/HistoryEditFactory.d.ts.map +0 -1
  726. package/lib/default-edits/HistoryEditFactory.js.map +0 -1
  727. package/lib/default-edits/PersistedTypes.d.ts.map +0 -1
  728. package/lib/default-edits/PersistedTypes.js.map +0 -1
  729. package/lib/default-edits/SharedTree.d.ts +0 -111
  730. package/lib/default-edits/SharedTree.d.ts.map +0 -1
  731. package/lib/default-edits/SharedTree.js +0 -100
  732. package/lib/default-edits/SharedTree.js.map +0 -1
  733. package/lib/default-edits/Summary.d.ts +0 -15
  734. package/lib/default-edits/Summary.d.ts.map +0 -1
  735. package/lib/default-edits/Summary.js +0 -31
  736. package/lib/default-edits/Summary.js.map +0 -1
  737. package/lib/default-edits/Transaction.d.ts +0 -41
  738. package/lib/default-edits/Transaction.d.ts.map +0 -1
  739. package/lib/default-edits/Transaction.js +0 -221
  740. package/lib/default-edits/Transaction.js.map +0 -1
  741. package/lib/default-edits/UndoRedoHandler.d.ts.map +0 -1
  742. package/lib/default-edits/UndoRedoHandler.js.map +0 -1
  743. package/lib/default-edits/index.d.ts +0 -13
  744. package/lib/default-edits/index.d.ts.map +0 -1
  745. package/lib/default-edits/index.js +0 -14
  746. package/lib/default-edits/index.js.map +0 -1
  747. package/lib/generic/GenericEditUtilities.d.ts +0 -26
  748. package/lib/generic/GenericEditUtilities.d.ts.map +0 -1
  749. package/lib/generic/GenericEditUtilities.js +0 -38
  750. package/lib/generic/GenericEditUtilities.js.map +0 -1
  751. package/lib/generic/GenericSharedTree.d.ts +0 -221
  752. package/lib/generic/GenericSharedTree.d.ts.map +0 -1
  753. package/lib/generic/GenericSharedTree.js +0 -443
  754. package/lib/generic/GenericSharedTree.js.map +0 -1
  755. package/lib/generic/GenericTransaction.d.ts +0 -87
  756. package/lib/generic/GenericTransaction.d.ts.map +0 -1
  757. package/lib/generic/GenericTransaction.js +0 -140
  758. package/lib/generic/GenericTransaction.js.map +0 -1
  759. package/lib/generic/PersistedTypes.d.ts +0 -194
  760. package/lib/generic/PersistedTypes.d.ts.map +0 -1
  761. package/lib/generic/PersistedTypes.js +0 -39
  762. package/lib/generic/PersistedTypes.js.map +0 -1
  763. package/lib/generic/Summary.d.ts +0 -63
  764. package/lib/generic/Summary.d.ts.map +0 -1
  765. package/lib/generic/Summary.js +0 -58
  766. package/lib/generic/Summary.js.map +0 -1
  767. package/lib/generic/index.d.ts +0 -10
  768. package/lib/generic/index.d.ts.map +0 -1
  769. package/lib/generic/index.js +0 -11
  770. package/lib/generic/index.js.map +0 -1
  771. package/lib/test/Anchors.glassBox.tests.d.ts.map +0 -1
  772. package/lib/test/Anchors.glassBox.tests.js +0 -410
  773. package/lib/test/Anchors.glassBox.tests.js.map +0 -1
  774. package/lib/test/BasicCheckout.tests.d.ts.map +0 -1
  775. package/lib/test/BasicCheckout.tests.js +0 -8
  776. package/lib/test/BasicCheckout.tests.js.map +0 -1
  777. package/lib/test/GenericTransactionWithAnchors.tests.d.ts.map +0 -1
  778. package/lib/test/GenericTransactionWithAnchors.tests.js +0 -25
  779. package/lib/test/GenericTransactionWithAnchors.tests.js.map +0 -1
  780. package/lib/test/SharedTreeWithAnchors.tests.d.ts.map +0 -1
  781. package/lib/test/SharedTreeWithAnchors.tests.js +0 -420
  782. package/lib/test/SharedTreeWithAnchors.tests.js.map +0 -1
  783. package/lib/test/Snapshot.tests.d.ts.map +0 -1
  784. package/lib/test/Snapshot.tests.js +0 -96
  785. package/lib/test/Snapshot.tests.js.map +0 -1
  786. package/lib/test/SnapshotUtilities.tests.d.ts.map +0 -1
  787. package/lib/test/SnapshotUtilities.tests.js +0 -168
  788. package/lib/test/SnapshotUtilities.tests.js.map +0 -1
  789. package/lib/test/undoRedoStackManager.d.ts +0 -26
  790. package/lib/test/undoRedoStackManager.d.ts.map +0 -1
  791. package/lib/test/undoRedoStackManager.js +0 -176
  792. package/lib/test/undoRedoStackManager.js.map +0 -1
  793. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts +0 -13
  794. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts.map +0 -1
  795. package/lib/test/utilities/SummaryFormatCompatibilityTests.js +0 -154
  796. package/lib/test/utilities/SummaryFormatCompatibilityTests.js.map +0 -1
  797. package/src/BasicCheckout.ts +0 -34
  798. package/src/Snapshot.ts +0 -363
  799. package/src/SnapshotUtilities.ts +0 -88
  800. package/src/anchored-edits/AnchorResolution.ts +0 -442
  801. package/src/anchored-edits/Factory.ts +0 -94
  802. package/src/anchored-edits/PersistedTypes.ts +0 -310
  803. package/src/anchored-edits/SharedTreeWithAnchors.ts +0 -200
  804. package/src/anchored-edits/TransactionWithAnchors.ts +0 -39
  805. package/src/anchored-edits/index.ts +0 -21
  806. package/src/default-edits/EditUtilities.ts +0 -220
  807. package/src/default-edits/Factory.ts +0 -94
  808. package/src/default-edits/SharedTree.ts +0 -174
  809. package/src/default-edits/Summary.ts +0 -44
  810. package/src/default-edits/Transaction.ts +0 -262
  811. package/src/default-edits/index.ts +0 -29
  812. package/src/generic/GenericEditUtilities.ts +0 -46
  813. package/src/generic/GenericSharedTree.ts +0 -593
  814. package/src/generic/GenericTransaction.ts +0 -194
  815. package/src/generic/PersistedTypes.ts +0 -221
  816. package/src/generic/Summary.ts +0 -113
  817. package/src/generic/index.ts +0 -41
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedTreeFuzzTests.d.ts","sourceRoot":"","sources":["../../../src/test/fuzz/SharedTreeFuzzTests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,aAAa,EAA8B,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAS/F;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACvC,SAAS,EAAE,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,EAC/C,IAAI,EAAE,MAAM,EACZ,gBAAgB,GAAE,OAAc,EAChC,QAAQ,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CA8GlC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAkI1D"}
@@ -0,0 +1,217 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { promises as fs, existsSync, mkdirSync } from 'fs';
6
+ import { join } from 'path';
7
+ import Prando from 'prando';
8
+ import { expect } from 'chai';
9
+ import { setUpLocalServerTestSharedTree, testDocumentsPathBase } from '../utilities/TestUtilities';
10
+ import { WriteFormat } from '../../persisted-types';
11
+ import { fail } from '../../Common';
12
+ import { areRevisionViewsSemanticallyEqual } from '../../EditUtilities';
13
+ import { done } from './Types';
14
+ import { chain, makeOpGenerator, take } from './Generators';
15
+ const directory = join(testDocumentsPathBase, 'fuzz-tests');
16
+ // TODO: Kludge: Use this to change the seed such that the tests avoid hitting bugs in the Fluid Framework.
17
+ // Should be removed once fuzz tests pass reliably with any seed.
18
+ const adjustSeed = 2;
19
+ /**
20
+ * Performs random actions on a set of clients.
21
+ * @param generator finite generator for a sequence of Operations to test. The test will run until this generator is exhausted.
22
+ * @param seed the seed for the random generation of the fuzz actions
23
+ * @param synchronizeAtEnd if provided, all client will have all operations delivered from the server at the end of the test
24
+ * @param saveInfo optionally provide an operation number at which a history of all operations will be saved to disk at a given filepath.
25
+ * This can be useful for debugging why a fuzz test may have failed.
26
+ */
27
+ export async function performFuzzActions(generator, seed, synchronizeAtEnd = true, saveInfo) {
28
+ var _a;
29
+ const rand = new Prando(seed);
30
+ // Note: the direct fields of `state` aren't mutated, but it is mutated transitively.
31
+ const state = { rand, passiveCollaborators: [], activeCollaborators: [] };
32
+ const { activeCollaborators, passiveCollaborators } = state;
33
+ const operations = [];
34
+ for (let operation = await generator(state, undefined); operation !== done; operation = await generator(state, undefined)) {
35
+ operations.push(operation);
36
+ if (saveInfo !== undefined && operations.length === saveInfo.saveAt) {
37
+ await fs.writeFile(saveInfo.filepath, JSON.stringify(operations));
38
+ }
39
+ try {
40
+ switch (operation.type) {
41
+ case 'edit': {
42
+ const { index, contents } = operation;
43
+ const { tree } = activeCollaborators[index];
44
+ switch (contents.fuzzType) {
45
+ case 'insert':
46
+ tree.applyEdit(contents.build, contents.insert);
47
+ break;
48
+ case 'delete':
49
+ tree.applyEdit(contents);
50
+ break;
51
+ case 'move':
52
+ tree.applyEdit(contents.detach, contents.insert);
53
+ break;
54
+ case 'setPayload':
55
+ tree.applyEdit(contents);
56
+ break;
57
+ default:
58
+ fail('Invalid edit.');
59
+ break;
60
+ }
61
+ break;
62
+ }
63
+ case 'join': {
64
+ const { isObserver, summarizeHistory, writeFormat } = operation;
65
+ const { container, tree, testObjectProvider } = await setUpLocalServerTestSharedTree({
66
+ writeFormat,
67
+ summarizeHistory,
68
+ testObjectProvider: state.testObjectProvider,
69
+ });
70
+ if (state.testObjectProvider === undefined) {
71
+ state.testObjectProvider = testObjectProvider;
72
+ }
73
+ (isObserver ? passiveCollaborators : activeCollaborators).push({ container, tree });
74
+ break;
75
+ }
76
+ case 'leave': {
77
+ const { index, isObserver } = operation;
78
+ const treeList = isObserver ? passiveCollaborators : activeCollaborators;
79
+ treeList[index].container.close();
80
+ treeList.splice(index, 1);
81
+ break;
82
+ }
83
+ case 'synchronize': {
84
+ const { testObjectProvider } = state;
85
+ if (testObjectProvider === undefined) {
86
+ fail('Attempted to synchronize with undefined testObjectProvider');
87
+ }
88
+ await testObjectProvider.ensureSynchronized();
89
+ const trees = [...state.activeCollaborators, ...state.passiveCollaborators];
90
+ if (trees.length > 1) {
91
+ const first = trees[0].tree;
92
+ for (let i = 1; i < trees.length; i++) {
93
+ const tree = trees[i].tree;
94
+ const editLogA = first.editsInternal;
95
+ const editLogB = tree.editsInternal;
96
+ const minEdits = Math.min(editLogA.length, editLogB.length);
97
+ for (let j = 0; j < minEdits - 1; j++) {
98
+ const editA = await editLogA.getEditAtIndex(editLogA.length - j - 1);
99
+ const editB = await editLogB.getEditAtIndex(editLogB.length - j - 1);
100
+ expect(editA.id).to.equal(editB.id);
101
+ }
102
+ expect(areRevisionViewsSemanticallyEqual(tree.currentView, tree, first.currentView, first))
103
+ .to.be.true;
104
+ }
105
+ }
106
+ break;
107
+ }
108
+ default:
109
+ throw new Error('Unknown operation.');
110
+ }
111
+ }
112
+ catch (err) {
113
+ console.log(`Error encountered on operation number ${operations.length}`);
114
+ if (saveInfo !== undefined && saveInfo.saveOnFailure) {
115
+ await fs.writeFile(saveInfo.filepath, JSON.stringify(operations));
116
+ }
117
+ throw err;
118
+ }
119
+ }
120
+ if (synchronizeAtEnd) {
121
+ await ((_a = state.testObjectProvider) === null || _a === void 0 ? void 0 : _a.ensureSynchronized());
122
+ const trees = [...activeCollaborators.map(({ tree }) => tree), ...passiveCollaborators.map(({ tree }) => tree)];
123
+ for (let i = 0; i < trees.length - 1; i++) {
124
+ expect(trees[i].equals(trees[i + 1]));
125
+ }
126
+ }
127
+ return state;
128
+ }
129
+ export function runSharedTreeFuzzTests(title) {
130
+ // Some useful tips for debugging fuzz tests:
131
+ // - A JSON dump of the operation sequence can be written to disk by passing `true` for `saveOnFailure`.
132
+ // - Different shared-tree instances can be distinguished (e.g. in logs) by using `tree.getRuntime().clientId`
133
+ describe(title, () => {
134
+ function runTest(generatorFactory, seed, saveOnFailure) {
135
+ it(`with seed ${seed}`, async () => {
136
+ const saveInfo = saveOnFailure !== undefined
137
+ ? { filepath: join(directory, `test-history-${seed}.json`), saveOnFailure }
138
+ : undefined;
139
+ if (saveInfo !== undefined && !existsSync(directory)) {
140
+ mkdirSync(directory);
141
+ }
142
+ await performFuzzActions(generatorFactory(), seed + adjustSeed, true, saveInfo);
143
+ }).timeout(10000);
144
+ }
145
+ function runMixedVersionTests(summarizeHistory, testsPerSuite) {
146
+ describe('using 0.0.2 and 0.1.1 trees', () => {
147
+ for (let seed = 0; seed < testsPerSuite; seed++) {
148
+ runTest(() => take(1000, makeOpGenerator({ joinConfig: { summarizeHistory: [summarizeHistory] } })), seed);
149
+ }
150
+ });
151
+ describe('using only version 0.0.2', () => {
152
+ for (let seed = 0; seed < testsPerSuite; seed++) {
153
+ runTest(() => take(1000, makeOpGenerator({
154
+ joinConfig: {
155
+ writeFormat: [WriteFormat.v0_0_2],
156
+ summarizeHistory: [summarizeHistory],
157
+ },
158
+ })), seed);
159
+ }
160
+ });
161
+ describe('using only version 0.1.1', () => {
162
+ for (let seed = 0; seed < testsPerSuite; seed++) {
163
+ runTest(() => take(1000, makeOpGenerator({
164
+ joinConfig: {
165
+ writeFormat: [WriteFormat.v0_1_1],
166
+ summarizeHistory: [summarizeHistory],
167
+ },
168
+ })), seed);
169
+ }
170
+ });
171
+ describe('upgrading halfway through', () => {
172
+ const testLength = 500;
173
+ const maximumActiveCollaborators = 10;
174
+ const maximumPassiveCollaborators = 5;
175
+ const editConfig = { maxTreeSize: 1000 };
176
+ const generatorFactory = () => chain(take(testLength / 2 - 1, makeOpGenerator({
177
+ editConfig,
178
+ joinConfig: {
179
+ maximumActiveCollaborators,
180
+ maximumPassiveCollaborators,
181
+ writeFormat: [WriteFormat.v0_0_2],
182
+ summarizeHistory: [summarizeHistory],
183
+ },
184
+ })), take(1, makeOpGenerator({
185
+ joinConfig: {
186
+ maximumActiveCollaborators: maximumActiveCollaborators + 1,
187
+ maximumPassiveCollaborators,
188
+ writeFormat: [WriteFormat.v0_1_1],
189
+ summarizeHistory: [summarizeHistory],
190
+ },
191
+ editWeight: 0,
192
+ joinWeight: 1,
193
+ leaveWeight: 0,
194
+ synchronizeWeight: 0,
195
+ })), take(testLength / 2, makeOpGenerator({
196
+ editConfig,
197
+ joinConfig: {
198
+ maximumActiveCollaborators,
199
+ maximumPassiveCollaborators,
200
+ summarizeHistory: [summarizeHistory],
201
+ },
202
+ })));
203
+ for (let seed = 0; seed < testsPerSuite; seed++) {
204
+ runTest(generatorFactory, seed);
205
+ }
206
+ });
207
+ }
208
+ const testCount = 1;
209
+ describe('with no-history summarization', () => {
210
+ runMixedVersionTests(false, testCount);
211
+ });
212
+ describe('with history summarization', () => {
213
+ runMixedVersionTests(true, testCount);
214
+ });
215
+ });
216
+ }
217
+ //# sourceMappingURL=SharedTreeFuzzTests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedTreeFuzzTests.js","sourceRoot":"","sources":["../../../src/test/fuzz/SharedTreeFuzzTests.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 { promises as fs, existsSync, mkdirSync } from 'fs';\nimport { join } from 'path';\nimport Prando from 'prando';\nimport { expect } from 'chai';\nimport { setUpLocalServerTestSharedTree, testDocumentsPathBase } from '../utilities/TestUtilities';\nimport { ChangeInternal, WriteFormat } from '../../persisted-types';\nimport { fail } from '../../Common';\nimport { areRevisionViewsSemanticallyEqual } from '../../EditUtilities';\nimport { EditLog } from '../../EditLog';\nimport { FuzzTestState, done, EditGenerationConfig, AsyncGenerator, Operation } from './Types';\nimport { chain, makeOpGenerator, take } from './Generators';\n\nconst directory = join(testDocumentsPathBase, 'fuzz-tests');\n\n// TODO: Kludge: Use this to change the seed such that the tests avoid hitting bugs in the Fluid Framework.\n// Should be removed once fuzz tests pass reliably with any seed.\nconst adjustSeed = 2;\n\n/**\n * Performs random actions on a set of clients.\n * @param generator finite generator for a sequence of Operations to test. The test will run until this generator is exhausted.\n * @param seed the seed for the random generation of the fuzz actions\n * @param synchronizeAtEnd if provided, all client will have all operations delivered from the server at the end of the test\n * @param saveInfo optionally provide an operation number at which a history of all operations will be saved to disk at a given filepath.\n * This can be useful for debugging why a fuzz test may have failed.\n */\nexport async function performFuzzActions(\n\tgenerator: AsyncGenerator<Operation, undefined>,\n\tseed: number,\n\tsynchronizeAtEnd: boolean = true,\n\tsaveInfo?: { saveAt?: number; saveOnFailure: boolean; filepath: string }\n): Promise<Required<FuzzTestState>> {\n\tconst rand = new Prando(seed);\n\n\t// Note: the direct fields of `state` aren't mutated, but it is mutated transitively.\n\tconst state: FuzzTestState = { rand, passiveCollaborators: [], activeCollaborators: [] };\n\tconst { activeCollaborators, passiveCollaborators } = state;\n\tconst operations: Operation[] = [];\n\tfor (\n\t\tlet operation = await generator(state, undefined);\n\t\toperation !== done;\n\t\toperation = await generator(state, undefined)\n\t) {\n\t\toperations.push(operation);\n\t\tif (saveInfo !== undefined && operations.length === saveInfo.saveAt) {\n\t\t\tawait fs.writeFile(saveInfo.filepath, JSON.stringify(operations));\n\t\t}\n\n\t\ttry {\n\t\t\tswitch (operation.type) {\n\t\t\t\tcase 'edit': {\n\t\t\t\t\tconst { index, contents } = operation;\n\t\t\t\t\tconst { tree } = activeCollaborators[index];\n\t\t\t\t\tswitch (contents.fuzzType) {\n\t\t\t\t\t\tcase 'insert':\n\t\t\t\t\t\t\ttree.applyEdit(contents.build, contents.insert);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'delete':\n\t\t\t\t\t\t\ttree.applyEdit(contents);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'move':\n\t\t\t\t\t\t\ttree.applyEdit(contents.detach, contents.insert);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'setPayload':\n\t\t\t\t\t\t\ttree.applyEdit(contents);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfail('Invalid edit.');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'join': {\n\t\t\t\t\tconst { isObserver, summarizeHistory, writeFormat } = operation;\n\t\t\t\t\tconst { container, tree, testObjectProvider } = await setUpLocalServerTestSharedTree({\n\t\t\t\t\t\twriteFormat,\n\t\t\t\t\t\tsummarizeHistory,\n\t\t\t\t\t\ttestObjectProvider: state.testObjectProvider,\n\t\t\t\t\t});\n\t\t\t\t\tif (state.testObjectProvider === undefined) {\n\t\t\t\t\t\tstate.testObjectProvider = testObjectProvider;\n\t\t\t\t\t}\n\t\t\t\t\t(isObserver ? passiveCollaborators : activeCollaborators).push({ container, tree });\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'leave': {\n\t\t\t\t\tconst { index, isObserver } = operation;\n\t\t\t\t\tconst treeList = isObserver ? passiveCollaborators : activeCollaborators;\n\t\t\t\t\ttreeList[index].container.close();\n\t\t\t\t\ttreeList.splice(index, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'synchronize': {\n\t\t\t\t\tconst { testObjectProvider } = state;\n\t\t\t\t\tif (testObjectProvider === undefined) {\n\t\t\t\t\t\tfail('Attempted to synchronize with undefined testObjectProvider');\n\t\t\t\t\t}\n\t\t\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\t\t\tconst trees = [...state.activeCollaborators, ...state.passiveCollaborators];\n\t\t\t\t\tif (trees.length > 1) {\n\t\t\t\t\t\tconst first = trees[0].tree;\n\t\t\t\t\t\tfor (let i = 1; i < trees.length; i++) {\n\t\t\t\t\t\t\tconst tree = trees[i].tree;\n\t\t\t\t\t\t\tconst editLogA = first.editsInternal as EditLog<ChangeInternal>;\n\t\t\t\t\t\t\tconst editLogB = tree.editsInternal as EditLog<ChangeInternal>;\n\t\t\t\t\t\t\tconst minEdits = Math.min(editLogA.length, editLogB.length);\n\t\t\t\t\t\t\tfor (let j = 0; j < minEdits - 1; j++) {\n\t\t\t\t\t\t\t\tconst editA = await editLogA.getEditAtIndex(editLogA.length - j - 1);\n\t\t\t\t\t\t\t\tconst editB = await editLogB.getEditAtIndex(editLogB.length - j - 1);\n\t\t\t\t\t\t\t\texpect(editA.id).to.equal(editB.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\texpect(areRevisionViewsSemanticallyEqual(tree.currentView, tree, first.currentView, first))\n\t\t\t\t\t\t\t\t.to.be.true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('Unknown operation.');\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.log(`Error encountered on operation number ${operations.length}`);\n\t\t\tif (saveInfo !== undefined && saveInfo.saveOnFailure) {\n\t\t\t\tawait fs.writeFile(saveInfo.filepath, JSON.stringify(operations));\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tif (synchronizeAtEnd) {\n\t\tawait state.testObjectProvider?.ensureSynchronized();\n\t\tconst trees = [...activeCollaborators.map(({ tree }) => tree), ...passiveCollaborators.map(({ tree }) => tree)];\n\t\tfor (let i = 0; i < trees.length - 1; i++) {\n\t\t\texpect(trees[i].equals(trees[i + 1]));\n\t\t}\n\t}\n\n\treturn state as Required<FuzzTestState>;\n}\n\nexport function runSharedTreeFuzzTests(title: string): void {\n\t// Some useful tips for debugging fuzz tests:\n\t// - A JSON dump of the operation sequence can be written to disk by passing `true` for `saveOnFailure`.\n\t// - Different shared-tree instances can be distinguished (e.g. in logs) by using `tree.getRuntime().clientId`\n\tdescribe(title, () => {\n\t\tfunction runTest(\n\t\t\tgeneratorFactory: () => AsyncGenerator<Operation, undefined>,\n\t\t\tseed: number,\n\t\t\tsaveOnFailure?: boolean\n\t\t): void {\n\t\t\tit(`with seed ${seed}`, async () => {\n\t\t\t\tconst saveInfo =\n\t\t\t\t\tsaveOnFailure !== undefined\n\t\t\t\t\t\t? { filepath: join(directory, `test-history-${seed}.json`), saveOnFailure }\n\t\t\t\t\t\t: undefined;\n\t\t\t\tif (saveInfo !== undefined && !existsSync(directory)) {\n\t\t\t\t\tmkdirSync(directory);\n\t\t\t\t}\n\t\t\t\tawait performFuzzActions(generatorFactory(), seed + adjustSeed, true, saveInfo);\n\t\t\t}).timeout(10000);\n\t\t}\n\n\t\tfunction runMixedVersionTests(summarizeHistory: boolean, testsPerSuite: number): void {\n\t\t\tdescribe('using 0.0.2 and 0.1.1 trees', () => {\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(\n\t\t\t\t\t\t() => take(1000, makeOpGenerator({ joinConfig: { summarizeHistory: [summarizeHistory] } })),\n\t\t\t\t\t\tseed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdescribe('using only version 0.0.2', () => {\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\t\t1000,\n\t\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_0_2],\n\t\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tseed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdescribe('using only version 0.1.1', () => {\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\t\t1000,\n\t\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_1_1],\n\t\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tseed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdescribe('upgrading halfway through', () => {\n\t\t\t\tconst testLength = 500;\n\t\t\t\tconst maximumActiveCollaborators = 10;\n\t\t\t\tconst maximumPassiveCollaborators = 5;\n\t\t\t\tconst editConfig: EditGenerationConfig = { maxTreeSize: 1000 };\n\t\t\t\tconst generatorFactory = () =>\n\t\t\t\t\tchain(\n\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\ttestLength / 2 - 1,\n\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\teditConfig,\n\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\tmaximumActiveCollaborators,\n\t\t\t\t\t\t\t\t\tmaximumPassiveCollaborators,\n\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_0_2],\n\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\tmaximumActiveCollaborators: maximumActiveCollaborators + 1,\n\t\t\t\t\t\t\t\t\tmaximumPassiveCollaborators,\n\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_1_1],\n\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\teditWeight: 0,\n\t\t\t\t\t\t\t\tjoinWeight: 1,\n\t\t\t\t\t\t\t\tleaveWeight: 0,\n\t\t\t\t\t\t\t\tsynchronizeWeight: 0,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\ttestLength / 2,\n\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\teditConfig,\n\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\tmaximumActiveCollaborators,\n\t\t\t\t\t\t\t\t\tmaximumPassiveCollaborators,\n\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(generatorFactory, seed);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tconst testCount = 1;\n\t\tdescribe('with no-history summarization', () => {\n\t\t\trunMixedVersionTests(false, testCount);\n\t\t});\n\n\t\tdescribe('with history summarization', () => {\n\t\t\trunMixedVersionTests(true, testCount);\n\t\t});\n\t});\n}\n"]}
@@ -0,0 +1,133 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import type { TestObjectProvider } from '@fluidframework/test-utils';
6
+ import type Prando from 'prando';
7
+ import type { IContainer } from '@fluidframework/container-definitions';
8
+ import type { IFluidDataStoreRuntime } from '@fluidframework/datastore-definitions';
9
+ import type { SharedTree } from '../../SharedTree';
10
+ import type { WriteFormat } from '../../persisted-types';
11
+ import type { Build, Detach, Insert, SetValue } from '../../ChangeTypes';
12
+ import type { TreeView } from '../../TreeView';
13
+ import type { NodeId } from '../../Identifiers';
14
+ import type { NodeIdGenerator } from '../../NodeIdUtilities';
15
+ export interface FuzzTestState {
16
+ rand: Prando;
17
+ testObjectProvider?: TestObjectProvider;
18
+ activeCollaborators: Collaborator[];
19
+ passiveCollaborators: Collaborator[];
20
+ }
21
+ export interface Collaborator {
22
+ container: IContainer;
23
+ tree: SharedTree;
24
+ }
25
+ export interface TreeEdit {
26
+ type: 'edit';
27
+ contents: FuzzChange;
28
+ /** index of the tree to apply the edit to. */
29
+ index: number;
30
+ }
31
+ export interface TreeJoin {
32
+ type: 'join';
33
+ summarizeHistory: boolean;
34
+ writeFormat: WriteFormat;
35
+ isObserver: boolean;
36
+ }
37
+ export interface TreeLeave {
38
+ type: 'leave';
39
+ isObserver: boolean;
40
+ index: number;
41
+ }
42
+ export interface Synchronize {
43
+ type: 'synchronize';
44
+ }
45
+ /**
46
+ * Operations:
47
+ * - Any valid edit on any shared tree
48
+ * - New SharedTree joins session with some initial params
49
+ * - Existing SharedTree leaves session
50
+ * - Local server synchronizes connected clients
51
+ *
52
+ * Note that these objects should be JSON serializable for ease in debugging fuzz tests.
53
+ * Future potential work:
54
+ * - More fine-grained control of summarization processes
55
+ */
56
+ export declare type Operation = TreeEdit | TreeJoin | TreeLeave | Synchronize;
57
+ export declare const done: unique symbol;
58
+ /**
59
+ * TAdditionalState can be used to compose generators (see treatment of how fuzzed edit changes pass in
60
+ * the tree to which they apply to sub-generators)
61
+ */
62
+ export declare type AsyncGenerator<T, TAdditionalState> = (state: FuzzTestState, additionalState: TAdditionalState) => Promise<T | typeof done>;
63
+ export interface FuzzInsert {
64
+ fuzzType: 'insert';
65
+ build: Build;
66
+ insert: Insert;
67
+ }
68
+ export declare type FuzzDelete = Detach & {
69
+ fuzzType: 'delete';
70
+ };
71
+ export interface FuzzMove {
72
+ fuzzType: 'move';
73
+ detach: Detach;
74
+ insert: Insert;
75
+ }
76
+ export declare type FuzzSetPayload = SetValue & {
77
+ fuzzType: 'setPayload';
78
+ };
79
+ export declare type FuzzChange = FuzzInsert | FuzzDelete | FuzzMove | FuzzSetPayload;
80
+ export interface TreeContext {
81
+ view: TreeView;
82
+ idGenerator: NodeIdGenerator;
83
+ idList: NodeId[];
84
+ dataStoreRuntime: IFluidDataStoreRuntime;
85
+ }
86
+ export interface InsertGenerationConfig {
87
+ /** default: 3 */
88
+ maxTreeSequenceSize?: number;
89
+ /** The number of possible definitions. Default: 20. */
90
+ definitionPoolSize?: number;
91
+ }
92
+ export interface EditGenerationConfig {
93
+ /** default: Number.POSITIVE_INFINITY (no max size) */
94
+ maxTreeSize?: number;
95
+ /** default: 3 */
96
+ insertWeight?: number;
97
+ /** default: 1 */
98
+ deleteWeight?: number;
99
+ /** default: 1 */
100
+ moveWeight?: number;
101
+ /** default: 1 */
102
+ setPayloadWeight?: number;
103
+ insertConfig?: InsertGenerationConfig;
104
+ /** The number of possible trait labels. Default: 20. */
105
+ traitLabelPoolSize?: number;
106
+ }
107
+ export interface JoinGenerationConfig {
108
+ /**
109
+ * Valid `summarizeHistory` values. Defaults to [false].
110
+ */
111
+ summarizeHistory?: boolean[];
112
+ /**
113
+ * Valid `writeFormat` values. Defaults to 0.0.2 and 0.1.1.
114
+ */
115
+ writeFormat?: WriteFormat[];
116
+ /** default: Number.POSITIVE_INFINITY (no max size) */
117
+ maximumPassiveCollaborators?: number;
118
+ /** default: Number.POSITIVE_INFINITY (no max size) */
119
+ maximumActiveCollaborators?: number;
120
+ }
121
+ export interface OperationGenerationConfig {
122
+ editConfig?: EditGenerationConfig;
123
+ joinConfig?: JoinGenerationConfig;
124
+ /** default: 10 */
125
+ editWeight?: number;
126
+ /** default: 1 */
127
+ joinWeight?: number;
128
+ /** default: 1 */
129
+ leaveWeight?: number;
130
+ /** default: 1 */
131
+ synchronizeWeight?: number;
132
+ }
133
+ //# sourceMappingURL=Types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../../src/test/fuzz/Types.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,5 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export {};
6
- //# sourceMappingURL=GenericTransactionWithAnchors.tests.d.ts.map
5
+ export const done = Symbol('GeneratorDone');
6
+ //# sourceMappingURL=Types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Types.js","sourceRoot":"","sources":["../../../src/test/fuzz/Types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8DH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { TestObjectProvider } from '@fluidframework/test-utils';\nimport type Prando from 'prando';\nimport type { IContainer } from '@fluidframework/container-definitions';\nimport type { IFluidDataStoreRuntime } from '@fluidframework/datastore-definitions';\nimport type { SharedTree } from '../../SharedTree';\nimport type { WriteFormat } from '../../persisted-types';\nimport type { Build, Detach, Insert, SetValue } from '../../ChangeTypes';\nimport type { TreeView } from '../../TreeView';\nimport type { NodeId } from '../../Identifiers';\nimport type { NodeIdGenerator } from '../../NodeIdUtilities';\n\nexport interface FuzzTestState {\n\trand: Prando;\n\ttestObjectProvider?: TestObjectProvider;\n\tactiveCollaborators: Collaborator[];\n\tpassiveCollaborators: Collaborator[];\n}\n\nexport interface Collaborator {\n\tcontainer: IContainer;\n\ttree: SharedTree;\n}\n\nexport interface TreeEdit {\n\ttype: 'edit';\n\tcontents: FuzzChange;\n\t/** index of the tree to apply the edit to. */\n\tindex: number;\n}\n\nexport interface TreeJoin {\n\ttype: 'join';\n\tsummarizeHistory: boolean;\n\twriteFormat: WriteFormat;\n\tisObserver: boolean;\n}\n\nexport interface TreeLeave {\n\ttype: 'leave';\n\tisObserver: boolean;\n\tindex: number;\n}\n\nexport interface Synchronize {\n\ttype: 'synchronize';\n}\n\n/**\n * Operations:\n * - Any valid edit on any shared tree\n * - New SharedTree joins session with some initial params\n * - Existing SharedTree leaves session\n * - Local server synchronizes connected clients\n *\n * Note that these objects should be JSON serializable for ease in debugging fuzz tests.\n * Future potential work:\n * - More fine-grained control of summarization processes\n */\nexport type Operation = TreeEdit | TreeJoin | TreeLeave | Synchronize;\n\nexport const done = Symbol('GeneratorDone');\n\n/**\n * TAdditionalState can be used to compose generators (see treatment of how fuzzed edit changes pass in\n * the tree to which they apply to sub-generators)\n */\nexport type AsyncGenerator<T, TAdditionalState> = (\n\tstate: FuzzTestState,\n\tadditionalState: TAdditionalState\n) => Promise<T | typeof done>;\n\nexport interface FuzzInsert {\n\tfuzzType: 'insert';\n\tbuild: Build;\n\tinsert: Insert;\n}\n\nexport type FuzzDelete = Detach & { fuzzType: 'delete' };\n\nexport interface FuzzMove {\n\tfuzzType: 'move';\n\tdetach: Detach;\n\tinsert: Insert;\n}\n\nexport type FuzzSetPayload = SetValue & { fuzzType: 'setPayload' };\n\nexport type FuzzChange = FuzzInsert | FuzzDelete | FuzzMove | FuzzSetPayload;\n\nexport interface TreeContext {\n\tview: TreeView;\n\tidGenerator: NodeIdGenerator;\n\tidList: NodeId[];\n\tdataStoreRuntime: IFluidDataStoreRuntime;\n}\n\nexport interface InsertGenerationConfig {\n\t/** default: 3 */\n\tmaxTreeSequenceSize?: number;\n\t/** The number of possible definitions. Default: 20. */\n\tdefinitionPoolSize?: number;\n}\n\nexport interface EditGenerationConfig {\n\t/** default: Number.POSITIVE_INFINITY (no max size) */\n\tmaxTreeSize?: number;\n\t/** default: 3 */\n\tinsertWeight?: number;\n\t/** default: 1 */\n\tdeleteWeight?: number;\n\t/** default: 1 */\n\tmoveWeight?: number;\n\t/** default: 1 */\n\tsetPayloadWeight?: number;\n\tinsertConfig?: InsertGenerationConfig;\n\t/** The number of possible trait labels. Default: 20. */\n\ttraitLabelPoolSize?: number;\n}\n\nexport interface JoinGenerationConfig {\n\t/**\n\t * Valid `summarizeHistory` values. Defaults to [false].\n\t */\n\tsummarizeHistory?: boolean[];\n\t/**\n\t * Valid `writeFormat` values. Defaults to 0.0.2 and 0.1.1.\n\t */\n\twriteFormat?: WriteFormat[];\n\t/** default: Number.POSITIVE_INFINITY (no max size) */\n\tmaximumPassiveCollaborators?: number;\n\t/** default: Number.POSITIVE_INFINITY (no max size) */\n\tmaximumActiveCollaborators?: number;\n}\n\nexport interface OperationGenerationConfig {\n\teditConfig?: EditGenerationConfig;\n\tjoinConfig?: JoinGenerationConfig;\n\t/** default: 10 */\n\teditWeight?: number;\n\t/** default: 1 */\n\tjoinWeight?: number;\n\t/** default: 1 */\n\tleaveWeight?: number;\n\t/** default: 1 */\n\tsynchronizeWeight?: number;\n}\n"]}
@@ -0,0 +1,180 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { Serializable } from '@fluidframework/datastore-definitions';
6
+ import { ClosedMap } from '../../Common';
7
+ import { IdCompressor, IdRangeDescriptor } from '../../id-compressor/IdCompressor';
8
+ import { NumericUuid } from '../../id-compressor/NumericUuid';
9
+ import { SessionId, StableId, SessionSpaceCompressedId } from '../../Identifiers';
10
+ import type { IdCreationRange, SerializedIdCompressorWithOngoingSession, SerializedIdCompressorWithNoSession } from '../../id-compressor';
11
+ /** Identifies a compressor in a network */
12
+ export declare enum Client {
13
+ Client1 = "Client1",
14
+ Client2 = "Client2",
15
+ Client3 = "Client3"
16
+ }
17
+ /** Identifies a compressor with respect to a specific operation */
18
+ export declare enum SemanticClient {
19
+ LocalClient = "LocalClient"
20
+ }
21
+ /** Identifies categories of compressors */
22
+ export declare enum MetaClient {
23
+ All = "All"
24
+ }
25
+ /**
26
+ * Used to attribute actions to clients in a distributed collaboration session.
27
+ * `Local` implies a local and unsequenced operation. All others imply sequenced operations.
28
+ */
29
+ export declare type OriginatingClient = Client | SemanticClient;
30
+ export declare const OriginatingClient: {
31
+ LocalClient: SemanticClient.LocalClient;
32
+ Client1: Client.Client1;
33
+ Client2: Client.Client2;
34
+ Client3: Client.Client3;
35
+ };
36
+ /** Identifies a compressor to which to send an operation */
37
+ export declare type DestinationClient = Client | MetaClient;
38
+ export declare const DestinationClient: {
39
+ All: MetaClient.All;
40
+ Client1: Client.Client1;
41
+ Client2: Client.Client2;
42
+ Client3: Client.Client3;
43
+ };
44
+ /**
45
+ * Creates a new compressor with the supplied cluster capacity.
46
+ */
47
+ export declare function createCompressor<T>(client: Client, clusterCapacity?: number, attributionInfo?: Serializable<T>): IdCompressor;
48
+ /**
49
+ * A closed map from NamedClient to T.
50
+ */
51
+ export declare type ClientMap<T> = ClosedMap<Client, T>;
52
+ /**
53
+ * An array of session ID strings corresponding to all non-local `Client` entries.
54
+ */
55
+ export declare const sessionIds: ClientMap<SessionId>;
56
+ /**
57
+ * An array of session uuids corresponding to all non-local `Client` entries.
58
+ */
59
+ export declare const sessionNumericUuids: ClientMap<NumericUuid>;
60
+ /** An immutable view of an `IdCompressor` */
61
+ export interface ReadonlyIdCompressor extends Omit<IdCompressor, 'generateCompressedId' | 'generateCompressedIdRange' | 'takeNextCreationRange' | 'finalizeCreationRange'> {
62
+ readonly clusterCapacity: number;
63
+ }
64
+ /** Information about a generated ID in a network to be validated by tests */
65
+ export interface TestIdData {
66
+ readonly id: SessionSpaceCompressedId;
67
+ readonly originatingClient: Client;
68
+ readonly sessionId: SessionId;
69
+ readonly sessionNumericUuid: NumericUuid;
70
+ readonly expectedOverride: string | undefined;
71
+ readonly isSequenced: boolean;
72
+ }
73
+ /**
74
+ * Simulates a network of ID compressors.
75
+ * Not suitable for performance testing.
76
+ */
77
+ export declare class IdCompressorTestNetwork {
78
+ readonly initialClusterSize: number;
79
+ private readonly onIdReceived?;
80
+ /** The compressors used in this network */
81
+ private readonly compressors;
82
+ /** The log of operations seen by the server so far. Append-only. */
83
+ private readonly serverOperations;
84
+ /** An index into `serverOperations` for each client which represents how many operations have been delivered to that client */
85
+ private readonly clientProgress;
86
+ /** All ids (local and sequenced) that a client has created or received, in order. */
87
+ private readonly idLogs;
88
+ /** All ids that a client has received from the server, in order. */
89
+ private readonly sequencedIdLogs;
90
+ constructor(initialClusterSize?: number, onIdReceived?: ((network: IdCompressorTestNetwork, clientTo: Client, ids: TestIdData[]) => void) | undefined);
91
+ /**
92
+ * Returns an immutable handle to a compressor in the network.
93
+ */
94
+ getCompressor(client: Client): ReadonlyIdCompressor;
95
+ /**
96
+ * Returns a mutable handle to a compressor in the network. Use of mutation methods will break the network invariants and
97
+ * should only be used if the network will not be used again.
98
+ */
99
+ getCompressorUnsafe(client: Client): IdCompressor;
100
+ /**
101
+ * Returns data for all IDs created and received by this client, including ack's of their own (i.e. their own IDs will appear twice)
102
+ */
103
+ getIdLog(client: Client): readonly TestIdData[];
104
+ /**
105
+ * Returns data for all IDs received by this client, including ack's of their own (i.e. their own IDs will appear twice)
106
+ */
107
+ getSequencedIdLog(client: Client): readonly TestIdData[];
108
+ /**
109
+ * Get all compressors for the given destination
110
+ */
111
+ getTargetCompressors(clientTo: DestinationClient): [Client, IdCompressor][];
112
+ /**
113
+ * Submit a capacity change operation to the network. It will not take effect immediately but will be processed in sequence order.
114
+ */
115
+ enqueueCapacityChange(newClusterCapacity: number): void;
116
+ private addNewId;
117
+ /**
118
+ * Allocates a new range of local IDs and enqueues them for future delivery via a `testIdDelivery` action.
119
+ * Calls to this method determine the total order of delivery, regardless of when `deliverOperations` is called.
120
+ */
121
+ allocateAndSendIds(client: Client, numIds: number): {
122
+ range: IdRangeDescriptor<SessionSpaceCompressedId>;
123
+ sessionId: SessionId;
124
+ };
125
+ /**
126
+ * Allocates a new range of local IDs and enqueues them for future delivery via a `testIdDelivery` action.
127
+ * Calls to this method determine the total order of delivery, regardless of when `deliverOperations` is called.
128
+ */
129
+ allocateAndSendIds(client: Client, numIds: number, overrides: {
130
+ [index: number]: string;
131
+ }): IdCreationRange;
132
+ /**
133
+ * Delivers all undelivered ID ranges and cluster capacity changes from the server to the target clients.
134
+ */
135
+ deliverOperations(clientTakingDelivery: DestinationClient): void;
136
+ /**
137
+ * Simulate a client disconnecting (and serializing), then reconnecting (and deserializing)
138
+ */
139
+ goOfflineThenResume(client: Client): void;
140
+ /**
141
+ * Ensure general validity of the network state. Useful for calling periodically or at the end of test scenarios.
142
+ */
143
+ assertNetworkState(): void;
144
+ }
145
+ /**
146
+ * Roundtrips the supplied compressor through serialization and deserialization.
147
+ */
148
+ export declare function roundtrip(compressor: ReadonlyIdCompressor, withSession: true): [SerializedIdCompressorWithOngoingSession, IdCompressor];
149
+ /**
150
+ * Roundtrips the supplied compressor through serialization and deserialization.
151
+ */
152
+ export declare function roundtrip(compressor: ReadonlyIdCompressor, withSession: false): [SerializedIdCompressorWithNoSession, IdCompressor];
153
+ /**
154
+ * Asserts that the supplied compressor correctly roundtrips through serialization/deserialization.
155
+ */
156
+ export declare function expectSerializes(compressor: ReadonlyIdCompressor): [SerializedIdCompressorWithNoSession, SerializedIdCompressorWithOngoingSession];
157
+ /**
158
+ * Merges 'from' into 'to', and returns 'to'.
159
+ */
160
+ export declare function mergeArrayMaps<K, V>(to: Pick<Map<K, V[]>, 'get' | 'set'>, from: ReadonlyMap<K, V[]>): Pick<Map<K, V[]>, 'get' | 'set'>;
161
+ /**
162
+ * Performs random actions on a test network.
163
+ * @param network the test network to test
164
+ * @param seed the seed for the random generation of the fuzz actions
165
+ * @param includeOverrides whether or not the fuzz actions will generate override UUIDs
166
+ * @param observerClient if provided, this client will never generate local ids
167
+ * @param synchronizeAtEnd if provided, all client will have all operations delivered from the server at the end of the test
168
+ * @param numUsages if provided, the number of operations to perform as part of this test. Defaults to 1000.
169
+ * @param validator if provided, this callback will be invoked periodically during the fuzz test.
170
+ */
171
+ export declare function performFuzzActions(network: IdCompressorTestNetwork, seed: number, includeOverrides: boolean, observerClient?: Client, synchronizeAtEnd?: boolean, numUsages?: number, maxClusterSize?: number, validator?: (network: IdCompressorTestNetwork) => void): void;
172
+ /**
173
+ * Converts the supplied integer to a uuid.
174
+ */
175
+ export declare function integerToStableId(num: number | bigint): StableId;
176
+ /**
177
+ * Pads the strings to a length of 32 with zeroes.
178
+ */
179
+ export declare function padToUuidLength(str: string): string;
180
+ //# sourceMappingURL=IdCompressorTestUtilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdCompressorTestUtilities.d.ts","sourceRoot":"","sources":["../../../src/test/utilities/IdCompressorTestUtilities.ts"],"names":[],"mappings":"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"}