@fluidframework/tree 2.10.0-307399 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/api-report/tree.alpha.api.md +47 -16
  3. package/api-report/tree.beta.api.md +5 -14
  4. package/api-report/tree.legacy.alpha.api.md +5 -14
  5. package/api-report/tree.legacy.public.api.md +5 -14
  6. package/api-report/tree.public.api.md +5 -14
  7. package/dist/alpha.d.ts +9 -0
  8. package/dist/core/forest/forest.d.ts +10 -2
  9. package/dist/core/forest/forest.d.ts.map +1 -1
  10. package/dist/core/forest/forest.js.map +1 -1
  11. package/dist/core/index.d.ts +2 -2
  12. package/dist/core/index.d.ts.map +1 -1
  13. package/dist/core/index.js +3 -2
  14. package/dist/core/index.js.map +1 -1
  15. package/dist/core/rebase/utils.d.ts +1 -1
  16. package/dist/core/rebase/utils.d.ts.map +1 -1
  17. package/dist/core/rebase/utils.js +11 -8
  18. package/dist/core/rebase/utils.js.map +1 -1
  19. package/dist/core/revertible.d.ts +30 -1
  20. package/dist/core/revertible.d.ts.map +1 -1
  21. package/dist/core/revertible.js.map +1 -1
  22. package/dist/core/schema-stored/storedSchemaRepository.d.ts +2 -2
  23. package/dist/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
  24. package/dist/core/schema-stored/storedSchemaRepository.js +5 -5
  25. package/dist/core/schema-stored/storedSchemaRepository.js.map +1 -1
  26. package/dist/core/tree/anchorSet.d.ts +2 -2
  27. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  28. package/dist/core/tree/anchorSet.js +21 -21
  29. package/dist/core/tree/anchorSet.js.map +1 -1
  30. package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
  31. package/dist/core/tree/detachedFieldIndexCodec.js +3 -2
  32. package/dist/core/tree/detachedFieldIndexCodec.js.map +1 -1
  33. package/dist/core/tree/index.d.ts +1 -1
  34. package/dist/core/tree/index.d.ts.map +1 -1
  35. package/dist/core/tree/index.js +2 -1
  36. package/dist/core/tree/index.js.map +1 -1
  37. package/dist/core/tree/visitorUtils.d.ts +25 -1
  38. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  39. package/dist/core/tree/visitorUtils.js +29 -1
  40. package/dist/core/tree/visitorUtils.js.map +1 -1
  41. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts +5 -2
  42. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  43. package/dist/feature-libraries/chunked-forest/chunkedForest.js +24 -14
  44. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  45. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/uniformChunk.js +2 -2
  47. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  48. package/dist/feature-libraries/flex-tree/context.d.ts +1 -1
  49. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  50. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  51. package/dist/feature-libraries/index.d.ts +1 -0
  52. package/dist/feature-libraries/index.d.ts.map +1 -1
  53. package/dist/feature-libraries/index.js +4 -1
  54. package/dist/feature-libraries/index.js.map +1 -1
  55. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts +132 -0
  56. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -0
  57. package/dist/feature-libraries/indexing/anchorTreeIndex.js +361 -0
  58. package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -0
  59. package/dist/feature-libraries/indexing/index.d.ts +7 -0
  60. package/dist/feature-libraries/indexing/index.d.ts.map +1 -0
  61. package/dist/feature-libraries/indexing/index.js +11 -0
  62. package/dist/feature-libraries/indexing/index.js.map +1 -0
  63. package/dist/feature-libraries/indexing/types.d.ts +32 -0
  64. package/dist/feature-libraries/indexing/types.d.ts.map +1 -0
  65. package/dist/{events/interop.js → feature-libraries/indexing/types.js} +1 -1
  66. package/dist/feature-libraries/indexing/types.js.map +1 -0
  67. package/dist/feature-libraries/modular-schema/discrepancies.js +1 -1
  68. package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -1
  69. package/dist/feature-libraries/object-forest/objectForest.d.ts +5 -2
  70. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  71. package/dist/feature-libraries/object-forest/objectForest.js +21 -11
  72. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  73. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  74. package/dist/feature-libraries/sequence-field/invert.js +2 -2
  75. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  76. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +3 -2
  77. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  78. package/dist/index.d.ts +4 -4
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +4 -1
  81. package/dist/index.js.map +1 -1
  82. package/dist/packageVersion.d.ts +1 -1
  83. package/dist/packageVersion.d.ts.map +1 -1
  84. package/dist/packageVersion.js +1 -1
  85. package/dist/packageVersion.js.map +1 -1
  86. package/dist/shared-tree/index.d.ts +1 -1
  87. package/dist/shared-tree/index.d.ts.map +1 -1
  88. package/dist/shared-tree/index.js +1 -2
  89. package/dist/shared-tree/index.js.map +1 -1
  90. package/dist/shared-tree/schematizingTreeView.d.ts +7 -1
  91. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  92. package/dist/shared-tree/schematizingTreeView.js +31 -30
  93. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  94. package/dist/shared-tree/sharedTree.d.ts +3 -0
  95. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  96. package/dist/shared-tree/sharedTree.js +56 -20
  97. package/dist/shared-tree/sharedTree.js.map +1 -1
  98. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  99. package/dist/shared-tree/sharedTreeChangeFamily.js +3 -3
  100. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  101. package/dist/shared-tree/treeCheckout.d.ts +32 -64
  102. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  103. package/dist/shared-tree/treeCheckout.js +161 -125
  104. package/dist/shared-tree/treeCheckout.js.map +1 -1
  105. package/dist/shared-tree-core/branch.d.ts +25 -81
  106. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  107. package/dist/shared-tree-core/branch.js +72 -151
  108. package/dist/shared-tree-core/branch.js.map +1 -1
  109. package/dist/shared-tree-core/branchCommitEnricher.d.ts +19 -33
  110. package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  111. package/dist/shared-tree-core/branchCommitEnricher.js +73 -54
  112. package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
  113. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  114. package/dist/shared-tree-core/defaultResubmitMachine.js +2 -1
  115. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  116. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  117. package/dist/shared-tree-core/editManager.js +2 -2
  118. package/dist/shared-tree-core/editManager.js.map +1 -1
  119. package/dist/shared-tree-core/index.d.ts +1 -1
  120. package/dist/shared-tree-core/index.d.ts.map +1 -1
  121. package/dist/shared-tree-core/index.js +4 -3
  122. package/dist/shared-tree-core/index.js.map +1 -1
  123. package/dist/shared-tree-core/sharedTreeCore.d.ts +2 -2
  124. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  125. package/dist/shared-tree-core/sharedTreeCore.js +11 -52
  126. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  127. package/dist/shared-tree-core/transaction.d.ts +108 -0
  128. package/dist/shared-tree-core/transaction.d.ts.map +1 -0
  129. package/dist/shared-tree-core/transaction.js +99 -0
  130. package/dist/shared-tree-core/transaction.js.map +1 -0
  131. package/dist/shared-tree-core/transactionEnricher.d.ts +8 -13
  132. package/dist/shared-tree-core/transactionEnricher.d.ts.map +1 -1
  133. package/dist/shared-tree-core/transactionEnricher.js +41 -21
  134. package/dist/shared-tree-core/transactionEnricher.js.map +1 -1
  135. package/dist/simple-tree/api/identifierIndex.d.ts +21 -0
  136. package/dist/simple-tree/api/identifierIndex.d.ts.map +1 -0
  137. package/dist/simple-tree/api/identifierIndex.js +45 -0
  138. package/dist/simple-tree/api/identifierIndex.js.map +1 -0
  139. package/dist/simple-tree/api/index.d.ts +2 -0
  140. package/dist/simple-tree/api/index.d.ts.map +1 -1
  141. package/dist/simple-tree/api/index.js +5 -1
  142. package/dist/simple-tree/api/index.js.map +1 -1
  143. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +9 -7
  144. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  145. package/dist/simple-tree/api/simpleTreeIndex.d.ts +65 -0
  146. package/dist/simple-tree/api/simpleTreeIndex.d.ts.map +1 -0
  147. package/dist/simple-tree/api/simpleTreeIndex.js +91 -0
  148. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -0
  149. package/dist/simple-tree/api/tree.d.ts +4 -5
  150. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  151. package/dist/simple-tree/api/tree.js.map +1 -1
  152. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  153. package/dist/simple-tree/core/index.d.ts +1 -1
  154. package/dist/simple-tree/core/index.d.ts.map +1 -1
  155. package/dist/simple-tree/core/index.js +2 -1
  156. package/dist/simple-tree/core/index.js.map +1 -1
  157. package/dist/simple-tree/core/treeNodeKernel.d.ts +6 -2
  158. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  159. package/dist/simple-tree/core/treeNodeKernel.js +53 -22
  160. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  161. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
  162. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  163. package/dist/simple-tree/core/unhydratedFlexTree.js +2 -2
  164. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  165. package/dist/simple-tree/index.d.ts +1 -1
  166. package/dist/simple-tree/index.d.ts.map +1 -1
  167. package/dist/simple-tree/index.js +4 -2
  168. package/dist/simple-tree/index.js.map +1 -1
  169. package/dist/simple-tree/objectNode.d.ts +7 -2
  170. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  171. package/dist/simple-tree/objectNode.js.map +1 -1
  172. package/dist/simple-tree/toMapTree.js +3 -3
  173. package/dist/simple-tree/toMapTree.js.map +1 -1
  174. package/dist/util/index.d.ts +1 -2
  175. package/dist/util/index.d.ts.map +1 -1
  176. package/dist/util/index.js +5 -4
  177. package/dist/util/index.js.map +1 -1
  178. package/dist/util/typeCheck.d.ts +6 -1
  179. package/dist/util/typeCheck.d.ts.map +1 -1
  180. package/dist/util/typeCheck.js.map +1 -1
  181. package/dist/util/typeCheckTests.d.ts +14 -2
  182. package/dist/util/typeCheckTests.d.ts.map +1 -1
  183. package/dist/util/typeCheckTests.js.map +1 -1
  184. package/dist/util/utils.d.ts +29 -0
  185. package/dist/util/utils.d.ts.map +1 -1
  186. package/dist/util/utils.js +13 -1
  187. package/dist/util/utils.js.map +1 -1
  188. package/lib/alpha.d.ts +9 -0
  189. package/lib/core/forest/forest.d.ts +10 -2
  190. package/lib/core/forest/forest.d.ts.map +1 -1
  191. package/lib/core/forest/forest.js.map +1 -1
  192. package/lib/core/index.d.ts +2 -2
  193. package/lib/core/index.d.ts.map +1 -1
  194. package/lib/core/index.js +2 -2
  195. package/lib/core/index.js.map +1 -1
  196. package/lib/core/rebase/utils.d.ts +1 -1
  197. package/lib/core/rebase/utils.d.ts.map +1 -1
  198. package/lib/core/rebase/utils.js +11 -8
  199. package/lib/core/rebase/utils.js.map +1 -1
  200. package/lib/core/revertible.d.ts +30 -1
  201. package/lib/core/revertible.d.ts.map +1 -1
  202. package/lib/core/revertible.js.map +1 -1
  203. package/lib/core/schema-stored/storedSchemaRepository.d.ts +2 -2
  204. package/lib/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
  205. package/lib/core/schema-stored/storedSchemaRepository.js +1 -1
  206. package/lib/core/schema-stored/storedSchemaRepository.js.map +1 -1
  207. package/lib/core/tree/anchorSet.d.ts +2 -2
  208. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  209. package/lib/core/tree/anchorSet.js +1 -1
  210. package/lib/core/tree/anchorSet.js.map +1 -1
  211. package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
  212. package/lib/core/tree/detachedFieldIndexCodec.js +4 -3
  213. package/lib/core/tree/detachedFieldIndexCodec.js.map +1 -1
  214. package/lib/core/tree/index.d.ts +1 -1
  215. package/lib/core/tree/index.d.ts.map +1 -1
  216. package/lib/core/tree/index.js +1 -1
  217. package/lib/core/tree/index.js.map +1 -1
  218. package/lib/core/tree/visitorUtils.d.ts +25 -1
  219. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  220. package/lib/core/tree/visitorUtils.js +27 -0
  221. package/lib/core/tree/visitorUtils.js.map +1 -1
  222. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts +5 -2
  223. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  224. package/lib/feature-libraries/chunked-forest/chunkedForest.js +18 -8
  225. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  226. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  227. package/lib/feature-libraries/chunked-forest/uniformChunk.js +3 -3
  228. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  229. package/lib/feature-libraries/flex-tree/context.d.ts +1 -1
  230. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  231. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  232. package/lib/feature-libraries/index.d.ts +1 -0
  233. package/lib/feature-libraries/index.d.ts.map +1 -1
  234. package/lib/feature-libraries/index.js +1 -0
  235. package/lib/feature-libraries/index.js.map +1 -1
  236. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts +132 -0
  237. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -0
  238. package/lib/feature-libraries/indexing/anchorTreeIndex.js +356 -0
  239. package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -0
  240. package/lib/feature-libraries/indexing/index.d.ts +7 -0
  241. package/lib/feature-libraries/indexing/index.d.ts.map +1 -0
  242. package/lib/{events → feature-libraries/indexing}/index.js +1 -1
  243. package/lib/feature-libraries/indexing/index.js.map +1 -0
  244. package/lib/feature-libraries/indexing/types.d.ts +32 -0
  245. package/lib/feature-libraries/indexing/types.d.ts.map +1 -0
  246. package/lib/{events/interop.js → feature-libraries/indexing/types.js} +1 -1
  247. package/lib/feature-libraries/indexing/types.js.map +1 -0
  248. package/lib/feature-libraries/modular-schema/discrepancies.js +1 -1
  249. package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -1
  250. package/lib/feature-libraries/object-forest/objectForest.d.ts +5 -2
  251. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  252. package/lib/feature-libraries/object-forest/objectForest.js +15 -5
  253. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  254. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  255. package/lib/feature-libraries/sequence-field/invert.js +4 -4
  256. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  257. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +4 -3
  258. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  259. package/lib/index.d.ts +4 -4
  260. package/lib/index.d.ts.map +1 -1
  261. package/lib/index.js +1 -1
  262. package/lib/index.js.map +1 -1
  263. package/lib/packageVersion.d.ts +1 -1
  264. package/lib/packageVersion.d.ts.map +1 -1
  265. package/lib/packageVersion.js +1 -1
  266. package/lib/packageVersion.js.map +1 -1
  267. package/lib/shared-tree/index.d.ts +1 -1
  268. package/lib/shared-tree/index.d.ts.map +1 -1
  269. package/lib/shared-tree/index.js +1 -1
  270. package/lib/shared-tree/index.js.map +1 -1
  271. package/lib/shared-tree/schematizingTreeView.d.ts +7 -1
  272. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  273. package/lib/shared-tree/schematizingTreeView.js +2 -2
  274. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  275. package/lib/shared-tree/sharedTree.d.ts +3 -0
  276. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  277. package/lib/shared-tree/sharedTree.js +37 -1
  278. package/lib/shared-tree/sharedTree.js.map +1 -1
  279. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  280. package/lib/shared-tree/sharedTreeChangeFamily.js +5 -5
  281. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  282. package/lib/shared-tree/treeCheckout.d.ts +32 -64
  283. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  284. package/lib/shared-tree/treeCheckout.js +149 -112
  285. package/lib/shared-tree/treeCheckout.js.map +1 -1
  286. package/lib/shared-tree-core/branch.d.ts +25 -81
  287. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  288. package/lib/shared-tree-core/branch.js +72 -151
  289. package/lib/shared-tree-core/branch.js.map +1 -1
  290. package/lib/shared-tree-core/branchCommitEnricher.d.ts +19 -33
  291. package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  292. package/lib/shared-tree-core/branchCommitEnricher.js +74 -55
  293. package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
  294. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  295. package/lib/shared-tree-core/defaultResubmitMachine.js +3 -2
  296. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  297. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  298. package/lib/shared-tree-core/editManager.js +1 -1
  299. package/lib/shared-tree-core/editManager.js.map +1 -1
  300. package/lib/shared-tree-core/index.d.ts +1 -1
  301. package/lib/shared-tree-core/index.d.ts.map +1 -1
  302. package/lib/shared-tree-core/index.js +1 -1
  303. package/lib/shared-tree-core/index.js.map +1 -1
  304. package/lib/shared-tree-core/sharedTreeCore.d.ts +2 -2
  305. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  306. package/lib/shared-tree-core/sharedTreeCore.js +12 -53
  307. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  308. package/lib/shared-tree-core/transaction.d.ts +108 -0
  309. package/lib/shared-tree-core/transaction.d.ts.map +1 -0
  310. package/lib/shared-tree-core/transaction.js +95 -0
  311. package/lib/shared-tree-core/transaction.js.map +1 -0
  312. package/lib/shared-tree-core/transactionEnricher.d.ts +8 -13
  313. package/lib/shared-tree-core/transactionEnricher.d.ts.map +1 -1
  314. package/lib/shared-tree-core/transactionEnricher.js +41 -21
  315. package/lib/shared-tree-core/transactionEnricher.js.map +1 -1
  316. package/lib/simple-tree/api/identifierIndex.d.ts +21 -0
  317. package/lib/simple-tree/api/identifierIndex.d.ts.map +1 -0
  318. package/lib/simple-tree/api/identifierIndex.js +41 -0
  319. package/lib/simple-tree/api/identifierIndex.js.map +1 -0
  320. package/lib/simple-tree/api/index.d.ts +2 -0
  321. package/lib/simple-tree/api/index.d.ts.map +1 -1
  322. package/lib/simple-tree/api/index.js +2 -0
  323. package/lib/simple-tree/api/index.js.map +1 -1
  324. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +11 -9
  325. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  326. package/lib/simple-tree/api/simpleTreeIndex.d.ts +65 -0
  327. package/lib/simple-tree/api/simpleTreeIndex.d.ts.map +1 -0
  328. package/lib/simple-tree/api/simpleTreeIndex.js +87 -0
  329. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -0
  330. package/lib/simple-tree/api/tree.d.ts +4 -5
  331. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  332. package/lib/simple-tree/api/tree.js.map +1 -1
  333. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  334. package/lib/simple-tree/core/index.d.ts +1 -1
  335. package/lib/simple-tree/core/index.d.ts.map +1 -1
  336. package/lib/simple-tree/core/index.js +1 -1
  337. package/lib/simple-tree/core/index.js.map +1 -1
  338. package/lib/simple-tree/core/treeNodeKernel.d.ts +6 -2
  339. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  340. package/lib/simple-tree/core/treeNodeKernel.js +31 -1
  341. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  342. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
  343. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  344. package/lib/simple-tree/core/unhydratedFlexTree.js +1 -1
  345. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  346. package/lib/simple-tree/index.d.ts +1 -1
  347. package/lib/simple-tree/index.d.ts.map +1 -1
  348. package/lib/simple-tree/index.js +1 -1
  349. package/lib/simple-tree/index.js.map +1 -1
  350. package/lib/simple-tree/objectNode.d.ts +7 -2
  351. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  352. package/lib/simple-tree/objectNode.js.map +1 -1
  353. package/lib/simple-tree/toMapTree.js +5 -5
  354. package/lib/simple-tree/toMapTree.js.map +1 -1
  355. package/lib/util/index.d.ts +1 -2
  356. package/lib/util/index.d.ts.map +1 -1
  357. package/lib/util/index.js +1 -2
  358. package/lib/util/index.js.map +1 -1
  359. package/lib/util/typeCheck.d.ts +6 -1
  360. package/lib/util/typeCheck.d.ts.map +1 -1
  361. package/lib/util/typeCheck.js.map +1 -1
  362. package/lib/util/typeCheckTests.d.ts +14 -2
  363. package/lib/util/typeCheckTests.d.ts.map +1 -1
  364. package/lib/util/typeCheckTests.js.map +1 -1
  365. package/lib/util/utils.d.ts +29 -0
  366. package/lib/util/utils.d.ts.map +1 -1
  367. package/lib/util/utils.js +9 -0
  368. package/lib/util/utils.js.map +1 -1
  369. package/package.json +23 -23
  370. package/src/core/forest/forest.ts +12 -1
  371. package/src/core/index.ts +8 -1
  372. package/src/core/rebase/utils.ts +12 -10
  373. package/src/core/revertible.ts +35 -1
  374. package/src/core/schema-stored/storedSchemaRepository.ts +2 -1
  375. package/src/core/tree/anchorSet.ts +2 -1
  376. package/src/core/tree/detachedFieldIndexCodec.ts +4 -3
  377. package/src/core/tree/index.ts +1 -0
  378. package/src/core/tree/visitorUtils.ts +56 -1
  379. package/src/feature-libraries/chunked-forest/chunkedForest.ts +33 -7
  380. package/src/feature-libraries/chunked-forest/uniformChunk.ts +3 -3
  381. package/src/feature-libraries/flex-tree/context.ts +1 -1
  382. package/src/feature-libraries/index.ts +9 -0
  383. package/src/feature-libraries/indexing/anchorTreeIndex.ts +453 -0
  384. package/src/feature-libraries/indexing/index.ts +11 -0
  385. package/src/feature-libraries/indexing/types.ts +37 -0
  386. package/src/feature-libraries/modular-schema/discrepancies.ts +1 -1
  387. package/src/feature-libraries/object-forest/objectForest.ts +22 -4
  388. package/src/feature-libraries/sequence-field/invert.ts +4 -4
  389. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +4 -4
  390. package/src/index.ts +16 -6
  391. package/src/packageVersion.ts +1 -1
  392. package/src/shared-tree/index.ts +0 -2
  393. package/src/shared-tree/schematizingTreeView.ts +7 -7
  394. package/src/shared-tree/sharedTree.ts +60 -6
  395. package/src/shared-tree/sharedTreeChangeFamily.ts +5 -4
  396. package/src/shared-tree/treeCheckout.ts +201 -189
  397. package/src/shared-tree-core/branch.ts +93 -220
  398. package/src/shared-tree-core/branchCommitEnricher.ts +69 -64
  399. package/src/shared-tree-core/defaultResubmitMachine.ts +3 -2
  400. package/src/shared-tree-core/editManager.ts +1 -1
  401. package/src/shared-tree-core/index.ts +9 -2
  402. package/src/shared-tree-core/sharedTreeCore.ts +17 -62
  403. package/src/shared-tree-core/transaction.ts +165 -0
  404. package/src/shared-tree-core/transactionEnricher.ts +30 -24
  405. package/src/simple-tree/api/identifierIndex.ts +64 -0
  406. package/src/simple-tree/api/index.ts +5 -0
  407. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +17 -18
  408. package/src/simple-tree/api/simpleTreeIndex.ts +231 -0
  409. package/src/simple-tree/api/tree.ts +8 -5
  410. package/src/simple-tree/api/treeNodeApi.ts +1 -1
  411. package/src/simple-tree/core/index.ts +1 -0
  412. package/src/simple-tree/core/treeNodeKernel.ts +37 -2
  413. package/src/simple-tree/core/unhydratedFlexTree.ts +2 -1
  414. package/src/simple-tree/index.ts +4 -0
  415. package/src/simple-tree/objectNode.ts +19 -12
  416. package/src/simple-tree/toMapTree.ts +5 -5
  417. package/src/util/index.ts +3 -1
  418. package/src/util/typeCheck.ts +6 -1
  419. package/src/util/typeCheckTests.ts +11 -1
  420. package/src/util/utils.ts +38 -0
  421. package/dist/events/emitter.d.ts +0 -139
  422. package/dist/events/emitter.d.ts.map +0 -1
  423. package/dist/events/emitter.js +0 -165
  424. package/dist/events/emitter.js.map +0 -1
  425. package/dist/events/index.d.ts +0 -7
  426. package/dist/events/index.d.ts.map +0 -1
  427. package/dist/events/index.js +0 -11
  428. package/dist/events/index.js.map +0 -1
  429. package/dist/events/interop.d.ts +0 -30
  430. package/dist/events/interop.d.ts.map +0 -1
  431. package/dist/events/interop.js.map +0 -1
  432. package/dist/events/listeners.d.ts +0 -76
  433. package/dist/events/listeners.d.ts.map +0 -1
  434. package/dist/events/listeners.js +0 -7
  435. package/dist/events/listeners.js.map +0 -1
  436. package/dist/shared-tree-core/transactionStack.d.ts +0 -29
  437. package/dist/shared-tree-core/transactionStack.d.ts.map +0 -1
  438. package/dist/shared-tree-core/transactionStack.js +0 -41
  439. package/dist/shared-tree-core/transactionStack.js.map +0 -1
  440. package/dist/util/transactionResult.d.ts +0 -19
  441. package/dist/util/transactionResult.d.ts.map +0 -1
  442. package/dist/util/transactionResult.js +0 -23
  443. package/dist/util/transactionResult.js.map +0 -1
  444. package/lib/events/emitter.d.ts +0 -139
  445. package/lib/events/emitter.d.ts.map +0 -1
  446. package/lib/events/emitter.js +0 -160
  447. package/lib/events/emitter.js.map +0 -1
  448. package/lib/events/index.d.ts +0 -7
  449. package/lib/events/index.d.ts.map +0 -1
  450. package/lib/events/index.js.map +0 -1
  451. package/lib/events/interop.d.ts +0 -30
  452. package/lib/events/interop.d.ts.map +0 -1
  453. package/lib/events/interop.js.map +0 -1
  454. package/lib/events/listeners.d.ts +0 -76
  455. package/lib/events/listeners.d.ts.map +0 -1
  456. package/lib/events/listeners.js +0 -6
  457. package/lib/events/listeners.js.map +0 -1
  458. package/lib/shared-tree-core/transactionStack.d.ts +0 -29
  459. package/lib/shared-tree-core/transactionStack.d.ts.map +0 -1
  460. package/lib/shared-tree-core/transactionStack.js +0 -37
  461. package/lib/shared-tree-core/transactionStack.js.map +0 -1
  462. package/lib/util/transactionResult.d.ts +0 -19
  463. package/lib/util/transactionResult.d.ts.map +0 -1
  464. package/lib/util/transactionResult.js +0 -20
  465. package/lib/util/transactionResult.js.map +0 -1
  466. package/src/events/README.md +0 -3
  467. package/src/events/emitter.ts +0 -256
  468. package/src/events/index.ts +0 -19
  469. package/src/events/interop.ts +0 -38
  470. package/src/events/listeners.ts +0 -80
  471. package/src/shared-tree-core/transactionStack.ts +0 -45
  472. package/src/util/transactionResult.ts +0 -19
