@fluid-experimental/tree 0.58.2001 → 0.59.1000-61898

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 (815) hide show
  1. package/README.md +9 -9
  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 -100
  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 +59 -31
  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 +130 -85
  59. package/dist/LogViewer.d.ts.map +1 -1
  60. package/dist/LogViewer.js +110 -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 +90 -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 +400 -0
  90. package/dist/SharedTree.d.ts.map +1 -0
  91. package/dist/SharedTree.js +1074 -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 +53 -0
  114. package/dist/Transaction.d.ts.map +1 -0
  115. package/dist/Transaction.js +76 -0
  116. package/dist/Transaction.js.map +1 -0
  117. package/dist/TransactionInternal.d.ts +543 -0
  118. package/dist/TransactionInternal.d.ts.map +1 -0
  119. package/dist/TransactionInternal.js +622 -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/lib/ChangeCompression.d.ts +39 -0
  190. package/lib/ChangeCompression.d.ts.map +1 -0
  191. package/lib/ChangeCompression.js +111 -0
  192. package/lib/ChangeCompression.js.map +1 -0
  193. package/{dist/default-edits/PersistedTypes.d.ts → lib/ChangeTypes.d.ts} +58 -100
  194. package/lib/ChangeTypes.d.ts.map +1 -0
  195. package/lib/{default-edits/PersistedTypes.js → ChangeTypes.js} +15 -68
  196. package/lib/ChangeTypes.js.map +1 -0
  197. package/lib/Checkout.d.ts +39 -27
  198. package/lib/Checkout.d.ts.map +1 -1
  199. package/lib/Checkout.js +51 -23
  200. package/lib/Checkout.js.map +1 -1
  201. package/lib/Common.d.ts +175 -38
  202. package/lib/Common.d.ts.map +1 -1
  203. package/lib/Common.js +226 -101
  204. package/lib/Common.js.map +1 -1
  205. package/lib/EagerCheckout.d.ts +24 -0
  206. package/lib/EagerCheckout.d.ts.map +1 -0
  207. package/lib/{BasicCheckout.js → EagerCheckout.js} +7 -4
  208. package/lib/EagerCheckout.js.map +1 -0
  209. package/lib/EditLog.d.ts +77 -63
  210. package/lib/EditLog.d.ts.map +1 -1
  211. package/lib/EditLog.js +83 -47
  212. package/lib/EditLog.js.map +1 -1
  213. package/lib/EditUtilities.d.ts +168 -0
  214. package/lib/EditUtilities.d.ts.map +1 -0
  215. package/lib/EditUtilities.js +353 -0
  216. package/lib/EditUtilities.js.map +1 -0
  217. package/lib/EventTypes.d.ts +73 -0
  218. package/lib/EventTypes.d.ts.map +1 -0
  219. package/lib/EventTypes.js +75 -0
  220. package/lib/EventTypes.js.map +1 -0
  221. package/lib/Forest.d.ts +29 -7
  222. package/lib/Forest.d.ts.map +1 -1
  223. package/lib/Forest.js +58 -35
  224. package/lib/Forest.js.map +1 -1
  225. package/lib/HistoryEditFactory.d.ts +20 -0
  226. package/lib/HistoryEditFactory.d.ts.map +1 -0
  227. package/lib/{default-edits/HistoryEditFactory.js → HistoryEditFactory.js} +78 -39
  228. package/lib/HistoryEditFactory.js.map +1 -0
  229. package/lib/IdConversion.d.ts +12 -0
  230. package/lib/IdConversion.d.ts.map +1 -0
  231. package/lib/IdConversion.js +91 -0
  232. package/lib/IdConversion.js.map +1 -0
  233. package/lib/Identifiers.d.ts +89 -2
  234. package/lib/Identifiers.d.ts.map +1 -1
  235. package/lib/Identifiers.js +8 -1
  236. package/lib/Identifiers.js.map +1 -1
  237. package/lib/InitialTree.d.ts +2 -2
  238. package/lib/InitialTree.d.ts.map +1 -1
  239. package/lib/InitialTree.js +2 -1
  240. package/lib/InitialTree.js.map +1 -1
  241. package/lib/LazyCheckout.d.ts +28 -0
  242. package/lib/LazyCheckout.d.ts.map +1 -0
  243. package/lib/LazyCheckout.js +40 -0
  244. package/lib/LazyCheckout.js.map +1 -0
  245. package/lib/LogViewer.d.ts +130 -85
  246. package/lib/LogViewer.d.ts.map +1 -1
  247. package/lib/LogViewer.js +102 -77
  248. package/lib/LogViewer.js.map +1 -1
  249. package/lib/MergeHealth.d.ts +221 -0
  250. package/lib/MergeHealth.d.ts.map +1 -0
  251. package/lib/MergeHealth.js +258 -0
  252. package/lib/MergeHealth.js.map +1 -0
  253. package/lib/NodeIdUtilities.d.ts +90 -0
  254. package/lib/NodeIdUtilities.d.ts.map +1 -0
  255. package/lib/NodeIdUtilities.js +53 -0
  256. package/lib/NodeIdUtilities.js.map +1 -0
  257. package/lib/PayloadUtilities.d.ts +42 -0
  258. package/lib/PayloadUtilities.d.ts.map +1 -0
  259. package/lib/PayloadUtilities.js +110 -0
  260. package/lib/PayloadUtilities.js.map +1 -0
  261. package/lib/ReconciliationPath.d.ts +18 -13
  262. package/lib/ReconciliationPath.d.ts.map +1 -1
  263. package/lib/ReconciliationPath.js.map +1 -1
  264. package/lib/RevisionValueCache.d.ts +11 -2
  265. package/lib/RevisionValueCache.d.ts.map +1 -1
  266. package/lib/RevisionValueCache.js +2 -3
  267. package/lib/RevisionValueCache.js.map +1 -1
  268. package/lib/RevisionView.d.ts +83 -0
  269. package/lib/RevisionView.d.ts.map +1 -0
  270. package/lib/RevisionView.js +175 -0
  271. package/lib/RevisionView.js.map +1 -0
  272. package/lib/SerializationUtilities.d.ts +36 -0
  273. package/lib/SerializationUtilities.d.ts.map +1 -0
  274. package/lib/SerializationUtilities.js +95 -0
  275. package/lib/SerializationUtilities.js.map +1 -0
  276. package/lib/SharedTree.d.ts +400 -0
  277. package/lib/SharedTree.d.ts.map +1 -0
  278. package/lib/SharedTree.js +1069 -0
  279. package/lib/SharedTree.js.map +1 -0
  280. package/lib/SharedTreeEncoder.d.ts +102 -0
  281. package/lib/SharedTreeEncoder.d.ts.map +1 -0
  282. package/lib/SharedTreeEncoder.js +308 -0
  283. package/lib/SharedTreeEncoder.js.map +1 -0
  284. package/lib/StringInterner.d.ts +46 -0
  285. package/lib/StringInterner.d.ts.map +1 -0
  286. package/lib/StringInterner.js +57 -0
  287. package/lib/StringInterner.js.map +1 -0
  288. package/lib/Summary.d.ts +40 -0
  289. package/lib/Summary.d.ts.map +1 -0
  290. package/lib/Summary.js +19 -0
  291. package/lib/Summary.js.map +1 -0
  292. package/lib/SummaryBackCompatibility.d.ts +22 -22
  293. package/lib/SummaryBackCompatibility.d.ts.map +1 -1
  294. package/lib/SummaryBackCompatibility.js +29 -32
  295. package/lib/SummaryBackCompatibility.js.map +1 -1
  296. package/lib/SummaryTestUtilities.d.ts +31 -0
  297. package/lib/SummaryTestUtilities.d.ts.map +1 -0
  298. package/lib/SummaryTestUtilities.js +32 -0
  299. package/lib/SummaryTestUtilities.js.map +1 -0
  300. package/lib/Transaction.d.ts +53 -0
  301. package/lib/Transaction.d.ts.map +1 -0
  302. package/lib/Transaction.js +72 -0
  303. package/lib/Transaction.js.map +1 -0
  304. package/lib/TransactionInternal.d.ts +543 -0
  305. package/lib/TransactionInternal.d.ts.map +1 -0
  306. package/lib/TransactionInternal.js +618 -0
  307. package/lib/TransactionInternal.js.map +1 -0
  308. package/lib/TreeCompressor.d.ts +36 -0
  309. package/lib/TreeCompressor.d.ts.map +1 -0
  310. package/lib/TreeCompressor.js +133 -0
  311. package/lib/TreeCompressor.js.map +1 -0
  312. package/lib/TreeNodeHandle.d.ts +12 -18
  313. package/lib/TreeNodeHandle.d.ts.map +1 -1
  314. package/lib/TreeNodeHandle.js +14 -24
  315. package/lib/TreeNodeHandle.js.map +1 -1
  316. package/lib/TreeView.d.ts +166 -0
  317. package/lib/TreeView.d.ts.map +1 -0
  318. package/lib/TreeView.js +214 -0
  319. package/lib/TreeView.js.map +1 -0
  320. package/lib/TreeViewUtilities.d.ts +21 -0
  321. package/lib/TreeViewUtilities.d.ts.map +1 -0
  322. package/lib/TreeViewUtilities.js +71 -0
  323. package/lib/TreeViewUtilities.js.map +1 -0
  324. package/lib/{default-edits/UndoRedoHandler.d.ts → UndoRedoHandler.d.ts} +2 -2
  325. package/lib/UndoRedoHandler.d.ts.map +1 -0
  326. package/lib/{default-edits/UndoRedoHandler.js → UndoRedoHandler.js} +3 -7
  327. package/lib/UndoRedoHandler.js.map +1 -0
  328. package/lib/id-compressor/AppendOnlySortedMap.d.ts +127 -0
  329. package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -0
  330. package/lib/id-compressor/AppendOnlySortedMap.js +278 -0
  331. package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -0
  332. package/lib/id-compressor/IdCompressor.d.ts +389 -0
  333. package/lib/id-compressor/IdCompressor.d.ts.map +1 -0
  334. package/lib/id-compressor/IdCompressor.js +1343 -0
  335. package/lib/id-compressor/IdCompressor.js.map +1 -0
  336. package/lib/id-compressor/IdRange.d.ts +11 -0
  337. package/lib/id-compressor/IdRange.d.ts.map +1 -0
  338. package/lib/id-compressor/IdRange.js +25 -0
  339. package/lib/id-compressor/IdRange.js.map +1 -0
  340. package/lib/id-compressor/NumericUuid.d.ts +63 -0
  341. package/lib/id-compressor/NumericUuid.d.ts.map +1 -0
  342. package/lib/id-compressor/NumericUuid.js +365 -0
  343. package/lib/id-compressor/NumericUuid.js.map +1 -0
  344. package/lib/id-compressor/index.d.ts +12 -0
  345. package/lib/id-compressor/index.d.ts.map +1 -0
  346. package/lib/id-compressor/index.js +12 -0
  347. package/lib/id-compressor/index.js.map +1 -0
  348. package/lib/id-compressor/persisted-types/0.0.1.d.ts +156 -0
  349. package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -0
  350. package/lib/{test/Snapshot.tests.d.ts → id-compressor/persisted-types/0.0.1.js} +1 -1
  351. package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -0
  352. package/lib/id-compressor/persisted-types/index.d.ts +6 -0
  353. package/lib/id-compressor/persisted-types/index.d.ts.map +1 -0
  354. package/lib/id-compressor/persisted-types/index.js +6 -0
  355. package/lib/id-compressor/persisted-types/index.js.map +1 -0
  356. package/lib/index.d.ts +29 -9
  357. package/lib/index.d.ts.map +1 -1
  358. package/lib/index.js +23 -6
  359. package/lib/index.js.map +1 -1
  360. package/lib/persisted-types/0.0.2.d.ts +385 -0
  361. package/lib/persisted-types/0.0.2.d.ts.map +1 -0
  362. package/lib/persisted-types/0.0.2.js +110 -0
  363. package/lib/persisted-types/0.0.2.js.map +1 -0
  364. package/lib/persisted-types/0.1.1.d.ts +314 -0
  365. package/lib/persisted-types/0.1.1.d.ts.map +1 -0
  366. package/lib/persisted-types/0.1.1.js +150 -0
  367. package/lib/persisted-types/0.1.1.js.map +1 -0
  368. package/lib/persisted-types/index.d.ts +7 -0
  369. package/lib/persisted-types/index.d.ts.map +1 -0
  370. package/lib/persisted-types/index.js +8 -0
  371. package/lib/persisted-types/index.js.map +1 -0
  372. package/lib/test/AppendOnlySortedMap.tests.d.ts +6 -0
  373. package/lib/test/AppendOnlySortedMap.tests.d.ts.map +1 -0
  374. package/lib/test/AppendOnlySortedMap.tests.js +169 -0
  375. package/lib/test/AppendOnlySortedMap.tests.js.map +1 -0
  376. package/lib/test/{SnapshotUtilities.tests.d.ts → ChangeCompression.tests.d.ts} +1 -1
  377. package/lib/test/ChangeCompression.tests.d.ts.map +1 -0
  378. package/lib/test/ChangeCompression.tests.js +145 -0
  379. package/lib/test/ChangeCompression.tests.js.map +1 -0
  380. package/lib/test/Checkout.tests.d.ts +2 -3
  381. package/lib/test/Checkout.tests.d.ts.map +1 -1
  382. package/lib/test/Checkout.tests.js +126 -69
  383. package/lib/test/Checkout.tests.js.map +1 -1
  384. package/lib/test/Common.tests.js +60 -2
  385. package/lib/test/Common.tests.js.map +1 -1
  386. package/lib/test/{BasicCheckout.tests.d.ts → EagerCheckout.tests.d.ts} +1 -1
  387. package/lib/test/EagerCheckout.tests.d.ts.map +1 -0
  388. package/lib/test/EagerCheckout.tests.js +20 -0
  389. package/lib/test/EagerCheckout.tests.js.map +1 -0
  390. package/lib/test/Edit.tests.js +22 -14
  391. package/lib/test/Edit.tests.js.map +1 -1
  392. package/lib/test/{Anchors.glassBox.tests.d.ts → EditLog.perf.tests.d.ts} +1 -1
  393. package/lib/test/EditLog.perf.tests.d.ts.map +1 -0
  394. package/lib/test/EditLog.perf.tests.js +30 -0
  395. package/lib/test/EditLog.perf.tests.js.map +1 -0
  396. package/lib/test/EditLog.tests.js +10 -6
  397. package/lib/test/EditLog.tests.js.map +1 -1
  398. package/lib/test/EditUtilities.tests.d.ts +6 -0
  399. package/lib/test/EditUtilities.tests.d.ts.map +1 -0
  400. package/lib/test/EditUtilities.tests.js +503 -0
  401. package/lib/test/EditUtilities.tests.js.map +1 -0
  402. package/lib/test/Forest.perf.tests.d.ts +6 -0
  403. package/lib/test/Forest.perf.tests.d.ts.map +1 -0
  404. package/lib/test/Forest.perf.tests.js +133 -0
  405. package/lib/test/Forest.perf.tests.js.map +1 -0
  406. package/lib/test/Forest.tests.js +54 -27
  407. package/lib/test/Forest.tests.js.map +1 -1
  408. package/lib/test/GenericTransaction.tests.js +12 -3
  409. package/lib/test/GenericTransaction.tests.js.map +1 -1
  410. package/lib/test/HistoryEditFactory.tests.d.ts +6 -0
  411. package/lib/test/HistoryEditFactory.tests.d.ts.map +1 -0
  412. package/lib/test/HistoryEditFactory.tests.js +90 -0
  413. package/lib/test/HistoryEditFactory.tests.js.map +1 -0
  414. package/lib/test/IdCompressor.perf.tests.d.ts +6 -0
  415. package/lib/test/IdCompressor.perf.tests.d.ts.map +1 -0
  416. package/lib/test/IdCompressor.perf.tests.js +304 -0
  417. package/lib/test/IdCompressor.perf.tests.js.map +1 -0
  418. package/lib/test/IdCompressor.tests.d.ts +6 -0
  419. package/lib/test/IdCompressor.tests.d.ts.map +1 -0
  420. package/lib/test/IdCompressor.tests.js +1075 -0
  421. package/lib/test/IdCompressor.tests.js.map +1 -0
  422. package/lib/test/IdConversion.tests.d.ts +6 -0
  423. package/lib/test/IdConversion.tests.d.ts.map +1 -0
  424. package/lib/test/IdConversion.tests.js +36 -0
  425. package/lib/test/IdConversion.tests.js.map +1 -0
  426. package/lib/test/LazyCheckout.tests.d.ts +6 -0
  427. package/lib/test/LazyCheckout.tests.d.ts.map +1 -0
  428. package/lib/test/LazyCheckout.tests.js +22 -0
  429. package/lib/test/LazyCheckout.tests.js.map +1 -0
  430. package/lib/test/LogViewer.tests.js +269 -187
  431. package/lib/test/LogViewer.tests.js.map +1 -1
  432. package/lib/test/{SharedTreeWithAnchors.tests.d.ts → MergeHealthTelemetryHeartbeat.tests.d.ts} +1 -1
  433. package/lib/test/MergeHealthTelemetryHeartbeat.tests.d.ts.map +1 -0
  434. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +342 -0
  435. package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -0
  436. package/lib/test/NumericUuid.perf.tests.d.ts +6 -0
  437. package/lib/test/NumericUuid.perf.tests.d.ts.map +1 -0
  438. package/lib/test/NumericUuid.perf.tests.js +68 -0
  439. package/lib/test/NumericUuid.perf.tests.js.map +1 -0
  440. package/lib/test/NumericUuid.tests.d.ts +6 -0
  441. package/lib/test/NumericUuid.tests.d.ts.map +1 -0
  442. package/lib/test/NumericUuid.tests.js +191 -0
  443. package/lib/test/NumericUuid.tests.js.map +1 -0
  444. package/lib/test/RevisionView.tests.d.ts +6 -0
  445. package/lib/test/RevisionView.tests.d.ts.map +1 -0
  446. package/lib/test/RevisionView.tests.js +133 -0
  447. package/lib/test/RevisionView.tests.js.map +1 -0
  448. package/lib/test/SharedTree.perf.tests.d.ts +6 -0
  449. package/lib/test/SharedTree.perf.tests.d.ts.map +1 -0
  450. package/lib/test/SharedTree.perf.tests.js +39 -0
  451. package/lib/test/SharedTree.perf.tests.js.map +1 -0
  452. package/lib/test/SharedTree.tests.js +15 -3
  453. package/lib/test/SharedTree.tests.js.map +1 -1
  454. package/lib/test/StringInterner.tests.d.ts +6 -0
  455. package/lib/test/StringInterner.tests.d.ts.map +1 -0
  456. package/lib/test/StringInterner.tests.js +71 -0
  457. package/lib/test/StringInterner.tests.js.map +1 -0
  458. package/lib/test/Summary.tests.d.ts +8 -0
  459. package/lib/test/Summary.tests.d.ts.map +1 -0
  460. package/lib/test/Summary.tests.js +407 -0
  461. package/lib/test/Summary.tests.js.map +1 -0
  462. package/lib/test/Transaction.tests.js +76 -330
  463. package/lib/test/Transaction.tests.js.map +1 -1
  464. package/lib/test/TransactionInternal.tests.d.ts +6 -0
  465. package/lib/test/TransactionInternal.tests.d.ts.map +1 -0
  466. package/lib/test/TransactionInternal.tests.js +568 -0
  467. package/lib/test/TransactionInternal.tests.js.map +1 -0
  468. package/lib/test/TreeCompression.tests.d.ts +6 -0
  469. package/lib/test/TreeCompression.tests.d.ts.map +1 -0
  470. package/lib/test/TreeCompression.tests.js +292 -0
  471. package/lib/test/TreeCompression.tests.js.map +1 -0
  472. package/lib/test/TreeView.tests.d.ts +6 -0
  473. package/lib/test/TreeView.tests.d.ts.map +1 -0
  474. package/lib/test/TreeView.tests.js +176 -0
  475. package/lib/test/TreeView.tests.js.map +1 -0
  476. package/lib/test/UndoRedoHandler.tests.js +2 -2
  477. package/lib/test/UndoRedoHandler.tests.js.map +1 -1
  478. package/lib/test/Virtualization.tests.js +147 -62
  479. package/lib/test/Virtualization.tests.js.map +1 -1
  480. package/lib/test/fuzz/Generators.d.ts +19 -0
  481. package/lib/test/fuzz/Generators.d.ts.map +1 -0
  482. package/lib/test/fuzz/Generators.js +420 -0
  483. package/lib/test/fuzz/Generators.js.map +1 -0
  484. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +20 -0
  485. package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -0
  486. package/lib/test/fuzz/SharedTreeFuzzTests.js +217 -0
  487. package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -0
  488. package/lib/test/fuzz/Types.d.ts +133 -0
  489. package/lib/test/fuzz/Types.d.ts.map +1 -0
  490. package/lib/test/{GenericTransactionWithAnchors.tests.d.ts → fuzz/Types.js} +2 -2
  491. package/lib/test/fuzz/Types.js.map +1 -0
  492. package/lib/test/utilities/IdCompressorTestUtilities.d.ts +180 -0
  493. package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -0
  494. package/lib/test/utilities/IdCompressorTestUtilities.js +528 -0
  495. package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -0
  496. package/lib/test/utilities/MockTransaction.d.ts +26 -7
  497. package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
  498. package/lib/test/utilities/MockTransaction.js +40 -11
  499. package/lib/test/utilities/MockTransaction.js.map +1 -1
  500. package/lib/test/utilities/PendingLocalStateTests.d.ts +12 -0
  501. package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -0
  502. package/lib/test/utilities/PendingLocalStateTests.js +105 -0
  503. package/lib/test/utilities/PendingLocalStateTests.js.map +1 -0
  504. package/lib/test/utilities/SharedTreeTests.d.ts +3 -4
  505. package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
  506. package/lib/test/utilities/SharedTreeTests.js +696 -439
  507. package/lib/test/utilities/SharedTreeTests.js.map +1 -1
  508. package/lib/test/utilities/SharedTreeVersioningTests.d.ts +11 -0
  509. package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -0
  510. package/lib/test/utilities/SharedTreeVersioningTests.js +370 -0
  511. package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -0
  512. package/lib/test/utilities/SummaryLoadPerfTests.d.ts +10 -0
  513. package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -0
  514. package/lib/test/utilities/SummaryLoadPerfTests.js +102 -0
  515. package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -0
  516. package/lib/test/utilities/SummarySizeTests.d.ts +11 -0
  517. package/lib/test/utilities/SummarySizeTests.d.ts.map +1 -0
  518. package/lib/test/utilities/SummarySizeTests.js +158 -0
  519. package/lib/test/utilities/SummarySizeTests.js.map +1 -0
  520. package/lib/test/utilities/TestCommon.d.ts +9 -0
  521. package/lib/test/utilities/TestCommon.d.ts.map +1 -0
  522. package/lib/test/utilities/TestCommon.js +13 -0
  523. package/lib/test/utilities/TestCommon.js.map +1 -0
  524. package/lib/test/utilities/TestNode.d.ts +140 -0
  525. package/lib/test/utilities/TestNode.d.ts.map +1 -0
  526. package/lib/test/utilities/TestNode.js +292 -0
  527. package/lib/test/utilities/TestNode.js.map +1 -0
  528. package/lib/test/utilities/TestUtilities.d.ts +84 -70
  529. package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
  530. package/lib/test/utilities/TestUtilities.js +218 -143
  531. package/lib/test/utilities/TestUtilities.js.map +1 -1
  532. package/lib/test/utilities/UndoRedoTests.d.ts +4 -5
  533. package/lib/test/utilities/UndoRedoTests.d.ts.map +1 -1
  534. package/lib/test/utilities/UndoRedoTests.js +138 -149
  535. package/lib/test/utilities/UndoRedoTests.js.map +1 -1
  536. package/package.json +22 -17
  537. package/src/ChangeCompression.ts +159 -0
  538. package/src/{default-edits/PersistedTypes.ts → ChangeTypes.ts} +62 -120
  539. package/src/Checkout.ts +81 -52
  540. package/src/Common.ts +317 -117
  541. package/src/EagerCheckout.ts +38 -0
  542. package/src/EditLog.ts +153 -100
  543. package/src/EditUtilities.ts +559 -0
  544. package/src/EventTypes.ts +74 -0
  545. package/src/Forest.ts +81 -73
  546. package/src/{default-edits/HistoryEditFactory.ts → HistoryEditFactory.ts} +103 -53
  547. package/src/IdConversion.ts +125 -0
  548. package/src/Identifiers.ts +101 -1
  549. package/src/InitialTree.ts +5 -4
  550. package/src/LazyCheckout.ts +51 -0
  551. package/src/LogViewer.ts +242 -166
  552. package/src/MergeHealth.ts +447 -0
  553. package/src/NodeIdUtilities.ts +141 -0
  554. package/src/PayloadUtilities.ts +124 -0
  555. package/src/ReconciliationPath.ts +18 -13
  556. package/src/RevisionValueCache.ts +14 -5
  557. package/src/RevisionView.ts +252 -0
  558. package/src/SerializationUtilities.ts +130 -0
  559. package/src/SharedTree.ts +1458 -0
  560. package/src/SharedTreeEncoder.ts +493 -0
  561. package/src/StringInterner.ts +72 -0
  562. package/src/Summary.ts +48 -0
  563. package/src/SummaryBackCompatibility.ts +47 -57
  564. package/src/SummaryTestUtilities.ts +54 -0
  565. package/src/Transaction.ts +94 -0
  566. package/src/TransactionInternal.ts +1088 -0
  567. package/src/TreeCompressor.ts +213 -0
  568. package/src/TreeNodeHandle.ts +19 -32
  569. package/src/TreeView.ts +322 -0
  570. package/src/TreeViewUtilities.ts +77 -0
  571. package/src/{default-edits/UndoRedoHandler.ts → UndoRedoHandler.ts} +8 -13
  572. package/src/id-compressor/AppendOnlySortedMap.ts +325 -0
  573. package/src/id-compressor/IdCompressor.md +3 -0
  574. package/src/id-compressor/IdCompressor.ts +1848 -0
  575. package/src/id-compressor/IdRange.ts +33 -0
  576. package/src/id-compressor/NumericUuid.ts +414 -0
  577. package/src/id-compressor/index.ts +13 -0
  578. package/src/id-compressor/persisted-types/0.0.1.ts +179 -0
  579. package/src/id-compressor/persisted-types/README.md +3 -0
  580. package/src/id-compressor/persisted-types/index.ts +6 -0
  581. package/src/index.ts +119 -59
  582. package/src/persisted-types/0.0.2.ts +442 -0
  583. package/src/persisted-types/0.1.1.ts +476 -0
  584. package/src/persisted-types/README.md +22 -0
  585. package/src/persisted-types/index.ts +9 -0
  586. package/.mocharc.js +0 -41
  587. package/api/tree.api.md +0 -729
  588. package/dist/BasicCheckout.d.ts +0 -23
  589. package/dist/BasicCheckout.d.ts.map +0 -1
  590. package/dist/BasicCheckout.js.map +0 -1
  591. package/dist/Snapshot.d.ts +0 -198
  592. package/dist/Snapshot.d.ts.map +0 -1
  593. package/dist/Snapshot.js +0 -267
  594. package/dist/Snapshot.js.map +0 -1
  595. package/dist/SnapshotUtilities.d.ts +0 -29
  596. package/dist/SnapshotUtilities.d.ts.map +0 -1
  597. package/dist/SnapshotUtilities.js +0 -73
  598. package/dist/SnapshotUtilities.js.map +0 -1
  599. package/dist/anchored-edits/AnchorResolution.d.ts +0 -144
  600. package/dist/anchored-edits/AnchorResolution.d.ts.map +0 -1
  601. package/dist/anchored-edits/AnchorResolution.js +0 -162
  602. package/dist/anchored-edits/AnchorResolution.js.map +0 -1
  603. package/dist/anchored-edits/Factory.d.ts +0 -56
  604. package/dist/anchored-edits/Factory.d.ts.map +0 -1
  605. package/dist/anchored-edits/Factory.js +0 -79
  606. package/dist/anchored-edits/Factory.js.map +0 -1
  607. package/dist/anchored-edits/PersistedTypes.d.ts +0 -245
  608. package/dist/anchored-edits/PersistedTypes.d.ts.map +0 -1
  609. package/dist/anchored-edits/PersistedTypes.js +0 -131
  610. package/dist/anchored-edits/PersistedTypes.js.map +0 -1
  611. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  612. package/dist/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  613. package/dist/anchored-edits/SharedTreeWithAnchors.js +0 -115
  614. package/dist/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  615. package/dist/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  616. package/dist/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  617. package/dist/anchored-edits/TransactionWithAnchors.js +0 -36
  618. package/dist/anchored-edits/TransactionWithAnchors.js.map +0 -1
  619. package/dist/anchored-edits/index.d.ts +0 -10
  620. package/dist/anchored-edits/index.d.ts.map +0 -1
  621. package/dist/anchored-edits/index.js +0 -34
  622. package/dist/anchored-edits/index.js.map +0 -1
  623. package/dist/default-edits/EditUtilities.d.ts +0 -57
  624. package/dist/default-edits/EditUtilities.d.ts.map +0 -1
  625. package/dist/default-edits/EditUtilities.js +0 -192
  626. package/dist/default-edits/EditUtilities.js.map +0 -1
  627. package/dist/default-edits/Factory.d.ts +0 -56
  628. package/dist/default-edits/Factory.d.ts.map +0 -1
  629. package/dist/default-edits/Factory.js +0 -79
  630. package/dist/default-edits/Factory.js.map +0 -1
  631. package/dist/default-edits/HistoryEditFactory.d.ts +0 -19
  632. package/dist/default-edits/HistoryEditFactory.d.ts.map +0 -1
  633. package/dist/default-edits/HistoryEditFactory.js +0 -187
  634. package/dist/default-edits/HistoryEditFactory.js.map +0 -1
  635. package/dist/default-edits/PersistedTypes.d.ts.map +0 -1
  636. package/dist/default-edits/PersistedTypes.js.map +0 -1
  637. package/dist/default-edits/SharedTree.d.ts +0 -111
  638. package/dist/default-edits/SharedTree.d.ts.map +0 -1
  639. package/dist/default-edits/SharedTree.js +0 -124
  640. package/dist/default-edits/SharedTree.js.map +0 -1
  641. package/dist/default-edits/Summary.d.ts +0 -15
  642. package/dist/default-edits/Summary.d.ts.map +0 -1
  643. package/dist/default-edits/Summary.js +0 -35
  644. package/dist/default-edits/Summary.js.map +0 -1
  645. package/dist/default-edits/Transaction.d.ts +0 -41
  646. package/dist/default-edits/Transaction.d.ts.map +0 -1
  647. package/dist/default-edits/Transaction.js +0 -225
  648. package/dist/default-edits/Transaction.js.map +0 -1
  649. package/dist/default-edits/UndoRedoHandler.d.ts.map +0 -1
  650. package/dist/default-edits/UndoRedoHandler.js.map +0 -1
  651. package/dist/default-edits/index.d.ts +0 -13
  652. package/dist/default-edits/index.d.ts.map +0 -1
  653. package/dist/default-edits/index.js +0 -41
  654. package/dist/default-edits/index.js.map +0 -1
  655. package/dist/generic/GenericEditUtilities.d.ts +0 -26
  656. package/dist/generic/GenericEditUtilities.d.ts.map +0 -1
  657. package/dist/generic/GenericEditUtilities.js +0 -45
  658. package/dist/generic/GenericEditUtilities.js.map +0 -1
  659. package/dist/generic/GenericSharedTree.d.ts +0 -221
  660. package/dist/generic/GenericSharedTree.d.ts.map +0 -1
  661. package/dist/generic/GenericSharedTree.js +0 -447
  662. package/dist/generic/GenericSharedTree.js.map +0 -1
  663. package/dist/generic/GenericTransaction.d.ts +0 -87
  664. package/dist/generic/GenericTransaction.d.ts.map +0 -1
  665. package/dist/generic/GenericTransaction.js +0 -144
  666. package/dist/generic/GenericTransaction.js.map +0 -1
  667. package/dist/generic/PersistedTypes.d.ts +0 -194
  668. package/dist/generic/PersistedTypes.d.ts.map +0 -1
  669. package/dist/generic/PersistedTypes.js +0 -42
  670. package/dist/generic/PersistedTypes.js.map +0 -1
  671. package/dist/generic/Summary.d.ts +0 -63
  672. package/dist/generic/Summary.d.ts.map +0 -1
  673. package/dist/generic/Summary.js +0 -64
  674. package/dist/generic/Summary.js.map +0 -1
  675. package/dist/generic/index.d.ts +0 -10
  676. package/dist/generic/index.d.ts.map +0 -1
  677. package/dist/generic/index.js +0 -26
  678. package/dist/generic/index.js.map +0 -1
  679. package/lib/BasicCheckout.d.ts +0 -23
  680. package/lib/BasicCheckout.d.ts.map +0 -1
  681. package/lib/BasicCheckout.js.map +0 -1
  682. package/lib/Snapshot.d.ts +0 -198
  683. package/lib/Snapshot.d.ts.map +0 -1
  684. package/lib/Snapshot.js +0 -263
  685. package/lib/Snapshot.js.map +0 -1
  686. package/lib/SnapshotUtilities.d.ts +0 -29
  687. package/lib/SnapshotUtilities.d.ts.map +0 -1
  688. package/lib/SnapshotUtilities.js +0 -67
  689. package/lib/SnapshotUtilities.js.map +0 -1
  690. package/lib/anchored-edits/AnchorResolution.d.ts +0 -144
  691. package/lib/anchored-edits/AnchorResolution.d.ts.map +0 -1
  692. package/lib/anchored-edits/AnchorResolution.js +0 -152
  693. package/lib/anchored-edits/AnchorResolution.js.map +0 -1
  694. package/lib/anchored-edits/Factory.d.ts +0 -56
  695. package/lib/anchored-edits/Factory.d.ts.map +0 -1
  696. package/lib/anchored-edits/Factory.js +0 -74
  697. package/lib/anchored-edits/Factory.js.map +0 -1
  698. package/lib/anchored-edits/PersistedTypes.d.ts +0 -245
  699. package/lib/anchored-edits/PersistedTypes.d.ts.map +0 -1
  700. package/lib/anchored-edits/PersistedTypes.js +0 -128
  701. package/lib/anchored-edits/PersistedTypes.js.map +0 -1
  702. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts +0 -120
  703. package/lib/anchored-edits/SharedTreeWithAnchors.d.ts.map +0 -1
  704. package/lib/anchored-edits/SharedTreeWithAnchors.js +0 -110
  705. package/lib/anchored-edits/SharedTreeWithAnchors.js.map +0 -1
  706. package/lib/anchored-edits/TransactionWithAnchors.d.ts +0 -28
  707. package/lib/anchored-edits/TransactionWithAnchors.d.ts.map +0 -1
  708. package/lib/anchored-edits/TransactionWithAnchors.js +0 -32
  709. package/lib/anchored-edits/TransactionWithAnchors.js.map +0 -1
  710. package/lib/anchored-edits/index.d.ts +0 -10
  711. package/lib/anchored-edits/index.d.ts.map +0 -1
  712. package/lib/anchored-edits/index.js +0 -11
  713. package/lib/anchored-edits/index.js.map +0 -1
  714. package/lib/default-edits/EditUtilities.d.ts +0 -57
  715. package/lib/default-edits/EditUtilities.d.ts.map +0 -1
  716. package/lib/default-edits/EditUtilities.js +0 -181
  717. package/lib/default-edits/EditUtilities.js.map +0 -1
  718. package/lib/default-edits/Factory.d.ts +0 -56
  719. package/lib/default-edits/Factory.d.ts.map +0 -1
  720. package/lib/default-edits/Factory.js +0 -74
  721. package/lib/default-edits/Factory.js.map +0 -1
  722. package/lib/default-edits/HistoryEditFactory.d.ts +0 -19
  723. package/lib/default-edits/HistoryEditFactory.d.ts.map +0 -1
  724. package/lib/default-edits/HistoryEditFactory.js.map +0 -1
  725. package/lib/default-edits/PersistedTypes.d.ts.map +0 -1
  726. package/lib/default-edits/PersistedTypes.js.map +0 -1
  727. package/lib/default-edits/SharedTree.d.ts +0 -111
  728. package/lib/default-edits/SharedTree.d.ts.map +0 -1
  729. package/lib/default-edits/SharedTree.js +0 -100
  730. package/lib/default-edits/SharedTree.js.map +0 -1
  731. package/lib/default-edits/Summary.d.ts +0 -15
  732. package/lib/default-edits/Summary.d.ts.map +0 -1
  733. package/lib/default-edits/Summary.js +0 -31
  734. package/lib/default-edits/Summary.js.map +0 -1
  735. package/lib/default-edits/Transaction.d.ts +0 -41
  736. package/lib/default-edits/Transaction.d.ts.map +0 -1
  737. package/lib/default-edits/Transaction.js +0 -221
  738. package/lib/default-edits/Transaction.js.map +0 -1
  739. package/lib/default-edits/UndoRedoHandler.d.ts.map +0 -1
  740. package/lib/default-edits/UndoRedoHandler.js.map +0 -1
  741. package/lib/default-edits/index.d.ts +0 -13
  742. package/lib/default-edits/index.d.ts.map +0 -1
  743. package/lib/default-edits/index.js +0 -14
  744. package/lib/default-edits/index.js.map +0 -1
  745. package/lib/generic/GenericEditUtilities.d.ts +0 -26
  746. package/lib/generic/GenericEditUtilities.d.ts.map +0 -1
  747. package/lib/generic/GenericEditUtilities.js +0 -38
  748. package/lib/generic/GenericEditUtilities.js.map +0 -1
  749. package/lib/generic/GenericSharedTree.d.ts +0 -221
  750. package/lib/generic/GenericSharedTree.d.ts.map +0 -1
  751. package/lib/generic/GenericSharedTree.js +0 -443
  752. package/lib/generic/GenericSharedTree.js.map +0 -1
  753. package/lib/generic/GenericTransaction.d.ts +0 -87
  754. package/lib/generic/GenericTransaction.d.ts.map +0 -1
  755. package/lib/generic/GenericTransaction.js +0 -140
  756. package/lib/generic/GenericTransaction.js.map +0 -1
  757. package/lib/generic/PersistedTypes.d.ts +0 -194
  758. package/lib/generic/PersistedTypes.d.ts.map +0 -1
  759. package/lib/generic/PersistedTypes.js +0 -39
  760. package/lib/generic/PersistedTypes.js.map +0 -1
  761. package/lib/generic/Summary.d.ts +0 -63
  762. package/lib/generic/Summary.d.ts.map +0 -1
  763. package/lib/generic/Summary.js +0 -58
  764. package/lib/generic/Summary.js.map +0 -1
  765. package/lib/generic/index.d.ts +0 -10
  766. package/lib/generic/index.d.ts.map +0 -1
  767. package/lib/generic/index.js +0 -11
  768. package/lib/generic/index.js.map +0 -1
  769. package/lib/test/Anchors.glassBox.tests.d.ts.map +0 -1
  770. package/lib/test/Anchors.glassBox.tests.js +0 -410
  771. package/lib/test/Anchors.glassBox.tests.js.map +0 -1
  772. package/lib/test/BasicCheckout.tests.d.ts.map +0 -1
  773. package/lib/test/BasicCheckout.tests.js +0 -8
  774. package/lib/test/BasicCheckout.tests.js.map +0 -1
  775. package/lib/test/GenericTransactionWithAnchors.tests.d.ts.map +0 -1
  776. package/lib/test/GenericTransactionWithAnchors.tests.js +0 -25
  777. package/lib/test/GenericTransactionWithAnchors.tests.js.map +0 -1
  778. package/lib/test/SharedTreeWithAnchors.tests.d.ts.map +0 -1
  779. package/lib/test/SharedTreeWithAnchors.tests.js +0 -420
  780. package/lib/test/SharedTreeWithAnchors.tests.js.map +0 -1
  781. package/lib/test/Snapshot.tests.d.ts.map +0 -1
  782. package/lib/test/Snapshot.tests.js +0 -96
  783. package/lib/test/Snapshot.tests.js.map +0 -1
  784. package/lib/test/SnapshotUtilities.tests.d.ts.map +0 -1
  785. package/lib/test/SnapshotUtilities.tests.js +0 -168
  786. package/lib/test/SnapshotUtilities.tests.js.map +0 -1
  787. package/lib/test/undoRedoStackManager.d.ts +0 -26
  788. package/lib/test/undoRedoStackManager.d.ts.map +0 -1
  789. package/lib/test/undoRedoStackManager.js +0 -176
  790. package/lib/test/undoRedoStackManager.js.map +0 -1
  791. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts +0 -13
  792. package/lib/test/utilities/SummaryFormatCompatibilityTests.d.ts.map +0 -1
  793. package/lib/test/utilities/SummaryFormatCompatibilityTests.js +0 -154
  794. package/lib/test/utilities/SummaryFormatCompatibilityTests.js.map +0 -1
  795. package/src/BasicCheckout.ts +0 -34
  796. package/src/Snapshot.ts +0 -363
  797. package/src/SnapshotUtilities.ts +0 -88
  798. package/src/anchored-edits/AnchorResolution.ts +0 -442
  799. package/src/anchored-edits/Factory.ts +0 -94
  800. package/src/anchored-edits/PersistedTypes.ts +0 -310
  801. package/src/anchored-edits/SharedTreeWithAnchors.ts +0 -200
  802. package/src/anchored-edits/TransactionWithAnchors.ts +0 -39
  803. package/src/anchored-edits/index.ts +0 -21
  804. package/src/default-edits/EditUtilities.ts +0 -220
  805. package/src/default-edits/Factory.ts +0 -94
  806. package/src/default-edits/SharedTree.ts +0 -174
  807. package/src/default-edits/Summary.ts +0 -44
  808. package/src/default-edits/Transaction.ts +0 -262
  809. package/src/default-edits/index.ts +0 -29
  810. package/src/generic/GenericEditUtilities.ts +0 -46
  811. package/src/generic/GenericSharedTree.ts +0 -593
  812. package/src/generic/GenericTransaction.ts +0 -194
  813. package/src/generic/PersistedTypes.ts +0 -221
  814. package/src/generic/Summary.ts +0 -113
  815. package/src/generic/index.ts +0 -41
