@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
@@ -31,7 +31,6 @@ import {
31
31
  type TaggedChange,
32
32
  type UpPath,
33
33
  isEmptyFieldChanges,
34
- makeAnonChange,
35
34
  makeDetachedNodeId,
36
35
  mapCursorField,
37
36
  replaceAtomRevisions,
@@ -39,6 +38,8 @@ import {
39
38
  areEqualChangeAtomIds,
40
39
  type ChangeAtomId,
41
40
  areEqualChangeAtomIdOpts,
41
+ tagChange,
42
+ makeAnonChange,
42
43
  } from "../../core/index.js";
43
44
  import {
44
45
  type IdAllocationState,
@@ -226,19 +227,18 @@ export class ModularChangeFamily
226
227
  change2,
227
228
  );
228
229
 
229
- return makeModularChangeset(
230
+ return makeModularChangeset({
230
231
  fieldChanges,
231
232
  nodeChanges,
232
233
  nodeToParent,
233
234
  nodeAliases,
234
235
  crossFieldKeys,
235
- idState.maxId,
236
- revInfos,
237
- undefined,
238
- allBuilds,
239
- allDestroys,
240
- allRefreshers,
241
- );
236
+ maxId: idState.maxId,
237
+ revisions: revInfos,
238
+ builds: allBuilds,
239
+ destroys: allDestroys,
240
+ refreshers: allRefreshers,
241
+ });
242
242
  }
243
243
 
244
244
  private composeAllFields(
@@ -676,11 +676,13 @@ export class ModularChangeFamily
676
676
  /**
677
677
  * @param change - The change to invert.
678
678
  * @param isRollback - Whether the inverted change is meant to rollback a change on a branch as is the case when
679
+ * @param revisionForInvert - The revision for the invert changeset.
679
680
  * performing a sandwich rebase.
680
681
  */
681
682
  public invert(
682
683
  change: TaggedChange<ModularChangeset>,
683
684
  isRollback: boolean,
685
+ revisionForInvert: RevisionTag,
684
686
  ): ModularChangeset {
685
687
  // Rollback changesets destroy the nodes created by the change being rolled back.
686
688
  const destroys = isRollback ? invertBuilds(change.change.builds) : undefined;
@@ -691,19 +693,16 @@ export class ModularChangeFamily
691
693
  0x89a /* Unexpected destroys in change to invert */,
692
694
  );
693
695
 
696
+ const revInfos: RevisionInfo[] = isRollback
697
+ ? [{ revision: revisionForInvert, rollbackOf: change.revision }]
698
+ : [{ revision: revisionForInvert }];
699
+
694
700
  if (hasConflicts(change.change)) {
695
- return makeModularChangeset(
696
- undefined,
697
- undefined,
698
- undefined,
699
- undefined,
700
- undefined,
701
- change.change.maxId,
702
- [],
703
- undefined,
704
- undefined,
701
+ return makeModularChangeset({
702
+ maxId: change.change.maxId as number,
703
+ revisions: revInfos,
705
704
  destroys,
706
- );
705
+ });
707
706
  }
708
707
 
709
708
  const genId: IdAllocator = idAllocatorFromMaxId(change.change.maxId ?? -1);
@@ -713,9 +712,8 @@ export class ModularChangeFamily
713
712
  originalFieldToContext: new Map(),
714
713
  invertedNodeToParent: brand(change.change.nodeToParent.clone()),
715
714
  };
716
-
717
- const { revInfos } = getRevInfoFromTaggedChanges([change]);
718
- const revisionMetadata = revisionMetadataSourceFromInfo(revInfos);
715
+ const { revInfos: oldRevInfos } = getRevInfoFromTaggedChanges([change]);
716
+ const revisionMetadata = revisionMetadataSourceFromInfo(oldRevInfos);
719
717
 
720
718
  const invertedFields = this.invertFieldMap(
721
719
  change.change.fieldChanges,
@@ -724,6 +722,7 @@ export class ModularChangeFamily
724
722
  genId,
725
723
  crossFieldTable,
726
724
  revisionMetadata,
725
+ revisionForInvert,
727
726
  );
728
727
 
729
728
  const invertedNodes: ChangeAtomIdBTree<NodeChangeset> = newTupleBTree();
@@ -737,6 +736,7 @@ export class ModularChangeFamily
737
736
  genId,
