@fluidframework/tree 2.83.0 → 2.90.0-378676

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 (781) hide show
  1. package/api-report/tree.alpha.api.md +1 -0
  2. package/dist/core/change-family/changeFamily.d.ts +4 -1
  3. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  4. package/dist/core/change-family/changeFamily.js.map +1 -1
  5. package/dist/core/change-family/index.d.ts +1 -1
  6. package/dist/core/change-family/index.d.ts.map +1 -1
  7. package/dist/core/change-family/index.js.map +1 -1
  8. package/dist/core/index.d.ts +3 -3
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +6 -4
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/core/rebase/changeRebaser.d.ts +6 -1
  13. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  14. package/dist/core/rebase/changeRebaser.js.map +1 -1
  15. package/dist/core/rebase/index.d.ts +1 -1
  16. package/dist/core/rebase/index.d.ts.map +1 -1
  17. package/dist/core/rebase/index.js +2 -1
  18. package/dist/core/rebase/index.js.map +1 -1
  19. package/dist/core/rebase/types.d.ts +1 -0
  20. package/dist/core/rebase/types.d.ts.map +1 -1
  21. package/dist/core/rebase/types.js +5 -1
  22. package/dist/core/rebase/types.js.map +1 -1
  23. package/dist/core/rebase/utils.d.ts.map +1 -1
  24. package/dist/core/rebase/utils.js +25 -7
  25. package/dist/core/rebase/utils.js.map +1 -1
  26. package/dist/core/tree/delta.d.ts +5 -0
  27. package/dist/core/tree/delta.d.ts.map +1 -1
  28. package/dist/core/tree/delta.js.map +1 -1
  29. package/dist/core/tree/detachedFieldIndex.d.ts +13 -1
  30. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  31. package/dist/core/tree/detachedFieldIndex.js +14 -1
  32. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  33. package/dist/core/tree/detachedFieldIndexTypes.d.ts +4 -0
  34. package/dist/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  35. package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
  36. package/dist/core/tree/index.d.ts +2 -2
  37. package/dist/core/tree/index.d.ts.map +1 -1
  38. package/dist/core/tree/index.js +4 -3
  39. package/dist/core/tree/index.js.map +1 -1
  40. package/dist/core/tree/pathTree.d.ts +11 -3
  41. package/dist/core/tree/pathTree.d.ts.map +1 -1
  42. package/dist/core/tree/pathTree.js +14 -2
  43. package/dist/core/tree/pathTree.js.map +1 -1
  44. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  45. package/dist/core/tree/visitDelta.js +17 -13
  46. package/dist/core/tree/visitDelta.js.map +1 -1
  47. package/dist/feature-libraries/changeAtomIdBTree.d.ts +3 -2
  48. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  49. package/dist/feature-libraries/changeAtomIdBTree.js +15 -2
  50. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  51. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +92 -44
  52. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  53. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +220 -70
  54. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  55. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  56. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +12 -2
  57. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  58. package/dist/feature-libraries/default-schema/index.d.ts +2 -1
  59. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  60. package/dist/feature-libraries/default-schema/index.js +4 -2
  61. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  62. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +40 -0
  63. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
  64. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js +153 -0
  65. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
  66. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
  67. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  68. package/dist/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
  69. package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  70. package/dist/feature-libraries/deltaUtils.d.ts +1 -0
  71. package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
  72. package/dist/feature-libraries/deltaUtils.js +6 -1
  73. package/dist/feature-libraries/deltaUtils.js.map +1 -1
  74. package/dist/feature-libraries/flex-tree/context.d.ts +9 -0
  75. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  76. package/dist/feature-libraries/flex-tree/context.js +6 -0
  77. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  78. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  79. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  80. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  81. package/dist/feature-libraries/flex-tree/lazyField.d.ts +8 -7
  82. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  83. package/dist/feature-libraries/flex-tree/lazyField.js +39 -8
  84. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  85. package/dist/feature-libraries/index.d.ts +3 -3
  86. package/dist/feature-libraries/index.d.ts.map +1 -1
  87. package/dist/feature-libraries/index.js +8 -4
  88. package/dist/feature-libraries/index.js.map +1 -1
  89. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  90. package/dist/feature-libraries/mitigatedChangeFamily.js +2 -2
  91. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  92. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +100 -24
  93. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  94. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +8 -12
  95. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  96. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +85 -51
  97. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  98. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  99. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  100. package/dist/feature-libraries/modular-schema/genericFieldKind.js +4 -9
  101. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  102. package/dist/feature-libraries/modular-schema/index.d.ts +3 -3
  103. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  104. package/dist/feature-libraries/modular-schema/index.js +2 -3
  105. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  106. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +18 -22
  107. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  108. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +276 -158
  109. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  110. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  111. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  112. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  113. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
  114. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
  115. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js +296 -0
  116. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
  117. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -0
  118. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  119. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +8 -0
  120. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  121. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +56 -22
  122. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  123. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +1390 -462
  124. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  125. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  126. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  127. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +1 -2
  128. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  129. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js +3 -3
  130. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  131. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +74 -0
  132. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
  133. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js +35 -0
  134. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
  135. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +49 -10
  136. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  137. package/dist/feature-libraries/modular-schema/modularChangeTypes.js +3 -3
  138. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  139. package/dist/feature-libraries/optional-field/optionalField.d.ts +13 -32
  140. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  141. package/dist/feature-libraries/optional-field/optionalField.js +257 -446
  142. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  143. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  144. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  145. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +31 -0
  146. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  147. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +31 -31
  148. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  149. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  150. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  151. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  152. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +57 -28
  153. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  154. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  155. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  156. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +57 -0
  157. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  158. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  159. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  160. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  161. package/dist/feature-libraries/optional-field/requiredField.d.ts +3 -2
  162. package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  163. package/dist/feature-libraries/optional-field/requiredField.js +6 -1
  164. package/dist/feature-libraries/optional-field/requiredField.js.map +1 -1
  165. package/dist/feature-libraries/sequence-field/compose.d.ts +6 -7
  166. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  167. package/dist/feature-libraries/sequence-field/compose.js +81 -259
  168. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  169. package/dist/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
  170. package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  171. package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  172. package/dist/feature-libraries/sequence-field/invert.d.ts +3 -3
  173. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  174. package/dist/feature-libraries/sequence-field/invert.js +65 -167
  175. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  176. package/dist/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  177. package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  178. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  179. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
  180. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  181. package/dist/feature-libraries/sequence-field/moveEffectTable.js +7 -90
  182. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  183. package/dist/feature-libraries/sequence-field/rebase.d.ts +3 -3
  184. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  185. package/dist/feature-libraries/sequence-field/rebase.js +109 -116
  186. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  187. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  188. package/dist/feature-libraries/sequence-field/replaceRevisions.js +19 -32
  189. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  190. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  191. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +1 -2
  192. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  193. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
  194. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  195. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +388 -187
  196. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  197. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  198. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +20 -62
  199. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  200. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  201. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  202. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +13 -13
  203. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  204. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
  205. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  206. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +16 -111
  207. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  208. package/dist/feature-libraries/sequence-field/types.d.ts +37 -74
  209. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  210. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  211. package/dist/feature-libraries/sequence-field/utils.d.ts +20 -25
  212. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  213. package/dist/feature-libraries/sequence-field/utils.js +159 -320
  214. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  215. package/dist/packageVersion.d.ts +1 -1
  216. package/dist/packageVersion.d.ts.map +1 -1
  217. package/dist/packageVersion.js +1 -1
  218. package/dist/packageVersion.js.map +1 -1
  219. package/dist/shared-tree/independentView.d.ts.map +1 -1
  220. package/dist/shared-tree/independentView.js +1 -1
  221. package/dist/shared-tree/independentView.js.map +1 -1
  222. package/dist/shared-tree/index.d.ts +1 -1
  223. package/dist/shared-tree/index.d.ts.map +1 -1
  224. package/dist/shared-tree/index.js.map +1 -1
  225. package/dist/shared-tree/schematizeTree.d.ts +4 -4
  226. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  227. package/dist/shared-tree/schematizeTree.js +2 -1
  228. package/dist/shared-tree/schematizeTree.js.map +1 -1
  229. package/dist/shared-tree/schematizingTreeView.d.ts +1 -5
  230. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  231. package/dist/shared-tree/schematizingTreeView.js +21 -35
  232. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  233. package/dist/shared-tree/sharedTree.d.ts +9 -3
  234. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  235. package/dist/shared-tree/sharedTree.js +4 -1
  236. package/dist/shared-tree/sharedTree.js.map +1 -1
  237. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -0
  238. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  239. package/dist/shared-tree/sharedTreeChangeCodecs.js +8 -0
  240. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  241. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +4 -4
  242. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  243. package/dist/shared-tree/sharedTreeChangeFamily.js +2 -2
  244. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  245. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
  246. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  247. package/dist/shared-tree/sharedTreeEditBuilder.js +14 -7
  248. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  249. package/dist/shared-tree/treeCheckout.d.ts +13 -11
  250. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  251. package/dist/shared-tree/treeCheckout.js +56 -6
  252. package/dist/shared-tree/treeCheckout.js.map +1 -1
  253. package/dist/shared-tree-core/branch.d.ts +3 -2
  254. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  255. package/dist/shared-tree-core/branch.js +4 -3
  256. package/dist/shared-tree-core/branch.js.map +1 -1
  257. package/dist/shared-tree-core/editManager.d.ts +2 -2
  258. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  259. package/dist/shared-tree-core/editManager.js +9 -9
  260. package/dist/shared-tree-core/editManager.js.map +1 -1
  261. package/dist/shared-tree-core/editManagerCodecs.d.ts +4 -0
  262. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  263. package/dist/shared-tree-core/editManagerCodecs.js +10 -2
  264. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  265. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  266. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  267. package/dist/shared-tree-core/editManagerFormatCommons.js +6 -0
  268. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  269. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  270. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  271. package/dist/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  272. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  273. package/dist/shared-tree-core/index.d.ts +2 -2
  274. package/dist/shared-tree-core/index.d.ts.map +1 -1
  275. package/dist/shared-tree-core/index.js +3 -1
  276. package/dist/shared-tree-core/index.js.map +1 -1
  277. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  278. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  279. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  280. package/dist/shared-tree-core/messageCodecs.d.ts +4 -0
  281. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  282. package/dist/shared-tree-core/messageCodecs.js +10 -2
  283. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  284. package/dist/shared-tree-core/messageFormat.d.ts +1 -0
  285. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  286. package/dist/shared-tree-core/messageFormat.js +6 -0
  287. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  288. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  289. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  290. package/dist/shared-tree-core/messageFormatV1ToV4.js +1 -0
  291. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  292. package/dist/shared-tree-core/sharedTreeCore.d.ts +1 -0
  293. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  294. package/dist/shared-tree-core/sharedTreeCore.js +1 -1
  295. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  296. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +16 -12
  297. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  298. package/dist/simple-tree/core/unhydratedFlexTree.js +59 -8
  299. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  300. package/dist/simple-tree/fieldSchema.d.ts +4 -4
  301. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  302. package/dist/simple-tree/fieldSchema.js.map +1 -1
  303. package/dist/simple-tree/index.d.ts +2 -2
  304. package/dist/simple-tree/index.d.ts.map +1 -1
  305. package/dist/simple-tree/index.js +1 -1
  306. package/dist/simple-tree/index.js.map +1 -1
  307. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  308. package/dist/simple-tree/node-kinds/array/arrayNode.js +5 -3
  309. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  310. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
  311. package/dist/simple-tree/node-kinds/common.js +1 -1
  312. package/dist/simple-tree/node-kinds/common.js.map +1 -1
  313. package/dist/simple-tree/node-kinds/map/mapNode.js +2 -2
  314. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  315. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  316. package/dist/simple-tree/node-kinds/object/objectNode.js +19 -19
  317. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  318. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  319. package/dist/simple-tree/node-kinds/record/recordNode.js +4 -2
  320. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  321. package/dist/simple-tree/prepareForInsertion.d.ts +54 -47
  322. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  323. package/dist/simple-tree/prepareForInsertion.js +183 -125
  324. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  325. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +8 -3
  326. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  327. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +27 -13
  328. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  329. package/dist/treeFactory.d.ts.map +1 -1
  330. package/dist/treeFactory.js +12 -2
  331. package/dist/treeFactory.js.map +1 -1
  332. package/dist/util/index.d.ts +1 -1
  333. package/dist/util/index.d.ts.map +1 -1
  334. package/dist/util/index.js +2 -1
  335. package/dist/util/index.js.map +1 -1
  336. package/dist/util/rangeMap.d.ts +23 -11
  337. package/dist/util/rangeMap.d.ts.map +1 -1
  338. package/dist/util/rangeMap.js +43 -10
  339. package/dist/util/rangeMap.js.map +1 -1
  340. package/lib/core/change-family/changeFamily.d.ts +4 -1
  341. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  342. package/lib/core/change-family/changeFamily.js.map +1 -1
  343. package/lib/core/change-family/index.d.ts +1 -1
  344. package/lib/core/change-family/index.d.ts.map +1 -1
  345. package/lib/core/change-family/index.js.map +1 -1
  346. package/lib/core/index.d.ts +3 -3
  347. package/lib/core/index.d.ts.map +1 -1
  348. package/lib/core/index.js +2 -2
  349. package/lib/core/index.js.map +1 -1
  350. package/lib/core/rebase/changeRebaser.d.ts +6 -1
  351. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  352. package/lib/core/rebase/changeRebaser.js.map +1 -1
  353. package/lib/core/rebase/index.d.ts +1 -1
  354. package/lib/core/rebase/index.d.ts.map +1 -1
  355. package/lib/core/rebase/index.js +1 -1
  356. package/lib/core/rebase/index.js.map +1 -1
  357. package/lib/core/rebase/types.d.ts +1 -0
  358. package/lib/core/rebase/types.d.ts.map +1 -1
  359. package/lib/core/rebase/types.js +3 -0
  360. package/lib/core/rebase/types.js.map +1 -1
  361. package/lib/core/rebase/utils.d.ts.map +1 -1
  362. package/lib/core/rebase/utils.js +25 -7
  363. package/lib/core/rebase/utils.js.map +1 -1
  364. package/lib/core/tree/delta.d.ts +5 -0
  365. package/lib/core/tree/delta.d.ts.map +1 -1
  366. package/lib/core/tree/delta.js.map +1 -1
  367. package/lib/core/tree/detachedFieldIndex.d.ts +13 -1
  368. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  369. package/lib/core/tree/detachedFieldIndex.js +15 -2
  370. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  371. package/lib/core/tree/detachedFieldIndexTypes.d.ts +4 -0
  372. package/lib/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  373. package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
  374. package/lib/core/tree/index.d.ts +2 -2
  375. package/lib/core/tree/index.d.ts.map +1 -1
  376. package/lib/core/tree/index.js +1 -1
  377. package/lib/core/tree/index.js.map +1 -1
  378. package/lib/core/tree/pathTree.d.ts +11 -3
  379. package/lib/core/tree/pathTree.d.ts.map +1 -1
  380. package/lib/core/tree/pathTree.js +12 -1
  381. package/lib/core/tree/pathTree.js.map +1 -1
  382. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  383. package/lib/core/tree/visitDelta.js +17 -13
  384. package/lib/core/tree/visitDelta.js.map +1 -1
  385. package/lib/feature-libraries/changeAtomIdBTree.d.ts +3 -2
  386. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  387. package/lib/feature-libraries/changeAtomIdBTree.js +15 -3
  388. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  389. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +92 -44
  390. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  391. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +217 -69
  392. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  393. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  394. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +12 -2
  395. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  396. package/lib/feature-libraries/default-schema/index.d.ts +2 -1
  397. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  398. package/lib/feature-libraries/default-schema/index.js +2 -1
  399. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  400. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +40 -0
  401. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
  402. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js +149 -0
  403. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
  404. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
  405. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  406. package/lib/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
  407. package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  408. package/lib/feature-libraries/deltaUtils.d.ts +1 -0
  409. package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
  410. package/lib/feature-libraries/deltaUtils.js +5 -1
  411. package/lib/feature-libraries/deltaUtils.js.map +1 -1
  412. package/lib/feature-libraries/flex-tree/context.d.ts +9 -0
  413. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  414. package/lib/feature-libraries/flex-tree/context.js +6 -0
  415. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  416. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  417. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  418. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  419. package/lib/feature-libraries/flex-tree/lazyField.d.ts +8 -7
  420. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  421. package/lib/feature-libraries/flex-tree/lazyField.js +40 -9
  422. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  423. package/lib/feature-libraries/index.d.ts +3 -3
  424. package/lib/feature-libraries/index.d.ts.map +1 -1
  425. package/lib/feature-libraries/index.js +3 -3
  426. package/lib/feature-libraries/index.js.map +1 -1
  427. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  428. package/lib/feature-libraries/mitigatedChangeFamily.js +2 -2
  429. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  430. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +100 -24
  431. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  432. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +7 -10
  433. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  434. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +85 -51
  435. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  436. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  437. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  438. package/lib/feature-libraries/modular-schema/genericFieldKind.js +4 -9
  439. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  440. package/lib/feature-libraries/modular-schema/index.d.ts +3 -3
  441. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  442. package/lib/feature-libraries/modular-schema/index.js +1 -1
  443. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  444. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +18 -22
  445. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  446. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +267 -144
  447. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  448. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  449. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  450. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  451. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
  452. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
  453. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js +292 -0
  454. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
  455. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -0
  456. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  457. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +8 -0
  458. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  459. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +56 -22
  460. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  461. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +1387 -468
  462. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  463. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  464. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  465. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +1 -2
  466. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  467. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js +1 -1
  468. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  469. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +74 -0
  470. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
  471. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js +32 -0
  472. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
  473. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +49 -10
  474. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  475. package/lib/feature-libraries/modular-schema/modularChangeTypes.js +1 -1
  476. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  477. package/lib/feature-libraries/optional-field/optionalField.d.ts +13 -32
  478. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  479. package/lib/feature-libraries/optional-field/optionalField.js +254 -442
  480. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  481. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  482. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  483. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +27 -0
  484. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  485. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +31 -31
  486. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  487. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  488. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  489. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  490. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +55 -26
  491. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  492. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  493. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  494. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +53 -0
  495. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  496. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  497. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  498. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  499. package/lib/feature-libraries/optional-field/requiredField.d.ts +3 -2
  500. package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  501. package/lib/feature-libraries/optional-field/requiredField.js +5 -1
  502. package/lib/feature-libraries/optional-field/requiredField.js.map +1 -1
  503. package/lib/feature-libraries/sequence-field/compose.d.ts +6 -7
  504. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  505. package/lib/feature-libraries/sequence-field/compose.js +83 -261
  506. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  507. package/lib/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
  508. package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  509. package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  510. package/lib/feature-libraries/sequence-field/invert.d.ts +3 -3
  511. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  512. package/lib/feature-libraries/sequence-field/invert.js +67 -169
  513. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  514. package/lib/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  515. package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  516. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  517. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
  518. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  519. package/lib/feature-libraries/sequence-field/moveEffectTable.js +6 -84
  520. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  521. package/lib/feature-libraries/sequence-field/rebase.d.ts +3 -3
  522. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  523. package/lib/feature-libraries/sequence-field/rebase.js +111 -118
  524. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  525. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  526. package/lib/feature-libraries/sequence-field/replaceRevisions.js +19 -32
  527. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  528. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  529. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -3
  530. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  531. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
  532. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  533. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +379 -182
  534. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  535. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  536. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +21 -63
  537. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  538. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  539. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  540. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +13 -13
  541. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  542. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
  543. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  544. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +16 -111
  545. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  546. package/lib/feature-libraries/sequence-field/types.d.ts +37 -74
  547. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  548. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  549. package/lib/feature-libraries/sequence-field/utils.d.ts +20 -25
  550. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  551. package/lib/feature-libraries/sequence-field/utils.js +155 -313
  552. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  553. package/lib/packageVersion.d.ts +1 -1
  554. package/lib/packageVersion.d.ts.map +1 -1
  555. package/lib/packageVersion.js +1 -1
  556. package/lib/packageVersion.js.map +1 -1
  557. package/lib/shared-tree/independentView.d.ts.map +1 -1
  558. package/lib/shared-tree/independentView.js +1 -1
  559. package/lib/shared-tree/independentView.js.map +1 -1
  560. package/lib/shared-tree/index.d.ts +1 -1
  561. package/lib/shared-tree/index.d.ts.map +1 -1
  562. package/lib/shared-tree/index.js.map +1 -1
  563. package/lib/shared-tree/schematizeTree.d.ts +4 -4
  564. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  565. package/lib/shared-tree/schematizeTree.js +3 -2
  566. package/lib/shared-tree/schematizeTree.js.map +1 -1
  567. package/lib/shared-tree/schematizingTreeView.d.ts +1 -5
  568. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  569. package/lib/shared-tree/schematizingTreeView.js +24 -38
  570. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  571. package/lib/shared-tree/sharedTree.d.ts +9 -3
  572. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  573. package/lib/shared-tree/sharedTree.js +4 -1
  574. package/lib/shared-tree/sharedTree.js.map +1 -1
  575. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -0
  576. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  577. package/lib/shared-tree/sharedTreeChangeCodecs.js +8 -0
  578. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  579. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +4 -4
  580. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  581. package/lib/shared-tree/sharedTreeChangeFamily.js +3 -3
  582. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  583. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
  584. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  585. package/lib/shared-tree/sharedTreeEditBuilder.js +12 -6
  586. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  587. package/lib/shared-tree/treeCheckout.d.ts +13 -11
  588. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  589. package/lib/shared-tree/treeCheckout.js +59 -9
  590. package/lib/shared-tree/treeCheckout.js.map +1 -1
  591. package/lib/shared-tree-core/branch.d.ts +3 -2
  592. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  593. package/lib/shared-tree-core/branch.js +4 -3
  594. package/lib/shared-tree-core/branch.js.map +1 -1
  595. package/lib/shared-tree-core/editManager.d.ts +2 -2
  596. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  597. package/lib/shared-tree-core/editManager.js +9 -9
  598. package/lib/shared-tree-core/editManager.js.map +1 -1
  599. package/lib/shared-tree-core/editManagerCodecs.d.ts +4 -0
  600. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  601. package/lib/shared-tree-core/editManagerCodecs.js +8 -1
  602. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  603. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  604. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  605. package/lib/shared-tree-core/editManagerFormatCommons.js +6 -0
  606. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  607. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  608. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  609. package/lib/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  610. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  611. package/lib/shared-tree-core/index.d.ts +2 -2
  612. package/lib/shared-tree-core/index.d.ts.map +1 -1
  613. package/lib/shared-tree-core/index.js +2 -2
  614. package/lib/shared-tree-core/index.js.map +1 -1
  615. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  616. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  617. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  618. package/lib/shared-tree-core/messageCodecs.d.ts +4 -0
  619. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  620. package/lib/shared-tree-core/messageCodecs.js +8 -1
  621. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  622. package/lib/shared-tree-core/messageFormat.d.ts +1 -0
  623. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  624. package/lib/shared-tree-core/messageFormat.js +6 -0
  625. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  626. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  627. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  628. package/lib/shared-tree-core/messageFormatV1ToV4.js +1 -0
  629. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  630. package/lib/shared-tree-core/sharedTreeCore.d.ts +1 -0
  631. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  632. package/lib/shared-tree-core/sharedTreeCore.js +1 -1
  633. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  634. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +16 -12
  635. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  636. package/lib/simple-tree/core/unhydratedFlexTree.js +58 -8
  637. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  638. package/lib/simple-tree/fieldSchema.d.ts +4 -4
  639. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  640. package/lib/simple-tree/fieldSchema.js.map +1 -1
  641. package/lib/simple-tree/index.d.ts +2 -2
  642. package/lib/simple-tree/index.d.ts.map +1 -1
  643. package/lib/simple-tree/index.js +1 -1
  644. package/lib/simple-tree/index.js.map +1 -1
  645. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  646. package/lib/simple-tree/node-kinds/array/arrayNode.js +6 -4
  647. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  648. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
  649. package/lib/simple-tree/node-kinds/common.js +2 -2
  650. package/lib/simple-tree/node-kinds/common.js.map +1 -1
  651. package/lib/simple-tree/node-kinds/map/mapNode.js +2 -2
  652. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  653. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  654. package/lib/simple-tree/node-kinds/object/objectNode.js +20 -20
  655. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  656. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  657. package/lib/simple-tree/node-kinds/record/recordNode.js +4 -2
  658. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  659. package/lib/simple-tree/prepareForInsertion.d.ts +54 -47
  660. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  661. package/lib/simple-tree/prepareForInsertion.js +184 -125
  662. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  663. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +8 -3
  664. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  665. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +23 -10
  666. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  667. package/lib/treeFactory.d.ts.map +1 -1
  668. package/lib/treeFactory.js +13 -3
  669. package/lib/treeFactory.js.map +1 -1
  670. package/lib/util/index.d.ts +1 -1
  671. package/lib/util/index.d.ts.map +1 -1
  672. package/lib/util/index.js +1 -1
  673. package/lib/util/index.js.map +1 -1
  674. package/lib/util/rangeMap.d.ts +23 -11
  675. package/lib/util/rangeMap.d.ts.map +1 -1
  676. package/lib/util/rangeMap.js +41 -9
  677. package/lib/util/rangeMap.js.map +1 -1
  678. package/package.json +21 -21
  679. package/src/core/change-family/changeFamily.ts +5 -0
  680. package/src/core/change-family/index.ts +1 -0
  681. package/src/core/index.ts +4 -1
  682. package/src/core/rebase/changeRebaser.ts +6 -1
  683. package/src/core/rebase/index.ts +1 -0
  684. package/src/core/rebase/types.ts +4 -0
  685. package/src/core/rebase/utils.ts +31 -7
  686. package/src/core/tree/delta.ts +6 -0
  687. package/src/core/tree/detachedFieldIndex.ts +29 -1
  688. package/src/core/tree/detachedFieldIndexTypes.ts +5 -0
  689. package/src/core/tree/index.ts +13 -12
  690. package/src/core/tree/pathTree.ts +16 -4
  691. package/src/core/tree/visitDelta.ts +31 -11
  692. package/src/feature-libraries/changeAtomIdBTree.ts +28 -3
  693. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +369 -127
  694. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +13 -4
  695. package/src/feature-libraries/default-schema/index.ts +16 -5
  696. package/src/feature-libraries/default-schema/locationBasedEditBuilder.ts +231 -0
  697. package/src/feature-libraries/default-schema/mappedEditBuilder.ts +35 -9
  698. package/src/feature-libraries/deltaUtils.ts +6 -1
  699. package/src/feature-libraries/flex-tree/context.ts +17 -0
  700. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +7 -8
  701. package/src/feature-libraries/flex-tree/lazyField.ts +65 -24
  702. package/src/feature-libraries/index.ts +22 -9
  703. package/src/feature-libraries/mitigatedChangeFamily.ts +3 -1
  704. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +144 -47
  705. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +113 -58
  706. package/src/feature-libraries/modular-schema/genericFieldKind.ts +7 -18
  707. package/src/feature-libraries/modular-schema/index.ts +16 -16
  708. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +623 -348
  709. package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +1 -0
  710. package/src/feature-libraries/modular-schema/modularChangeCodecV3.ts +649 -0
  711. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +14 -0
  712. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +2694 -748
  713. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +1 -0
  714. package/src/feature-libraries/modular-schema/modularChangeFormatV2.ts +1 -1
  715. package/src/feature-libraries/modular-schema/modularChangeFormatV3.ts +67 -0
  716. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +62 -10
  717. package/src/feature-libraries/optional-field/optionalField.ts +359 -568
  718. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +45 -0
  719. package/src/feature-libraries/optional-field/optionalFieldChangeTypes.ts +31 -35
  720. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +89 -35
  721. package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +94 -0
  722. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -1
  723. package/src/feature-libraries/optional-field/requiredField.ts +15 -2
  724. package/src/feature-libraries/sequence-field/compose.ts +137 -522
  725. package/src/feature-libraries/sequence-field/helperTypes.ts +34 -19
  726. package/src/feature-libraries/sequence-field/invert.ts +102 -228
  727. package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
  728. package/src/feature-libraries/sequence-field/moveEffectTable.ts +8 -195
  729. package/src/feature-libraries/sequence-field/rebase.ts +171 -207
  730. package/src/feature-libraries/sequence-field/replaceRevisions.ts +26 -52
  731. package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +8 -3
  732. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +677 -229
  733. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +56 -70
  734. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +28 -30
  735. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +21 -131
  736. package/src/feature-libraries/sequence-field/types.ts +40 -79
  737. package/src/feature-libraries/sequence-field/utils.ts +211 -370
  738. package/src/packageVersion.ts +1 -1
  739. package/src/shared-tree/independentView.ts +12 -6
  740. package/src/shared-tree/index.ts +3 -2
  741. package/src/shared-tree/schematizeTree.ts +21 -8
  742. package/src/shared-tree/schematizingTreeView.ts +38 -68
  743. package/src/shared-tree/sharedTree.ts +30 -15
  744. package/src/shared-tree/sharedTreeChangeCodecs.ts +8 -0
  745. package/src/shared-tree/sharedTreeChangeFamily.ts +7 -4
  746. package/src/shared-tree/sharedTreeEditBuilder.ts +43 -8
  747. package/src/shared-tree/treeCheckout.ts +93 -17
  748. package/src/shared-tree-core/branch.ts +8 -2
  749. package/src/shared-tree-core/editManager.ts +16 -2
  750. package/src/shared-tree-core/editManagerCodecs.ts +11 -1
  751. package/src/shared-tree-core/editManagerFormatCommons.ts +6 -0
  752. package/src/shared-tree-core/editManagerFormatV1toV4.ts +3 -1
  753. package/src/shared-tree-core/index.ts +2 -0
  754. package/src/shared-tree-core/messageCodecV1ToV4.ts +2 -1
  755. package/src/shared-tree-core/messageCodecs.ts +11 -1
  756. package/src/shared-tree-core/messageFormat.ts +6 -0
  757. package/src/shared-tree-core/messageFormatV1ToV4.ts +3 -1
  758. package/src/shared-tree-core/sharedTreeCore.ts +4 -1
  759. package/src/simple-tree/core/unhydratedFlexTree.ts +82 -35
  760. package/src/simple-tree/fieldSchema.ts +6 -4
  761. package/src/simple-tree/index.ts +2 -1
  762. package/src/simple-tree/node-kinds/array/arrayNode.ts +7 -5
  763. package/src/simple-tree/node-kinds/common.ts +2 -5
  764. package/src/simple-tree/node-kinds/map/mapNode.ts +4 -4
  765. package/src/simple-tree/node-kinds/object/objectNode.ts +26 -26
  766. package/src/simple-tree/node-kinds/record/recordNode.ts +10 -9
  767. package/src/simple-tree/prepareForInsertion.ts +342 -200
  768. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +35 -15
  769. package/src/treeFactory.ts +16 -4
  770. package/src/util/index.ts +3 -0
  771. package/src/util/rangeMap.ts +68 -26
  772. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
  773. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
  774. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -50
  775. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
  776. package/docs/main/sequence-field/move-composition.md +0 -46
  777. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
  778. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
  779. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -46
  780. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
  781. package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +0 -57