@@ -2,16 +2,22 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { assert, oob } from "@fluidframework/core-utils/internal";
5
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
6
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
7
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
8
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
9
+ };
10
+ var _TreeCheckout_transaction;
11
+ import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
12
+ import { createEmitter } from "@fluid-internal/client-utils";
6
13
  import { UsageError, } from "@fluidframework/telemetry-utils/internal";
7
14
  import { noopValidator } from "../codec/index.js";
8
15
  import { AnchorSet, CommitKind, RevertibleStatus, TreeStoredSchemaRepository, combineVisitors, makeDetachedFieldIndex, rebaseChange, rootFieldKey, tagChange, visitDelta, } from "../core/index.js";
9
- import { createEmitter, } from "../events/index.js";
10
16
  import { buildForest, createNodeKeyManager, intoDelta, jsonableTreeFromCursor, makeFieldBatchCodec, } from "../feature-libraries/index.js";
11
- import { SharedTreeBranch, getChangeReplaceType } from "../shared-tree-core/index.js";
12
- import { Breakable, TransactionResult, disposeSymbol, fail } from "../util/index.js";
17
+ import { SharedTreeBranch, TransactionResult, TransactionStack, getChangeReplaceType, onForkTransitive, } from "../shared-tree-core/index.js";
18
+ import { Breakable, disposeSymbol, fail, getLast, hasSome } from "../util/index.js";
13
19
  import { SharedTreeChangeFamily, hasSchemaChange } from "./sharedTreeChangeFamily.js";