@@ -0,0 +1,39 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { benchmark, BenchmarkType } from '@fluid-tools/benchmark';
6
+ import { assert } from '../Common';
7
+ import { runSummaryLoadPerfTests } from './utilities/SummaryLoadPerfTests';
8
+ import { createStableEdits, setUpTestSharedTree } from './utilities/TestUtilities';
9
+ describe('SharedTree Perf', () => {
10
+ let tree;
11
+ let containerRuntimeFactory;
12
+ for (const count of [1, 1000]) {
13
+ benchmark({
14
+ type: BenchmarkType.Measurement,
15
+ title: `get currentView with ${count} sequenced edit(s)`,
16
+ before: () => {
17
+ ({ tree, containerRuntimeFactory } = setUpTestSharedTree({ localMode: false }));
18
+ const edits = createStableEdits(count, tree);
19
+ for (let i = 0; i < count; i++) {
20
+ tree.applyEditInternal(edits[i].changes);
21
+ }
22
+ containerRuntimeFactory.processAllMessages();
23
+ const editLog = tree.edits;
24
+ assert(editLog.numberOfSequencedEdits === count);
25
+ assert(editLog.numberOfLocalEdits === 0);
26
+ },
27
+ benchmarkFn: () => {
28
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
29
+ tree.currentView;
30
+ },
31
+ after: () => {
32
+ tree = undefined;
33
+ containerRuntimeFactory = undefined;
34
+ },
35
+ });
36
+ }
37
+ runSummaryLoadPerfTests('Summary Load');
38
+ });
39
+ //# sourceMappingURL=SharedTree.perf.tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedTree.perf.tests.js","sourceRoot":"","sources":["../../src/test/SharedTree.perf.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEnF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAChC,IAAI,IAA4B,CAAC;IACjC,IAAI,uBAAgE,CAAC;IACrE,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,EAAE,IAAK,CAAC,EAAE;QAC/B,SAAS,CAAC;YACT,IAAI,EAAE,aAAa,CAAC,WAAW;YAC/B,KAAK,EAAE,wBAAwB,KAAK,oBAAoB;YACxD,MAAM,EAAE,GAAG,EAAE;gBACZ,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,mBAAmB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBAEhF,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC/B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;iBACzC;gBAED,uBAAuB,CAAC,kBAAkB,EAAE,CAAC;gBAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAgB,CAAC;gBACtC,MAAM,CAAC,OAAO,CAAC,sBAAsB,KAAK,KAAK,CAAC,CAAC;gBACjD,MAAM,CAAC,OAAO,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBACjB,oEAAoE;gBACpE,IAAK,CAAC,WAAW,CAAC;YACnB,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACX,IAAI,GAAG,SAAS,CAAC;gBACjB,uBAAuB,GAAG,SAAS,CAAC;YACrC,CAAC;SACD,CAAC,CAAC;KACH;IAED,uBAAuB,CAAC,cAAc,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { benchmark, BenchmarkType } from '@fluid-tools/benchmark';\nimport { MockContainerRuntimeFactory } from '@fluidframework/test-runtime-utils';\nimport { assert } from '../Common';\nimport { EditLog } from '../EditLog';\nimport { SharedTree } from '../SharedTree';\nimport { runSummaryLoadPerfTests } from './utilities/SummaryLoadPerfTests';\nimport { createStableEdits, setUpTestSharedTree } from './utilities/TestUtilities';\n\ndescribe('SharedTree Perf', () => {\n\tlet tree: SharedTree | undefined;\n\tlet containerRuntimeFactory: MockContainerRuntimeFactory | undefined;\n\tfor (const count of [1, 1_000]) {\n\t\tbenchmark({\n\t\t\ttype: BenchmarkType.Measurement,\n\t\t\ttitle: `get currentView with ${count} sequenced edit(s)`,\n\t\t\tbefore: () => {\n\t\t\t\t({ tree, containerRuntimeFactory } = setUpTestSharedTree({ localMode: false }));\n\n\t\t\t\tconst edits = createStableEdits(count, tree);\n\t\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\t\ttree.applyEditInternal(edits[i].changes);\n\t\t\t\t}\n\n\t\t\t\tcontainerRuntimeFactory.processAllMessages();\n\t\t\t\tconst editLog = tree.edits as EditLog;\n\t\t\t\tassert(editLog.numberOfSequencedEdits === count);\n\t\t\t\tassert(editLog.numberOfLocalEdits === 0);\n\t\t\t},\n\t\t\tbenchmarkFn: () => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\ttree!.currentView;\n\t\t\t},\n\t\t\tafter: () => {\n\t\t\t\ttree = undefined;\n\t\t\t\tcontainerRuntimeFactory = undefined;\n\t\t\t},\n\t\t});\n\t}\n\n\trunSummaryLoadPerfTests('Summary Load');\n});\n"]}
@@ -2,11 +2,23 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
+ import { WriteFormat } from '../persisted-types';
5
6
  import { setUpTestSharedTree, setUpLocalServerTestSharedTree } from './utilities/TestUtilities';