@@ -19,14 +19,15 @@ import { assert, unreachableCase, fail } from "@fluidframework/core-utils/intern
19
19
  import { isStableId } from "@fluidframework/id-compressor/internal";
20
20
  import { UsageError, } from "@fluidframework/telemetry-utils/internal";
21
21
  import { FluidClientVersion, FormatValidatorNoOp, } from "../codec/index.js";
22
- import { AnchorSet, CommitKind, RevertibleStatus, TreeStoredSchemaRepository, combineVisitors, makeDetachedFieldIndex, rebaseChange, rootFieldKey, tagChange, visitDelta, isAncestor, moveToDetachedField, LeafNodeStoredSchema, diffHistories, makeAnonChange, } from "../core/index.js";
23
- import { allowsRepoSuperset, buildForest, createNodeIdentifierManager, defaultSchemaPolicy, intoDelta, jsonableTreeFromCursor, makeFieldBatchCodec, } from "../feature-libraries/index.js";
22
+ import { AnchorSet, CommitKind, RevertibleStatus, TreeStoredSchemaRepository, combineVisitors, makeDetachedFieldIndex, rebaseChange, rootFieldKey, tagChange, visitDelta, isAncestor, moveToDetachedField, LeafNodeStoredSchema, offsetChangeAtomId, diffHistories, makeAnonChange, } from "../core/index.js";
23
+ import { allowsRepoSuperset, buildForest, changeAtomFromDetachedNodeId, createNodeIdentifierManager, defaultSchemaPolicy, intoDelta, jsonableTreeFromCursor, makeFieldBatchCodec, nodeIdFromChangeAtom, } from "../feature-libraries/index.js";
24
24
  import { SquashingTransactionStack, SharedTreeBranch, TransactionResult, onForkTransitive, } from "../shared-tree-core/index.js";
25
25
  import { customFromCursorStored, } from "../simple-tree/index.js";
26
- import { Breakable, disposeSymbol, getOrCreate, hasSome, } from "../util/index.js";
26
+ import { Breakable, disposeSymbol, getOrCreate, hasSome, makeArray, } from "../util/index.js";
27
27
  import { getCheckout, SchematizingSimpleTreeView } from "./schematizingTreeView.js";
28
28
  import { SharedTreeChangeEnricher } from "./sharedTreeChangeEnricher.js";
29
29
  import { SharedTreeChangeFamily, hasSchemaChange } from "./sharedTreeChangeFamily.js";
30
+ import { LocationBasedSharedTreeEditBuilder, } from "./sharedTreeEditBuilder.js";
30
31
  /**
31
32
  * Creates a {@link TreeCheckout}.
32
33
  * @param args - an object containing optional components that will be used to build the view.
@@ -34,7 +35,7 @@ import { SharedTreeChangeFamily, hasSchemaChange } from "./sharedTreeChangeFamil
34
35
  * @remarks This does not create a {@link SharedTree}, but rather a view with the minimal state
35
36
  * and functionality required to implement {@link ITreeCheckout}.
36
37
  */
37
- export function createTreeCheckout(idCompressor, mintRevisionTag, revisionTagCodec, args) {
38
+ export function createTreeCheckout(idCompressor, mintRevisionTag, revisionTagCodec, editorOptions, args) {
38
39
  const breaker = args?.breaker ?? new Breakable("TreeCheckout");
39
40
  const schema = args?.schema ?? new TreeStoredSchemaRepository();
40
41
  const forest = args?.forest ?? buildForest(breaker, schema);
@@ -52,7 +53,7 @@ export function createTreeCheckout(idCompressor, mintRevisionTag, revisionTagCod
52
53
  change: changeFamily.rebaser.compose([]),
53
54
  revision: "root",
54
55
  }, changeFamily, () => idCompressor.generateCompressedId());
55
- return new TreeCheckout(branch, true, changeFamily, schema, forest, mintRevisionTag, revisionTagCodec, idCompressor, args?.removedRoots, args?.logger, breaker, args?.disposeForksAfterTransaction);
56
+ return new TreeCheckout(branch, true, changeFamily, schema, forest, mintRevisionTag, revisionTagCodec, idCompressor, editorOptions, args?.removedRoots, args?.logger, breaker, args?.disposeForksAfterTransaction);
56
57
  }
57
58
  /**
58
59
  * An implementation of {@link ITreeCheckoutFork}.
@@ -60,7 +61,7 @@ export function createTreeCheckout(idCompressor, mintRevisionTag, revisionTagCod
60
61
  export class TreeCheckout {
61
62
  constructor(branch,
62
63
  /** True if and only if this checkout is for a branch which is persisted and shared with other clients. */
63
- isSharedBranch, changeFamily, storedSchema, forest, mintRevisionTag, revisionTagCodec, idCompressor, _removedRoots = makeDetachedFieldIndex("repair", revisionTagCodec, idCompressor),
64
+ isSharedBranch, changeFamily, storedSchema, forest, mintRevisionTag, revisionTagCodec, idCompressor, editorOptions, _removedRoots = makeDetachedFieldIndex("repair", revisionTagCodec, idCompressor),
64
65
  /** Optional logger for telemetry. */