14
- import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
20
+ import { getCheckout, SchematizingSimpleTreeView } from "./schematizingTreeView.js";
15
21
  /**
16
22
  * Creates a {@link TreeCheckout}.
17
23
  * @param args - an object containing optional components that will be used to build the view.
@@ -33,41 +39,17 @@ export function createTreeCheckout(idCompressor, mintRevisionTag, revisionTagCod
33
39
  revision: "root",
34
40
  }, changeFamily, () => idCompressor.generateCompressedId());
35
41
  const events = args?.events ?? createEmitter();
36
- const transaction = new Transaction(branch);
37
- return new TreeCheckout(transaction, branch, false, changeFamily, schema, forest, events, mintRevisionTag, revisionTagCodec, idCompressor, args?.removedRoots, args?.logger, args?.breaker);
38
- }
39
- class Transaction {
40
- constructor(branch) {
41
- this.branch = branch;
42
- }
43
- start() {
44
- this.branch.startTransaction();
45
- this.branch.editor.enterTransaction();
46
- }
47
- commit() {
48
- this.branch.commitTransaction();
49
- this.branch.editor.exitTransaction();
50
- return TransactionResult.Commit;
51
- }
52
- abort() {
53
- this.branch.abortTransaction();
54
- this.branch.editor.exitTransaction();
55
- return TransactionResult.Abort;
56
- }
57
- inProgress() {
58
- return this.branch.isTransacting();
59
- }
42
+ return new TreeCheckout(branch, false, changeFamily, schema, forest, events, mintRevisionTag, revisionTagCodec, idCompressor, args?.removedRoots, args?.logger, args?.breaker);
60
43
  }
61
44
  /**
62
45
  * An implementation of {@link ITreeCheckoutFork}.
63
46
  */