6
7
  import { runSharedTreeOperationsTests } from './utilities/SharedTreeTests';
7
- import { runSummaryTests } from './utilities/SummaryFormatCompatibilityTests';
8
+ import { runSummarySizeTests } from './utilities/SummarySizeTests';
9
+ import { runPendingLocalStateTests } from './utilities/PendingLocalStateTests';
10
+ import { runSharedTreeVersioningTests } from './utilities/SharedTreeVersioningTests';
11
+ import { runSummaryTests } from './Summary.tests';
12
+ import { runSharedTreeFuzzTests } from './fuzz/SharedTreeFuzzTests';
8
13
  describe('SharedTree', () => {
9
- runSharedTreeOperationsTests('Operations', setUpTestSharedTree);
10
- runSummaryTests('Summary', setUpTestSharedTree, setUpLocalServerTestSharedTree);
14
+ describe('Operations', () => {
15
+ runSharedTreeOperationsTests('using write format 0.0.2', WriteFormat.v0_0_2, setUpTestSharedTree);
16
+ runSharedTreeOperationsTests('using write format 0.1.1', WriteFormat.v0_1_1, setUpTestSharedTree);
17
+ });
18
+ runSummaryTests('Summaries');
19
+ runSummarySizeTests('Summary size', setUpLocalServerTestSharedTree);
20
+ runPendingLocalStateTests('Stashed ops', setUpLocalServerTestSharedTree);
21
+ runSharedTreeVersioningTests('Versioning', setUpTestSharedTree);
22
+ runSharedTreeFuzzTests('Fuzz tests with local server');
11
23
  });