65
66
  logger, breaker = new Breakable("TreeCheckout"), disposeForksAfterTransaction = true) {
66
67
  this.isSharedBranch = isSharedBranch;
@@ -70,6 +71,7 @@ export class TreeCheckout {
70
71
  this.mintRevisionTag = mintRevisionTag;
71
72
  this.revisionTagCodec = revisionTagCodec;
72
73
  this.idCompressor = idCompressor;
74
+ this.editorOptions = editorOptions;
73
75
  this._removedRoots = _removedRoots;
74
76
  this.logger = logger;
75
77
  this.breaker = breaker;
@@ -201,6 +203,34 @@ export class TreeCheckout {
201
203
  this.enrichmentStats = { batches: 0, diffs: 0, commitsEnriched: 0, refreshers: 0, forks: 0, applied: 0 };
202
204
  __classPrivateFieldSet(this, _TreeCheckout_transaction, this.createTransactionStack(branch), "f");
203
205
  this.editLock = new EditLock(__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEditor);
206
+ this.locator = {
207
+ locationFromId: (id) => {
208
+ const rootId = this.removedRoots.getEntry(nodeIdFromChangeAtom(id));
209
+ return this.removedRoots.toFieldKey(rootId);
210
+ },
211
+ idFromLocation: (location) => {
212
+ const nodeId = this.removedRoots.fromFieldKey(location);
213
+ return changeAtomFromDetachedNodeId(nodeId);
214
+ },
215
+ locationsFromIdRanges: (ids) => {
216
+ return ids.flatMap((id) => {
217
+ return makeArray(id.count, (offset) => {
218
+ const field = this.locator.locationFromId(offsetChangeAtomId(id.first, offset));
219
+ return { field, count: 1 };
220
+ });
221
+ });
222
+ },
223
+ idRangesFromLocations: (ids) => {
224
+ return ids.map((id) => {
225
+ assert(id.count === 1, "Expected count of 1");
226
+ const first = this.locator.idFromLocation(id.field);
227
+ return { first, count: id.count };
228
+ });
229
+ },
230
+ isAttachable: (id) => {
231
+ return this.removedRoots.isAttachable(nodeIdFromChangeAtom(id));
232
+ },
233
+ };
204
234
  this.registerForBranchEvents();
205
235
  }
206
236
  /**
@@ -432,7 +462,7 @@ export class TreeCheckout {
432
462
  }
433
463
  get editor() {
434
464
  this.checkNotDisposed();
435
- return this.editLock.editor;
465
+ return new LocationBasedSharedTreeEditBuilder(this.editLock.editor, this.locator, this.editorOptions);
436
466
  }
437
467
  locate(anchor) {
438
468
  this.checkNotDisposed();
@@ -443,16 +473,16 @@ export class TreeCheckout {
443
473
  }
444
474
  branch() {
445
475
  this.checkNotDisposed("The parent branch has already been disposed and can no longer create new branches.");
476
+ this.editLock.checkUnlocked("Branching");
446
477
  // Branching after an unfinished transaction would expose the application to a state where its invariants may be violated.
447
478
  if (this.transaction.isInProgress()) {
448
479
  throw new UsageError("A view cannot be forked while it has a pending transaction.");
449
480
  }
450
- this.editLock.checkUnlocked("Branching");
451
481
  const anchors = new AnchorSet();
452
482
  const branch = __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.fork();
453
483
  const storedSchema = this.storedSchema.clone();
454
484
  const forest = this.forest.clone(storedSchema, anchors);
455
- const checkout = new TreeCheckout(branch, false, this.changeFamily, storedSchema, forest, this.mintRevisionTag, this.revisionTagCodec, this.idCompressor, this._removedRoots.clone(), this.logger, this.breaker, this.disposeForksAfterTransaction);
485
+ const checkout = new TreeCheckout(branch, false, this.changeFamily, storedSchema, forest, this.mintRevisionTag, this.revisionTagCodec, this.idCompressor, this.editorOptions, this._removedRoots.clone(), this.logger, this.breaker, this.disposeForksAfterTransaction);
456
486
  __classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("fork", checkout);
457
487
  return checkout;
458
488
  }
@@ -703,6 +733,10 @@ class EditLock {
703
733
  get schema() {
704
734
  return editor.schema;
705
735
  },
736
+ buildRoots(unhydrated) {
737
+ checkLock();
738
+ return editor.buildRoots(unhydrated);
739
+ },
706
740
  valueField(...fieldArgs) {
707
741
  const valueField = editor.valueField(...fieldArgs);
708
742
  return {
@@ -710,6 +744,10 @@ class EditLock {
710
744
  checkLock();
711
745
  valueField.set(...editArgs);
712
746
  },
747
+ attach(...editArgs) {
748
+ checkLock();
749
+ valueField.attach(...editArgs);
750
+ },
713
751
  };
714
752
  },
715
753
  optionalField(...fieldArgs) {
@@ -719,6 +757,14 @@ class EditLock {
719
757
  checkLock();
720
758
  optionalField.set(...editArgs);
721
759
  },
760
+ attach(...editArgs) {
761
+ checkLock();
762
+ optionalField.attach(...editArgs);
763
+ },
764
+ clear(...editArgs) {
765
+ checkLock();
766
+ optionalField.clear(...editArgs);
767
+ },
722
768
  };
723
769
  },
724
770
  sequenceField(...fieldArgs) {
@@ -728,6 +774,10 @@ class EditLock {
728
774
  checkLock();
729
775
  sequenceField.insert(...editArgs);
730
776
  },
777
+ attach(...editArgs) {
778
+ checkLock();
779
+ sequenceField.attach(...editArgs);
780
+ },
731
781
  remove(...editArgs) {
732
782
  checkLock();
733
783
  sequenceField.remove(...editArgs);
@@ -1 +1 @@
1
- {"version":3,"file":"treeCheckout.js","sourceRoot":"","sources":["../../src/shared-tree/treeCheckout.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 { createEmitter } from \"@fluid-internal/client-utils\";\nimport type { IDisposable } from \"@fluidframework/core-interfaces\";\nimport type { IFluidHandle, Listenable } from \"@fluidframework/core-interfaces/internal\";\nimport { assert, unreachableCase, fail } from \"@fluidframework/core-utils/internal\";\nimport type { IIdCompressor, SessionId } from \"@fluidframework/id-compressor\";\nimport { isStableId } from \"@fluidframework/id-compressor/internal\";\nimport {\n\tUsageError,\n\ttype ITelemetryLoggerExt,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport {\n\tFluidClientVersion,\n\tFormatValidatorNoOp,\n\ttype CodecWriteOptions,\n} from \"../codec/index.js\";\nimport {\n\ttype Anchor,\n\ttype AnchorLocator,\n\ttype AnchorNode,\n\tAnchorSet,\n\ttype AnchorSetRootEvents,\n\ttype ChangeFamily,\n\tCommitKind,\n\ttype DeltaVisitor,\n\ttype DetachedFieldIndex,\n\ttype IEditableForest,\n\ttype IForestSubscription,\n\ttype JsonableTree,\n\tRevertibleStatus,\n\ttype RevisionTag,\n\ttype RevisionTagCodec,\n\ttype TreeStoredSchema,\n\tTreeStoredSchemaRepository,\n\ttype TreeStoredSchemaSubscription,\n\tcombineVisitors,\n\tmakeDetachedFieldIndex,\n\trebaseChange,\n\trootFieldKey,\n\ttagChange,\n\tvisitDelta,\n\ttype RevertibleAlphaFactory,\n\ttype RevertibleAlpha,\n\ttype GraphCommit,\n\tisAncestor,\n\tmoveToDetachedField,\n\ttype ITreeCursor,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeNodeStoredSchema,\n\tLeafNodeStoredSchema,\n\tdiffHistories,\n\ttype ChangeMetadata,\n\ttype ChangeEncodingContext,\n\ttype ReadOnlyDetachedFieldIndex,\n\tmakeAnonChange,\n\ttype TaggedChange,\n} from \"../core/index.js\";\nimport {\n\ttype FieldBatchCodec,\n\ttype TreeCompressionStrategy,\n\tallowsRepoSuperset,\n\tbuildForest,\n\tcreateNodeIdentifierManager,\n\tdefaultSchemaPolicy,\n\tintoDelta,\n\tjsonableTreeFromCursor,\n\tmakeFieldBatchCodec,\n} from \"../feature-libraries/index.js\";\nimport {\n\tSquashingTransactionStack,\n\tSharedTreeBranch,\n\tTransactionResult,\n\tonForkTransitive,\n\ttype SharedTreeBranchChange,\n\ttype Transactor,\n} from \"../shared-tree-core/index.js\";\nimport {\n\ttype ImplicitFieldSchema,\n\ttype ReadSchema,\n\ttype TreeView,\n\ttype TreeViewConfiguration,\n\ttype UnsafeUnknownSchema,\n\ttype ViewableTree,\n\ttype TreeBranch,\n\ttype TreeChangeEvents,\n\ttype VerboseTree,\n\tcustomFromCursorStored,\n\ttype CustomTreeValue,\n\ttype CustomTreeNode,\n} from \"../simple-tree/index.js\";\nimport {\n\tBreakable,\n\tdisposeSymbol,\n\tgetOrCreate,\n\thasSome,\n\ttype JsonCompatibleReadOnly,\n\ttype WithBreakable,\n} from \"../util/index.js\";\n\nimport { getCheckout, SchematizingSimpleTreeView } from \"./schematizingTreeView.js\";\nimport { SharedTreeChangeEnricher } from \"./sharedTreeChangeEnricher.js\";\nimport { SharedTreeChangeFamily, hasSchemaChange } from \"./sharedTreeChangeFamily.js\";\nimport type { SharedTreeChange } from \"./sharedTreeChangeTypes.js\";\nimport type { ISharedTreeEditor, SharedTreeEditBuilder } from \"./sharedTreeEditBuilder.js\";\n\n/**\n * Events for {@link ITreeCheckout}.\n */\nexport interface CheckoutEvents {\n\t/**\n\t * The view is currently in a consistent state, but a batch of changes is about to be processed.\n\t * @remarks Once this event fires, it is not safe to access the FlexTree, Forest and AnchorSet again until the corresponding {@link CheckoutEvents.afterBatch} fires.\n\t * Every call to `beforeBatch` will be followed by a corresponding call to `afterBatch` (before any more calls to `beforeBatch`).\n\t * @param change - The {@link SharedTreeBranchChange | change} to the checkout's active branch that is about to be processed.\n\t * May be empty if the changes were produced by e.g. a rebase or the initial loading of the document.\n\t */\n\tbeforeBatch(change: SharedTreeBranchChange<SharedTreeChange>): void;\n\n\t/**\n\t * A batch of changes has finished processing and the view is in a consistent state.\n\t * @remarks It is once again safe to access the FlexTree, Forest and AnchorSet.\n\t *\n\t * While every call to `beforeBatch` will be followed by a corresponding call to `afterBatch`, the converse is not true.\n\t * This event may be fired without a preceding `beforeBatch` event if the checkout's branch and forest were directly updated via e.g. a summary load rather than via normal application of changes.\n\t * @remarks\n\t * This is mainly useful for knowing when to do followup work scheduled during events from Anchors.\n\t */\n\tafterBatch(): void;\n\n\t/**\n\t * Fired when a change is made to the branch. Includes data about the change that is made which listeners\n\t * can use to filter on changes they care about e.g. local vs remote changes.\n\t *\n\t * @param data - information about the change\n\t */\n\tchanged(data: ChangeMetadata, getRevertible?: RevertibleAlphaFactory): void;\n\n\t/**\n\t * Fired when a new branch is created from this checkout.\n\t */\n\tfork(branch: ITreeCheckout): void;\n\n\t/**\n\t * Fired when the checkout is disposed.\n\t */\n\tdispose(): void;\n}\n\n/**\n * A \"version control\"-style branch of a SharedTree.\n * @remarks Branches may be used to coordinate edits to a SharedTree, e.g. via merge and rebase operations.\n * Changes applied to a branch of a branch only apply to that branch and are isolated from other branches.\n * Changes may be synchronized across branches via merge and rebase operations provided on the branch object.\n * @alpha @sealed\n */\nexport interface BranchableTree extends ViewableTree {\n\t/**\n\t * Spawn a new branch which is based off of the current state of this branch.\n\t * Any mutations of the new branch will not apply to this branch until the new branch is merged back into this branch via `merge()`.\n\t */\n\tbranch(): TreeBranchFork;\n\n\t/**\n\t * Apply all the new changes on the given branch to this branch.\n\t * @param view - a branch which was created by a call to `branch()`.\n\t * It is automatically disposed after the merge completes.\n\t * @remarks All ongoing transactions (if any) in `branch` will be committed before the merge.\n\t * A \"changed\" event and a corresponding {@link Revertible} will be emitted on this branch for each new change merged from 'branch'.\n\t */\n\tmerge(branch: TreeBranchFork): void;\n\n\t/**\n\t * Apply all the new changes on the given branch to this branch.\n\t * @param branch - a branch which was created by a call to `branch()`.\n\t * @param disposeMerged - whether or not to dispose `branch` after the merge completes.\n\t * @remarks All ongoing transactions (if any) in `branch` will be committed before the merge.\n\t */\n\tmerge(branch: TreeBranchFork, disposeMerged: boolean): void;\n\n\t/**\n\t * Rebase the given branch onto this branch.\n\t * @param branch - a branch which was created by a call to `branch()`. It is modified by this operation.\n\t */\n\trebase(branch: TreeBranchFork): void;\n}\n\n/**\n * A {@link BranchableTree | branch} of a SharedTree that has merged from another branch.\n * @remarks This branch should be disposed when it is no longer needed in order to free resources.\n * @alpha @sealed\n */\nexport interface TreeBranchFork extends BranchableTree, IDisposable {\n\t/**\n\t * Rebase the changes that have been applied to this branch over all the new changes in the given branch.\n\t * @param branch - Either the root branch or a branch that was created by a call to `branch()`. It is not modified by this operation.\n\t */\n\trebaseOnto(branch: BranchableTree): void;\n}\n\n/**\n * Provides a means for interacting with a SharedTree.\n * This includes reading data from the tree and running transactions to mutate the tree.\n * @remarks This interface should not have any implementations other than those provided by the SharedTree package libraries.\n * @privateRemarks\n * API for interacting with a {@link SharedTreeBranch}.\n * Implementations of this interface must implement the {@link branchKey} property.\n */\nexport interface ITreeCheckout extends AnchorLocator, ViewableTree, WithBreakable {\n\t/**\n\t * Read and Write access for schema stored in the document.\n\t *\n\t * These APIs are temporary and will be replaced with different abstractions (View Schema based) in a different place later.\n\t *\n\t * TODO:\n\t * Editing of this should be moved into transactions with the rest of tree editing to they can be intermixed.\n\t * This will be done after the relations between views, branches and Indexes are figured out.\n\t *\n\t * TODO:\n\t * Public APIs for dealing with schema should be in terms of View Schema, and schema update policies.\n\t * The actual stored schema should be hidden (or ar least not be the most prominent way to interact with schema).\n\t *\n\t * TODO:\n\t * Something should ensure the document contents are always in schema.\n\t */\n\treadonly storedSchema: TreeStoredSchemaSubscription;\n\t/**\n\t * Current contents.\n\t * Updated by edits (local and remote).\n\t * Use `editor` to create a local edit.\n\t */\n\treadonly forest: IForestSubscription;\n\n\t/**\n\t * Used to edit the state of the tree. Edits will be immediately applied locally to the tree.\n\t * If there is no transaction currently ongoing, then the edits will be submitted to Fluid immediately as well.\n\t */\n\treadonly editor: ISharedTreeEditor;\n\n\t/**\n\t * A collection of functions for managing transactions.\n\t */\n\treadonly transaction: Transactor;\n\n\tbranch(): ITreeCheckoutFork;\n\n\tmerge(checkout: ITreeCheckoutFork): void;\n\n\tmerge(checkout: ITreeCheckoutFork, disposeMerged: boolean): void;\n\n\trebase(checkout: ITreeCheckoutFork): void;\n\n\t/**\n\t * Replaces all schema with the provided schema.\n\t * Can over-write preexisting schema, and removes unmentioned schema.\n\t *\n\t * @param newSchema - The new schema to replace the existing schema.\n\t * @param allowNonSupersetSchema - Whether to allow non-superset schemas.\n\t * Defaults to false.\n\t * If false, an assert will be thrown if the new schema does not permit all possible documents which were permitted under the old schema.\n\t */\n\tupdateSchema(newSchema: TreeStoredSchema, allowNonSupersetSchema?: true): void;\n\n\t/**\n\t * Events about this view.\n\t */\n\treadonly events: Listenable<CheckoutEvents>;\n\n\t/**\n\t * Events about the root of the tree in this view.\n\t */\n\treadonly rootEvents: Listenable<AnchorSetRootEvents>;\n\n\t/**\n\t * Returns a JsonableTree for each tree that was removed from (and not restored to) the document.\n\t * This list is guaranteed to contain all nodes that are recoverable through undo/redo on this checkout.\n\t * The list may also contain additional nodes.\n\t *\n\t * This is only intended for use in testing and exceptional code paths: it is not performant.\n\t */\n\tgetRemovedRoots(): [string | number | undefined, number, JsonableTree][];\n}\n\n/**\n * Creates a {@link TreeCheckout}.\n * @param args - an object containing optional components that will be used to build the view.\n * Any components not provided will be created by default.\n * @remarks This does not create a {@link SharedTree}, but rather a view with the minimal state\n * and functionality required to implement {@link ITreeCheckout}.\n */\nexport function createTreeCheckout(\n\tidCompressor: IIdCompressor,\n\tmintRevisionTag: () => RevisionTag,\n\trevisionTagCodec: RevisionTagCodec,\n\targs?: {\n\t\tbranch?: SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>;\n\t\tchangeFamily?: ChangeFamily<SharedTreeEditBuilder, SharedTreeChange>;\n\t\tschema?: TreeStoredSchemaRepository;\n\t\tforest?: IEditableForest;\n\t\tfieldBatchCodec?: FieldBatchCodec;\n\t\tremovedRoots?: DetachedFieldIndex;\n\t\tchunkCompressionStrategy?: TreeCompressionStrategy;\n\t\tlogger?: ITelemetryLoggerExt;\n\t\tbreaker?: Breakable;\n\t\tdisposeForksAfterTransaction?: boolean;\n\t\tcodecOptions?: Partial<CodecWriteOptions>;\n\t},\n): TreeCheckout {\n\tconst breaker = args?.breaker ?? new Breakable(\"TreeCheckout\");\n\tconst schema = args?.schema ?? new TreeStoredSchemaRepository();\n\tconst forest = args?.forest ?? buildForest(breaker, schema);\n\tconst defaultCodecOptions: CodecWriteOptions = {\n\t\tjsonValidator: FormatValidatorNoOp,\n\t\tminVersionForCollab: FluidClientVersion.v2_0,\n\t};\n\tconst codecOptions: CodecWriteOptions = { ...defaultCodecOptions, ...args?.codecOptions };\n\tconst changeFamily =\n\t\targs?.changeFamily ??\n\t\tnew SharedTreeChangeFamily(\n\t\t\trevisionTagCodec,\n\t\t\targs?.fieldBatchCodec ?? makeFieldBatchCodec(codecOptions),\n\t\t\tcodecOptions,\n\t\t\targs?.chunkCompressionStrategy,\n\t\t\tidCompressor,\n\t\t);\n\n\t// TODO: If a branch is passed in, is it supposed to be local main?\n\t// Otherwise shouldn't we set `isSharedBranch` to false?\n\tconst branch =\n\t\targs?.branch ??\n\t\tnew SharedTreeBranch(\n\t\t\t{\n\t\t\t\tchange: changeFamily.rebaser.compose([]),\n\t\t\t\trevision: \"root\",\n\t\t\t},\n\t\t\tchangeFamily,\n\t\t\t() => idCompressor.generateCompressedId(),\n\t\t);\n\n\treturn new TreeCheckout(\n\t\tbranch,\n\t\ttrue,\n\t\tchangeFamily,\n\t\tschema,\n\t\tforest,\n\t\tmintRevisionTag,\n\t\trevisionTagCodec,\n\t\tidCompressor,\n\t\targs?.removedRoots,\n\t\targs?.logger,\n\t\tbreaker,\n\t\targs?.disposeForksAfterTransaction,\n\t);\n}\n\n/**\n * Branch (like in a version control system) of SharedTree.\n *\n * {@link ITreeCheckout} that has forked off of the main trunk/branch.\n */\nexport interface ITreeCheckoutFork extends ITreeCheckout {\n\trebaseOnto(view: ITreeCheckout): void;\n}\n\n/**\n * Metrics derived from a revert operation.\n *\n * @see {@link TreeCheckout.revertRevertible}.\n */\nexport interface RevertMetrics {\n\t/**\n\t * The age of the revertible commit relative to the head of the branch to which the reversion will be applied.\n\t */\n\treadonly age: number;\n\n\t// TODO: add other stats as needed for telemetry, etc.\n}\n\n/**\n * An implementation of {@link ITreeCheckoutFork}.\n */\nexport class TreeCheckout implements ITreeCheckoutFork {\n\tpublic disposed = false;\n\n\tprivate editLock: EditLock;\n\n\t/**\n\t * User-defined label associated with the transaction whose commit is currently being produced for this checkout.\n\t *\n\t * @remarks\n\t * This label is used to implement {@link TreeCheckout.runWithTransactionLabel}.\n\t */\n\tprivate transactionLabel?: unknown;\n\n\tprivate readonly views = new Set<TreeView<ImplicitFieldSchema>>();\n\n\t/**\n\t * Set of revertibles maintained for automatic disposal\n\t */\n\tprivate readonly revertibles = new Set<RevertibleAlpha>();\n\n\t/**\n\t * Each branch's head commit corresponds to a revertible commit.\n\t * Maintaining a whole branch ensures the commit graph is not pruned in a way that would prevent the commit from\n\t * being reverted.\n\t */\n\tprivate readonly revertibleCommitBranches = new Map<\n\t\tRevisionTag,\n\t\tSharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>\n\t>();\n\n\t/**\n\t * The name of the telemetry event logged for calls to {@link TreeCheckout.revertRevertible}.\n\t * @privateRemarks Exposed for testing purposes.\n\t */\n\tpublic static readonly revertTelemetryEventName = \"RevertRevertible\";\n\n\treadonly #events = createEmitter<CheckoutEvents>();\n\tpublic events: Listenable<CheckoutEvents> = this.#events;\n\n\tpublic constructor(\n\t\tbranch: SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>,\n\t\t/** True if and only if this checkout is for a branch which is persisted and shared with other clients. */\n\t\tpublic readonly isSharedBranch: boolean,\n\t\tprivate readonly changeFamily: ChangeFamily<SharedTreeEditBuilder, SharedTreeChange>,\n\t\tpublic readonly storedSchema: TreeStoredSchemaRepository,\n\t\tpublic readonly forest: IEditableForest,\n\t\tprivate readonly mintRevisionTag: () => RevisionTag,\n\t\tprivate readonly revisionTagCodec: RevisionTagCodec,\n\t\tprivate readonly idCompressor: IIdCompressor,\n\t\tprivate readonly _removedRoots: DetachedFieldIndex = makeDetachedFieldIndex(\n\t\t\t\"repair\",\n\t\t\trevisionTagCodec,\n\t\t\tidCompressor,\n\t\t),\n\t\t/** Optional logger for telemetry. */\n\t\tprivate readonly logger?: ITelemetryLoggerExt,\n\t\tpublic readonly breaker: Breakable = new Breakable(\"TreeCheckout\"),\n\t\tpublic readonly disposeForksAfterTransaction = true,\n\t) {\n\t\tthis.#transaction = this.createTransactionStack(branch);\n\t\tthis.editLock = new EditLock(this.#transaction.activeBranchEditor);\n\t\tthis.registerForBranchEvents();\n\t}\n\n\t/**\n\t * Helper method for {@link SchematizingSimpleTreeView.runTransaction} to properly clear transaction labels once the function completes.\n\t *\n\t * @remarks\n\t * The label is stored during the execution of the function and will be included in the {@link ChangeMetadata} of the transaction.\n\t *\n\t * Labels supplied to nested transactions are ignored - only the outermost transaction label is ever used.\n\t *\n\t * @param fn - The function to execute. It receives the user provided transaction label as an optional parameter.\n\t * @param label - The label to associate with the outermost transaction.\n\t * @returns The result of executing `fn`.\n\t */\n\tpublic runWithTransactionLabel<TLabel, TResult>(\n\t\tfn: (label?: TLabel) => TResult,\n\t\tlabel: TLabel | undefined,\n\t): TResult {\n\t\t// If a transaction label is already set, nesting is occurring, so we should not override it.\n\t\tif (this.transactionLabel !== undefined) {\n\t\t\treturn fn(this.transactionLabel as TLabel);\n\t\t}\n\t\tthis.transactionLabel = label;\n\t\ttry {\n\t\t\treturn fn(this.transactionLabel as TLabel);\n\t\t} finally {\n\t\t\tthis.transactionLabel = undefined;\n\t\t}\n\t}\n\n\tpublic get removedRoots(): ReadOnlyDetachedFieldIndex {\n\t\treturn this._removedRoots;\n\t}\n\n\tprivate registerForBranchEvents(): void {\n\t\tthis.#transaction.branch.events.on(\"afterChange\", this.onAfterBranchChange);\n\t\tthis.#transaction.activeBranchEvents.on(\"afterChange\", this.onAfterChange);\n\t\tthis.#transaction.activeBranchEvents.on(\"ancestryTrimmed\", this.onAncestryTrimmed);\n\t}\n\n\tprivate unregisterFromBranchEvents(): void {\n\t\tthis.#transaction.branch.events.off(\"afterChange\", this.onAfterBranchChange);\n\t\tthis.#transaction.activeBranchEvents.off(\"afterChange\", this.onAfterChange);\n\t\tthis.#transaction.activeBranchEvents.off(\"ancestryTrimmed\", this.onAncestryTrimmed);\n\t}\n\n\tprivate createTransactionStack(\n\t\tbranch: SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>,\n\t): SquashingTransactionStack<SharedTreeEditBuilder, SharedTreeChange> {\n\t\treturn new SquashingTransactionStack(branch, this.mintRevisionTag, () => {\n\t\t\tconst disposeForks = this.disposeForksAfterTransaction\n\t\t\t\t? trackForksForDisposal(this)\n\t\t\t\t: undefined;\n\t\t\t// When each transaction is started, make a restorable checkpoint of the current state of removed roots\n\t\t\tconst restoreRemovedRoots = this._removedRoots.createCheckpoint();\n\t\t\treturn (result, viewUpdate: SharedTreeChange | undefined) => {\n\t\t\t\tconst newHead = this.#transaction.branch.getHead();\n\t\t\t\tswitch (result) {\n\t\t\t\t\tcase TransactionResult.Abort: {\n\t\t\t\t\t\trestoreRemovedRoots();\n\t\t\t\t\t\tif (viewUpdate !== undefined) {\n\t\t\t\t\t\t\tthis.applyChange(viewUpdate, newHead.revision);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase TransactionResult.Commit: {\n\t\t\t\t\t\tif (viewUpdate !== undefined) {\n\t\t\t\t\t\t\tthis.applyChange(viewUpdate, newHead.revision);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!this.transaction.isInProgress()) {\n\t\t\t\t\t\t\t// The changes in a transaction squash commit have already applied to the checkout and are known to be valid, so we can validate the squash commit automatically.\n\t\t\t\t\t\t\tthis.validateCommit(newHead);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tunreachableCase(result);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdisposeForks?.();\n\t\t\t};\n\t\t});\n\t}\n\n\tpublic exportVerbose(): VerboseTree | undefined {\n\t\tconst cursor = this.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.forest, cursor);\n\t\t\tconst length = cursor.getFieldLength();\n\t\t\tif (length === 0) {\n\t\t\t\treturn undefined;\n\t\t\t} else if (length === 1) {\n\t\t\t\tcursor.enterNode(0);\n\t\t\t\treturn verboseFromCursor(cursor, this.storedSchema.nodeSchema);\n\t\t\t} else {\n\t\t\t\tfail(0xac8 /* Invalid document root length */);\n\t\t\t}\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\tprivate readonly onAfterBranchChange = (\n\t\tevent: SharedTreeBranchChange<SharedTreeChange>,\n\t): void => {\n\t\t// The following logic allows revertibles to be generated for the change.\n\t\t// Currently only appends (including merges and transaction commits) are supported.\n\t\tif (event.type === \"append\") {\n\t\t\t// TODO:#20949: When the SharedTree is detached, these commits will already have been garbage collected.\n\t\t\t// Figure out a way to generate revertibles before the commits are garbage collected.\n\t\t\tfor (const commit of event.newCommits) {\n\t\t\t\tconst kind = event.type === \"append\" ? event.kind : CommitKind.Default;\n\t\t\t\tconst { change, revision } = commit;\n\n\t\t\t\tconst getRevertible = hasSchemaChange(change)\n\t\t\t\t\t? undefined\n\t\t\t\t\t: (onRevertibleDisposed?: (revertible: RevertibleAlpha) => void) => {\n\t\t\t\t\t\t\tif (!withinEventContext) {\n\t\t\t\t\t\t\t\tthrow new UsageError(\n\t\t\t\t\t\t\t\t\t\"Cannot get a revertible outside of the context of a changed event.\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this.revertibleCommitBranches.get(revision) !== undefined) {\n\t\t\t\t\t\t\t\tthrow new UsageError(\n\t\t\t\t\t\t\t\t\t\"Cannot generate the same revertible more than once. Note that this can happen when multiple changed event listeners are registered.\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst revertible = this.createRevertible(\n\t\t\t\t\t\t\t\trevision,\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\tonRevertibleDisposed,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.revertibleCommitBranches.set(\n\t\t\t\t\t\t\t\trevision,\n\t\t\t\t\t\t\t\tthis.#transaction.activeBranch.fork(commit),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.revertibles.add(revertible);\n\t\t\t\t\t\t\treturn revertible;\n\t\t\t\t\t\t};\n\n\t\t\t\tlet withinEventContext = true;\n\n\t\t\t\tconst metadata: ChangeMetadata = {\n\t\t\t\t\tkind,\n\t\t\t\t\tisLocal: true,\n\t\t\t\t\tgetChange: () => {\n\t\t\t\t\t\tconst context: ChangeEncodingContext = {\n\t\t\t\t\t\t\tidCompressor: this.idCompressor,\n\t\t\t\t\t\t\toriginatorId: this.idCompressor.localSessionId,\n\t\t\t\t\t\t\trevision,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst encodedChange = this.changeFamily.codecs.resolve(4).encode(change, context);\n\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tcommit.parent !== undefined,\n\t\t\t\t\t\t\t0xca4 /* Expected applied commit to be parented */,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\trevision,\n\t\t\t\t\t\t\toriginatorId: this.idCompressor.localSessionId,\n\t\t\t\t\t\t\tchange: encodedChange,\n\t\t\t\t\t\t} satisfies SerializedChange;\n\t\t\t\t\t},\n\t\t\t\t\tgetRevertible: (onDisposed) => getRevertible?.(onDisposed),\n\t\t\t\t\tlabel: this.transactionLabel,\n\t\t\t\t};\n\n\t\t\t\tthis.#events.emit(\"changed\", metadata, getRevertible);\n\t\t\t\twithinEventContext = false;\n\t\t\t}\n\t\t} else if (this.isRemoteChangeEvent(event)) {\n\t\t\t// TODO: figure out how to plumb through commit kind info for remote changes\n\t\t\tthis.#events.emit(\"changed\", {\n\t\t\t\tisLocal: false,\n\t\t\t\tkind: CommitKind.Default,\n\t\t\t});\n\t\t}\n\t};\n\n\tprivate readonly onAfterChange = (event: SharedTreeBranchChange<SharedTreeChange>): void => {\n\t\tthis.editLock.lock();\n\t\tthis.#events.emit(\"beforeBatch\", event);\n\t\tif (event.change !== undefined) {\n\t\t\tconst revision =\n\t\t\t\tevent.type === \"rebase\"\n\t\t\t\t\t? this.#transaction.activeBranch.getHead().revision\n\t\t\t\t\t: event.change.revision;\n\n\t\t\tthis.applyChange(event.change.change, revision);\n\t\t}\n\t\tthis.#events.emit(\"afterBatch\");\n\t\tthis.editLock.unlock();\n\t\tif (event.type === \"append\") {\n\t\t\tfor (const commit of event.newCommits) {\n\t\t\t\tthis.validateCommit(commit);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Applies the given serialized change (as was produced via a `\"changed\"` event of another checkout) to this checkout.\n\t */\n\tpublic applySerializedChange(serializedChange: JsonCompatibleReadOnly): void {\n\t\tif (!isSerializedChange(serializedChange)) {\n\t\t\tthrow new UsageError(`Cannot apply change. Invalid serialized change format.`);\n\t\t}\n\t\tconst { revision, originatorId, change } = serializedChange;\n\t\tif (originatorId !== this.idCompressor.localSessionId) {\n\t\t\tthrow new UsageError(\n\t\t\t\t`Cannot apply change. A serialized changed must be applied to the same SharedTree as it was created from.`,\n\t\t\t);\n\t\t}\n\t\tconst context: ChangeEncodingContext = {\n\t\t\tidCompressor: this.idCompressor,\n\t\t\toriginatorId: this.idCompressor.localSessionId,\n\t\t\trevision,\n\t\t};\n\t\tconst decodedChange = this.changeFamily.codecs.resolve(4).decode(change, context);\n\t\tthis.applyChange(decodedChange, revision);\n\t}\n\n\t// Revision is the revision of the commit, if any, which caused this change.\n\tprivate applyChange(change: SharedTreeChange, revision?: RevisionTag): void {\n\t\t// Conflicts due to schema will be empty and thus are not applied.\n\t\tfor (const innerChange of change.changes) {\n\t\t\tif (innerChange.type === \"data\") {\n\t\t\t\tconst delta = intoDelta(tagChange(innerChange.innerChange, revision));\n\t\t\t\tthis.withCombinedVisitor((visitor) => {\n\t\t\t\t\tvisitDelta(delta, visitor, this._removedRoots, revision);\n\t\t\t\t});\n\t\t\t} else if (innerChange.type === \"schema\") {\n\t\t\t\t// Schema changes from a current to a new schema are expected to be backwards compatible.\n\t\t\t\t// This guarantees that all data in the forest (which is valid before the schema change)\n\t\t\t\t// is also valid under the new schema.\n\t\t\t\t// Note however, that such schema changes may in some cases be rolled back:\n\t\t\t\t// Case 1: A transaction with a schema change may be aborted.\n\t\t\t\t// The transaction may have made some data changes that would render some trees invalid\n\t\t\t\t// under the old schema, but these changes will also be rolled back, thereby putting the forest\n\t\t\t\t// back in the state before the transaction, which is valid under the original (reinstated) schema.\n\t\t\t\t// Case 2: A branch with a schema change may be rebased such that the schema change (because\n\t\t\t\t// of a constraint) is no longer applied.\n\t\t\t\t// Such a branch may contain data changes that would render some trees invalid under the\n\t\t\t\t// original schema. These data changes may not necessarily be rolled back.\n\t\t\t\t// They will however be rebased over the rollback of the schema change. This rebasing will\n\t\t\t\t// ensure that these data changes are muted if they would render some trees invalid under the\n\t\t\t\t// original (reinstated) schema.\n\t\t\t\tthis.storedSchema.apply(innerChange.innerChange.schema.new);\n\t\t\t} else {\n\t\t\t\tfail(0xad1 /* Unknown Shared Tree change type. */);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate readonly onAncestryTrimmed = (revisions: RevisionTag[]): void => {\n\t\t// When the branch is trimmed, we can garbage collect any repair data whose latest relevant revision is one of the\n\t\t// trimmed revisions.\n\t\tthis.withCombinedVisitor((visitor) => {\n\t\t\tfor (const revision of revisions) {\n\t\t\t\t// get all the roots last created or used by the revision\n\t\t\t\tconst roots = this._removedRoots.getRootsLastTouchedByRevision(revision);\n\n\t\t\t\t// get the detached field for the root and delete it from the removed roots\n\t\t\t\tfor (const root of roots) {\n\t\t\t\t\tvisitor.destroy(this._removedRoots.toFieldKey(root), 1);\n\t\t\t\t}\n\n\t\t\t\tthis._removedRoots.deleteRootsLastTouchedByRevision(revision);\n\t\t\t}\n\t\t});\n\t};\n\n\tprivate withCombinedVisitor(fn: (visitor: DeltaVisitor) => void): void {\n\t\tconst anchorVisitor = this.forest.anchors.acquireVisitor();\n\t\tconst combinedVisitor = combineVisitors([this.forest.acquireVisitor(), anchorVisitor]);\n\t\tfn(combinedVisitor);\n\t\tcombinedVisitor.free();\n\t}\n\n\tprivate checkNotDisposed(usageError?: string): void {\n\t\tthis.breaker.use();\n\t\tif (this.disposed) {\n\t\t\tif (usageError !== undefined) {\n\t\t\t\tthrow new UsageError(usageError);\n\t\t\t}\n\t\t\tassert(false, 0x911 /* Invalid operation on a disposed TreeCheckout */);\n\t\t}\n\t}\n\n\t/**\n\t * Creates a {@link RevertibleAlpha} object that can undo a specific change in the tree's history.\n\t * Revision must exist in the given {@link TreeCheckout}'s branch.\n\t *\n\t * @param revision - The revision tag identifying the change to be made revertible.\n\t * @param kind - The {@link CommitKind} that produced this revertible (e.g., Default, Undo, Redo).\n\t * @param checkout - The {@link TreeCheckout} instance this revertible belongs to.\n\t * @param onRevertibleDisposed - Callback function that will be called when the revertible is disposed.\n\t * @returns A {@link RevertibleAlpha} object.\n\t */\n\tprivate createRevertible(\n\t\trevision: RevisionTag,\n\t\tkind: CommitKind,\n\t\tcheckout: TreeCheckout,\n\t\tonRevertibleDisposed: ((revertible: RevertibleAlpha) => void) | undefined,\n\t): RevertibleAlpha {\n\t\tconst commitBranches = checkout.revertibleCommitBranches;\n\n\t\tconst revertible: RevertibleAlpha = {\n\t\t\tget status(): RevertibleStatus {\n\t\t\t\tconst revertibleCommit = commitBranches.get(revision);\n\t\t\t\treturn revertibleCommit === undefined\n\t\t\t\t\t? RevertibleStatus.Disposed\n\t\t\t\t\t: RevertibleStatus.Valid;\n\t\t\t},\n\t\t\trevert: (release: boolean = true) => {\n\t\t\t\tif (revertible.status === RevertibleStatus.Disposed) {\n\t\t\t\t\tthrow new UsageError(\"Unable to revert a revertible that has been disposed.\");\n\t\t\t\t}\n\n\t\t\t\tconst revertMetrics = checkout.revertRevertible(revision, kind);\n\t\t\t\tcheckout.logger?.sendTelemetryEvent({\n\t\t\t\t\teventName: TreeCheckout.revertTelemetryEventName,\n\t\t\t\t\t...revertMetrics,\n\t\t\t\t});\n\n\t\t\t\tif (release) {\n\t\t\t\t\trevertible.dispose();\n\t\t\t\t}\n\t\t\t},\n\t\t\tclone: (targetBranch: TreeBranch) => {\n\t\t\t\t// 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.\n\t\t\t\tconst targetCheckout = getCheckout(targetBranch);\n\n\t\t\t\tconst revertibleBranch = this.revertibleCommitBranches.get(revision);\n\t\t\t\tif (revertibleBranch === undefined) {\n\t\t\t\t\tthrow new UsageError(\"Unable to clone a revertible that has been disposed.\");\n\t\t\t\t}\n\n\t\t\t\tconst commitToRevert = revertibleBranch.getHead();\n\t\t\t\tconst activeBranchHead = targetCheckout.#transaction.activeBranch.getHead();\n\n\t\t\t\tif (isAncestor(commitToRevert, activeBranchHead, true) === false) {\n\t\t\t\t\tthrow new UsageError(\n\t\t\t\t\t\t\"Cannot clone revertible for a commit that is not present on the given branch.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\ttargetCheckout.revertibleCommitBranches.set(revision, revertibleBranch.fork());\n\n\t\t\t\treturn this.createRevertible(revision, kind, targetCheckout, onRevertibleDisposed);\n\t\t\t},\n\t\t\tdispose: () => {\n\t\t\t\tif (revertible.status === RevertibleStatus.Disposed) {\n\t\t\t\t\tthrow new UsageError(\n\t\t\t\t\t\t\"Unable to dispose a revertible that has already been disposed.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcheckout.disposeRevertible(revertible, revision);\n\t\t\t\tonRevertibleDisposed?.(revertible);\n\t\t\t},\n\t\t};\n\n\t\treturn revertible;\n\t}\n\n\t// For the new TreeViewAlpha API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot>;\n\n\t// For the old TreeView API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema>(\n\t\tconfig: TreeViewConfiguration<TRoot>,\n\t): TreeView<TRoot>;\n\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> {\n\t\tconst view = new SchematizingSimpleTreeView(\n\t\t\tthis,\n\t\t\tconfig,\n\t\t\tcreateNodeIdentifierManager(this.idCompressor),\n\t\t\t() => {\n\t\t\t\tthis.views.delete(view);\n\t\t\t},\n\t\t);\n\t\tthis.views.add(view);\n\t\treturn view;\n\t}\n\n\tpublic get rootEvents(): Listenable<AnchorSetRootEvents> {\n\t\treturn this.forest.anchors.events;\n\t}\n\n\tpublic get editor(): ISharedTreeEditor {\n\t\tthis.checkNotDisposed();\n\t\treturn this.editLock.editor;\n\t}\n\n\tpublic locate(anchor: Anchor): AnchorNode | undefined {\n\t\tthis.checkNotDisposed();\n\t\treturn this.forest.anchors.locate(anchor);\n\t}\n\n\tpublic get transaction(): Transactor {\n\t\treturn this.#transaction;\n\t}\n\t/**\n\t * The {@link Transactor} for this checkout.\n\t * @remarks In the context of a checkout, transactions allow edits to be batched into atomic units.\n\t * 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.\n\t * If the transaction is aborted, the local state will be reset to what it was before the transaction began.\n\t * Transactions may nest, meaning that a transaction may be started while a transaction is already ongoing.\n\t *\n\t * To avoid updating observers of the view state with intermediate results during a transaction,\n\t * use {@link ITreeCheckout#branch} and {@link ISharedTreeFork#merge}.\n\t */\n\t#transaction: SquashingTransactionStack<SharedTreeEditBuilder, SharedTreeChange>;\n\n\tpublic branch(): TreeCheckout {\n\t\tthis.checkNotDisposed(\n\t\t\t\"The parent branch has already been disposed and can no longer create new branches.\",\n\t\t);\n\t\t// Branching after an unfinished transaction would expose the application to a state where its invariants may be violated.\n\t\tif (this.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\"A view cannot be forked while it has a pending transaction.\");\n\t\t}\n\n\t\tthis.editLock.checkUnlocked(\"Branching\");\n\t\tconst anchors = new AnchorSet();\n\t\tconst branch = this.#transaction.activeBranch.fork();\n\t\tconst storedSchema = this.storedSchema.clone();\n\t\tconst forest = this.forest.clone(storedSchema, anchors);\n\t\tconst checkout = new TreeCheckout(\n\t\t\tbranch,\n\t\t\tfalse,\n\t\t\tthis.changeFamily,\n\t\t\tstoredSchema,\n\t\t\tforest,\n\t\t\tthis.mintRevisionTag,\n\t\t\tthis.revisionTagCodec,\n\t\t\tthis.idCompressor,\n\t\t\tthis._removedRoots.clone(),\n\t\t\tthis.logger,\n\t\t\tthis.breaker,\n\t\t\tthis.disposeForksAfterTransaction,\n\t\t);\n\t\tthis.#events.emit(\"fork\", checkout);\n\t\treturn checkout;\n\t}\n\n\tpublic switchBranch(\n\t\tbranch: SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange>,\n\t): void {\n\t\t// TODO: Dispose old branch, if necessary\n\t\tassert(\n\t\t\t!this.#transaction.isInProgress(),\n\t\t\t0xc55 /* Cannot switch branches during a transaction */,\n\t\t);\n\t\tconst diff = diffHistories(\n\t\t\tthis.changeFamily.rebaser,\n\t\t\tthis.#transaction.branch.getHead(),\n\t\t\tbranch.getHead(),\n\t\t\tthis.mintRevisionTag,\n\t\t);\n\n\t\tthis.unregisterFromBranchEvents();\n\n\t\tthis.#transaction = this.createTransactionStack(branch);\n\t\tthis.editLock = new EditLock(this.#transaction.activeBranchEditor);\n\t\tthis.registerForBranchEvents();\n\n\t\t// TODO: Rework eventing\n\t\tthis.applyChange(diff);\n\t\tthis.#events.emit(\"afterBatch\");\n\t}\n\n\tpublic rebase(checkout: TreeCheckout): void {\n\t\tthis.checkNotDisposed(\n\t\t\t\"The target of the branch rebase has been disposed and cannot be rebased.\",\n\t\t);\n\t\tcheckout.checkNotDisposed(\n\t\t\t\"The source of the branch rebase has been disposed and cannot be rebased.\",\n\t\t);\n\t\tthis.editLock.checkUnlocked(\"Rebasing\");\n\n\t\tif (this.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Views cannot be rebased onto a view that has a pending transaction.\",\n\t\t\t);\n\t\t}\n\t\tif (checkout.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\"A view cannot be rebased while it has a pending transaction.\");\n\t\t}\n\n\t\tassert(\n\t\t\t!checkout.isSharedBranch,\n\t\t\t0xa5d /* Shared branches cannot be rebased onto another branch. */,\n\t\t);\n\n\t\tcheckout.#transaction.activeBranch.rebaseOnto(this.#transaction.activeBranch);\n\t}\n\n\tpublic rebaseOnto(checkout: ITreeCheckout): void {\n\t\tthis.checkNotDisposed(\n\t\t\t\"The target of the branch rebase has been disposed and cannot be rebased.\",\n\t\t);\n\t\tcheckout.rebase(this);\n\t}\n\n\tpublic merge(checkout: TreeCheckout): void;\n\tpublic merge(checkout: TreeCheckout, disposeMerged: boolean): void;\n\tpublic merge(checkout: TreeCheckout, disposeMerged = true): void {\n\t\tthis.checkNotDisposed(\n\t\t\t\"The target of the branch merge has been disposed and cannot be merged.\",\n\t\t);\n\t\tcheckout.checkNotDisposed(\n\t\t\t\"The source of the branch merge has been disposed and cannot be merged.\",\n\t\t);\n\t\tthis.editLock.checkUnlocked(\"Merging\");\n\t\tif (this.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Views cannot be merged into a view while it has a pending transaction.\",\n\t\t\t);\n\t\t}\n\t\tif (checkout.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Views with an open transaction cannot be merged into another view.\",\n\t\t\t);\n\t\t}\n\t\tthis.#transaction.activeBranch.merge(checkout.#transaction.activeBranch);\n\t\tif (disposeMerged && !checkout.isSharedBranch) {\n\t\t\t// Dispose the merged checkout unless it is a shared branch.\n\t\t\tcheckout[disposeSymbol]();\n\t\t}\n\t}\n\n\tpublic updateSchema(newSchema: TreeStoredSchema, allowNonSupersetSchema?: true): void {\n\t\tthis.checkNotDisposed();\n\t\tif (allowNonSupersetSchema !== true) {\n\t\t\tassert(\n\t\t\t\tallowsRepoSuperset(defaultSchemaPolicy, this.storedSchema.clone(), newSchema),\n\t\t\t\t0xbe6 /* New schema must allow all documents allowed by old schema */,\n\t\t\t);\n\t\t}\n\t\tthis.editor.schema.setStoredSchema(this.storedSchema.clone(), newSchema);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.editLock.checkUnlocked(\"Disposing a view\");\n\t\tthis[disposeSymbol]();\n\t}\n\n\tpublic [disposeSymbol](): void {\n\t\tthis.checkNotDisposed(\n\t\t\t\"The branch has already been disposed and cannot be disposed again.\",\n\t\t);\n\t\tthis.disposed = true;\n\t\tthis.#transaction.branch.dispose();\n\t\tthis.#transaction.dispose();\n\t\tthis.purgeRevertibles();\n\t\tfor (const view of this.views) {\n\t\t\tview.dispose();\n\t\t}\n\t\tthis.#events.emit(\"dispose\");\n\t}\n\n\tpublic getRemovedRoots(): [string | number | undefined, number, JsonableTree][] {\n\t\tthis.assertNoUntrackedRoots();\n\t\tconst trees: [string | number | undefined, number, JsonableTree][] = [];\n\t\tconst cursor = this.forest.allocateCursor(\"getRemovedRoots\");\n\t\tfor (const { id, root } of this._removedRoots.entries()) {\n\t\t\tconst parentField = this._removedRoots.toFieldKey(root);\n\t\t\tthis.forest.moveCursorToPath({ parent: undefined, parentField, parentIndex: 0 }, cursor);\n\t\t\tconst tree = jsonableTreeFromCursor(cursor);\n\t\t\t// This method is used for tree consistency comparison.\n\t\t\tconst { major, minor } = id;\n\t\t\tconst finalizedMajor = major === undefined ? major : this.revisionTagCodec.encode(major);\n\t\t\ttrees.push([finalizedMajor, minor, tree]);\n\t\t}\n\t\tcursor.free();\n\t\treturn trees;\n\t}\n\n\t/**\n\t * This must be called on the root/main checkout after loading from a summary.\n\t * @remarks This pattern is necessary because the EditManager skips the normal process of applying commits to branches when loading a summary.\n\t * Instead, it simply {@link SharedTreeBranch#setHead | mutates} the branches directly which does not propagate the typical events throughout the rest of the system.\n\t */\n\tpublic load(): void {\n\t\t// Set the tip revision as the latest relevant revision for any removed roots that are loaded from a summary - this allows them to be garbage collected later.\n\t\t// When a load happens, the head of the trunk and the head of the local/main branch must be the same (this is enforced by SharedTree).\n\t\tthis._removedRoots.setRevisionsForLoadedData(this.#transaction.branch.getHead().revision);\n\t\t// The content of the checkout (e.g. the forest) has (maybe) changed, so fire an afterBatch event.\n\t\tthis.#events.emit(\"afterBatch\");\n\t}\n\n\tprivate purgeRevertibles(): void {\n\t\tfor (const revertible of this.revertibles) {\n\t\t\trevertible.dispose();\n\t\t}\n\t}\n\n\tprivate disposeRevertible(revertible: RevertibleAlpha, revision: RevisionTag): void {\n\t\tthis.revertibleCommitBranches.get(revision)?.dispose();\n\t\tthis.revertibleCommitBranches.delete(revision);\n\t\tthis.revertibles.delete(revertible);\n\t}\n\n\tprivate revertRevertible(revision: RevisionTag, kind: CommitKind): RevertMetrics {\n\t\tthis.editLock.checkUnlocked(\"Reverting a commit\");\n\t\tif (this.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\"Undo is not yet supported during transactions.\");\n\t\t}\n\n\t\tconst revertibleBranch = this.revertibleCommitBranches.get(revision);\n\t\tassert(revertibleBranch !== undefined, 0x7cc /* expected to find a revertible commit */);\n\t\tconst commitToRevert = revertibleBranch.getHead();\n\t\tconst revisionForInvert = this.mintRevisionTag();\n\n\t\tlet change = tagChange(\n\t\t\tthis.changeFamily.rebaser.invert(commitToRevert, false, revisionForInvert),\n\t\t\trevisionForInvert,\n\t\t);\n\n\t\tconst headCommit = this.#transaction.activeBranch.getHead();\n\t\t// Rebase the inverted change onto any commits that occurred after the undoable commits.\n\t\tif (commitToRevert !== headCommit) {\n\t\t\tchange = tagChange(\n\t\t\t\trebaseChange(\n\t\t\t\t\tthis.changeFamily.rebaser,\n\t\t\t\t\tchange,\n\t\t\t\t\tcommitToRevert,\n\t\t\t\t\theadCommit,\n\t\t\t\t\tthis.mintRevisionTag,\n\t\t\t\t).change,\n\t\t\t\trevisionForInvert,\n\t\t\t);\n\t\t}\n\n\t\tthis.#transaction.activeBranch.apply(\n\t\t\tchange,\n\t\t\tkind === CommitKind.Default || kind === CommitKind.Redo\n\t\t\t\t? CommitKind.Undo\n\t\t\t\t: CommitKind.Redo,\n\t\t);\n\n\t\t// Derive some stats about the reversion to return to the caller.\n\t\tlet revertAge = 0;\n\t\tlet currentCommit = headCommit;\n\t\twhile (commitToRevert.revision !== currentCommit.revision) {\n\t\t\trevertAge++;\n\n\t\t\tconst parentCommit = currentCommit.parent;\n\t\t\tassert(parentCommit !== undefined, 0x9a9 /* expected to find a parent commit */);\n\t\t\tcurrentCommit = parentCommit;\n\t\t}\n\n\t\treturn { age: revertAge };\n\t}\n\n\tprivate assertNoUntrackedRoots(): void {\n\t\tconst cursor = this.forest.getCursorAboveDetachedFields();\n\t\tconst rootFields = new Set([rootFieldKey]);\n\t\tfor (const { root } of this._removedRoots.entries()) {\n\t\t\trootFields.add(this._removedRoots.toFieldKey(root));\n\t\t}\n\n\t\tif (!cursor.firstField()) {\n\t\t\treturn;\n\t\t}\n\n\t\tdo {\n\t\t\tconst field = cursor.getFieldKey();\n\t\t\tassert(\n\t\t\t\trootFields.has(field),\n\t\t\t\t0xa22 /* Forest has a root field which is unknown to the detached field index */,\n\t\t\t);\n\n\t\t\trootFields.delete(field);\n\t\t} while (cursor.nextField());\n\t}\n\n\t/**\n\t * `true` iff the given branch change event is due to a remote change\n\t */\n\tprivate isRemoteChangeEvent(event: SharedTreeBranchChange<SharedTreeChange>): boolean {\n\t\treturn (\n\t\t\t// Remote changes are only ever applied to shared branches\n\t\t\tthis.isSharedBranch &&\n\t\t\t// Remote changes are applied to the branch by rebasing it onto the trunk.\n\t\t\t// No other rebases are allowed on shared branches, so we can use this to detect remote changes.\n\t\t\tevent.type === \"rebase\"\n\t\t);\n\t}\n\n\t// #region Commit Validation\n\n\t/** Used to maintain the contract of {@link onCommitValid}(). */\n\treadonly #validatedCommits = new WeakMap<\n\t\tGraphCommit<SharedTreeChange>,\n\t\t((commit: GraphCommit<SharedTreeChange>) => void)[] | true\n\t>();\n\n\t/**\n\t * Registers a function to be called when the given commit is validated.\n\t * @remarks A commit is validated by the checkout after it has been applied to the checkout's state (e.g. it has an effect on the forest).\n\t * If the commit applies successfully (i.e. it does not raise any unexpected errors), the commit is considered valid and the registered function is called.\n\t * If the commit does not apply successfully (because it causes an unexpected error), the function is not called (and the checkout will left in an error state).\n\t *\n\t * If the commit has already been validated when this function is called, the function is called immediately and this function returns `true`.\n\t * Otherwise, the function is registered to be called later and this function returns `false`.\n\t */\n\tpublic onCommitValid(\n\t\tcommit: GraphCommit<SharedTreeChange>,\n\t\tfn: (commit: GraphCommit<SharedTreeChange>) => void,\n\t): boolean {\n\t\tconst validated = getOrCreate(this.#validatedCommits, commit, () => []);\n\t\tif (validated === true) {\n\t\t\tfn(commit);\n\t\t\treturn true;\n\t\t}\n\n\t\tvalidated.push(fn);\n\t\treturn false;\n\t}\n\n\t/** Mark the given commit as \"validated\" according to the contract of {@link onCommitValid}(). */\n\tprivate validateCommit(commit: GraphCommit<SharedTreeChange>): void {\n\t\tconst validated = getOrCreate(this.#validatedCommits, commit, () => []);\n\t\tif (validated !== true) {\n\t\t\tfor (const fn of validated) {\n\t\t\t\tfn(commit);\n\t\t\t}\n\t\t\tthis.#validatedCommits.set(commit, true);\n\t\t}\n\t}\n\n\t// #endregion Commit Validation\n\n\t// #region Enrichment\n\n\t/**\n\t * Statistics about enrichment operations performed by this checkout.\n\t * Used for testing. May be used for telemetry in the future.\n\t * The performance cost of maintaining this information is negligible.\n\t */\n\tprivate readonly enrichmentStats: {\n\t\tbatches: number;\n\t\tdiffs: number;\n\t\tcommitsEnriched: number;\n\t\trefreshers: number;\n\t\tforks: number;\n\t\tapplied: number;\n\t} = { batches: 0, diffs: 0, commitsEnriched: 0, refreshers: 0, forks: 0, applied: 0 };\n\n\tpublic resetEnrichmentStats(): void {\n\t\tthis.enrichmentStats.batches = 0;\n\t\tthis.enrichmentStats.diffs = 0;\n\t\tthis.enrichmentStats.commitsEnriched = 0;\n\t\tthis.enrichmentStats.refreshers = 0;\n\t\tthis.enrichmentStats.forks = 0;\n\t\tthis.enrichmentStats.applied = 0;\n\t}\n\n\tpublic getEnrichmentStats(): {\n\t\tbatches: number;\n\t\tdiffs: number;\n\t\tcommitsEnriched: number;\n\t\trefreshers: number;\n\t\tforks: number;\n\t\tapplied: number;\n\t} {\n\t\treturn { ...this.enrichmentStats };\n\t}\n\n\tpublic enrich(\n\t\tcontext: GraphCommit<SharedTreeChange>,\n\t\tchanges: readonly TaggedChange<SharedTreeChange>[],\n\t): SharedTreeChange[] {\n\t\tif (!hasSome(changes)) {\n\t\t\treturn [];\n\t\t}\n\t\tthis.enrichmentStats.batches += 1;\n\t\tconst enricher = new SharedTreeChangeEnricher(\n\t\t\tthis.forest,\n\t\t\tthis._removedRoots,\n\t\t\tthis.storedSchema,\n\t\t\tthis.idCompressor,\n\t\t\t() => (this.enrichmentStats.commitsEnriched += 1),\n\t\t\t() => (this.enrichmentStats.refreshers += 1),\n\t\t\t() => (this.enrichmentStats.forks += 1),\n\t\t\t() => (this.enrichmentStats.applied += 1),\n\t\t);\n\t\t// This `lastCommitApplied` may be on the main branch or on a transaction branch.\n\t\t// In either case, it is crucial that the state of the forest & detached field index reflects all changes up to and including this commit.\n\t\tconst lastCommitApplied = this.#transaction.activeBranch.getHead();\n\t\tif (context !== lastCommitApplied) {\n\t\t\tenricher.enqueueChange(() => {\n\t\t\t\tthis.enrichmentStats.diffs += 1;\n\t\t\t\tconst diff = diffHistories(\n\t\t\t\t\tthis.changeFamily.rebaser,\n\t\t\t\t\tlastCommitApplied,\n\t\t\t\t\tcontext,\n\t\t\t\t\tthis.mintRevisionTag,\n\t\t\t\t);\n\t\t\t\treturn makeAnonChange(diff);\n\t\t\t});\n\t\t}\n\t\tconst enriched: SharedTreeChange[] = [];\n\t\tfor (const change of changes) {\n\t\t\tenriched.push(enricher.enrich(change.change));\n\t\t\tenricher.enqueueChange(change);\n\t\t}\n\t\tenricher[disposeSymbol]();\n\t\treturn enriched;\n\t}\n\n\tpublic get mainBranch(): SharedTreeBranch<SharedTreeEditBuilder, SharedTreeChange> {\n\t\treturn this.#transaction.branch;\n\t}\n\n\t// #endregion Enrichment\n}\n\n/**\n * A helper class that assists {@link TreeCheckout} in preventing functionality from being used while the tree is in the middle of being edited.\n */\nclass EditLock {\n\t/**\n\t * Edits the tree by calling the methods of the editor passed into the {@link EditLock} constructor.\n\t * @remarks Edits will throw an error if the lock is currently locked.\n\t */\n\tpublic readonly editor: ISharedTreeEditor;\n\tprivate locked = false;\n\n\t/**\n\t * @param editor - an editor which will be used to create a new editor that is monitored to determine if any changes are happening to the tree.\n\t * Use {@link EditLock.editor} in place of the original editor to ensure that changes are monitored.\n\t */\n\tpublic constructor(editor: ISharedTreeEditor) {\n\t\tconst checkLock = (): void => this.checkUnlocked(\"Editing the tree\");\n\t\tthis.editor = {\n\t\t\tget schema() {\n\t\t\t\treturn editor.schema;\n\t\t\t},\n\t\t\tvalueField(...fieldArgs) {\n\t\t\t\tconst valueField = editor.valueField(...fieldArgs);\n\t\t\t\treturn {\n\t\t\t\t\tset(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\tvalueField.set(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\toptionalField(...fieldArgs) {\n\t\t\t\tconst optionalField = editor.optionalField(...fieldArgs);\n\t\t\t\treturn {\n\t\t\t\t\tset(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\toptionalField.set(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\tsequenceField(...fieldArgs) {\n\t\t\t\tconst sequenceField = editor.sequenceField(...fieldArgs);\n\t\t\t\treturn {\n\t\t\t\t\tinsert(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\tsequenceField.insert(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t\tremove(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\tsequenceField.remove(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\tmove(...moveArgs) {\n\t\t\t\tcheckLock();\n\t\t\t\teditor.move(...moveArgs);\n\t\t\t},\n\t\t\taddNodeExistsConstraint(path) {\n\t\t\t\teditor.addNodeExistsConstraint(path);\n\t\t\t},\n\t\t\taddNodeExistsConstraintOnRevert(path) {\n\t\t\t\teditor.addNodeExistsConstraintOnRevert(path);\n\t\t\t},\n\t\t\taddNoChangeConstraint() {\n\t\t\t\teditor.addNoChangeConstraint();\n\t\t\t},\n\t\t\taddNoChangeConstraintOnRevert() {\n\t\t\t\teditor.addNoChangeConstraintOnRevert();\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Prevent further changes from being made to {@link EditLock.editor} until {@link EditLock.unlock} is called.\n\t * @remarks May only be called when the lock is not already locked.\n\t */\n\tpublic lock(): void {\n\t\tif (this.locked) {\n\t\t\tdebugger;\n\t\t}\n\t\tassert(!this.locked, 0xaa7 /* Checkout has already been locked */);\n\t\tthis.locked = true;\n\t}\n\n\t/**\n\t * Throws an error if the lock is currently locked.\n\t * @param action - The current action being performed by the user.\n\t * This must start with a capital letter, as it shows up as the first part of the error message and we want it to look nice.\n\t */\n\tpublic checkUnlocked<T extends string>(action: T extends Capitalize<T> ? T : never): void {\n\t\tif (this.locked) {\n\t\t\t// These type assertions ensure that the event name strings used here match the actual event names\n\t\t\tconst nodeChanged: keyof TreeChangeEvents = \"nodeChanged\";\n\t\t\tconst treeChanged: keyof TreeChangeEvents = \"treeChanged\";\n\t\t\tthrow new UsageError(\n\t\t\t\t`${action} is forbidden during a ${nodeChanged} or ${treeChanged} event`,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Allow changes to be made to {@link EditLock.editor} again.\n\t * @remarks May only be called when the lock is currently locked.\n\t */\n\tpublic unlock(): void {\n\t\tassert(this.locked, 0xaa8 /* Checkout has not been locked */);\n\t\tthis.locked = false;\n\t}\n}\n\n/**\n * Keeps track of all new forks created until the returned function is invoked, which will dispose all of those for.\n * The returned function may only be called once.\n *\n * @param checkout - The tree checkout for which you want to monitor forks for disposal.\n * @returns a function which can be called to dispose all of the tracked forks.\n */\nfunction trackForksForDisposal(checkout: TreeCheckout): () => void {\n\tconst forks = new Set<TreeCheckout>();\n\tconst onDisposeUnSubscribes: (() => void)[] = [];\n\tconst onForkUnSubscribe = onForkTransitive(checkout, (fork) => {\n\t\tforks.add(fork);\n\t\tonDisposeUnSubscribes.push(fork.events.on(\"dispose\", () => forks.delete(fork)));\n\t});\n\tlet disposed = false;\n\treturn () => {\n\t\tassert(!disposed, 0xaa9 /* Forks may only be disposed once */);\n\t\tfor (const fork of forks) {\n\t\t\tfork.dispose();\n\t\t}\n\t\tfor (const unsubscribe of onDisposeUnSubscribes) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tonForkUnSubscribe();\n\t\tdisposed = true;\n\t};\n}\n\nfunction verboseFromCursor(\n\treader: ITreeCursor,\n\tschema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,\n): VerboseTree {\n\tconst fields = customFromCursorStored(reader, schema, verboseFromCursor);\n\tconst nodeSchema =\n\t\tschema.get(reader.type) ?? fail(0xac9 /* missing schema for type in cursor */);\n\tif (nodeSchema instanceof LeafNodeStoredSchema) {\n\t\treturn fields as CustomTreeValue;\n\t}\n\n\treturn {\n\t\ttype: reader.type,\n\t\tfields: fields as CustomTreeNode<IFluidHandle>,\n\t};\n}\n\ninterface SerializedChange {\n\tversion: 1;\n\trevision: RevisionTag;\n\tchange: JsonCompatibleReadOnly;\n\toriginatorId: SessionId;\n}\n\nfunction isSerializedChange(value: unknown): value is SerializedChange {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn false;\n\t}\n\tconst change = value as Partial<SerializedChange>;\n\treturn (\n\t\tchange.version === 1 &&\n\t\t(change.revision === \"root\" || typeof change.revision === \"number\") &&\n\t\ttypeof change.originatorId === \"string\" &&\n\t\tisStableId(change.originatorId) &&\n\t\tchange.change !== undefined\n\t);\n}\n"]}
1
+ {"version":3,"file":"treeCheckout.js","sourceRoot":"","sources":["../../src/shared-tree/treeCheckout.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 { createEmitter } from \"@fluid-internal/client-utils\";\nimport type { IDisposable } from \"@fluidframework/core-interfaces\";\nimport type { IFluidHandle, Listenable } from \"@fluidframework/core-interfaces/internal\";\nimport { assert, unreachableCase, fail } from \"@fluidframework/core-utils/internal\";\nimport type { IIdCompressor, SessionId } from \"@fluidframework/id-compressor\";\nimport { isStableId } from \"@fluidframework/id-compressor/internal\";\nimport {\n\tUsageError,\n\ttype ITelemetryLoggerExt,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nimport {\n\tFluidClientVersion,\n\tFormatValidatorNoOp,\n\ttype CodecWriteOptions,\n} from \"../codec/index.js\";\nimport {\n\ttype Anchor,\n\ttype AnchorLocator,\n\ttype AnchorNode,\n\tAnchorSet,\n\ttype AnchorSetRootEvents,\n\ttype ChangeFamily,\n\tCommitKind,\n\ttype DeltaVisitor,\n\ttype DetachedFieldIndex,\n\ttype IEditableForest,\n\ttype IForestSubscription,\n\ttype JsonableTree,\n\tRevertibleStatus,\n\ttype RevisionTag,\n\ttype RevisionTagCodec,\n\ttype TreeStoredSchema,\n\tTreeStoredSchemaRepository,\n\ttype TreeStoredSchemaSubscription,\n\tcombineVisitors,\n\tmakeDetachedFieldIndex,\n\trebaseChange,\n\trootFieldKey,\n\ttagChange,\n\tvisitDelta,\n\ttype RevertibleAlphaFactory,\n\ttype RevertibleAlpha,\n\ttype GraphCommit,\n\tisAncestor,\n\tmoveToDetachedField,\n\ttype ITreeCursor,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeNodeStoredSchema,\n\tLeafNodeStoredSchema,\n\ttype ChangeAtomId,\n\toffsetChangeAtomId,\n\tdiffHistories,\n\ttype ChangeMetadata,\n\ttype ChangeEncodingContext,\n\ttype ReadOnlyDetachedFieldIndex,\n\tmakeAnonChange,\n\ttype TaggedChange,\n\ttype EditorOptions,\n} from \"../core/index.js\";\nimport {\n\ttype DetachedRootIds,\n\ttype DetachedRootLocation,\n\ttype DetachedRootsLocation,\n\ttype FieldBatchCodec,\n\ttype Locator,\n\ttype TreeCompressionStrategy,\n\tallowsRepoSuperset,\n\tbuildForest,\n\tchangeAtomFromDetachedNodeId,\n\tcreateNodeIdentifierManager,\n\tdefaultSchemaPolicy,\n\tintoDelta,\n\tjsonableTreeFromCursor,\n\tmakeFieldBatchCodec,\n\tnodeIdFromChangeAtom,\n} from \"../feature-libraries/index.js\";\nimport {\n\tSquashingTransactionStack,\n\tSharedTreeBranch,\n\tTransactionResult,\n\tonForkTransitive,\n\ttype SharedTreeBranchChange,\n\ttype Transactor,\n} from \"../shared-tree-core/index.js\";\nimport {\n\ttype ImplicitFieldSchema,\n\ttype ReadSchema,\n\ttype TreeView,\n\ttype TreeViewConfiguration,\n\ttype UnsafeUnknownSchema,\n\ttype ViewableTree,\n\ttype TreeBranch,\n\ttype TreeChangeEvents,\n\ttype VerboseTree,\n\tcustomFromCursorStored,\n\ttype CustomTreeValue,\n\ttype CustomTreeNode,\n} from \"../simple-tree/index.js\";\nimport {\n\tBreakable,\n\tdisposeSymbol,\n\tgetOrCreate,\n\thasSome,\n\tmakeArray,\n\ttype JsonCompatibleReadOnly,\n\ttype WithBreakable,\n} from \"../util/index.js\";\n\nimport { getCheckout, SchematizingSimpleTreeView } from \"./schematizingTreeView.js\";\nimport { SharedTreeChangeEnricher } from \"./sharedTreeChangeEnricher.js\";\nimport { SharedTreeChangeFamily, hasSchemaChange } from \"./sharedTreeChangeFamily.js\";\nimport type { SharedTreeChange } from \"./sharedTreeChangeTypes.js\";\nimport {\n\tLocationBasedSharedTreeEditBuilder,\n\ttype IIdBasedSharedTreeEditor,\n\ttype ILocationBasedSharedTreeEditor,\n\ttype IdBasedSharedTreeEditBuilder,\n} from \"./sharedTreeEditBuilder.js\";\n\n/**\n * Events for {@link ITreeCheckout}.\n */\nexport interface CheckoutEvents {\n\t/**\n\t * The view is currently in a consistent state, but a batch of changes is about to be processed.\n\t * @remarks Once this event fires, it is not safe to access the FlexTree, Forest and AnchorSet again until the corresponding {@link CheckoutEvents.afterBatch} fires.\n\t * Every call to `beforeBatch` will be followed by a corresponding call to `afterBatch` (before any more calls to `beforeBatch`).\n\t * @param change - The {@link SharedTreeBranchChange | change} to the checkout's active branch that is about to be processed.\n\t * May be empty if the changes were produced by e.g. a rebase or the initial loading of the document.\n\t */\n\tbeforeBatch(change: SharedTreeBranchChange<SharedTreeChange>): void;\n\n\t/**\n\t * A batch of changes has finished processing and the view is in a consistent state.\n\t * @remarks It is once again safe to access the FlexTree, Forest and AnchorSet.\n\t *\n\t * While every call to `beforeBatch` will be followed by a corresponding call to `afterBatch`, the converse is not true.\n\t * This event may be fired without a preceding `beforeBatch` event if the checkout's branch and forest were directly updated via e.g. a summary load rather than via normal application of changes.\n\t * @remarks\n\t * This is mainly useful for knowing when to do followup work scheduled during events from Anchors.\n\t */\n\tafterBatch(): void;\n\n\t/**\n\t * Fired when a change is made to the branch. Includes data about the change that is made which listeners\n\t * can use to filter on changes they care about e.g. local vs remote changes.\n\t *\n\t * @param data - information about the change\n\t */\n\tchanged(data: ChangeMetadata, getRevertible?: RevertibleAlphaFactory): void;\n\n\t/**\n\t * Fired when a new branch is created from this checkout.\n\t */\n\tfork(branch: ITreeCheckout): void;\n\n\t/**\n\t * Fired when the checkout is disposed.\n\t */\n\tdispose(): void;\n}\n\n/**\n * A \"version control\"-style branch of a SharedTree.\n * @remarks Branches may be used to coordinate edits to a SharedTree, e.g. via merge and rebase operations.\n * Changes applied to a branch of a branch only apply to that branch and are isolated from other branches.\n * Changes may be synchronized across branches via merge and rebase operations provided on the branch object.\n * @alpha @sealed\n */\nexport interface BranchableTree extends ViewableTree {\n\t/**\n\t * Spawn a new branch which is based off of the current state of this branch.\n\t * Any mutations of the new branch will not apply to this branch until the new branch is merged back into this branch via `merge()`.\n\t */\n\tbranch(): TreeBranchFork;\n\n\t/**\n\t * Apply all the new changes on the given branch to this branch.\n\t * @param view - a branch which was created by a call to `branch()`.\n\t * It is automatically disposed after the merge completes.\n\t * @remarks All ongoing transactions (if any) in `branch` will be committed before the merge.\n\t * A \"changed\" event and a corresponding {@link Revertible} will be emitted on this branch for each new change merged from 'branch'.\n\t */\n\tmerge(branch: TreeBranchFork): void;\n\n\t/**\n\t * Apply all the new changes on the given branch to this branch.\n\t * @param branch - a branch which was created by a call to `branch()`.\n\t * @param disposeMerged - whether or not to dispose `branch` after the merge completes.\n\t * @remarks All ongoing transactions (if any) in `branch` will be committed before the merge.\n\t */\n\tmerge(branch: TreeBranchFork, disposeMerged: boolean): void;\n\n\t/**\n\t * Rebase the given branch onto this branch.\n\t * @param branch - a branch which was created by a call to `branch()`. It is modified by this operation.\n\t */\n\trebase(branch: TreeBranchFork): void;\n}\n\n/**\n * A {@link BranchableTree | branch} of a SharedTree that has merged from another branch.\n * @remarks This branch should be disposed when it is no longer needed in order to free resources.\n * @alpha @sealed\n */\nexport interface TreeBranchFork extends BranchableTree, IDisposable {\n\t/**\n\t * Rebase the changes that have been applied to this branch over all the new changes in the given branch.\n\t * @param branch - Either the root branch or a branch that was created by a call to `branch()`. It is not modified by this operation.\n\t */\n\trebaseOnto(branch: BranchableTree): void;\n}\n\n/**\n * Provides a means for interacting with a SharedTree.\n * This includes reading data from the tree and running transactions to mutate the tree.\n * @remarks This interface should not have any implementations other than those provided by the SharedTree package libraries.\n * @privateRemarks\n * API for interacting with a {@link SharedTreeBranch}.\n * Implementations of this interface must implement the {@link branchKey} property.\n */\nexport interface ITreeCheckout extends AnchorLocator, ViewableTree, WithBreakable {\n\t/**\n\t * Read and Write access for schema stored in the document.\n\t *\n\t * These APIs are temporary and will be replaced with different abstractions (View Schema based) in a different place later.\n\t *\n\t * TODO:\n\t * Editing of this should be moved into transactions with the rest of tree editing to they can be intermixed.\n\t * This will be done after the relations between views, branches and Indexes are figured out.\n\t *\n\t * TODO:\n\t * Public APIs for dealing with schema should be in terms of View Schema, and schema update policies.\n\t * The actual stored schema should be hidden (or ar least not be the most prominent way to interact with schema).\n\t *\n\t * TODO:\n\t * Something should ensure the document contents are always in schema.\n\t */\n\treadonly storedSchema: TreeStoredSchemaSubscription;\n\t/**\n\t * Current contents.\n\t * Updated by edits (local and remote).\n\t * Use `editor` to create a local edit.\n\t */\n\treadonly forest: IForestSubscription;\n\n\t/**\n\t * Used to edit the state of the tree. Edits will be immediately applied locally to the tree.\n\t * If there is no transaction currently ongoing, then the edits will be submitted to Fluid immediately as well.\n\t */\n\treadonly editor: ILocationBasedSharedTreeEditor;\n\n\t/**\n\t * A collection of functions for managing transactions.\n\t */\n\treadonly transaction: Transactor;\n\n\tbranch(): ITreeCheckoutFork;\n\n\tmerge(checkout: ITreeCheckoutFork): void;\n\n\tmerge(checkout: ITreeCheckoutFork, disposeMerged: boolean): void;\n\n\trebase(checkout: ITreeCheckoutFork): void;\n\n\t/**\n\t * Replaces all schema with the provided schema.\n\t * Can over-write preexisting schema, and removes unmentioned schema.\n\t *\n\t * @param newSchema - The new schema to replace the existing schema.\n\t * @param allowNonSupersetSchema - Whether to allow non-superset schemas.\n\t * Defaults to false.\n\t * If false, an assert will be thrown if the new schema does not permit all possible documents which were permitted under the old schema.\n\t */\n\tupdateSchema(newSchema: TreeStoredSchema, allowNonSupersetSchema?: true): void;\n\n\t/**\n\t * Events about this view.\n\t */\n\treadonly events: Listenable<CheckoutEvents>;\n\n\t/**\n\t * Events about the root of the tree in this view.\n\t */\n\treadonly rootEvents: Listenable<AnchorSetRootEvents>;\n\n\t/**\n\t * Returns a JsonableTree for each tree that was removed from (and not restored to) the document.\n\t * This list is guaranteed to contain all nodes that are recoverable through undo/redo on this checkout.\n\t * The list may also contain additional nodes.\n\t *\n\t * This is only intended for use in testing and exceptional code paths: it is not performant.\n\t */\n\tgetRemovedRoots(): [string | number | undefined, number, JsonableTree][];\n}\n\n/**\n * Creates a {@link TreeCheckout}.\n * @param args - an object containing optional components that will be used to build the view.\n * Any components not provided will be created by default.\n * @remarks This does not create a {@link SharedTree}, but rather a view with the minimal state\n * and functionality required to implement {@link ITreeCheckout}.\n */\nexport function createTreeCheckout(\n\tidCompressor: IIdCompressor,\n\tmintRevisionTag: () => RevisionTag,\n\trevisionTagCodec: RevisionTagCodec,\n\teditorOptions: EditorOptions,\n\targs?: {\n\t\tbranch?: SharedTreeBranch<IdBasedSharedTreeEditBuilder, SharedTreeChange>;\n\t\tchangeFamily?: ChangeFamily<IdBasedSharedTreeEditBuilder, SharedTreeChange>;\n\t\tschema?: TreeStoredSchemaRepository;\n\t\tforest?: IEditableForest;\n\t\tfieldBatchCodec?: FieldBatchCodec;\n\t\tremovedRoots?: DetachedFieldIndex;\n\t\tchunkCompressionStrategy?: TreeCompressionStrategy;\n\t\tlogger?: ITelemetryLoggerExt;\n\t\tbreaker?: Breakable;\n\t\tdisposeForksAfterTransaction?: boolean;\n\t\tcodecOptions?: Partial<CodecWriteOptions>;\n\t},\n): TreeCheckout {\n\tconst breaker = args?.breaker ?? new Breakable(\"TreeCheckout\");\n\tconst schema = args?.schema ?? new TreeStoredSchemaRepository();\n\tconst forest = args?.forest ?? buildForest(breaker, schema);\n\tconst defaultCodecOptions: CodecWriteOptions = {\n\t\tjsonValidator: FormatValidatorNoOp,\n\t\tminVersionForCollab: FluidClientVersion.v2_0,\n\t};\n\tconst codecOptions: CodecWriteOptions = { ...defaultCodecOptions, ...args?.codecOptions };\n\tconst changeFamily =\n\t\targs?.changeFamily ??\n\t\tnew SharedTreeChangeFamily(\n\t\t\trevisionTagCodec,\n\t\t\targs?.fieldBatchCodec ?? makeFieldBatchCodec(codecOptions),\n\t\t\tcodecOptions,\n\t\t\targs?.chunkCompressionStrategy,\n\t\t\tidCompressor,\n\t\t);\n\n\t// TODO: If a branch is passed in, is it supposed to be local main?\n\t// Otherwise shouldn't we set `isSharedBranch` to false?\n\tconst branch =\n\t\targs?.branch ??\n\t\tnew SharedTreeBranch(\n\t\t\t{\n\t\t\t\tchange: changeFamily.rebaser.compose([]),\n\t\t\t\trevision: \"root\",\n\t\t\t},\n\t\t\tchangeFamily,\n\t\t\t() => idCompressor.generateCompressedId(),\n\t\t);\n\n\treturn new TreeCheckout(\n\t\tbranch,\n\t\ttrue,\n\t\tchangeFamily,\n\t\tschema,\n\t\tforest,\n\t\tmintRevisionTag,\n\t\trevisionTagCodec,\n\t\tidCompressor,\n\t\teditorOptions,\n\t\targs?.removedRoots,\n\t\targs?.logger,\n\t\tbreaker,\n\t\targs?.disposeForksAfterTransaction,\n\t);\n}\n\n/**\n * Branch (like in a version control system) of SharedTree.\n *\n * {@link ITreeCheckout} that has forked off of the main trunk/branch.\n */\nexport interface ITreeCheckoutFork extends ITreeCheckout {\n\trebaseOnto(view: ITreeCheckout): void;\n}\n\n/**\n * Metrics derived from a revert operation.\n *\n * @see {@link TreeCheckout.revertRevertible}.\n */\nexport interface RevertMetrics {\n\t/**\n\t * The age of the revertible commit relative to the head of the branch to which the reversion will be applied.\n\t */\n\treadonly age: number;\n\n\t// TODO: add other stats as needed for telemetry, etc.\n}\n\n/**\n * An implementation of {@link ITreeCheckoutFork}.\n */\nexport class TreeCheckout implements ITreeCheckoutFork {\n\tpublic disposed = false;\n\n\tprivate editLock: EditLock;\n\tprivate readonly locator: Locator;\n\n\t/**\n\t * User-defined label associated with the transaction whose commit is currently being produced for this checkout.\n\t *\n\t * @remarks\n\t * This label is used to implement {@link TreeCheckout.runWithTransactionLabel}.\n\t */\n\tprivate transactionLabel?: unknown;\n\n\tprivate readonly views = new Set<TreeView<ImplicitFieldSchema>>();\n\n\t/**\n\t * Set of revertibles maintained for automatic disposal\n\t */\n\tprivate readonly revertibles = new Set<RevertibleAlpha>();\n\n\t/**\n\t * Each branch's head commit corresponds to a revertible commit.\n\t * Maintaining a whole branch ensures the commit graph is not pruned in a way that would prevent the commit from\n\t * being reverted.\n\t */\n\tprivate readonly revertibleCommitBranches = new Map<\n\t\tRevisionTag,\n\t\tSharedTreeBranch<IdBasedSharedTreeEditBuilder, SharedTreeChange>\n\t>();\n\n\t/**\n\t * The name of the telemetry event logged for calls to {@link TreeCheckout.revertRevertible}.\n\t * @privateRemarks Exposed for testing purposes.\n\t */\n\tpublic static readonly revertTelemetryEventName = \"RevertRevertible\";\n\n\treadonly #events = createEmitter<CheckoutEvents>();\n\tpublic events: Listenable<CheckoutEvents> = this.#events;\n\n\tpublic constructor(\n\t\tbranch: SharedTreeBranch<IdBasedSharedTreeEditBuilder, SharedTreeChange>,\n\t\t/** True if and only if this checkout is for a branch which is persisted and shared with other clients. */\n\t\tpublic readonly isSharedBranch: boolean,\n\t\tprivate readonly changeFamily: ChangeFamily<\n\t\t\tIdBasedSharedTreeEditBuilder,\n\t\t\tSharedTreeChange\n\t\t>,\n\t\tpublic readonly storedSchema: TreeStoredSchemaRepository,\n\t\tpublic readonly forest: IEditableForest,\n\t\tprivate readonly mintRevisionTag: () => RevisionTag,\n\t\tprivate readonly revisionTagCodec: RevisionTagCodec,\n\t\tprivate readonly idCompressor: IIdCompressor,\n\t\tpublic readonly editorOptions: EditorOptions,\n\t\tprivate readonly _removedRoots: DetachedFieldIndex = makeDetachedFieldIndex(\n\t\t\t\"repair\",\n\t\t\trevisionTagCodec,\n\t\t\tidCompressor,\n\t\t),\n\t\t/** Optional logger for telemetry. */\n\t\tprivate readonly logger?: ITelemetryLoggerExt,\n\t\tpublic readonly breaker: Breakable = new Breakable(\"TreeCheckout\"),\n\t\tpublic readonly disposeForksAfterTransaction = true,\n\t) {\n\t\tthis.#transaction = this.createTransactionStack(branch);\n\t\tthis.editLock = new EditLock(this.#transaction.activeBranchEditor);\n\t\tthis.locator = {\n\t\t\tlocationFromId: (id: ChangeAtomId): DetachedRootLocation => {\n\t\t\t\tconst rootId = this.removedRoots.getEntry(nodeIdFromChangeAtom(id));\n\t\t\t\treturn this.removedRoots.toFieldKey(rootId);\n\t\t\t},\n\t\t\tidFromLocation: (location: DetachedRootLocation): ChangeAtomId => {\n\t\t\t\tconst nodeId = this.removedRoots.fromFieldKey(location);\n\t\t\t\treturn changeAtomFromDetachedNodeId(nodeId);\n\t\t\t},\n\t\t\tlocationsFromIdRanges: (ids: DetachedRootIds): DetachedRootsLocation => {\n\t\t\t\treturn ids.flatMap((id) => {\n\t\t\t\t\treturn makeArray(id.count, (offset) => {\n\t\t\t\t\t\tconst field = this.locator.locationFromId(offsetChangeAtomId(id.first, offset));\n\t\t\t\t\t\treturn { field, count: 1 };\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tidRangesFromLocations: (ids: DetachedRootsLocation): DetachedRootIds => {\n\t\t\t\treturn ids.map((id) => {\n\t\t\t\t\tassert(id.count === 1, \"Expected count of 1\");\n\t\t\t\t\tconst first = this.locator.idFromLocation(id.field);\n\t\t\t\t\treturn { first, count: id.count };\n\t\t\t\t});\n\t\t\t},\n\t\t\tisAttachable: (id: ChangeAtomId): boolean | undefined => {\n\t\t\t\treturn this.removedRoots.isAttachable(nodeIdFromChangeAtom(id));\n\t\t\t},\n\t\t};\n\t\tthis.registerForBranchEvents();\n\t}\n\n\t/**\n\t * Helper method for {@link SchematizingSimpleTreeView.runTransaction} to properly clear transaction labels once the function completes.\n\t *\n\t * @remarks\n\t * The label is stored during the execution of the function and will be included in the {@link ChangeMetadata} of the transaction.\n\t *\n\t * Labels supplied to nested transactions are ignored - only the outermost transaction label is ever used.\n\t *\n\t * @param fn - The function to execute. It receives the user provided transaction label as an optional parameter.\n\t * @param label - The label to associate with the outermost transaction.\n\t * @returns The result of executing `fn`.\n\t */\n\tpublic runWithTransactionLabel<TLabel, TResult>(\n\t\tfn: (label?: TLabel) => TResult,\n\t\tlabel: TLabel | undefined,\n\t): TResult {\n\t\t// If a transaction label is already set, nesting is occurring, so we should not override it.\n\t\tif (this.transactionLabel !== undefined) {\n\t\t\treturn fn(this.transactionLabel as TLabel);\n\t\t}\n\t\tthis.transactionLabel = label;\n\t\ttry {\n\t\t\treturn fn(this.transactionLabel as TLabel);\n\t\t} finally {\n\t\t\tthis.transactionLabel = undefined;\n\t\t}\n\t}\n\n\tpublic get removedRoots(): ReadOnlyDetachedFieldIndex {\n\t\treturn this._removedRoots;\n\t}\n\n\tprivate registerForBranchEvents(): void {\n\t\tthis.#transaction.branch.events.on(\"afterChange\", this.onAfterBranchChange);\n\t\tthis.#transaction.activeBranchEvents.on(\"afterChange\", this.onAfterChange);\n\t\tthis.#transaction.activeBranchEvents.on(\"ancestryTrimmed\", this.onAncestryTrimmed);\n\t}\n\n\tprivate unregisterFromBranchEvents(): void {\n\t\tthis.#transaction.branch.events.off(\"afterChange\", this.onAfterBranchChange);\n\t\tthis.#transaction.activeBranchEvents.off(\"afterChange\", this.onAfterChange);\n\t\tthis.#transaction.activeBranchEvents.off(\"ancestryTrimmed\", this.onAncestryTrimmed);\n\t}\n\n\tprivate createTransactionStack(\n\t\tbranch: SharedTreeBranch<IdBasedSharedTreeEditBuilder, SharedTreeChange>,\n\t): SquashingTransactionStack<IdBasedSharedTreeEditBuilder, SharedTreeChange> {\n\t\treturn new SquashingTransactionStack(branch, this.mintRevisionTag, () => {\n\t\t\tconst disposeForks = this.disposeForksAfterTransaction\n\t\t\t\t? trackForksForDisposal(this)\n\t\t\t\t: undefined;\n\t\t\t// When each transaction is started, make a restorable checkpoint of the current state of removed roots\n\t\t\tconst restoreRemovedRoots = this._removedRoots.createCheckpoint();\n\t\t\treturn (result, viewUpdate: SharedTreeChange | undefined) => {\n\t\t\t\tconst newHead = this.#transaction.branch.getHead();\n\t\t\t\tswitch (result) {\n\t\t\t\t\tcase TransactionResult.Abort: {\n\t\t\t\t\t\trestoreRemovedRoots();\n\t\t\t\t\t\tif (viewUpdate !== undefined) {\n\t\t\t\t\t\t\tthis.applyChange(viewUpdate, newHead.revision);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase TransactionResult.Commit: {\n\t\t\t\t\t\tif (viewUpdate !== undefined) {\n\t\t\t\t\t\t\tthis.applyChange(viewUpdate, newHead.revision);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!this.transaction.isInProgress()) {\n\t\t\t\t\t\t\t// The changes in a transaction squash commit have already applied to the checkout and are known to be valid, so we can validate the squash commit automatically.\n\t\t\t\t\t\t\tthis.validateCommit(newHead);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tunreachableCase(result);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdisposeForks?.();\n\t\t\t};\n\t\t});\n\t}\n\n\tpublic exportVerbose(): VerboseTree | undefined {\n\t\tconst cursor = this.forest.allocateCursor(\"contentSnapshot\");\n\t\ttry {\n\t\t\tmoveToDetachedField(this.forest, cursor);\n\t\t\tconst length = cursor.getFieldLength();\n\t\t\tif (length === 0) {\n\t\t\t\treturn undefined;\n\t\t\t} else if (length === 1) {\n\t\t\t\tcursor.enterNode(0);\n\t\t\t\treturn verboseFromCursor(cursor, this.storedSchema.nodeSchema);\n\t\t\t} else {\n\t\t\t\tfail(0xac8 /* Invalid document root length */);\n\t\t\t}\n\t\t} finally {\n\t\t\tcursor.free();\n\t\t}\n\t}\n\n\tprivate readonly onAfterBranchChange = (\n\t\tevent: SharedTreeBranchChange<SharedTreeChange>,\n\t): void => {\n\t\t// The following logic allows revertibles to be generated for the change.\n\t\t// Currently only appends (including merges and transaction commits) are supported.\n\t\tif (event.type === \"append\") {\n\t\t\t// TODO:#20949: When the SharedTree is detached, these commits will already have been garbage collected.\n\t\t\t// Figure out a way to generate revertibles before the commits are garbage collected.\n\t\t\tfor (const commit of event.newCommits) {\n\t\t\t\tconst kind = event.type === \"append\" ? event.kind : CommitKind.Default;\n\t\t\t\tconst { change, revision } = commit;\n\n\t\t\t\tconst getRevertible = hasSchemaChange(change)\n\t\t\t\t\t? undefined\n\t\t\t\t\t: (onRevertibleDisposed?: (revertible: RevertibleAlpha) => void) => {\n\t\t\t\t\t\t\tif (!withinEventContext) {\n\t\t\t\t\t\t\t\tthrow new UsageError(\n\t\t\t\t\t\t\t\t\t\"Cannot get a revertible outside of the context of a changed event.\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this.revertibleCommitBranches.get(revision) !== undefined) {\n\t\t\t\t\t\t\t\tthrow new UsageError(\n\t\t\t\t\t\t\t\t\t\"Cannot generate the same revertible more than once. Note that this can happen when multiple changed event listeners are registered.\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst revertible = this.createRevertible(\n\t\t\t\t\t\t\t\trevision,\n\t\t\t\t\t\t\t\tkind,\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\tonRevertibleDisposed,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.revertibleCommitBranches.set(\n\t\t\t\t\t\t\t\trevision,\n\t\t\t\t\t\t\t\tthis.#transaction.activeBranch.fork(commit),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.revertibles.add(revertible);\n\t\t\t\t\t\t\treturn revertible;\n\t\t\t\t\t\t};\n\n\t\t\t\tlet withinEventContext = true;\n\n\t\t\t\tconst metadata: ChangeMetadata = {\n\t\t\t\t\tkind,\n\t\t\t\t\tisLocal: true,\n\t\t\t\t\tgetChange: () => {\n\t\t\t\t\t\tconst context: ChangeEncodingContext = {\n\t\t\t\t\t\t\tidCompressor: this.idCompressor,\n\t\t\t\t\t\t\toriginatorId: this.idCompressor.localSessionId,\n\t\t\t\t\t\t\trevision,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst encodedChange = this.changeFamily.codecs.resolve(4).encode(change, context);\n\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tcommit.parent !== undefined,\n\t\t\t\t\t\t\t0xca4 /* Expected applied commit to be parented */,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\trevision,\n\t\t\t\t\t\t\toriginatorId: this.idCompressor.localSessionId,\n\t\t\t\t\t\t\tchange: encodedChange,\n\t\t\t\t\t\t} satisfies SerializedChange;\n\t\t\t\t\t},\n\t\t\t\t\tgetRevertible: (onDisposed) => getRevertible?.(onDisposed),\n\t\t\t\t\tlabel: this.transactionLabel,\n\t\t\t\t};\n\n\t\t\t\tthis.#events.emit(\"changed\", metadata, getRevertible);\n\t\t\t\twithinEventContext = false;\n\t\t\t}\n\t\t} else if (this.isRemoteChangeEvent(event)) {\n\t\t\t// TODO: figure out how to plumb through commit kind info for remote changes\n\t\t\tthis.#events.emit(\"changed\", {\n\t\t\t\tisLocal: false,\n\t\t\t\tkind: CommitKind.Default,\n\t\t\t});\n\t\t}\n\t};\n\n\tprivate readonly onAfterChange = (event: SharedTreeBranchChange<SharedTreeChange>): void => {\n\t\tthis.editLock.lock();\n\t\tthis.#events.emit(\"beforeBatch\", event);\n\t\tif (event.change !== undefined) {\n\t\t\tconst revision =\n\t\t\t\tevent.type === \"rebase\"\n\t\t\t\t\t? this.#transaction.activeBranch.getHead().revision\n\t\t\t\t\t: event.change.revision;\n\n\t\t\tthis.applyChange(event.change.change, revision);\n\t\t}\n\t\tthis.#events.emit(\"afterBatch\");\n\t\tthis.editLock.unlock();\n\t\tif (event.type === \"append\") {\n\t\t\tfor (const commit of event.newCommits) {\n\t\t\t\tthis.validateCommit(commit);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Applies the given serialized change (as was produced via a `\"changed\"` event of another checkout) to this checkout.\n\t */\n\tpublic applySerializedChange(serializedChange: JsonCompatibleReadOnly): void {\n\t\tif (!isSerializedChange(serializedChange)) {\n\t\t\tthrow new UsageError(`Cannot apply change. Invalid serialized change format.`);\n\t\t}\n\t\tconst { revision, originatorId, change } = serializedChange;\n\t\tif (originatorId !== this.idCompressor.localSessionId) {\n\t\t\tthrow new UsageError(\n\t\t\t\t`Cannot apply change. A serialized changed must be applied to the same SharedTree as it was created from.`,\n\t\t\t);\n\t\t}\n\t\tconst context: ChangeEncodingContext = {\n\t\t\tidCompressor: this.idCompressor,\n\t\t\toriginatorId: this.idCompressor.localSessionId,\n\t\t\trevision,\n\t\t};\n\t\tconst decodedChange = this.changeFamily.codecs.resolve(4).decode(change, context);\n\t\tthis.applyChange(decodedChange, revision);\n\t}\n\n\t// Revision is the revision of the commit, if any, which caused this change.\n\tprivate applyChange(change: SharedTreeChange, revision?: RevisionTag): void {\n\t\t// Conflicts due to schema will be empty and thus are not applied.\n\t\tfor (const innerChange of change.changes) {\n\t\t\tif (innerChange.type === \"data\") {\n\t\t\t\tconst delta = intoDelta(tagChange(innerChange.innerChange, revision));\n\t\t\t\tthis.withCombinedVisitor((visitor) => {\n\t\t\t\t\tvisitDelta(delta, visitor, this._removedRoots, revision);\n\t\t\t\t});\n\t\t\t} else if (innerChange.type === \"schema\") {\n\t\t\t\t// Schema changes from a current to a new schema are expected to be backwards compatible.\n\t\t\t\t// This guarantees that all data in the forest (which is valid before the schema change)\n\t\t\t\t// is also valid under the new schema.\n\t\t\t\t// Note however, that such schema changes may in some cases be rolled back:\n\t\t\t\t// Case 1: A transaction with a schema change may be aborted.\n\t\t\t\t// The transaction may have made some data changes that would render some trees invalid\n\t\t\t\t// under the old schema, but these changes will also be rolled back, thereby putting the forest\n\t\t\t\t// back in the state before the transaction, which is valid under the original (reinstated) schema.\n\t\t\t\t// Case 2: A branch with a schema change may be rebased such that the schema change (because\n\t\t\t\t// of a constraint) is no longer applied.\n\t\t\t\t// Such a branch may contain data changes that would render some trees invalid under the\n\t\t\t\t// original schema. These data changes may not necessarily be rolled back.\n\t\t\t\t// They will however be rebased over the rollback of the schema change. This rebasing will\n\t\t\t\t// ensure that these data changes are muted if they would render some trees invalid under the\n\t\t\t\t// original (reinstated) schema.\n\t\t\t\tthis.storedSchema.apply(innerChange.innerChange.schema.new);\n\t\t\t} else {\n\t\t\t\tfail(0xad1 /* Unknown Shared Tree change type. */);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate readonly onAncestryTrimmed = (revisions: RevisionTag[]): void => {\n\t\t// When the branch is trimmed, we can garbage collect any repair data whose latest relevant revision is one of the\n\t\t// trimmed revisions.\n\t\tthis.withCombinedVisitor((visitor) => {\n\t\t\tfor (const revision of revisions) {\n\t\t\t\t// get all the roots last created or used by the revision\n\t\t\t\tconst roots = this._removedRoots.getRootsLastTouchedByRevision(revision);\n\n\t\t\t\t// get the detached field for the root and delete it from the removed roots\n\t\t\t\tfor (const root of roots) {\n\t\t\t\t\tvisitor.destroy(this._removedRoots.toFieldKey(root), 1);\n\t\t\t\t}\n\n\t\t\t\tthis._removedRoots.deleteRootsLastTouchedByRevision(revision);\n\t\t\t}\n\t\t});\n\t};\n\n\tprivate withCombinedVisitor(fn: (visitor: DeltaVisitor) => void): void {\n\t\tconst anchorVisitor = this.forest.anchors.acquireVisitor();\n\t\tconst combinedVisitor = combineVisitors([this.forest.acquireVisitor(), anchorVisitor]);\n\t\tfn(combinedVisitor);\n\t\tcombinedVisitor.free();\n\t}\n\n\tprivate checkNotDisposed(usageError?: string): void {\n\t\tthis.breaker.use();\n\t\tif (this.disposed) {\n\t\t\tif (usageError !== undefined) {\n\t\t\t\tthrow new UsageError(usageError);\n\t\t\t}\n\t\t\tassert(false, 0x911 /* Invalid operation on a disposed TreeCheckout */);\n\t\t}\n\t}\n\n\t/**\n\t * Creates a {@link RevertibleAlpha} object that can undo a specific change in the tree's history.\n\t * Revision must exist in the given {@link TreeCheckout}'s branch.\n\t *\n\t * @param revision - The revision tag identifying the change to be made revertible.\n\t * @param kind - The {@link CommitKind} that produced this revertible (e.g., Default, Undo, Redo).\n\t * @param checkout - The {@link TreeCheckout} instance this revertible belongs to.\n\t * @param onRevertibleDisposed - Callback function that will be called when the revertible is disposed.\n\t * @returns A {@link RevertibleAlpha} object.\n\t */\n\tprivate createRevertible(\n\t\trevision: RevisionTag,\n\t\tkind: CommitKind,\n\t\tcheckout: TreeCheckout,\n\t\tonRevertibleDisposed: ((revertible: RevertibleAlpha) => void) | undefined,\n\t): RevertibleAlpha {\n\t\tconst commitBranches = checkout.revertibleCommitBranches;\n\n\t\tconst revertible: RevertibleAlpha = {\n\t\t\tget status(): RevertibleStatus {\n\t\t\t\tconst revertibleCommit = commitBranches.get(revision);\n\t\t\t\treturn revertibleCommit === undefined\n\t\t\t\t\t? RevertibleStatus.Disposed\n\t\t\t\t\t: RevertibleStatus.Valid;\n\t\t\t},\n\t\t\trevert: (release: boolean = true) => {\n\t\t\t\tif (revertible.status === RevertibleStatus.Disposed) {\n\t\t\t\t\tthrow new UsageError(\"Unable to revert a revertible that has been disposed.\");\n\t\t\t\t}\n\n\t\t\t\tconst revertMetrics = checkout.revertRevertible(revision, kind);\n\t\t\t\tcheckout.logger?.sendTelemetryEvent({\n\t\t\t\t\teventName: TreeCheckout.revertTelemetryEventName,\n\t\t\t\t\t...revertMetrics,\n\t\t\t\t});\n\n\t\t\t\tif (release) {\n\t\t\t\t\trevertible.dispose();\n\t\t\t\t}\n\t\t\t},\n\t\t\tclone: (targetBranch: TreeBranch) => {\n\t\t\t\t// 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.\n\t\t\t\tconst targetCheckout = getCheckout(targetBranch);\n\n\t\t\t\tconst revertibleBranch = this.revertibleCommitBranches.get(revision);\n\t\t\t\tif (revertibleBranch === undefined) {\n\t\t\t\t\tthrow new UsageError(\"Unable to clone a revertible that has been disposed.\");\n\t\t\t\t}\n\n\t\t\t\tconst commitToRevert = revertibleBranch.getHead();\n\t\t\t\tconst activeBranchHead = targetCheckout.#transaction.activeBranch.getHead();\n\n\t\t\t\tif (isAncestor(commitToRevert, activeBranchHead, true) === false) {\n\t\t\t\t\tthrow new UsageError(\n\t\t\t\t\t\t\"Cannot clone revertible for a commit that is not present on the given branch.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\ttargetCheckout.revertibleCommitBranches.set(revision, revertibleBranch.fork());\n\n\t\t\t\treturn this.createRevertible(revision, kind, targetCheckout, onRevertibleDisposed);\n\t\t\t},\n\t\t\tdispose: () => {\n\t\t\t\tif (revertible.status === RevertibleStatus.Disposed) {\n\t\t\t\t\tthrow new UsageError(\n\t\t\t\t\t\t\"Unable to dispose a revertible that has already been disposed.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcheckout.disposeRevertible(revertible, revision);\n\t\t\t\tonRevertibleDisposed?.(revertible);\n\t\t\t},\n\t\t};\n\n\t\treturn revertible;\n\t}\n\n\t// For the new TreeViewAlpha API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot>;\n\n\t// For the old TreeView API\n\tpublic viewWith<TRoot extends ImplicitFieldSchema>(\n\t\tconfig: TreeViewConfiguration<TRoot>,\n\t): TreeView<TRoot>;\n\n\tpublic viewWith<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema>(\n\t\tconfig: TreeViewConfiguration<ReadSchema<TRoot>>,\n\t): SchematizingSimpleTreeView<TRoot> {\n\t\tconst view = new SchematizingSimpleTreeView(\n\t\t\tthis,\n\t\t\tconfig,\n\t\t\tcreateNodeIdentifierManager(this.idCompressor),\n\t\t\t() => {\n\t\t\t\tthis.views.delete(view);\n\t\t\t},\n\t\t);\n\t\tthis.views.add(view);\n\t\treturn view;\n\t}\n\n\tpublic get rootEvents(): Listenable<AnchorSetRootEvents> {\n\t\treturn this.forest.anchors.events;\n\t}\n\n\tpublic get editor(): ILocationBasedSharedTreeEditor {\n\t\tthis.checkNotDisposed();\n\t\treturn new LocationBasedSharedTreeEditBuilder(\n\t\t\tthis.editLock.editor,\n\t\t\tthis.locator,\n\t\t\tthis.editorOptions,\n\t\t);\n\t}\n\n\tpublic locate(anchor: Anchor): AnchorNode | undefined {\n\t\tthis.checkNotDisposed();\n\t\treturn this.forest.anchors.locate(anchor);\n\t}\n\n\tpublic get transaction(): Transactor {\n\t\treturn this.#transaction;\n\t}\n\t/**\n\t * The {@link Transactor} for this checkout.\n\t * @remarks In the context of a checkout, transactions allow edits to be batched into atomic units.\n\t * 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.\n\t * If the transaction is aborted, the local state will be reset to what it was before the transaction began.\n\t * Transactions may nest, meaning that a transaction may be started while a transaction is already ongoing.\n\t *\n\t * To avoid updating observers of the view state with intermediate results during a transaction,\n\t * use {@link ITreeCheckout#branch} and {@link ISharedTreeFork#merge}.\n\t */\n\t#transaction: SquashingTransactionStack<IdBasedSharedTreeEditBuilder, SharedTreeChange>;\n\n\tpublic branch(): TreeCheckout {\n\t\tthis.checkNotDisposed(\n\t\t\t\"The parent branch has already been disposed and can no longer create new branches.\",\n\t\t);\n\t\tthis.editLock.checkUnlocked(\"Branching\");\n\n\t\t// Branching after an unfinished transaction would expose the application to a state where its invariants may be violated.\n\t\tif (this.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\"A view cannot be forked while it has a pending transaction.\");\n\t\t}\n\n\t\tconst anchors = new AnchorSet();\n\t\tconst branch = this.#transaction.activeBranch.fork();\n\t\tconst storedSchema = this.storedSchema.clone();\n\t\tconst forest = this.forest.clone(storedSchema, anchors);\n\t\tconst checkout = new TreeCheckout(\n\t\t\tbranch,\n\t\t\tfalse,\n\t\t\tthis.changeFamily,\n\t\t\tstoredSchema,\n\t\t\tforest,\n\t\t\tthis.mintRevisionTag,\n\t\t\tthis.revisionTagCodec,\n\t\t\tthis.idCompressor,\n\t\t\tthis.editorOptions,\n\t\t\tthis._removedRoots.clone(),\n\t\t\tthis.logger,\n\t\t\tthis.breaker,\n\t\t\tthis.disposeForksAfterTransaction,\n\t\t);\n\t\tthis.#events.emit(\"fork\", checkout);\n\t\treturn checkout;\n\t}\n\n\tpublic switchBranch(\n\t\tbranch: SharedTreeBranch<IdBasedSharedTreeEditBuilder, SharedTreeChange>,\n\t): void {\n\t\t// TODO: Dispose old branch, if necessary\n\t\tassert(\n\t\t\t!this.#transaction.isInProgress(),\n\t\t\t0xc55 /* Cannot switch branches during a transaction */,\n\t\t);\n\t\tconst diff = diffHistories(\n\t\t\tthis.changeFamily.rebaser,\n\t\t\tthis.#transaction.branch.getHead(),\n\t\t\tbranch.getHead(),\n\t\t\tthis.mintRevisionTag,\n\t\t);\n\n\t\tthis.unregisterFromBranchEvents();\n\n\t\tthis.#transaction = this.createTransactionStack(branch);\n\t\tthis.editLock = new EditLock(this.#transaction.activeBranchEditor);\n\t\tthis.registerForBranchEvents();\n\n\t\t// TODO: Rework eventing\n\t\tthis.applyChange(diff);\n\t\tthis.#events.emit(\"afterBatch\");\n\t}\n\n\tpublic rebase(checkout: TreeCheckout): void {\n\t\tthis.checkNotDisposed(\n\t\t\t\"The target of the branch rebase has been disposed and cannot be rebased.\",\n\t\t);\n\t\tcheckout.checkNotDisposed(\n\t\t\t\"The source of the branch rebase has been disposed and cannot be rebased.\",\n\t\t);\n\t\tthis.editLock.checkUnlocked(\"Rebasing\");\n\n\t\tif (this.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Views cannot be rebased onto a view that has a pending transaction.\",\n\t\t\t);\n\t\t}\n\t\tif (checkout.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\"A view cannot be rebased while it has a pending transaction.\");\n\t\t}\n\n\t\tassert(\n\t\t\t!checkout.isSharedBranch,\n\t\t\t0xa5d /* Shared branches cannot be rebased onto another branch. */,\n\t\t);\n\n\t\tcheckout.#transaction.activeBranch.rebaseOnto(this.#transaction.activeBranch);\n\t}\n\n\tpublic rebaseOnto(checkout: ITreeCheckout): void {\n\t\tthis.checkNotDisposed(\n\t\t\t\"The target of the branch rebase has been disposed and cannot be rebased.\",\n\t\t);\n\t\tcheckout.rebase(this);\n\t}\n\n\tpublic merge(checkout: TreeCheckout): void;\n\tpublic merge(checkout: TreeCheckout, disposeMerged: boolean): void;\n\tpublic merge(checkout: TreeCheckout, disposeMerged = true): void {\n\t\tthis.checkNotDisposed(\n\t\t\t\"The target of the branch merge has been disposed and cannot be merged.\",\n\t\t);\n\t\tcheckout.checkNotDisposed(\n\t\t\t\"The source of the branch merge has been disposed and cannot be merged.\",\n\t\t);\n\t\tthis.editLock.checkUnlocked(\"Merging\");\n\t\tif (this.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Views cannot be merged into a view while it has a pending transaction.\",\n\t\t\t);\n\t\t}\n\t\tif (checkout.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\n\t\t\t\t\"Views with an open transaction cannot be merged into another view.\",\n\t\t\t);\n\t\t}\n\t\tthis.#transaction.activeBranch.merge(checkout.#transaction.activeBranch);\n\t\tif (disposeMerged && !checkout.isSharedBranch) {\n\t\t\t// Dispose the merged checkout unless it is a shared branch.\n\t\t\tcheckout[disposeSymbol]();\n\t\t}\n\t}\n\n\tpublic updateSchema(newSchema: TreeStoredSchema, allowNonSupersetSchema?: true): void {\n\t\tthis.checkNotDisposed();\n\t\tif (allowNonSupersetSchema !== true) {\n\t\t\tassert(\n\t\t\t\tallowsRepoSuperset(defaultSchemaPolicy, this.storedSchema.clone(), newSchema),\n\t\t\t\t0xbe6 /* New schema must allow all documents allowed by old schema */,\n\t\t\t);\n\t\t}\n\t\tthis.editor.schema.setStoredSchema(this.storedSchema.clone(), newSchema);\n\t}\n\n\tpublic dispose(): void {\n\t\tthis.editLock.checkUnlocked(\"Disposing a view\");\n\t\tthis[disposeSymbol]();\n\t}\n\n\tpublic [disposeSymbol](): void {\n\t\tthis.checkNotDisposed(\n\t\t\t\"The branch has already been disposed and cannot be disposed again.\",\n\t\t);\n\t\tthis.disposed = true;\n\t\tthis.#transaction.branch.dispose();\n\t\tthis.#transaction.dispose();\n\t\tthis.purgeRevertibles();\n\t\tfor (const view of this.views) {\n\t\t\tview.dispose();\n\t\t}\n\t\tthis.#events.emit(\"dispose\");\n\t}\n\n\tpublic getRemovedRoots(): [string | number | undefined, number, JsonableTree][] {\n\t\tthis.assertNoUntrackedRoots();\n\t\tconst trees: [string | number | undefined, number, JsonableTree][] = [];\n\t\tconst cursor = this.forest.allocateCursor(\"getRemovedRoots\");\n\t\tfor (const { id, root } of this._removedRoots.entries()) {\n\t\t\tconst parentField = this._removedRoots.toFieldKey(root);\n\t\t\tthis.forest.moveCursorToPath({ parent: undefined, parentField, parentIndex: 0 }, cursor);\n\t\t\tconst tree = jsonableTreeFromCursor(cursor);\n\t\t\t// This method is used for tree consistency comparison.\n\t\t\tconst { major, minor } = id;\n\t\t\tconst finalizedMajor = major === undefined ? major : this.revisionTagCodec.encode(major);\n\t\t\ttrees.push([finalizedMajor, minor, tree]);\n\t\t}\n\t\tcursor.free();\n\t\treturn trees;\n\t}\n\n\t/**\n\t * This must be called on the root/main checkout after loading from a summary.\n\t * @remarks This pattern is necessary because the EditManager skips the normal process of applying commits to branches when loading a summary.\n\t * Instead, it simply {@link SharedTreeBranch#setHead | mutates} the branches directly which does not propagate the typical events throughout the rest of the system.\n\t */\n\tpublic load(): void {\n\t\t// Set the tip revision as the latest relevant revision for any removed roots that are loaded from a summary - this allows them to be garbage collected later.\n\t\t// When a load happens, the head of the trunk and the head of the local/main branch must be the same (this is enforced by SharedTree).\n\t\tthis._removedRoots.setRevisionsForLoadedData(this.#transaction.branch.getHead().revision);\n\t\t// The content of the checkout (e.g. the forest) has (maybe) changed, so fire an afterBatch event.\n\t\tthis.#events.emit(\"afterBatch\");\n\t}\n\n\tprivate purgeRevertibles(): void {\n\t\tfor (const revertible of this.revertibles) {\n\t\t\trevertible.dispose();\n\t\t}\n\t}\n\n\tprivate disposeRevertible(revertible: RevertibleAlpha, revision: RevisionTag): void {\n\t\tthis.revertibleCommitBranches.get(revision)?.dispose();\n\t\tthis.revertibleCommitBranches.delete(revision);\n\t\tthis.revertibles.delete(revertible);\n\t}\n\n\tprivate revertRevertible(revision: RevisionTag, kind: CommitKind): RevertMetrics {\n\t\tthis.editLock.checkUnlocked(\"Reverting a commit\");\n\t\tif (this.transaction.isInProgress()) {\n\t\t\tthrow new UsageError(\"Undo is not yet supported during transactions.\");\n\t\t}\n\n\t\tconst revertibleBranch = this.revertibleCommitBranches.get(revision);\n\t\tassert(revertibleBranch !== undefined, 0x7cc /* expected to find a revertible commit */);\n\t\tconst commitToRevert = revertibleBranch.getHead();\n\t\tconst revisionForInvert = this.mintRevisionTag();\n\n\t\tlet change = tagChange(\n\t\t\tthis.changeFamily.rebaser.invert(commitToRevert, false, revisionForInvert),\n\t\t\trevisionForInvert,\n\t\t);\n\n\t\tconst headCommit = this.#transaction.activeBranch.getHead();\n\t\t// Rebase the inverted change onto any commits that occurred after the undoable commits.\n\t\tif (commitToRevert !== headCommit) {\n\t\t\tchange = tagChange(\n\t\t\t\trebaseChange(\n\t\t\t\t\tthis.changeFamily.rebaser,\n\t\t\t\t\tchange,\n\t\t\t\t\tcommitToRevert,\n\t\t\t\t\theadCommit,\n\t\t\t\t\tthis.mintRevisionTag,\n\t\t\t\t).change,\n\t\t\t\trevisionForInvert,\n\t\t\t);\n\t\t}\n\n\t\tthis.#transaction.activeBranch.apply(\n\t\t\tchange,\n\t\t\tkind === CommitKind.Default || kind === CommitKind.Redo\n\t\t\t\t? CommitKind.Undo\n\t\t\t\t: CommitKind.Redo,\n\t\t);\n\n\t\t// Derive some stats about the reversion to return to the caller.\n\t\tlet revertAge = 0;\n\t\tlet currentCommit = headCommit;\n\t\twhile (commitToRevert.revision !== currentCommit.revision) {\n\t\t\trevertAge++;\n\n\t\t\tconst parentCommit = currentCommit.parent;\n\t\t\tassert(parentCommit !== undefined, 0x9a9 /* expected to find a parent commit */);\n\t\t\tcurrentCommit = parentCommit;\n\t\t}\n\n\t\treturn { age: revertAge };\n\t}\n\n\tprivate assertNoUntrackedRoots(): void {\n\t\tconst cursor = this.forest.getCursorAboveDetachedFields();\n\t\tconst rootFields = new Set([rootFieldKey]);\n\t\tfor (const { root } of this._removedRoots.entries()) {\n\t\t\trootFields.add(this._removedRoots.toFieldKey(root));\n\t\t}\n\n\t\tif (!cursor.firstField()) {\n\t\t\treturn;\n\t\t}\n\n\t\tdo {\n\t\t\tconst field = cursor.getFieldKey();\n\t\t\tassert(\n\t\t\t\trootFields.has(field),\n\t\t\t\t0xa22 /* Forest has a root field which is unknown to the detached field index */,\n\t\t\t);\n\n\t\t\trootFields.delete(field);\n\t\t} while (cursor.nextField());\n\t}\n\n\t/**\n\t * `true` iff the given branch change event is due to a remote change\n\t */\n\tprivate isRemoteChangeEvent(event: SharedTreeBranchChange<SharedTreeChange>): boolean {\n\t\treturn (\n\t\t\t// Remote changes are only ever applied to shared branches\n\t\t\tthis.isSharedBranch &&\n\t\t\t// Remote changes are applied to the branch by rebasing it onto the trunk.\n\t\t\t// No other rebases are allowed on shared branches, so we can use this to detect remote changes.\n\t\t\tevent.type === \"rebase\"\n\t\t);\n\t}\n\n\t// #region Commit Validation\n\n\t/** Used to maintain the contract of {@link onCommitValid}(). */\n\treadonly #validatedCommits = new WeakMap<\n\t\tGraphCommit<SharedTreeChange>,\n\t\t((commit: GraphCommit<SharedTreeChange>) => void)[] | true\n\t>();\n\n\t/**\n\t * Registers a function to be called when the given commit is validated.\n\t * @remarks A commit is validated by the checkout after it has been applied to the checkout's state (e.g. it has an effect on the forest).\n\t * If the commit applies successfully (i.e. it does not raise any unexpected errors), the commit is considered valid and the registered function is called.\n\t * If the commit does not apply successfully (because it causes an unexpected error), the function is not called (and the checkout will left in an error state).\n\t *\n\t * If the commit has already been validated when this function is called, the function is called immediately and this function returns `true`.\n\t * Otherwise, the function is registered to be called later and this function returns `false`.\n\t */\n\tpublic onCommitValid(\n\t\tcommit: GraphCommit<SharedTreeChange>,\n\t\tfn: (commit: GraphCommit<SharedTreeChange>) => void,\n\t): boolean {\n\t\tconst validated = getOrCreate(this.#validatedCommits, commit, () => []);\n\t\tif (validated === true) {\n\t\t\tfn(commit);\n\t\t\treturn true;\n\t\t}\n\n\t\tvalidated.push(fn);\n\t\treturn false;\n\t}\n\n\t/** Mark the given commit as \"validated\" according to the contract of {@link onCommitValid}(). */\n\tprivate validateCommit(commit: GraphCommit<SharedTreeChange>): void {\n\t\tconst validated = getOrCreate(this.#validatedCommits, commit, () => []);\n\t\tif (validated !== true) {\n\t\t\tfor (const fn of validated) {\n\t\t\t\tfn(commit);\n\t\t\t}\n\t\t\tthis.#validatedCommits.set(commit, true);\n\t\t}\n\t}\n\n\t// #endregion Commit Validation\n\n\t// #region Enrichment\n\n\t/**\n\t * Statistics about enrichment operations performed by this checkout.\n\t * Used for testing. May be used for telemetry in the future.\n\t * The performance cost of maintaining this information is negligible.\n\t */\n\tprivate readonly enrichmentStats: {\n\t\tbatches: number;\n\t\tdiffs: number;\n\t\tcommitsEnriched: number;\n\t\trefreshers: number;\n\t\tforks: number;\n\t\tapplied: number;\n\t} = { batches: 0, diffs: 0, commitsEnriched: 0, refreshers: 0, forks: 0, applied: 0 };\n\n\tpublic resetEnrichmentStats(): void {\n\t\tthis.enrichmentStats.batches = 0;\n\t\tthis.enrichmentStats.diffs = 0;\n\t\tthis.enrichmentStats.commitsEnriched = 0;\n\t\tthis.enrichmentStats.refreshers = 0;\n\t\tthis.enrichmentStats.forks = 0;\n\t\tthis.enrichmentStats.applied = 0;\n\t}\n\n\tpublic getEnrichmentStats(): {\n\t\tbatches: number;\n\t\tdiffs: number;\n\t\tcommitsEnriched: number;\n\t\trefreshers: number;\n\t\tforks: number;\n\t\tapplied: number;\n\t} {\n\t\treturn { ...this.enrichmentStats };\n\t}\n\n\tpublic enrich(\n\t\tcontext: GraphCommit<SharedTreeChange>,\n\t\tchanges: readonly TaggedChange<SharedTreeChange>[],\n\t): SharedTreeChange[] {\n\t\tif (!hasSome(changes)) {\n\t\t\treturn [];\n\t\t}\n\t\tthis.enrichmentStats.batches += 1;\n\t\tconst enricher = new SharedTreeChangeEnricher(\n\t\t\tthis.forest,\n\t\t\tthis._removedRoots,\n\t\t\tthis.storedSchema,\n\t\t\tthis.idCompressor,\n\t\t\t() => (this.enrichmentStats.commitsEnriched += 1),\n\t\t\t() => (this.enrichmentStats.refreshers += 1),\n\t\t\t() => (this.enrichmentStats.forks += 1),\n\t\t\t() => (this.enrichmentStats.applied += 1),\n\t\t);\n\t\t// This `lastCommitApplied` may be on the main branch or on a transaction branch.\n\t\t// In either case, it is crucial that the state of the forest & detached field index reflects all changes up to and including this commit.\n\t\tconst lastCommitApplied = this.#transaction.activeBranch.getHead();\n\t\tif (context !== lastCommitApplied) {\n\t\t\tenricher.enqueueChange(() => {\n\t\t\t\tthis.enrichmentStats.diffs += 1;\n\t\t\t\tconst diff = diffHistories(\n\t\t\t\t\tthis.changeFamily.rebaser,\n\t\t\t\t\tlastCommitApplied,\n\t\t\t\t\tcontext,\n\t\t\t\t\tthis.mintRevisionTag,\n\t\t\t\t);\n\t\t\t\treturn makeAnonChange(diff);\n\t\t\t});\n\t\t}\n\t\tconst enriched: SharedTreeChange[] = [];\n\t\tfor (const change of changes) {\n\t\t\tenriched.push(enricher.enrich(change.change));\n\t\t\tenricher.enqueueChange(change);\n\t\t}\n\t\tenricher[disposeSymbol]();\n\t\treturn enriched;\n\t}\n\n\tpublic get mainBranch(): SharedTreeBranch<IdBasedSharedTreeEditBuilder, SharedTreeChange> {\n\t\treturn this.#transaction.branch;\n\t}\n\n\t// #endregion Enrichment\n}\n\n/**\n * A helper class that assists {@link TreeCheckout} in preventing functionality from being used while the tree is in the middle of being edited.\n */\nclass EditLock {\n\t/**\n\t * Edits the tree by calling the methods of the editor passed into the {@link EditLock} constructor.\n\t * @remarks Edits will throw an error if the lock is currently locked.\n\t */\n\tpublic readonly editor: IIdBasedSharedTreeEditor;\n\tprivate locked = false;\n\n\t/**\n\t * @param editor - an editor which will be used to create a new editor that is monitored to determine if any changes are happening to the tree.\n\t * Use {@link EditLock.editor} in place of the original editor to ensure that changes are monitored.\n\t */\n\tpublic constructor(editor: IIdBasedSharedTreeEditor) {\n\t\tconst checkLock = (): void => this.checkUnlocked(\"Editing the tree\");\n\t\tthis.editor = {\n\t\t\tget schema() {\n\t\t\t\treturn editor.schema;\n\t\t\t},\n\t\t\tbuildRoots(unhydrated) {\n\t\t\t\tcheckLock();\n\t\t\t\treturn editor.buildRoots(unhydrated);\n\t\t\t},\n\t\t\tvalueField(...fieldArgs) {\n\t\t\t\tconst valueField = editor.valueField(...fieldArgs);\n\t\t\t\treturn {\n\t\t\t\t\tset(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\tvalueField.set(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t\tattach(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\tvalueField.attach(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\toptionalField(...fieldArgs) {\n\t\t\t\tconst optionalField = editor.optionalField(...fieldArgs);\n\t\t\t\treturn {\n\t\t\t\t\tset(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\toptionalField.set(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t\tattach(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\toptionalField.attach(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t\tclear(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\toptionalField.clear(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\tsequenceField(...fieldArgs) {\n\t\t\t\tconst sequenceField = editor.sequenceField(...fieldArgs);\n\t\t\t\treturn {\n\t\t\t\t\tinsert(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\tsequenceField.insert(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t\tattach(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\tsequenceField.attach(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t\tremove(...editArgs) {\n\t\t\t\t\t\tcheckLock();\n\t\t\t\t\t\tsequenceField.remove(...editArgs);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\tmove(...moveArgs) {\n\t\t\t\tcheckLock();\n\t\t\t\teditor.move(...moveArgs);\n\t\t\t},\n\t\t\taddNodeExistsConstraint(path) {\n\t\t\t\teditor.addNodeExistsConstraint(path);\n\t\t\t},\n\t\t\taddNodeExistsConstraintOnRevert(path) {\n\t\t\t\teditor.addNodeExistsConstraintOnRevert(path);\n\t\t\t},\n\t\t\taddNoChangeConstraint() {\n\t\t\t\teditor.addNoChangeConstraint();\n\t\t\t},\n\t\t\taddNoChangeConstraintOnRevert() {\n\t\t\t\teditor.addNoChangeConstraintOnRevert();\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Prevent further changes from being made to {@link EditLock.editor} until {@link EditLock.unlock} is called.\n\t * @remarks May only be called when the lock is not already locked.\n\t */\n\tpublic lock(): void {\n\t\tif (this.locked) {\n\t\t\tdebugger;\n\t\t}\n\t\tassert(!this.locked, 0xaa7 /* Checkout has already been locked */);\n\t\tthis.locked = true;\n\t}\n\n\t/**\n\t * Throws an error if the lock is currently locked.\n\t * @param action - The current action being performed by the user.\n\t * This must start with a capital letter, as it shows up as the first part of the error message and we want it to look nice.\n\t */\n\tpublic checkUnlocked<T extends string>(action: T extends Capitalize<T> ? T : never): void {\n\t\tif (this.locked) {\n\t\t\t// These type assertions ensure that the event name strings used here match the actual event names\n\t\t\tconst nodeChanged: keyof TreeChangeEvents = \"nodeChanged\";\n\t\t\tconst treeChanged: keyof TreeChangeEvents = \"treeChanged\";\n\t\t\tthrow new UsageError(\n\t\t\t\t`${action} is forbidden during a ${nodeChanged} or ${treeChanged} event`,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Allow changes to be made to {@link EditLock.editor} again.\n\t * @remarks May only be called when the lock is currently locked.\n\t */\n\tpublic unlock(): void {\n\t\tassert(this.locked, 0xaa8 /* Checkout has not been locked */);\n\t\tthis.locked = false;\n\t}\n}\n\n/**\n * Keeps track of all new forks created until the returned function is invoked, which will dispose all of those for.\n * The returned function may only be called once.\n *\n * @param checkout - The tree checkout for which you want to monitor forks for disposal.\n * @returns a function which can be called to dispose all of the tracked forks.\n */\nfunction trackForksForDisposal(checkout: TreeCheckout): () => void {\n\tconst forks = new Set<TreeCheckout>();\n\tconst onDisposeUnSubscribes: (() => void)[] = [];\n\tconst onForkUnSubscribe = onForkTransitive(checkout, (fork) => {\n\t\tforks.add(fork);\n\t\tonDisposeUnSubscribes.push(fork.events.on(\"dispose\", () => forks.delete(fork)));\n\t});\n\tlet disposed = false;\n\treturn () => {\n\t\tassert(!disposed, 0xaa9 /* Forks may only be disposed once */);\n\t\tfor (const fork of forks) {\n\t\t\tfork.dispose();\n\t\t}\n\t\tfor (const unsubscribe of onDisposeUnSubscribes) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tonForkUnSubscribe();\n\t\tdisposed = true;\n\t};\n}\n\nfunction verboseFromCursor(\n\treader: ITreeCursor,\n\tschema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,\n): VerboseTree {\n\tconst fields = customFromCursorStored(reader, schema, verboseFromCursor);\n\tconst nodeSchema =\n\t\tschema.get(reader.type) ?? fail(0xac9 /* missing schema for type in cursor */);\n\tif (nodeSchema instanceof LeafNodeStoredSchema) {\n\t\treturn fields as CustomTreeValue;\n\t}\n\n\treturn {\n\t\ttype: reader.type,\n\t\tfields: fields as CustomTreeNode<IFluidHandle>,\n\t};\n}\n\ninterface SerializedChange {\n\tversion: 1;\n\trevision: RevisionTag;\n\tchange: JsonCompatibleReadOnly;\n\toriginatorId: SessionId;\n}\n\nfunction isSerializedChange(value: unknown): value is SerializedChange {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn false;\n\t}\n\tconst change = value as Partial<SerializedChange>;\n\treturn (\n\t\tchange.version === 1 &&\n\t\t(change.revision === \"root\" || typeof change.revision === \"number\") &&\n\t\ttypeof change.originatorId === \"string\" &&\n\t\tisStableId(change.originatorId) &&\n\t\tchange.change !== undefined\n\t);\n}\n"]}
@@ -5,7 +5,7 @@
5
5
  import type { Listenable } from "@fluidframework/core-interfaces";
6
6
  import type { OpSpaceCompressedId, SessionSpaceCompressedId } from "@fluidframework/id-compressor";
7
7
  import { type TelemetryEventBatcher } from "@fluidframework/telemetry-utils/internal";
8
- import { type ChangeFamily, type ChangeFamilyEditor, CommitKind, type GraphCommit, type RevisionTag, type TaggedChange, type RebaseStatsWithDuration } from "../core/index.js";
8
+ import { type ChangeFamily, type ChangeFamilyEditor, CommitKind, type GraphCommit, type RevisionTag, type TaggedChange, type RebaseStatsWithDuration, type EditorOptions } from "../core/index.js";
9
9
  export type BranchId = SessionSpaceCompressedId | "main";
10
10
  export type EncodedBranchId = OpSpaceCompressedId;
11
11
  /**
@@ -80,6 +80,7 @@ export declare class SharedTreeBranch<TEditor extends ChangeFamilyEditor, TChang
80
80
  private readonly mintRevisionTag;
81
81
  private readonly branchTrimmer?;
82
82
  private readonly telemetryEventBatcher?;
83
+ private readonly editorOptions?;
83
84
  readonly events: Listenable<SharedTreeBranchEvents<TEditor, TChange>>;
84
85
  readonly editor: TEditor;
85
86
  private disposed;
@@ -92,7 +93,7 @@ export declare class SharedTreeBranch<TEditor extends ChangeFamilyEditor, TChang
92
93
  * @param branchTrimmer - an optional event emitter that informs the branch it has been trimmed. If this is not supplied, then the branch must
93
94
  * never be trimmed. See {@link BranchTrimmingEvents} for details on trimming.
94
95
  */
95
- constructor(head: GraphCommit<TChange>, changeFamily: ChangeFamily<TEditor, TChange>, mintRevisionTag: () => RevisionTag, branchTrimmer?: Listenable<BranchTrimmingEvents> | undefined, telemetryEventBatcher?: TelemetryEventBatcher<keyof RebaseStatsWithDuration> | undefined);
96
+ constructor(head: GraphCommit<TChange>, changeFamily: ChangeFamily<TEditor, TChange>, mintRevisionTag: () => RevisionTag, branchTrimmer?: Listenable<BranchTrimmingEvents> | undefined, telemetryEventBatcher?: TelemetryEventBatcher<keyof RebaseStatsWithDuration> | undefined, editorOptions?: EditorOptions | undefined);
96
97
  /**
97
98
  * Sets the head of this branch.
98
99
  * @remarks This is a "manual override" of sorts, for when the branch needs to be set to a certain state without going through the usual flow of edits.
@@ -1 +1 @@
1
- {"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/branch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/branch.ts"],"names":[],"mappings":"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"}