@fluidframework/tree 2.10.0 → 2.12.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 (776) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/api-report/tree.alpha.api.md +49 -18
  3. package/api-report/tree.beta.api.md +6 -15
  4. package/api-report/tree.legacy.alpha.api.md +6 -15
  5. package/api-report/tree.legacy.public.api.md +6 -15
  6. package/api-report/tree.public.api.md +6 -15
  7. package/dist/alpha.d.ts +9 -0
  8. package/dist/core/forest/forest.d.ts +10 -2
  9. package/dist/core/forest/forest.d.ts.map +1 -1
  10. package/dist/core/forest/forest.js.map +1 -1
  11. package/dist/core/index.d.ts +3 -3
  12. package/dist/core/index.d.ts.map +1 -1
  13. package/dist/core/index.js +6 -3
  14. package/dist/core/index.js.map +1 -1
  15. package/dist/core/rebase/utils.d.ts +1 -1
  16. package/dist/core/rebase/utils.d.ts.map +1 -1
  17. package/dist/core/rebase/utils.js +13 -17
  18. package/dist/core/rebase/utils.js.map +1 -1
  19. package/dist/core/revertible.d.ts +30 -1
  20. package/dist/core/revertible.d.ts.map +1 -1
  21. package/dist/core/revertible.js.map +1 -1
  22. package/dist/core/schema-stored/format.d.ts +0 -3
  23. package/dist/core/schema-stored/format.d.ts.map +1 -1
  24. package/dist/core/schema-stored/format.js.map +1 -1
  25. package/dist/core/schema-stored/schema.d.ts +12 -10
  26. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  27. package/dist/core/schema-stored/schema.js +3 -5
  28. package/dist/core/schema-stored/schema.js.map +1 -1
  29. package/dist/core/schema-stored/storedSchemaRepository.d.ts +2 -2
  30. package/dist/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
  31. package/dist/core/schema-stored/storedSchemaRepository.js +5 -5
  32. package/dist/core/schema-stored/storedSchemaRepository.js.map +1 -1
  33. package/dist/core/schema-view/index.d.ts +1 -1
  34. package/dist/core/schema-view/index.d.ts.map +1 -1
  35. package/dist/core/schema-view/index.js +1 -2
  36. package/dist/core/schema-view/index.js.map +1 -1
  37. package/dist/core/schema-view/view.d.ts +0 -7
  38. package/dist/core/schema-view/view.d.ts.map +1 -1
  39. package/dist/core/schema-view/view.js +1 -12
  40. package/dist/core/schema-view/view.js.map +1 -1
  41. package/dist/core/tree/anchorSet.d.ts +2 -2
  42. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  43. package/dist/core/tree/anchorSet.js +21 -21
  44. package/dist/core/tree/anchorSet.js.map +1 -1
  45. package/{lib/feature-libraries/chunked-forest → dist/core/tree}/chunk.d.ts +2 -1
  46. package/dist/core/tree/chunk.d.ts.map +1 -0
  47. package/dist/{feature-libraries/chunked-forest → core/tree}/chunk.js +2 -2
  48. package/dist/core/tree/chunk.js.map +1 -0
  49. package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
  50. package/dist/core/tree/detachedFieldIndexCodec.js +3 -2
  51. package/dist/core/tree/detachedFieldIndexCodec.js.map +1 -1
  52. package/dist/core/tree/index.d.ts +2 -1
  53. package/dist/core/tree/index.d.ts.map +1 -1
  54. package/dist/core/tree/index.js +6 -1
  55. package/dist/core/tree/index.js.map +1 -1
  56. package/dist/core/tree/treeTextFormat.d.ts +0 -5
  57. package/dist/core/tree/treeTextFormat.d.ts.map +1 -1
  58. package/dist/core/tree/treeTextFormat.js.map +1 -1
  59. package/dist/core/tree/types.d.ts +0 -5
  60. package/dist/core/tree/types.d.ts.map +1 -1
  61. package/dist/core/tree/types.js +0 -1
  62. package/dist/core/tree/types.js.map +1 -1
  63. package/dist/core/tree/visitorUtils.d.ts +25 -1
  64. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  65. package/dist/core/tree/visitorUtils.js +29 -1
  66. package/dist/core/tree/visitorUtils.js.map +1 -1
  67. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts +1 -2
  68. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  69. package/dist/feature-libraries/chunked-forest/basicChunk.js +14 -14
  70. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  71. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +1 -2
  72. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  73. package/dist/feature-libraries/chunked-forest/chunkTree.js +2 -3
  74. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  75. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts +5 -3
  76. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  77. package/dist/feature-libraries/chunked-forest/chunkedForest.js +24 -14
  78. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  79. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts +1 -2
  80. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts.map +1 -1
  81. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
  82. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -2
  83. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  84. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  85. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -1
  86. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  87. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  88. package/dist/feature-libraries/chunked-forest/emptyChunk.d.ts +1 -1
  89. package/dist/feature-libraries/chunked-forest/emptyChunk.d.ts.map +1 -1
  90. package/dist/feature-libraries/chunked-forest/emptyChunk.js +2 -3
  91. package/dist/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
  92. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  93. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  94. package/dist/feature-libraries/chunked-forest/index.js +5 -5
  95. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  96. package/dist/feature-libraries/chunked-forest/sequenceChunk.d.ts +1 -1
  97. package/dist/feature-libraries/chunked-forest/sequenceChunk.d.ts.map +1 -1
  98. package/dist/feature-libraries/chunked-forest/sequenceChunk.js +2 -2
  99. package/dist/feature-libraries/chunked-forest/sequenceChunk.js.map +1 -1
  100. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts +1 -2
  101. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  102. package/dist/feature-libraries/chunked-forest/uniformChunk.js +14 -14
  103. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  104. package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  105. package/dist/feature-libraries/default-schema/defaultSchema.js +1 -0
  106. package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  107. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  108. package/dist/feature-libraries/default-schema/schemaChecker.js +2 -1
  109. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  110. package/dist/feature-libraries/flex-tree/context.d.ts +1 -1
  111. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  112. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  113. package/dist/feature-libraries/index.d.ts +2 -1
  114. package/dist/feature-libraries/index.d.ts.map +1 -1
  115. package/dist/feature-libraries/index.js +9 -2
  116. package/dist/feature-libraries/index.js.map +1 -1
  117. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts +139 -0
  118. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -0
  119. package/dist/feature-libraries/indexing/anchorTreeIndex.js +387 -0
  120. package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -0
  121. package/dist/feature-libraries/indexing/index.d.ts +7 -0
  122. package/dist/feature-libraries/indexing/index.d.ts.map +1 -0
  123. package/dist/feature-libraries/indexing/index.js +11 -0
  124. package/dist/feature-libraries/indexing/index.js.map +1 -0
  125. package/dist/feature-libraries/indexing/types.d.ts +32 -0
  126. package/dist/feature-libraries/indexing/types.d.ts.map +1 -0
  127. package/dist/{events/interop.js → feature-libraries/indexing/types.js} +1 -1
  128. package/dist/feature-libraries/indexing/types.js.map +1 -0
  129. package/dist/feature-libraries/modular-schema/discrepancies.d.ts +84 -24
  130. package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
  131. package/dist/feature-libraries/modular-schema/discrepancies.js +32 -33
  132. package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -1
  133. package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
  134. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  135. package/dist/feature-libraries/modular-schema/index.js +5 -1
  136. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  137. package/dist/feature-libraries/modular-schema/isNeverTree.d.ts +0 -1
  138. package/dist/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  139. package/dist/feature-libraries/modular-schema/isNeverTree.js +0 -1
  140. package/dist/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  141. package/dist/feature-libraries/object-forest/objectForest.d.ts +5 -2
  142. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  143. package/dist/feature-libraries/object-forest/objectForest.js +21 -11
  144. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  145. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +6 -6
  146. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  147. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +7 -7
  148. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
  149. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +12 -12
  150. package/dist/feature-libraries/sequence-field/formatV1.d.ts +99 -99
  151. package/dist/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
  152. package/dist/feature-libraries/sequence-field/formatV2.d.ts +76 -76
  153. package/dist/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  154. package/dist/feature-libraries/sequence-field/formatV3.d.ts +54 -54
  155. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  156. package/dist/feature-libraries/sequence-field/invert.js +2 -2
  157. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  158. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +3 -2
  159. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  160. package/dist/feature-libraries/sequence-field/types.d.ts +0 -1
  161. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  162. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  163. package/dist/index.d.ts +6 -7
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.js +3 -13
  166. package/dist/index.js.map +1 -1
  167. package/dist/packageVersion.d.ts +1 -1
  168. package/dist/packageVersion.js +1 -1
  169. package/dist/packageVersion.js.map +1 -1
  170. package/dist/shared-tree/index.d.ts +2 -2
  171. package/dist/shared-tree/index.d.ts.map +1 -1
  172. package/dist/shared-tree/index.js +1 -2
  173. package/dist/shared-tree/index.js.map +1 -1
  174. package/dist/shared-tree/schematizeTree.d.ts +1 -1
  175. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  176. package/dist/shared-tree/schematizeTree.js +6 -6
  177. package/dist/shared-tree/schematizeTree.js.map +1 -1
  178. package/dist/shared-tree/schematizingTreeView.d.ts +7 -1
  179. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  180. package/dist/shared-tree/schematizingTreeView.js +35 -38
  181. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  182. package/dist/shared-tree/sharedTree.d.ts +27 -6
  183. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  184. package/dist/shared-tree/sharedTree.js +146 -21
  185. package/dist/shared-tree/sharedTree.js.map +1 -1
  186. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  187. package/dist/shared-tree/sharedTreeChangeFamily.js +3 -3
  188. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  189. package/dist/shared-tree/treeCheckout.d.ts +59 -72
  190. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  191. package/dist/shared-tree/treeCheckout.js +243 -188
  192. package/dist/shared-tree/treeCheckout.js.map +1 -1
  193. package/dist/shared-tree-core/branch.d.ts +29 -107
  194. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  195. package/dist/shared-tree-core/branch.js +51 -195
  196. package/dist/shared-tree-core/branch.js.map +1 -1
  197. package/dist/shared-tree-core/branchCommitEnricher.d.ts +24 -32
  198. package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  199. package/dist/shared-tree-core/branchCommitEnricher.js +70 -53
  200. package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
  201. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  202. package/dist/shared-tree-core/defaultResubmitMachine.js +2 -1
  203. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  204. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  205. package/dist/shared-tree-core/editManager.js +4 -4
  206. package/dist/shared-tree-core/editManager.js.map +1 -1
  207. package/dist/shared-tree-core/index.d.ts +3 -3
  208. package/dist/shared-tree-core/index.d.ts.map +1 -1
  209. package/dist/shared-tree-core/index.js +5 -4
  210. package/dist/shared-tree-core/index.js.map +1 -1
  211. package/dist/shared-tree-core/sharedTreeCore.d.ts +3 -10
  212. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  213. package/dist/shared-tree-core/sharedTreeCore.js +14 -67
  214. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  215. package/dist/shared-tree-core/transaction.d.ts +146 -0
  216. package/dist/shared-tree-core/transaction.d.ts.map +1 -0
  217. package/dist/shared-tree-core/transaction.js +211 -0
  218. package/dist/shared-tree-core/transaction.js.map +1 -0
  219. package/dist/shared-tree-core/transactionEnricher.d.ts +8 -13
  220. package/dist/shared-tree-core/transactionEnricher.d.ts.map +1 -1
  221. package/dist/shared-tree-core/transactionEnricher.js +41 -21
  222. package/dist/shared-tree-core/transactionEnricher.js.map +1 -1
  223. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  224. package/dist/simple-tree/api/conciseTree.js +1 -1
  225. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  226. package/dist/simple-tree/api/create.d.ts.map +1 -1
  227. package/dist/simple-tree/api/create.js +5 -1
  228. package/dist/simple-tree/api/create.js.map +1 -1
  229. package/dist/simple-tree/api/customTree.d.ts +14 -2
  230. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  231. package/dist/simple-tree/api/customTree.js +53 -3
  232. package/dist/simple-tree/api/customTree.js.map +1 -1
  233. package/dist/simple-tree/api/identifierIndex.d.ts +21 -0
  234. package/dist/simple-tree/api/identifierIndex.d.ts.map +1 -0
  235. package/dist/simple-tree/api/identifierIndex.js +45 -0
  236. package/dist/simple-tree/api/identifierIndex.js.map +1 -0
  237. package/dist/simple-tree/api/index.d.ts +4 -2
  238. package/dist/simple-tree/api/index.d.ts.map +1 -1
  239. package/dist/simple-tree/api/index.js +8 -1
  240. package/dist/simple-tree/api/index.js.map +1 -1
  241. package/dist/simple-tree/api/schemaFactory.d.ts +48 -0
  242. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  243. package/dist/simple-tree/api/schemaFactory.js +5 -2
  244. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  245. package/dist/simple-tree/api/simpleSchema.d.ts +3 -1
  246. package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -1
  247. package/dist/simple-tree/api/simpleSchema.js.map +1 -1
  248. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +9 -7
  249. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  250. package/dist/simple-tree/api/simpleTreeIndex.d.ts +65 -0
  251. package/dist/simple-tree/api/simpleTreeIndex.d.ts.map +1 -0
  252. package/dist/simple-tree/api/simpleTreeIndex.js +93 -0
  253. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -0
  254. package/dist/simple-tree/api/storedSchema.d.ts +4 -4
  255. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  256. package/dist/simple-tree/api/storedSchema.js +8 -21
  257. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  258. package/dist/simple-tree/api/tree.d.ts +5 -5
  259. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  260. package/dist/simple-tree/api/tree.js.map +1 -1
  261. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  262. package/dist/simple-tree/api/verboseTree.js +1 -1
  263. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  264. package/dist/simple-tree/api/view.d.ts +14 -9
  265. package/dist/simple-tree/api/view.d.ts.map +1 -1
  266. package/dist/simple-tree/api/view.js +129 -40
  267. package/dist/simple-tree/api/view.js.map +1 -1
  268. package/dist/simple-tree/core/index.d.ts +1 -1
  269. package/dist/simple-tree/core/index.d.ts.map +1 -1
  270. package/dist/simple-tree/core/index.js +2 -1
  271. package/dist/simple-tree/core/index.js.map +1 -1
  272. package/dist/simple-tree/core/treeNodeKernel.d.ts +6 -2
  273. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  274. package/dist/simple-tree/core/treeNodeKernel.js +53 -22
  275. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  276. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
  277. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  278. package/dist/simple-tree/core/unhydratedFlexTree.js +2 -2
  279. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  280. package/dist/simple-tree/index.d.ts +2 -2
  281. package/dist/simple-tree/index.d.ts.map +1 -1
  282. package/dist/simple-tree/index.js +7 -2
  283. package/dist/simple-tree/index.js.map +1 -1
  284. package/dist/simple-tree/leafNodeSchema.d.ts +0 -15
  285. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  286. package/dist/simple-tree/leafNodeSchema.js +0 -15
  287. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  288. package/dist/simple-tree/objectNode.d.ts +15 -5
  289. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  290. package/dist/simple-tree/objectNode.js +18 -2
  291. package/dist/simple-tree/objectNode.js.map +1 -1
  292. package/dist/simple-tree/objectNodeTypes.d.ts +4 -0
  293. package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
  294. package/dist/simple-tree/objectNodeTypes.js.map +1 -1
  295. package/dist/simple-tree/schemaTypes.d.ts +4 -2
  296. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  297. package/dist/simple-tree/schemaTypes.js.map +1 -1
  298. package/dist/simple-tree/toMapTree.js +3 -3
  299. package/dist/simple-tree/toMapTree.js.map +1 -1
  300. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  301. package/dist/simple-tree/toStoredSchema.js +18 -13
  302. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  303. package/dist/util/brand.d.ts +0 -2
  304. package/dist/util/brand.d.ts.map +1 -1
  305. package/dist/util/brand.js +0 -1
  306. package/dist/util/brand.js.map +1 -1
  307. package/dist/util/index.d.ts +1 -2
  308. package/dist/util/index.d.ts.map +1 -1
  309. package/dist/util/index.js +6 -4
  310. package/dist/util/index.js.map +1 -1
  311. package/dist/util/typeCheck.d.ts +6 -3
  312. package/dist/util/typeCheck.d.ts.map +1 -1
  313. package/dist/util/typeCheck.js.map +1 -1
  314. package/dist/util/typeCheckTests.d.ts +14 -2
  315. package/dist/util/typeCheckTests.d.ts.map +1 -1
  316. package/dist/util/typeCheckTests.js.map +1 -1
  317. package/dist/util/utils.d.ts +42 -0
  318. package/dist/util/utils.d.ts.map +1 -1
  319. package/dist/util/utils.js +35 -1
  320. package/dist/util/utils.js.map +1 -1
  321. package/lib/alpha.d.ts +9 -0
  322. package/lib/core/forest/forest.d.ts +10 -2
  323. package/lib/core/forest/forest.d.ts.map +1 -1
  324. package/lib/core/forest/forest.js.map +1 -1
  325. package/lib/core/index.d.ts +3 -3
  326. package/lib/core/index.d.ts.map +1 -1
  327. package/lib/core/index.js +3 -3
  328. package/lib/core/index.js.map +1 -1
  329. package/lib/core/rebase/utils.d.ts +1 -1
  330. package/lib/core/rebase/utils.d.ts.map +1 -1
  331. package/lib/core/rebase/utils.js +13 -17
  332. package/lib/core/rebase/utils.js.map +1 -1
  333. package/lib/core/revertible.d.ts +30 -1
  334. package/lib/core/revertible.d.ts.map +1 -1
  335. package/lib/core/revertible.js.map +1 -1
  336. package/lib/core/schema-stored/format.d.ts +0 -3
  337. package/lib/core/schema-stored/format.d.ts.map +1 -1
  338. package/lib/core/schema-stored/format.js.map +1 -1
  339. package/lib/core/schema-stored/schema.d.ts +12 -10
  340. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  341. package/lib/core/schema-stored/schema.js +3 -5
  342. package/lib/core/schema-stored/schema.js.map +1 -1
  343. package/lib/core/schema-stored/storedSchemaRepository.d.ts +2 -2
  344. package/lib/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
  345. package/lib/core/schema-stored/storedSchemaRepository.js +1 -1
  346. package/lib/core/schema-stored/storedSchemaRepository.js.map +1 -1
  347. package/lib/core/schema-view/index.d.ts +1 -1
  348. package/lib/core/schema-view/index.d.ts.map +1 -1
  349. package/lib/core/schema-view/index.js +1 -1
  350. package/lib/core/schema-view/index.js.map +1 -1
  351. package/lib/core/schema-view/view.d.ts +0 -7
  352. package/lib/core/schema-view/view.d.ts.map +1 -1
  353. package/lib/core/schema-view/view.js +0 -11
  354. package/lib/core/schema-view/view.js.map +1 -1
  355. package/lib/core/tree/anchorSet.d.ts +2 -2
  356. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  357. package/lib/core/tree/anchorSet.js +1 -1
  358. package/lib/core/tree/anchorSet.js.map +1 -1
  359. package/{dist/feature-libraries/chunked-forest → lib/core/tree}/chunk.d.ts +2 -1
  360. package/lib/core/tree/chunk.d.ts.map +1 -0
  361. package/lib/{feature-libraries/chunked-forest → core/tree}/chunk.js +1 -1
  362. package/lib/core/tree/chunk.js.map +1 -0
  363. package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
  364. package/lib/core/tree/detachedFieldIndexCodec.js +4 -3
  365. package/lib/core/tree/detachedFieldIndexCodec.js.map +1 -1
  366. package/lib/core/tree/index.d.ts +2 -1
  367. package/lib/core/tree/index.d.ts.map +1 -1
  368. package/lib/core/tree/index.js +2 -1
  369. package/lib/core/tree/index.js.map +1 -1
  370. package/lib/core/tree/treeTextFormat.d.ts +0 -5
  371. package/lib/core/tree/treeTextFormat.d.ts.map +1 -1
  372. package/lib/core/tree/treeTextFormat.js.map +1 -1
  373. package/lib/core/tree/types.d.ts +0 -5
  374. package/lib/core/tree/types.d.ts.map +1 -1
  375. package/lib/core/tree/types.js +0 -1
  376. package/lib/core/tree/types.js.map +1 -1
  377. package/lib/core/tree/visitorUtils.d.ts +25 -1
  378. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  379. package/lib/core/tree/visitorUtils.js +27 -0
  380. package/lib/core/tree/visitorUtils.js.map +1 -1
  381. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts +1 -2
  382. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  383. package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -1
  384. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  385. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +1 -2
  386. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  387. package/lib/feature-libraries/chunked-forest/chunkTree.js +1 -2
  388. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  389. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts +5 -3
  390. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  391. package/lib/feature-libraries/chunked-forest/chunkedForest.js +18 -8
  392. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  393. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts +1 -2
  394. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.d.ts.map +1 -1
  395. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
  396. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -2
  397. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  398. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  399. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -1
  400. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  401. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  402. package/lib/feature-libraries/chunked-forest/emptyChunk.d.ts +1 -1
  403. package/lib/feature-libraries/chunked-forest/emptyChunk.d.ts.map +1 -1
  404. package/lib/feature-libraries/chunked-forest/emptyChunk.js +1 -2
  405. package/lib/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
  406. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  407. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  408. package/lib/feature-libraries/chunked-forest/index.js +1 -1
  409. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  410. package/lib/feature-libraries/chunked-forest/sequenceChunk.d.ts +1 -1
  411. package/lib/feature-libraries/chunked-forest/sequenceChunk.d.ts.map +1 -1
  412. package/lib/feature-libraries/chunked-forest/sequenceChunk.js +1 -1
  413. package/lib/feature-libraries/chunked-forest/sequenceChunk.js.map +1 -1
  414. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts +1 -2
  415. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  416. package/lib/feature-libraries/chunked-forest/uniformChunk.js +4 -4
  417. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  418. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  419. package/lib/feature-libraries/default-schema/defaultSchema.js +1 -0
  420. package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  421. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  422. package/lib/feature-libraries/default-schema/schemaChecker.js +2 -1
  423. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  424. package/lib/feature-libraries/flex-tree/context.d.ts +1 -1
  425. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  426. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  427. package/lib/feature-libraries/index.d.ts +2 -1
  428. package/lib/feature-libraries/index.d.ts.map +1 -1
  429. package/lib/feature-libraries/index.js +2 -1
  430. package/lib/feature-libraries/index.js.map +1 -1
  431. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts +139 -0
  432. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -0
  433. package/lib/feature-libraries/indexing/anchorTreeIndex.js +382 -0
  434. package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -0
  435. package/lib/feature-libraries/indexing/index.d.ts +7 -0
  436. package/lib/feature-libraries/indexing/index.d.ts.map +1 -0
  437. package/lib/{events → feature-libraries/indexing}/index.js +1 -1
  438. package/lib/feature-libraries/indexing/index.js.map +1 -0
  439. package/lib/feature-libraries/indexing/types.d.ts +32 -0
  440. package/lib/feature-libraries/indexing/types.d.ts.map +1 -0
  441. package/lib/{events/interop.js → feature-libraries/indexing/types.js} +1 -1
  442. package/lib/feature-libraries/indexing/types.js.map +1 -0
  443. package/lib/feature-libraries/modular-schema/discrepancies.d.ts +84 -24
  444. package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
  445. package/lib/feature-libraries/modular-schema/discrepancies.js +25 -28
  446. package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -1
  447. package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
  448. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  449. package/lib/feature-libraries/modular-schema/index.js +1 -1
  450. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  451. package/lib/feature-libraries/modular-schema/isNeverTree.d.ts +0 -1
  452. package/lib/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
  453. package/lib/feature-libraries/modular-schema/isNeverTree.js +0 -1
  454. package/lib/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
  455. package/lib/feature-libraries/object-forest/objectForest.d.ts +5 -2
  456. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  457. package/lib/feature-libraries/object-forest/objectForest.js +15 -5
  458. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  459. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +6 -6
  460. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  461. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +7 -7
  462. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
  463. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +12 -12
  464. package/lib/feature-libraries/sequence-field/formatV1.d.ts +99 -99
  465. package/lib/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
  466. package/lib/feature-libraries/sequence-field/formatV2.d.ts +76 -76
  467. package/lib/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  468. package/lib/feature-libraries/sequence-field/formatV3.d.ts +54 -54
  469. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  470. package/lib/feature-libraries/sequence-field/invert.js +4 -4
  471. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  472. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +4 -3
  473. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  474. package/lib/feature-libraries/sequence-field/types.d.ts +0 -1
  475. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  476. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  477. package/lib/index.d.ts +6 -7
  478. package/lib/index.d.ts.map +1 -1
  479. package/lib/index.js +3 -4
  480. package/lib/index.js.map +1 -1
  481. package/lib/packageVersion.d.ts +1 -1
  482. package/lib/packageVersion.js +1 -1
  483. package/lib/packageVersion.js.map +1 -1
  484. package/lib/shared-tree/index.d.ts +2 -2
  485. package/lib/shared-tree/index.d.ts.map +1 -1
  486. package/lib/shared-tree/index.js +1 -1
  487. package/lib/shared-tree/index.js.map +1 -1
  488. package/lib/shared-tree/schematizeTree.d.ts +1 -1
  489. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  490. package/lib/shared-tree/schematizeTree.js +7 -7
  491. package/lib/shared-tree/schematizeTree.js.map +1 -1
  492. package/lib/shared-tree/schematizingTreeView.d.ts +7 -1
  493. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  494. package/lib/shared-tree/schematizingTreeView.js +12 -16
  495. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  496. package/lib/shared-tree/sharedTree.d.ts +27 -6
  497. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  498. package/lib/shared-tree/sharedTree.js +135 -10
  499. package/lib/shared-tree/sharedTree.js.map +1 -1
  500. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  501. package/lib/shared-tree/sharedTreeChangeFamily.js +5 -5
  502. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  503. package/lib/shared-tree/treeCheckout.d.ts +59 -72
  504. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  505. package/lib/shared-tree/treeCheckout.js +233 -177
  506. package/lib/shared-tree/treeCheckout.js.map +1 -1
  507. package/lib/shared-tree-core/branch.d.ts +29 -107
  508. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  509. package/lib/shared-tree-core/branch.js +50 -193
  510. package/lib/shared-tree-core/branch.js.map +1 -1
  511. package/lib/shared-tree-core/branchCommitEnricher.d.ts +24 -32
  512. package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  513. package/lib/shared-tree-core/branchCommitEnricher.js +71 -54
  514. package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
  515. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  516. package/lib/shared-tree-core/defaultResubmitMachine.js +3 -2
  517. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  518. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  519. package/lib/shared-tree-core/editManager.js +4 -4
  520. package/lib/shared-tree-core/editManager.js.map +1 -1
  521. package/lib/shared-tree-core/index.d.ts +3 -3
  522. package/lib/shared-tree-core/index.d.ts.map +1 -1
  523. package/lib/shared-tree-core/index.js +2 -2
  524. package/lib/shared-tree-core/index.js.map +1 -1
  525. package/lib/shared-tree-core/sharedTreeCore.d.ts +3 -10
  526. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  527. package/lib/shared-tree-core/sharedTreeCore.js +15 -68
  528. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  529. package/lib/shared-tree-core/transaction.d.ts +146 -0
  530. package/lib/shared-tree-core/transaction.d.ts.map +1 -0
  531. package/lib/shared-tree-core/transaction.js +206 -0
  532. package/lib/shared-tree-core/transaction.js.map +1 -0
  533. package/lib/shared-tree-core/transactionEnricher.d.ts +8 -13
  534. package/lib/shared-tree-core/transactionEnricher.d.ts.map +1 -1
  535. package/lib/shared-tree-core/transactionEnricher.js +41 -21
  536. package/lib/shared-tree-core/transactionEnricher.js.map +1 -1
  537. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  538. package/lib/simple-tree/api/conciseTree.js +2 -2
  539. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  540. package/lib/simple-tree/api/create.d.ts.map +1 -1
  541. package/lib/simple-tree/api/create.js +5 -1
  542. package/lib/simple-tree/api/create.js.map +1 -1
  543. package/lib/simple-tree/api/customTree.d.ts +14 -2
  544. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  545. package/lib/simple-tree/api/customTree.js +50 -2
  546. package/lib/simple-tree/api/customTree.js.map +1 -1
  547. package/lib/simple-tree/api/identifierIndex.d.ts +21 -0
  548. package/lib/simple-tree/api/identifierIndex.d.ts.map +1 -0
  549. package/lib/simple-tree/api/identifierIndex.js +41 -0
  550. package/lib/simple-tree/api/identifierIndex.js.map +1 -0
  551. package/lib/simple-tree/api/index.d.ts +4 -2
  552. package/lib/simple-tree/api/index.d.ts.map +1 -1
  553. package/lib/simple-tree/api/index.js +4 -1
  554. package/lib/simple-tree/api/index.js.map +1 -1
  555. package/lib/simple-tree/api/schemaFactory.d.ts +48 -0
  556. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  557. package/lib/simple-tree/api/schemaFactory.js +4 -1
  558. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  559. package/lib/simple-tree/api/simpleSchema.d.ts +3 -1
  560. package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -1
  561. package/lib/simple-tree/api/simpleSchema.js.map +1 -1
  562. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +11 -9
  563. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  564. package/lib/simple-tree/api/simpleTreeIndex.d.ts +65 -0
  565. package/lib/simple-tree/api/simpleTreeIndex.d.ts.map +1 -0
  566. package/lib/simple-tree/api/simpleTreeIndex.js +89 -0
  567. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -0
  568. package/lib/simple-tree/api/storedSchema.d.ts +4 -4
  569. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  570. package/lib/simple-tree/api/storedSchema.js +5 -18
  571. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  572. package/lib/simple-tree/api/tree.d.ts +5 -5
  573. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  574. package/lib/simple-tree/api/tree.js.map +1 -1
  575. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  576. package/lib/simple-tree/api/verboseTree.js +2 -2
  577. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  578. package/lib/simple-tree/api/view.d.ts +14 -9
  579. package/lib/simple-tree/api/view.d.ts.map +1 -1
  580. package/lib/simple-tree/api/view.js +131 -42
  581. package/lib/simple-tree/api/view.js.map +1 -1
  582. package/lib/simple-tree/core/index.d.ts +1 -1
  583. package/lib/simple-tree/core/index.d.ts.map +1 -1
  584. package/lib/simple-tree/core/index.js +1 -1
  585. package/lib/simple-tree/core/index.js.map +1 -1
  586. package/lib/simple-tree/core/treeNodeKernel.d.ts +6 -2
  587. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  588. package/lib/simple-tree/core/treeNodeKernel.js +31 -1
  589. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  590. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
  591. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  592. package/lib/simple-tree/core/unhydratedFlexTree.js +1 -1
  593. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  594. package/lib/simple-tree/index.d.ts +2 -2
  595. package/lib/simple-tree/index.d.ts.map +1 -1
  596. package/lib/simple-tree/index.js +2 -2
  597. package/lib/simple-tree/index.js.map +1 -1
  598. package/lib/simple-tree/leafNodeSchema.d.ts +0 -15
  599. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  600. package/lib/simple-tree/leafNodeSchema.js +0 -15
  601. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  602. package/lib/simple-tree/objectNode.d.ts +15 -5
  603. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  604. package/lib/simple-tree/objectNode.js +16 -1
  605. package/lib/simple-tree/objectNode.js.map +1 -1
  606. package/lib/simple-tree/objectNodeTypes.d.ts +4 -0
  607. package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
  608. package/lib/simple-tree/objectNodeTypes.js.map +1 -1
  609. package/lib/simple-tree/schemaTypes.d.ts +4 -2
  610. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  611. package/lib/simple-tree/schemaTypes.js.map +1 -1
  612. package/lib/simple-tree/toMapTree.js +5 -5
  613. package/lib/simple-tree/toMapTree.js.map +1 -1
  614. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  615. package/lib/simple-tree/toStoredSchema.js +19 -14
  616. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  617. package/lib/util/brand.d.ts +0 -2
  618. package/lib/util/brand.d.ts.map +1 -1
  619. package/lib/util/brand.js +0 -1
  620. package/lib/util/brand.js.map +1 -1
  621. package/lib/util/index.d.ts +1 -2
  622. package/lib/util/index.d.ts.map +1 -1
  623. package/lib/util/index.js +1 -2
  624. package/lib/util/index.js.map +1 -1
  625. package/lib/util/typeCheck.d.ts +6 -3
  626. package/lib/util/typeCheck.d.ts.map +1 -1
  627. package/lib/util/typeCheck.js.map +1 -1
  628. package/lib/util/typeCheckTests.d.ts +14 -2
  629. package/lib/util/typeCheckTests.d.ts.map +1 -1
  630. package/lib/util/typeCheckTests.js.map +1 -1
  631. package/lib/util/utils.d.ts +42 -0
  632. package/lib/util/utils.d.ts.map +1 -1
  633. package/lib/util/utils.js +30 -0
  634. package/lib/util/utils.js.map +1 -1
  635. package/package.json +23 -23
  636. package/src/core/forest/forest.ts +12 -1
  637. package/src/core/index.ts +13 -2
  638. package/src/core/rebase/utils.ts +28 -29
  639. package/src/core/revertible.ts +35 -1
  640. package/src/core/schema-stored/format.ts +0 -3
  641. package/src/core/schema-stored/schema.ts +13 -10
  642. package/src/core/schema-stored/storedSchemaRepository.ts +2 -1
  643. package/src/core/schema-view/index.ts +0 -1
  644. package/src/core/schema-view/view.ts +0 -11
  645. package/src/core/tree/anchorSet.ts +2 -1
  646. package/src/{feature-libraries/chunked-forest → core/tree}/chunk.ts +4 -4
  647. package/src/core/tree/detachedFieldIndexCodec.ts +4 -3
  648. package/src/core/tree/index.ts +9 -0
  649. package/src/core/tree/treeTextFormat.ts +0 -5
  650. package/src/core/tree/types.ts +0 -5
  651. package/src/core/tree/visitorUtils.ts +56 -1
  652. package/src/feature-libraries/chunked-forest/basicChunk.ts +4 -2
  653. package/src/feature-libraries/chunked-forest/chunkTree.ts +2 -1
  654. package/src/feature-libraries/chunked-forest/chunkedForest.ts +35 -8
  655. package/src/feature-libraries/chunked-forest/codec/chunkCodecUtilities.ts +1 -2
  656. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +6 -2
  657. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +1 -1
  658. package/src/feature-libraries/chunked-forest/emptyChunk.ts +4 -2
  659. package/src/feature-libraries/chunked-forest/index.ts +1 -1
  660. package/src/feature-libraries/chunked-forest/sequenceChunk.ts +1 -1
  661. package/src/feature-libraries/chunked-forest/uniformChunk.ts +7 -4
  662. package/src/feature-libraries/default-schema/defaultSchema.ts +1 -0
  663. package/src/feature-libraries/default-schema/schemaChecker.ts +4 -1
  664. package/src/feature-libraries/flex-tree/context.ts +1 -1
  665. package/src/feature-libraries/index.ts +22 -0
  666. package/src/feature-libraries/indexing/anchorTreeIndex.ts +482 -0
  667. package/src/feature-libraries/indexing/index.ts +11 -0
  668. package/src/feature-libraries/indexing/types.ts +37 -0
  669. package/src/feature-libraries/modular-schema/discrepancies.ts +76 -38
  670. package/src/feature-libraries/modular-schema/index.ts +13 -0
  671. package/src/feature-libraries/modular-schema/isNeverTree.ts +0 -2
  672. package/src/feature-libraries/object-forest/objectForest.ts +22 -4
  673. package/src/feature-libraries/sequence-field/invert.ts +4 -4
  674. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +4 -4
  675. package/src/feature-libraries/sequence-field/types.ts +0 -1
  676. package/src/index.ts +17 -35
  677. package/src/packageVersion.ts +1 -1
  678. package/src/shared-tree/index.ts +1 -2
  679. package/src/shared-tree/schematizeTree.ts +6 -10
  680. package/src/shared-tree/schematizingTreeView.ts +18 -28
  681. package/src/shared-tree/sharedTree.ts +216 -30
  682. package/src/shared-tree/sharedTreeChangeFamily.ts +5 -4
  683. package/src/shared-tree/treeCheckout.ts +341 -299
  684. package/src/shared-tree-core/branch.ts +80 -300
  685. package/src/shared-tree-core/branchCommitEnricher.ts +66 -62
  686. package/src/shared-tree-core/defaultResubmitMachine.ts +3 -2
  687. package/src/shared-tree-core/editManager.ts +4 -9
  688. package/src/shared-tree-core/index.ts +11 -3
  689. package/src/shared-tree-core/sharedTreeCore.ts +23 -79
  690. package/src/shared-tree-core/transaction.ts +310 -0
  691. package/src/shared-tree-core/transactionEnricher.ts +30 -24
  692. package/src/simple-tree/api/conciseTree.ts +2 -2
  693. package/src/simple-tree/api/create.ts +5 -1
  694. package/src/simple-tree/api/customTree.ts +69 -1
  695. package/src/simple-tree/api/identifierIndex.ts +64 -0
  696. package/src/simple-tree/api/index.ts +17 -2
  697. package/src/simple-tree/api/schemaFactory.ts +62 -1
  698. package/src/simple-tree/api/simpleSchema.ts +3 -1
  699. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +17 -18
  700. package/src/simple-tree/api/simpleTreeIndex.ts +233 -0
  701. package/src/simple-tree/api/storedSchema.ts +7 -22
  702. package/src/simple-tree/api/tree.ts +14 -5
  703. package/src/simple-tree/api/treeNodeApi.ts +1 -1
  704. package/src/simple-tree/api/verboseTree.ts +2 -2
  705. package/src/simple-tree/api/view.ts +197 -51
  706. package/src/simple-tree/core/index.ts +1 -0
  707. package/src/simple-tree/core/treeNodeKernel.ts +37 -2
  708. package/src/simple-tree/core/unhydratedFlexTree.ts +2 -1
  709. package/src/simple-tree/index.ts +10 -0
  710. package/src/simple-tree/leafNodeSchema.ts +0 -19
  711. package/src/simple-tree/objectNode.ts +45 -14
  712. package/src/simple-tree/objectNodeTypes.ts +5 -0
  713. package/src/simple-tree/schemaTypes.ts +7 -2
  714. package/src/simple-tree/toMapTree.ts +5 -5
  715. package/src/simple-tree/toStoredSchema.ts +25 -19
  716. package/src/util/brand.ts +0 -2
  717. package/src/util/index.ts +4 -1
  718. package/src/util/typeCheck.ts +6 -3
  719. package/src/util/typeCheckTests.ts +11 -1
  720. package/src/util/utils.ts +64 -0
  721. package/dist/events/emitter.d.ts +0 -139
  722. package/dist/events/emitter.d.ts.map +0 -1
  723. package/dist/events/emitter.js +0 -165
  724. package/dist/events/emitter.js.map +0 -1
  725. package/dist/events/index.d.ts +0 -7
  726. package/dist/events/index.d.ts.map +0 -1
  727. package/dist/events/index.js +0 -11
  728. package/dist/events/index.js.map +0 -1
  729. package/dist/events/interop.d.ts +0 -30
  730. package/dist/events/interop.d.ts.map +0 -1
  731. package/dist/events/interop.js.map +0 -1
  732. package/dist/events/listeners.d.ts +0 -76
  733. package/dist/events/listeners.d.ts.map +0 -1
  734. package/dist/events/listeners.js +0 -7
  735. package/dist/events/listeners.js.map +0 -1
  736. package/dist/feature-libraries/chunked-forest/chunk.d.ts.map +0 -1
  737. package/dist/feature-libraries/chunked-forest/chunk.js.map +0 -1
  738. package/dist/shared-tree-core/transactionStack.d.ts +0 -29
  739. package/dist/shared-tree-core/transactionStack.d.ts.map +0 -1
  740. package/dist/shared-tree-core/transactionStack.js +0 -41
  741. package/dist/shared-tree-core/transactionStack.js.map +0 -1
  742. package/dist/util/transactionResult.d.ts +0 -19
  743. package/dist/util/transactionResult.d.ts.map +0 -1
  744. package/dist/util/transactionResult.js +0 -23
  745. package/dist/util/transactionResult.js.map +0 -1
  746. package/lib/events/emitter.d.ts +0 -139
  747. package/lib/events/emitter.d.ts.map +0 -1
  748. package/lib/events/emitter.js +0 -160
  749. package/lib/events/emitter.js.map +0 -1
  750. package/lib/events/index.d.ts +0 -7
  751. package/lib/events/index.d.ts.map +0 -1
  752. package/lib/events/index.js.map +0 -1
  753. package/lib/events/interop.d.ts +0 -30
  754. package/lib/events/interop.d.ts.map +0 -1
  755. package/lib/events/interop.js.map +0 -1
  756. package/lib/events/listeners.d.ts +0 -76
  757. package/lib/events/listeners.d.ts.map +0 -1
  758. package/lib/events/listeners.js +0 -6
  759. package/lib/events/listeners.js.map +0 -1
  760. package/lib/feature-libraries/chunked-forest/chunk.d.ts.map +0 -1
  761. package/lib/feature-libraries/chunked-forest/chunk.js.map +0 -1
  762. package/lib/shared-tree-core/transactionStack.d.ts +0 -29
  763. package/lib/shared-tree-core/transactionStack.d.ts.map +0 -1
  764. package/lib/shared-tree-core/transactionStack.js +0 -37
  765. package/lib/shared-tree-core/transactionStack.js.map +0 -1
  766. package/lib/util/transactionResult.d.ts +0 -19
  767. package/lib/util/transactionResult.d.ts.map +0 -1
  768. package/lib/util/transactionResult.js +0 -20
  769. package/lib/util/transactionResult.js.map +0 -1
  770. package/src/events/README.md +0 -3
  771. package/src/events/emitter.ts +0 -256
  772. package/src/events/index.ts +0 -19
  773. package/src/events/interop.ts +0 -38
  774. package/src/events/listeners.ts +0 -80
  775. package/src/shared-tree-core/transactionStack.ts +0 -45
  776. package/src/util/transactionResult.ts +0 -19
