@fluid-experimental/tree 0.58.2002 → 0.59.1000

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 +52 -0
  114. package/dist/Transaction.d.ts.map +1 -0
  115. package/dist/Transaction.js +72 -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 +52 -0
  302. package/lib/Transaction.d.ts.map +1 -0
  303. package/lib/Transaction.js +68 -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 +76 -330
  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 +89 -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,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