738
737
  crossFieldTable,
739
738
  revisionMetadata,
739
+ revisionForInvert,
740
740
  ),
741
741
  );
742
742
  });
@@ -760,6 +760,7 @@ export class ModularChangeFamily
760
760
  originalFieldChange,
761
761
  isRollback,
762
762
  genId,
763
+ revisionForInvert,
763
764
  new InvertManager(crossFieldTable, fieldChange, fieldId),
764
765
  revisionMetadata,
765
766
  );
@@ -769,18 +770,17 @@ export class ModularChangeFamily
769
770
 
770
771
  const crossFieldKeys = this.makeCrossFieldKeyTable(invertedFields, invertedNodes);
771
772
 
772
- return makeModularChangeset(
773
- invertedFields,
774
- invertedNodes,
775
- crossFieldTable.invertedNodeToParent,
776
- change.change.nodeAliases,
773
+ return makeModularChangeset({
774
+ fieldChanges: invertedFields,
775
+ nodeChanges: invertedNodes,
776
+ nodeToParent: crossFieldTable.invertedNodeToParent,
777
+ nodeAliases: change.change.nodeAliases,
777
778
  crossFieldKeys,
778
- genId.getMaxId(),
779
- [],
780
- change.change.constraintViolationCount,
781
- undefined,
779
+ maxId: genId.getMaxId(),
780
+ revisions: revInfos,
781
+ constraintViolationCount: change.change.constraintViolationCount,
782
782
  destroys,
783
- );
783
+ });
784
784
  }
785
785
 
786
786
  private invertFieldMap(
@@ -790,6 +790,7 @@ export class ModularChangeFamily
790
790
  genId: IdAllocator,
791
791
  crossFieldTable: InvertTable,
792
792
  revisionMetadata: RevisionMetadataSource,
793
+ revisionForInvert: RevisionTag,
793
794
  ): FieldChangeMap {
794
795
  const invertedFields: FieldChangeMap = new Map();
795
796
 
@@ -799,7 +800,14 @@ export class ModularChangeFamily
799
800
  const invertedChange = getChangeHandler(
800
801
  this.fieldKinds,
801
802
  fieldChange.fieldKind,
802
- ).rebaser.invert(fieldChange.change, isRollback, genId, manager, revisionMetadata);
803
+ ).rebaser.invert(
804
+ fieldChange.change,
805
+ isRollback,
806
+ genId,
807
+ revisionForInvert,
808
+ manager,
809
+ revisionMetadata,
810
+ );
803
811
 
804
812
  const invertedFieldChange: FieldChange = {
805
813
  ...fieldChange,
@@ -823,6 +831,7 @@ export class ModularChangeFamily
823
831
  genId: IdAllocator,
824
832
  crossFieldTable: InvertTable,
825
833
  revisionMetadata: RevisionMetadataSource,
834
+ revisionForInvert: RevisionTag,
826
835
  ): NodeChangeset {
827
836
  const inverse: NodeChangeset = {};
828
837
 
@@ -834,6 +843,7 @@ export class ModularChangeFamily
834
843
  genId,
835
844
  crossFieldTable,
836
845
  revisionMetadata,
846
+ revisionForInvert,
837
847
  );
838
848
  }
839
849
 
@@ -904,19 +914,19 @@ export class ModularChangeFamily
904
914
  rebasedNodes,
905
915
  );
906
916
 
907
- const rebased = makeModularChangeset(
908
- this.pruneFieldMap(rebasedFields, rebasedNodes),
909
- rebasedNodes,
910
- crossFieldTable.rebasedNodeToParent,
911
- change.nodeAliases,
912
- crossFieldTable.rebasedCrossFieldKeys,
913
- idState.maxId,
914
- change.revisions,
915
- constraintState.violationCount,
916
- change.builds,
917
- change.destroys,
918
- change.refreshers,
919
- );
917
+ const rebased = makeModularChangeset({
918
+ fieldChanges: this.pruneFieldMap(rebasedFields, rebasedNodes),
919
+ nodeChanges: rebasedNodes,
920
+ nodeToParent: crossFieldTable.rebasedNodeToParent,
921
+ nodeAliases: change.nodeAliases,
922
+ crossFieldKeys: crossFieldTable.rebasedCrossFieldKeys,
923
+ maxId: idState.maxId,
924
+ revisions: change.revisions,
925
+ constraintViolationCount: constraintState.violationCount,
926
+ builds: change.builds,
927
+ destroys: change.destroys,
928
+ refreshers: change.refreshers,
929
+ });
920
930
 
