@fluidframework/tree 2.116.0 → 2.117.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/api-report/tree.alpha.api.md +78 -30
  3. package/api-report/tree.beta.api.md +12 -9
  4. package/api-report/tree.legacy.beta.api.md +12 -9
  5. package/dist/codec/codec.d.ts +18 -0
  6. package/dist/codec/codec.d.ts.map +1 -1
  7. package/dist/codec/codec.js +18 -0
  8. package/dist/codec/codec.js.map +1 -1
  9. package/dist/core/index.d.ts +2 -2
  10. package/dist/core/index.d.ts.map +1 -1
  11. package/dist/core/index.js +3 -2
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/rebase/index.d.ts +1 -1
  14. package/dist/core/rebase/index.d.ts.map +1 -1
  15. package/dist/core/rebase/index.js +2 -1
  16. package/dist/core/rebase/index.js.map +1 -1
  17. package/dist/core/rebase/types.d.ts +39 -2
  18. package/dist/core/rebase/types.d.ts.map +1 -1
  19. package/dist/core/rebase/types.js +37 -2
  20. package/dist/core/rebase/types.js.map +1 -1
  21. package/dist/core/rebase/utils.d.ts.map +1 -1
  22. package/dist/core/rebase/utils.js +1 -0
  23. package/dist/core/rebase/utils.js.map +1 -1
  24. package/dist/core/revertible.d.ts +62 -6
  25. package/dist/core/revertible.d.ts.map +1 -1
  26. package/dist/core/revertible.js.map +1 -1
  27. package/dist/entrypoints/alpha.d.ts +1 -1
  28. package/dist/entrypoints/alpha.d.ts.map +1 -1
  29. package/dist/entrypoints/alpha.js.map +1 -1
  30. package/dist/entrypoints/beta.d.ts +1 -1
  31. package/dist/entrypoints/beta.d.ts.map +1 -1
  32. package/dist/entrypoints/beta.js.map +1 -1
  33. package/dist/entrypoints/legacy.d.ts +1 -1
  34. package/dist/entrypoints/legacy.d.ts.map +1 -1
  35. package/dist/entrypoints/legacy.js.map +1 -1
  36. package/dist/feature-libraries/indexing/types.d.ts +1 -1
  37. package/dist/feature-libraries/indexing/types.js.map +1 -1
  38. package/dist/index.d.ts +2 -2
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/packageVersion.d.ts +1 -1
  42. package/dist/packageVersion.js +1 -1
  43. package/dist/packageVersion.js.map +1 -1
  44. package/dist/shared-tree/history.d.ts +22 -0
  45. package/dist/shared-tree/history.d.ts.map +1 -0
  46. package/dist/shared-tree/history.js +66 -0
  47. package/dist/shared-tree/history.js.map +1 -0
  48. package/dist/shared-tree/schematizingTreeView.d.ts +12 -7
  49. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  50. package/dist/shared-tree/schematizingTreeView.js +13 -0
  51. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  52. package/dist/shared-tree/sharedTree.d.ts +3 -2
  53. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  54. package/dist/shared-tree/sharedTree.js +2 -0
  55. package/dist/shared-tree/sharedTree.js.map +1 -1
  56. package/dist/shared-tree/tree.js +1 -1
  57. package/dist/shared-tree/tree.js.map +1 -1
  58. package/dist/shared-tree/treeAlpha.d.ts +8 -20
  59. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  60. package/dist/shared-tree/treeAlpha.js +9 -12
  61. package/dist/shared-tree/treeAlpha.js.map +1 -1
  62. package/dist/shared-tree/treeCheckout.d.ts +16 -9
  63. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  64. package/dist/shared-tree/treeCheckout.js +130 -33
  65. package/dist/shared-tree/treeCheckout.js.map +1 -1
  66. package/dist/shared-tree/unhydratedTreeContext.d.ts +3 -2
  67. package/dist/shared-tree/unhydratedTreeContext.d.ts.map +1 -1
  68. package/dist/shared-tree/unhydratedTreeContext.js +3 -0
  69. package/dist/shared-tree/unhydratedTreeContext.js.map +1 -1
  70. package/dist/shared-tree-core/branch.d.ts +16 -2
  71. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  72. package/dist/shared-tree-core/branch.js +20 -2
  73. package/dist/shared-tree-core/branch.js.map +1 -1
  74. package/dist/shared-tree-core/branchCommitCounter.d.ts +31 -0
  75. package/dist/shared-tree-core/branchCommitCounter.d.ts.map +1 -0
  76. package/dist/shared-tree-core/branchCommitCounter.js +79 -0
  77. package/dist/shared-tree-core/branchCommitCounter.js.map +1 -0
  78. package/dist/shared-tree-core/customMetadataCodec.d.ts +9 -0
  79. package/dist/shared-tree-core/customMetadataCodec.d.ts.map +1 -0
  80. package/dist/shared-tree-core/customMetadataCodec.js +37 -0
  81. package/dist/shared-tree-core/customMetadataCodec.js.map +1 -0
  82. package/dist/shared-tree-core/customMetadataFormat.d.ts +18 -0
  83. package/dist/shared-tree-core/customMetadataFormat.d.ts.map +1 -0
  84. package/dist/shared-tree-core/customMetadataFormat.js +15 -0
  85. package/dist/shared-tree-core/customMetadataFormat.js.map +1 -0
  86. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  87. package/dist/shared-tree-core/editManager.js +15 -3
  88. package/dist/shared-tree-core/editManager.js.map +1 -1
  89. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  90. package/dist/shared-tree-core/editManagerCodecs.js +5 -0
  91. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  92. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +1 -1
  93. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  94. package/dist/shared-tree-core/editManagerCodecsCommons.js +17 -5
  95. package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  96. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  97. package/dist/shared-tree-core/editManagerCodecsV1toV4.js +4 -2
  98. package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  99. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  100. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js +2 -2
  101. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  102. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +17 -6
  103. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  104. package/dist/shared-tree-core/editManagerFormatCommons.js +18 -8
  105. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  106. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +7 -5
  107. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  108. package/dist/shared-tree-core/editManagerFormatV1toV4.js +4 -3
  109. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  110. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts +4 -0
  111. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
  112. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js +2 -2
  113. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  114. package/dist/shared-tree-core/index.d.ts +2 -1
  115. package/dist/shared-tree-core/index.d.ts.map +1 -1
  116. package/dist/shared-tree-core/index.js +3 -1
  117. package/dist/shared-tree-core/index.js.map +1 -1
  118. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
  119. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  120. package/dist/shared-tree-core/messageCodecV1ToV4.js +12 -3
  121. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  122. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  123. package/dist/shared-tree-core/messageCodecVSharedBranches.js +8 -2
  124. package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  125. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  126. package/dist/shared-tree-core/messageCodecs.js +5 -0
  127. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  128. package/dist/shared-tree-core/messageFormat.d.ts +1 -0
  129. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  130. package/dist/shared-tree-core/messageFormat.js +6 -0
  131. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  132. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +10 -3
  133. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  134. package/dist/shared-tree-core/messageFormatV1ToV4.js +10 -2
  135. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  136. package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts +7 -0
  137. package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  138. package/dist/shared-tree-core/messageFormatVSharedBranches.js +2 -0
  139. package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  140. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  141. package/dist/shared-tree-core/sharedTreeCore.js +4 -2
  142. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  143. package/dist/shared-tree-core/transaction.d.ts +9 -0
  144. package/dist/shared-tree-core/transaction.d.ts.map +1 -1
  145. package/dist/shared-tree-core/transaction.js +26 -4
  146. package/dist/shared-tree-core/transaction.js.map +1 -1
  147. package/dist/simple-tree/api/index.d.ts +1 -1
  148. package/dist/simple-tree/api/index.d.ts.map +1 -1
  149. package/dist/simple-tree/api/index.js.map +1 -1
  150. package/dist/simple-tree/api/transactionTypes.d.ts +28 -2
  151. package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -1
  152. package/dist/simple-tree/api/transactionTypes.js.map +1 -1
  153. package/dist/simple-tree/api/tree.d.ts +180 -61
  154. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  155. package/dist/simple-tree/api/tree.js.map +1 -1
  156. package/dist/simple-tree/index.d.ts +1 -1
  157. package/dist/simple-tree/index.d.ts.map +1 -1
  158. package/dist/simple-tree/index.js.map +1 -1
  159. package/dist/tableSchema.js +10 -10
  160. package/dist/tableSchema.js.map +1 -1
  161. package/lib/codec/codec.d.ts +18 -0
  162. package/lib/codec/codec.d.ts.map +1 -1
  163. package/lib/codec/codec.js +18 -0
  164. package/lib/codec/codec.js.map +1 -1
  165. package/lib/core/index.d.ts +2 -2
  166. package/lib/core/index.d.ts.map +1 -1
  167. package/lib/core/index.js +1 -1
  168. package/lib/core/index.js.map +1 -1
  169. package/lib/core/rebase/index.d.ts +1 -1
  170. package/lib/core/rebase/index.d.ts.map +1 -1
  171. package/lib/core/rebase/index.js +1 -1
  172. package/lib/core/rebase/index.js.map +1 -1
  173. package/lib/core/rebase/types.d.ts +39 -2
  174. package/lib/core/rebase/types.d.ts.map +1 -1
  175. package/lib/core/rebase/types.js +35 -1
  176. package/lib/core/rebase/types.js.map +1 -1
  177. package/lib/core/rebase/utils.d.ts.map +1 -1
  178. package/lib/core/rebase/utils.js +1 -0
  179. package/lib/core/rebase/utils.js.map +1 -1
  180. package/lib/core/revertible.d.ts +62 -6
  181. package/lib/core/revertible.d.ts.map +1 -1
  182. package/lib/core/revertible.js.map +1 -1
  183. package/lib/entrypoints/alpha.d.ts +1 -1
  184. package/lib/entrypoints/alpha.d.ts.map +1 -1
  185. package/lib/entrypoints/alpha.js.map +1 -1
  186. package/lib/entrypoints/beta.d.ts +1 -1
  187. package/lib/entrypoints/beta.d.ts.map +1 -1
  188. package/lib/entrypoints/beta.js.map +1 -1
  189. package/lib/entrypoints/legacy.d.ts +1 -1
  190. package/lib/entrypoints/legacy.d.ts.map +1 -1
  191. package/lib/entrypoints/legacy.js.map +1 -1
  192. package/lib/feature-libraries/indexing/types.d.ts +1 -1
  193. package/lib/feature-libraries/indexing/types.js.map +1 -1
  194. package/lib/index.d.ts +2 -2
  195. package/lib/index.d.ts.map +1 -1
  196. package/lib/index.js.map +1 -1
  197. package/lib/packageVersion.d.ts +1 -1
  198. package/lib/packageVersion.js +1 -1
  199. package/lib/packageVersion.js.map +1 -1
  200. package/lib/shared-tree/history.d.ts +22 -0
  201. package/lib/shared-tree/history.d.ts.map +1 -0
  202. package/lib/shared-tree/history.js +62 -0
  203. package/lib/shared-tree/history.js.map +1 -0
  204. package/lib/shared-tree/schematizingTreeView.d.ts +12 -7
  205. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  206. package/lib/shared-tree/schematizingTreeView.js +13 -0
  207. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  208. package/lib/shared-tree/sharedTree.d.ts +3 -2
  209. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  210. package/lib/shared-tree/sharedTree.js +2 -0
  211. package/lib/shared-tree/sharedTree.js.map +1 -1
  212. package/lib/shared-tree/tree.js +1 -1
  213. package/lib/shared-tree/tree.js.map +1 -1
  214. package/lib/shared-tree/treeAlpha.d.ts +8 -20
  215. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  216. package/lib/shared-tree/treeAlpha.js +9 -12
  217. package/lib/shared-tree/treeAlpha.js.map +1 -1
  218. package/lib/shared-tree/treeCheckout.d.ts +16 -9
  219. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  220. package/lib/shared-tree/treeCheckout.js +131 -34
  221. package/lib/shared-tree/treeCheckout.js.map +1 -1
  222. package/lib/shared-tree/unhydratedTreeContext.d.ts +3 -2
  223. package/lib/shared-tree/unhydratedTreeContext.d.ts.map +1 -1
  224. package/lib/shared-tree/unhydratedTreeContext.js +3 -0
  225. package/lib/shared-tree/unhydratedTreeContext.js.map +1 -1
  226. package/lib/shared-tree-core/branch.d.ts +16 -2
  227. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  228. package/lib/shared-tree-core/branch.js +20 -2
  229. package/lib/shared-tree-core/branch.js.map +1 -1
  230. package/lib/shared-tree-core/branchCommitCounter.d.ts +31 -0
  231. package/lib/shared-tree-core/branchCommitCounter.d.ts.map +1 -0
  232. package/lib/shared-tree-core/branchCommitCounter.js +75 -0
  233. package/lib/shared-tree-core/branchCommitCounter.js.map +1 -0
  234. package/lib/shared-tree-core/customMetadataCodec.d.ts +9 -0
  235. package/lib/shared-tree-core/customMetadataCodec.d.ts.map +1 -0
  236. package/lib/shared-tree-core/customMetadataCodec.js +32 -0
  237. package/lib/shared-tree-core/customMetadataCodec.js.map +1 -0
  238. package/lib/shared-tree-core/customMetadataFormat.d.ts +18 -0
  239. package/lib/shared-tree-core/customMetadataFormat.d.ts.map +1 -0
  240. package/lib/shared-tree-core/customMetadataFormat.js +11 -0
  241. package/lib/shared-tree-core/customMetadataFormat.js.map +1 -0
  242. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  243. package/lib/shared-tree-core/editManager.js +16 -4
  244. package/lib/shared-tree-core/editManager.js.map +1 -1
  245. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  246. package/lib/shared-tree-core/editManagerCodecs.js +5 -0
  247. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  248. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +1 -1
  249. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  250. package/lib/shared-tree-core/editManagerCodecsCommons.js +17 -5
  251. package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  252. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  253. package/lib/shared-tree-core/editManagerCodecsV1toV4.js +4 -2
  254. package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  255. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  256. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js +2 -2
  257. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  258. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +17 -6
  259. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  260. package/lib/shared-tree-core/editManagerFormatCommons.js +18 -8
  261. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  262. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +7 -5
  263. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  264. package/lib/shared-tree-core/editManagerFormatV1toV4.js +4 -3
  265. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  266. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts +4 -0
  267. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
  268. package/lib/shared-tree-core/editManagerFormatVSharedBranches.js +2 -2
  269. package/lib/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  270. package/lib/shared-tree-core/index.d.ts +2 -1
  271. package/lib/shared-tree-core/index.d.ts.map +1 -1
  272. package/lib/shared-tree-core/index.js +1 -0
  273. package/lib/shared-tree-core/index.js.map +1 -1
  274. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
  275. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  276. package/lib/shared-tree-core/messageCodecV1ToV4.js +12 -3
  277. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  278. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  279. package/lib/shared-tree-core/messageCodecVSharedBranches.js +8 -2
  280. package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  281. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  282. package/lib/shared-tree-core/messageCodecs.js +5 -0
  283. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  284. package/lib/shared-tree-core/messageFormat.d.ts +1 -0
  285. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  286. package/lib/shared-tree-core/messageFormat.js +6 -0
  287. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  288. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +10 -3
  289. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  290. package/lib/shared-tree-core/messageFormatV1ToV4.js +10 -2
  291. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  292. package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts +7 -0
  293. package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  294. package/lib/shared-tree-core/messageFormatVSharedBranches.js +2 -0
  295. package/lib/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  296. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  297. package/lib/shared-tree-core/sharedTreeCore.js +5 -3
  298. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  299. package/lib/shared-tree-core/transaction.d.ts +9 -0
  300. package/lib/shared-tree-core/transaction.d.ts.map +1 -1
  301. package/lib/shared-tree-core/transaction.js +27 -5
  302. package/lib/shared-tree-core/transaction.js.map +1 -1
  303. package/lib/simple-tree/api/index.d.ts +1 -1
  304. package/lib/simple-tree/api/index.d.ts.map +1 -1
  305. package/lib/simple-tree/api/index.js.map +1 -1
  306. package/lib/simple-tree/api/transactionTypes.d.ts +28 -2
  307. package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -1
  308. package/lib/simple-tree/api/transactionTypes.js.map +1 -1
  309. package/lib/simple-tree/api/tree.d.ts +180 -61
  310. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  311. package/lib/simple-tree/api/tree.js.map +1 -1
  312. package/lib/simple-tree/index.d.ts +1 -1
  313. package/lib/simple-tree/index.d.ts.map +1 -1
  314. package/lib/simple-tree/index.js.map +1 -1
  315. package/lib/tableSchema.js +10 -10
  316. package/lib/tableSchema.js.map +1 -1
  317. package/package.json +23 -23
  318. package/src/codec/codec.ts +19 -0
  319. package/src/core/index.ts +4 -0
  320. package/src/core/rebase/index.ts +2 -0
  321. package/src/core/rebase/types.ts +72 -2
  322. package/src/core/rebase/utils.ts +1 -0
  323. package/src/core/revertible.ts +67 -6
  324. package/src/entrypoints/alpha.ts +8 -0
  325. package/src/entrypoints/beta.ts +1 -0
  326. package/src/entrypoints/legacy.ts +1 -0
  327. package/src/feature-libraries/indexing/types.ts +1 -1
  328. package/src/index.ts +8 -0
  329. package/src/packageVersion.ts +1 -1
  330. package/src/shared-tree/history.ts +99 -0
  331. package/src/shared-tree/schematizingTreeView.ts +25 -8
  332. package/src/shared-tree/sharedTree.ts +5 -2
  333. package/src/shared-tree/tree.ts +1 -1
  334. package/src/shared-tree/treeAlpha.ts +17 -35
  335. package/src/shared-tree/treeCheckout.ts +178 -39
  336. package/src/shared-tree/unhydratedTreeContext.ts +6 -2
  337. package/src/shared-tree-core/branch.ts +34 -2
  338. package/src/shared-tree-core/branchCommitCounter.ts +103 -0
  339. package/src/shared-tree-core/customMetadataCodec.ts +42 -0
  340. package/src/shared-tree-core/customMetadataFormat.ts +39 -0
  341. package/src/shared-tree-core/editManager.ts +22 -3
  342. package/src/shared-tree-core/editManagerCodecs.ts +12 -0
  343. package/src/shared-tree-core/editManagerCodecsCommons.ts +41 -15
  344. package/src/shared-tree-core/editManagerCodecsV1toV4.ts +7 -1
  345. package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +2 -0
  346. package/src/shared-tree-core/editManagerFormatCommons.ts +46 -12
  347. package/src/shared-tree-core/editManagerFormatV1toV4.ts +13 -5
  348. package/src/shared-tree-core/editManagerFormatVSharedBranches.ts +2 -2
  349. package/src/shared-tree-core/index.ts +3 -0
  350. package/src/shared-tree-core/messageCodecV1ToV4.ts +18 -5
  351. package/src/shared-tree-core/messageCodecVSharedBranches.ts +9 -2
  352. package/src/shared-tree-core/messageCodecs.ts +12 -0
  353. package/src/shared-tree-core/messageFormat.ts +6 -0
  354. package/src/shared-tree-core/messageFormatV1ToV4.ts +21 -3
  355. package/src/shared-tree-core/messageFormatVSharedBranches.ts +8 -0
  356. package/src/shared-tree-core/sharedTreeCore.ts +5 -2
  357. package/src/shared-tree-core/transaction.ts +56 -4
  358. package/src/simple-tree/api/index.ts +5 -0
  359. package/src/simple-tree/api/transactionTypes.ts +29 -2
  360. package/src/simple-tree/api/tree.ts +199 -60
  361. package/src/simple-tree/index.ts +5 -0
  362. package/src/tableSchema.ts +9 -9
