@fluidframework/tree 2.4.0-297027 → 2.4.0-299374

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 (559) hide show
  1. package/.dependency-cruiser-known-violations.json +0 -14
  2. package/.vscode/settings.json +9 -1
  3. package/api-report/tree.alpha.api.md +178 -21
  4. package/api-report/tree.beta.api.md +46 -21
  5. package/api-report/tree.legacy.alpha.api.md +46 -21
  6. package/api-report/tree.legacy.public.api.md +46 -21
  7. package/api-report/tree.public.api.md +46 -21
  8. package/dist/alpha.d.ts +29 -1
  9. package/dist/beta.d.ts +2 -0
  10. package/dist/codec/codec.d.ts +4 -4
  11. package/dist/codec/codec.js.map +1 -1
  12. package/dist/codec/noopValidator.d.ts +1 -1
  13. package/dist/codec/noopValidator.js +1 -1
  14. package/dist/codec/noopValidator.js.map +1 -1
  15. package/dist/core/change-family/changeFamily.d.ts +2 -2
  16. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  17. package/dist/core/change-family/changeFamily.js.map +1 -1
  18. package/dist/core/change-family/editBuilder.d.ts +3 -2
  19. package/dist/core/change-family/editBuilder.d.ts.map +1 -1
  20. package/dist/core/change-family/editBuilder.js.map +1 -1
  21. package/dist/core/rebase/changeRebaser.d.ts +2 -1
  22. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  23. package/dist/core/rebase/changeRebaser.js.map +1 -1
  24. package/dist/core/rebase/utils.js +1 -1
  25. package/dist/core/rebase/utils.js.map +1 -1
  26. package/dist/core/tree/anchorSet.d.ts +159 -2
  27. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  28. package/dist/core/tree/anchorSet.js +54 -12
  29. package/dist/core/tree/anchorSet.js.map +1 -1
  30. package/dist/external-utilities/typeboxValidator.d.ts +1 -1
  31. package/dist/external-utilities/typeboxValidator.js +1 -1
  32. package/dist/external-utilities/typeboxValidator.js.map +1 -1
  33. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +4 -3
  34. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  35. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +41 -30
  36. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  37. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +4 -6
  38. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  39. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  40. package/dist/feature-libraries/flex-tree/lazyField.d.ts +4 -0
  41. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  42. package/dist/feature-libraries/flex-tree/lazyField.js +38 -6
  43. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  44. package/dist/feature-libraries/index.d.ts +0 -1
  45. package/dist/feature-libraries/index.d.ts.map +1 -1
  46. package/dist/feature-libraries/index.js +46 -49
  47. package/dist/feature-libraries/index.js.map +1 -1
  48. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  49. package/dist/feature-libraries/mitigatedChangeFamily.js +4 -4
  50. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  51. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +1 -1
  52. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  53. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  54. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +12 -8
  55. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  56. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +179 -60
  57. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  58. package/dist/feature-libraries/optional-field/optionalField.d.ts +10 -9
  59. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  60. package/dist/feature-libraries/optional-field/optionalField.js +9 -7
  61. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  62. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts +3 -10
  63. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  64. package/dist/feature-libraries/schema-index/schemaSummarizer.js +1 -8
  65. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  66. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  67. package/dist/feature-libraries/sequence-field/compose.js +32 -20
  68. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  69. package/dist/feature-libraries/sequence-field/invert.d.ts +6 -1
  70. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  71. package/dist/feature-libraries/sequence-field/invert.js +25 -9
  72. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  73. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +17 -16
  74. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  75. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +19 -11
  76. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  77. package/dist/feature-libraries/treeCompressionUtils.d.ts +1 -1
  78. package/dist/feature-libraries/treeCompressionUtils.js +1 -1
  79. package/dist/feature-libraries/treeCompressionUtils.js.map +1 -1
  80. package/dist/index.d.ts +6 -5
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +4 -2
  83. package/dist/index.js.map +1 -1
  84. package/dist/internalTypes.d.ts +2 -2
  85. package/dist/internalTypes.d.ts.map +1 -1
  86. package/dist/internalTypes.js.map +1 -1
  87. package/dist/legacy.d.ts +2 -0
  88. package/dist/packageVersion.d.ts +1 -1
  89. package/dist/packageVersion.js +1 -1
  90. package/dist/packageVersion.js.map +1 -1
  91. package/dist/public.d.ts +2 -0
  92. package/dist/shared-tree/index.d.ts +2 -1
  93. package/dist/shared-tree/index.d.ts.map +1 -1
  94. package/dist/shared-tree/index.js +5 -1
  95. package/dist/shared-tree/index.js.map +1 -1
  96. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  97. package/dist/shared-tree/schematizingTreeView.js +1 -14
  98. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  99. package/dist/shared-tree/sharedTree.d.ts +24 -9
  100. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  101. package/dist/shared-tree/sharedTree.js +21 -9
  102. package/dist/shared-tree/sharedTree.js.map +1 -1
  103. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  104. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  105. package/dist/shared-tree/sharedTreeChangeFamily.js +4 -4
  106. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  107. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +2 -2
  108. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  109. package/dist/shared-tree/sharedTreeEditBuilder.js +15 -11
  110. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  111. package/dist/shared-tree/treeApi.d.ts +6 -6
  112. package/dist/shared-tree/treeApi.d.ts.map +1 -1
  113. package/dist/shared-tree/treeApi.js.map +1 -1
  114. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  115. package/dist/shared-tree/treeCheckout.js +4 -3
  116. package/dist/shared-tree/treeCheckout.js.map +1 -1
  117. package/dist/shared-tree-core/branch.d.ts +2 -3
  118. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  119. package/dist/shared-tree-core/branch.js +10 -11
  120. package/dist/shared-tree-core/branch.js.map +1 -1
  121. package/dist/shared-tree-core/defaultResubmitMachine.d.ts +5 -5
  122. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  123. package/dist/shared-tree-core/defaultResubmitMachine.js +4 -4
  124. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  125. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  126. package/dist/shared-tree-core/editManager.js +1 -1
  127. package/dist/shared-tree-core/editManager.js.map +1 -1
  128. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  129. package/dist/shared-tree-core/sharedTreeCore.js +2 -2
  130. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  131. package/dist/simple-tree/api/conciseTree.d.ts +29 -0
  132. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -0
  133. package/dist/simple-tree/api/conciseTree.js +25 -0
  134. package/dist/simple-tree/api/conciseTree.js.map +1 -0
  135. package/dist/simple-tree/api/customTree.d.ts +44 -0
  136. package/dist/simple-tree/api/customTree.d.ts.map +1 -0
  137. package/dist/simple-tree/api/customTree.js +63 -0
  138. package/dist/simple-tree/api/customTree.js.map +1 -0
  139. package/dist/simple-tree/api/index.d.ts +7 -2
  140. package/dist/simple-tree/api/index.d.ts.map +1 -1
  141. package/dist/simple-tree/api/index.js +5 -1
  142. package/dist/simple-tree/api/index.js.map +1 -1
  143. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
  144. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  145. package/dist/simple-tree/api/schemaCreationUtilities.js +43 -15
  146. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  147. package/dist/simple-tree/api/schemaFactory.d.ts +1 -2
  148. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  149. package/dist/simple-tree/api/schemaFactory.js +8 -8
  150. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  151. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
  152. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  153. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  154. package/dist/simple-tree/api/storedSchema.d.ts +78 -0
  155. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -0
  156. package/dist/simple-tree/api/storedSchema.js +107 -0
  157. package/dist/simple-tree/api/storedSchema.js.map +1 -0
  158. package/dist/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  159. package/dist/simple-tree/api/tree.d.ts +12 -3
  160. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  161. package/dist/simple-tree/api/tree.js.map +1 -1
  162. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  163. package/dist/simple-tree/api/treeNodeApi.js +5 -5
  164. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  165. package/dist/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
  166. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -0
  167. package/dist/simple-tree/api/typesUnsafe.js.map +1 -0
  168. package/dist/simple-tree/api/verboseTree.d.ts +6 -20
  169. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  170. package/dist/simple-tree/api/verboseTree.js +10 -48
  171. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  172. package/dist/simple-tree/arrayNode.d.ts +14 -3
  173. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  174. package/dist/simple-tree/arrayNode.js +1 -2
  175. package/dist/simple-tree/arrayNode.js.map +1 -1
  176. package/dist/simple-tree/core/index.d.ts +1 -1
  177. package/dist/simple-tree/core/index.d.ts.map +1 -1
  178. package/dist/simple-tree/core/index.js +2 -1
  179. package/dist/simple-tree/core/index.js.map +1 -1
  180. package/dist/simple-tree/core/treeNodeKernel.d.ts +9 -0
  181. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  182. package/dist/simple-tree/core/treeNodeKernel.js +14 -1
  183. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  184. package/dist/simple-tree/core/treeNodeSchema.d.ts +6 -5
  185. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  186. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  187. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  188. package/dist/simple-tree/core/unhydratedFlexTree.js +3 -1
  189. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  190. package/dist/simple-tree/core/withType.d.ts +3 -1
  191. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  192. package/dist/simple-tree/core/withType.js.map +1 -1
  193. package/dist/simple-tree/flexList.d.ts.map +1 -0
  194. package/dist/simple-tree/flexList.js.map +1 -0
  195. package/dist/simple-tree/index.d.ts +6 -7
  196. package/dist/simple-tree/index.d.ts.map +1 -1
  197. package/dist/simple-tree/index.js +5 -3
  198. package/dist/simple-tree/index.js.map +1 -1
  199. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  200. package/dist/simple-tree/mapNode.js +2 -3
  201. package/dist/simple-tree/mapNode.js.map +1 -1
  202. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  203. package/dist/simple-tree/objectNode.js +3 -4
  204. package/dist/simple-tree/objectNode.js.map +1 -1
  205. package/dist/simple-tree/schemaTypes.d.ts +60 -7
  206. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  207. package/dist/simple-tree/schemaTypes.js +11 -6
  208. package/dist/simple-tree/schemaTypes.js.map +1 -1
  209. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  210. package/dist/simple-tree/toFlexSchema.js +13 -15
  211. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  212. package/dist/simple-tree/toMapTree.d.ts +4 -2
  213. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  214. package/dist/simple-tree/toMapTree.js +3 -3
  215. package/dist/simple-tree/toMapTree.js.map +1 -1
  216. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  217. package/dist/simple-tree/treeNodeValid.js +2 -1
  218. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  219. package/dist/treeFactory.d.ts +1 -0
  220. package/dist/treeFactory.d.ts.map +1 -1
  221. package/dist/treeFactory.js +1 -0
  222. package/dist/treeFactory.js.map +1 -1
  223. package/dist/util/utils.d.ts +10 -8
  224. package/dist/util/utils.d.ts.map +1 -1
  225. package/dist/util/utils.js.map +1 -1
  226. package/docs/main/detached-trees.md +8 -8
  227. package/lib/alpha.d.ts +29 -1
  228. package/lib/beta.d.ts +2 -0
  229. package/lib/codec/codec.d.ts +4 -4
  230. package/lib/codec/codec.js.map +1 -1
  231. package/lib/codec/noopValidator.d.ts +1 -1
  232. package/lib/codec/noopValidator.js +1 -1
  233. package/lib/codec/noopValidator.js.map +1 -1
  234. package/lib/core/change-family/changeFamily.d.ts +2 -2
  235. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  236. package/lib/core/change-family/changeFamily.js.map +1 -1
  237. package/lib/core/change-family/editBuilder.d.ts +3 -2
  238. package/lib/core/change-family/editBuilder.d.ts.map +1 -1
  239. package/lib/core/change-family/editBuilder.js.map +1 -1
  240. package/lib/core/rebase/changeRebaser.d.ts +2 -1
  241. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  242. package/lib/core/rebase/changeRebaser.js.map +1 -1
  243. package/lib/core/rebase/utils.js +1 -1
  244. package/lib/core/rebase/utils.js.map +1 -1
  245. package/lib/core/tree/anchorSet.d.ts +159 -2
  246. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  247. package/lib/core/tree/anchorSet.js +54 -12
  248. package/lib/core/tree/anchorSet.js.map +1 -1
  249. package/lib/external-utilities/typeboxValidator.d.ts +1 -1
  250. package/lib/external-utilities/typeboxValidator.js +1 -1
  251. package/lib/external-utilities/typeboxValidator.js.map +1 -1
  252. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +4 -3
  253. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  254. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +41 -30
  255. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  256. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +4 -6
  257. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  258. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  259. package/lib/feature-libraries/flex-tree/lazyField.d.ts +4 -0
  260. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  261. package/lib/feature-libraries/flex-tree/lazyField.js +36 -5
  262. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  263. package/lib/feature-libraries/index.d.ts +0 -1
  264. package/lib/feature-libraries/index.d.ts.map +1 -1
  265. package/lib/feature-libraries/index.js +0 -1
  266. package/lib/feature-libraries/index.js.map +1 -1
  267. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  268. package/lib/feature-libraries/mitigatedChangeFamily.js +4 -4
  269. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  270. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +1 -1
  271. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  272. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  273. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +12 -8
  274. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  275. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +180 -61
  276. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  277. package/lib/feature-libraries/optional-field/optionalField.d.ts +10 -9
  278. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  279. package/lib/feature-libraries/optional-field/optionalField.js +9 -7
  280. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  281. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts +3 -10
  282. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  283. package/lib/feature-libraries/schema-index/schemaSummarizer.js +1 -8
  284. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  285. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  286. package/lib/feature-libraries/sequence-field/compose.js +32 -20
  287. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  288. package/lib/feature-libraries/sequence-field/invert.d.ts +6 -1
  289. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  290. package/lib/feature-libraries/sequence-field/invert.js +25 -9
  291. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  292. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +17 -16
  293. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  294. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +19 -11
  295. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  296. package/lib/feature-libraries/treeCompressionUtils.d.ts +1 -1
  297. package/lib/feature-libraries/treeCompressionUtils.js +1 -1
  298. package/lib/feature-libraries/treeCompressionUtils.js.map +1 -1
  299. package/lib/index.d.ts +6 -5
  300. package/lib/index.d.ts.map +1 -1
  301. package/lib/index.js +3 -3
  302. package/lib/index.js.map +1 -1
  303. package/lib/internalTypes.d.ts +2 -2
  304. package/lib/internalTypes.d.ts.map +1 -1
  305. package/lib/internalTypes.js.map +1 -1
  306. package/lib/legacy.d.ts +2 -0
  307. package/lib/packageVersion.d.ts +1 -1
  308. package/lib/packageVersion.js +1 -1
  309. package/lib/packageVersion.js.map +1 -1
  310. package/lib/public.d.ts +2 -0
  311. package/lib/shared-tree/index.d.ts +2 -1
  312. package/lib/shared-tree/index.d.ts.map +1 -1
  313. package/lib/shared-tree/index.js +2 -1
  314. package/lib/shared-tree/index.js.map +1 -1
  315. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  316. package/lib/shared-tree/schematizingTreeView.js +2 -15
  317. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  318. package/lib/shared-tree/sharedTree.d.ts +24 -9
  319. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  320. package/lib/shared-tree/sharedTree.js +20 -9
  321. package/lib/shared-tree/sharedTree.js.map +1 -1
  322. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +2 -2
  323. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  324. package/lib/shared-tree/sharedTreeChangeFamily.js +4 -4
  325. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  326. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +2 -2
  327. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  328. package/lib/shared-tree/sharedTreeEditBuilder.js +15 -11
  329. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  330. package/lib/shared-tree/treeApi.d.ts +6 -6
  331. package/lib/shared-tree/treeApi.d.ts.map +1 -1
  332. package/lib/shared-tree/treeApi.js.map +1 -1
  333. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  334. package/lib/shared-tree/treeCheckout.js +5 -4
  335. package/lib/shared-tree/treeCheckout.js.map +1 -1
  336. package/lib/shared-tree-core/branch.d.ts +2 -3
  337. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  338. package/lib/shared-tree-core/branch.js +11 -12
  339. package/lib/shared-tree-core/branch.js.map +1 -1
  340. package/lib/shared-tree-core/defaultResubmitMachine.d.ts +5 -5
  341. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  342. package/lib/shared-tree-core/defaultResubmitMachine.js +4 -4
  343. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  344. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  345. package/lib/shared-tree-core/editManager.js +2 -2
  346. package/lib/shared-tree-core/editManager.js.map +1 -1
  347. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  348. package/lib/shared-tree-core/sharedTreeCore.js +2 -2
  349. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  350. package/lib/simple-tree/api/conciseTree.d.ts +29 -0
  351. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -0
  352. package/lib/simple-tree/api/conciseTree.js +21 -0
  353. package/lib/simple-tree/api/conciseTree.js.map +1 -0
  354. package/lib/simple-tree/api/customTree.d.ts +44 -0
  355. package/lib/simple-tree/api/customTree.d.ts.map +1 -0
  356. package/lib/simple-tree/api/customTree.js +59 -0
  357. package/lib/simple-tree/api/customTree.js.map +1 -0
  358. package/lib/simple-tree/api/index.d.ts +7 -2
  359. package/lib/simple-tree/api/index.d.ts.map +1 -1
  360. package/lib/simple-tree/api/index.js +1 -0
  361. package/lib/simple-tree/api/index.js.map +1 -1
  362. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +41 -26
  363. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  364. package/lib/simple-tree/api/schemaCreationUtilities.js +43 -15
  365. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  366. package/lib/simple-tree/api/schemaFactory.d.ts +1 -2
  367. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  368. package/lib/simple-tree/api/schemaFactory.js +1 -1
  369. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  370. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -2
  371. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  372. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  373. package/lib/simple-tree/api/storedSchema.d.ts +78 -0
  374. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -0
  375. package/lib/simple-tree/api/storedSchema.js +101 -0
  376. package/lib/simple-tree/api/storedSchema.js.map +1 -0
  377. package/lib/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  378. package/lib/simple-tree/api/tree.d.ts +12 -3
  379. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  380. package/lib/simple-tree/api/tree.js.map +1 -1
  381. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  382. package/lib/simple-tree/api/treeNodeApi.js +3 -3
  383. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  384. package/lib/simple-tree/{typesUnsafe.d.ts → api/typesUnsafe.d.ts} +58 -10
  385. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -0
  386. package/lib/simple-tree/api/typesUnsafe.js.map +1 -0
  387. package/lib/simple-tree/api/verboseTree.d.ts +6 -20
  388. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  389. package/lib/simple-tree/api/verboseTree.js +11 -49
  390. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  391. package/lib/simple-tree/arrayNode.d.ts +14 -3
  392. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  393. package/lib/simple-tree/arrayNode.js +1 -2
  394. package/lib/simple-tree/arrayNode.js.map +1 -1
  395. package/lib/simple-tree/core/index.d.ts +1 -1
  396. package/lib/simple-tree/core/index.d.ts.map +1 -1
  397. package/lib/simple-tree/core/index.js +1 -1
  398. package/lib/simple-tree/core/index.js.map +1 -1
  399. package/lib/simple-tree/core/treeNodeKernel.d.ts +9 -0
  400. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  401. package/lib/simple-tree/core/treeNodeKernel.js +12 -0
  402. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  403. package/lib/simple-tree/core/treeNodeSchema.d.ts +6 -5
  404. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  405. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  406. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  407. package/lib/simple-tree/core/unhydratedFlexTree.js +3 -1
  408. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  409. package/lib/simple-tree/core/withType.d.ts +3 -1
  410. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  411. package/lib/simple-tree/core/withType.js.map +1 -1
  412. package/lib/simple-tree/flexList.d.ts.map +1 -0
  413. package/lib/simple-tree/flexList.js.map +1 -0
  414. package/lib/simple-tree/index.d.ts +6 -7
  415. package/lib/simple-tree/index.d.ts.map +1 -1
  416. package/lib/simple-tree/index.js +3 -4
  417. package/lib/simple-tree/index.js.map +1 -1
  418. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  419. package/lib/simple-tree/mapNode.js +1 -2
  420. package/lib/simple-tree/mapNode.js.map +1 -1
  421. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  422. package/lib/simple-tree/objectNode.js +1 -2
  423. package/lib/simple-tree/objectNode.js.map +1 -1
  424. package/lib/simple-tree/schemaTypes.d.ts +60 -7
  425. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  426. package/lib/simple-tree/schemaTypes.js +6 -1
  427. package/lib/simple-tree/schemaTypes.js.map +1 -1
  428. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  429. package/lib/simple-tree/toFlexSchema.js +1 -3
  430. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  431. package/lib/simple-tree/toMapTree.d.ts +4 -2
  432. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  433. package/lib/simple-tree/toMapTree.js +3 -3
  434. package/lib/simple-tree/toMapTree.js.map +1 -1
  435. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  436. package/lib/simple-tree/treeNodeValid.js +2 -1
  437. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  438. package/lib/treeFactory.d.ts +1 -0
  439. package/lib/treeFactory.d.ts.map +1 -1
  440. package/lib/treeFactory.js +1 -0
  441. package/lib/treeFactory.js.map +1 -1
  442. package/lib/util/utils.d.ts +10 -8
  443. package/lib/util/utils.d.ts.map +1 -1
  444. package/lib/util/utils.js.map +1 -1
  445. package/package.json +44 -27
  446. package/src/codec/codec.ts +4 -4
  447. package/src/codec/noopValidator.ts +1 -1
  448. package/src/core/change-family/changeFamily.ts +5 -2
  449. package/src/core/change-family/editBuilder.ts +3 -2
  450. package/src/core/rebase/changeRebaser.ts +6 -1
  451. package/src/core/rebase/utils.ts +1 -1
  452. package/src/core/tree/anchorSet.ts +63 -13
  453. package/src/external-utilities/typeboxValidator.ts +1 -1
  454. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +92 -47
  455. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +7 -7
  456. package/src/feature-libraries/flex-tree/lazyField.ts +44 -7
  457. package/src/feature-libraries/index.ts +0 -10
  458. package/src/feature-libraries/mitigatedChangeFamily.ts +11 -4
  459. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +1 -0
  460. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +218 -175
  461. package/src/feature-libraries/optional-field/optionalField.ts +21 -17
  462. package/src/feature-libraries/schema-index/schemaSummarizer.ts +2 -10
  463. package/src/feature-libraries/sequence-field/compose.ts +67 -58
  464. package/src/feature-libraries/sequence-field/invert.ts +30 -6
  465. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +65 -19
  466. package/src/feature-libraries/treeCompressionUtils.ts +1 -1
  467. package/src/index.ts +26 -6
  468. package/src/internalTypes.ts +4 -1
  469. package/src/packageVersion.ts +1 -1
  470. package/src/shared-tree/index.ts +5 -0
  471. package/src/shared-tree/schematizingTreeView.ts +7 -16
  472. package/src/shared-tree/sharedTree.ts +55 -23
  473. package/src/shared-tree/sharedTreeChangeFamily.ts +5 -1
  474. package/src/shared-tree/sharedTreeEditBuilder.ts +23 -12
  475. package/src/shared-tree/treeApi.ts +19 -9
  476. package/src/shared-tree/treeCheckout.ts +7 -6
  477. package/src/shared-tree-core/branch.ts +11 -14
  478. package/src/shared-tree-core/defaultResubmitMachine.ts +4 -4
  479. package/src/shared-tree-core/editManager.ts +2 -1
  480. package/src/shared-tree-core/sharedTreeCore.ts +4 -2
  481. package/src/simple-tree/api/conciseTree.ts +58 -0
  482. package/src/simple-tree/api/customTree.ts +119 -0
  483. package/src/simple-tree/api/index.ts +39 -1
  484. package/src/simple-tree/api/schemaCreationUtilities.ts +55 -36
  485. package/src/simple-tree/api/schemaFactory.ts +4 -6
  486. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -2
  487. package/src/simple-tree/api/storedSchema.ts +126 -0
  488. package/src/simple-tree/api/tree.ts +24 -2
  489. package/src/simple-tree/api/treeNodeApi.ts +3 -8
  490. package/src/simple-tree/{typesUnsafe.ts → api/typesUnsafe.ts} +95 -21
  491. package/src/simple-tree/api/verboseTree.ts +21 -76
  492. package/src/simple-tree/arrayNode.ts +35 -15
  493. package/src/simple-tree/core/index.ts +1 -0
  494. package/src/simple-tree/core/treeNodeKernel.ts +13 -0
  495. package/src/simple-tree/core/treeNodeSchema.ts +7 -5
  496. package/src/simple-tree/core/unhydratedFlexTree.ts +6 -1
  497. package/src/simple-tree/core/withType.ts +10 -1
  498. package/src/simple-tree/index.ts +41 -21
  499. package/src/simple-tree/mapNode.ts +1 -1
  500. package/src/simple-tree/objectNode.ts +1 -1
  501. package/src/simple-tree/schemaTypes.ts +70 -11
  502. package/src/simple-tree/toFlexSchema.ts +1 -3
  503. package/src/simple-tree/toMapTree.ts +7 -4
  504. package/src/simple-tree/treeNodeValid.ts +2 -1
  505. package/src/treeFactory.ts +1 -0
  506. package/src/util/utils.ts +10 -8
  507. package/dist/feature-libraries/flex-tree/unboxed.d.ts +0 -12
  508. package/dist/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
  509. package/dist/feature-libraries/flex-tree/unboxed.js +0 -20
  510. package/dist/feature-libraries/flex-tree/unboxed.js.map +0 -1
  511. package/dist/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
  512. package/dist/feature-libraries/typed-schema/flexList.js.map +0 -1
  513. package/dist/feature-libraries/typed-schema/index.d.ts +0 -7
  514. package/dist/feature-libraries/typed-schema/index.d.ts.map +0 -1
  515. package/dist/feature-libraries/typed-schema/index.js +0 -12
  516. package/dist/feature-libraries/typed-schema/index.js.map +0 -1
  517. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
  518. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
  519. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -7
  520. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
  521. package/dist/simple-tree/proxyBinding.d.ts +0 -15
  522. package/dist/simple-tree/proxyBinding.d.ts.map +0 -1
  523. package/dist/simple-tree/proxyBinding.js +0 -22
  524. package/dist/simple-tree/proxyBinding.js.map +0 -1
  525. package/dist/simple-tree/typesUnsafe.d.ts.map +0 -1
  526. package/dist/simple-tree/typesUnsafe.js.map +0 -1
  527. package/lib/feature-libraries/flex-tree/unboxed.d.ts +0 -12
  528. package/lib/feature-libraries/flex-tree/unboxed.d.ts.map +0 -1
  529. package/lib/feature-libraries/flex-tree/unboxed.js +0 -16
  530. package/lib/feature-libraries/flex-tree/unboxed.js.map +0 -1
  531. package/lib/feature-libraries/typed-schema/flexList.d.ts.map +0 -1
  532. package/lib/feature-libraries/typed-schema/flexList.js.map +0 -1
  533. package/lib/feature-libraries/typed-schema/index.d.ts +0 -7
  534. package/lib/feature-libraries/typed-schema/index.d.ts.map +0 -1
  535. package/lib/feature-libraries/typed-schema/index.js +0 -6
  536. package/lib/feature-libraries/typed-schema/index.js.map +0 -1
  537. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -14
  538. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +0 -1
  539. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +0 -6
  540. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +0 -1
  541. package/lib/simple-tree/proxyBinding.d.ts +0 -15
  542. package/lib/simple-tree/proxyBinding.d.ts.map +0 -1
  543. package/lib/simple-tree/proxyBinding.js +0 -18
  544. package/lib/simple-tree/proxyBinding.js.map +0 -1
  545. package/lib/simple-tree/typesUnsafe.d.ts.map +0 -1
  546. package/lib/simple-tree/typesUnsafe.js.map +0 -1
  547. package/src/feature-libraries/flex-tree/unboxed.ts +0 -24
  548. package/src/feature-libraries/typed-schema/README.md +0 -6
  549. package/src/feature-libraries/typed-schema/index.ts +0 -16
  550. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -14
  551. package/src/simple-tree/proxyBinding.ts +0 -20
  552. /package/dist/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
  553. /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
  554. /package/dist/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
  555. /package/lib/simple-tree/{typesUnsafe.js → api/typesUnsafe.js} +0 -0
  556. /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.d.ts +0 -0
  557. /package/lib/{feature-libraries/typed-schema → simple-tree}/flexList.js +0 -0
  558. /package/src/simple-tree/{ProxyBinding.md → core/TreeNodeBinding.md} +0 -0
  559. /package/src/{feature-libraries/typed-schema → simple-tree}/flexList.ts +0 -0