921
931
  return rebased;
922
932
  }
@@ -1455,7 +1465,7 @@ export class ModularChangeFamily
1455
1465
  rollbackOf?: RevisionTag,
1456
1466
  ): ModularChangeset {
1457
1467
  const oldRevisions = new Set(
1458
- change.revisions === undefined
1468
+ change.revisions === undefined || change.revisions.length === 0
1459
1469
  ? [undefined]
1460
1470
  : change.revisions.map((revInfo) => revInfo.revision),
1461
1471
  );
@@ -1595,7 +1605,9 @@ export class ModularChangeFamily
1595
1605
  }
1596
1606
  }
1597
1607
 
1598
- public buildEditor(changeReceiver: (change: ModularChangeset) => void): ModularEditBuilder {
1608
+ public buildEditor(
1609
+ changeReceiver: (change: TaggedChange<ModularChangeset>) => void,
1610
+ ): ModularEditBuilder {
1599
1611
  return new ModularEditBuilder(this, this.fieldKinds, changeReceiver);
1600
1612
  }
1601
1613
 
@@ -1893,19 +1905,19 @@ export function updateRefreshers(
1893
1905
  destroys,
1894
1906
  } = change;
1895
1907
 
1896
- return makeModularChangeset(
1908
+ return makeModularChangeset({
1897
1909
  fieldChanges,
1898
1910
  nodeChanges,
1899
- change.nodeToParent,
1900
- change.nodeAliases,
1901
- change.crossFieldKeys,
1902
- maxId,
1911
+ nodeToParent: change.nodeToParent,
1912
+ nodeAliases: change.nodeAliases,
1913
+ crossFieldKeys: change.crossFieldKeys,
1914
+ maxId: maxId as number,
1903
1915
  revisions,
1904
1916
  constraintViolationCount,
1905
1917
  builds,
1906
1918
  destroys,
1907
1919
  refreshers,
1908
- );
1920
+ });
1909
1921
  }
1910
1922
 