12
24
  //# sourceMappingURL=SharedTree.tests.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SharedTree.tests.js","sourceRoot":"","sources":["../../src/test/SharedTree.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAE9E,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC3B,4BAA4B,CAAa,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAC5E,eAAe,CAAa,SAAS,EAAE,mBAAmB,EAAE,8BAA8B,CAAC,CAAC;AAC7F,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { SharedTree } from '../default-edits';\nimport { setUpTestSharedTree, setUpLocalServerTestSharedTree } from './utilities/TestUtilities';\nimport { runSharedTreeOperationsTests } from './utilities/SharedTreeTests';\nimport { runSummaryTests } from './utilities/SummaryFormatCompatibilityTests';\n\ndescribe('SharedTree', () => {\n\trunSharedTreeOperationsTests<SharedTree>('Operations', setUpTestSharedTree);\n\trunSummaryTests<SharedTree>('Summary', setUpTestSharedTree, setUpLocalServerTestSharedTree);\n});\n"]}
1
+ {"version":3,"file":"SharedTree.tests.js","sourceRoot":"","sources":["../../src/test/SharedTree.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC3B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC3B,4BAA4B,CAAC,0BAA0B,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAClG,4BAA4B,CAAC,0BAA0B,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IACH,eAAe,CAAC,WAAW,CAAC,CAAC;IAC7B,mBAAmB,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;IACpE,yBAAyB,CAAC,aAAa,EAAE,8BAA8B,CAAC,CAAC;IACzE,4BAA4B,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAChE,sBAAsB,CAAC,8BAA8B,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { WriteFormat } from '../persisted-types';\nimport { setUpTestSharedTree, setUpLocalServerTestSharedTree } from './utilities/TestUtilities';\nimport { runSharedTreeOperationsTests } from './utilities/SharedTreeTests';\nimport { runSummarySizeTests } from './utilities/SummarySizeTests';\nimport { runPendingLocalStateTests } from './utilities/PendingLocalStateTests';\nimport { runSharedTreeVersioningTests } from './utilities/SharedTreeVersioningTests';\nimport { runSummaryTests } from './Summary.tests';\nimport { runSharedTreeFuzzTests } from './fuzz/SharedTreeFuzzTests';\n\ndescribe('SharedTree', () => {\n\tdescribe('Operations', () => {\n\t\trunSharedTreeOperationsTests('using write format 0.0.2', WriteFormat.v0_0_2, setUpTestSharedTree);\n\t\trunSharedTreeOperationsTests('using write format 0.1.1', WriteFormat.v0_1_1, setUpTestSharedTree);\n\t});\n\trunSummaryTests('Summaries');\n\trunSummarySizeTests('Summary size', setUpLocalServerTestSharedTree);\n\trunPendingLocalStateTests('Stashed ops', setUpLocalServerTestSharedTree);\n\trunSharedTreeVersioningTests('Versioning', setUpTestSharedTree);\n\trunSharedTreeFuzzTests('Fuzz tests with local server');\n});\n"]}
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=StringInterner.tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StringInterner.tests.d.ts","sourceRoot":"","sources":["../../src/test/StringInterner.tests.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,71 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { expect } from 'chai';
6
+ import { MutableStringInterner } from '../StringInterner';
7
+ describe('MutableStringInterner', () => {
8
+ const inputStrings = ['test', 'test2', 'test3', 'test4'];
9
+ it('can associate a string with an intern ID', () => {
10
+ const interner = new MutableStringInterner();
11
+ expect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);
12
+ expect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);
13
+ expect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);
14
+ });
15
+ it('can handle empty strings', () => {
16
+ const interner = new MutableStringInterner();
17
+ expect(interner.getOrCreateInternedId('')).to.equal(0);
18
+ });
19
+ it('getInternedId returns undefined for un-created ids', () => {
20
+ const interner = new MutableStringInterner();
21
+ expect(interner.getInternedId(inputStrings[0])).to.equal(undefined);
22
+ expect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);
23
+ expect(interner.getInternedId(inputStrings[0])).to.equal(0);
24
+ expect(interner.getInternedId(inputStrings[1])).to.equal(undefined);
25
+ });
26
+ it('can retrieve the intern ID associated with a string', () => {
27
+ const interner = new MutableStringInterner();
28
+ expect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);
29
+ expect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);
30
+ expect(interner.getInternedId(inputStrings[0])).to.equal(0);
31
+ expect(interner.getInternedId(inputStrings[1])).to.equal(1);
32
+ expect(interner.getString(0)).to.equal(inputStrings[0]);
33
+ expect(interner.getString(1)).to.equal(inputStrings[1]);
34
+ });
35
+ it("throws an error when trying to retrieve a string that hasn't been encountered", () => {
36
+ const interner = new MutableStringInterner();
37
+ expect(() => interner.getString(0)).to.throw('No string associated with 0.');
38
+ });
39
+ it('can return a serializable representation of its state', () => {
40
+ const interner = new MutableStringInterner();
41
+ for (const value of inputStrings) {
42
+ interner.getOrCreateInternedId(value);
43
+ }
44
+ expect(interner.getSerializable()).to.deep.equal(inputStrings);
45
+ });
46
+ it('can be initialized with a list of input strings', () => {
47
+ const interner = new MutableStringInterner(inputStrings);
48
+ expect(interner.getOrCreateInternedId(inputStrings[3])).to.equal(3);
49
+ expect(interner.getOrCreateInternedId(inputStrings[2])).to.equal(2);
50
+ expect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);
51
+ expect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);
52
+ });
53
+ it('can be initialized with a list of input strings that include duplicate IDs', () => {
54
+ const interner = new MutableStringInterner([...inputStrings, ...inputStrings]);
55
+ expect(interner.getOrCreateInternedId(inputStrings[3])).to.equal(3);
56
+ expect(interner.getOrCreateInternedId(inputStrings[2])).to.equal(2);
57
+ expect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);
58
+ expect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);
59
+ });
60
+ it("doesn't change a string's intern ID when retrieving it multiple times", () => {
61
+ const interner = new MutableStringInterner();
62
+ expect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);
63
+ expect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);
64
+ expect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);
65
+ expect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);
66
+ expect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);
67
+ expect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);
68
+ expect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);
69
+ });
70
+ });
71
+ //# sourceMappingURL=StringInterner.tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StringInterner.tests.js","sourceRoot":"","sources":["../../src/test/StringInterner.tests.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { expect } from 'chai';\nimport { MutableStringInterner } from '../StringInterner';\n\ndescribe('MutableStringInterner', () => {\n\tconst inputStrings = ['test', 'test2', 'test3', 'test4'];\n\n\tit('can associate a string with an intern ID', () => {\n\t\tconst interner = new MutableStringInterner();\n\n\t\texpect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);\n\t});\n\n\tit('can handle empty strings', () => {\n\t\tconst interner = new MutableStringInterner();\n\n\t\texpect(interner.getOrCreateInternedId('')).to.equal(0);\n\t});\n\n\tit('getInternedId returns undefined for un-created ids', () => {\n\t\tconst interner = new MutableStringInterner();\n\n\t\texpect(interner.getInternedId(inputStrings[0])).to.equal(undefined);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);\n\t\texpect(interner.getInternedId(inputStrings[0])).to.equal(0);\n\t\texpect(interner.getInternedId(inputStrings[1])).to.equal(undefined);\n\t});\n\n\tit('can retrieve the intern ID associated with a string', () => {\n\t\tconst interner = new MutableStringInterner();\n\n\t\texpect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);\n\t\texpect(interner.getInternedId(inputStrings[0])).to.equal(0);\n\t\texpect(interner.getInternedId(inputStrings[1])).to.equal(1);\n\n\t\texpect(interner.getString(0)).to.equal(inputStrings[0]);\n\t\texpect(interner.getString(1)).to.equal(inputStrings[1]);\n\t});\n\n\tit(\"throws an error when trying to retrieve a string that hasn't been encountered\", () => {\n\t\tconst interner = new MutableStringInterner();\n\n\t\texpect(() => interner.getString(0)).to.throw('No string associated with 0.');\n\t});\n\n\tit('can return a serializable representation of its state', () => {\n\t\tconst interner = new MutableStringInterner();\n\n\t\tfor (const value of inputStrings) {\n\t\t\tinterner.getOrCreateInternedId(value);\n\t\t}\n\n\t\texpect(interner.getSerializable()).to.deep.equal(inputStrings);\n\t});\n\n\tit('can be initialized with a list of input strings', () => {\n\t\tconst interner = new MutableStringInterner(inputStrings);\n\n\t\texpect(interner.getOrCreateInternedId(inputStrings[3])).to.equal(3);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[2])).to.equal(2);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);\n\t});\n\n\tit('can be initialized with a list of input strings that include duplicate IDs', () => {\n\t\tconst interner = new MutableStringInterner([...inputStrings, ...inputStrings]);\n\n\t\texpect(interner.getOrCreateInternedId(inputStrings[3])).to.equal(3);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[2])).to.equal(2);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);\n\t});\n\n\tit(\"doesn't change a string's intern ID when retrieving it multiple times\", () => {\n\t\tconst interner = new MutableStringInterner();\n\n\t\texpect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[0])).to.equal(0);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);\n\t\texpect(interner.getOrCreateInternedId(inputStrings[1])).to.equal(1);\n\t});\n});\n"]}
@@ -0,0 +1,8 @@
1
+ import { WriteFormat } from '../persisted-types';
2
+ import { SharedTree } from '../SharedTree';
3
+ /** Applies a smattering of interesting edits to the given shared tree in an attempt to cover a variety of use cases */
4
+ export declare function applyTestEdits(sharedTree: SharedTree): void;
5
+ export declare function createSummaryTestTree(writeFormat: WriteFormat, summarizeHistory: boolean): Promise<SharedTree>;
6
+ export declare function runSummaryTests(title: string): void;
7
+ export declare function expectAssert(condition: unknown, message?: string): asserts condition;
8
+ //# sourceMappingURL=Summary.tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Summary.tests.d.ts","sourceRoot":"","sources":["../../src/test/Summary.tests.ts"],"names":[],"mappings":"AAcA,OAAO,EAKN,WAAW,EACX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAkB3C,wHAAwH;AACxH,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAsF3D;AAED,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAmCpH;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAwOnD;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAEpF"}
@@ -0,0 +1,407 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import * as fs from 'fs';
6
+ import { join } from 'path';
7
+ import { IsoBuffer } from '@fluidframework/common-utils';
8
+ import { expect } from 'chai';
9
+ import { v5 } from 'uuid';
10
+ import { Change, StablePlace, StableRange } from '../ChangeTypes';
11
+ import { assert } from '../Common';
12
+ import { areRevisionViewsSemanticallyEqual } from '../EditUtilities';
13
+ import { initialTree } from '../InitialTree';
14
+ import { editsPerChunk, reservedIdCount, WriteFormat, } from '../persisted-types';
15
+ import { getChangeNodeFromView } from '../SerializationUtilities';
16
+ import { deserialize, getSummaryStatistics } from '../SummaryBackCompatibility';
17
+ import { getUploadedEditChunkContents } from '../SummaryTestUtilities';
18
+ import { IdCompressor } from '../id-compressor';
19
+ import { convertEditIds } from '../IdConversion';
20
+ import { MutableStringInterner } from '../StringInterner';
21
+ import { sequencedIdNormalizer } from '../NodeIdUtilities';
22
+ import { expectDefined } from './utilities/TestCommon';
23
+ import { TestFluidSerializer } from './utilities/TestSerializer';
24
+ import { getIdNormalizerFromSharedTree, makeNodeIdContext, setUpLocalServerTestSharedTree, testDocumentsPathBase, } from './utilities/TestUtilities';
25
+ const directory = join(testDocumentsPathBase, 'summary-tests');
26
+ /** Applies a smattering of interesting edits to the given shared tree in an attempt to cover a variety of use cases */
27
+ export function applyTestEdits(sharedTree) {
28
+ const uuid = new DeterministicIdGenerator(sharedTree.getWriteFormat(), sharedTree);
29
+ function applyEdit(changes) {
30
+ const internalChanges = changes.map((c) => sharedTree.internalizeChange(c));
31
+ sharedTree.applyEditInternal({ id: uuid.getNextEditId(), changes: internalChanges });
32
+ }
33
+ /**
34
+ * Build a tree that looks like the following:
35
+ *
36
+ * ROOT
37
+ * | 'root'
38
+ * [root]
39
+ * 'left' / \ 'right'
40
+ * [A] [B, C, D]
41
+ * | 'leaf'
42
+ * [E('payload')]
43
+ */
44
+ const cDetachedId = 0;
45
+ const rootDetachedId = 1;
46
+ const aId = uuid.getNextNodeId();
47
+ const cId = uuid.getNextNodeId();
48
+ const dId = uuid.getNextNodeId();
49
+ applyEdit([
50
+ Change.build([
51
+ {
52
+ definition: 'C',
53
+ identifier: cId,
54
+ traits: {
55
+ leaf: [
56
+ {
57
+ definition: 'E',
58
+ identifier: uuid.getNextNodeId(),
59
+ payload: 'payload',
60
+ },
61
+ ],
62
+ },
63
+ },
64
+ ], cDetachedId),
65
+ Change.build([
66
+ {
67
+ definition: 'Root',
68
+ identifier: uuid.getNextNodeId(),
69
+ traits: {
70
+ left: [{ definition: 'A', identifier: aId }],
71
+ right: [
72
+ { definition: 'B', identifier: uuid.getNextNodeId() },
73
+ cDetachedId,
74
+ { definition: 'D', identifier: dId },
75
+ ],
76
+ },
77
+ },
78
+ ], rootDetachedId),
79
+ Change.insert(rootDetachedId, StablePlace.atStartOf({
80
+ label: 'root',
81
+ parent: sharedTree.convertToNodeId(initialTree.identifier),
82
+ })),
83
+ ]);
84
+ /**
85
+ * Edit the tree
86
+ *
87
+ * 1. Move C after A
88
+ * 2. Delete D
89
+ * 3.
90
+ * ...
91
+ * 102. Set the payload of A to _i_ for all _i_ in 0...100
92
+ */
93
+ applyEdit([...Change.move(StableRange.only(cId), StablePlace.after(aId))]);
94
+ applyEdit([Change.delete(StableRange.only(dId))]);
95
+ for (let i = 0; i < 100; i++) {
96
+ applyEdit([Change.setPayload(aId, i)]);
97
+ }
98
+ }
99
+ export async function createSummaryTestTree(writeFormat, summarizeHistory) {
100
+ const { tree, testObjectProvider } = await setUpLocalServerTestSharedTree({
101
+ writeFormat,
102
+ summarizeHistory,
103
+ uploadEditChunks: summarizeHistory,
104
+ });
105
+ if (writeFormat === WriteFormat.v0_1_1) {
106
+ const idCompressor = new IdCompressor('968bee41-bcf7-46d2-8035-6eb163b76c4c', reservedIdCount);
107
+ const interner = new MutableStringInterner([initialTree.definition]);
108
+ const context = makeNodeIdContext(idCompressor);
109
+ const normalizer = sequencedIdNormalizer(context);
110
+ const sharedTreeSummaryWithConstantSessionId = {
111
+ version: WriteFormat.v0_1_1,
112
+ currentTree: summarizeHistory
113
+ ? [
114
+ interner.getOrCreateInternedId(initialTree.definition),
115
+ normalizer.normalizeToOpSpace(context.convertToNodeId(initialTree.identifier)),
116
+ ]
117
+ : undefined,
118
+ editHistory: {
119
+ editIds: [],
120
+ editChunks: [],
121
+ },
122
+ idCompressor: idCompressor.serialize(true),
123
+ internedStrings: interner.getSerializable(),
124
+ };
125
+ tree.loadSummary(sharedTreeSummaryWithConstantSessionId);
126
+ }
127
+ applyTestEdits(tree);
128
+ await testObjectProvider.ensureSynchronized();
129
+ return tree;
130
+ }
131
+ export function runSummaryTests(title) {
132
+ describe(title, () => {
133
+ // Note: this test serializer doesn't handle blobs properly (it just uses JSON.stringify/JSON.parse).
134
+ const testSerializer = new TestFluidSerializer();
135
+ const { summaryFileWithHistory_0_0_2, summaryFileNoHistory_0_0_2, summaryFileEmptyTraits_0_0_2, summaryFileWithHistory_0_1_1, summaryFileNoHistory_0_1_1, summaryFileUpgrade_0_1_1, blobsFile, } = loadSummaryTestFiles();
136
+ // Note: Fluid setup gives stable `absolutePath`s for these blobs across sessions. If that were not the case,
137
+ // this test suite would need to build some kind of map from the blob info saved on disk to the `IFluidHandle`
138
+ // list returned by uploading these blobs.
139
+ const blobsParsed = JSON.parse(blobsFile);
140
+ const blobs = blobsParsed.map((blob) => IsoBuffer.from(JSON.stringify(blob.chunkContents), 'utf8'));
141
+ // Re-enable this test for an easy way to write the test summary files to disk
142
+ it.skip('save files to disk', async () => {
143
+ await makeSummaryTestFiles();
144
+ });
145
+ describe('0.0.2 write format', () => {
146
+ const setUp002Tree = async (options) => setUpLocalServerTestSharedTree(Object.assign({ writeFormat: WriteFormat.v0_0_2 }, options));
147
+ const setUp002SummaryTestTree = async (summarizeHistory) => createSummaryTestTree(WriteFormat.v0_0_2, summarizeHistory);
148
+ it('Normalizes a denormalized summary containing nodes with empty traits', async () => {
149
+ const { tree } = await setUp002Tree({});
150
+ tree.loadSerializedSummary(summaryFileEmptyTraits_0_0_2);
151
+ const { tree: expectedTree } = await setUp002Tree({});
152
+ expectedTree.loadSerializedSummary(summaryFileWithHistory_0_0_2);
153
+ expect(getChangeNodeFromView(tree.currentView)).deep.equals(getChangeNodeFromView(expectedTree.currentView));
154
+ });
155
+ it('writes 0.0.2 files without history', async () => {
156
+ const tree = await setUp002SummaryTestTree(false);
157
+ const summary = JSON.parse(tree.saveSerializedSummary());
158
+ const expectedSummary = JSON.parse(summaryFileNoHistory_0_0_2);
159
+ // The edit ID of the single "no history edit" is generated randomly. Replace it with the baseline edit for the sake of this test.
160
+ summary.sequencedEdits[0].id = expectedSummary.sequencedEdits[0].id;
161
+ expect(summary).to.deep.equal(expectedSummary);
162
+ });
163
+ it('writes 0.0.2 files with history', async () => {
164
+ const tree = await setUp002SummaryTestTree(true);
165
+ expect(JSON.parse(tree.saveSerializedSummary())).to.deep.equal(JSON.parse(summaryFileWithHistory_0_0_2));
166
+ });
167
+ describe('reading the same version', () => {
168
+ it('reads 0.0.2 files without history', async () => {
169
+ const { tree } = await setUp002Tree({});
170
+ tree.loadSerializedSummary(summaryFileNoHistory_0_0_2);
171
+ // Tree should have exactly one edit, as all "no history" summaries do.
172
+ expect(tree.edits.length).to.equal(1);
173
+ // Load a baseline tree's own summary with no history to compare with
174
+ const summaryNoHistory = (await setUp002SummaryTestTree(false)).saveSummary();
175
+ const { tree: expectedTree } = await setUp002Tree({ summarizeHistory: false });
176
+ expectedTree.loadSummary(summaryNoHistory);
177
+ await expectSharedTreesEqual(tree, expectedTree, false);
178
+ });
179
+ it('reads 0.0.2 files with history', async () => {
180
+ const { tree } = await setUp002Tree({});
181
+ tree.loadSerializedSummary(summaryFileWithHistory_0_0_2);
182
+ const expectedTree = await setUp002SummaryTestTree(true);
183
+ await expectSharedTreesEqual(tree, expectedTree);
184
+ });
185
+ });
186
+ describe('reading next version', () => {
187
+ it('reads 0.1.1', async () => {
188
+ const { tree } = await setUp002Tree({});
189
+ tree.loadSerializedSummary(summaryFileWithHistory_0_1_1);
190
+ // TODO: There may need to be a testObjectProvider synchronization here to upload
191
+ // blobs from this summary.
192
+ // We should also look at how this test asserts behavior w.r.t blobs.
193
+ const newSummary = JSON.parse(tree.saveSerializedSummary());
194
+ const expectedSummary = JSON.parse(summaryFileWithHistory_0_1_1);
195
+ expect(newSummary).to.deep.equal(expectedSummary);
196
+ });
197
+ });
198
+ it('gives correct SummaryStatistics', async () => {
199
+ const { tree } = await setUp002Tree({});
200
+ tree.loadSerializedSummary(summaryFileWithHistory_0_0_2);
201
+ const editCount = tree.edits.length;
202
+ const summary = deserialize(summaryFileWithHistory_0_0_2, testSerializer);
203
+ const telemetryInfo = getSummaryStatistics(summary);
204
+ const expectedTelemetryInfo = {
205
+ formatVersion: WriteFormat.v0_0_2,
206
+ historySize: editCount,
207
+ };
208
+ expect(telemetryInfo).to.deep.equals(expectedTelemetryInfo);
209
+ });
210
+ });
211
+ describe('0.1.1 write format', () => {
212
+ const setUp011Tree = async (options) => setUpLocalServerTestSharedTree(Object.assign({ writeFormat: WriteFormat.v0_1_1 }, options));
213
+ const setUp011SummaryTestTree = async (summarizeHistory) => createSummaryTestTree(WriteFormat.v0_1_1, summarizeHistory);
214
+ it('writes 0.1.1 files without history', async () => {
215
+ var _a;
216
+ const tree = await setUp011SummaryTestTree(false);
217
+ const summary = JSON.parse(tree.saveSerializedSummary());
218
+ const expectedSummary = JSON.parse(summaryFileNoHistory_0_1_1);
219
+ // The edit ID of the single "no history edit" is generated randomly. Replace it with the baseline edit for the sake of this test.
220
+ expectDefined(summary.editHistory).editIds[0] = expectDefined((_a = expectedSummary.editHistory) === null || _a === void 0 ? void 0 : _a.editIds[0]);
221
+ expect(summary).to.deep.equal(expectedSummary);
222
+ expect(await getUploadedEditChunkContents(tree)).to.deep.equal([]);
223
+ });
224
+ it('writes 0.1.1 files with history', async () => {
225
+ const tree = await setUp011SummaryTestTree(true);
226
+ expect(JSON.parse(tree.saveSerializedSummary())).to.deep.equal(JSON.parse(summaryFileWithHistory_0_1_1));
227
+ expect(await getUploadedEditChunkContents(tree)).to.deep.equal(blobsParsed);
228
+ });
229
+ describe('reading the same version', () => {
230
+ it('reads 0.1.1 files without history', async () => {
231
+ const { tree } = await setUp011Tree({ blobs });
232
+ tree.loadSerializedSummary(summaryFileNoHistory_0_1_1);
233
+ // Tree should have exactly one edit, as all "no history" summaries do.
234
+ expect(tree.edits.length).to.equal(1);
235
+ // Load a baseline tree's own summary with no history to compare with
236
+ const summaryNoHistory = (await setUp011SummaryTestTree(false)).saveSummary();
237
+ const { tree: expectedTree } = await setUp011Tree({ summarizeHistory: false });
238
+ expectedTree.loadSummary(summaryNoHistory);
239
+ await expectSharedTreesEqual(tree, expectedTree, false);
240
+ });
241
+ it('reads 0.1.1 files with history', async () => {
242
+ const { tree } = await setUp011Tree({ blobs });
243
+ tree.loadSerializedSummary(summaryFileWithHistory_0_1_1);
244
+ const expectedTree = await setUp011SummaryTestTree(false);
245
+ await expectSharedTreesEqual(tree, expectedTree);
246
+ });
247
+ });
248
+ describe('reading previous versions', () => {
249
+ it('reads 0.0.2', async () => {
250
+ const expectedTree = await setUp011SummaryTestTree(true);
251
+ const { tree } = await setUp011Tree({});
252
+ tree.loadSerializedSummary(summaryFileWithHistory_0_0_2);
253
+ await expectSharedTreesEqual(tree, expectedTree);
254
+ expect(JSON.parse(tree.saveSerializedSummary())).to.deep.equal(JSON.parse(summaryFileWithHistory_0_0_2));
255
+ });
256
+ it('upgrades 0.0.2', async () => {
257
+ const { tree, testObjectProvider } = await setUp011Tree({});
258
+ tree.loadSerializedSummary(summaryFileWithHistory_0_0_2);
259
+ // Synchronize to give a chance for the update op to be sequenced.
260
+ await testObjectProvider.ensureSynchronized();
261
+ const expectedTree = await setUp011SummaryTestTree(true);
262
+ await expectSharedTreesEqual(tree, expectedTree);
263
+ expect(JSON.parse(tree.saveSerializedSummary())).to.deep.equal(JSON.parse(summaryFileUpgrade_0_1_1));
264
+ });
265
+ it('upgrades 0.0.2 that has several stale ops that it resubmits', async () => {
266
+ const { tree: resubmitTree, testObjectProvider } = await setUpLocalServerTestSharedTree({
267
+ writeFormat: WriteFormat.v0_0_2,
268
+ });
269
+ applyTestEdits(resubmitTree);
270
+ const { tree: tree } = await setUpLocalServerTestSharedTree({
271
+ writeFormat: WriteFormat.v0_1_1,
272
+ testObjectProvider,
273
+ });
274
+ await testObjectProvider.ensureSynchronized();
275
+ await expectSharedTreesEqual(resubmitTree, tree);
276
+ await expectSharedTreesEqual(tree, await createSummaryTestTree(WriteFormat.v0_1_1, true));
277
+ });
278
+ it('Normalizes a denormalized summary containing nodes with empty traits', async () => {
279
+ const { tree } = await setUp011Tree({});
280
+ tree.loadSerializedSummary(summaryFileEmptyTraits_0_0_2);
281
+ const { tree: expectedTree } = await setUp011Tree({});
282
+ expectedTree.loadSerializedSummary(summaryFileWithHistory_0_0_2);
283
+ expect(areRevisionViewsSemanticallyEqual(tree.currentView, tree, expectedTree.currentView, expectedTree));
284
+ });
285
+ });
286
+ it('gives correct SummaryStatistics', async () => {
287
+ const { tree } = await setUp011Tree({});
288
+ tree.loadSerializedSummary(summaryFileWithHistory_0_1_1);
289
+ const editCount = tree.edits.length;
290
+ const summary = deserialize(summaryFileWithHistory_0_1_1, testSerializer);
291
+ const telemetryInfo = getSummaryStatistics(summary);
292
+ const totalChunks = Math.ceil(editCount / editsPerChunk);
293
+ const expectedTelemetryInfo = {
294
+ formatVersion: WriteFormat.v0_1_1,
295
+ historySize: editCount,
296
+ totalNumberOfChunks: totalChunks,
297
+ uploadedChunks:
298
+ // If the last chunk is bigger than the number of edits per chunk, it has also been uploaded
299
+ editCount - Math.floor(editCount / editsPerChunk) * editsPerChunk < editsPerChunk &&
300
+ totalChunks !== 0
301
+ ? totalChunks - 1
302
+ : totalChunks,
303
+ };
304
+ expect(telemetryInfo).to.deep.equals(expectedTelemetryInfo);
305
+ });
306
+ });
307
+ });
308
+ }
309
+ export function expectAssert(condition, message) {
310
+ expect(condition, message);
311
+ }
312
+ async function expectSharedTreesEqual(sharedTreeA, sharedTreeB, compareEditIds = true) {
313
+ if (!areRevisionViewsSemanticallyEqual(sharedTreeA.currentView, sharedTreeA, sharedTreeB.currentView, sharedTreeB)) {
314
+ expect.fail('trees have different current views');
315
+ }
316
+ if (sharedTreeA.edits.length !== sharedTreeB.edits.length) {
317
+ expect.fail('trees have different amounts of edits');
318
+ }
319
+ for (let i = 0; i < sharedTreeA.edits.length; i++) {
320
+ const roundTrip = (obj) => JSON.parse(JSON.stringify(obj));
321
+ const editA = roundTrip(convertEditIds(await sharedTreeA.editsInternal.getEditAtIndex(i), (id) => sharedTreeA.convertToStableNodeId(id)));
322
+ const editB = roundTrip(convertEditIds(await sharedTreeB.editsInternal.getEditAtIndex(i), (id) => sharedTreeB.convertToStableNodeId(id)));
323
+ if (compareEditIds) {
324
+ expect(editA).to.deep.equal(editB, `trees have different edits (index ${i})`);
325
+ }
326
+ else {
327
+ expect(editA.changes).to.deep.equal(editB.changes, `edits have different changes (index ${i})`);
328
+ }
329
+ }
330
+ }
331
+ function loadSummaryTestFiles() {
332
+ const summaryFileWithHistory_0_0_2 = fs.readFileSync(join(directory, 'summary-0-0-2.json'), 'utf8');
333
+ const summaryFileNoHistory_0_0_2 = fs.readFileSync(join(directory, 'summary-no-history-0-0-2.json'), 'utf8');
334
+ const summaryFileEmptyTraits_0_0_2 = fs.readFileSync(join(directory, 'summary-empty-traits-0-0-2.json'), 'utf8');
335
+ const summaryFileWithHistory_0_1_1 = fs.readFileSync(join(directory, 'summary-0-1-1.json'), 'utf8');
336
+ const summaryFileNoHistory_0_1_1 = fs.readFileSync(join(directory, 'summary-no-history-0-1-1.json'), 'utf8');
337
+ const summaryFileUpgrade_0_1_1 = fs.readFileSync(join(directory, 'summary-upgrade-0-1-1.json'), 'utf8');
338
+ const blobsFile = fs.readFileSync(join(directory, 'blobs-0-1-1.json'), 'utf8');
339
+ return {
340
+ summaryFileWithHistory_0_0_2,
341
+ summaryFileNoHistory_0_0_2,
342
+ summaryFileEmptyTraits_0_0_2,
343
+ summaryFileWithHistory_0_1_1,
344
+ summaryFileNoHistory_0_1_1,
345
+ summaryFileUpgrade_0_1_1,
346
+ blobsFile,
347
+ };
348
+ }
349
+ async function makeSummaryTestFiles() {
350
+ try {
351
+ fs.accessSync(directory);
352
+ }
353
+ catch (_a) {
354
+ fs.mkdirSync(directory);
355
+ }
356
+ const treeWithHistory_0_0_2 = await createSummaryTestTree(WriteFormat.v0_0_2, true);
357
+ const treeNoHistory_0_0_2 = await createSummaryTestTree(WriteFormat.v0_0_2, false);
358
+ const treeWithHistory_0_1_1 = await createSummaryTestTree(WriteFormat.v0_1_1, true);
359
+ const treeNoHistory_0_1_1 = await createSummaryTestTree(WriteFormat.v0_1_1, false);
360
+ fs.writeFileSync(join(directory, `summary-0-0-2.json`), treeWithHistory_0_0_2.saveSerializedSummary());
361
+ fs.writeFileSync(join(directory, `summary-no-history-0-0-2.json`), treeNoHistory_0_0_2.saveSerializedSummary());
362
+ fs.writeFileSync(join(directory, `summary-0-1-1.json`), treeWithHistory_0_1_1.saveSerializedSummary());
363
+ fs.writeFileSync(join(directory, `summary-no-history-0-1-1.json`), treeNoHistory_0_1_1.saveSerializedSummary());
364
+ const blobs = await getUploadedEditChunkContents(treeWithHistory_0_1_1);
365
+ assert(blobs.length > 0);
366
+ fs.writeFileSync(join(directory, `blobs-0-1-1.json`), JSON.stringify(blobs));
367
+ const { tree: upgradedTree, testObjectProvider } = await setUpLocalServerTestSharedTree({
368
+ writeFormat: WriteFormat.v0_1_1,
369
+ summarizeHistory: true,
370
+ });
371
+ upgradedTree.loadSummary(treeWithHistory_0_0_2.saveSummary());
372
+ await testObjectProvider.ensureSynchronized();
373
+ fs.writeFileSync(join(directory, `summary-upgrade-0-1-1.json`), upgradedTree.saveSerializedSummary());
374
+ }
375
+ /** Every instance of this class generates the same sequence of v5 UUIDs */
376
+ class DeterministicIdGenerator {
377
+ constructor(writeFormat, sharedTree) {
378
+ this.writeFormat = writeFormat;
379
+ this.sharedTree = sharedTree;
380
+ this.editIdCount = 0;
381
+ if (this.writeFormat === WriteFormat.v0_1_1) {
382
+ assert(getIdNormalizerFromSharedTree(sharedTree).localSessionId === DeterministicIdGenerator.sessionId);
383
+ }
384
+ else {
385
+ assert(getIdNormalizerFromSharedTree(sharedTree).localSessionId !== DeterministicIdGenerator.sessionId);
386
+ this.constantIdCompressor = new IdCompressor(DeterministicIdGenerator.sessionId, reservedIdCount);
387
+ }
388
+ }
389
+ getNextEditId() {
390
+ return v5((this.editIdCount++).toString(), DeterministicIdGenerator.uuidNamespace);
391
+ }
392
+ getNextNodeId() {
393
+ if (this.writeFormat === WriteFormat.v0_0_2) {
394
+ return this.sharedTree.generateNodeId(this.getNextStableId());
395
+ }
396
+ else {
397
+ return this.sharedTree.generateNodeId();
398
+ }
399
+ }
400
+ getNextStableId() {
401
+ assert(this.constantIdCompressor !== undefined);
402
+ return this.constantIdCompressor.decompress(this.constantIdCompressor.generateCompressedId());
403
+ }
404
+ }
405
+ DeterministicIdGenerator.sessionId = '968bee41-bcf7-46d2-8035-6eb163b76c4c';
406
+ DeterministicIdGenerator.uuidNamespace = '44864298-500e-4cf8-9f44-a249e5b3a286';
407
+ //# sourceMappingURL=Summary.tests.js.map