@@ -16,10 +16,44 @@ const index_js_4 = require("../shared-tree-core/index.js");
16
16
  const index_js_5 = require("../simple-tree/index.js");
17
17
  const index_js_6 = require("../util/index.js");
18
18
  const schematizingTreeView_js_1 = require("./schematizingTreeView.js");
19
+ const history_js_1 = require("./history.js");
19
20
  const sharedTreeChangeEnricher_js_1 = require("./sharedTreeChangeEnricher.js");
20
21
  const sharedTreeChangeFamily_js_1 = require("./sharedTreeChangeFamily.js");
21
22
  const transactionPostProcessor_js_1 = require("./transactionPostProcessor.js");
22
23
  const serializedChange_js_1 = require("./serializedChange.js");
24
+ /**
25
+ * Returns a defensive copy of the given metadata, validating that it can be persisted.
26
+ * @remarks
27
+ * The round-trip through JSON ensures that the value read back locally is exactly the value that peers and
28
+ * future summaries will see, and that later mutation of the caller's object cannot affect an existing commit.
29
+ * @throws A `UsageError` if the value cannot be represented as a JSON object.
30
+ */
31
+ function snapshotCustomMetadata(customMetadata) {
32
+ if (customMetadata === undefined) {
33
+ return undefined;
34
+ }
35
+ let serialized;
36
+ try {
37
+ serialized = JSON.stringify(customMetadata);
38
+ }
39
+ catch (error) {
40
+ throw new internal_2.UsageError(`"customMetadata" must be JSON-serializable: ${error instanceof Error ? error.message : String(error)}`);
41
+ }
42
+ if (serialized === undefined) {
43
+ throw new internal_2.UsageError(`"customMetadata" must be JSON-serializable.`);
44
+ }
45
+ const snapshot = JSON.parse(serialized);
46
+ if (typeof snapshot !== "object" || snapshot === null || Array.isArray(snapshot)) {
47
+ throw new internal_2.UsageError(`"customMetadata" must be a JSON object.`);
48
+ }
49
+ return snapshot;
50
+ }
51
+ /**
52
+ * Wraps metadata for an operation which produces a single commit.
53
+ */
54
+ function toMetadataTree(customMetadata) {
55
+ return customMetadata === undefined ? undefined : { metadata: customMetadata, children: [] };
56
+ }
23
57
  /**
24
58
  * Yields all defined (non-`undefined`) labels from a {@link LabelTree}, depth-first.
25
59
  */