@@ -3,16 +3,28 @@
3
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
4
  * Licensed under the MIT License.
5
5
  */
6
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
7
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
8
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
9
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
10
+ };
11
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
+ if (kind === "m") throw new TypeError("Private method is not writable");
13
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
+ };
17
+ var _TreeCheckout_events, _TreeCheckout_transaction, _TreeCheckout_validatedCommits;
6
18
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.runSynchronous = exports.TreeCheckout = exports.createTreeCheckout = void 0;
19
+ exports.TreeCheckout = exports.createTreeCheckout = void 0;
8
20
  const internal_1 = require("@fluidframework/core-utils/internal");
21
+ const client_utils_1 = require("@fluid-internal/client-utils");
9
22
  const internal_2 = require("@fluidframework/telemetry-utils/internal");
10
23
  const index_js_1 = require("../codec/index.js");
11
24
  const index_js_2 = require("../core/index.js");
12
- const index_js_3 = require("../events/index.js");
13
- const index_js_4 = require("../feature-libraries/index.js");
14
- const index_js_5 = require("../shared-tree-core/index.js");
15
- const index_js_6 = require("../util/index.js");
25
+ const index_js_3 = require("../feature-libraries/index.js");
26
+ const index_js_4 = require("../shared-tree-core/index.js");
27
+ const index_js_5 = require("../util/index.js");
16
28
  const sharedTreeChangeFamily_js_1 = require("./sharedTreeChangeFamily.js");