64
47
  export class TreeCheckout {
65
- constructor(transaction, _branch,
48
+ constructor(_branch,
66
49
  /** True if and only if this checkout is for a forked branch and not the "main branch" of the tree. */
67
50
  isBranch, changeFamily, storedSchema, forest, events, mintRevisionTag, revisionTagCodec, idCompressor, removedRoots = makeDetachedFieldIndex("repair", revisionTagCodec, idCompressor),
68
51
  /** Optional logger for telemetry. */
69
52
  logger, breaker = new Breakable("TreeCheckout")) {
70
- this.transaction = transaction;
71
53
  this._branch = _branch;
72
54
  this.isBranch = isBranch;
73
55
  this.changeFamily = changeFamily;
@@ -93,34 +75,68 @@ export class TreeCheckout {
93
75
  */
94
76
  this.revertibleCommitBranches = new Map();
95
77
  /**
96
- * copies of the removed roots used as snapshots for reverting to previous state when transactions are aborted
78
+ * The {@link Transactor} for this checkout.
79
+ * @remarks In the context of a checkout, transactions allow edits to be batched into atomic units.
80
+ * Edits made during a transaction will update the local state of the tree immediately, but will be squashed into a single edit when the transaction is committed.
81
+ * If the transaction is aborted, the local state will be reset to what it was before the transaction began.
82
+ * Transactions may nest, meaning that a transaction may be started while a transaction is already ongoing.
83
+ *
84
+ * To avoid updating observers of the view state with intermediate results during a transaction,
85
+ * use {@link ITreeCheckout#branch} and {@link ISharedTreeFork#merge}.
97
86
  */
98
- this.removedRootsSnapshots = [];
99
- // when a transaction is started, take a snapshot of the current state of removed roots
100
- _branch.events.on("transactionStarted", () => {
101
- this.removedRootsSnapshots.push(this.removedRoots.clone());
102
- });
103
- // when a transaction is committed, the latest snapshot of removed roots can be discarded
104
- _branch.events.on("transactionCommitted", () => {
105
- this.removedRootsSnapshots.pop();
106
- });
107
- // after a transaction is rolled back, revert removed roots back to the latest snapshot
108
- _branch.events.on("transactionRolledBack", () => {
109
- const snapshot = this.removedRootsSnapshots.pop();
110
- assert(snapshot !== undefined, 0x9ae /* a snapshot for removed roots does not exist */);
111
- this.removedRoots = snapshot;
112
- });
87
+ _TreeCheckout_transaction.set(this, new TransactionStack(() => {
88
+ // Keep track of the commit that each transaction was on when it started
89
+ // TODO:#8603: This may need to be computed differently if we allow rebasing during a transaction.
90
+ const startCommit = this._branch.getHead();
91
+ // Keep track of all the forks created during the transaction so that we can dispose them when the transaction ends.
92
+ // This is a policy decision that we think is useful for the user, but it is not necessary for correctness.
93
+ const forks = new Set();
94
+ const onDisposeUnSubscribes = [];
95
+ const onForkUnSubscribe = onForkTransitive(this, (fork) => {
96
+ forks.add(fork);
97
+ onDisposeUnSubscribes.push(fork.events.on("dispose", () => forks.delete(fork)));
98
+ });
99
+ // When each transaction is started, take a snapshot of the current state of removed roots
100
+ const removedRoots = this.removedRoots.clone();
101
+ this._branch.editor.enterTransaction();
102
+ return (result) => {
103
+ this._branch.editor.exitTransaction();
104
+ switch (result) {
105
+ case TransactionResult.Abort:
106
+ this._branch.removeAfter(startCommit);
107
+ // If a transaction is rolled back, revert removed roots back to the latest snapshot
108
+ this.removedRoots = removedRoots;
109
+ break;
110
+ case TransactionResult.Commit: {
111
+ const removedCommits = this._branch.squashAfter(startCommit);
112
+ const transactionRevision = this._branch.getHead().revision;
113
+ for (const transactionStep of removedCommits) {
114
+ this.removedRoots.updateMajor(transactionStep.revision, transactionRevision);
115
+ }
116
+ break;
117
+ }
118
+ default:
119
+ unreachableCase(result);
120
+ }
121
+ forks.forEach((fork) => fork.dispose());
122
+ onDisposeUnSubscribes.forEach((unsubscribe) => unsubscribe());
123
+ onForkUnSubscribe();
124
+ };
125
+ }));
113
126
  // We subscribe to `beforeChange` rather than `afterChange` here because it's possible that the change is invalid WRT our forest.
114
127
  // For example, a bug in the editor might produce a malformed change object and thus applying the change to the forest will throw an error.
115
128
  // In such a case we will crash here, preventing the change from being added to the commit graph, and preventing `afterChange` from firing.
116
129
  // One important consequence of this is that we will not submit the op containing the invalid change, since op submissions happens in response to `afterChange`.
117
130
  _branch.events.on("beforeChange", (event) => {
118
131
  if (event.change !== undefined) {
119
- const revision = event.type === "replace"
120
- ? // Change events will always contain new commits
121
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
122
- event.newCommits[event.newCommits.length - 1].revision
123
- : event.change.revision;
132
+ let revision;
133
+ if (event.type === "replace") {
134
+ assert(hasSome(event.newCommits), 0xa81 /* Expected new commit for non no-op change event */);
135
+ revision = getLast(event.newCommits).revision;
136
+ }
137
+ else {
138
+ revision = event.change.revision;
139
+ }
124
140
  // Conflicts due to schema will be empty and thus are not applied.
125
141
  for (const change of event.change.change.changes) {
126
142
  if (change.type === "data") {
@@ -153,18 +169,11 @@ export class TreeCheckout {
153
169
  }
154
170
  this.events.emit("afterBatch");
155
171
  }
156
- if (event.type === "replace" && getChangeReplaceType(event) === "transactionCommit") {
157
- const firstCommit = event.newCommits[0] ?? oob();
158
- const transactionRevision = firstCommit.revision;
159
- for (const transactionStep of event.removedCommits) {
160
- this.removedRoots.updateMajor(transactionStep.revision, transactionRevision);
161
- }
162
- }
163
172
  });
164
173
  _branch.events.on("afterChange", (event) => {
165
174
  // The following logic allows revertibles to be generated for the change.
166
175
  // Currently only appends (including merges) and transaction commits are supported.
167
- if (!_branch.isTransacting()) {
176
+ if (!this.transaction.isInProgress()) {
168
177
  if (event.type === "append" ||
169
178
  (event.type === "replace" && getChangeReplaceType(event) === "transactionCommit")) {
170
179
  // TODO:#20949: When the SharedTree is detached, these commits will already have been garbage collected.
@@ -181,35 +190,7 @@ export class TreeCheckout {
181
190
  if (this.revertibleCommitBranches.get(revision) !== undefined) {
182
191
  throw new UsageError("Cannot generate the same revertible more than once. Note that this can happen when multiple changed event listeners are registered.");
183
192
  }
184
- const revertibleCommits = this.revertibleCommitBranches;
185
- const revertible = {
186
- get status() {
187
- const revertibleCommit = revertibleCommits.get(revision);
188
- return revertibleCommit === undefined
189
- ? RevertibleStatus.Disposed
190
- : RevertibleStatus.Valid;
191
- },
192
- revert: (release = true) => {
193
- if (revertible.status === RevertibleStatus.Disposed) {
194
- throw new UsageError("Unable to revert a revertible that has been disposed.");
195
- }
196
- const revertMetrics = this.revertRevertible(revision, kind);
197
- this.logger?.sendTelemetryEvent({
198
- eventName: TreeCheckout.revertTelemetryEventName,
199
- ...revertMetrics,
200
- });
201
- if (release) {
202
- revertible.dispose();
203
- }
204
- },
205
- dispose: () => {
206
- if (revertible.status === RevertibleStatus.Disposed) {
207
- throw new UsageError("Unable to dispose a revertible that has already been disposed.");
208
- }
209
- this.disposeRevertible(revertible, revision);
210
- onRevertibleDisposed?.(revertible);
211
- },
212
- };
193
+ const revertible = this.createRevertible(revision, kind, this, onRevertibleDisposed);
213
194
  this.revertibleCommitBranches.set(revision, _branch.fork(commit));
214
195
  this.revertibles.add(revertible);
215
196
  return revertible;
@@ -219,7 +200,7 @@ export class TreeCheckout {
219
200
  withinEventContext = false;
220
201
  }
221
202
  }
222
- else if (event.type === "replace") {
203
+ else if (this.isRemoteChangeEvent(event)) {
223
204
  // TODO: figure out how to plumb through commit kind info for remote changes
224
205
  this.events.emit("changed", { isLocal: false, kind: CommitKind.Default });
225
206
  }
@@ -255,6 +236,59 @@ export class TreeCheckout {
255
236
  assert(false, 0x911 /* Invalid operation on a disposed TreeCheckout */);
256
237
  }
257
238
  }
239
+ /**
240
+ * Creates a {@link RevertibleAlpha} object that can undo a specific change in the tree's history.
241
+ * Revision must exist in the given {@link TreeCheckout}'s branch.
242
+ *
243
+ * @param revision - The revision tag identifying the change to be made revertible.
244
+ * @param kind - The {@link CommitKind} that produced this revertible (e.g., Default, Undo, Redo).
245
+ * @param checkout - The {@link TreeCheckout} instance this revertible belongs to.
246
+ * @param onRevertibleDisposed - Callback function that will be called when the revertible is disposed.
247
+ * @returns - {@link RevertibleAlpha}
248
+ */
249
+ createRevertible(revision, kind, checkout, onRevertibleDisposed) {
250
+ const commitBranches = checkout.revertibleCommitBranches;
251
+ const revertible = {
252
+ get status() {
253
+ const revertibleCommit = commitBranches.get(revision);
254
+ return revertibleCommit === undefined
255
+ ? RevertibleStatus.Disposed
256
+ : RevertibleStatus.Valid;
257
+ },
258
+ revert: (release = true) => {
259
+ if (revertible.status === RevertibleStatus.Disposed) {
260
+ throw new UsageError("Unable to revert a revertible that has been disposed.");
261
+ }
262
+ const revertMetrics = checkout.revertRevertible(revision, kind);
263
+ checkout.logger?.sendTelemetryEvent({
264
+ eventName: TreeCheckout.revertTelemetryEventName,
265
+ ...revertMetrics,
266
+ });
267
+ if (release) {
268
+ revertible.dispose();
269
+ }
270
+ },
271
+ clone: (forkedBranch) => {
272
+ if (forkedBranch === undefined) {
273
+ return this.createRevertible(revision, kind, checkout, onRevertibleDisposed);
274
+ }
275
+ // TODO:#23442: When a revertible is cloned for a forked branch, optimize to create a fork of a revertible branch once per revision NOT once per revision per checkout.
276
+ const forkedCheckout = getCheckout(forkedBranch);
277
+ const revertibleBranch = this.revertibleCommitBranches.get(revision);
278
+ assert(revertibleBranch !== undefined, 0xa82 /* change to revert does not exist on the given forked branch */);
279
+ forkedCheckout.revertibleCommitBranches.set(revision, revertibleBranch.fork());
280
+ return this.createRevertible(revision, kind, forkedCheckout, onRevertibleDisposed);
281
+ },
282
+ dispose: () => {
283
+ if (revertible.status === RevertibleStatus.Disposed) {
284
+ throw new UsageError("Unable to dispose a revertible that has already been disposed.");
285
+ }
286
+ checkout.disposeRevertible(revertible, revision);
287
+ onRevertibleDisposed?.(revertible);
288
+ },
289
+ };
290
+ return revertible;
291
+ }
258
292
  viewWith(config) {
259
293
  const view = new SchematizingSimpleTreeView(this, config, createNodeKeyManager(this.idCompressor), this.breaker, () => {
260
294
  this.views.delete(view);
@@ -273,19 +307,23 @@ export class TreeCheckout {
273
307
  this.checkNotDisposed();
274
308
  return this.forest.anchors.locate(anchor);
275
309
  }
310
+ get transaction() {
311
+ return __classPrivateFieldGet(this, _TreeCheckout_transaction, "f");
312
+ }
276
313
  branch() {
277
314
  this.checkNotDisposed("The parent branch has already been disposed and can no longer create new branches.");
278
315
  const anchors = new AnchorSet();
279
316
  const branch = this._branch.fork();
280
317
  const storedSchema = this.storedSchema.clone();
281
318
  const forest = this.forest.clone(storedSchema, anchors);
282
- const transaction = new Transaction(branch);
283
- return new TreeCheckout(transaction, branch, true, this.changeFamily, storedSchema, forest, createEmitter(), this.mintRevisionTag, this.revisionTagCodec, this.idCompressor, this.removedRoots.clone(), this.logger, this.breaker);
319
+ const checkout = new TreeCheckout(branch, true, this.changeFamily, storedSchema, forest, createEmitter(), this.mintRevisionTag, this.revisionTagCodec, this.idCompressor, this.removedRoots.clone(), this.logger, this.breaker);
320
+ this.events.emit("fork", checkout);
321
+ return checkout;
284
322
  }
285
323
  rebase(checkout) {
286
324
  this.checkNotDisposed("The target of the branch rebase has been disposed and cannot be rebased.");
287
325
  checkout.checkNotDisposed("The source of the branch rebase has been disposed and cannot be rebased.");
288
- assert(!checkout.transaction.inProgress(), 0x9af /* A view cannot be rebased while it has a pending transaction */);
326
+ assert(!checkout.transaction.isInProgress(), 0x9af /* A view cannot be rebased while it has a pending transaction */);
289
327
  assert(checkout.isBranch, 0xa5d /* The main branch cannot be rebased onto another branch. */);
290
328
  checkout._branch.rebaseOnto(this._branch);
291
329
  }
@@ -296,8 +334,8 @@ export class TreeCheckout {
296
334
  merge(checkout, disposeMerged = true) {
297
335
  this.checkNotDisposed("The target of the branch merge has been disposed and cannot be merged.");
298
336
  checkout.checkNotDisposed("The source of the branch merge has been disposed and cannot be merged.");
299
- assert(!this.transaction.inProgress(), 0x9b0 /* Views cannot be merged into a view while it has a pending transaction */);
300
- while (checkout.transaction.inProgress()) {
337
+ assert(!this.transaction.isInProgress(), 0x9b0 /* Views cannot be merged into a view while it has a pending transaction */);
338
+ while (checkout.transaction.isInProgress()) {
301
339
  checkout.transaction.commit();
302
340
  }
303
341
  this._branch.merge(checkout._branch);
@@ -313,14 +351,16 @@ export class TreeCheckout {
313
351
  dispose() {
314
352
  this[disposeSymbol]();
315
353
  }
316
- [disposeSymbol]() {
354
+ [(_TreeCheckout_transaction = new WeakMap(), disposeSymbol)]() {
317
355
  this.checkNotDisposed("The branch has already been disposed and cannot be disposed again.");
318
356
  this.disposed = true;
357
+ __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").dispose();
319
358
  this.purgeRevertibles();
320
359
  this._branch.dispose();
321
360
  for (const view of this.views) {
322
361
  view.dispose();
323
362
  }
363
+ this.events.emit("dispose");
324
364
  }
325
365
  getRemovedRoots() {
326
366
  this.assertNoUntrackedRoots();
@@ -356,7 +396,7 @@ export class TreeCheckout {
356
396
  this.revertibles.delete(revertible);
357
397
  }
358
398
  revertRevertible(revision, kind) {
359
- if (this._branch.isTransacting()) {
399
+ if (this.transaction.isInProgress()) {
360
400
  throw new UsageError("Undo is not yet supported during transactions.");
361
401
  }
362
402
  const revertibleBranch = this.revertibleCommitBranches.get(revision);
@@ -398,25 +438,22 @@ export class TreeCheckout {
398
438
  rootFields.delete(field);
399
439
  } while (cursor.nextField());
400
440
  }
441
+ /**
442
+ * `true` iff the given branch change event is due to a remote change
443
+ */
444
+ isRemoteChangeEvent(event) {
445
+ return (
446
+ // Remote changes are only ever applied to the main branch
447
+ !this.isBranch &&
448
+ // Remote changes are applied to the main branch by rebasing it onto the trunk.
449
+ // No other rebases are allowed on the main branch, so we can use this to detect remote changes.
450
+ event.type === "replace" &&
451
+ getChangeReplaceType(event) === "rebase");
452
+ }
401
453
  }
402
454
  /**
403
455
  * The name of the telemetry event logged for calls to {@link TreeCheckout.revertRevertible}.
404
456
  * @privateRemarks Exposed for testing purposes.
405
457
  */
406
458
  TreeCheckout.revertTelemetryEventName = "RevertRevertible";
407
- /**
408
- * Run a synchronous transaction on the given shared tree view.
409
- * This is a convenience helper around the {@link SharedTreeFork#transaction} APIs.
410
- * @param view - the view on which to run the transaction
411
- * @param transaction - the transaction function. This will be executed immediately. It is passed `view` as an argument for convenience.
412
- * If this function returns an `Abort` result then the transaction will be aborted. Otherwise, it will be committed.
413
- * @returns whether or not the transaction was committed or aborted
414
- */
415
- export function runSynchronous(view, transaction) {
416
- view.transaction.start();
417
- const result = transaction(view);
418
- return result === TransactionResult.Abort
419
- ? view.transaction.abort()
420
- : view.transaction.commit();
421
- }
422
459
  //# sourceMappingURL=treeCheckout.js.map