@@ -84,12 +118,13 @@ function createTreeCheckout(idCompressor, mintRevisionTag, revisionTagCodec, arg
84
118
  new index_js_4.SharedTreeBranch({
85
119
  change: changeFamily.rebaser.compose([]),
86
120
  revision: "root",
121
+ customMetadata: undefined,
87
122
  }, changeFamily, () => idCompressor.generateCompressedId());
88
123
  return new TreeCheckout(branch, true, changeFamily, schema, forest, mintRevisionTag, revisionTagCodec, idCompressor, args?.removedRoots);
89
124
  }
90
125
  exports.createTreeCheckout = createTreeCheckout;
91
126
  /**
92
- * Get the {@link TreeCheckout} associated with a given {@link TreeBranch}.
127
+ * Get the {@link TreeCheckout} associated with a given {@link UntypedTreeView}.
93
128
  */
94
129
  function getCheckout(context) {
95
130
  if (context instanceof TreeCheckout) {
@@ -205,7 +240,8 @@ let TreeCheckout = (() => {
205
240
  constructor(branch,
206
241
  /** True if and only if this checkout is for a branch which is persisted and shared with other clients. */
207
242
  isSharedBranch, changeFamily, storedSchema, forest, mintRevisionTag, revisionTagCodec, idCompressor, _removedRoots = (0, index_js_2.makeDetachedFieldIndex)("repair"), disposeForksAfterTransaction = true) {
208
- this.isSharedBranch = (tslib_1.__runInitializers(this, _instanceExtraInitializers), isSharedBranch);
243
+ this.branch = (tslib_1.__runInitializers(this, _instanceExtraInitializers), branch);
244
+ this.isSharedBranch = isSharedBranch;
209
245
  this.changeFamily = changeFamily;
210
246
  this.storedSchema = storedSchema;
211
247
  this.forest = forest;
@@ -287,7 +323,7 @@ let TreeCheckout = (() => {
287
323
  throw new internal_2.UsageError("Cannot generate the same revertible more than once. Note that this can happen when multiple changed event listeners are registered.");
288
324
  }
289
325
  const revertible = this.createRevertible(revision, kind, this, onRevertibleDisposed, commitLabelTree);
290
- this.revertibleCommitBranches.set(revision, tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.fork(commit));
326
+ this.revertibleCommitBranches.set(revision, tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.fork(commit));
291
327
  this.revertibles.set(revision, revertible);
292
328
  return revertible;
293
329
  };
@@ -387,6 +423,10 @@ let TreeCheckout = (() => {
387
423
  this.editLock = new EditLock(tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEditor);
388
424
  this.registerForBranchEvents();
389
425
  }
426
+ get branchHistory() {
427
+ this._branchHistory ??= new history_js_1.DefaultTreeBranchHistory(this.branch, this.idCompressor);
428
+ return this._branchHistory;
429
+ }
390
430
  /**
391
431
  * Pushes a new label node for a transaction nesting level.
392
432
  *
@@ -585,13 +625,16 @@ let TreeCheckout = (() => {
585
625
  applySerializedChange(serializedChange) {
586
626
  const change = serializedChange_js_1.SerializedChange.V1.decode(this.idCompressor, this.changeFamily, serializedChange);
587
627
  // Apply the change to the branch, but _not_ the `activeBranch` - we do not support squashing serialized commits in a transaction.
588
- tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.apply(change);
628
+ tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.apply(change, index_js_2.CommitKind.Default, undefined);
589
629
  }
590
- // #region TreeBranchAlpha
630
+ // #region UntypedTreeViewAlpha
591
631
  applyChange(change) {
592
632
  this.applySerializedChange(change);
593
633
  }
594
634
  isBranch() {
635
+ return this.isView();
636
+ }
637
+ isView() {
595
638
  return true;
596
639
  }
597
640
  hasRootSchema(_schema) {
@@ -624,6 +667,9 @@ let TreeCheckout = (() => {
624
667
  this.pushLabelFrame(params?.label);
625
668
  this.transaction.start({
626
669
  postProcessor: (0, transactionPostProcessor_js_1.extractTransactionChangeProcessor)(params?.postProcessor),
670
+ // Like the validation described above, rejecting malformed metadata breaks the checkout rather
671
+ // than being recoverable. Tracked by https://github.com/microsoft/FluidFramework/issues/28085.
672
+ customMetadata: snapshotCustomMetadata(params?.customMetadata),
627
673
  });
628
674
  addConstraintsToTransaction(this, false, params?.preconditions);
629
675
  }
@@ -647,7 +693,7 @@ let TreeCheckout = (() => {
647
693
  ? { success: true }
648
694
  : { success: true, value: value };
649
695
  }
650
- // #endregion TreeBranchAlpha
696
+ // #endregion UntypedTreeViewAlpha
651
697
  // Revision is the revision of the commit, if any, which caused this change.
652
698
  applyInternalChange(change, revision) {
653
699
  // Conflicts due to schema will be empty and thus are not applied.
@@ -717,29 +763,32 @@ let TreeCheckout = (() => {
717
763
  ? index_js_2.RevertibleStatus.Disposed
718
764
  : index_js_2.RevertibleStatus.Valid;
719
765
  },
720
- revert: (release = true) => {
766
+ revert: (releaseOrOptions = true) => {
721
767
  if (revertible.status === index_js_2.RevertibleStatus.Disposed) {
722
768
  throw new internal_2.UsageError("Unable to revert a revertible that has been disposed.");
723
769
  }
724
- const revertMetrics = checkout.revertRevertible(revision, kind, labelTree);
770
+ const options = typeof releaseOrOptions === "boolean"
771
+ ? { dispose: releaseOrOptions }
772
+ : releaseOrOptions;
773
+ const revertMetrics = checkout.revertRevertible(revision, kind, labelTree, snapshotCustomMetadata(options.customMetadata));
725
774
  checkout.logger?.sendTelemetryEvent({
726
775
  eventName: _a.revertTelemetryEventName,
727
776
  ...revertMetrics,
728
777
  });
729
- if (release) {
778
+ if (options.dispose ?? true) {
730
779
  revertible.dispose();
731
780
  }
732
781
  },
733
- clone: (targetBranch) => {
782
+ clone: (targetView) => {
734
783
  // 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.
735
- const targetCheckout = getCheckout(targetBranch);
784
+ const targetCheckout = getCheckout(targetView);
736
785
  const revertibleBranch = this.revertibleCommitBranches.get(revision);
737
786
  if (revertibleBranch === undefined) {
738
787
  throw new internal_2.UsageError("Unable to clone a revertible that has been disposed.");
739
788
  }
740
789
  const commitToRevert = revertibleBranch.getHead();
741
- const activeBranchHead = tslib_1.__classPrivateFieldGet(targetCheckout, _TreeCheckout_transaction, "f").activeBranch.getHead();
742
- if ((0, index_js_2.isAncestor)(commitToRevert, activeBranchHead, true) === false) {
790
+ const branchHead = tslib_1.__classPrivateFieldGet(targetCheckout, _TreeCheckout_transaction, "f").branch.getHead();
791
+ if ((0, index_js_2.isAncestor)(commitToRevert, branchHead, true) === false) {
743
792
  throw new internal_2.UsageError("Cannot clone revertible for a commit that is not present on the given branch.");
744
793
  }
745
794
  targetCheckout.revertibleCommitBranches.set(revision, revertibleBranch.fork());
@@ -782,7 +831,7 @@ let TreeCheckout = (() => {
782
831
  if (this.transaction.size > 0) {
783
832
  throw new internal_2.UsageError("A view cannot be forked while it has a pending transaction.");
784
833
  }
785
- const branch = tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.fork();
834
+ const branch = tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.fork();
786
835
  const storedSchema = this.storedSchema.clone();
787
836
  const forkBreaker = new index_js_6.Breakable("TreeCheckout", this.logger);
788
837
  const forest = this.forest.clone(storedSchema, forkBreaker);
@@ -791,19 +840,65 @@ let TreeCheckout = (() => {
791
840
  return checkout;
792
841
  }
793
842
  switchBranch(branch) {
794
- // TODO: Dispose old branch, if necessary
795
843
  (0, internal_1.assert)(tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").size === 0, 0xc55 /* Cannot switch branches during a transaction */);
844
+ if (this.isSharedBranch) {
845
+ throw new internal_2.UsageError("Cannot switch a view away from a shared branch. Consider forking first.");
846
+ }
796
847
  const diff = (0, index_js_2.diffHistories)(this.changeFamily.rebaser, tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.getHead(), branch.getHead(), this.mintRevisionTag);
797
848
  this.unregisterFromBranchEvents();
798
849
  tslib_1.__classPrivateFieldSet(this, _TreeCheckout_transaction, this.createTransactionStack(branch), "f");
850
+ this.branch = branch;
851
+ this._branchHistory?.dispose();
852
+ this._branchHistory = undefined;
799
853
  this.editLock = new EditLock(tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEditor);
800
854
  this.registerForBranchEvents();
801
855
  // TODO: Rework eventing
802
856
  this.applyInternalChange(diff);
803
857
  tslib_1.__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("afterBatch");
804
858
  }
805
- rebase(branch) {
806
- const checkout = getCheckout(branch);
859
+ rewindTo(revisionString) {
860
+ this.checkNotDisposed("The branch has already been disposed and cannot be rewound.");
861
+ if (tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").size > 0) {
862
+ throw new internal_2.UsageError("Rewinding is not supported during transactions.");
863
+ }
864
+ const revision = this.idCompressor.tryRecompress(revisionString);
865
+ if (revision === undefined) {
866
+ throw new internal_2.UsageError(`Unrecognized revision id: ${revisionString}`);
867
+ }
868
+ const targetCommit = (0, index_js_2.findAncestor)(tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.getHead(), (commit) => commit.revision === revision);
869
+ if (targetCommit === undefined) {
870
+ throw new internal_2.UsageError(`No commit found with revision: ${revisionString}`);
871
+ }
872
+ this.switchBranch(tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.fork(targetCommit));
873
+ }
874
+ revertTo(revisionString, options) {
875
+ this.checkNotDisposed("The branch has already been disposed and prior revisions cannot be reverted to.");
876
+ this.editLock.checkUnlocked("Reverting to a revision");
877
+ if (tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").size > 0) {
878
+ throw new internal_2.UsageError("Reverting to a revision is not supported during transactions.");
879
+ }
880
+ const customMetadata = snapshotCustomMetadata(options?.customMetadata);
881
+ const revision = this.idCompressor.tryRecompress(revisionString);
882
+ if (revision === undefined) {
883
+ throw new internal_2.UsageError(`Unrecognized revision id: ${revisionString}`);
884
+ }
885
+ // Populated with the commits that came after the target commit, from oldest to newest.
886
+ const commitsToUndo = [];
887
+ const targetCommit = (0, index_js_2.findAncestor)([tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.getHead(), commitsToUndo], (commit) => commit.revision === revision);
888
+ if (targetCommit === undefined) {
889
+ throw new internal_2.UsageError(`No commit found with revision: ${revisionString}`);
890
+ }
891
+ if (!(0, index_js_6.hasSome)(commitsToUndo)) {
892
+ // The target commit is already the head of the branch, so there is nothing to revert.
893
+ return;
894
+ }
895
+ const revisionForInvert = this.mintRevisionTag();
896
+ const toUndo = this.changeFamily.rebaser.compose(commitsToUndo);
897
+ const inverse = this.changeFamily.rebaser.invert((0, index_js_2.makeAnonChange)(toUndo), false, revisionForInvert);
898
+ tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.apply((0, index_js_2.tagChange)(inverse, revisionForInvert), index_js_2.CommitKind.Default, toMetadataTree(customMetadata));
899
+ }
900
+ rebase(view) {
901
+ const checkout = getCheckout(view);
807
902
  this.checkNotDisposed("The target branch of the rebase has been disposed and cannot be rebased.");
808
903
  checkout.checkNotDisposed("The source branch of the rebase has been disposed and cannot be rebased.");
809
904
  this.editLock.checkUnlocked("Rebasing");
@@ -814,16 +909,16 @@ let TreeCheckout = (() => {
814
909
  throw new internal_2.UsageError("A view cannot be rebased while it has a pending transaction.");
815
910
  }
816
911
  (0, internal_1.assert)(!checkout.isSharedBranch, 0xa5d /* Shared branches cannot be rebased onto another branch. */);
817
- tslib_1.__classPrivateFieldGet(checkout, _TreeCheckout_transaction, "f").activeBranch.rebaseOnto(tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch);
912
+ tslib_1.__classPrivateFieldGet(checkout, _TreeCheckout_transaction, "f").branch.rebaseOnto(tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch);
818
913
  }
819
- rebaseOnto(branch) {
820
- getCheckout(branch).rebase(this);
914
+ rebaseOnto(view) {
915
+ getCheckout(view).rebase(this);
821
916
  }
822
- isMissingEditsFrom(branch) {
823
- const branchCheckout = getCheckout(branch);
917
+ isMissingEditsFrom(view) {
918
+ const viewCheckout = getCheckout(view);
824
919
  const targetPath = [];
825
920
  const ancestor = (0, index_js_2.findCommonAncestor)(this.mainBranch.getHead(), [
826
- branchCheckout.mainBranch.getHead(),
921
+ viewCheckout.mainBranch.getHead(),
827
922
  targetPath,
828
923
  ]);
829
924
  if (ancestor === undefined) {
@@ -831,17 +926,17 @@ let TreeCheckout = (() => {
831
926
  }
832
927
  return targetPath.length > 0;
833
928
  }
834
- computeNetChangeIfRebasedOnto(branch) {
835
- const branchCheckout = getCheckout(branch);
836
- const rebased = (0, index_js_2.rebaseBranch)(this.mintRevisionTag, this.changeFamily.rebaser, tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.getHead(), tslib_1.__classPrivateFieldGet(branchCheckout, _TreeCheckout_transaction, "f").branch.getHead());
929
+ computeNetChangeIfRebasedOnto(view) {
930
+ const viewCheckout = getCheckout(view);
931
+ const rebased = (0, index_js_2.rebaseBranch)(this.mintRevisionTag, this.changeFamily.rebaser, tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.getHead(), tslib_1.__classPrivateFieldGet(viewCheckout, _TreeCheckout_transaction, "f").branch.getHead());
837
932
  if (rebased.sourceChange === undefined) {
838
933
  return undefined;
839
934
  }
840
935
  const revision = this.mintRevisionTag();
841
936
  return serializedChange_js_1.SerializedChange.V1.encode(this.idCompressor, this.changeFamily, rebased.sourceChange, revision, undefined);
842
937
  }
843
- merge(branch, disposeMerged = true) {
844
- const checkout = getCheckout(branch);
938
+ merge(view, disposeMerged = true) {
939
+ const checkout = getCheckout(view);
845
940
  this.checkNotDisposed("The target branch of the merge has been disposed and cannot be merged.");
846
941
  checkout.checkNotDisposed("The source branch of the merge has been disposed and cannot be merged.");
847
942
  this.editLock.checkUnlocked("Merging");
@@ -851,7 +946,7 @@ let TreeCheckout = (() => {
851
946
  if (checkout.transaction.size > 0) {
852
947
  throw new internal_2.UsageError("Views with an open transaction cannot be merged into another view.");
853
948
  }
854
- tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.merge(tslib_1.__classPrivateFieldGet(checkout, _TreeCheckout_transaction, "f").activeBranch);
949
+ tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.merge(tslib_1.__classPrivateFieldGet(checkout, _TreeCheckout_transaction, "f").branch);
855
950
  if (disposeMerged && !checkout.isSharedBranch) {
856
951
  // Dispose the merged checkout unless it is a shared branch.
857
952
  checkout[index_js_6.disposeSymbol]();
@@ -878,6 +973,8 @@ let TreeCheckout = (() => {
878
973
  view.dispose();
879
974
  }
880
975
  tslib_1.__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("dispose");
976
+ this._branchHistory?.dispose();
977
+ this._branchHistory = undefined;
881
978
  }
882
979
  getRemovedRoots() {
883
980
  this.assertNoUntrackedRoots();
@@ -917,7 +1014,7 @@ let TreeCheckout = (() => {
917
1014
  this.revertibleCommitBranches.delete(revision);
918
1015
  this.revertibles.delete(revision);
919
1016
  }
920
- revertRevertible(revision, kind, labelTree) {
1017
+ revertRevertible(revision, kind, labelTree, customMetadata) {
921
1018
  this.editLock.checkUnlocked("Reverting a commit");
922
1019
  if (this.transaction.size > 0) {
923
1020
  throw new internal_2.UsageError("Undo is not yet supported during transactions.");
@@ -927,7 +1024,7 @@ let TreeCheckout = (() => {
927
1024
  const commitToRevert = revertibleBranch.getHead();
928
1025
  const revisionForInvert = this.mintRevisionTag();
929
1026
  let change = (0, index_js_2.tagChange)(this.changeFamily.rebaser.invert(commitToRevert, false, revisionForInvert), revisionForInvert);
930
- const headCommit = tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.getHead();
1027
+ const headCommit = tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.getHead();
931
1028
  // Rebase the inverted change onto any commits that occurred after the undoable commits.
932
1029
  if (commitToRevert !== headCommit) {
933
1030
  // The inverse may be rebased over newer commits which (despite being present in the history)
@@ -943,9 +1040,9 @@ let TreeCheckout = (() => {
943
1040
  const previousLabelTreeNode = this.labelTreeNode;
944
1041
  this.labelTreeNode = labelTree;
945
1042
  try {
946
- tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.apply(change, kind === index_js_2.CommitKind.Default || kind === index_js_2.CommitKind.Redo
1043
+ tslib_1.__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.apply(change, kind === index_js_2.CommitKind.Default || kind === index_js_2.CommitKind.Redo
947
1044
  ? index_js_2.CommitKind.Undo
948
- : index_js_2.CommitKind.Redo);
1045
+ : index_js_2.CommitKind.Redo, toMetadataTree(customMetadata));
949
1046
  }
950
1047
  finally {
951
1048
  this.labelTreeNode = previousLabelTreeNode;