1911
1923
  /**
@@ -2477,43 +2489,47 @@ class ComposeManager extends CrossFieldManagerI<FieldChange> {
2477
2489
  }
2478
2490
 
2479
2491
  function makeModularChangeset(
2480
- fieldChanges: FieldChangeMap | undefined = undefined,
2481
- nodeChanges: ChangeAtomIdBTree<NodeChangeset> | undefined = undefined,
2482
- nodeToParent: ChangeAtomIdBTree<FieldId> | undefined = undefined,
2483
- nodeAliases: ChangeAtomIdBTree<NodeId> | undefined = undefined,
2484
- crossFieldKeys: CrossFieldKeyTable | undefined = undefined,
2485
- maxId: number = -1,
2486
- revisions: readonly RevisionInfo[] | undefined = undefined,
2487
- constraintViolationCount: number | undefined = undefined,
2488
- builds?: ChangeAtomIdBTree<TreeChunk>,
2489
- destroys?: ChangeAtomIdBTree<number>,
2490
- refreshers?: ChangeAtomIdBTree<TreeChunk>,
2492
+ props: {
2493
+ fieldChanges?: FieldChangeMap;
2494
+ nodeChanges?: ChangeAtomIdBTree<NodeChangeset>;
2495
+ nodeToParent?: ChangeAtomIdBTree<FieldId>;
2496
+ nodeAliases?: ChangeAtomIdBTree<NodeId>;
2497
+ crossFieldKeys?: CrossFieldKeyTable;
2498
+ maxId: number;
2499
+ revisions?: readonly RevisionInfo[];
2500
+ constraintViolationCount?: number;
2501
+ builds?: ChangeAtomIdBTree<TreeChunk>;
2502
+ destroys?: ChangeAtomIdBTree<number>;
2503
+ refreshers?: ChangeAtomIdBTree<TreeChunk>;
2504
+ } = {
2505
+ maxId: -1,
2506
+ },
2491
2507
  ): ModularChangeset {
2492
2508
  const changeset: Mutable<ModularChangeset> = {
2493
- fieldChanges: fieldChanges ?? new Map(),
2494
- nodeChanges: nodeChanges ?? newTupleBTree(),
2495
- nodeToParent: nodeToParent ?? newTupleBTree(),
2496
- nodeAliases: nodeAliases ?? newTupleBTree(),
2497
- crossFieldKeys: crossFieldKeys ?? newCrossFieldKeyTable(),
2509
+ fieldChanges: props.fieldChanges ?? new Map(),
2510
+ nodeChanges: props.nodeChanges ?? newTupleBTree(),
2511
+ nodeToParent: props.nodeToParent ?? newTupleBTree(),
2512
+ nodeAliases: props.nodeAliases ?? newTupleBTree(),
2513
+ crossFieldKeys: props.crossFieldKeys ?? newCrossFieldKeyTable(),
2498
2514
  };
2499
2515
 
2500
- if (revisions !== undefined && revisions.length > 0) {
2501
- changeset.revisions = revisions;
2516
+ if (props.revisions !== undefined && props.revisions.length > 0) {
2517
+ changeset.revisions = props.revisions;
2502
2518
  }
2503
- if (maxId >= 0) {
2504
- changeset.maxId = brand(maxId);
2519
+ if (props.maxId >= 0) {
2520
+ changeset.maxId = brand(props.maxId);
2505
2521
  }
2506
- if (constraintViolationCount !== undefined && constraintViolationCount > 0) {
2507
- changeset.constraintViolationCount = constraintViolationCount;
2522
+ if (props.constraintViolationCount !== undefined && props.constraintViolationCount > 0) {
2523
+ changeset.constraintViolationCount = props.constraintViolationCount;
2508
2524
  }
2509
- if (builds !== undefined && builds.size > 0) {
2510
- changeset.builds = builds;
2525
+ if (props.builds !== undefined && props.builds.size > 0) {
2526
+ changeset.builds = props.builds;
2511
2527
  }
2512
- if (destroys !== undefined && destroys.size > 0) {
2513
- changeset.destroys = destroys;
2528
+ if (props.destroys !== undefined && props.destroys.size > 0) {
2529
+ changeset.destroys = props.destroys;
2514
2530
  }
2515
- if (refreshers !== undefined && refreshers.size > 0) {
2516
- changeset.refreshers = refreshers;
2531
+ if (props.refreshers !== undefined && props.refreshers.size > 0) {
2532
+ changeset.refreshers = props.refreshers;
2517
2533
  }
2518
2534
  return changeset;
2519
2535
  }
@@ -2525,7 +2541,7 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2525
2541
  public constructor(
2526
2542
  family: ChangeFamily<ChangeFamilyEditor, ModularChangeset>,
2527
2543
  private readonly fieldKinds: ReadonlyMap<FieldKindIdentifier, FieldKindWithEditor>,
2528
- changeReceiver: (change: ModularChangeset) => void,
2544
+ changeReceiver: (change: TaggedChange<ModularChangeset>) => void,
2529
2545
  ) {
2530
2546
  super(family, changeReceiver);
2531
2547
  this.idAllocator = idAllocatorFromMaxId();
@@ -2549,15 +2565,17 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2549
2565
  /**
2550
2566
  * @param firstId - The ID to associate with the first node
2551
2567
  * @param content - The node(s) to build. Can be in either Field or Node mode.
2568
+ * @param revision - The revision to use for the build.
2552
2569
  * @returns A description of the edit that can be passed to `submitChanges`.
2553
2570
  */