17
29
  const schematizingTreeView_js_1 = require("./schematizingTreeView.js");
18
30
  /**
@@ -23,61 +35,34 @@ const schematizingTreeView_js_1 = require("./schematizingTreeView.js");
23
35
  * and functionality required to implement {@link ITreeCheckout}.
24
36
  */
25
37
  function createTreeCheckout(idCompressor, mintRevisionTag, revisionTagCodec, args) {
26
- const forest = args?.forest ?? (0, index_js_4.buildForest)();
38
+ const forest = args?.forest ?? (0, index_js_3.buildForest)();
27
39
  const schema = args?.schema ?? new index_js_2.TreeStoredSchemaRepository();
28
40
  const defaultCodecOptions = { jsonValidator: index_js_1.noopValidator };
29
41
  const defaultFieldBatchVersion = 1;
30
42
  const changeFamily = args?.changeFamily ??
31
43
  new sharedTreeChangeFamily_js_1.SharedTreeChangeFamily(revisionTagCodec, args?.fieldBatchCodec ??
32
- (0, index_js_4.makeFieldBatchCodec)(defaultCodecOptions, defaultFieldBatchVersion), { jsonValidator: index_js_1.noopValidator }, args?.chunkCompressionStrategy, idCompressor);
44
+ (0, index_js_3.makeFieldBatchCodec)(defaultCodecOptions, defaultFieldBatchVersion), { jsonValidator: index_js_1.noopValidator }, args?.chunkCompressionStrategy, idCompressor);
33
45
  const branch = args?.branch ??