@@ -85,7 +85,18 @@ class ModularChangeFamily {
85
85
  composePair(change1, change2, revInfos, idState) {
86
86
  const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys } = this.composeAllFields(change1, change2, revInfos, idState);
87
87
  const { allBuilds, allDestroys, allRefreshers } = composeBuildsDestroysAndRefreshers(change1, change2);
88
- return makeModularChangeset(fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys, idState.maxId, revInfos, undefined, allBuilds, allDestroys, allRefreshers);
88
+ return makeModularChangeset({
89
+ fieldChanges,
90
+ nodeChanges,
91
+ nodeToParent,
92
+ nodeAliases,
93
+ crossFieldKeys,
94
+ maxId: idState.maxId,
95
+ revisions: revInfos,
96
+ builds: allBuilds,
97
+ destroys: allDestroys,
98
+ refreshers: allRefreshers,
99
+ });
89
100
  }
90
101
  composeAllFields(change1, change2, revInfos, idState) {
91
102
  if (hasConflicts(change1) && hasConflicts(change2)) {
@@ -306,15 +317,23 @@ class ModularChangeFamily {
306
317
  /**
307
318
  * @param change - The change to invert.
308
319
  * @param isRollback - Whether the inverted change is meant to rollback a change on a branch as is the case when
320
+ * @param revisionForInvert - The revision for the invert changeset.
309
321
  * performing a sandwich rebase.
310
322
  */
311
- invert(change, isRollback) {
323
+ invert(change, isRollback, revisionForInvert) {
312
324
  // Rollback changesets destroy the nodes created by the change being rolled back.
313
325
  const destroys = isRollback ? invertBuilds(change.change.builds) : undefined;
314
326
  // Destroys only occur in rollback changesets, which are never inverted.
315
327
  (0, internal_1.assert)(change.change.destroys === undefined, 0x89a /* Unexpected destroys in change to invert */);
328
+ const revInfos = isRollback
329
+ ? [{ revision: revisionForInvert, rollbackOf: change.revision }]
330
+ : [{ revision: revisionForInvert }];
316
331
  if (hasConflicts(change.change)) {
317
- return makeModularChangeset(undefined, undefined, undefined, undefined, undefined, change.change.maxId, [], undefined, undefined, destroys);
332
+ return makeModularChangeset({
333
+ maxId: change.change.maxId,
334
+ revisions: revInfos,
335
+ destroys,
336
+ });
318
337
  }
319
338
  const genId = (0, index_js_2.idAllocatorFromMaxId)(change.change.maxId ?? -1);
320
339
  const crossFieldTable = {
@@ -322,12 +341,12 @@ class ModularChangeFamily {
322
341
  originalFieldToContext: new Map(),
323
342
  invertedNodeToParent: (0, index_js_2.brand)(change.change.nodeToParent.clone()),
324
343
  };
325
- const { revInfos } = getRevInfoFromTaggedChanges([change]);
326
- const revisionMetadata = (0, index_js_1.revisionMetadataSourceFromInfo)(revInfos);
327
- const invertedFields = this.invertFieldMap(change.change.fieldChanges, undefined, isRollback, genId, crossFieldTable, revisionMetadata);
344
+ const { revInfos: oldRevInfos } = getRevInfoFromTaggedChanges([change]);
345
+ const revisionMetadata = (0, index_js_1.revisionMetadataSourceFromInfo)(oldRevInfos);
346
+ const invertedFields = this.invertFieldMap(change.change.fieldChanges, undefined, isRollback, genId, crossFieldTable, revisionMetadata, revisionForInvert);
328
347
  const invertedNodes = newTupleBTree();
329
348
  change.change.nodeChanges.forEachPair(([revision, localId], nodeChangeset) => {
330
- invertedNodes.set([revision, localId], this.invertNodeChange(nodeChangeset, { revision, localId }, isRollback, genId, crossFieldTable, revisionMetadata));
349
+ invertedNodes.set([revision, localId], this.invertNodeChange(nodeChangeset, { revision, localId }, isRollback, genId, crossFieldTable, revisionMetadata, revisionForInvert));
331
350
  });
332
351
  if (crossFieldTable.invalidatedFields.size > 0) {
333
352
  const fieldsToUpdate = crossFieldTable.invalidatedFields;
@@ -337,19 +356,29 @@ class ModularChangeFamily {
337
356
  const context = crossFieldTable.originalFieldToContext.get(fieldChange);
338
357
  (0, internal_1.assert)(context !== undefined, 0x851 /* Should have context for every invalidated field */);
339
358
  const { invertedField, fieldId } = context;
340
- const amendedChange = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).rebaser.invert(originalFieldChange, isRollback, genId, new InvertManager(crossFieldTable, fieldChange, fieldId), revisionMetadata);
359
+ const amendedChange = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).rebaser.invert(originalFieldChange, isRollback, genId, revisionForInvert, new InvertManager(crossFieldTable, fieldChange, fieldId), revisionMetadata);
341
360
  invertedField.change = (0, index_js_2.brand)(amendedChange);
342
361
  }
343
362
  }
344
363
  const crossFieldKeys = this.makeCrossFieldKeyTable(invertedFields, invertedNodes);
345
- return makeModularChangeset(invertedFields, invertedNodes, crossFieldTable.invertedNodeToParent, change.change.nodeAliases, crossFieldKeys, genId.getMaxId(), [], change.change.constraintViolationCount, undefined, destroys);
364
+ return makeModularChangeset({
365
+ fieldChanges: invertedFields,
366
+ nodeChanges: invertedNodes,
367
+ nodeToParent: crossFieldTable.invertedNodeToParent,
368
+ nodeAliases: change.change.nodeAliases,
369
+ crossFieldKeys,
370
+ maxId: genId.getMaxId(),
371
+ revisions: revInfos,
372
+ constraintViolationCount: change.change.constraintViolationCount,
373
+ destroys,
374
+ });
346
375
  }
347
- invertFieldMap(changes, parentId, isRollback, genId, crossFieldTable, revisionMetadata) {
376
+ invertFieldMap(changes, parentId, isRollback, genId, crossFieldTable, revisionMetadata, revisionForInvert) {
348
377
  const invertedFields = new Map();
349
378
  for (const [field, fieldChange] of changes) {
350
379
  const fieldId = { nodeId: parentId, field };
351
380
  const manager = new InvertManager(crossFieldTable, fieldChange, fieldId);
352
- const invertedChange = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).rebaser.invert(fieldChange.change, isRollback, genId, manager, revisionMetadata);
381
+ const invertedChange = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).rebaser.invert(fieldChange.change, isRollback, genId, revisionForInvert, manager, revisionMetadata);
353
382
  const invertedFieldChange = {
354
383
  ...fieldChange,
355
384
  change: (0, index_js_2.brand)(invertedChange),
@@ -362,10 +391,10 @@ class ModularChangeFamily {
362
391
  }
363
392
  return invertedFields;
364
393
  }
365
- invertNodeChange(change, id, isRollback, genId, crossFieldTable, revisionMetadata) {
394
+ invertNodeChange(change, id, isRollback, genId, crossFieldTable, revisionMetadata, revisionForInvert) {
366
395
  const inverse = {};
367
396
  if (change.fieldChanges !== undefined) {
368
- inverse.fieldChanges = this.invertFieldMap(change.fieldChanges, id, isRollback, genId, crossFieldTable, revisionMetadata);
397
+ inverse.fieldChanges = this.invertFieldMap(change.fieldChanges, id, isRollback, genId, crossFieldTable, revisionMetadata, revisionForInvert);
369
398
  }
370
399
  return inverse;
371
400
  }
@@ -401,7 +430,19 @@ class ModularChangeFamily {
401
430
  const rebasedFields = this.rebaseIntersectingFields(crossFieldTable, rebasedNodes, genId, constraintState, rebaseMetadata);
402
431
  this.rebaseInvalidatedElements(rebasedFields, rebasedNodes, crossFieldTable, rebaseMetadata, genId);
403
432
  this.updateConstraintsForFields(rebasedFields, fieldChangeHandler_js_1.NodeAttachState.Attached, constraintState, rebasedNodes);
404
- const rebased = makeModularChangeset(this.pruneFieldMap(rebasedFields, rebasedNodes), rebasedNodes, crossFieldTable.rebasedNodeToParent, change.nodeAliases, crossFieldTable.rebasedCrossFieldKeys, idState.maxId, change.revisions, constraintState.violationCount, change.builds, change.destroys, change.refreshers);
433
+ const rebased = makeModularChangeset({
434
+ fieldChanges: this.pruneFieldMap(rebasedFields, rebasedNodes),
435
+ nodeChanges: rebasedNodes,
436
+ nodeToParent: crossFieldTable.rebasedNodeToParent,
437
+ nodeAliases: change.nodeAliases,
438
+ crossFieldKeys: crossFieldTable.rebasedCrossFieldKeys,
439
+ maxId: idState.maxId,
440
+ revisions: change.revisions,
441
+ constraintViolationCount: constraintState.violationCount,
442
+ builds: change.builds,
443
+ destroys: change.destroys,
444
+ refreshers: change.refreshers,
445
+ });
405
446
  return rebased;
406
447
  }
407
448
  // This performs a first pass on all fields which have both new and base changes.
@@ -666,7 +707,7 @@ class ModularChangeFamily {
666
707
  }
667
708
  }
668
709
  changeRevision(change, newRevision, rollbackOf) {
669
- const oldRevisions = new Set(change.revisions === undefined
710
+ const oldRevisions = new Set(change.revisions === undefined || change.revisions.length === 0
670
711
  ? [undefined]
671
712
  : change.revisions.map((revInfo) => revInfo.revision));
672
713
  const updatedFields = this.replaceFieldMapRevisions(change.fieldChanges, oldRevisions, newRevision);
@@ -938,7 +979,19 @@ function updateRefreshers(change, getDetachedNode, removedRoots, requireRefreshe
938
979
  }
939
980
  }
940
981
  const { fieldChanges, nodeChanges, maxId, revisions, constraintViolationCount, builds, destroys, } = change;
941
- return makeModularChangeset(fieldChanges, nodeChanges, change.nodeToParent, change.nodeAliases, change.crossFieldKeys, maxId, revisions, constraintViolationCount, builds, destroys, refreshers);
982
+ return makeModularChangeset({
983
+ fieldChanges,
984
+ nodeChanges,
985
+ nodeToParent: change.nodeToParent,
986
+ nodeAliases: change.nodeAliases,
987
+ crossFieldKeys: change.crossFieldKeys,
988
+ maxId: maxId,
989
+ revisions,
990
+ constraintViolationCount,
991
+ builds,
992
+ destroys,
993
+ refreshers,
994
+ });
942
995
  }
943
996
  exports.updateRefreshers = updateRefreshers;
944
997
  /**
@@ -1222,31 +1275,33 @@ class ComposeManager extends CrossFieldManagerI {
1222
1275
  return this.crossFieldTable;
1223
1276
  }
1224
1277
  }
1225
- function makeModularChangeset(fieldChanges = undefined, nodeChanges = undefined, nodeToParent = undefined, nodeAliases = undefined, crossFieldKeys = undefined, maxId = -1, revisions = undefined, constraintViolationCount = undefined, builds, destroys, refreshers) {
1278
+ function makeModularChangeset(props = {
1279
+ maxId: -1,
1280
+ }) {
1226
1281
  const changeset = {
1227
- fieldChanges: fieldChanges ?? new Map(),
1228
- nodeChanges: nodeChanges ?? newTupleBTree(),
1229
- nodeToParent: nodeToParent ?? newTupleBTree(),
1230
- nodeAliases: nodeAliases ?? newTupleBTree(),
1231
- crossFieldKeys: crossFieldKeys ?? newCrossFieldKeyTable(),
1282
+ fieldChanges: props.fieldChanges ?? new Map(),
1283
+ nodeChanges: props.nodeChanges ?? newTupleBTree(),
1284
+ nodeToParent: props.nodeToParent ?? newTupleBTree(),
1285
+ nodeAliases: props.nodeAliases ?? newTupleBTree(),
1286
+ crossFieldKeys: props.crossFieldKeys ?? newCrossFieldKeyTable(),
1232
1287
  };
1233
- if (revisions !== undefined && revisions.length > 0) {
1234
- changeset.revisions = revisions;
1288
+ if (props.revisions !== undefined && props.revisions.length > 0) {
1289
+ changeset.revisions = props.revisions;
1235
1290
  }
1236
- if (maxId >= 0) {
1237
- changeset.maxId = (0, index_js_2.brand)(maxId);
1291
+ if (props.maxId >= 0) {
1292
+ changeset.maxId = (0, index_js_2.brand)(props.maxId);
1238
1293
  }
1239
- if (constraintViolationCount !== undefined && constraintViolationCount > 0) {
1240
- changeset.constraintViolationCount = constraintViolationCount;
1294
+ if (props.constraintViolationCount !== undefined && props.constraintViolationCount > 0) {
1295
+ changeset.constraintViolationCount = props.constraintViolationCount;
1241
1296
  }
1242
- if (builds !== undefined && builds.size > 0) {
1243
- changeset.builds = builds;
1297
+ if (props.builds !== undefined && props.builds.size > 0) {
1298
+ changeset.builds = props.builds;
1244
1299
  }
1245
- if (destroys !== undefined && destroys.size > 0) {
1246
- changeset.destroys = destroys;
1300
+ if (props.destroys !== undefined && props.destroys.size > 0) {
1301
+ changeset.destroys = props.destroys;
1247
1302
  }
1248
- if (refreshers !== undefined && refreshers.size > 0) {
1249
- changeset.refreshers = refreshers;
1303
+ if (props.refreshers !== undefined && props.refreshers.size > 0) {
1304
+ changeset.refreshers = props.refreshers;
1250
1305
  }
1251
1306
  return changeset;
1252
1307
  }
@@ -1273,11 +1328,12 @@ class ModularEditBuilder extends index_js_1.EditBuilder {
1273
1328
  /**
1274
1329
  * @param firstId - The ID to associate with the first node
1275
1330
  * @param content - The node(s) to build. Can be in either Field or Node mode.
1331
+ * @param revision - The revision to use for the build.
1276
1332
  * @returns A description of the edit that can be passed to `submitChanges`.
1277
1333
  */
1278
- buildTrees(firstId, content, idCompressor) {
1334
+ buildTrees(firstId, content, revision, idCompressor) {
1279
1335
  if (content.mode === 1 /* CursorLocationType.Fields */ && content.getFieldLength() === 0) {
1280
- return { type: "global" };
1336
+ return { type: "global", revision };
1281
1337
  }
1282
1338
  const builds = newTupleBTree();
1283
1339
  const chunkCompressor = {
@@ -1287,10 +1343,11 @@ class ModularEditBuilder extends index_js_1.EditBuilder {
1287
1343
  const chunk = content.mode === 1 /* CursorLocationType.Fields */
1288
1344
  ? (0, index_js_3.chunkFieldSingle)(content, chunkCompressor)
1289
1345
  : (0, index_js_3.chunkTree)(content, chunkCompressor);
1290
- builds.set([undefined, firstId], chunk);
1346
+ builds.set([revision, firstId], chunk);
1291
1347
  return {
1292
1348
  type: "global",
1293
1349
  builds,
1350
+ revision,
1294
1351
  };
1295
1352
  }
1296
1353
  /**
@@ -1298,25 +1355,55 @@ class ModularEditBuilder extends index_js_1.EditBuilder {
1298
1355
  * @param field - the field which is being edited
1299
1356
  * @param fieldKind - the kind of the field
1300
1357
  * @param change - the change to the field
1301
- * @param maxId - the highest `ChangesetLocalId` used in this change
1358
+ * @param revision - the revision of the change
1302
1359
  */
1303
- submitChange(field, fieldKind, change) {
1304
- const crossFieldKeys = getChangeHandler(this.fieldKinds, fieldKind).getCrossFieldKeys(change);
1305
- const modularChange = buildModularChangesetFromField(field, { fieldKind, change }, newTupleBTree(), newTupleBTree(), newCrossFieldKeyTable(), this.idAllocator, crossFieldKeys);
1306
- this.applyChange(modularChange);
1360
+ submitChange(field, fieldKind, change, revision) {
1361
+ const localCrossFieldKeys = getChangeHandler(this.fieldKinds, fieldKind).getCrossFieldKeys(change);
1362
+ const modularChange = buildModularChangesetFromField({
1363
+ path: field,
1364
+ fieldChange: { fieldKind, change },
1365
+ nodeChanges: newTupleBTree(),
1366
+ nodeToParent: newTupleBTree(),
1367
+ crossFieldKeys: newCrossFieldKeyTable(),
1368
+ idAllocator: this.idAllocator,
1369
+ localCrossFieldKeys,
1370
+ revision,
1371
+ });
1372
+ this.applyChange((0, index_js_1.tagChange)(modularChange, revision));
1307
1373
  }
1308
- submitChanges(changes) {
1374
+ submitChanges(changes, revision) {
1309
1375
  const modularChange = this.buildChanges(changes);
1310
- this.applyChange(modularChange);
1376
+ this.applyChange((0, index_js_1.tagChange)(modularChange, revision));
1311
1377
  }
1312
1378
  buildChanges(changes) {
1313
- const changeMaps = changes.map((change) => (0, index_js_1.makeAnonChange)(change.type === "global"
1314
- ? makeModularChangeset(undefined, undefined, undefined, undefined, undefined, this.idAllocator.getMaxId(), undefined, undefined, change.builds)
1315
- : buildModularChangesetFromField(change.field, {
1316
- fieldKind: change.fieldKind,
1317
- change: change.change,
1318
- }, newTupleBTree(), newTupleBTree(), newCrossFieldKeyTable(), this.idAllocator, getChangeHandler(this.fieldKinds, change.fieldKind).getCrossFieldKeys(change.change))));
1319
- const composedChange = this.changeFamily.rebaser.compose(changeMaps);
1379
+ const revisions = new Set();
1380
+ const changeMaps = changes.map((change) => {
1381
+ revisions.add(change.revision);
1382
+ return (0, index_js_1.makeAnonChange)(change.type === "global"
1383
+ ? makeModularChangeset({
1384
+ maxId: this.idAllocator.getMaxId(),
1385
+ builds: change.builds,
1386
+ revisions: [{ revision: change.revision }],
1387
+ })
1388
+ : buildModularChangesetFromField({
1389
+ path: change.field,
1390
+ fieldChange: {
1391
+ fieldKind: change.fieldKind,
1392
+ change: change.change,
1393
+ },
1394
+ nodeChanges: newTupleBTree(),
1395
+ nodeToParent: newTupleBTree(),
1396
+ crossFieldKeys: newCrossFieldKeyTable(),
1397
+ idAllocator: this.idAllocator,
1398
+ localCrossFieldKeys: getChangeHandler(this.fieldKinds, change.fieldKind).getCrossFieldKeys(change.change),
1399
+ revision: change.revision,
1400
+ }));
1401
+ });
1402
+ const revInfo = Array.from(revisions).map((revision) => ({ revision }));
1403
+ const composedChange = {
1404
+ ...this.changeFamily.rebaser.compose(changeMaps),
1405
+ revisions: revInfo,
1406
+ };
1320
1407
  const maxId = (0, index_js_2.brand)(this.idAllocator.getMaxId());
1321
1408
  if (maxId >= 0) {
1322
1409
  composedChange.maxId = maxId;
@@ -1326,15 +1413,24 @@ class ModularEditBuilder extends index_js_1.EditBuilder {
1326
1413
  generateId(count) {
1327
1414
  return (0, index_js_2.brand)(this.idAllocator.allocate(count));
1328
1415
  }
1329
- addNodeExistsConstraint(path) {
1416
+ addNodeExistsConstraint(path, revision) {
1330
1417
  const nodeChange = {
1331
1418
  nodeExistsConstraint: { violated: false },
1332
1419
  };
1333
- this.applyChange(buildModularChangesetFromNode(path, nodeChange, newTupleBTree(), newTupleBTree(), newCrossFieldKeyTable(), this.idAllocator));
1420
+ this.applyChange((0, index_js_1.tagChange)(buildModularChangesetFromNode({
1421
+ path,
1422
+ nodeChange,
1423
+ nodeChanges: newTupleBTree(),
1424
+ nodeToParent: newTupleBTree(),
1425
+ crossFieldKeys: newCrossFieldKeyTable(),
1426
+ idAllocator: this.idAllocator,
1427
+ revision,
1428
+ }), revision));
1334
1429
  }
1335
1430
  }
1336
1431
  exports.ModularEditBuilder = ModularEditBuilder;
1337
- function buildModularChangesetFromField(path, fieldChange, nodeChanges, nodeToParent, crossFieldKeys, idAllocator = (0, index_js_2.idAllocatorFromMaxId)(), localCrossFieldKeys = [], childId = undefined) {
1432
+ function buildModularChangesetFromField(props) {
1433
+ const { path, fieldChange, nodeChanges, nodeToParent, crossFieldKeys, idAllocator = (0, index_js_2.idAllocatorFromMaxId)(), localCrossFieldKeys = [], childId, revision, } = props;
1338
1434
  const fieldChanges = new Map([[path.field, fieldChange]]);
1339
1435
  if (path.parent === undefined) {
1340
1436
  for (const key of localCrossFieldKeys) {
@@ -1346,12 +1442,19 @@ function buildModularChangesetFromField(path, fieldChange, nodeChanges, nodeToPa
1346
1442
  field: path.field,
1347
1443
  });
1348
1444
  }
1349
- return makeModularChangeset(fieldChanges, nodeChanges, nodeToParent, undefined, crossFieldKeys, idAllocator.getMaxId());
1445
+ return makeModularChangeset({
1446
+ fieldChanges,
1447
+ nodeChanges,
1448
+ nodeToParent,
1449
+ crossFieldKeys,
1450
+ maxId: idAllocator.getMaxId(),
1451
+ revisions: [{ revision }],
1452
+ });
1350
1453
  }
1351
1454
  const nodeChangeset = {
1352
1455
  fieldChanges,
1353
1456
  };
1354
- const parentId = { localId: (0, index_js_2.brand)(idAllocator.allocate()) };
1457
+ const parentId = { localId: (0, index_js_2.brand)(idAllocator.allocate()), revision };
1355
1458
  for (const key of localCrossFieldKeys) {
1356
1459
  crossFieldKeys.set(key, { nodeId: parentId, field: path.field });
1357
1460
  }
@@ -1361,16 +1464,32 @@ function buildModularChangesetFromField(path, fieldChange, nodeChanges, nodeToPa
1361
1464
  field: path.field,
1362
1465
  });
1363
1466
  }
1364
- return buildModularChangesetFromNode(path.parent, nodeChangeset, nodeChanges, nodeToParent, crossFieldKeys, idAllocator, parentId);
1467
+ return buildModularChangesetFromNode({
1468
+ path: path.parent,
1469
+ nodeChange: nodeChangeset,
1470
+ nodeChanges,
1471
+ nodeToParent,
1472
+ crossFieldKeys,
1473
+ idAllocator,
1474
+ revision,
1475
+ nodeId: parentId,
1476
+ });
1365
1477
  }
1366
- function buildModularChangesetFromNode(path, nodeChange, nodeChanges, nodeToParent, crossFieldKeys, idAllocator, nodeId = { localId: (0, index_js_2.brand)(idAllocator.allocate()) }) {
1367
- setInChangeAtomIdMap(nodeChanges, nodeId, nodeChange);
1478
+ function buildModularChangesetFromNode(props) {
1479
+ const { path, nodeId = { localId: (0, index_js_2.brand)(props.idAllocator.allocate()), revision: props.revision }, } = props;
1480
+ setInChangeAtomIdMap(props.nodeChanges, nodeId, props.nodeChange);
1368
1481
  const fieldChangeset = genericFieldKind_js_1.genericFieldKind.changeHandler.editor.buildChildChange(path.parentIndex, nodeId);
1369
1482
  const fieldChange = {
1370
1483
  fieldKind: genericFieldKind_js_1.genericFieldKind.identifier,
1371
1484
  change: fieldChangeset,
1372
1485
  };
1373
- return buildModularChangesetFromField({ parent: path.parent, field: path.parentField }, fieldChange, nodeChanges, nodeToParent, crossFieldKeys, idAllocator, [], nodeId);
1486
+ return buildModularChangesetFromField({
1487
+ ...props,
1488
+ path: { parent: path.parent, field: path.parentField },
1489
+ fieldChange,
1490
+ localCrossFieldKeys: [],
1491
+ childId: nodeId,
1492
+ });
1374
1493
  }
1375
1494
  function getRevInfoFromTaggedChanges(changes) {
1376
1495
  let maxId = -1;