2554
2571
  public buildTrees(
2555
2572
  firstId: ChangesetLocalId,
2556
2573
  content: ITreeCursorSynchronous,
2574
+ revision: RevisionTag,
2557
2575
  idCompressor?: IIdCompressor,
2558
2576
  ): GlobalEditDescription {
2559
2577
  if (content.mode === CursorLocationType.Fields && content.getFieldLength() === 0) {
2560
- return { type: "global" };
2578
+ return { type: "global", revision };
2561
2579
  }
2562
2580
  const builds: ChangeAtomIdBTree<TreeChunk> = newTupleBTree();
2563
2581
  const chunkCompressor = {
@@ -2568,11 +2586,12 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2568
2586
  content.mode === CursorLocationType.Fields
2569
2587
  ? chunkFieldSingle(content, chunkCompressor)
2570
2588
  : chunkTree(content, chunkCompressor);
2571
- builds.set([undefined, firstId], chunk);
2589
+ builds.set([revision, firstId], chunk);
2572
2590
 
2573
2591
  return {
2574
2592
  type: "global",
2575
2593
  builds,
2594
+ revision,
2576
2595
  };
2577
2596
  }
2578
2597
 
@@ -2581,67 +2600,70 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2581
2600
  * @param field - the field which is being edited
2582
2601
  * @param fieldKind - the kind of the field
2583
2602
  * @param change - the change to the field
2584
- * @param maxId - the highest `ChangesetLocalId` used in this change
2603
+ * @param revision - the revision of the change
2585
2604
  */
2586
2605
  public submitChange(
2587
2606
  field: FieldUpPath,
2588
2607
  fieldKind: FieldKindIdentifier,
2589
2608
  change: FieldChangeset,
2609
+ revision: RevisionTag,
2590
2610
  ): void {
2591
- const crossFieldKeys = getChangeHandler(this.fieldKinds, fieldKind).getCrossFieldKeys(
2611
+ const localCrossFieldKeys = getChangeHandler(this.fieldKinds, fieldKind).getCrossFieldKeys(
2592
2612
  change,
2593
2613
  );
2594
2614
 
2595
- const modularChange = buildModularChangesetFromField(
2596
- field,
2597
- { fieldKind, change },
2598
- newTupleBTree(),
2599
- newTupleBTree(),
2600
- newCrossFieldKeyTable(),
2601
- this.idAllocator,
2602
- crossFieldKeys,
2603
- );
2604
- this.applyChange(modularChange);
2615
+ const modularChange = buildModularChangesetFromField({
2616
+ path: field,
2617
+ fieldChange: { fieldKind, change },
2618
+ nodeChanges: newTupleBTree(),
2619
+ nodeToParent: newTupleBTree(),
2620
+ crossFieldKeys: newCrossFieldKeyTable(),
2621
+ idAllocator: this.idAllocator,
2622
+ localCrossFieldKeys,
2623
+ revision,
2624
+ });
2625
+ this.applyChange(tagChange(modularChange, revision));
2605
2626
  }
2606
2627
 
2607
- public submitChanges(changes: EditDescription[]): void {
2628
+ public submitChanges(changes: EditDescription[], revision: RevisionTag): void {
2608
2629
  const modularChange = this.buildChanges(changes);
2609
- this.applyChange(modularChange);
2630
+ this.applyChange(tagChange(modularChange, revision));
2610
2631
  }
2611
2632
 
2612
2633
  public buildChanges(changes: EditDescription[]): ModularChangeset {
2613
- const changeMaps = changes.map((change) =>
2614
- makeAnonChange(
2634
+ const revisions: Set<RevisionTag> = new Set();
2635
+ const changeMaps = changes.map((change) => {
2636
+ revisions.add(change.revision);
2637
+ return makeAnonChange(
2615
2638
  change.type === "global"
2616
- ? makeModularChangeset(
2617
- undefined,
2618
- undefined,
2619
- undefined,
2620
- undefined,
2621
- undefined,
2622
- this.idAllocator.getMaxId(),
2623
- undefined,
2624
- undefined,
2625
- change.builds,
2626
- )
2627
- : buildModularChangesetFromField(
2628
- change.field,
2629
- {
2639
+ ? makeModularChangeset({
2640
+ maxId: this.idAllocator.getMaxId(),
2641
+ builds: change.builds,
2642
+ revisions: [{ revision: change.revision }],
2643
+ })
2644
+ : buildModularChangesetFromField({
2645
+ path: change.field,
2646
+ fieldChange: {
2630
2647
  fieldKind: change.fieldKind,
2631
2648
  change: change.change,
2632
2649
  },
2633
- newTupleBTree(),
2634
- newTupleBTree(),
2635
- newCrossFieldKeyTable(),
2636
- this.idAllocator,
2637
- getChangeHandler(this.fieldKinds, change.fieldKind).getCrossFieldKeys(
2638
- change.change,
2639
- ),
2640
- ),
2641
- ),
2642
- );
2643
- const composedChange: Mutable<ModularChangeset> =
2644
- this.changeFamily.rebaser.compose(changeMaps);
2650
+ nodeChanges: newTupleBTree(),
2651
+ nodeToParent: newTupleBTree(),
2652
+ crossFieldKeys: newCrossFieldKeyTable(),
2653
+ idAllocator: this.idAllocator,
2654
+ localCrossFieldKeys: getChangeHandler(
2655
+ this.fieldKinds,
2656
+ change.fieldKind,
2657
+ ).getCrossFieldKeys(change.change),
2658
+ revision: change.revision,
2659
+ }),
2660
+ );
2661
+ });
2662
+ const revInfo = Array.from(revisions).map((revision) => ({ revision }));
2663
+ const composedChange: Mutable<ModularChangeset> = {
2664
+ ...this.changeFamily.rebaser.compose(changeMaps),
2665
+ revisions: revInfo,
2666
+ };
2645
2667
 
2646
2668
  const maxId: ChangesetLocalId = brand(this.idAllocator.getMaxId());
2647
2669
  if (maxId >= 0) {
@@ -2654,34 +2676,50 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2654
2676
  return brand(this.idAllocator.allocate(count));
2655
2677
  }
2656
2678
 
2657
- public addNodeExistsConstraint(path: UpPath): void {
2679
+ public addNodeExistsConstraint(path: UpPath, revision: RevisionTag): void {
2658
2680
  const nodeChange: NodeChangeset = {
2659
2681
  nodeExistsConstraint: { violated: false },
2660
2682
  };
2661
2683
 
2662
2684
  this.applyChange(
2663
- buildModularChangesetFromNode(
2664
- path,
2665
- nodeChange,
2666
- newTupleBTree(),
2667
- newTupleBTree(),
2668
- newCrossFieldKeyTable(),
2669
- this.idAllocator,
2685
+ tagChange(
2686
+ buildModularChangesetFromNode({
2687
+ path,
2688
+ nodeChange,
2689
+ nodeChanges: newTupleBTree(),
2690
+ nodeToParent: newTupleBTree(),
2691
+ crossFieldKeys: newCrossFieldKeyTable(),
2692
+ idAllocator: this.idAllocator,
2693
+ revision,
2694
+ }),
2695
+ revision,
2670
2696
  ),
2671
2697
  );
2672
2698
  }
2673
2699
  }
2674
2700
 
2675
- function buildModularChangesetFromField(
2676
- path: FieldUpPath,
2677
- fieldChange: FieldChange,
2678
- nodeChanges: ChangeAtomIdBTree<NodeChangeset>,
2679
- nodeToParent: ChangeAtomIdBTree<FieldId>,
2680
- crossFieldKeys: CrossFieldKeyTable,
2681
- idAllocator: IdAllocator = idAllocatorFromMaxId(),
2682
- localCrossFieldKeys: CrossFieldKeyRange[] = [],
2683
- childId: NodeId | undefined = undefined,
2684
- ): ModularChangeset {
2701
+ function buildModularChangesetFromField(props: {
2702
+ path: FieldUpPath;
2703
+ fieldChange: FieldChange;
2704
+ nodeChanges: ChangeAtomIdBTree<NodeChangeset>;
2705
+ nodeToParent: ChangeAtomIdBTree<FieldId>;
2706
+ crossFieldKeys: CrossFieldKeyTable;
2707
+ localCrossFieldKeys?: CrossFieldKeyRange[];
2708
+ revision: RevisionTag;
2709
+ idAllocator?: IdAllocator;
2710
+ childId?: NodeId;
2711
+ }): ModularChangeset {
2712
+ const {
2713
+ path,
2714
+ fieldChange,
2715
+ nodeChanges,
2716
+ nodeToParent,
2717
+ crossFieldKeys,
2718
+ idAllocator = idAllocatorFromMaxId(),
2719
+ localCrossFieldKeys = [],
2720
+ childId,
2721
+ revision,
2722
+ } = props;
2685
2723
  const fieldChanges: FieldChangeMap = new Map([[path.field, fieldChange]]);
2686
2724
 
2687
2725
  if (path.parent === undefined) {
@@ -2696,21 +2734,21 @@ function buildModularChangesetFromField(
2696
2734
  });
2697
2735
  }
2698
2736
 
2699
- return makeModularChangeset(
2737
+ return makeModularChangeset({
2700
2738
  fieldChanges,
2701
2739
  nodeChanges,
2702
2740
  nodeToParent,
2703
- undefined,
2704
2741
  crossFieldKeys,
2705
- idAllocator.getMaxId(),
2706
- );
2742
+ maxId: idAllocator.getMaxId(),
2743
+ revisions: [{ revision }],
2744
+ });
2707
2745
  }
2708
2746
 
2709
2747
  const nodeChangeset: NodeChangeset = {
2710
2748
  fieldChanges,
2711
2749
  };
2712
2750
 
2713
- const parentId: NodeId = { localId: brand(idAllocator.allocate()) };
2751
+ const parentId: NodeId = { localId: brand(idAllocator.allocate()), revision };
2714
2752
 
2715
2753
  for (const key of localCrossFieldKeys) {
2716
2754
  crossFieldKeys.set(key, { nodeId: parentId, field: path.field });
@@ -2723,27 +2761,33 @@ function buildModularChangesetFromField(
2723
2761
  });
2724
2762
  }
2725
2763
 
2726
- return buildModularChangesetFromNode(
2727
- path.parent,
2728
- nodeChangeset,
2764
+ return buildModularChangesetFromNode({
2765
+ path: path.parent,
2766
+ nodeChange: nodeChangeset,
2729
2767
  nodeChanges,
2730
2768
  nodeToParent,
2731
2769
  crossFieldKeys,
2732
2770
  idAllocator,
2733
- parentId,
2734
- );
2771
+ revision,
2772
+ nodeId: parentId,
2773
+ });
2735
2774
  }
2736
2775
 
2737
- function buildModularChangesetFromNode(
2738
- path: UpPath,
2739
- nodeChange: NodeChangeset,
2740
- nodeChanges: ChangeAtomIdBTree<NodeChangeset>,
2741
- nodeToParent: ChangeAtomIdBTree<FieldId>,
2742
- crossFieldKeys: CrossFieldKeyTable,
2743
- idAllocator: IdAllocator,
2744
- nodeId: NodeId = { localId: brand(idAllocator.allocate()) },
2745
- ): ModularChangeset {
2746
- setInChangeAtomIdMap(nodeChanges, nodeId, nodeChange);
2776
+ function buildModularChangesetFromNode(props: {
2777
+ path: UpPath;
2778
+ nodeChange: NodeChangeset;
2779
+ nodeChanges: ChangeAtomIdBTree<NodeChangeset>;
2780
+ nodeToParent: ChangeAtomIdBTree<FieldId>;
2781
+ crossFieldKeys: CrossFieldKeyTable;
2782
+ idAllocator: IdAllocator;
2783
+ revision: RevisionTag;
2784
+ nodeId?: NodeId;
2785
+ }): ModularChangeset {
2786
+ const {
2787
+ path,
2788
+ nodeId = { localId: brand(props.idAllocator.allocate()), revision: props.revision },
2789
+ } = props;
2790
+ setInChangeAtomIdMap(props.nodeChanges, nodeId, props.nodeChange);
2747
2791
  const fieldChangeset = genericFieldKind.changeHandler.editor.buildChildChange(
2748
2792
  path.parentIndex,
2749
2793
  nodeId,
@@ -2754,16 +2798,13 @@ function buildModularChangesetFromNode(
2754
2798
  change: fieldChangeset,
2755
2799
  };
2756
2800
 
2757
- return buildModularChangesetFromField(
2758
- { parent: path.parent, field: path.parentField },
2801
+ return buildModularChangesetFromField({
2802
+ ...props,
2803
+ path: { parent: path.parent, field: path.parentField },
2759
2804
  fieldChange,
2760
- nodeChanges,
2761
- nodeToParent,
2762
- crossFieldKeys,
2763
- idAllocator,
2764
- [],
2765
- nodeId,
2766
- );
2805
+ localCrossFieldKeys: [],
2806
+ childId: nodeId,
2807
+ });
2767
2808
  }
2768
2809
 
2769
2810
  /**
@@ -2773,12 +2814,14 @@ export interface FieldEditDescription {
2773
2814
  field: FieldUpPath;
2774
2815
  fieldKind: FieldKindIdentifier;
2775
2816
  change: FieldChangeset;
2817
+ revision: RevisionTag;
2776
2818
  }
2777
2819
 
2778
2820
  /**
2779
2821
  */
2780
2822
  export interface GlobalEditDescription {
2781
2823
  type: "global";
2824
+ revision: RevisionTag;
2782
2825
  builds?: ChangeAtomIdBTree<TreeChunk>;
2783
2826
  }
2784
2827