34
- new index_js_5.SharedTreeBranch({
46
+ new index_js_4.SharedTreeBranch({
35
47
  change: changeFamily.rebaser.compose([]),
36
48
  revision: "root",
37
49
  }, changeFamily, () => idCompressor.generateCompressedId());
38
- const events = args?.events ?? (0, index_js_3.createEmitter)();
39
- const transaction = new Transaction(branch);
40
- return new TreeCheckout(transaction, branch, false, changeFamily, schema, forest, events, mintRevisionTag, revisionTagCodec, idCompressor, args?.removedRoots, args?.logger, args?.breaker);
50
+ return new TreeCheckout(branch, false, changeFamily, schema, forest, mintRevisionTag, revisionTagCodec, idCompressor, args?.removedRoots, args?.logger, args?.breaker);
41
51
  }
42
52
  exports.createTreeCheckout = createTreeCheckout;
43
- class Transaction {
44
- constructor(branch) {
45
- this.branch = branch;
46
- }
47
- start() {
48
- this.branch.startTransaction();
49
- this.branch.editor.enterTransaction();
50
- }
51
- commit() {
52
- this.branch.commitTransaction();
53
- this.branch.editor.exitTransaction();
54
- return index_js_6.TransactionResult.Commit;
55
- }
56
- abort() {
57
- this.branch.abortTransaction();
58
- this.branch.editor.exitTransaction();
59
- return index_js_6.TransactionResult.Abort;
60
- }
61
- inProgress() {
62
- return this.branch.isTransacting();
63
- }
64
- }
65
53
  /**
66
54
  * An implementation of {@link ITreeCheckoutFork}.
67
55
  */
68
56
  class TreeCheckout {
69
- constructor(transaction, _branch,
57
+ constructor(branch,
70
58
  /** True if and only if this checkout is for a forked branch and not the "main branch" of the tree. */
71
- isBranch, changeFamily, storedSchema, forest, events, mintRevisionTag, revisionTagCodec, idCompressor, removedRoots = (0, index_js_2.makeDetachedFieldIndex)("repair", revisionTagCodec, idCompressor),
59
+ isBranch, changeFamily, storedSchema, forest, mintRevisionTag, revisionTagCodec, idCompressor, removedRoots = (0, index_js_2.makeDetachedFieldIndex)("repair", revisionTagCodec, idCompressor),
72
60
  /** Optional logger for telemetry. */
73
- logger, breaker = new index_js_6.Breakable("TreeCheckout")) {
74
- this.transaction = transaction;
75
- this._branch = _branch;
61
+ logger, breaker = new index_js_5.Breakable("TreeCheckout")) {
76
62
  this.isBranch = isBranch;
77
63
  this.changeFamily = changeFamily;
78
64
  this.storedSchema = storedSchema;
79
65
  this.forest = forest;
80
- this.events = events;
81
66
  this.mintRevisionTag = mintRevisionTag;
82
67
  this.revisionTagCodec = revisionTagCodec;
83
68
  this.idCompressor = idCompressor;
@@ -96,39 +81,18 @@ class TreeCheckout {
96
81
  * being reverted.
97
82
  */
98
83
  this.revertibleCommitBranches = new Map();
99
- /**
100
- * copies of the removed roots used as snapshots for reverting to previous state when transactions are aborted
101
- */
102
- this.removedRootsSnapshots = [];
103
- // when a transaction is started, take a snapshot of the current state of removed roots
104
- _branch.events.on("transactionStarted", () => {
105
- this.removedRootsSnapshots.push(this.removedRoots.clone());
106
- });
107
- // when a transaction is committed, the latest snapshot of removed roots can be discarded
108
- _branch.events.on("transactionCommitted", () => {
109
- this.removedRootsSnapshots.pop();
110
- });
111
- // after a transaction is rolled back, revert removed roots back to the latest snapshot
112
- _branch.events.on("transactionRolledBack", () => {
113
- const snapshot = this.removedRootsSnapshots.pop();
114
- (0, internal_1.assert)(snapshot !== undefined, 0x9ae /* a snapshot for removed roots does not exist */);
115
- this.removedRoots = snapshot;
116
- });
117
- // We subscribe to `beforeChange` rather than `afterChange` here because it's possible that the change is invalid WRT our forest.
118
- // For example, a bug in the editor might produce a malformed change object and thus applying the change to the forest will throw an error.
119
- // In such a case we will crash here, preventing the change from being added to the commit graph, and preventing `afterChange` from firing.
120
- // One important consequence of this is that we will not submit the op containing the invalid change, since op submissions happens in response to `afterChange`.
121
- _branch.events.on("beforeChange", (event) => {
84
+ _TreeCheckout_events.set(this, (0, client_utils_1.createEmitter)());
85
+ this.events = __classPrivateFieldGet(this, _TreeCheckout_events, "f");
86
+ this.onAfterChange = (event) => {
87
+ __classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("beforeBatch", event);
122
88
  if (event.change !== undefined) {
123
- const revision = event.type === "replace"
124
- ? // Change events will always contain new commits
125
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
126
- event.newCommits[event.newCommits.length - 1].revision
89
+ const revision = event.type === "rebase"
90
+ ? __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.getHead().revision
127
91
  : event.change.revision;
128
92
  // Conflicts due to schema will be empty and thus are not applied.
129
93
  for (const change of event.change.change.changes) {
130
94
  if (change.type === "data") {
131
- const delta = (0, index_js_4.intoDelta)((0, index_js_2.tagChange)(change.innerChange, revision));
95
+ const delta = (0, index_js_3.intoDelta)((0, index_js_2.tagChange)(change.innerChange, revision));
132
96
  this.withCombinedVisitor((visitor) => {
133
97
  (0, index_js_2.visitDelta)(delta, visitor, this.removedRoots, revision);
134
98
  });
@@ -149,89 +113,21 @@ class TreeCheckout {
149
113
  // They will however be rebased over the rollback of the schema change. This rebasing will
150
114
  // ensure that these data changes are muted if they would render some trees invalid under the
151
115
  // original (reinstated) schema.
152
- storedSchema.apply(change.innerChange.schema.new);
116
+ this.storedSchema.apply(change.innerChange.schema.new);
153
117
  }
154
118
  else {
155
- (0, index_js_6.fail)("Unknown Shared Tree change type.");
119
+ (0, index_js_5.fail)("Unknown Shared Tree change type.");
156
120
  }
157
121
  }
158
- this.events.emit("afterBatch");
159
122
  }
160
- if (event.type === "replace" && (0, index_js_5.getChangeReplaceType)(event) === "transactionCommit") {
161
- const firstCommit = event.newCommits[0] ?? (0, internal_1.oob)();
162
- const transactionRevision = firstCommit.revision;
163
- for (const transactionStep of event.removedCommits) {
164
- this.removedRoots.updateMajor(transactionStep.revision, transactionRevision);
165
- }
123
+ __classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("afterBatch");
124
+ if (event.type === "append") {
125
+ event.newCommits.forEach((commit) => this.validateCommit(commit));
166
126
  }
167
- });
168
- _branch.events.on("afterChange", (event) => {
169
- // The following logic allows revertibles to be generated for the change.
170
- // Currently only appends (including merges) and transaction commits are supported.
171
- if (!_branch.isTransacting()) {
172
- if (event.type === "append" ||
173
- (event.type === "replace" && (0, index_js_5.getChangeReplaceType)(event) === "transactionCommit")) {
174
- // TODO:#20949: When the SharedTree is detached, these commits will already have been garbage collected.
175
- // Figure out a way to generate revertibles before the commits are garbage collected.
176
- for (const commit of event.newCommits) {
177
- const kind = event.type === "append" ? event.kind : index_js_2.CommitKind.Default;
178
- const { change, revision } = commit;
179
- const getRevertible = (0, sharedTreeChangeFamily_js_1.hasSchemaChange)(change)
180
- ? undefined
181
- : (onRevertibleDisposed) => {
182
- if (!withinEventContext) {
183
- throw new internal_2.UsageError("Cannot get a revertible outside of the context of a changed event.");
184
- }
185
- if (this.revertibleCommitBranches.get(revision) !== undefined) {
186
- 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.");
187
- }
188
- const revertibleCommits = this.revertibleCommitBranches;
189
- const revertible = {
190
- get status() {
191
- const revertibleCommit = revertibleCommits.get(revision);
192
- return revertibleCommit === undefined
193
- ? index_js_2.RevertibleStatus.Disposed
194
- : index_js_2.RevertibleStatus.Valid;
195
- },
196
- revert: (release = true) => {
197
- if (revertible.status === index_js_2.RevertibleStatus.Disposed) {
198
- throw new internal_2.UsageError("Unable to revert a revertible that has been disposed.");
199
- }
200
- const revertMetrics = this.revertRevertible(revision, kind);
201
- this.logger?.sendTelemetryEvent({
202
- eventName: TreeCheckout.revertTelemetryEventName,
203
- ...revertMetrics,
204
- });
205
- if (release) {
206
- revertible.dispose();
207
- }
208
- },
209
- dispose: () => {
210
- if (revertible.status === index_js_2.RevertibleStatus.Disposed) {
211
- throw new internal_2.UsageError("Unable to dispose a revertible that has already been disposed.");
212
- }
213
- this.disposeRevertible(revertible, revision);
214
- onRevertibleDisposed?.(revertible);
215
- },
216
- };
217
- this.revertibleCommitBranches.set(revision, _branch.fork(commit));
218
- this.revertibles.add(revertible);
219
- return revertible;
220
- };
221
- let withinEventContext = true;
222
- this.events.emit("changed", { isLocal: true, kind }, getRevertible);
223
- withinEventContext = false;
224
- }
225
- }
226
- else if (this.isRemoteChangeEvent(event)) {
227
- // TODO: figure out how to plumb through commit kind info for remote changes
228
- this.events.emit("changed", { isLocal: false, kind: index_js_2.CommitKind.Default });
229
- }
230
- }
231
- });
232
- // When the branch is trimmed, we can garbage collect any repair data whose latest relevant revision is one of the
233
- // trimmed revisions.
234
- _branch.events.on("ancestryTrimmed", (revisions) => {
127
+ };
128
+ this.onAncestryTrimmed = (revisions) => {
129
+ // When the branch is trimmed, we can garbage collect any repair data whose latest relevant revision is one of the
130
+ // trimmed revisions.
235
131
  this.withCombinedVisitor((visitor) => {
236
132
  revisions.forEach((revision) => {
237
133
  // get all the roots last created or used by the revision
@@ -243,7 +139,94 @@ class TreeCheckout {
243
139
  this.removedRoots.deleteRootsLastTouchedByRevision(revision);
244
140
  });
245
141
  });
142
+ };
143
+ /**
144
+ * The {@link Transactor} for this checkout.
145
+ * @remarks In the context of a checkout, transactions allow edits to be batched into atomic units.
146
+ * 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.
147
+ * If the transaction is aborted, the local state will be reset to what it was before the transaction began.
148
+ * Transactions may nest, meaning that a transaction may be started while a transaction is already ongoing.
149
+ *
150
+ * To avoid updating observers of the view state with intermediate results during a transaction,
151
+ * use {@link ITreeCheckout#branch} and {@link ISharedTreeFork#merge}.
152
+ */
153
+ _TreeCheckout_transaction.set(this, void 0);
154
+ // #region Commit Validation
155
+ /** Used to maintain the contract of {@link onCommitValid}(). */
156
+ _TreeCheckout_validatedCommits.set(this, new WeakMap());
157
+ __classPrivateFieldSet(this, _TreeCheckout_transaction, new index_js_4.SquashingTransactionStack(branch, (commits) => {
158
+ const revision = this.mintRevisionTag();
159
+ for (const transactionStep of commits) {
160
+ this.removedRoots.updateMajor(transactionStep.revision, revision);
161
+ }
162
+ const squashedChange = this.changeFamily.rebaser.compose(commits);
163
+ const change = this.changeFamily.rebaser.changeRevision(squashedChange, revision);
164
+ return (0, index_js_2.tagChange)(change, revision);
165
+ }, () => {
166
+ // Keep track of all the forks created during the transaction so that we can dispose them when the transaction ends.
167
+ // This is a policy decision that we think is useful for the user, but it is not necessary for correctness.
168
+ const forks = new Set();
169
+ const onDisposeUnSubscribes = [];
170
+ const onForkUnSubscribe = (0, index_js_4.onForkTransitive)(this, (fork) => {
171
+ forks.add(fork);
172
+ onDisposeUnSubscribes.push(fork.events.on("dispose", () => forks.delete(fork)));
173
+ });
174
+ // When each transaction is started, take a snapshot of the current state of removed roots
175
+ const removedRootsSnapshot = this.removedRoots.clone();
176
+ return (result) => {
177
+ switch (result) {
178
+ case index_js_4.TransactionResult.Abort:
179
+ this.removedRoots = removedRootsSnapshot;
180
+ break;
181
+ case index_js_4.TransactionResult.Commit:
182
+ if (!this.transaction.isInProgress()) {
183
+ // 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.
184
+ this.validateCommit(__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.getHead());
185
+ }
186
+ break;
187
+ default:
188
+ (0, internal_1.unreachableCase)(result);
189
+ }
190
+ forks.forEach((fork) => fork.dispose());
191
+ onDisposeUnSubscribes.forEach((unsubscribe) => unsubscribe());
192
+ onForkUnSubscribe();
193
+ };
194
+ }), "f");
195
+ branch.events.on("afterChange", (event) => {
196
+ // The following logic allows revertibles to be generated for the change.
197
+ // Currently only appends (including merges and transaction commits) are supported.
198
+ if (event.type === "append") {
199
+ // TODO:#20949: When the SharedTree is detached, these commits will already have been garbage collected.
200
+ // Figure out a way to generate revertibles before the commits are garbage collected.
201
+ for (const commit of event.newCommits) {
202
+ const kind = event.type === "append" ? event.kind : index_js_2.CommitKind.Default;
203
+ const { change, revision } = commit;
204
+ const getRevertible = (0, sharedTreeChangeFamily_js_1.hasSchemaChange)(change)
205
+ ? undefined
206
+ : (onRevertibleDisposed) => {
207
+ if (!withinEventContext) {
208
+ throw new internal_2.UsageError("Cannot get a revertible outside of the context of a changed event.");
209
+ }
210
+ if (this.revertibleCommitBranches.get(revision) !== undefined) {
211
+ 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.");
212
+ }
213
+ const revertible = this.createRevertible(revision, kind, this, onRevertibleDisposed);
214
+ this.revertibleCommitBranches.set(revision, __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.fork(commit));
215
+ this.revertibles.add(revertible);
216
+ return revertible;
217
+ };
218
+ let withinEventContext = true;
219
+ __classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("changed", { isLocal: true, kind }, getRevertible);
220
+ withinEventContext = false;
221
+ }
222
+ }
223
+ else if (this.isRemoteChangeEvent(event)) {
224
+ // TODO: figure out how to plumb through commit kind info for remote changes
225
+ __classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("changed", { isLocal: false, kind: index_js_2.CommitKind.Default });
226
+ }
246
227
  });
228
+ __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEvents.on("afterChange", this.onAfterChange);
229
+ __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEvents.on("ancestryTrimmed", this.onAncestryTrimmed);
247
230
  }
248
231
  withCombinedVisitor(fn) {
249
232
  const anchorVisitor = this.forest.anchors.acquireVisitor();
@@ -259,8 +242,61 @@ class TreeCheckout {
259
242
  (0, internal_1.assert)(false, 0x911 /* Invalid operation on a disposed TreeCheckout */);
260
243
  }
261
244
  }
245
+ /**
246
+ * Creates a {@link RevertibleAlpha} object that can undo a specific change in the tree's history.
247
+ * Revision must exist in the given {@link TreeCheckout}'s branch.
248
+ *
249
+ * @param revision - The revision tag identifying the change to be made revertible.
250
+ * @param kind - The {@link CommitKind} that produced this revertible (e.g., Default, Undo, Redo).
251
+ * @param checkout - The {@link TreeCheckout} instance this revertible belongs to.
252
+ * @param onRevertibleDisposed - Callback function that will be called when the revertible is disposed.
253
+ * @returns - {@link RevertibleAlpha}
254
+ */
255
+ createRevertible(revision, kind, checkout, onRevertibleDisposed) {
256
+ const commitBranches = checkout.revertibleCommitBranches;
257
+ const revertible = {
258
+ get status() {
259
+ const revertibleCommit = commitBranches.get(revision);
260
+ return revertibleCommit === undefined
261
+ ? index_js_2.RevertibleStatus.Disposed
262
+ : index_js_2.RevertibleStatus.Valid;
263
+ },
264
+ revert: (release = true) => {
265
+ if (revertible.status === index_js_2.RevertibleStatus.Disposed) {
266
+ throw new internal_2.UsageError("Unable to revert a revertible that has been disposed.");
267
+ }
268
+ const revertMetrics = checkout.revertRevertible(revision, kind);
269
+ checkout.logger?.sendTelemetryEvent({
270
+ eventName: TreeCheckout.revertTelemetryEventName,
271
+ ...revertMetrics,
272
+ });
273
+ if (release) {
274
+ revertible.dispose();
275
+ }
276
+ },
277
+ clone: (forkedBranch) => {
278
+ if (forkedBranch === undefined) {
279
+ return this.createRevertible(revision, kind, checkout, onRevertibleDisposed);
280
+ }
281
+ // 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.
282
+ const forkedCheckout = (0, schematizingTreeView_js_1.getCheckout)(forkedBranch);
283
+ const revertibleBranch = this.revertibleCommitBranches.get(revision);
284
+ (0, internal_1.assert)(revertibleBranch !== undefined, 0xa82 /* change to revert does not exist on the given forked branch */);
285
+ forkedCheckout.revertibleCommitBranches.set(revision, revertibleBranch.fork());
286
+ return this.createRevertible(revision, kind, forkedCheckout, onRevertibleDisposed);
287
+ },
288
+ dispose: () => {
289
+ if (revertible.status === index_js_2.RevertibleStatus.Disposed) {
290
+ throw new internal_2.UsageError("Unable to dispose a revertible that has already been disposed.");
291
+ }
292
+ checkout.disposeRevertible(revertible, revision);
293
+ onRevertibleDisposed?.(revertible);
294
+ },
295
+ };
296
+ return revertible;
297
+ }
262
298
  viewWith(config) {
263
- const view = new schematizingTreeView_js_1.SchematizingSimpleTreeView(this, config, (0, index_js_4.createNodeKeyManager)(this.idCompressor), this.breaker, () => {
299
+ const view = new schematizingTreeView_js_1.SchematizingSimpleTreeView(this, config, (0, index_js_3.createNodeKeyManager)(this.idCompressor), this.breaker, () => {
264
300
  this.views.delete(view);
265
301
  });
266
302
  this.views.add(view);
@@ -271,27 +307,31 @@ class TreeCheckout {
271
307
  }
272
308
  get editor() {
273
309
  this.checkNotDisposed();
274
- return this._branch.editor;
310
+ return __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEditor;
275
311
  }
276
312
  locate(anchor) {
277
313
  this.checkNotDisposed();
278
314
  return this.forest.anchors.locate(anchor);
279
315
  }
316
+ get transaction() {
317
+ return __classPrivateFieldGet(this, _TreeCheckout_transaction, "f");
318
+ }
280
319
  branch() {
281
320
  this.checkNotDisposed("The parent branch has already been disposed and can no longer create new branches.");
282
321
  const anchors = new index_js_2.AnchorSet();
283
- const branch = this._branch.fork();
322
+ const branch = __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.fork();
284
323
  const storedSchema = this.storedSchema.clone();
285
324
  const forest = this.forest.clone(storedSchema, anchors);
286
- const transaction = new Transaction(branch);
287
- return new TreeCheckout(transaction, branch, true, this.changeFamily, storedSchema, forest, (0, index_js_3.createEmitter)(), this.mintRevisionTag, this.revisionTagCodec, this.idCompressor, this.removedRoots.clone(), this.logger, this.breaker);
325
+ const checkout = new TreeCheckout(branch, true, this.changeFamily, storedSchema, forest, this.mintRevisionTag, this.revisionTagCodec, this.idCompressor, this.removedRoots.clone(), this.logger, this.breaker);
326
+ __classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("fork", checkout);
327
+ return checkout;
288
328
  }
289
329
  rebase(checkout) {
290
330
  this.checkNotDisposed("The target of the branch rebase has been disposed and cannot be rebased.");
291
331
  checkout.checkNotDisposed("The source of the branch rebase has been disposed and cannot be rebased.");
292
- (0, internal_1.assert)(!checkout.transaction.inProgress(), 0x9af /* A view cannot be rebased while it has a pending transaction */);
332
+ (0, internal_1.assert)(!checkout.transaction.isInProgress(), 0x9af /* A view cannot be rebased while it has a pending transaction */);
293
333
  (0, internal_1.assert)(checkout.isBranch, 0xa5d /* The main branch cannot be rebased onto another branch. */);
294
- checkout._branch.rebaseOnto(this._branch);
334
+ __classPrivateFieldGet(checkout, _TreeCheckout_transaction, "f").activeBranch.rebaseOnto(__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch);
295
335
  }
296
336
  rebaseOnto(checkout) {
297
337
  this.checkNotDisposed("The target of the branch rebase has been disposed and cannot be rebased.");
@@ -300,14 +340,14 @@ class TreeCheckout {
300
340
  merge(checkout, disposeMerged = true) {
301
341
  this.checkNotDisposed("The target of the branch merge has been disposed and cannot be merged.");
302
342
  checkout.checkNotDisposed("The source of the branch merge has been disposed and cannot be merged.");
303
- (0, internal_1.assert)(!this.transaction.inProgress(), 0x9b0 /* Views cannot be merged into a view while it has a pending transaction */);
304
- while (checkout.transaction.inProgress()) {
343
+ (0, internal_1.assert)(!this.transaction.isInProgress(), 0x9b0 /* Views cannot be merged into a view while it has a pending transaction */);
344
+ while (checkout.transaction.isInProgress()) {
305
345
  checkout.transaction.commit();
306
346
  }
307
- this._branch.merge(checkout._branch);
347
+ __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.merge(__classPrivateFieldGet(checkout, _TreeCheckout_transaction, "f").activeBranch);
308
348
  if (disposeMerged && checkout.isBranch) {
309
349
  // Dispose the merged checkout unless it is the main branch.
310
- checkout[index_js_6.disposeSymbol]();
350
+ checkout[index_js_5.disposeSymbol]();
311
351
  }
312
352
  }
313
353
  updateSchema(newSchema) {
@@ -315,16 +355,18 @@ class TreeCheckout {
315
355
  this.editor.schema.setStoredSchema(this.storedSchema.clone(), newSchema);
316
356
  }
317
357
  dispose() {
318
- this[index_js_6.disposeSymbol]();
358
+ this[index_js_5.disposeSymbol]();
319
359
  }
320
- [index_js_6.disposeSymbol]() {
360
+ [(_TreeCheckout_events = new WeakMap(), _TreeCheckout_transaction = new WeakMap(), _TreeCheckout_validatedCommits = new WeakMap(), index_js_5.disposeSymbol)]() {
321
361
  this.checkNotDisposed("The branch has already been disposed and cannot be disposed again.");
322
362
  this.disposed = true;
363
+ __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.dispose();
364
+ __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").dispose();
323
365
  this.purgeRevertibles();
324
- this._branch.dispose();
325
366
  for (const view of this.views) {
326
367
  view.dispose();
327
368
  }
369
+ __classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("dispose");
328
370
  }
329
371
  getRemovedRoots() {
330
372
  this.assertNoUntrackedRoots();
@@ -333,7 +375,7 @@ class TreeCheckout {
333
375
  for (const { id, root } of this.removedRoots.entries()) {
334
376
  const parentField = this.removedRoots.toFieldKey(root);
335
377
  this.forest.moveCursorToPath({ parent: undefined, parentField, parentIndex: 0 }, cursor);
336
- const tree = (0, index_js_4.jsonableTreeFromCursor)(cursor);
378
+ const tree = (0, index_js_3.jsonableTreeFromCursor)(cursor);
337
379
  // This method is used for tree consistency comparison.
338
380
  const { major, minor } = id;
339
381
  const finalizedMajor = major !== undefined ? this.revisionTagCodec.encode(major) : major;
@@ -343,11 +385,16 @@ class TreeCheckout {
343
385
  return trees;
344
386
  }
345
387
  /**
346
- * This sets the tip revision as the latest relevant revision for any removed roots that are loaded from a summary.
347
- * This needs to be called right after loading {@link this.removedRoots} from a summary to allow loaded data to be garbage collected.
388
+ * This must be called on the root/main checkout after loading from a summary.
389
+ * @remarks This pattern is necessary because the EditManager skips the normal process of applying commits to branches when loading a summary.
390
+ * Instead, it simply {@link SharedTreeBranch#setHead | mutates} the branches directly which does not propagate the typical events throughout the rest of the system.
348
391
  */
349
- setTipRevisionForLoadedData(revision) {
350
- this.removedRoots.setRevisionsForLoadedData(revision);
392
+ load() {
393
+ // 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.
394
+ // 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).
395
+ this.removedRoots.setRevisionsForLoadedData(__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.getHead().revision);
396
+ // The content of the checkout (e.g. the forest) has (maybe) changed, so fire an afterBatch event.
397
+ __classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("afterBatch");
351
398
  }
352
399
  purgeRevertibles() {
353
400
  for (const revertible of this.revertibles) {
@@ -360,7 +407,7 @@ class TreeCheckout {
360
407
  this.revertibles.delete(revertible);
361
408
  }
362
409
  revertRevertible(revision, kind) {
363
- if (this._branch.isTransacting()) {
410
+ if (this.transaction.isInProgress()) {
364
411
  throw new internal_2.UsageError("Undo is not yet supported during transactions.");
365
412
  }
366
413
  const revertibleBranch = this.revertibleCommitBranches.get(revision);
@@ -368,12 +415,12 @@ class TreeCheckout {
368
415
  const commitToRevert = revertibleBranch.getHead();
369
416
  const revisionForInvert = this.mintRevisionTag();
370
417
  let change = (0, index_js_2.tagChange)(this.changeFamily.rebaser.invert(commitToRevert, false, revisionForInvert), revisionForInvert);
371
- const headCommit = this._branch.getHead();
418
+ const headCommit = __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.getHead();
372
419
  // Rebase the inverted change onto any commits that occurred after the undoable commits.
373
420
  if (commitToRevert !== headCommit) {
374
421
  change = (0, index_js_2.tagChange)((0, index_js_2.rebaseChange)(this.changeFamily.rebaser, change, commitToRevert, headCommit, this.mintRevisionTag).change, revisionForInvert);
375
422
  }
376
- this._branch.apply(change, kind === index_js_2.CommitKind.Default || kind === index_js_2.CommitKind.Redo
423
+ __classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranch.apply(change, kind === index_js_2.CommitKind.Default || kind === index_js_2.CommitKind.Redo
377
424
  ? index_js_2.CommitKind.Undo
378
425
  : index_js_2.CommitKind.Redo);
379
426
  // Derive some stats about the reversion to return to the caller.
@@ -407,13 +454,37 @@ class TreeCheckout {
407
454
  */
408
455
  isRemoteChangeEvent(event) {
409
456
  return (
410
- // remote changes are only ever applied to the main branch
457
+ // Remote changes are only ever applied to the main branch
411
458
  !this.isBranch &&
412
- // remote changes are applied to the main branch by rebasing it onto the trunk,
413
- // no other rebases are allowed on the main branch so this means any replaces that are not
414
- // transaction commits are remote changes
415
- event.type === "replace" &&
416
- (0, index_js_5.getChangeReplaceType)(event) !== "transactionCommit");
459
+ // Remote changes are applied to the main branch by rebasing it onto the trunk.
460
+ // No other rebases are allowed on the main branch, so we can use this to detect remote changes.
461
+ event.type === "rebase");
462
+ }
463
+ /**
464
+ * Registers a function to be called when the given commit is validated.
465
+ * @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).
466
+ * 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.
467
+ * 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).
468
+ *
469
+ * If the commit has already been validated when this function is called, the function is called immediately and this function returns `true`.
470
+ * Otherwise, the function is registered to be called later and this function returns `false`.
471
+ */
472
+ onCommitValid(commit, fn) {
473
+ const validated = (0, index_js_5.getOrCreate)(__classPrivateFieldGet(this, _TreeCheckout_validatedCommits, "f"), commit, () => []);
474
+ if (validated === true) {
475
+ fn(commit);
476
+ return true;
477
+ }
478
+ validated.push(fn);
479
+ return false;
480
+ }
481
+ /** Mark the given commit as "validated" according to the contract of {@link onCommitValid}(). */
482
+ validateCommit(commit) {
483
+ const validated = (0, index_js_5.getOrCreate)(__classPrivateFieldGet(this, _TreeCheckout_validatedCommits, "f"), commit, () => []);
484
+ if (validated !== true) {
485
+ validated.forEach((fn) => fn(commit));
486
+ __classPrivateFieldGet(this, _TreeCheckout_validatedCommits, "f").set(commit, true);
487
+ }
417
488
  }
418
489
  }
419
490
  exports.TreeCheckout = TreeCheckout;
@@ -422,20 +493,4 @@ exports.TreeCheckout = TreeCheckout;
422
493
  * @privateRemarks Exposed for testing purposes.
423
494
  */
424
495
  TreeCheckout.revertTelemetryEventName = "RevertRevertible";
425
- /**
426
- * Run a synchronous transaction on the given shared tree view.
427
- * This is a convenience helper around the {@link SharedTreeFork#transaction} APIs.
428
- * @param view - the view on which to run the transaction
429
- * @param transaction - the transaction function. This will be executed immediately. It is passed `view` as an argument for convenience.
430
- * If this function returns an `Abort` result then the transaction will be aborted. Otherwise, it will be committed.
431
- * @returns whether or not the transaction was committed or aborted
432
- */
433
- function runSynchronous(view, transaction) {
434
- view.transaction.start();
435
- const result = transaction(view);
436
- return result === index_js_6.TransactionResult.Abort
437
- ? view.transaction.abort()
438
- : view.transaction.commit();
439
- }
440
- exports.runSynchronous = runSynchronous;
441
496
  //# sourceMappingURL=treeCheckout.js.map