@fluidframework/tree 2.80.0 → 2.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1138) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/api-report/tree.alpha.api.md +42 -7
  3. package/dist/alpha.d.ts +5 -0
  4. package/dist/codec/codec.d.ts +2 -2
  5. package/dist/codec/codec.d.ts.map +1 -1
  6. package/dist/codec/codec.js +8 -8
  7. package/dist/codec/codec.js.map +1 -1
  8. package/dist/codec/versioned/codec.d.ts +1 -1
  9. package/dist/codec/versioned/codec.d.ts.map +1 -1
  10. package/dist/codec/versioned/codec.js +12 -12
  11. package/dist/codec/versioned/codec.js.map +1 -1
  12. package/dist/core/index.d.ts +1 -1
  13. package/dist/core/index.d.ts.map +1 -1
  14. package/dist/core/index.js.map +1 -1
  15. package/dist/core/rebase/index.d.ts +1 -1
  16. package/dist/core/rebase/index.d.ts.map +1 -1
  17. package/dist/core/rebase/index.js.map +1 -1
  18. package/dist/core/rebase/types.d.ts +44 -7
  19. package/dist/core/rebase/types.d.ts.map +1 -1
  20. package/dist/core/rebase/types.js.map +1 -1
  21. package/dist/core/rebase/utils.d.ts.map +1 -1
  22. package/dist/core/rebase/utils.js +5 -1
  23. package/dist/core/rebase/utils.js.map +1 -1
  24. package/dist/core/schema-stored/formatV2.d.ts.map +1 -1
  25. package/dist/core/schema-stored/formatV2.js +4 -4
  26. package/dist/core/schema-stored/formatV2.js.map +1 -1
  27. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  28. package/dist/core/tree/anchorSet.js +2 -1
  29. package/dist/core/tree/anchorSet.js.map +1 -1
  30. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  31. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  32. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +1 -1
  33. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -1
  34. package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -1
  35. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -1
  36. package/dist/core/tree/detachedFieldIndexCodecV1.js +3 -3
  37. package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -1
  38. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -1
  39. package/dist/core/tree/detachedFieldIndexCodecV2.js +2 -2
  40. package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -1
  41. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -1
  42. package/dist/core/tree/detachedFieldIndexFormatV1.js +3 -3
  43. package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -1
  44. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
  45. package/dist/core/tree/detachedFieldIndexFormatV2.js +4 -4
  46. package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
  47. package/dist/core/tree/visitDelta.d.ts +1 -1
  48. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  49. package/dist/core/tree/visitDelta.js +3 -2
  50. package/dist/core/tree/visitDelta.js.map +1 -1
  51. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  52. package/dist/core/tree/visitorUtils.js +59 -19
  53. package/dist/core/tree/visitorUtils.js.map +1 -1
  54. package/dist/feature-libraries/changeAtomIdBTree.d.ts +6 -1
  55. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  56. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  57. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +1 -1
  58. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  59. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  60. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  61. package/dist/feature-libraries/chunked-forest/chunkedForest.js +3 -1
  62. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  63. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -1
  64. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  65. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  66. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -1
  67. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  68. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  69. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +1 -1
  70. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  71. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  72. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
  73. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  74. package/dist/feature-libraries/chunked-forest/codec/codecs.js +1 -1
  75. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  76. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
  77. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  78. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +1 -0
  79. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  80. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  81. package/dist/feature-libraries/chunked-forest/codec/format.js +1 -1
  82. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  83. package/dist/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
  84. package/dist/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
  85. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +1 -1
  86. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  87. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +2 -2
  88. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  89. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  90. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +17 -15
  91. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  92. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +10 -52
  93. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  94. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +23 -64
  95. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  96. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  97. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  98. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  99. package/dist/feature-libraries/fieldKindIdentifiers.d.ts +9 -0
  100. package/dist/feature-libraries/fieldKindIdentifiers.d.ts.map +1 -0
  101. package/dist/feature-libraries/fieldKindIdentifiers.js +16 -0
  102. package/dist/feature-libraries/fieldKindIdentifiers.js.map +1 -0
  103. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  104. package/dist/feature-libraries/flex-tree/lazyField.js +8 -8
  105. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  106. package/dist/feature-libraries/flex-tree/observer.d.ts +1 -1
  107. package/dist/feature-libraries/flex-tree/observer.d.ts.map +1 -1
  108. package/dist/feature-libraries/flex-tree/observer.js.map +1 -1
  109. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  110. package/dist/feature-libraries/forest-summary/codec.js +1 -1
  111. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  112. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  113. package/dist/feature-libraries/forest-summary/forestSummarizer.js +6 -4
  114. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  115. package/dist/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  116. package/dist/feature-libraries/forest-summary/formatV1.js.map +1 -1
  117. package/dist/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  118. package/dist/feature-libraries/forest-summary/formatV2.js.map +1 -1
  119. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -4
  120. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  121. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -2
  122. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  123. package/dist/feature-libraries/forest-summary/summaryTypes.d.ts.map +1 -1
  124. package/dist/feature-libraries/forest-summary/summaryTypes.js.map +1 -1
  125. package/dist/feature-libraries/index.d.ts +1 -1
  126. package/dist/feature-libraries/index.d.ts.map +1 -1
  127. package/dist/feature-libraries/index.js.map +1 -1
  128. package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  129. package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
  130. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.d.ts.map +1 -1
  131. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
  132. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -1
  133. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  134. package/dist/feature-libraries/modular-schema/genericFieldKind.js +2 -2
  135. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  136. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +1 -1
  137. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  138. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +2 -0
  139. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  140. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  141. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  142. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  143. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  144. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +1 -1
  145. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  146. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +2 -2
  147. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  148. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +52 -43
  149. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  150. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +3 -3
  151. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  152. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  153. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  154. package/dist/feature-libraries/object-forest/objectForest.js +5 -3
  155. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  156. package/dist/feature-libraries/optional-field/index.d.ts +3 -3
  157. package/dist/feature-libraries/optional-field/index.d.ts.map +1 -1
  158. package/dist/feature-libraries/optional-field/index.js +4 -8
  159. package/dist/feature-libraries/optional-field/index.js.map +1 -1
  160. package/dist/feature-libraries/optional-field/optionalField.d.ts +10 -2
  161. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  162. package/dist/feature-libraries/optional-field/optionalField.js +13 -1
  163. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  164. package/dist/feature-libraries/optional-field/requiredField.d.ts +36 -0
  165. package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -0
  166. package/dist/feature-libraries/optional-field/requiredField.js +27 -0
  167. package/dist/feature-libraries/optional-field/requiredField.js.map +1 -0
  168. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts +1 -1
  169. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  170. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +7 -7
  171. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  172. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  173. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  174. package/dist/feature-libraries/schemaChecker.d.ts.map +1 -1
  175. package/dist/feature-libraries/schemaChecker.js +1 -1
  176. package/dist/feature-libraries/schemaChecker.js.map +1 -1
  177. package/dist/feature-libraries/sequence-field/index.d.ts +2 -14
  178. package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
  179. package/dist/feature-libraries/sequence-field/index.js +3 -30
  180. package/dist/feature-libraries/sequence-field/index.js.map +1 -1
  181. package/dist/feature-libraries/sequence-field/rebase.js +1 -1
  182. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  183. package/dist/feature-libraries/sequence-field/sequenceKind.d.ts +16 -0
  184. package/dist/feature-libraries/sequence-field/sequenceKind.d.ts.map +1 -0
  185. package/dist/feature-libraries/sequence-field/sequenceKind.js +24 -0
  186. package/dist/feature-libraries/sequence-field/sequenceKind.js.map +1 -0
  187. package/dist/index.d.ts +3 -2
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +5 -1
  190. package/dist/index.js.map +1 -1
  191. package/dist/packageVersion.d.ts +1 -1
  192. package/dist/packageVersion.js +1 -1
  193. package/dist/packageVersion.js.map +1 -1
  194. package/dist/shared-tree/independentView.d.ts.map +1 -1
  195. package/dist/shared-tree/independentView.js +7 -7
  196. package/dist/shared-tree/independentView.js.map +1 -1
  197. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  198. package/dist/shared-tree/schematizingTreeView.js +12 -10
  199. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  200. package/dist/shared-tree/sharedTree.d.ts +2 -2
  201. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  202. package/dist/shared-tree/sharedTree.js +6 -33
  203. package/dist/shared-tree/sharedTree.js.map +1 -1
  204. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  205. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  206. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts +31 -24
  207. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  208. package/dist/shared-tree/sharedTreeChangeEnricher.js +75 -58
  209. package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  210. package/dist/shared-tree/tree.d.ts.map +1 -1
  211. package/dist/shared-tree/tree.js +14 -14
  212. package/dist/shared-tree/tree.js.map +1 -1
  213. package/dist/shared-tree/treeAlpha.d.ts +1 -1
  214. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  215. package/dist/shared-tree/treeAlpha.js +77 -77
  216. package/dist/shared-tree/treeAlpha.js.map +1 -1
  217. package/dist/shared-tree/treeCheckout.d.ts +21 -6
  218. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  219. package/dist/shared-tree/treeCheckout.js +93 -37
  220. package/dist/shared-tree/treeCheckout.js.map +1 -1
  221. package/dist/shared-tree-core/branch.d.ts +1 -1
  222. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  223. package/dist/shared-tree-core/branch.js +5 -1
  224. package/dist/shared-tree-core/branch.js.map +1 -1
  225. package/dist/shared-tree-core/branchCommitEnricher.d.ts +18 -31
  226. package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  227. package/dist/shared-tree-core/branchCommitEnricher.js +24 -76
  228. package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
  229. package/dist/shared-tree-core/branchIdCodec.d.ts.map +1 -1
  230. package/dist/shared-tree-core/branchIdCodec.js.map +1 -1
  231. package/dist/shared-tree-core/changeEnricher.d.ts +8 -43
  232. package/dist/shared-tree-core/changeEnricher.d.ts.map +1 -1
  233. package/dist/shared-tree-core/changeEnricher.js +0 -13
  234. package/dist/shared-tree-core/changeEnricher.js.map +1 -1
  235. package/dist/shared-tree-core/defaultResubmitMachine.d.ts +4 -12
  236. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  237. package/dist/shared-tree-core/defaultResubmitMachine.js +26 -36
  238. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  239. package/dist/shared-tree-core/editManager.d.ts +1 -1
  240. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  241. package/dist/shared-tree-core/editManager.js +13 -7
  242. package/dist/shared-tree-core/editManager.js.map +1 -1
  243. package/dist/shared-tree-core/editManagerCodecs.d.ts +1 -1
  244. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  245. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  246. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +1 -1
  247. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  248. package/dist/shared-tree-core/editManagerCodecsCommons.js +1 -2
  249. package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  250. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  251. package/dist/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
  252. package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  253. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  254. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
  255. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  256. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  257. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  258. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  259. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  260. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
  261. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
  262. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
  263. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  264. package/dist/shared-tree-core/index.d.ts +2 -2
  265. package/dist/shared-tree-core/index.d.ts.map +1 -1
  266. package/dist/shared-tree-core/index.js +1 -3
  267. package/dist/shared-tree-core/index.js.map +1 -1
  268. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  269. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  270. package/dist/shared-tree-core/messageCodecV1ToV4.js +1 -1
  271. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  272. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts +1 -1
  273. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  274. package/dist/shared-tree-core/messageCodecVSharedBranches.js +2 -2
  275. package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  276. package/dist/shared-tree-core/messageCodecs.d.ts +2 -2
  277. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  278. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  279. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  280. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  281. package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  282. package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  283. package/dist/shared-tree-core/messageTypes.d.ts.map +1 -1
  284. package/dist/shared-tree-core/messageTypes.js.map +1 -1
  285. package/dist/shared-tree-core/sharedTreeCore.d.ts +8 -4
  286. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  287. package/dist/shared-tree-core/sharedTreeCore.js +13 -13
  288. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  289. package/dist/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  290. package/dist/shared-tree-core/versionedSummarizer.js +1 -1
  291. package/dist/shared-tree-core/versionedSummarizer.js.map +1 -1
  292. package/dist/simple-tree/api/configuration.d.ts +2 -2
  293. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  294. package/dist/simple-tree/api/configuration.js +14 -14
  295. package/dist/simple-tree/api/configuration.js.map +1 -1
  296. package/dist/simple-tree/api/create.d.ts +1 -1
  297. package/dist/simple-tree/api/create.d.ts.map +1 -1
  298. package/dist/simple-tree/api/create.js +7 -7
  299. package/dist/simple-tree/api/create.js.map +1 -1
  300. package/dist/simple-tree/api/dirtyIndex.d.ts +1 -1
  301. package/dist/simple-tree/api/dirtyIndex.d.ts.map +1 -1
  302. package/dist/simple-tree/api/dirtyIndex.js.map +1 -1
  303. package/dist/simple-tree/api/discrepancies.d.ts.map +1 -1
  304. package/dist/simple-tree/api/discrepancies.js +23 -23
  305. package/dist/simple-tree/api/discrepancies.js.map +1 -1
  306. package/dist/simple-tree/api/getJsonSchema.d.ts +1 -1
  307. package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  308. package/dist/simple-tree/api/getJsonSchema.js +1 -1
  309. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  310. package/dist/simple-tree/api/identifierIndex.d.ts +2 -2
  311. package/dist/simple-tree/api/identifierIndex.d.ts.map +1 -1
  312. package/dist/simple-tree/api/identifierIndex.js.map +1 -1
  313. package/dist/simple-tree/api/incrementalAllowedTypes.d.ts +1 -1
  314. package/dist/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -1
  315. package/dist/simple-tree/api/incrementalAllowedTypes.js +6 -6
  316. package/dist/simple-tree/api/incrementalAllowedTypes.js.map +1 -1
  317. package/dist/simple-tree/api/index.d.ts +1 -1
  318. package/dist/simple-tree/api/index.d.ts.map +1 -1
  319. package/dist/simple-tree/api/index.js +2 -1
  320. package/dist/simple-tree/api/index.js.map +1 -1
  321. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +1 -1
  322. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  323. package/dist/simple-tree/api/schemaCompatibilityTester.js +1 -1
  324. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  325. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +2 -2
  326. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  327. package/dist/simple-tree/api/schemaCreationUtilities.js +7 -7
  328. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  329. package/dist/simple-tree/api/schemaFactory.d.ts +2 -2
  330. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  331. package/dist/simple-tree/api/schemaFactory.js +7 -7
  332. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  333. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +6 -6
  334. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  335. package/dist/simple-tree/api/schemaFactoryAlpha.js +2 -2
  336. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  337. package/dist/simple-tree/api/schemaFactoryBeta.d.ts +2 -2
  338. package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  339. package/dist/simple-tree/api/schemaFactoryBeta.js +2 -1
  340. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  341. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
  342. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  343. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  344. package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  345. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  346. package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -1
  347. package/dist/simple-tree/api/schemaStatics.js.map +1 -1
  348. package/dist/simple-tree/api/simpleSchemaCodec.d.ts +1 -1
  349. package/dist/simple-tree/api/simpleSchemaCodec.d.ts.map +1 -1
  350. package/dist/simple-tree/api/simpleSchemaCodec.js +17 -17
  351. package/dist/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  352. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts +2 -2
  353. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  354. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +6 -6
  355. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  356. package/dist/simple-tree/api/simpleTreeIndex.d.ts +1 -1
  357. package/dist/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
  358. package/dist/simple-tree/api/simpleTreeIndex.js +1 -1
  359. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  360. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts +244 -0
  361. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  362. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +298 -2
  363. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  364. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  365. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  366. package/dist/simple-tree/api/tree.d.ts +5 -3
  367. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  368. package/dist/simple-tree/api/tree.js.map +1 -1
  369. package/dist/simple-tree/api/treeBeta.d.ts +1 -1
  370. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  371. package/dist/simple-tree/api/treeBeta.js +2 -2
  372. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  373. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  374. package/dist/simple-tree/api/treeNodeApi.js +4 -4
  375. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  376. package/dist/simple-tree/api/typesUnsafe.d.ts +1 -1
  377. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  378. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  379. package/dist/simple-tree/api/verboseTree.d.ts +1 -1
  380. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  381. package/dist/simple-tree/api/verboseTree.js +22 -22
  382. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  383. package/dist/simple-tree/core/allowedTypes.d.ts +1 -1
  384. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  385. package/dist/simple-tree/core/allowedTypes.js +7 -7
  386. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  387. package/dist/simple-tree/core/context.d.ts.map +1 -1
  388. package/dist/simple-tree/core/context.js.map +1 -1
  389. package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
  390. package/dist/simple-tree/core/treeNode.js +1 -1
  391. package/dist/simple-tree/core/treeNode.js.map +1 -1
  392. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  393. package/dist/simple-tree/core/treeNodeKernel.js +7 -5
  394. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  395. package/dist/simple-tree/core/treeNodeSchema.d.ts +5 -5
  396. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  397. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  398. package/dist/simple-tree/core/treeNodeValid.d.ts +3 -3
  399. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  400. package/dist/simple-tree/core/treeNodeValid.js +2 -2
  401. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  402. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
  403. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  404. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  405. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  406. package/dist/simple-tree/core/withType.js.map +1 -1
  407. package/dist/simple-tree/createContext.d.ts.map +1 -1
  408. package/dist/simple-tree/createContext.js.map +1 -1
  409. package/dist/simple-tree/fieldSchema.d.ts +1 -1
  410. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  411. package/dist/simple-tree/fieldSchema.js.map +1 -1
  412. package/dist/simple-tree/index.d.ts +1 -1
  413. package/dist/simple-tree/index.d.ts.map +1 -1
  414. package/dist/simple-tree/index.js +3 -2
  415. package/dist/simple-tree/index.js.map +1 -1
  416. package/dist/simple-tree/leafNodeSchema.d.ts +1 -1
  417. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  418. package/dist/simple-tree/leafNodeSchema.js +15 -15
  419. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  420. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +1 -1
  421. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  422. package/dist/simple-tree/node-kinds/array/arrayNode.js +46 -46
  423. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  424. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +1 -1
  425. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
  426. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
  427. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
  428. package/dist/simple-tree/node-kinds/common.js.map +1 -1
  429. package/dist/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
  430. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  431. package/dist/simple-tree/node-kinds/map/mapNode.js +24 -24
  432. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  433. package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts +1 -1
  434. package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
  435. package/dist/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
  436. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
  437. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  438. package/dist/simple-tree/node-kinds/object/objectNode.js +9 -9
  439. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  440. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +3 -3
  441. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  442. package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  443. package/dist/simple-tree/node-kinds/record/recordNode.d.ts +1 -1
  444. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  445. package/dist/simple-tree/node-kinds/record/recordNode.js +34 -34
  446. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  447. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +1 -1
  448. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
  449. package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  450. package/dist/simple-tree/prepareForInsertion.d.ts +2 -2
  451. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  452. package/dist/simple-tree/prepareForInsertion.js +13 -13
  453. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  454. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  455. package/dist/simple-tree/simpleSchema.js.map +1 -1
  456. package/dist/simple-tree/treeSchema.d.ts.map +1 -1
  457. package/dist/simple-tree/treeSchema.js.map +1 -1
  458. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -1
  459. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  460. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +10 -10
  461. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  462. package/dist/tableSchema.d.ts.map +1 -1
  463. package/dist/tableSchema.js +22 -21
  464. package/dist/tableSchema.js.map +1 -1
  465. package/dist/text/index.d.ts +7 -0
  466. package/dist/text/index.d.ts.map +1 -0
  467. package/dist/text/index.js +12 -0
  468. package/dist/text/index.js.map +1 -0
  469. package/dist/text/textDomain.d.ts +146 -0
  470. package/dist/text/textDomain.d.ts.map +1 -0
  471. package/dist/text/textDomain.js +122 -0
  472. package/dist/text/textDomain.js.map +1 -0
  473. package/dist/text/textDomainFormatted.d.ts +572 -0
  474. package/dist/text/textDomainFormatted.d.ts.map +1 -0
  475. package/dist/text/textDomainFormatted.js +183 -0
  476. package/dist/text/textDomainFormatted.js.map +1 -0
  477. package/dist/treeFactory.d.ts.map +1 -1
  478. package/dist/treeFactory.js +9 -9
  479. package/dist/treeFactory.js.map +1 -1
  480. package/dist/util/bTreeUtils.d.ts +12 -4
  481. package/dist/util/bTreeUtils.d.ts.map +1 -1
  482. package/dist/util/bTreeUtils.js +14 -18
  483. package/dist/util/bTreeUtils.js.map +1 -1
  484. package/dist/util/nestedMap.js +12 -12
  485. package/dist/util/nestedMap.js.map +1 -1
  486. package/dist/util/readSnapshotBlob.d.ts +1 -1
  487. package/dist/util/readSnapshotBlob.d.ts.map +1 -1
  488. package/dist/util/readSnapshotBlob.js.map +1 -1
  489. package/docs/user-facing/merge-semantics.md +3 -2
  490. package/eslint.config.mts +8 -36
  491. package/lib/alpha.d.ts +5 -0
  492. package/lib/codec/codec.d.ts +2 -2
  493. package/lib/codec/codec.d.ts.map +1 -1
  494. package/lib/codec/codec.js +1 -1
  495. package/lib/codec/codec.js.map +1 -1
  496. package/lib/codec/versioned/codec.d.ts +1 -1
  497. package/lib/codec/versioned/codec.d.ts.map +1 -1
  498. package/lib/codec/versioned/codec.js +2 -2
  499. package/lib/codec/versioned/codec.js.map +1 -1
  500. package/lib/core/index.d.ts +1 -1
  501. package/lib/core/index.d.ts.map +1 -1
  502. package/lib/core/index.js.map +1 -1
  503. package/lib/core/rebase/index.d.ts +1 -1
  504. package/lib/core/rebase/index.d.ts.map +1 -1
  505. package/lib/core/rebase/index.js.map +1 -1
  506. package/lib/core/rebase/types.d.ts +44 -7
  507. package/lib/core/rebase/types.d.ts.map +1 -1
  508. package/lib/core/rebase/types.js.map +1 -1
  509. package/lib/core/rebase/utils.d.ts.map +1 -1
  510. package/lib/core/rebase/utils.js +5 -1
  511. package/lib/core/rebase/utils.js.map +1 -1
  512. package/lib/core/schema-stored/formatV2.d.ts.map +1 -1
  513. package/lib/core/schema-stored/formatV2.js +1 -1
  514. package/lib/core/schema-stored/formatV2.js.map +1 -1
  515. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  516. package/lib/core/tree/anchorSet.js +2 -1
  517. package/lib/core/tree/anchorSet.js.map +1 -1
  518. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  519. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  520. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +1 -1
  521. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -1
  522. package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -1
  523. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -1
  524. package/lib/core/tree/detachedFieldIndexCodecV1.js +1 -1
  525. package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -1
  526. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -1
  527. package/lib/core/tree/detachedFieldIndexCodecV2.js +2 -2
  528. package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -1
  529. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -1
  530. package/lib/core/tree/detachedFieldIndexFormatV1.js +2 -2
  531. package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -1
  532. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
  533. package/lib/core/tree/detachedFieldIndexFormatV2.js +2 -2
  534. package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
  535. package/lib/core/tree/visitDelta.d.ts +1 -1
  536. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  537. package/lib/core/tree/visitDelta.js +3 -2
  538. package/lib/core/tree/visitDelta.js.map +1 -1
  539. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  540. package/lib/core/tree/visitorUtils.js +59 -19
  541. package/lib/core/tree/visitorUtils.js.map +1 -1
  542. package/lib/feature-libraries/changeAtomIdBTree.d.ts +6 -1
  543. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  544. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  545. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +1 -1
  546. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  547. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  548. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  549. package/lib/feature-libraries/chunked-forest/chunkedForest.js +3 -1
  550. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  551. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -1
  552. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  553. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  554. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -1
  555. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  556. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  557. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +1 -1
  558. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  559. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  560. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
  561. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  562. package/lib/feature-libraries/chunked-forest/codec/codecs.js +1 -1
  563. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  564. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
  565. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  566. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +1 -0
  567. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  568. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  569. package/lib/feature-libraries/chunked-forest/codec/format.js +1 -1
  570. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  571. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
  572. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
  573. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +1 -1
  574. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  575. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +2 -2
  576. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  577. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  578. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +5 -3
  579. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  580. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +10 -52
  581. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  582. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +4 -45
  583. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  584. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  585. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  586. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  587. package/lib/feature-libraries/fieldKindIdentifiers.d.ts +9 -0
  588. package/lib/feature-libraries/fieldKindIdentifiers.d.ts.map +1 -0
  589. package/lib/feature-libraries/fieldKindIdentifiers.js +13 -0
  590. package/lib/feature-libraries/fieldKindIdentifiers.js.map +1 -0
  591. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  592. package/lib/feature-libraries/flex-tree/lazyField.js +1 -1
  593. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  594. package/lib/feature-libraries/flex-tree/observer.d.ts +1 -1
  595. package/lib/feature-libraries/flex-tree/observer.d.ts.map +1 -1
  596. package/lib/feature-libraries/flex-tree/observer.js.map +1 -1
  597. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  598. package/lib/feature-libraries/forest-summary/codec.js +1 -1
  599. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  600. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  601. package/lib/feature-libraries/forest-summary/forestSummarizer.js +6 -4
  602. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  603. package/lib/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  604. package/lib/feature-libraries/forest-summary/formatV1.js.map +1 -1
  605. package/lib/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  606. package/lib/feature-libraries/forest-summary/formatV2.js.map +1 -1
  607. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -4
  608. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  609. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -2
  610. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  611. package/lib/feature-libraries/forest-summary/summaryTypes.d.ts.map +1 -1
  612. package/lib/feature-libraries/forest-summary/summaryTypes.js.map +1 -1
  613. package/lib/feature-libraries/index.d.ts +1 -1
  614. package/lib/feature-libraries/index.d.ts.map +1 -1
  615. package/lib/feature-libraries/index.js.map +1 -1
  616. package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  617. package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
  618. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.d.ts.map +1 -1
  619. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
  620. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -1
  621. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  622. package/lib/feature-libraries/modular-schema/genericFieldKind.js +2 -2
  623. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  624. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +1 -1
  625. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  626. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +2 -0
  627. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  628. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  629. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  630. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  631. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  632. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +1 -1
  633. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  634. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +2 -2
  635. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  636. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +52 -43
  637. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  638. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +3 -3
  639. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  640. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  641. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  642. package/lib/feature-libraries/object-forest/objectForest.js +5 -3
  643. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  644. package/lib/feature-libraries/optional-field/index.d.ts +3 -3
  645. package/lib/feature-libraries/optional-field/index.d.ts.map +1 -1
  646. package/lib/feature-libraries/optional-field/index.js +2 -2
  647. package/lib/feature-libraries/optional-field/index.js.map +1 -1
  648. package/lib/feature-libraries/optional-field/optionalField.d.ts +10 -2
  649. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  650. package/lib/feature-libraries/optional-field/optionalField.js +14 -2
  651. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  652. package/lib/feature-libraries/optional-field/requiredField.d.ts +36 -0
  653. package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -0
  654. package/lib/feature-libraries/optional-field/requiredField.js +24 -0
  655. package/lib/feature-libraries/optional-field/requiredField.js.map +1 -0
  656. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts +1 -1
  657. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  658. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +1 -1
  659. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  660. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  661. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  662. package/lib/feature-libraries/schemaChecker.d.ts.map +1 -1
  663. package/lib/feature-libraries/schemaChecker.js +1 -1
  664. package/lib/feature-libraries/schemaChecker.js.map +1 -1
  665. package/lib/feature-libraries/sequence-field/index.d.ts +2 -14
  666. package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
  667. package/lib/feature-libraries/sequence-field/index.js +1 -13
  668. package/lib/feature-libraries/sequence-field/index.js.map +1 -1
  669. package/lib/feature-libraries/sequence-field/rebase.js +1 -1
  670. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  671. package/lib/feature-libraries/sequence-field/sequenceKind.d.ts +16 -0
  672. package/lib/feature-libraries/sequence-field/sequenceKind.d.ts.map +1 -0
  673. package/lib/feature-libraries/sequence-field/sequenceKind.js +21 -0
  674. package/lib/feature-libraries/sequence-field/sequenceKind.js.map +1 -0
  675. package/lib/index.d.ts +3 -2
  676. package/lib/index.d.ts.map +1 -1
  677. package/lib/index.js +2 -1
  678. package/lib/index.js.map +1 -1
  679. package/lib/packageVersion.d.ts +1 -1
  680. package/lib/packageVersion.js +1 -1
  681. package/lib/packageVersion.js.map +1 -1
  682. package/lib/shared-tree/independentView.d.ts.map +1 -1
  683. package/lib/shared-tree/independentView.js +3 -3
  684. package/lib/shared-tree/independentView.js.map +1 -1
  685. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  686. package/lib/shared-tree/schematizingTreeView.js +12 -10
  687. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  688. package/lib/shared-tree/sharedTree.d.ts +2 -2
  689. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  690. package/lib/shared-tree/sharedTree.js +6 -33
  691. package/lib/shared-tree/sharedTree.js.map +1 -1
  692. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  693. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  694. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts +31 -24
  695. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  696. package/lib/shared-tree/sharedTreeChangeEnricher.js +73 -55
  697. package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  698. package/lib/shared-tree/tree.d.ts.map +1 -1
  699. package/lib/shared-tree/tree.js +7 -7
  700. package/lib/shared-tree/tree.js.map +1 -1
  701. package/lib/shared-tree/treeAlpha.d.ts +1 -1
  702. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  703. package/lib/shared-tree/treeAlpha.js +3 -3
  704. package/lib/shared-tree/treeAlpha.js.map +1 -1
  705. package/lib/shared-tree/treeCheckout.d.ts +21 -6
  706. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  707. package/lib/shared-tree/treeCheckout.js +67 -11
  708. package/lib/shared-tree/treeCheckout.js.map +1 -1
  709. package/lib/shared-tree-core/branch.d.ts +1 -1
  710. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  711. package/lib/shared-tree-core/branch.js +5 -1
  712. package/lib/shared-tree-core/branch.js.map +1 -1
  713. package/lib/shared-tree-core/branchCommitEnricher.d.ts +18 -31
  714. package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  715. package/lib/shared-tree-core/branchCommitEnricher.js +24 -76
  716. package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
  717. package/lib/shared-tree-core/branchIdCodec.d.ts.map +1 -1
  718. package/lib/shared-tree-core/branchIdCodec.js.map +1 -1
  719. package/lib/shared-tree-core/changeEnricher.d.ts +8 -43
  720. package/lib/shared-tree-core/changeEnricher.d.ts.map +1 -1
  721. package/lib/shared-tree-core/changeEnricher.js +1 -11
  722. package/lib/shared-tree-core/changeEnricher.js.map +1 -1
  723. package/lib/shared-tree-core/defaultResubmitMachine.d.ts +4 -12
  724. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  725. package/lib/shared-tree-core/defaultResubmitMachine.js +28 -38
  726. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  727. package/lib/shared-tree-core/editManager.d.ts +1 -1
  728. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  729. package/lib/shared-tree-core/editManager.js +13 -7
  730. package/lib/shared-tree-core/editManager.js.map +1 -1
  731. package/lib/shared-tree-core/editManagerCodecs.d.ts +1 -1
  732. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  733. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  734. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +1 -1
  735. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  736. package/lib/shared-tree-core/editManagerCodecsCommons.js +1 -2
  737. package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  738. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  739. package/lib/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
  740. package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  741. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  742. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
  743. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  744. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  745. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  746. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  747. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  748. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
  749. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
  750. package/lib/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
  751. package/lib/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  752. package/lib/shared-tree-core/index.d.ts +2 -2
  753. package/lib/shared-tree-core/index.d.ts.map +1 -1
  754. package/lib/shared-tree-core/index.js +0 -1
  755. package/lib/shared-tree-core/index.js.map +1 -1
  756. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  757. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  758. package/lib/shared-tree-core/messageCodecV1ToV4.js +1 -1
  759. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  760. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts +1 -1
  761. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  762. package/lib/shared-tree-core/messageCodecVSharedBranches.js +2 -2
  763. package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  764. package/lib/shared-tree-core/messageCodecs.d.ts +2 -2
  765. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  766. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  767. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  768. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  769. package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  770. package/lib/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  771. package/lib/shared-tree-core/messageTypes.d.ts.map +1 -1
  772. package/lib/shared-tree-core/messageTypes.js.map +1 -1
  773. package/lib/shared-tree-core/sharedTreeCore.d.ts +8 -4
  774. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  775. package/lib/shared-tree-core/sharedTreeCore.js +14 -14
  776. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  777. package/lib/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  778. package/lib/shared-tree-core/versionedSummarizer.js +1 -1
  779. package/lib/shared-tree-core/versionedSummarizer.js.map +1 -1
  780. package/lib/simple-tree/api/configuration.d.ts +2 -2
  781. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  782. package/lib/simple-tree/api/configuration.js +4 -4
  783. package/lib/simple-tree/api/configuration.js.map +1 -1
  784. package/lib/simple-tree/api/create.d.ts +1 -1
  785. package/lib/simple-tree/api/create.d.ts.map +1 -1
  786. package/lib/simple-tree/api/create.js +1 -1
  787. package/lib/simple-tree/api/create.js.map +1 -1
  788. package/lib/simple-tree/api/dirtyIndex.d.ts +1 -1
  789. package/lib/simple-tree/api/dirtyIndex.d.ts.map +1 -1
  790. package/lib/simple-tree/api/dirtyIndex.js.map +1 -1
  791. package/lib/simple-tree/api/discrepancies.d.ts.map +1 -1
  792. package/lib/simple-tree/api/discrepancies.js +3 -3
  793. package/lib/simple-tree/api/discrepancies.js.map +1 -1
  794. package/lib/simple-tree/api/getJsonSchema.d.ts +1 -1
  795. package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  796. package/lib/simple-tree/api/getJsonSchema.js +1 -1
  797. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  798. package/lib/simple-tree/api/identifierIndex.d.ts +2 -2
  799. package/lib/simple-tree/api/identifierIndex.d.ts.map +1 -1
  800. package/lib/simple-tree/api/identifierIndex.js.map +1 -1
  801. package/lib/simple-tree/api/incrementalAllowedTypes.d.ts +1 -1
  802. package/lib/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -1
  803. package/lib/simple-tree/api/incrementalAllowedTypes.js +3 -3
  804. package/lib/simple-tree/api/incrementalAllowedTypes.js.map +1 -1
  805. package/lib/simple-tree/api/index.d.ts +1 -1
  806. package/lib/simple-tree/api/index.d.ts.map +1 -1
  807. package/lib/simple-tree/api/index.js +1 -1
  808. package/lib/simple-tree/api/index.js.map +1 -1
  809. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +1 -1
  810. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  811. package/lib/simple-tree/api/schemaCompatibilityTester.js +1 -1
  812. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  813. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +2 -2
  814. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  815. package/lib/simple-tree/api/schemaCreationUtilities.js +1 -1
  816. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  817. package/lib/simple-tree/api/schemaFactory.d.ts +2 -2
  818. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  819. package/lib/simple-tree/api/schemaFactory.js +2 -2
  820. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  821. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +6 -6
  822. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  823. package/lib/simple-tree/api/schemaFactoryAlpha.js +2 -2
  824. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  825. package/lib/simple-tree/api/schemaFactoryBeta.d.ts +2 -2
  826. package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  827. package/lib/simple-tree/api/schemaFactoryBeta.js +2 -1
  828. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  829. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
  830. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  831. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  832. package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  833. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  834. package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -1
  835. package/lib/simple-tree/api/schemaStatics.js.map +1 -1
  836. package/lib/simple-tree/api/simpleSchemaCodec.d.ts +1 -1
  837. package/lib/simple-tree/api/simpleSchemaCodec.d.ts.map +1 -1
  838. package/lib/simple-tree/api/simpleSchemaCodec.js +3 -3
  839. package/lib/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  840. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts +2 -2
  841. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  842. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +6 -6
  843. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  844. package/lib/simple-tree/api/simpleTreeIndex.d.ts +1 -1
  845. package/lib/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
  846. package/lib/simple-tree/api/simpleTreeIndex.js +1 -1
  847. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  848. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts +244 -0
  849. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  850. package/lib/simple-tree/api/snapshotCompatibilityChecker.js +271 -1
  851. package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  852. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  853. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  854. package/lib/simple-tree/api/tree.d.ts +5 -3
  855. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  856. package/lib/simple-tree/api/tree.js.map +1 -1
  857. package/lib/simple-tree/api/treeBeta.d.ts +1 -1
  858. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  859. package/lib/simple-tree/api/treeBeta.js +2 -2
  860. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  861. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  862. package/lib/simple-tree/api/treeNodeApi.js +4 -4
  863. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  864. package/lib/simple-tree/api/typesUnsafe.d.ts +1 -1
  865. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  866. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  867. package/lib/simple-tree/api/verboseTree.d.ts +1 -1
  868. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  869. package/lib/simple-tree/api/verboseTree.js +3 -3
  870. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  871. package/lib/simple-tree/core/allowedTypes.d.ts +1 -1
  872. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  873. package/lib/simple-tree/core/allowedTypes.js +2 -2
  874. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  875. package/lib/simple-tree/core/context.d.ts.map +1 -1
  876. package/lib/simple-tree/core/context.js.map +1 -1
  877. package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
  878. package/lib/simple-tree/core/treeNode.js +1 -1
  879. package/lib/simple-tree/core/treeNode.js.map +1 -1
  880. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  881. package/lib/simple-tree/core/treeNodeKernel.js +7 -5
  882. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  883. package/lib/simple-tree/core/treeNodeSchema.d.ts +5 -5
  884. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  885. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  886. package/lib/simple-tree/core/treeNodeValid.d.ts +3 -3
  887. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  888. package/lib/simple-tree/core/treeNodeValid.js +2 -2
  889. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  890. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +1 -1
  891. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  892. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  893. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  894. package/lib/simple-tree/core/withType.js.map +1 -1
  895. package/lib/simple-tree/createContext.d.ts.map +1 -1
  896. package/lib/simple-tree/createContext.js.map +1 -1
  897. package/lib/simple-tree/fieldSchema.d.ts +1 -1
  898. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  899. package/lib/simple-tree/fieldSchema.js.map +1 -1
  900. package/lib/simple-tree/index.d.ts +1 -1
  901. package/lib/simple-tree/index.d.ts.map +1 -1
  902. package/lib/simple-tree/index.js +1 -1
  903. package/lib/simple-tree/index.js.map +1 -1
  904. package/lib/simple-tree/leafNodeSchema.d.ts +1 -1
  905. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  906. package/lib/simple-tree/leafNodeSchema.js +2 -2
  907. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  908. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +1 -1
  909. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  910. package/lib/simple-tree/node-kinds/array/arrayNode.js +5 -5
  911. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  912. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +1 -1
  913. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
  914. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
  915. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
  916. package/lib/simple-tree/node-kinds/common.js.map +1 -1
  917. package/lib/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
  918. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  919. package/lib/simple-tree/node-kinds/map/mapNode.js +6 -6
  920. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  921. package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts +1 -1
  922. package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
  923. package/lib/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
  924. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
  925. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  926. package/lib/simple-tree/node-kinds/object/objectNode.js +3 -3
  927. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  928. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +3 -3
  929. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  930. package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  931. package/lib/simple-tree/node-kinds/record/recordNode.d.ts +1 -1
  932. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  933. package/lib/simple-tree/node-kinds/record/recordNode.js +4 -4
  934. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  935. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +1 -1
  936. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
  937. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  938. package/lib/simple-tree/prepareForInsertion.d.ts +2 -2
  939. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  940. package/lib/simple-tree/prepareForInsertion.js +4 -4
  941. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  942. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  943. package/lib/simple-tree/simpleSchema.js.map +1 -1
  944. package/lib/simple-tree/treeSchema.d.ts.map +1 -1
  945. package/lib/simple-tree/treeSchema.js.map +1 -1
  946. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -1
  947. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  948. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +2 -2
  949. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  950. package/lib/tableSchema.d.ts.map +1 -1
  951. package/lib/tableSchema.js +2 -1
  952. package/lib/tableSchema.js.map +1 -1
  953. package/lib/text/index.d.ts +7 -0
  954. package/lib/text/index.d.ts.map +1 -0
  955. package/lib/text/index.js +7 -0
  956. package/lib/text/index.js.map +1 -0
  957. package/lib/text/textDomain.d.ts +146 -0
  958. package/lib/text/textDomain.d.ts.map +1 -0
  959. package/lib/text/textDomain.js +118 -0
  960. package/lib/text/textDomain.js.map +1 -0
  961. package/lib/text/textDomainFormatted.d.ts +572 -0
  962. package/lib/text/textDomainFormatted.d.ts.map +1 -0
  963. package/lib/text/textDomainFormatted.js +180 -0
  964. package/lib/text/textDomainFormatted.js.map +1 -0
  965. package/lib/treeFactory.d.ts.map +1 -1
  966. package/lib/treeFactory.js +2 -2
  967. package/lib/treeFactory.js.map +1 -1
  968. package/lib/util/bTreeUtils.d.ts +12 -4
  969. package/lib/util/bTreeUtils.d.ts.map +1 -1
  970. package/lib/util/bTreeUtils.js +15 -19
  971. package/lib/util/bTreeUtils.js.map +1 -1
  972. package/lib/util/nestedMap.js +12 -12
  973. package/lib/util/nestedMap.js.map +1 -1
  974. package/lib/util/readSnapshotBlob.d.ts +1 -1
  975. package/lib/util/readSnapshotBlob.d.ts.map +1 -1
  976. package/lib/util/readSnapshotBlob.js.map +1 -1
  977. package/package.json +25 -25
  978. package/src/codec/codec.ts +10 -7
  979. package/src/codec/versioned/codec.ts +3 -3
  980. package/src/core/index.ts +2 -0
  981. package/src/core/rebase/index.ts +2 -0
  982. package/src/core/rebase/types.ts +57 -20
  983. package/src/core/rebase/utils.ts +8 -4
  984. package/src/core/schema-stored/formatV2.ts +2 -1
  985. package/src/core/tree/anchorSet.ts +2 -1
  986. package/src/core/tree/detachedFieldIndex.ts +1 -1
  987. package/src/core/tree/detachedFieldIndexCodecCommon.ts +2 -1
  988. package/src/core/tree/detachedFieldIndexCodecV1.ts +2 -2
  989. package/src/core/tree/detachedFieldIndexCodecV2.ts +3 -3
  990. package/src/core/tree/detachedFieldIndexFormatV1.ts +3 -2
  991. package/src/core/tree/detachedFieldIndexFormatV2.ts +3 -2
  992. package/src/core/tree/visitDelta.ts +8 -5
  993. package/src/core/tree/visitorUtils.ts +57 -20
  994. package/src/feature-libraries/changeAtomIdBTree.ts +9 -1
  995. package/src/feature-libraries/chunked-forest/chunkTree.ts +1 -1
  996. package/src/feature-libraries/chunked-forest/chunkedForest.ts +3 -1
  997. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +1 -1
  998. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +1 -1
  999. package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +1 -1
  1000. package/src/feature-libraries/chunked-forest/codec/codecs.ts +2 -2
  1001. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +2 -1
  1002. package/src/feature-libraries/chunked-forest/codec/format.ts +1 -1
  1003. package/src/feature-libraries/chunked-forest/codec/formatGeneric.ts +1 -0
  1004. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +3 -3
  1005. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +5 -10
  1006. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +22 -110
  1007. package/src/feature-libraries/default-schema/index.ts +0 -5
  1008. package/src/feature-libraries/fieldKindIdentifiers.ts +16 -0
  1009. package/src/feature-libraries/flex-tree/lazyField.ts +1 -1
  1010. package/src/feature-libraries/flex-tree/observer.ts +3 -1
  1011. package/src/feature-libraries/forest-summary/codec.ts +1 -1
  1012. package/src/feature-libraries/forest-summary/forestSummarizer.ts +9 -7
  1013. package/src/feature-libraries/forest-summary/formatV1.ts +1 -0
  1014. package/src/feature-libraries/forest-summary/formatV2.ts +1 -0
  1015. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +9 -7
  1016. package/src/feature-libraries/forest-summary/summaryTypes.ts +1 -0
  1017. package/src/feature-libraries/index.ts +0 -5
  1018. package/src/feature-libraries/mapTreeCursor.ts +1 -1
  1019. package/src/feature-libraries/modular-schema/fieldKindConfiguration.ts +1 -0
  1020. package/src/feature-libraries/modular-schema/genericFieldKind.ts +2 -2
  1021. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +3 -1
  1022. package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +2 -2
  1023. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +3 -2
  1024. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +83 -74
  1025. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +3 -3
  1026. package/src/feature-libraries/object-forest/objectForest.ts +5 -3
  1027. package/src/feature-libraries/optional-field/index.ts +6 -8
  1028. package/src/feature-libraries/optional-field/optionalField.ts +31 -0
  1029. package/src/feature-libraries/optional-field/requiredField.ts +62 -0
  1030. package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +1 -1
  1031. package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +1 -0
  1032. package/src/feature-libraries/schemaChecker.ts +3 -2
  1033. package/src/feature-libraries/sequence-field/index.ts +2 -51
  1034. package/src/feature-libraries/sequence-field/rebase.ts +1 -1
  1035. package/src/feature-libraries/sequence-field/sequenceKind.ts +40 -0
  1036. package/src/index.ts +7 -0
  1037. package/src/packageVersion.ts +1 -1
  1038. package/src/shared-tree/independentView.ts +4 -3
  1039. package/src/shared-tree/schematizingTreeView.ts +17 -13
  1040. package/src/shared-tree/sharedTree.ts +9 -46
  1041. package/src/shared-tree/sharedTreeChangeCodecs.ts +1 -0
  1042. package/src/shared-tree/sharedTreeChangeEnricher.ts +87 -66
  1043. package/src/shared-tree/tree.ts +10 -10
  1044. package/src/shared-tree/treeAlpha.ts +26 -25
  1045. package/src/shared-tree/treeCheckout.ts +119 -23
  1046. package/src/shared-tree-core/branch.ts +9 -5
  1047. package/src/shared-tree-core/branchCommitEnricher.ts +25 -77
  1048. package/src/shared-tree-core/branchIdCodec.ts +1 -0
  1049. package/src/shared-tree-core/changeEnricher.ts +8 -52
  1050. package/src/shared-tree-core/defaultResubmitMachine.ts +39 -51
  1051. package/src/shared-tree-core/editManager.ts +32 -32
  1052. package/src/shared-tree-core/editManagerCodecs.ts +2 -2
  1053. package/src/shared-tree-core/editManagerCodecsCommons.ts +7 -6
  1054. package/src/shared-tree-core/editManagerCodecsV1toV4.ts +1 -1
  1055. package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +2 -2
  1056. package/src/shared-tree-core/editManagerFormatCommons.ts +1 -0
  1057. package/src/shared-tree-core/editManagerFormatV1toV4.ts +1 -0
  1058. package/src/shared-tree-core/editManagerFormatVSharedBranches.ts +3 -2
  1059. package/src/shared-tree-core/index.ts +2 -5
  1060. package/src/shared-tree-core/messageCodecV1ToV4.ts +3 -3
  1061. package/src/shared-tree-core/messageCodecVSharedBranches.ts +4 -4
  1062. package/src/shared-tree-core/messageCodecs.ts +2 -2
  1063. package/src/shared-tree-core/messageFormatV1ToV4.ts +1 -0
  1064. package/src/shared-tree-core/messageFormatVSharedBranches.ts +1 -0
  1065. package/src/shared-tree-core/messageTypes.ts +1 -0
  1066. package/src/shared-tree-core/sharedTreeCore.ts +27 -28
  1067. package/src/shared-tree-core/versionedSummarizer.ts +3 -1
  1068. package/src/simple-tree/api/configuration.ts +9 -9
  1069. package/src/simple-tree/api/create.ts +7 -6
  1070. package/src/simple-tree/api/dirtyIndex.ts +4 -2
  1071. package/src/simple-tree/api/discrepancies.ts +9 -8
  1072. package/src/simple-tree/api/getJsonSchema.ts +4 -3
  1073. package/src/simple-tree/api/identifierIndex.ts +4 -2
  1074. package/src/simple-tree/api/incrementalAllowedTypes.ts +6 -5
  1075. package/src/simple-tree/api/index.ts +3 -0
  1076. package/src/simple-tree/api/schemaCompatibilityTester.ts +3 -3
  1077. package/src/simple-tree/api/schemaCreationUtilities.ts +4 -3
  1078. package/src/simple-tree/api/schemaFactory.ts +16 -17
  1079. package/src/simple-tree/api/schemaFactoryAlpha.ts +22 -22
  1080. package/src/simple-tree/api/schemaFactoryBeta.ts +18 -16
  1081. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -1
  1082. package/src/simple-tree/api/schemaFromSimple.ts +1 -1
  1083. package/src/simple-tree/api/schemaStatics.ts +2 -0
  1084. package/src/simple-tree/api/simpleSchemaCodec.ts +12 -11
  1085. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +24 -22
  1086. package/src/simple-tree/api/simpleTreeIndex.ts +6 -4
  1087. package/src/simple-tree/api/snapshotCompatibilityChecker.ts +504 -1
  1088. package/src/simple-tree/api/storedSchema.ts +2 -1
  1089. package/src/simple-tree/api/tree.ts +5 -3
  1090. package/src/simple-tree/api/treeBeta.ts +3 -3
  1091. package/src/simple-tree/api/treeNodeApi.ts +14 -13
  1092. package/src/simple-tree/api/typesUnsafe.ts +7 -8
  1093. package/src/simple-tree/api/verboseTree.ts +6 -5
  1094. package/src/simple-tree/core/allowedTypes.ts +4 -4
  1095. package/src/simple-tree/core/context.ts +1 -1
  1096. package/src/simple-tree/core/treeNode.ts +1 -1
  1097. package/src/simple-tree/core/treeNodeKernel.ts +7 -5
  1098. package/src/simple-tree/core/treeNodeSchema.ts +7 -6
  1099. package/src/simple-tree/core/treeNodeValid.ts +9 -9
  1100. package/src/simple-tree/core/unhydratedFlexTree.ts +1 -1
  1101. package/src/simple-tree/core/withType.ts +3 -2
  1102. package/src/simple-tree/createContext.ts +1 -0
  1103. package/src/simple-tree/fieldSchema.ts +1 -2
  1104. package/src/simple-tree/index.ts +3 -0
  1105. package/src/simple-tree/leafNodeSchema.ts +3 -3
  1106. package/src/simple-tree/node-kinds/array/arrayNode.ts +17 -16
  1107. package/src/simple-tree/node-kinds/array/arrayNodeTypes.ts +2 -2
  1108. package/src/simple-tree/node-kinds/common.ts +1 -1
  1109. package/src/simple-tree/node-kinds/map/mapNode.ts +16 -15
  1110. package/src/simple-tree/node-kinds/map/mapNodeTypes.ts +2 -2
  1111. package/src/simple-tree/node-kinds/object/objectNode.ts +11 -11
  1112. package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +8 -7
  1113. package/src/simple-tree/node-kinds/record/recordNode.ts +12 -12
  1114. package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +1 -2
  1115. package/src/simple-tree/prepareForInsertion.ts +10 -8
  1116. package/src/simple-tree/simpleSchema.ts +1 -0
  1117. package/src/simple-tree/treeSchema.ts +1 -0
  1118. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +2 -2
  1119. package/src/tableSchema.ts +3 -1
  1120. package/src/text/README.md +8 -0
  1121. package/src/text/index.ts +7 -0
  1122. package/src/text/textDomain.ts +199 -0
  1123. package/src/text/textDomainFormatted.ts +309 -0
  1124. package/src/treeFactory.ts +4 -4
  1125. package/src/util/bTreeUtils.ts +33 -22
  1126. package/src/util/nestedMap.ts +12 -12
  1127. package/src/util/readSnapshotBlob.ts +4 -2
  1128. package/.eslintrc.cjs +0 -125
  1129. package/assertTagging.config.mjs +0 -14
  1130. package/dist/shared-tree-core/transactionEnricher.d.ts +0 -23
  1131. package/dist/shared-tree-core/transactionEnricher.d.ts.map +0 -1
  1132. package/dist/shared-tree-core/transactionEnricher.js +0 -74
  1133. package/dist/shared-tree-core/transactionEnricher.js.map +0 -1
  1134. package/lib/shared-tree-core/transactionEnricher.d.ts +0 -23
  1135. package/lib/shared-tree-core/transactionEnricher.d.ts.map +0 -1
  1136. package/lib/shared-tree-core/transactionEnricher.js +0 -70
  1137. package/lib/shared-tree-core/transactionEnricher.js.map +0 -1
  1138. package/src/shared-tree-core/transactionEnricher.ts +0 -74
@@ -1 +1 @@
1
- {"version":3,"file":"modularChangeFamily.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeFamily.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, fail } from \"@fluidframework/core-utils/internal\";\nimport { BTree } from \"@tylerbu/sorted-btree-es6\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport {\n\tFluidClientVersion,\n\ttype CodecWriteOptions,\n\ttype ICodecFamily,\n} from \"../../codec/index.js\";\nimport {\n\ttype ChangeEncodingContext,\n\ttype ChangeFamily,\n\ttype ChangeFamilyEditor,\n\ttype ChangeRebaser,\n\ttype ChangesetLocalId,\n\ttype DeltaDetachedNodeBuild,\n\ttype DeltaDetachedNodeDestruction,\n\ttype DeltaDetachedNodeId,\n\ttype DeltaFieldChanges,\n\ttype DeltaFieldMap,\n\ttype DeltaRoot,\n\tEditBuilder,\n\ttype FieldKey,\n\ttype FieldKindIdentifier,\n\ttype FieldUpPath,\n\ttype RevisionInfo,\n\ttype RevisionMetadataSource,\n\ttype RevisionTag,\n\ttype TaggedChange,\n\ttype UpPath,\n\tmakeDetachedNodeId,\n\trevisionMetadataSourceFromInfo,\n\tareEqualChangeAtomIds,\n\ttype ChangeAtomId,\n\tareEqualChangeAtomIdOpts,\n\ttagChange,\n\tmakeAnonChange,\n\tnewChangeAtomIdRangeMap,\n\ttype DeltaDetachedNodeChanges,\n\ttype DeltaDetachedNodeRename,\n\tmapTaggedChange,\n\ttype RevisionReplacer,\n} from \"../../core/index.js\";\nimport {\n\ttype IdAllocationState,\n\ttype IdAllocator,\n\ttype Mutable,\n\tbrand,\n\tidAllocatorFromMaxId,\n\tidAllocatorFromState,\n\ttype RangeQueryResult,\n\tgetOrCreate,\n\tnewTupleBTree,\n\tmergeTupleBTrees,\n\ttype TupleBTree,\n\tRangeMap,\n\tbalancedReduce,\n} from \"../../util/index.js\";\nimport type { TreeChunk } from \"../chunked-forest/index.js\";\n\nimport {\n\ttype CrossFieldManager,\n\ttype CrossFieldMap,\n\tCrossFieldTarget,\n\tgetFirstFromCrossFieldMap,\n\tsetInCrossFieldMap,\n} from \"./crossFieldQueries.js\";\nimport {\n\ttype FieldChangeHandler,\n\tNodeAttachState,\n\ttype RebaseRevisionMetadata,\n} from \"./fieldChangeHandler.js\";\nimport { convertGenericChange, genericFieldKind } from \"./genericFieldKind.js\";\nimport type { GenericChangeset } from \"./genericFieldKindTypes.js\";\nimport {\n\ttype CrossFieldKey,\n\ttype CrossFieldKeyRange,\n\ttype CrossFieldKeyTable,\n\ttype FieldChange,\n\ttype FieldChangeMap,\n\ttype FieldChangeset,\n\ttype FieldId,\n\ttype ModularChangeset,\n\tnewCrossFieldKeyTable,\n\ttype NoChangeConstraint,\n\ttype NodeChangeset,\n\ttype NodeId,\n} from \"./modularChangeTypes.js\";\nimport type { FlexFieldKind } from \"./fieldKind.js\";\nimport {\n\tgetFromChangeAtomIdMap,\n\tsetInChangeAtomIdMap,\n\ttype ChangeAtomIdBTree,\n} from \"../changeAtomIdBTree.js\";\nimport { lt } from \"semver-ts\";\n\n/**\n * Implementation of ChangeFamily which delegates work in a given field to the appropriate FieldKind\n * as determined by the schema.\n */\nexport class ModularChangeFamily\n\timplements\n\t\tChangeFamily<ModularEditBuilder, ModularChangeset>,\n\t\tChangeRebaser<ModularChangeset>\n{\n\tpublic static readonly emptyChange: ModularChangeset = makeModularChangeset();\n\n\tpublic readonly fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>;\n\n\tpublic constructor(\n\t\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\t\tpublic readonly codecs: ICodecFamily<ModularChangeset, ChangeEncodingContext>,\n\t\tpublic readonly codecOptions: CodecWriteOptions,\n\t) {\n\t\tthis.fieldKinds = fieldKinds;\n\t}\n\n\tpublic get rebaser(): ChangeRebaser<ModularChangeset> {\n\t\treturn this;\n\t}\n\n\t/**\n\t * Produces an equivalent list of `FieldChangeset`s that all target the same {@link FlexFieldKind}.\n\t * @param changes - The list of `FieldChange`s whose `FieldChangeset`s needs to be normalized.\n\t * @returns An object that contains both the equivalent list of `FieldChangeset`s that all\n\t * target the same {@link FlexFieldKind}, and the `FieldKind` that they target.\n\t * The returned `FieldChangeset`s may be a shallow copy of the input `FieldChange`s.\n\t */\n\tprivate normalizeFieldChanges(\n\t\tchange1: FieldChange,\n\t\tchange2: FieldChange,\n\t): {\n\t\tfieldKind: FieldKindIdentifier;\n\t\tchangeHandler: FieldChangeHandler<unknown>;\n\t\tchange1: FieldChangeset;\n\t\tchange2: FieldChangeset;\n\t} {\n\t\t// TODO: Handle the case where changes have conflicting field kinds\n\t\tconst kind =\n\t\t\tchange1.fieldKind === genericFieldKind.identifier\n\t\t\t\t? change2.fieldKind\n\t\t\t\t: change1.fieldKind;\n\n\t\tif (kind === genericFieldKind.identifier) {\n\t\t\t// Both changes are generic\n\t\t\treturn {\n\t\t\t\tfieldKind: genericFieldKind.identifier,\n\t\t\t\tchangeHandler: genericFieldKind.changeHandler,\n\t\t\t\tchange1: change1.change,\n\t\t\t\tchange2: change2.change,\n\t\t\t};\n\t\t}\n\t\tconst fieldKind = getFieldKind(this.fieldKinds, kind);\n\t\tconst changeHandler = fieldKind.changeHandler;\n\t\tconst normalizedChange1 = this.normalizeFieldChange(change1, changeHandler);\n\t\tconst normalizedChange2 = this.normalizeFieldChange(change2, changeHandler);\n\t\treturn {\n\t\t\tfieldKind: kind,\n\t\t\tchangeHandler,\n\t\t\tchange1: normalizedChange1,\n\t\t\tchange2: normalizedChange2,\n\t\t};\n\t}\n\n\tprivate normalizeFieldChange<T>(\n\t\tfieldChange: FieldChange,\n\t\thandler: FieldChangeHandler<T>,\n\t): FieldChangeset {\n\t\tif (fieldChange.fieldKind !== genericFieldKind.identifier) {\n\t\t\treturn fieldChange.change;\n\t\t}\n\n\t\t// The cast is based on the `fieldKind` check above\n\t\tconst genericChange = fieldChange.change as unknown as GenericChangeset;\n\t\tconst convertedChange = convertGenericChange(genericChange, handler) as FieldChangeset;\n\n\t\treturn convertedChange;\n\t}\n\n\tpublic compose(changes: TaggedChange<ModularChangeset>[]): ModularChangeset {\n\t\tconst { revInfos, maxId } = getRevInfoFromTaggedChanges(changes);\n\t\tconst idState: IdAllocationState = { maxId };\n\n\t\tconst pairwiseDelegate = (\n\t\t\tleft: ModularChangeset,\n\t\t\tright: ModularChangeset,\n\t\t): ModularChangeset => {\n\t\t\treturn this.composePair(left, right, revInfos, idState);\n\t\t};\n\n\t\tconst innerChanges = changes.map((change) => change.change);\n\t\treturn balancedReduce(innerChanges, pairwiseDelegate, makeModularChangeset);\n\t}\n\n\tprivate composePair(\n\t\tchange1: ModularChangeset,\n\t\tchange2: ModularChangeset,\n\t\trevInfos: RevisionInfo[],\n\t\tidState: IdAllocationState,\n\t): ModularChangeset {\n\t\tconst { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys } =\n\t\t\tthis.composeAllFields(change1, change2, revInfos, idState);\n\n\t\tconst { allBuilds, allDestroys, allRefreshers } = composeBuildsDestroysAndRefreshers(\n\t\t\tchange1,\n\t\t\tchange2,\n\t\t);\n\n\t\t// The composed changeset has a \"no change\" constraint if either change has one\n\t\tconst noChangeConstraint = change1.noChangeConstraint ?? change2.noChangeConstraint;\n\t\tconst noChangeConstraintOnRevert =\n\t\t\tchange1.noChangeConstraintOnRevert ?? change2.noChangeConstraintOnRevert;\n\n\t\treturn makeModularChangeset({\n\t\t\tfieldChanges,\n\t\t\tnodeChanges,\n\t\t\tnodeToParent,\n\t\t\tnodeAliases,\n\t\t\tcrossFieldKeys,\n\t\t\tmaxId: idState.maxId,\n\t\t\trevisions: revInfos,\n\t\t\tnoChangeConstraint,\n\t\t\tnoChangeConstraintOnRevert,\n\t\t\tbuilds: allBuilds,\n\t\t\tdestroys: allDestroys,\n\t\t\trefreshers: allRefreshers,\n\t\t});\n\t}\n\n\tprivate composeAllFields(\n\t\tpotentiallyConflictedChange1: ModularChangeset,\n\t\tpotentiallyConflictedChange2: ModularChangeset,\n\t\trevInfos: RevisionInfo[],\n\t\tidState: IdAllocationState,\n\t): ModularChangesetContent {\n\t\t// Our current cell ordering scheme in sequences depends on being able to rebase over a change with conflicts.\n\t\t// This means that compose must preserve declarations (e.g., new cells) made by conflicted changes (so that we can rebase over the composition).\n\t\t// TODO: remove once AB#46104 is completed\n\t\tconst change1 = this.getEffectiveChange(potentiallyConflictedChange1);\n\t\tconst change2 = this.getEffectiveChange(potentiallyConflictedChange2);\n\n\t\tconst genId: IdAllocator = idAllocatorFromState(idState);\n\t\tconst revisionMetadata: RevisionMetadataSource = revisionMetadataSourceFromInfo(revInfos);\n\n\t\t// We merge nodeChanges, nodeToParent, and nodeAliases from the two changesets.\n\t\t// The merged tables will have correct entries for all nodes which are only referenced in one of the input changesets.\n\t\t// During composeFieldMaps and composeInvalidatedElements we will find all nodes referenced in both input changesets\n\t\t// and adjust these tables as necessary.\n\t\t// Note that when merging these tables we may encounter key collisions and will arbitrarily drop values in that case.\n\t\t// A collision for a node ID means that that node is referenced in both changesets\n\t\t// (since we assume that if two changesets use the same node ID they are referring to the same node),\n\t\t// therefore all collisions will be addressed when processing the intersection of the changesets.\n\t\tconst composedNodeChanges: ChangeAtomIdBTree<NodeChangeset> = brand(\n\t\t\tmergeTupleBTrees(change1.nodeChanges, change2.nodeChanges),\n\t\t);\n\n\t\tconst composedNodeToParent: ChangeAtomIdBTree<FieldId> = brand(\n\t\t\tmergeTupleBTrees(change1.nodeToParent, change2.nodeToParent),\n\t\t);\n\t\tconst composedNodeAliases: ChangeAtomIdBTree<NodeId> = brand(\n\t\t\tmergeTupleBTrees(change1.nodeAliases, change2.nodeAliases),\n\t\t);\n\n\t\tconst crossFieldTable = newComposeTable(change1, change2, composedNodeToParent);\n\n\t\tconst composedFields = this.composeFieldMaps(\n\t\t\tchange1.fieldChanges,\n\t\t\tchange2.fieldChanges,\n\t\t\tundefined,\n\t\t\tgenId,\n\t\t\tcrossFieldTable,\n\t\t\trevisionMetadata,\n\t\t);\n\n\t\tthis.composeInvalidatedElements(\n\t\t\tcrossFieldTable,\n\t\t\tcomposedFields,\n\t\t\tcomposedNodeChanges,\n\t\t\tcomposedNodeToParent,\n\t\t\tcomposedNodeAliases,\n\t\t\tgenId,\n\t\t\trevisionMetadata,\n\t\t);\n\n\t\t// Currently no field kinds require making changes to cross-field keys during composition, so we can just merge the two tables.\n\t\tconst composedCrossFieldKeys = RangeMap.union(\n\t\t\tchange1.crossFieldKeys,\n\t\t\tchange2.crossFieldKeys,\n\t\t);\n\t\treturn {\n\t\t\tfieldChanges: composedFields,\n\t\t\tnodeChanges: composedNodeChanges,\n\t\t\tnodeToParent: composedNodeToParent,\n\t\t\tnodeAliases: composedNodeAliases,\n\t\t\tcrossFieldKeys: composedCrossFieldKeys,\n\t\t};\n\t}\n\n\tprivate composeInvalidatedField(\n\t\tfieldChange: FieldChange,\n\t\tcrossFieldTable: ComposeTable,\n\t\tgenId: IdAllocator,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): void {\n\t\tconst context = crossFieldTable.fieldToContext.get(fieldChange);\n\t\tassert(context !== undefined, 0x8cc /* Should have context for every invalidated field */);\n\t\tconst { fieldId, change1: fieldChange1, change2: fieldChange2, composedChange } = context;\n\n\t\tconst rebaser = getChangeHandler(this.fieldKinds, composedChange.fieldKind).rebaser;\n\t\tconst composeNodes = (child1: NodeId | undefined, child2: NodeId | undefined): NodeId => {\n\t\t\tif (\n\t\t\t\tchild1 !== undefined &&\n\t\t\t\tchild2 !== undefined &&\n\t\t\t\tgetFromChangeAtomIdMap(crossFieldTable.newToBaseNodeId, child2) === undefined\n\t\t\t) {\n\t\t\t\tsetInChangeAtomIdMap(crossFieldTable.newToBaseNodeId, child2, child1);\n\t\t\t\tcrossFieldTable.pendingCompositions.nodeIdsToCompose.push([child1, child2]);\n\t\t\t}\n\n\t\t\treturn child1 ?? child2 ?? fail(0xb22 /* Should not compose two undefined nodes */);\n\t\t};\n\n\t\tconst amendedChange = rebaser.compose(\n\t\t\tfieldChange1,\n\t\t\tfieldChange2,\n\t\t\tcomposeNodes,\n\t\t\tgenId,\n\t\t\tnew ComposeManager(crossFieldTable, fieldChange, fieldId, false),\n\t\t\trevisionMetadata,\n\t\t);\n\t\tcomposedChange.change = brand(amendedChange);\n\t}\n\n\t/**\n\t * Updates everything in the composed output which may no longer be valid.\n\t * This could be due to\n\t * - discovering that two node changesets refer to the same node (`nodeIdsToCompose`)\n\t * - a previously composed field being invalidated by a cross field effect (`invalidatedFields`)\n\t * - a field which was copied directly from an input changeset being invalidated by a cross field effect\n\t * (`affectedBaseFields` and `affectedNewFields`)\n\t *\n\t * Updating an element may invalidate further elements. This function runs until there is no more invalidation.\n\t */\n\tprivate composeInvalidatedElements(\n\t\ttable: ComposeTable,\n\t\tcomposedFields: FieldChangeMap,\n\t\tcomposedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tcomposedNodeToParent: ChangeAtomIdBTree<FieldId>,\n\t\tnodeAliases: ChangeAtomIdBTree<NodeId>,\n\t\tgenId: IdAllocator,\n\t\tmetadata: RevisionMetadataSource,\n\t): void {\n\t\tconst pending = table.pendingCompositions;\n\t\twhile (\n\t\t\ttable.invalidatedFields.size > 0 ||\n\t\t\tpending.nodeIdsToCompose.length > 0 ||\n\t\t\tpending.affectedBaseFields.length > 0 ||\n\t\t\tpending.affectedNewFields.length > 0\n\t\t) {\n\t\t\t// Note that the call to `composeNodesById` can add entries to `crossFieldTable.nodeIdPairs`.\n\t\t\tfor (const [id1, id2] of pending.nodeIdsToCompose) {\n\t\t\t\tthis.composeNodesById(\n\t\t\t\t\ttable.baseChange.nodeChanges,\n\t\t\t\t\ttable.newChange.nodeChanges,\n\t\t\t\t\tcomposedNodes,\n\t\t\t\t\tcomposedNodeToParent,\n\t\t\t\t\tnodeAliases,\n\t\t\t\t\tid1,\n\t\t\t\t\tid2,\n\t\t\t\t\tgenId,\n\t\t\t\t\ttable,\n\t\t\t\t\tmetadata,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tpending.nodeIdsToCompose.length = 0;\n\n\t\t\tthis.composeAffectedFields(\n\t\t\t\ttable,\n\t\t\t\ttable.baseChange,\n\t\t\t\ttrue,\n\t\t\t\tpending.affectedBaseFields,\n\t\t\t\tcomposedFields,\n\t\t\t\tcomposedNodes,\n\t\t\t\tgenId,\n\t\t\t\tmetadata,\n\t\t\t);\n\n\t\t\tthis.composeAffectedFields(\n\t\t\t\ttable,\n\t\t\t\ttable.newChange,\n\t\t\t\tfalse,\n\t\t\t\tpending.affectedNewFields,\n\t\t\t\tcomposedFields,\n\t\t\t\tcomposedNodes,\n\t\t\t\tgenId,\n\t\t\t\tmetadata,\n\t\t\t);\n\n\t\t\tthis.processInvalidatedCompositions(table, genId, metadata);\n\t\t}\n\t}\n\n\tprivate processInvalidatedCompositions(\n\t\ttable: ComposeTable,\n\t\tgenId: IdAllocator,\n\t\tmetadata: RevisionMetadataSource,\n\t): void {\n\t\tconst fieldsToUpdate = table.invalidatedFields;\n\t\ttable.invalidatedFields = new Set();\n\t\tfor (const fieldChange of fieldsToUpdate) {\n\t\t\tthis.composeInvalidatedField(fieldChange, table, genId, metadata);\n\t\t}\n\t}\n\n\t/**\n\t * Ensures that each field in `affectedFields` has been updated in the composition output.\n\t * Any field which has already been composed is ignored.\n\t * All other fields are optimistically assumed to not have any changes in the other input changeset.\n\t *\n\t * @param change - The changeset which contains the affected fields.\n\t * This should be one of the two changesets being composed.\n\t * @param areBaseFields - Whether the affected fields are part of the base changeset.\n\t * If not, they are assumed to be part of the new changeset.\n\t * @param affectedFields - The set of fields to process.\n\t */\n\tprivate composeAffectedFields(\n\t\ttable: ComposeTable,\n\t\tchange: ModularChangeset,\n\t\tareBaseFields: boolean,\n\t\taffectedFields: BTree<FieldIdKey, true>,\n\t\tcomposedFields: FieldChangeMap,\n\t\tcomposedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tgenId: IdAllocator,\n\t\tmetadata: RevisionMetadataSource,\n\t): void {\n\t\tfor (const fieldIdKey of affectedFields.keys()) {\n\t\t\tconst fieldId = normalizeFieldId(fieldIdFromFieldIdKey(fieldIdKey), change.nodeAliases);\n\t\t\tconst fieldChange = fieldChangeFromId(change.fieldChanges, change.nodeChanges, fieldId);\n\n\t\t\tif (\n\t\t\t\ttable.fieldToContext.has(fieldChange) ||\n\t\t\t\ttable.newFieldToBaseField.has(fieldChange)\n\t\t\t) {\n\t\t\t\t// This function handles fields which were not part of the intersection of the two changesets but which need to be updated anyway.\n\t\t\t\t// If we've already processed this field then either it is up to date\n\t\t\t\t// or there is pending inval which will be handled in processInvalidatedCompositions.\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst emptyChange = this.createEmptyFieldChange(fieldChange.fieldKind);\n\t\t\tconst [change1, change2] = areBaseFields\n\t\t\t\t? [fieldChange, emptyChange]\n\t\t\t\t: [emptyChange, fieldChange];\n\n\t\t\tconst composedField = this.composeFieldChanges(\n\t\t\t\tfieldId,\n\t\t\t\tchange1,\n\t\t\t\tchange2,\n\t\t\t\tgenId,\n\t\t\t\ttable,\n\t\t\t\tmetadata,\n\t\t\t);\n\n\t\t\tif (fieldId.nodeId === undefined) {\n\t\t\t\tcomposedFields.set(fieldId.field, composedField);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst nodeId =\n\t\t\t\tgetFromChangeAtomIdMap(table.newToBaseNodeId, fieldId.nodeId) ?? fieldId.nodeId;\n\n\t\t\tlet nodeChangeset = nodeChangeFromId(composedNodes, nodeId);\n\t\t\tif (!table.composedNodes.has(nodeChangeset)) {\n\t\t\t\tnodeChangeset = cloneNodeChangeset(nodeChangeset);\n\t\t\t\tsetInChangeAtomIdMap(composedNodes, nodeId, nodeChangeset);\n\t\t\t}\n\n\t\t\tif (nodeChangeset.fieldChanges === undefined) {\n\t\t\t\tnodeChangeset.fieldChanges = new Map();\n\t\t\t}\n\n\t\t\tnodeChangeset.fieldChanges.set(fieldId.field, composedField);\n\t\t}\n\n\t\taffectedFields.clear();\n\t}\n\n\tprivate composeFieldMaps(\n\t\tchange1: FieldChangeMap | undefined,\n\t\tchange2: FieldChangeMap | undefined,\n\t\tparentId: NodeId | undefined,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: ComposeTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): FieldChangeMap {\n\t\tconst composedFields: FieldChangeMap = new Map();\n\t\tif (change1 === undefined || change2 === undefined) {\n\t\t\treturn change1 ?? change2 ?? composedFields;\n\t\t}\n\n\t\tfor (const [field, fieldChange1] of change1) {\n\t\t\tconst fieldId: FieldId = { nodeId: parentId, field };\n\t\t\tconst fieldChange2 = change2.get(field);\n\t\t\tconst composedField =\n\t\t\t\tfieldChange2 === undefined\n\t\t\t\t\t? fieldChange1\n\t\t\t\t\t: this.composeFieldChanges(\n\t\t\t\t\t\t\tfieldId,\n\t\t\t\t\t\t\tfieldChange1,\n\t\t\t\t\t\t\tfieldChange2,\n\t\t\t\t\t\t\tgenId,\n\t\t\t\t\t\t\tcrossFieldTable,\n\t\t\t\t\t\t\trevisionMetadata,\n\t\t\t\t\t\t);\n\n\t\t\tcomposedFields.set(field, composedField);\n\t\t}\n\n\t\tfor (const [field, fieldChange2] of change2) {\n\t\t\tif (!change1?.has(field)) {\n\t\t\t\tcomposedFields.set(field, fieldChange2);\n\t\t\t}\n\t\t}\n\n\t\treturn composedFields;\n\t}\n\n\t/**\n\t * Returns the composition of the two input fields.\n\t *\n\t * Any nodes in this field which were modified by both changesets\n\t * will be added to `crossFieldTable.pendingCompositions.nodeIdsToCompose`.\n\t *\n\t * Any fields which had cross-field information sent to them as part of this field composition\n\t * will be added to either `affectedBaseFields` or `affectedNewFields` in `crossFieldTable.pendingCompositions`.\n\t *\n\t * Any composed `FieldChange` which is invalidated by new cross-field information will be added to `crossFieldTable.invalidatedFields`.\n\t */\n\tprivate composeFieldChanges(\n\t\tfieldId: FieldId,\n\t\tchange1: FieldChange,\n\t\tchange2: FieldChange,\n\t\tidAllocator: IdAllocator,\n\t\tcrossFieldTable: ComposeTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): FieldChange {\n\t\tconst {\n\t\t\tfieldKind,\n\t\t\tchangeHandler,\n\t\t\tchange1: change1Normalized,\n\t\t\tchange2: change2Normalized,\n\t\t} = this.normalizeFieldChanges(change1, change2);\n\n\t\tconst manager = new ComposeManager(crossFieldTable, change1, fieldId);\n\n\t\tconst composedChange = changeHandler.rebaser.compose(\n\t\t\tchange1Normalized,\n\t\t\tchange2Normalized,\n\t\t\t(child1, child2) => {\n\t\t\t\tif (child1 !== undefined && child2 !== undefined) {\n\t\t\t\t\tsetInChangeAtomIdMap(crossFieldTable.newToBaseNodeId, child2, child1);\n\t\t\t\t\tcrossFieldTable.pendingCompositions.nodeIdsToCompose.push([child1, child2]);\n\t\t\t\t}\n\t\t\t\treturn child1 ?? child2 ?? fail(0xb23 /* Should not compose two undefined nodes */);\n\t\t\t},\n\t\t\tidAllocator,\n\t\t\tmanager,\n\t\t\trevisionMetadata,\n\t\t);\n\n\t\tconst composedField: FieldChange = {\n\t\t\tfieldKind,\n\t\t\tchange: brand(composedChange),\n\t\t};\n\n\t\tcrossFieldTable.fieldToContext.set(change1, {\n\t\t\tfieldId,\n\t\t\tchange1: change1Normalized,\n\t\t\tchange2: change2Normalized,\n\t\t\tcomposedChange: composedField,\n\t\t});\n\n\t\tcrossFieldTable.newFieldToBaseField.set(change2, change1);\n\t\treturn composedField;\n\t}\n\n\tprivate composeNodesById(\n\t\tnodeChanges1: ChangeAtomIdBTree<NodeChangeset>,\n\t\tnodeChanges2: ChangeAtomIdBTree<NodeChangeset>,\n\t\tcomposedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tcomposedNodeToParent: ChangeAtomIdBTree<FieldId>,\n\t\tnodeAliases: ChangeAtomIdBTree<NodeId>,\n\t\tid1: NodeId,\n\t\tid2: NodeId,\n\t\tidAllocator: IdAllocator,\n\t\tcrossFieldTable: ComposeTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): void {\n\t\tconst nodeChangeset1 = nodeChangeFromId(nodeChanges1, id1);\n\t\tconst nodeChangeset2 = nodeChangeFromId(nodeChanges2, id2);\n\t\tconst composedNodeChangeset = this.composeNodeChanges(\n\t\t\tid1,\n\t\t\tnodeChangeset1,\n\t\t\tnodeChangeset2,\n\t\t\tidAllocator,\n\t\t\tcrossFieldTable,\n\t\t\trevisionMetadata,\n\t\t);\n\n\t\tsetInChangeAtomIdMap(composedNodes, id1, composedNodeChangeset);\n\n\t\tif (!areEqualChangeAtomIds(id1, id2)) {\n\t\t\tcomposedNodes.delete([id2.revision, id2.localId]);\n\t\t\tcomposedNodeToParent.delete([id2.revision, id2.localId]);\n\t\t\tsetInChangeAtomIdMap(nodeAliases, id2, id1);\n\n\t\t\t// We need to delete id1 to avoid forming a cycle in case id1 already had an alias.\n\t\t\tnodeAliases.delete([id1.revision, id1.localId]);\n\t\t}\n\n\t\tcrossFieldTable.composedNodes.add(composedNodeChangeset);\n\t}\n\n\tprivate composeNodeChanges(\n\t\tnodeId: NodeId,\n\t\tchange1: NodeChangeset,\n\t\tchange2: NodeChangeset,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: ComposeTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): NodeChangeset {\n\t\t// WARNING: this composition logic assumes that we never make compositions of the following form:\n\t\t// change1: a changeset that impact the existence of a node\n\t\t// change2: a node-exists constraint on that node.\n\t\t// This is currently enforced by the fact that constraints which apply to the input context are included first in the composition.\n\t\t// If that weren't the case, we would need to rebase the status of the constraint backward over the changes from change1.\n\t\tconst nodeExistsConstraint = change1.nodeExistsConstraint ?? change2.nodeExistsConstraint;\n\n\t\t// WARNING: this composition logic assumes that we never make compositions of the following form:\n\t\t// change1: a node-exists-on-revert constraint on a node\n\t\t// change2: a changeset that impacts the existence of that node\n\t\t// This is currently enforced by the fact that constraints which apply to the revert are included last in the composition.\n\t\t// If that weren't the case, we would need to rebase the status of the constraint forward over the changes from change2.\n\t\tconst nodeExistsConstraintOnRevert =\n\t\t\tchange1.nodeExistsConstraintOnRevert ?? change2.nodeExistsConstraintOnRevert;\n\n\t\tconst composedFieldChanges = this.composeFieldMaps(\n\t\t\tchange1.fieldChanges,\n\t\t\tchange2.fieldChanges,\n\t\t\tnodeId,\n\t\t\tgenId,\n\t\t\tcrossFieldTable,\n\t\t\trevisionMetadata,\n\t\t);\n\n\t\tconst composedNodeChange: NodeChangeset = {};\n\n\t\tif (composedFieldChanges.size > 0) {\n\t\t\tcomposedNodeChange.fieldChanges = composedFieldChanges;\n\t\t}\n\n\t\tif (nodeExistsConstraint !== undefined) {\n\t\t\tcomposedNodeChange.nodeExistsConstraint = nodeExistsConstraint;\n\t\t}\n\n\t\tif (nodeExistsConstraintOnRevert !== undefined) {\n\t\t\tcomposedNodeChange.nodeExistsConstraintOnRevert = nodeExistsConstraintOnRevert;\n\t\t}\n\n\t\treturn composedNodeChange;\n\t}\n\n\t/**\n\t * @param change - The change to invert.\n\t * @param isRollback - Whether the inverted change is meant to rollback a change on a branch as is the case when\n\t * performing a sandwich rebase.\n\t * @param revisionForInvert - The revision for the invert changeset.\n\t */\n\tpublic invert(\n\t\tchange: TaggedChange<ModularChangeset>,\n\t\tisRollback: boolean,\n\t\trevisionForInvert: RevisionTag,\n\t): ModularChangeset {\n\t\t// Rollback changesets destroy the nodes created by the change being rolled back.\n\t\tconst destroys = isRollback ? invertBuilds(change.change.builds) : undefined;\n\n\t\t// Destroys only occur in rollback changesets, which are never inverted.\n\t\tassert(\n\t\t\tchange.change.destroys === undefined,\n\t\t\t0x89a /* Unexpected destroys in change to invert */,\n\t\t);\n\n\t\tconst revInfos: RevisionInfo[] = isRollback\n\t\t\t? [{ revision: revisionForInvert, rollbackOf: change.revision }]\n\t\t\t: [{ revision: revisionForInvert }];\n\n\t\tconst noChangeConstraint = change.change.noChangeConstraintOnRevert;\n\t\tconst noChangeConstraintOnRevert = change.change.noChangeConstraint;\n\n\t\tif (hasConflicts(change.change)) {\n\t\t\treturn makeModularChangeset({\n\t\t\t\tmaxId: change.change.maxId as number,\n\t\t\t\trevisions: revInfos,\n\t\t\t\tdestroys,\n\t\t\t});\n\t\t}\n\n\t\tconst genId: IdAllocator = idAllocatorFromMaxId(change.change.maxId ?? -1);\n\n\t\tconst crossFieldTable: InvertTable = {\n\t\t\t...newCrossFieldTable<FieldChange>(),\n\t\t\toriginalFieldToContext: new Map(),\n\t\t\tinvertedNodeToParent: brand(change.change.nodeToParent.clone()),\n\t\t};\n\t\tconst { revInfos: oldRevInfos } = getRevInfoFromTaggedChanges([change]);\n\t\tconst revisionMetadata = revisionMetadataSourceFromInfo(oldRevInfos);\n\n\t\tconst invertedFields = this.invertFieldMap(\n\t\t\tchange.change.fieldChanges,\n\t\t\tundefined,\n\t\t\tisRollback,\n\t\t\tgenId,\n\t\t\tcrossFieldTable,\n\t\t\trevisionMetadata,\n\t\t\trevisionForInvert,\n\t\t);\n\n\t\tconst invertedNodes: ChangeAtomIdBTree<NodeChangeset> = newTupleBTree();\n\t\tchange.change.nodeChanges.forEachPair(([revision, localId], nodeChangeset) => {\n\t\t\tinvertedNodes.set(\n\t\t\t\t[revision, localId],\n\t\t\t\tthis.invertNodeChange(\n\t\t\t\t\tnodeChangeset,\n\t\t\t\t\t{ revision, localId },\n\t\t\t\t\tisRollback,\n\t\t\t\t\tgenId,\n\t\t\t\t\tcrossFieldTable,\n\t\t\t\t\trevisionMetadata,\n\t\t\t\t\trevisionForInvert,\n\t\t\t\t),\n\t\t\t);\n\t\t});\n\n\t\tif (crossFieldTable.invalidatedFields.size > 0) {\n\t\t\tconst fieldsToUpdate = crossFieldTable.invalidatedFields;\n\t\t\tcrossFieldTable.invalidatedFields = new Set();\n\t\t\tfor (const fieldChange of fieldsToUpdate) {\n\t\t\t\tconst originalFieldChange = fieldChange.change;\n\t\t\t\tconst context = crossFieldTable.originalFieldToContext.get(fieldChange);\n\t\t\t\tassert(\n\t\t\t\t\tcontext !== undefined,\n\t\t\t\t\t0x851 /* Should have context for every invalidated field */,\n\t\t\t\t);\n\t\t\t\tconst { invertedField, fieldId } = context;\n\n\t\t\t\tconst amendedChange = getChangeHandler(\n\t\t\t\t\tthis.fieldKinds,\n\t\t\t\t\tfieldChange.fieldKind,\n\t\t\t\t).rebaser.invert(\n\t\t\t\t\toriginalFieldChange,\n\t\t\t\t\tisRollback,\n\t\t\t\t\tgenId,\n\t\t\t\t\trevisionForInvert,\n\t\t\t\t\tnew InvertManager(crossFieldTable, fieldChange, fieldId),\n\t\t\t\t\trevisionMetadata,\n\t\t\t\t);\n\t\t\t\tinvertedField.change = brand(amendedChange);\n\t\t\t}\n\t\t}\n\n\t\tconst crossFieldKeys = this.makeCrossFieldKeyTable(invertedFields, invertedNodes);\n\n\t\treturn makeModularChangeset({\n\t\t\tfieldChanges: invertedFields,\n\t\t\tnodeChanges: invertedNodes,\n\t\t\tnodeToParent: crossFieldTable.invertedNodeToParent,\n\t\t\tnodeAliases: change.change.nodeAliases,\n\t\t\tcrossFieldKeys,\n\t\t\tmaxId: genId.getMaxId(),\n\t\t\trevisions: revInfos,\n\t\t\tconstraintViolationCount: change.change.constraintViolationCountOnRevert,\n\t\t\tconstraintViolationCountOnRevert: change.change.constraintViolationCount,\n\t\t\tnoChangeConstraint,\n\t\t\tnoChangeConstraintOnRevert,\n\t\t\tdestroys,\n\t\t});\n\t}\n\n\tprivate invertFieldMap(\n\t\tchanges: FieldChangeMap,\n\t\tparentId: NodeId | undefined,\n\t\tisRollback: boolean,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: InvertTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t\trevisionForInvert: RevisionTag,\n\t): FieldChangeMap {\n\t\tconst invertedFields: FieldChangeMap = new Map();\n\n\t\tfor (const [field, fieldChange] of changes) {\n\t\t\tconst fieldId = { nodeId: parentId, field };\n\t\t\tconst manager = new InvertManager(crossFieldTable, fieldChange, fieldId);\n\t\t\tconst invertedChange = getChangeHandler(\n\t\t\t\tthis.fieldKinds,\n\t\t\t\tfieldChange.fieldKind,\n\t\t\t).rebaser.invert(\n\t\t\t\tfieldChange.change,\n\t\t\t\tisRollback,\n\t\t\t\tgenId,\n\t\t\t\trevisionForInvert,\n\t\t\t\tmanager,\n\t\t\t\trevisionMetadata,\n\t\t\t);\n\n\t\t\tconst invertedFieldChange: FieldChange = {\n\t\t\t\t...fieldChange,\n\t\t\t\tchange: brand(invertedChange),\n\t\t\t};\n\t\t\tinvertedFields.set(field, invertedFieldChange);\n\n\t\t\tcrossFieldTable.originalFieldToContext.set(fieldChange, {\n\t\t\t\tfieldId,\n\t\t\t\tinvertedField: invertedFieldChange,\n\t\t\t});\n\t\t}\n\n\t\treturn invertedFields;\n\t}\n\n\tprivate invertNodeChange(\n\t\tchange: NodeChangeset,\n\t\tid: NodeId,\n\t\tisRollback: boolean,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: InvertTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t\trevisionForInvert: RevisionTag,\n\t): NodeChangeset {\n\t\tconst inverse: NodeChangeset = {};\n\n\t\t// If the node has a constraint, it should be inverted to a node-exist-on-revert constraint. This ensure that if\n\t\t// the inverse is inverted again, the original input constraint will be restored.\n\t\tif (change.nodeExistsConstraint !== undefined) {\n\t\t\tinverse.nodeExistsConstraintOnRevert = change.nodeExistsConstraint;\n\t\t}\n\n\t\t// The node-exist-on-revert constraint of a node is the constraint that should apply when the a change is reverted.\n\t\t// So, it should become the constraint in the inverse. If this constraint is violated when applying the inverse,\n\t\t// it will be discarded.\n\t\tif (change.nodeExistsConstraintOnRevert !== undefined) {\n\t\t\tinverse.nodeExistsConstraint = change.nodeExistsConstraintOnRevert;\n\t\t}\n\n\t\tif (change.fieldChanges !== undefined) {\n\t\t\tinverse.fieldChanges = this.invertFieldMap(\n\t\t\t\tchange.fieldChanges,\n\t\t\t\tid,\n\t\t\t\tisRollback,\n\t\t\t\tgenId,\n\t\t\t\tcrossFieldTable,\n\t\t\t\trevisionMetadata,\n\t\t\t\trevisionForInvert,\n\t\t\t);\n\t\t}\n\n\t\treturn inverse;\n\t}\n\n\tpublic rebase(\n\t\ttaggedChange: TaggedChange<ModularChangeset>,\n\t\tpotentiallyConflictedOver: TaggedChange<ModularChangeset>,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): ModularChangeset {\n\t\t// Our current cell ordering scheme in sequences depends on being able to rebase over a change with conflicts.\n\t\t// This means that we must rebase over a muted version of the conflicted changeset.\n\t\t// That is, a version that includes its declarations (e.g., new cells) but not its changes.\n\t\t// TODO: remove once AB#46104 is completed\n\t\tconst over = mapTaggedChange(\n\t\t\tpotentiallyConflictedOver,\n\t\t\tthis.getEffectiveChange(potentiallyConflictedOver.change),\n\t\t);\n\n\t\tconst change = taggedChange.change;\n\t\tconst maxId = Math.max(change.maxId ?? -1, over.change.maxId ?? -1);\n\t\tconst idState: IdAllocationState = { maxId };\n\t\tconst genId: IdAllocator = idAllocatorFromState(idState);\n\n\t\tconst crossFieldTable: RebaseTable = {\n\t\t\t...newCrossFieldTable<FieldChange>(),\n\t\t\tnewChange: change,\n\t\t\tbaseChange: over.change,\n\t\t\tbaseFieldToContext: new Map(),\n\t\t\tbaseToRebasedNodeId: newTupleBTree(),\n\t\t\trebasedFields: new Set(),\n\t\t\trebasedNodeToParent: brand(change.nodeToParent.clone()),\n\t\t\trebasedCrossFieldKeys: change.crossFieldKeys.clone(),\n\t\t\tnodeIdPairs: [],\n\t\t\taffectedBaseFields: newTupleBTree(),\n\t\t\tfieldsWithUnattachedChild: new Set(),\n\t\t};\n\n\t\tconst getBaseRevisions = (): RevisionTag[] =>\n\t\t\trevisionInfoFromTaggedChange(over).map((info) => info.revision);\n\n\t\tconst rebaseMetadata: RebaseRevisionMetadata = {\n\t\t\t...revisionMetadata,\n\t\t\tgetRevisionToRebase: () => taggedChange.revision,\n\t\t\tgetBaseRevisions,\n\t\t};\n\n\t\tconst rebasedNodes: ChangeAtomIdBTree<NodeChangeset> = brand(change.nodeChanges.clone());\n\n\t\tconst rebasedFields = this.rebaseIntersectingFields(\n\t\t\tcrossFieldTable,\n\t\t\trebasedNodes,\n\t\t\tgenId,\n\t\t\trebaseMetadata,\n\t\t);\n\n\t\tthis.rebaseInvalidatedElements(\n\t\t\trebasedFields,\n\t\t\trebasedNodes,\n\t\t\tcrossFieldTable,\n\t\t\trebaseMetadata,\n\t\t\tgenId,\n\t\t);\n\n\t\tconst constraintState = newConstraintState(change.constraintViolationCount ?? 0);\n\t\tconst revertConstraintState = newConstraintState(\n\t\t\tchange.constraintViolationCountOnRevert ?? 0,\n\t\t);\n\n\t\tlet noChangeConstraint = change.noChangeConstraint;\n\t\tif (noChangeConstraint !== undefined && !noChangeConstraint.violated) {\n\t\t\tnoChangeConstraint = { violated: true };\n\t\t\tconstraintState.violationCount += 1;\n\t\t}\n\n\t\tthis.updateConstraintsForFields(\n\t\t\trebasedFields,\n\t\t\tNodeAttachState.Attached,\n\t\t\tNodeAttachState.Attached,\n\t\t\tconstraintState,\n\t\t\trevertConstraintState,\n\t\t\trebasedNodes,\n\t\t);\n\n\t\tconst rebased = makeModularChangeset({\n\t\t\tfieldChanges: this.pruneFieldMap(rebasedFields, rebasedNodes),\n\t\t\tnodeChanges: rebasedNodes,\n\t\t\tnodeToParent: crossFieldTable.rebasedNodeToParent,\n\t\t\tnodeAliases: change.nodeAliases,\n\t\t\tcrossFieldKeys: crossFieldTable.rebasedCrossFieldKeys,\n\t\t\tmaxId: idState.maxId,\n\t\t\trevisions: change.revisions,\n\t\t\tconstraintViolationCount: constraintState.violationCount,\n\t\t\tconstraintViolationCountOnRevert: revertConstraintState.violationCount,\n\t\t\tnoChangeConstraint,\n\t\t\tnoChangeConstraintOnRevert: change.noChangeConstraintOnRevert,\n\t\t\tbuilds: change.builds,\n\t\t\tdestroys: change.destroys,\n\t\t\trefreshers: change.refreshers,\n\t\t});\n\n\t\treturn rebased;\n\t}\n\n\t// This performs a first pass on all fields which have both new and base changes.\n\t// TODO: Can we also handle additional passes in this method?\n\tprivate rebaseIntersectingFields(\n\t\tcrossFieldTable: RebaseTable,\n\t\trebasedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tgenId: IdAllocator,\n\t\tmetadata: RebaseRevisionMetadata,\n\t): FieldChangeMap {\n\t\tconst change = crossFieldTable.newChange;\n\t\tconst baseChange = crossFieldTable.baseChange;\n\t\tconst rebasedFields = this.rebaseFieldMap(\n\t\t\tchange.fieldChanges,\n\t\t\tbaseChange.fieldChanges,\n\t\t\tundefined,\n\t\t\tgenId,\n\t\t\tcrossFieldTable,\n\t\t\tmetadata,\n\t\t);\n\n\t\t// This loop processes all fields which have both base and new changes.\n\t\t// Note that the call to `rebaseNodeChange` can add entries to `crossFieldTable.nodeIdPairs`.\n\t\tfor (const [newId, baseId, _attachState] of crossFieldTable.nodeIdPairs) {\n\t\t\tconst rebasedNode = this.rebaseNodeChange(\n\t\t\t\tnewId,\n\t\t\t\tbaseId,\n\t\t\t\tgenId,\n\t\t\t\tcrossFieldTable,\n\t\t\t\tmetadata,\n\t\t\t);\n\n\t\t\tsetInChangeAtomIdMap(rebasedNodes, newId, rebasedNode);\n\t\t}\n\n\t\treturn rebasedFields;\n\t}\n\n\t// This processes fields which have no new changes but have been invalidated by another field.\n\tprivate rebaseFieldsWithoutNewChanges(\n\t\trebasedFields: FieldChangeMap,\n\t\trebasedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tcrossFieldTable: RebaseTable,\n\t\tgenId: IdAllocator,\n\t\tmetadata: RebaseRevisionMetadata,\n\t): void {\n\t\tconst baseChange = crossFieldTable.baseChange;\n\t\tfor (const [revision, localId, fieldKey] of crossFieldTable.affectedBaseFields.keys()) {\n\t\t\tconst baseNodeId =\n\t\t\t\tlocalId === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: normalizeNodeId({ revision, localId }, baseChange.nodeAliases);\n\n\t\t\tconst baseFieldChange = fieldMapFromNodeId(\n\t\t\t\tbaseChange.fieldChanges,\n\t\t\t\tbaseChange.nodeChanges,\n\t\t\t\tbaseNodeId,\n\t\t\t).get(fieldKey);\n\n\t\t\tassert(\n\t\t\t\tbaseFieldChange !== undefined,\n\t\t\t\t0x9c2 /* Cross field key registered for empty field */,\n\t\t\t);\n\t\t\tif (crossFieldTable.baseFieldToContext.has(baseFieldChange)) {\n\t\t\t\t// This field has already been processed because there were changes to rebase.\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// This field has no changes in the new changeset, otherwise it would have been added to\n\t\t\t// `crossFieldTable.baseFieldToContext` when processing fields with both base and new changes.\n\t\t\tconst rebaseChild = (\n\t\t\t\tchild: NodeId | undefined,\n\t\t\t\tbaseChild: NodeId | undefined,\n\t\t\t\tstateChange: NodeAttachState | undefined,\n\t\t\t): NodeId | undefined => {\n\t\t\t\tassert(child === undefined, 0x9c3 /* There should be no new changes in this field */);\n\t\t\t\treturn undefined;\n\t\t\t};\n\n\t\t\tconst handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);\n\t\t\tconst fieldChange: FieldChange = {\n\t\t\t\t...baseFieldChange,\n\t\t\t\tchange: brand(handler.createEmpty()),\n\t\t\t};\n\n\t\t\tconst rebasedNodeId =\n\t\t\t\tbaseNodeId === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: rebasedNodeIdFromBaseNodeId(crossFieldTable, baseNodeId);\n\n\t\t\tconst fieldId: FieldId = { nodeId: rebasedNodeId, field: fieldKey };\n\t\t\tconst rebasedField: unknown = handler.rebaser.rebase(\n\t\t\t\tfieldChange.change,\n\t\t\t\tbaseFieldChange.change,\n\t\t\t\trebaseChild,\n\t\t\t\tgenId,\n\t\t\t\tnew RebaseManager(crossFieldTable, baseFieldChange, fieldId),\n\t\t\t\tmetadata,\n\t\t\t);\n\n\t\t\tconst rebasedFieldChange: FieldChange = {\n\t\t\t\t...baseFieldChange,\n\t\t\t\tchange: brand(rebasedField),\n\t\t\t};\n\n\t\t\t// TODO: Deduplicate\n\t\t\tcrossFieldTable.baseFieldToContext.set(baseFieldChange, {\n\t\t\t\tnewChange: fieldChange,\n\t\t\t\tbaseChange: baseFieldChange,\n\t\t\t\trebasedChange: rebasedFieldChange,\n\t\t\t\tfieldId,\n\t\t\t\tbaseNodeIds: [],\n\t\t\t});\n\t\t\tcrossFieldTable.rebasedFields.add(rebasedFieldChange);\n\n\t\t\tthis.attachRebasedField(\n\t\t\t\trebasedFields,\n\t\t\t\trebasedNodes,\n\t\t\t\tcrossFieldTable,\n\t\t\t\trebasedFieldChange,\n\t\t\t\tfieldId,\n\t\t\t\tgenId,\n\t\t\t\tmetadata,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate rebaseInvalidatedElements(\n\t\trebasedFields: FieldChangeMap,\n\t\trebasedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\ttable: RebaseTable,\n\t\tmetadata: RebaseRevisionMetadata,\n\t\tidAllocator: IdAllocator,\n\t): void {\n\t\tthis.rebaseFieldsWithoutNewChanges(\n\t\t\trebasedFields,\n\t\t\trebasedNodes,\n\t\t\ttable,\n\t\t\tidAllocator,\n\t\t\tmetadata,\n\t\t);\n\n\t\tthis.rebaseFieldsWithUnattachedChild(table, metadata, idAllocator);\n\t\tthis.rebaseInvalidatedFields(table, metadata, idAllocator);\n\t}\n\n\tprivate rebaseInvalidatedFields(\n\t\tcrossFieldTable: RebaseTable,\n\t\trebaseMetadata: RebaseRevisionMetadata,\n\t\tgenId: IdAllocator,\n\t): void {\n\t\tconst fieldsToUpdate = crossFieldTable.invalidatedFields;\n\t\tcrossFieldTable.invalidatedFields = new Set();\n\t\tfor (const field of fieldsToUpdate) {\n\t\t\tthis.rebaseInvalidatedField(field, crossFieldTable, rebaseMetadata, genId);\n\t\t}\n\t}\n\n\tprivate rebaseFieldsWithUnattachedChild(\n\t\ttable: RebaseTable,\n\t\tmetadata: RebaseRevisionMetadata,\n\t\tidAllocator: IdAllocator,\n\t): void {\n\t\tfor (const field of table.fieldsWithUnattachedChild) {\n\t\t\ttable.invalidatedFields.delete(field);\n\t\t\tthis.rebaseInvalidatedField(field, table, metadata, idAllocator, true);\n\t\t}\n\t}\n\n\tprivate rebaseInvalidatedField(\n\t\tbaseField: FieldChange,\n\t\tcrossFieldTable: RebaseTable,\n\t\trebaseMetadata: RebaseRevisionMetadata,\n\t\tgenId: IdAllocator,\n\t\tallowInval = false,\n\t): void {\n\t\tconst context = crossFieldTable.baseFieldToContext.get(baseField);\n\t\tassert(context !== undefined, 0x852 /* Every field should have a context */);\n\t\tconst {\n\t\t\tchangeHandler,\n\t\t\tchange1: fieldChangeset,\n\t\t\tchange2: baseChangeset,\n\t\t} = this.normalizeFieldChanges(context.newChange, context.baseChange);\n\n\t\tconst rebaseChild = (\n\t\t\tcurr: NodeId | undefined,\n\t\t\tbase: NodeId | undefined,\n\t\t): NodeId | undefined => {\n\t\t\tif (curr !== undefined) {\n\t\t\t\treturn curr;\n\t\t\t}\n\n\t\t\tif (base !== undefined) {\n\t\t\t\tfor (const id of context.baseNodeIds) {\n\t\t\t\t\tif (areEqualChangeAtomIds(base, id)) {\n\t\t\t\t\t\treturn base;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t};\n\n\t\tcontext.rebasedChange.change = brand(\n\t\t\tchangeHandler.rebaser.rebase(\n\t\t\t\tfieldChangeset,\n\t\t\t\tbaseChangeset,\n\t\t\t\trebaseChild,\n\t\t\t\tgenId,\n\t\t\t\tnew RebaseManager(crossFieldTable, baseField, context.fieldId, allowInval),\n\t\t\t\trebaseMetadata,\n\t\t\t),\n\t\t);\n\t}\n\n\tprivate attachRebasedField(\n\t\trebasedFields: FieldChangeMap,\n\t\trebasedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\ttable: RebaseTable,\n\t\trebasedField: FieldChange,\n\t\t{ nodeId, field: fieldKey }: FieldId,\n\t\tidAllocator: IdAllocator,\n\t\tmetadata: RebaseRevisionMetadata,\n\t): void {\n\t\tif (nodeId === undefined) {\n\t\t\trebasedFields.set(fieldKey, rebasedField);\n\t\t\treturn;\n\t\t}\n\t\tconst rebasedNode = getFromChangeAtomIdMap(rebasedNodes, nodeId);\n\t\tif (rebasedNode !== undefined) {\n\t\t\tif (rebasedNode.fieldChanges === undefined) {\n\t\t\t\trebasedNode.fieldChanges = new Map([[fieldKey, rebasedField]]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tassert(!rebasedNode.fieldChanges.has(fieldKey), 0x9c4 /* Expected an empty field */);\n\t\t\trebasedNode.fieldChanges.set(fieldKey, rebasedField);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newNode: NodeChangeset = {\n\t\t\tfieldChanges: new Map([[fieldKey, rebasedField]]),\n\t\t};\n\n\t\tsetInChangeAtomIdMap(rebasedNodes, nodeId, newNode);\n\t\tsetInChangeAtomIdMap(table.baseToRebasedNodeId, nodeId, nodeId);\n\n\t\tconst parentFieldId = getParentFieldId(table.baseChange, nodeId);\n\n\t\tthis.attachRebasedNode(\n\t\t\trebasedFields,\n\t\t\trebasedNodes,\n\t\t\ttable,\n\t\t\tnodeId,\n\t\t\tparentFieldId,\n\t\t\tidAllocator,\n\t\t\tmetadata,\n\t\t);\n\t}\n\n\tprivate attachRebasedNode(\n\t\trebasedFields: FieldChangeMap,\n\t\trebasedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\ttable: RebaseTable,\n\t\tbaseNodeId: NodeId,\n\t\tparentFieldIdBase: FieldId,\n\t\tidAllocator: IdAllocator,\n\t\tmetadata: RebaseRevisionMetadata,\n\t): void {\n\t\tconst baseFieldChange = fieldChangeFromId(\n\t\t\ttable.baseChange.fieldChanges,\n\t\t\ttable.baseChange.nodeChanges,\n\t\t\tparentFieldIdBase,\n\t\t);\n\n\t\tconst rebasedFieldId = rebasedFieldIdFromBaseId(table, parentFieldIdBase);\n\t\tsetInChangeAtomIdMap(table.rebasedNodeToParent, baseNodeId, rebasedFieldId);\n\n\t\tconst context = table.baseFieldToContext.get(baseFieldChange);\n\t\tif (context !== undefined) {\n\t\t\t// We've already processed this field.\n\t\t\t// The new child node will be attached in rebaseFieldsWithUnattachedChild.\n\t\t\tcontext.baseNodeIds.push(baseNodeId);\n\t\t\ttable.fieldsWithUnattachedChild.add(baseFieldChange);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);\n\n\t\tconst fieldChange: FieldChange = {\n\t\t\t...baseFieldChange,\n\t\t\tchange: brand(handler.createEmpty()),\n\t\t};\n\n\t\tconst rebasedChangeset = handler.rebaser.rebase(\n\t\t\thandler.createEmpty(),\n\t\t\tbaseFieldChange.change,\n\t\t\t(_idNew, idBase) =>\n\t\t\t\tidBase !== undefined && areEqualChangeAtomIds(idBase, baseNodeId)\n\t\t\t\t\t? baseNodeId\n\t\t\t\t\t: undefined,\n\t\t\tidAllocator,\n\t\t\tnew RebaseManager(table, baseFieldChange, rebasedFieldId),\n\t\t\tmetadata,\n\t\t);\n\n\t\tconst rebasedField: FieldChange = { ...baseFieldChange, change: brand(rebasedChangeset) };\n\t\ttable.rebasedFields.add(rebasedField);\n\t\ttable.baseFieldToContext.set(baseFieldChange, {\n\t\t\tnewChange: fieldChange,\n\t\t\tbaseChange: baseFieldChange,\n\t\t\trebasedChange: rebasedField,\n\t\t\tfieldId: rebasedFieldId,\n\t\t\tbaseNodeIds: [],\n\t\t});\n\n\t\tthis.attachRebasedField(\n\t\t\trebasedFields,\n\t\t\trebasedNodes,\n\t\t\ttable,\n\t\t\trebasedField,\n\t\t\trebasedFieldId,\n\t\t\tidAllocator,\n\t\t\tmetadata,\n\t\t);\n\t}\n\n\tprivate rebaseFieldMap(\n\t\tchange: FieldChangeMap,\n\t\tover: FieldChangeMap,\n\t\tparentId: NodeId | undefined,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: RebaseTable,\n\t\trevisionMetadata: RebaseRevisionMetadata,\n\t): FieldChangeMap {\n\t\tconst rebasedFields: FieldChangeMap = new Map();\n\t\tconst rebaseChild = (\n\t\t\tchild: NodeId | undefined,\n\t\t\tbaseChild: NodeId | undefined,\n\t\t\tstateChange: NodeAttachState | undefined,\n\t\t): NodeId | undefined => {\n\t\t\tif (child !== undefined && baseChild !== undefined) {\n\t\t\t\tcrossFieldTable.nodeIdPairs.push([child, baseChild, stateChange]);\n\t\t\t}\n\t\t\treturn child;\n\t\t};\n\n\t\tfor (const [field, fieldChange] of change) {\n\t\t\tconst fieldId: FieldId = { nodeId: parentId, field };\n\t\t\tconst baseChange = over.get(field);\n\t\t\tif (baseChange === undefined) {\n\t\t\t\trebasedFields.set(field, fieldChange);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tfieldKind,\n\t\t\t\tchangeHandler,\n\t\t\t\tchange1: fieldChangeset,\n\t\t\t\tchange2: baseChangeset,\n\t\t\t} = this.normalizeFieldChanges(fieldChange, baseChange);\n\n\t\t\tconst manager = new RebaseManager(crossFieldTable, baseChange, fieldId);\n\n\t\t\tconst rebasedField = changeHandler.rebaser.rebase(\n\t\t\t\tfieldChangeset,\n\t\t\t\tbaseChangeset,\n\t\t\t\trebaseChild,\n\t\t\t\tgenId,\n\t\t\t\tmanager,\n\t\t\t\trevisionMetadata,\n\t\t\t);\n\n\t\t\tconst rebasedFieldChange: FieldChange = {\n\t\t\t\tfieldKind,\n\t\t\t\tchange: brand(rebasedField),\n\t\t\t};\n\n\t\t\trebasedFields.set(field, rebasedFieldChange);\n\n\t\t\tcrossFieldTable.baseFieldToContext.set(baseChange, {\n\t\t\t\tbaseChange,\n\t\t\t\tnewChange: fieldChange,\n\t\t\t\trebasedChange: rebasedFieldChange,\n\t\t\t\tfieldId,\n\t\t\t\tbaseNodeIds: [],\n\t\t\t});\n\n\t\t\tcrossFieldTable.rebasedFields.add(rebasedFieldChange);\n\t\t}\n\n\t\treturn rebasedFields;\n\t}\n\n\tprivate rebaseNodeChange(\n\t\tnewId: NodeId,\n\t\tbaseId: NodeId,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: RebaseTable,\n\t\trevisionMetadata: RebaseRevisionMetadata,\n\t): NodeChangeset {\n\t\tconst change = nodeChangeFromId(crossFieldTable.newChange.nodeChanges, newId);\n\t\tconst over = nodeChangeFromId(crossFieldTable.baseChange.nodeChanges, baseId);\n\n\t\tconst baseMap: FieldChangeMap = over?.fieldChanges ?? new Map();\n\n\t\tconst fieldChanges =\n\t\t\tchange.fieldChanges !== undefined && over.fieldChanges !== undefined\n\t\t\t\t? this.rebaseFieldMap(\n\t\t\t\t\t\tchange?.fieldChanges ?? new Map(),\n\t\t\t\t\t\tbaseMap,\n\t\t\t\t\t\tnewId,\n\t\t\t\t\t\tgenId,\n\t\t\t\t\t\tcrossFieldTable,\n\t\t\t\t\t\trevisionMetadata,\n\t\t\t\t\t)\n\t\t\t\t: change.fieldChanges;\n\n\t\tconst rebasedChange: NodeChangeset = {};\n\n\t\tif (fieldChanges !== undefined && fieldChanges.size > 0) {\n\t\t\trebasedChange.fieldChanges = fieldChanges;\n\t\t}\n\n\t\tif (change?.nodeExistsConstraint !== undefined) {\n\t\t\trebasedChange.nodeExistsConstraint = change.nodeExistsConstraint;\n\t\t}\n\n\t\tif (change?.nodeExistsConstraintOnRevert !== undefined) {\n\t\t\trebasedChange.nodeExistsConstraintOnRevert = change.nodeExistsConstraintOnRevert;\n\t\t}\n\n\t\tsetInChangeAtomIdMap(crossFieldTable.baseToRebasedNodeId, baseId, newId);\n\t\treturn rebasedChange;\n\t}\n\n\tprivate updateConstraintsForFields(\n\t\tfields: FieldChangeMap,\n\t\tparentInputAttachState: NodeAttachState,\n\t\tparentOutputAttachState: NodeAttachState,\n\t\tconstraintState: ConstraintState,\n\t\trevertConstraintState: ConstraintState,\n\t\tnodes: ChangeAtomIdBTree<NodeChangeset>,\n\t): void {\n\t\tfor (const field of fields.values()) {\n\t\t\tconst handler = getChangeHandler(this.fieldKinds, field.fieldKind);\n\t\t\tfor (const [nodeId, inputIndex, outputIndex] of handler.getNestedChanges(field.change)) {\n\t\t\t\tconst isInputDetached = inputIndex === undefined;\n\t\t\t\tconst inputAttachState =\n\t\t\t\t\tparentInputAttachState === NodeAttachState.Detached || isInputDetached\n\t\t\t\t\t\t? NodeAttachState.Detached\n\t\t\t\t\t\t: NodeAttachState.Attached;\n\t\t\t\tconst isOutputDetached = outputIndex === undefined;\n\t\t\t\tconst outputAttachState =\n\t\t\t\t\tparentOutputAttachState === NodeAttachState.Detached || isOutputDetached\n\t\t\t\t\t\t? NodeAttachState.Detached\n\t\t\t\t\t\t: NodeAttachState.Attached;\n\t\t\t\tthis.updateConstraintsForNode(\n\t\t\t\t\tnodeId,\n\t\t\t\t\tinputAttachState,\n\t\t\t\t\toutputAttachState,\n\t\t\t\t\tnodes,\n\t\t\t\t\tconstraintState,\n\t\t\t\t\trevertConstraintState,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate updateConstraintsForNode(\n\t\tnodeId: NodeId,\n\t\tinputAttachState: NodeAttachState,\n\t\toutputAttachState: NodeAttachState,\n\t\tnodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tconstraintState: ConstraintState,\n\t\trevertConstraintState: ConstraintState,\n\t): void {\n\t\tconst node =\n\t\t\tnodes.get([nodeId.revision, nodeId.localId]) ?? fail(0xb24 /* Unknown node ID */);\n\t\tif (node.nodeExistsConstraint !== undefined) {\n\t\t\tconst isNowViolated = inputAttachState === NodeAttachState.Detached;\n\t\t\tif (node.nodeExistsConstraint.violated !== isNowViolated) {\n\t\t\t\tnode.nodeExistsConstraint = {\n\t\t\t\t\t...node.nodeExistsConstraint,\n\t\t\t\t\tviolated: isNowViolated,\n\t\t\t\t};\n\t\t\t\tconstraintState.violationCount += isNowViolated ? 1 : -1;\n\t\t\t}\n\t\t}\n\t\tif (node.nodeExistsConstraintOnRevert !== undefined) {\n\t\t\tconst isNowViolated = outputAttachState === NodeAttachState.Detached;\n\t\t\tif (node.nodeExistsConstraintOnRevert.violated !== isNowViolated) {\n\t\t\t\tnode.nodeExistsConstraintOnRevert = {\n\t\t\t\t\t...node.nodeExistsConstraintOnRevert,\n\t\t\t\t\tviolated: isNowViolated,\n\t\t\t\t};\n\t\t\t\trevertConstraintState.violationCount += isNowViolated ? 1 : -1;\n\t\t\t}\n\t\t}\n\n\t\tif (node.fieldChanges !== undefined) {\n\t\t\tthis.updateConstraintsForFields(\n\t\t\t\tnode.fieldChanges,\n\t\t\t\tinputAttachState,\n\t\t\t\toutputAttachState,\n\t\t\t\tconstraintState,\n\t\t\t\trevertConstraintState,\n\t\t\t\tnodes,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate pruneFieldMap(\n\t\tchangeset: FieldChangeMap | undefined,\n\t\tnodeMap: ChangeAtomIdBTree<NodeChangeset>,\n\t): FieldChangeMap | undefined {\n\t\tif (changeset === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst prunedChangeset: FieldChangeMap = new Map();\n\t\tfor (const [field, fieldChange] of changeset) {\n\t\t\tconst handler = getChangeHandler(this.fieldKinds, fieldChange.fieldKind);\n\n\t\t\tconst prunedFieldChangeset = handler.rebaser.prune(fieldChange.change, (nodeId) =>\n\t\t\t\tthis.pruneNodeChange(nodeId, nodeMap),\n\t\t\t);\n\n\t\t\tif (!handler.isEmpty(prunedFieldChangeset)) {\n\t\t\t\tprunedChangeset.set(field, { ...fieldChange, change: brand(prunedFieldChangeset) });\n\t\t\t}\n\t\t}\n\n\t\treturn prunedChangeset.size > 0 ? prunedChangeset : undefined;\n\t}\n\n\tprivate pruneNodeChange(\n\t\tnodeId: NodeId,\n\t\tnodeMap: ChangeAtomIdBTree<NodeChangeset>,\n\t): NodeId | undefined {\n\t\tconst changeset = nodeChangeFromId(nodeMap, nodeId);\n\t\tconst prunedFields =\n\t\t\tchangeset.fieldChanges === undefined\n\t\t\t\t? undefined\n\t\t\t\t: this.pruneFieldMap(changeset.fieldChanges, nodeMap);\n\n\t\tconst prunedChange = { ...changeset, fieldChanges: prunedFields };\n\t\tif (prunedChange.fieldChanges === undefined) {\n\t\t\tdelete prunedChange.fieldChanges;\n\t\t}\n\n\t\tif (isEmptyNodeChangeset(prunedChange)) {\n\t\t\tnodeMap.delete([nodeId.revision, nodeId.localId]);\n\t\t\treturn undefined;\n\t\t} else {\n\t\t\tsetInChangeAtomIdMap(nodeMap, nodeId, prunedChange);\n\t\t\treturn nodeId;\n\t\t}\n\t}\n\n\tpublic getRevisions(change: ModularChangeset): Set<RevisionTag | undefined> {\n\t\tconst aggregated: Set<RevisionTag | undefined> = new Set();\n\t\tfor (const revInfo of change.revisions ?? [{ revision: undefined }]) {\n\t\t\taggregated.add(revInfo.revision);\n\t\t}\n\t\treturn aggregated;\n\t}\n\n\tpublic changeRevision(\n\t\tchange: ModularChangeset,\n\t\treplacer: RevisionReplacer,\n\t): ModularChangeset {\n\t\tconst updatedFields = this.replaceFieldMapRevisions(change.fieldChanges, replacer);\n\t\tconst updatedNodes = replaceIdMapRevisions(change.nodeChanges, replacer, (nodeChangeset) =>\n\t\t\tthis.replaceNodeChangesetRevisions(nodeChangeset, replacer),\n\t\t);\n\t\tconst updatedNodeToParent = replaceIdMapRevisions(\n\t\t\tchange.nodeToParent,\n\t\t\treplacer,\n\t\t\t(fieldId) =>\n\t\t\t\treplaceFieldIdRevision(normalizeFieldId(fieldId, change.nodeAliases), replacer),\n\t\t);\n\n\t\tconst updated: Mutable<ModularChangeset> = {\n\t\t\t...change,\n\t\t\tfieldChanges: updatedFields,\n\t\t\tnodeChanges: updatedNodes,\n\t\t\tnodeToParent: updatedNodeToParent,\n\n\t\t\t// We've updated all references to old node IDs, so we no longer need an alias table.\n\t\t\tnodeAliases: newTupleBTree(),\n\t\t\tcrossFieldKeys: replaceCrossFieldKeyTableRevisions(\n\t\t\t\tchange.crossFieldKeys,\n\t\t\t\treplacer,\n\t\t\t\tchange.nodeAliases,\n\t\t\t),\n\t\t};\n\n\t\tif (change.builds !== undefined) {\n\t\t\tupdated.builds = replaceIdMapRevisions(change.builds, replacer);\n\t\t}\n\n\t\tif (change.destroys !== undefined) {\n\t\t\tupdated.destroys = replaceIdMapRevisions(change.destroys, replacer);\n\t\t}\n\n\t\tif (change.refreshers !== undefined) {\n\t\t\tupdated.refreshers = replaceIdMapRevisions(change.refreshers, replacer);\n\t\t}\n\n\t\tupdated.revisions = [{ revision: replacer.updatedRevision }];\n\n\t\treturn updated;\n\t}\n\n\tprivate replaceNodeChangesetRevisions(\n\t\tnodeChangeset: NodeChangeset,\n\t\treplacer: RevisionReplacer,\n\t): NodeChangeset {\n\t\tconst updated = { ...nodeChangeset };\n\t\tif (nodeChangeset.fieldChanges !== undefined) {\n\t\t\tupdated.fieldChanges = this.replaceFieldMapRevisions(\n\t\t\t\tnodeChangeset.fieldChanges,\n\t\t\t\treplacer,\n\t\t\t);\n\t\t}\n\n\t\treturn updated;\n\t}\n\n\tprivate replaceFieldMapRevisions(\n\t\tfields: FieldChangeMap,\n\t\treplacer: RevisionReplacer,\n\t): FieldChangeMap {\n\t\tconst updatedFields: FieldChangeMap = new Map();\n\t\tfor (const [field, fieldChange] of fields) {\n\t\t\tconst updatedFieldChange = getChangeHandler(\n\t\t\t\tthis.fieldKinds,\n\t\t\t\tfieldChange.fieldKind,\n\t\t\t).rebaser.replaceRevisions(fieldChange.change, replacer);\n\n\t\t\tupdatedFields.set(field, { ...fieldChange, change: brand(updatedFieldChange) });\n\t\t}\n\n\t\treturn updatedFields;\n\t}\n\n\tprivate makeCrossFieldKeyTable(\n\t\tfields: FieldChangeMap,\n\t\tnodes: ChangeAtomIdBTree<NodeChangeset>,\n\t): CrossFieldKeyTable {\n\t\tconst keys: CrossFieldKeyTable = newCrossFieldKeyTable();\n\t\tthis.populateCrossFieldKeyTableForFieldMap(keys, fields, undefined);\n\t\tnodes.forEachPair(([revision, localId], node) => {\n\t\t\tif (node.fieldChanges !== undefined) {\n\t\t\t\tthis.populateCrossFieldKeyTableForFieldMap(keys, node.fieldChanges, {\n\t\t\t\t\trevision,\n\t\t\t\t\tlocalId,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn keys;\n\t}\n\n\tprivate populateCrossFieldKeyTableForFieldMap(\n\t\ttable: CrossFieldKeyTable,\n\t\tfields: FieldChangeMap,\n\t\tparent: NodeId | undefined,\n\t): void {\n\t\tfor (const [fieldKey, fieldChange] of fields) {\n\t\t\tconst keys = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).getCrossFieldKeys(\n\t\t\t\tfieldChange.change,\n\t\t\t);\n\t\t\tfor (const { key, count } of keys) {\n\t\t\t\ttable.set(key, count, { nodeId: parent, field: fieldKey });\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic buildEditor(\n\t\tmintRevisionTag: () => RevisionTag,\n\t\tchangeReceiver: (change: TaggedChange<ModularChangeset>) => void,\n\t): ModularEditBuilder {\n\t\treturn new ModularEditBuilder(this, this.fieldKinds, changeReceiver, this.codecOptions);\n\t}\n\n\tprivate createEmptyFieldChange(fieldKind: FieldKindIdentifier): FieldChange {\n\t\tconst emptyChange = getChangeHandler(this.fieldKinds, fieldKind).createEmpty();\n\t\treturn { fieldKind, change: brand(emptyChange) };\n\t}\n\n\tpublic validateChangeset(change: ModularChangeset): void {\n\t\tlet numNodes = this.validateFieldChanges(change, change.fieldChanges, undefined);\n\n\t\tfor (const [[revision, localId], node] of change.nodeChanges.entries()) {\n\t\t\tif (node.fieldChanges === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst nodeId: NodeId = { revision, localId };\n\t\t\tconst numChildren = this.validateFieldChanges(change, node.fieldChanges, nodeId);\n\n\t\t\tnumNodes += numChildren;\n\t\t}\n\n\t\tassert(\n\t\t\tnumNodes === change.nodeChanges.size,\n\t\t\t0xa4d /* Node table contains unparented nodes */,\n\t\t);\n\t}\n\n\t/**\n\t * Asserts that each child and cross field key in each field has a correct entry in\n\t * `nodeToParent` or `crossFieldKeyTable`.\n\t * @returns the number of children found.\n\t */\n\tprivate validateFieldChanges(\n\t\tchange: ModularChangeset,\n\t\tfieldChanges: FieldChangeMap,\n\t\tnodeParent: NodeId | undefined,\n\t): number {\n\t\tlet numChildren = 0;\n\t\tfor (const [field, fieldChange] of fieldChanges.entries()) {\n\t\t\tconst fieldId = { nodeId: nodeParent, field };\n\t\t\tconst handler = getChangeHandler(this.fieldKinds, fieldChange.fieldKind);\n\t\t\tfor (const [child, _index] of handler.getNestedChanges(fieldChange.change)) {\n\t\t\t\tconst parentFieldId = getParentFieldId(change, child);\n\t\t\t\tassert(\n\t\t\t\t\tareEqualFieldIds(parentFieldId, fieldId),\n\t\t\t\t\t0xa4e /* Inconsistent node parentage */,\n\t\t\t\t);\n\t\t\t\tnumChildren += 1;\n\t\t\t}\n\n\t\t\tfor (const keyRange of handler.getCrossFieldKeys(fieldChange.change)) {\n\t\t\t\tconst fields = getFieldsForCrossFieldKey(change, keyRange.key, keyRange.count);\n\t\t\t\tassert(\n\t\t\t\t\tfields.length === 1 &&\n\t\t\t\t\t\tfields[0] !== undefined &&\n\t\t\t\t\t\tareEqualFieldIds(fields[0], fieldId),\n\t\t\t\t\t0xa4f /* Inconsistent cross field keys */,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn numChildren;\n\t}\n\n\tprivate getEffectiveChange(change: ModularChangeset): ModularChangeset {\n\t\tif (hasConflicts(change)) {\n\t\t\treturn this.muteChange(change);\n\t\t}\n\t\treturn change;\n\t}\n\n\t/**\n\t * Returns a copy of the given changeset with the same declarations (e.g., new cells) but no actual changes.\n\t */\n\tprivate muteChange(change: ModularChangeset): ModularChangeset {\n\t\tconst muted: Mutable<ModularChangeset> = {\n\t\t\t...change,\n\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\tfieldChanges: this.muteFieldChanges(change.fieldChanges),\n\t\t\tnodeChanges: brand(change.nodeChanges.mapValues((v) => this.muteNodeChange(v))),\n\t\t};\n\t\treturn muted;\n\t}\n\n\tprivate muteNodeChange(change: NodeChangeset): NodeChangeset {\n\t\tif (change.fieldChanges === undefined) {\n\t\t\treturn change;\n\t\t}\n\t\treturn {\n\t\t\t...change,\n\t\t\tfieldChanges: this.muteFieldChanges(change.fieldChanges),\n\t\t};\n\t}\n\n\tprivate muteFieldChanges(change: FieldChangeMap): FieldChangeMap {\n\t\treturn new Map(\n\t\t\tArray.from(change.entries(), ([key, value]) => [key, this.muteFieldChange(value)]),\n\t\t);\n\t}\n\n\tprivate muteFieldChange(change: FieldChange): FieldChange {\n\t\tconst handler = getChangeHandler(this.fieldKinds, change.fieldKind);\n\t\treturn {\n\t\t\tfieldKind: change.fieldKind,\n\t\t\tchange: brand(handler.rebaser.mute(change.change)),\n\t\t};\n\t}\n}\n\nfunction replaceCrossFieldKeyTableRevisions(\n\ttable: CrossFieldKeyTable,\n\treplacer: RevisionReplacer,\n\tnodeAliases: ChangeAtomIdBTree<NodeId>,\n): CrossFieldKeyTable {\n\tconst updated: CrossFieldKeyTable = newCrossFieldKeyTable();\n\tfor (const entry of table.entries()) {\n\t\tconst key = entry.start;\n\t\tconst updatedKey: CrossFieldKey = replacer.getUpdatedAtomId(key);\n\n\t\tconst field = entry.value;\n\t\tconst normalizedFieldId = normalizeFieldId(field, nodeAliases);\n\t\tconst updatedNodeId =\n\t\t\tnormalizedFieldId.nodeId === undefined\n\t\t\t\t? undefined\n\t\t\t\t: replacer.getUpdatedAtomId(normalizedFieldId.nodeId);\n\n\t\tconst updatedValue: FieldId = {\n\t\t\t...normalizedFieldId,\n\t\t\tnodeId: updatedNodeId,\n\t\t};\n\n\t\tupdated.set(updatedKey, entry.length, updatedValue);\n\t}\n\n\treturn updated;\n}\n\nfunction replaceIdMapRevisions<T>(\n\tmap: ChangeAtomIdBTree<T>,\n\treplacer: RevisionReplacer,\n\tvalueMapper: (value: T) => T = (value) => value,\n): ChangeAtomIdBTree<T> {\n\tconst updated: ChangeAtomIdBTree<T> = newTupleBTree();\n\tfor (const [[revision, localId], value] of map.entries()) {\n\t\tconst newAtom = replacer.getUpdatedAtomId({ revision, localId });\n\t\tupdated.set([newAtom.revision, newAtom.localId], valueMapper(value));\n\t}\n\n\treturn updated;\n}\n\ninterface BuildsDestroysAndRefreshers {\n\treadonly allBuilds: ChangeAtomIdBTree<TreeChunk>;\n\treadonly allDestroys: ChangeAtomIdBTree<number>;\n\treadonly allRefreshers: ChangeAtomIdBTree<TreeChunk>;\n}\n\nfunction composeBuildsDestroysAndRefreshers(\n\tchange1: ModularChangeset,\n\tchange2: ModularChangeset,\n): BuildsDestroysAndRefreshers {\n\t// Duplicate builds can happen in compositions of commits that needed to include detached tree refreshers (e.g., undos):\n\t// In that case, it's possible for the refreshers to contain different trees because the latter\n\t// refresher may already reflect the changes made by the commit that includes the earlier\n\t// refresher. This composition includes the changes made by the commit that includes the\n\t// earlier refresher, so we need to include the build for the earlier refresher, otherwise\n\t// the produced changeset will build a tree one which those changes have already been applied\n\t// and also try to apply the changes again, effectively applying them twice.\n\t// Note that it would in principle be possible to adopt the later build and exclude from the\n\t// composition all the changes already reflected on the tree, but that is not something we\n\t// care to support at this time.\n\tconst allBuilds: ChangeAtomIdBTree<TreeChunk> = brand(\n\t\tmergeTupleBTrees(\n\t\t\tchange1.builds ?? newTupleBTree(),\n\t\t\tchange2.builds ?? newTupleBTree(),\n\t\t\ttrue,\n\t\t),\n\t);\n\n\tconst allDestroys: ChangeAtomIdBTree<number> = brand(\n\t\tmergeTupleBTrees(change1.destroys ?? newTupleBTree(), change2.destroys ?? newTupleBTree()),\n\t);\n\n\tconst allRefreshers: ChangeAtomIdBTree<TreeChunk> = brand(\n\t\tmergeTupleBTrees(\n\t\t\tchange1.refreshers ?? newTupleBTree(),\n\t\t\tchange2.refreshers ?? newTupleBTree(),\n\t\t\ttrue,\n\t\t),\n\t);\n\n\tif (change1.destroys !== undefined && change2.builds !== undefined) {\n\t\tfor (const [key, chunk] of change2.builds.entries()) {\n\t\t\tconst destroyCount = change1.destroys.get(key);\n\t\t\tif (destroyCount !== undefined) {\n\t\t\t\tassert(\n\t\t\t\t\tdestroyCount === chunk.topLevelLength,\n\t\t\t\t\t0x89b /* Expected build and destroy to have the same length */,\n\t\t\t\t);\n\n\t\t\t\tallBuilds.delete(key);\n\t\t\t\tallDestroys.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (change1.builds !== undefined && change2.destroys !== undefined) {\n\t\tfor (const [key, chunk] of change1.builds.entries()) {\n\t\t\tconst destroyCount = change2.destroys.get(key);\n\t\t\tif (destroyCount !== undefined) {\n\t\t\t\tassert(\n\t\t\t\t\tdestroyCount === chunk.topLevelLength,\n\t\t\t\t\t0x9f0 /* Expected build and destroy to have the same length */,\n\t\t\t\t);\n\n\t\t\t\tallBuilds.delete(key);\n\t\t\t\tallDestroys.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { allBuilds, allDestroys, allRefreshers };\n}\n\nfunction invertBuilds(\n\tbuilds: ChangeAtomIdBTree<TreeChunk> | undefined,\n): ChangeAtomIdBTree<number> | undefined {\n\tif (builds !== undefined) {\n\t\treturn brand(builds.mapValues((chunk) => chunk.topLevelLength));\n\t}\n\treturn undefined;\n}\n\n/**\n * Returns the set of removed roots that should be in memory for the given change to be applied.\n * A removed root is relevant if any of the following is true:\n * - It is being inserted\n * - It is being restored\n * - It is being edited\n * - The ID it is associated with is being changed\n *\n * May be conservative by returning more removed roots than strictly necessary.\n *\n * Will never return IDs for non-root trees, even if they are removed.\n *\n * @param change - The change to be applied.\n * @param fieldKinds - The field kinds to delegate to.\n */\nexport function* relevantRemovedRoots(\n\tchange: ModularChangeset,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n): Iterable<DeltaDetachedNodeId> {\n\tyield* relevantRemovedRootsFromFields(change.fieldChanges, change.nodeChanges, fieldKinds);\n}\n\nfunction* relevantRemovedRootsFromFields(\n\tchange: FieldChangeMap,\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n): Iterable<DeltaDetachedNodeId> {\n\tfor (const [_, fieldChange] of change) {\n\t\tconst handler = getChangeHandler(fieldKinds, fieldChange.fieldKind);\n\t\tconst delegate = function* (node: NodeId): Iterable<DeltaDetachedNodeId> {\n\t\t\tconst nodeChangeset = nodeChangeFromId(nodeChanges, node);\n\t\t\tif (nodeChangeset.fieldChanges !== undefined) {\n\t\t\t\tyield* relevantRemovedRootsFromFields(\n\t\t\t\t\tnodeChangeset.fieldChanges,\n\t\t\t\t\tnodeChanges,\n\t\t\t\t\tfieldKinds,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t\tyield* handler.relevantRemovedRoots(fieldChange.change, delegate);\n\t}\n}\n\n/**\n * Adds any refreshers missing from the provided change that are relevant to the change and\n * removes any refreshers from the provided change that are not relevant to the change.\n *\n * @param change - The change that possibly has missing or superfluous refreshers. Not mutated by this function.\n * @param getDetachedNode - The function to retrieve a tree chunk from the corresponding detached node id.\n * @param removedRoots - The set of removed roots that should be in memory for the given change to be applied.\n * Can be retrieved by calling {@link relevantRemovedRoots}.\n * @param requireRefreshers - when true, this function enforces that all relevant removed roots have a\n * corresponding build or refresher.\n */\nexport function updateRefreshers(\n\tchange: ModularChangeset,\n\tgetDetachedNode: (id: DeltaDetachedNodeId) => TreeChunk | undefined,\n\tremovedRoots: Iterable<DeltaDetachedNodeId>,\n\trequireRefreshers: boolean = true,\n): ModularChangeset {\n\tconst refreshers: ChangeAtomIdBTree<TreeChunk> = newTupleBTree();\n\tconst chunkLengths: Map<RevisionTag | undefined, BTree<number, number>> = new Map();\n\n\tif (change.builds !== undefined) {\n\t\tfor (const [[revision, id], chunk] of change.builds.entries()) {\n\t\t\tconst lengthTree = getOrCreate(chunkLengths, revision, () => new BTree());\n\t\t\tlengthTree.set(id, chunk.topLevelLength);\n\t\t}\n\t}\n\n\tfor (const root of removedRoots) {\n\t\tif (change.builds !== undefined) {\n\t\t\tconst lengthTree = chunkLengths.get(root.major);\n\n\t\t\tif (lengthTree !== undefined) {\n\t\t\t\tconst lengthPair = lengthTree.getPairOrNextLower(root.minor);\n\t\t\t\tif (lengthPair !== undefined) {\n\t\t\t\t\tconst [firstMinor, length] = lengthPair;\n\n\t\t\t\t\t// if the root minor is within the length of the minor of the retrieved pair\n\t\t\t\t\t// then there's no need to check for the detached node\n\t\t\t\t\tif (root.minor < firstMinor + length) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst node = getDetachedNode(root);\n\t\tif (node === undefined) {\n\t\t\tassert(!requireRefreshers, 0x8cd /* detached node should exist */);\n\t\t} else {\n\t\t\trefreshers.set([root.major, brand(root.minor)], node);\n\t\t}\n\t}\n\n\tconst {\n\t\tfieldChanges,\n\t\tnodeChanges,\n\t\tnodeToParent,\n\t\tnodeAliases,\n\t\tcrossFieldKeys,\n\t\tmaxId,\n\t\trevisions,\n\t\tconstraintViolationCount,\n\t\tconstraintViolationCountOnRevert,\n\t\tbuilds,\n\t\tdestroys,\n\t} = change;\n\n\treturn makeModularChangeset({\n\t\tfieldChanges,\n\t\tnodeChanges,\n\t\tnodeToParent,\n\t\tnodeAliases,\n\t\tcrossFieldKeys,\n\t\tmaxId: maxId as number,\n\t\trevisions,\n\t\tconstraintViolationCount,\n\t\tconstraintViolationCountOnRevert,\n\t\tbuilds,\n\t\tdestroys,\n\t\trefreshers,\n\t});\n}\n\n/**\n * Converts a change into the delta format.\n *\n * @param change - The change to convert into a delta.\n * @param fieldKinds - The field kinds to delegate to.\n */\nexport function intoDelta(\n\ttaggedChange: TaggedChange<ModularChangeset>,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n): DeltaRoot {\n\tconst change = taggedChange.change;\n\tconst rootDelta: Mutable<DeltaRoot> = {};\n\tconst global: DeltaDetachedNodeChanges[] = [];\n\tconst rename: DeltaDetachedNodeRename[] = [];\n\n\tif (!hasConflicts(change)) {\n\t\t// If there are no constraint violations, then tree changes apply.\n\t\tconst fieldDeltas = intoDeltaImpl(\n\t\t\tchange.fieldChanges,\n\t\t\tchange.nodeChanges,\n\t\t\tfieldKinds,\n\t\t\tglobal,\n\t\t\trename,\n\t\t);\n\t\tif (fieldDeltas.size > 0) {\n\t\t\trootDelta.fields = fieldDeltas;\n\t\t}\n\t\tif (global.length > 0) {\n\t\t\trootDelta.global = global;\n\t\t}\n\t\tif (rename.length > 0) {\n\t\t\trootDelta.rename = rename;\n\t\t}\n\t}\n\n\t// Constraint violations should not prevent nodes from being built\n\tif (change.builds && change.builds.size > 0) {\n\t\trootDelta.build = copyDetachedNodes(change.builds);\n\t}\n\tif (change.destroys !== undefined && change.destroys.size > 0) {\n\t\tconst destroys: DeltaDetachedNodeDestruction[] = [];\n\t\tfor (const [[major, minor], count] of change.destroys.entries()) {\n\t\t\tdestroys.push({\n\t\t\t\tid: makeDetachedNodeId(major, minor),\n\t\t\t\tcount,\n\t\t\t});\n\t\t}\n\t\trootDelta.destroy = destroys;\n\t}\n\tif (change.refreshers && change.refreshers.size > 0) {\n\t\trootDelta.refreshers = copyDetachedNodes(change.refreshers);\n\t}\n\treturn rootDelta;\n}\n\nfunction copyDetachedNodes(\n\tdetachedNodes: ChangeAtomIdBTree<TreeChunk>,\n): DeltaDetachedNodeBuild[] | undefined {\n\tconst copiedDetachedNodes: DeltaDetachedNodeBuild[] = [];\n\tfor (const [[major, minor], chunk] of detachedNodes.entries()) {\n\t\tif (chunk.topLevelLength > 0) {\n\t\t\tchunk.referenceAdded();\n\t\t\tcopiedDetachedNodes.push({\n\t\t\t\tid: makeDetachedNodeId(major, minor),\n\t\t\t\ttrees: chunk,\n\t\t\t});\n\t\t}\n\t}\n\treturn copiedDetachedNodes.length > 0 ? copiedDetachedNodes : undefined;\n}\n\n/**\n * @param change - The change to convert into a delta.\n */\nfunction intoDeltaImpl(\n\tchange: FieldChangeMap,\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\tglobal: DeltaDetachedNodeChanges[],\n\trename: DeltaDetachedNodeRename[],\n): Map<FieldKey, DeltaFieldChanges> {\n\tconst delta: Map<FieldKey, DeltaFieldChanges> = new Map();\n\n\tfor (const [field, fieldChange] of change) {\n\t\tconst {\n\t\t\tlocal: fieldChanges,\n\t\t\tglobal: fieldGlobal,\n\t\t\trename: fieldRename,\n\t\t} = getChangeHandler(fieldKinds, fieldChange.fieldKind).intoDelta(\n\t\t\tfieldChange.change,\n\t\t\t(childChange): DeltaFieldMap => {\n\t\t\t\tconst nodeChange = nodeChangeFromId(nodeChanges, childChange);\n\t\t\t\treturn deltaFromNodeChange(nodeChange, nodeChanges, fieldKinds, global, rename);\n\t\t\t},\n\t\t);\n\t\tif (fieldChanges !== undefined && fieldChanges.length > 0) {\n\t\t\tdelta.set(field, fieldChanges);\n\t\t}\n\t\tfieldGlobal?.forEach((c) => global.push(c));\n\t\tfieldRename?.forEach((r) => rename.push(r));\n\t}\n\treturn delta;\n}\n\nfunction deltaFromNodeChange(\n\tchange: NodeChangeset,\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\tglobal: DeltaDetachedNodeChanges[],\n\trename: DeltaDetachedNodeRename[],\n): DeltaFieldMap {\n\tif (change.fieldChanges !== undefined) {\n\t\treturn intoDeltaImpl(change.fieldChanges, nodeChanges, fieldKinds, global, rename);\n\t}\n\t// TODO: update the API to allow undefined to be returned here\n\treturn new Map();\n}\n\n/**\n * @param revInfos - This should describe the revision being rebased and all revisions in the rebase path,\n * even if not part of the current base changeset.\n * For example, when rebasing change B from a local branch [A, B, C] over a branch [X, Y], the `revInfos` must include\n * the changes [A⁻¹ X, Y, A, B] for each rebase step of B.\n * @param revisionToRebase - The revision of the changeset which is being rebased.\n * @param baseRevisions - The set of revisions in the changeset being rebased over.\n * For example, when rebasing change B from a local branch [A, B, C] over a branch [X, Y], the `baseRevisions` must include\n * revisions [A⁻¹ X, Y, A] if rebasing over the composition of all those changes, or\n * revision [A⁻¹] for the first rebase, then [X], etc. if rebasing over edits individually.\n * @returns RebaseRevisionMetadata to be passed to `FieldChangeRebaser.rebase`*\n */\nexport function rebaseRevisionMetadataFromInfo(\n\trevInfos: readonly RevisionInfo[],\n\trevisionToRebase: RevisionTag | undefined,\n\tbaseRevisions: (RevisionTag | undefined)[],\n): RebaseRevisionMetadata {\n\tconst filteredRevisions: RevisionTag[] = [];\n\tfor (const revision of baseRevisions) {\n\t\tif (revision !== undefined) {\n\t\t\tfilteredRevisions.push(revision);\n\t\t}\n\t}\n\n\tconst getBaseRevisions = (): RevisionTag[] => filteredRevisions;\n\treturn {\n\t\t...revisionMetadataSourceFromInfo(revInfos),\n\t\tgetRevisionToRebase: () => revisionToRebase,\n\t\tgetBaseRevisions,\n\t};\n}\n\nfunction isEmptyNodeChangeset(change: NodeChangeset): boolean {\n\treturn (\n\t\tchange.fieldChanges === undefined &&\n\t\tchange.nodeExistsConstraint === undefined &&\n\t\tchange.nodeExistsConstraintOnRevert === undefined\n\t);\n}\n\nexport function getFieldKind(\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\tkind: FieldKindIdentifier,\n): FlexFieldKind {\n\tif (kind === genericFieldKind.identifier) {\n\t\treturn genericFieldKind;\n\t}\n\tconst fieldKind = fieldKinds.get(kind);\n\tassert(fieldKind !== undefined, 0x3ad /* Unknown field kind */);\n\treturn fieldKind;\n}\n\nexport function getChangeHandler(\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\tkind: FieldKindIdentifier,\n): FieldChangeHandler<unknown> {\n\treturn getFieldKind(fieldKinds, kind).changeHandler;\n}\n\n// TODO: TFieldData could instead just be a numeric ID generated by the CrossFieldTable\n// The CrossFieldTable could have a generic field ID to context table\ninterface CrossFieldTable<TFieldData> {\n\tsrcTable: CrossFieldMap<unknown>;\n\tdstTable: CrossFieldMap<unknown>;\n\tsrcDependents: CrossFieldMap<TFieldData>;\n\tdstDependents: CrossFieldMap<TFieldData>;\n\tinvalidatedFields: Set<TFieldData>;\n}\n\ninterface InvertTable extends CrossFieldTable<FieldChange> {\n\toriginalFieldToContext: Map<FieldChange, InvertContext>;\n\tinvertedNodeToParent: ChangeAtomIdBTree<FieldId>;\n}\n\ninterface InvertContext {\n\tfieldId: FieldId;\n\tinvertedField: FieldChange;\n}\n\ninterface RebaseTable extends CrossFieldTable<FieldChange> {\n\treadonly baseChange: ModularChangeset;\n\treadonly newChange: ModularChangeset;\n\n\t/**\n\t * Maps from the FieldChange key used for the CrossFieldTable (which is the base FieldChange)\n\t * to the context for the field.\n\t */\n\treadonly baseFieldToContext: Map<FieldChange, RebaseFieldContext>;\n\treadonly baseToRebasedNodeId: ChangeAtomIdBTree<NodeId>;\n\treadonly rebasedFields: Set<FieldChange>;\n\treadonly rebasedNodeToParent: ChangeAtomIdBTree<FieldId>;\n\treadonly rebasedCrossFieldKeys: CrossFieldKeyTable;\n\n\t/**\n\t * List of unprocessed (newId, baseId) pairs encountered so far.\n\t */\n\treadonly nodeIdPairs: [NodeId, NodeId, NodeAttachState | undefined][];\n\treadonly affectedBaseFields: TupleBTree<FieldIdKey, boolean>;\n\n\t/**\n\t * Set of base fields which contain a node which needs to be attached in the rebased changeset.\n\t */\n\treadonly fieldsWithUnattachedChild: Set<FieldChange>;\n}\n\ntype FieldIdKey = [RevisionTag | undefined, ChangesetLocalId | undefined, FieldKey];\n\ninterface RebaseFieldContext {\n\tbaseChange: FieldChange;\n\tnewChange: FieldChange;\n\trebasedChange: FieldChange;\n\tfieldId: FieldId;\n\n\t/**\n\t * The set of node IDs in the base changeset which should be included in the rebased field,\n\t * even if there is no corresponding node changeset in the new change.\n\t */\n\tbaseNodeIds: NodeId[];\n}\n\nfunction newComposeTable(\n\tbaseChange: ModularChangeset,\n\tnewChange: ModularChangeset,\n\tcomposedNodeToParent: ChangeAtomIdBTree<FieldId>,\n): ComposeTable {\n\treturn {\n\t\t...newCrossFieldTable<FieldChange>(),\n\t\tbaseChange,\n\t\tnewChange,\n\t\tfieldToContext: new Map(),\n\t\tnewFieldToBaseField: new Map(),\n\t\tnewToBaseNodeId: newTupleBTree(),\n\t\tcomposedNodes: new Set(),\n\t\tcomposedNodeToParent,\n\t\tpendingCompositions: {\n\t\t\tnodeIdsToCompose: [],\n\t\t\taffectedBaseFields: newTupleBTree(),\n\t\t\taffectedNewFields: newTupleBTree(),\n\t\t},\n\t};\n}\n\ninterface ComposeTable extends CrossFieldTable<FieldChange> {\n\treadonly baseChange: ModularChangeset;\n\treadonly newChange: ModularChangeset;\n\n\t/**\n\t * Maps from an input changeset for a field (from change1 if it has one, from change2 otherwise) to the context for that field.\n\t */\n\treadonly fieldToContext: Map<FieldChange, ComposeFieldContext>;\n\treadonly newFieldToBaseField: Map<FieldChange, FieldChange>;\n\treadonly newToBaseNodeId: ChangeAtomIdBTree<NodeId>;\n\treadonly composedNodes: Set<NodeChangeset>;\n\treadonly composedNodeToParent: ChangeAtomIdBTree<FieldId>;\n\treadonly pendingCompositions: PendingCompositions;\n}\n\ninterface PendingCompositions {\n\t/**\n\t * Each entry in this list represents a node with both base and new changes which have not yet been composed.\n\t * Entries are of the form [baseId, newId].\n\t */\n\treadonly nodeIdsToCompose: [NodeId, NodeId][];\n\n\t/**\n\t * The set of fields in the base changeset which have been affected by a cross field effect.\n\t */\n\treadonly affectedBaseFields: BTree<FieldIdKey, true>;\n\n\t/**\n\t * The set of fields in the new changeset which have been affected by a cross field effect.\n\t */\n\treadonly affectedNewFields: BTree<FieldIdKey, true>;\n}\n\ninterface ComposeFieldContext {\n\t/**\n\t * The field ID for this field in the composed changeset.\n\t */\n\tfieldId: FieldId;\n\tchange1: FieldChangeset;\n\tchange2: FieldChangeset;\n\tcomposedChange: FieldChange;\n}\n\nfunction newCrossFieldTable<T>(): CrossFieldTable<T> {\n\treturn {\n\t\tsrcTable: newChangeAtomIdRangeMap(),\n\t\tdstTable: newChangeAtomIdRangeMap(),\n\t\tsrcDependents: newChangeAtomIdRangeMap(),\n\t\tdstDependents: newChangeAtomIdRangeMap(),\n\t\tinvalidatedFields: new Set(),\n\t};\n}\n\ninterface ConstraintState {\n\tviolationCount: number;\n}\n\nfunction newConstraintState(violationCount: number): ConstraintState {\n\treturn {\n\t\tviolationCount,\n\t};\n}\n\nabstract class CrossFieldManagerI<T> implements CrossFieldManager {\n\tpublic constructor(\n\t\tprotected readonly crossFieldTable: CrossFieldTable<T>,\n\t\tprivate readonly currentFieldKey: T,\n\t\tprotected readonly allowInval = true,\n\t) {}\n\n\tpublic set(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t\tnewValue: unknown,\n\t\tinvalidateDependents: boolean,\n\t): void {\n\t\tif (invalidateDependents && this.allowInval) {\n\t\t\tconst lastChangedId = (id as number) + count - 1;\n\t\t\tlet firstId = id;\n\t\t\twhile (firstId <= lastChangedId) {\n\t\t\t\tconst dependentEntry = getFirstFromCrossFieldMap(\n\t\t\t\t\tthis.getDependents(target),\n\t\t\t\t\trevision,\n\t\t\t\t\tfirstId,\n\t\t\t\t\tlastChangedId - firstId + 1,\n\t\t\t\t);\n\t\t\t\tif (dependentEntry.value !== undefined) {\n\t\t\t\t\tthis.crossFieldTable.invalidatedFields.add(dependentEntry.value);\n\t\t\t\t}\n\n\t\t\t\tfirstId = brand(firstId + dependentEntry.length);\n\t\t\t}\n\t\t}\n\t\tsetInCrossFieldMap(this.getMap(target), revision, id, count, newValue);\n\t}\n\n\tpublic get(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t\taddDependency: boolean,\n\t): RangeQueryResult<ChangeAtomId, unknown> {\n\t\tif (addDependency) {\n\t\t\t// We assume that if there is already an entry for this ID it is because\n\t\t\t// a field handler has called compose on the same node multiple times.\n\t\t\t// In this case we only want to update the latest version, so we overwrite the dependency.\n\t\t\tsetInCrossFieldMap(\n\t\t\t\tthis.getDependents(target),\n\t\t\t\trevision,\n\t\t\t\tid,\n\t\t\t\tcount,\n\t\t\t\tthis.currentFieldKey,\n\t\t\t);\n\t\t}\n\t\treturn getFirstFromCrossFieldMap(this.getMap(target), revision, id, count);\n\t}\n\n\tpublic abstract onMoveIn(id: NodeId): void;\n\n\tpublic abstract moveKey(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t): void;\n\n\tprivate getMap(target: CrossFieldTarget): CrossFieldMap<unknown> {\n\t\treturn target === CrossFieldTarget.Source\n\t\t\t? this.crossFieldTable.srcTable\n\t\t\t: this.crossFieldTable.dstTable;\n\t}\n\n\tprivate getDependents(target: CrossFieldTarget): CrossFieldMap<T> {\n\t\treturn target === CrossFieldTarget.Source\n\t\t\t? this.crossFieldTable.srcDependents\n\t\t\t: this.crossFieldTable.dstDependents;\n\t}\n}\n\nclass InvertManager extends CrossFieldManagerI<FieldChange> {\n\tpublic constructor(\n\t\ttable: InvertTable,\n\t\tfield: FieldChange,\n\t\tprivate readonly fieldId: FieldId,\n\t\tallowInval = true,\n\t) {\n\t\tsuper(table, field, allowInval);\n\t}\n\n\tpublic override onMoveIn(id: ChangeAtomId): void {\n\t\tsetInChangeAtomIdMap(this.table.invertedNodeToParent, id, this.fieldId);\n\t}\n\n\tpublic override moveKey(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t): void {\n\t\tassert(false, 0x9c5 /* Keys should not be moved manually during invert */);\n\t}\n\n\tprivate get table(): InvertTable {\n\t\treturn this.crossFieldTable as InvertTable;\n\t}\n}\n\nclass RebaseManager extends CrossFieldManagerI<FieldChange> {\n\tpublic constructor(\n\t\ttable: RebaseTable,\n\t\tcurrentField: FieldChange,\n\t\tprivate readonly fieldId: FieldId,\n\t\tallowInval = true,\n\t) {\n\t\tsuper(table, currentField, allowInval);\n\t}\n\n\tpublic override set(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t\tnewValue: unknown,\n\t\tinvalidateDependents: boolean,\n\t): void {\n\t\tif (invalidateDependents && this.allowInval) {\n\t\t\tconst newFieldIds = getFieldsForCrossFieldKey(\n\t\t\t\tthis.table.newChange,\n\t\t\t\t{\n\t\t\t\t\ttarget,\n\t\t\t\t\trevision,\n\t\t\t\t\tlocalId: id,\n\t\t\t\t},\n\t\t\t\tcount,\n\t\t\t);\n\n\t\t\tassert(\n\t\t\t\tnewFieldIds.length === 0,\n\t\t\t\t0x9c6 /* TODO: Modifying a cross-field key from the new changeset is currently unsupported */,\n\t\t\t);\n\n\t\t\tconst baseFieldIds = getFieldsForCrossFieldKey(\n\t\t\t\tthis.table.baseChange,\n\t\t\t\t{\n\t\t\t\t\ttarget,\n\t\t\t\t\trevision,\n\t\t\t\t\tlocalId: id,\n\t\t\t\t},\n\t\t\t\tcount,\n\t\t\t);\n\n\t\t\tassert(\n\t\t\t\tbaseFieldIds.length > 0,\n\t\t\t\t0x9c7 /* Cross field key not registered in base or new change */,\n\t\t\t);\n\n\t\t\tfor (const baseFieldId of baseFieldIds) {\n\t\t\t\tthis.table.affectedBaseFields.set(\n\t\t\t\t\t[baseFieldId.nodeId?.revision, baseFieldId.nodeId?.localId, baseFieldId.field],\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tsuper.set(target, revision, id, count, newValue, invalidateDependents);\n\t}\n\n\tpublic override onMoveIn(id: ChangeAtomId): void {\n\t\tsetInChangeAtomIdMap(this.table.rebasedNodeToParent, id, this.fieldId);\n\t}\n\n\tpublic override moveKey(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t): void {\n\t\tthis.table.rebasedCrossFieldKeys.set(\n\t\t\t{ target, revision, localId: id },\n\t\t\tcount,\n\t\t\tthis.fieldId,\n\t\t);\n\t}\n\n\tprivate get table(): RebaseTable {\n\t\treturn this.crossFieldTable as RebaseTable;\n\t}\n}\n\n// TODO: Deduplicate this with RebaseTable\nclass ComposeManager extends CrossFieldManagerI<FieldChange> {\n\tpublic constructor(\n\t\ttable: ComposeTable,\n\t\tcurrentField: FieldChange,\n\t\tprivate readonly fieldId: FieldId,\n\t\tallowInval = true,\n\t) {\n\t\tsuper(table, currentField, allowInval);\n\t}\n\n\tpublic override set(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t\tnewValue: unknown,\n\t\tinvalidateDependents: boolean,\n\t): void {\n\t\tif (invalidateDependents && this.allowInval) {\n\t\t\tconst newFieldIds = getFieldsForCrossFieldKey(\n\t\t\t\tthis.table.newChange,\n\t\t\t\t{\n\t\t\t\t\ttarget,\n\t\t\t\t\trevision,\n\t\t\t\t\tlocalId: id,\n\t\t\t\t},\n\t\t\t\tcount,\n\t\t\t);\n\n\t\t\tif (newFieldIds.length > 0) {\n\t\t\t\tfor (const newFieldId of newFieldIds) {\n\t\t\t\t\tthis.table.pendingCompositions.affectedNewFields.set(\n\t\t\t\t\t\t[newFieldId.nodeId?.revision, newFieldId.nodeId?.localId, newFieldId.field],\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst baseFieldIds = getFieldsForCrossFieldKey(\n\t\t\t\t\tthis.table.baseChange,\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\trevision,\n\t\t\t\t\t\tlocalId: id,\n\t\t\t\t\t},\n\t\t\t\t\tcount,\n\t\t\t\t);\n\n\t\t\t\tassert(\n\t\t\t\t\tbaseFieldIds.length > 0,\n\t\t\t\t\t0x9c8 /* Cross field key not registered in base or new change */,\n\t\t\t\t);\n\n\t\t\t\tfor (const baseFieldId of baseFieldIds) {\n\t\t\t\t\tthis.table.pendingCompositions.affectedBaseFields.set(\n\t\t\t\t\t\t[baseFieldId.nodeId?.revision, baseFieldId.nodeId?.localId, baseFieldId.field],\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsuper.set(target, revision, id, count, newValue, invalidateDependents);\n\t}\n\n\tpublic override onMoveIn(id: ChangeAtomId): void {\n\t\tsetInChangeAtomIdMap(this.table.composedNodeToParent, id, this.fieldId);\n\t}\n\n\tpublic override moveKey(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t): void {\n\t\tthrow new Error(\"Moving cross-field keys during compose is currently unsupported\");\n\t}\n\n\tprivate get table(): ComposeTable {\n\t\treturn this.crossFieldTable as ComposeTable;\n\t}\n}\n\nfunction makeModularChangeset(\n\tprops: {\n\t\tfieldChanges?: FieldChangeMap;\n\t\tnodeChanges?: ChangeAtomIdBTree<NodeChangeset>;\n\t\tnodeToParent?: ChangeAtomIdBTree<FieldId>;\n\t\tnodeAliases?: ChangeAtomIdBTree<NodeId>;\n\t\tcrossFieldKeys?: CrossFieldKeyTable;\n\t\tmaxId: number;\n\t\trevisions?: readonly RevisionInfo[];\n\t\tconstraintViolationCount?: number;\n\t\tconstraintViolationCountOnRevert?: number;\n\t\tnoChangeConstraint?: NoChangeConstraint;\n\t\tnoChangeConstraintOnRevert?: NoChangeConstraint;\n\t\tbuilds?: ChangeAtomIdBTree<TreeChunk>;\n\t\tdestroys?: ChangeAtomIdBTree<number>;\n\t\trefreshers?: ChangeAtomIdBTree<TreeChunk>;\n\t} = {\n\t\tmaxId: -1,\n\t},\n): ModularChangeset {\n\tconst changeset: Mutable<ModularChangeset> = {\n\t\tfieldChanges: props.fieldChanges ?? new Map(),\n\t\tnodeChanges: props.nodeChanges ?? newTupleBTree(),\n\t\tnodeToParent: props.nodeToParent ?? newTupleBTree(),\n\t\tnodeAliases: props.nodeAliases ?? newTupleBTree(),\n\t\tcrossFieldKeys: props.crossFieldKeys ?? newCrossFieldKeyTable(),\n\t};\n\n\tif (props.revisions !== undefined && props.revisions.length > 0) {\n\t\tchangeset.revisions = props.revisions;\n\t}\n\tif (props.maxId >= 0) {\n\t\tchangeset.maxId = brand(props.maxId);\n\t}\n\tif (props.constraintViolationCount !== undefined && props.constraintViolationCount > 0) {\n\t\tchangeset.constraintViolationCount = props.constraintViolationCount;\n\t}\n\tif (\n\t\tprops.constraintViolationCountOnRevert !== undefined &&\n\t\tprops.constraintViolationCountOnRevert > 0\n\t) {\n\t\tchangeset.constraintViolationCountOnRevert = props.constraintViolationCountOnRevert;\n\t}\n\tif (props.noChangeConstraint !== undefined) {\n\t\tchangeset.noChangeConstraint = props.noChangeConstraint;\n\t}\n\tif (props.noChangeConstraintOnRevert !== undefined) {\n\t\tchangeset.noChangeConstraintOnRevert = props.noChangeConstraintOnRevert;\n\t}\n\tif (props.builds !== undefined && props.builds.size > 0) {\n\t\tchangeset.builds = props.builds;\n\t}\n\tif (props.destroys !== undefined && props.destroys.size > 0) {\n\t\tchangeset.destroys = props.destroys;\n\t}\n\tif (props.refreshers !== undefined && props.refreshers.size > 0) {\n\t\tchangeset.refreshers = props.refreshers;\n\t}\n\treturn changeset;\n}\n\nexport class ModularEditBuilder extends EditBuilder<ModularChangeset> {\n\tprivate transactionDepth: number = 0;\n\tprivate idAllocator: IdAllocator;\n\tprivate readonly codecOptions: CodecWriteOptions;\n\n\tpublic constructor(\n\t\tfamily: ChangeFamily<ChangeFamilyEditor, ModularChangeset>,\n\t\tprivate readonly fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\t\tchangeReceiver: (change: TaggedChange<ModularChangeset>) => void,\n\t\tcodecOptions: CodecWriteOptions,\n\t) {\n\t\tsuper(family, changeReceiver);\n\t\tthis.idAllocator = idAllocatorFromMaxId();\n\t\tthis.codecOptions = codecOptions;\n\t}\n\n\tpublic override enterTransaction(): void {\n\t\tthis.transactionDepth += 1;\n\t\tif (this.transactionDepth === 1) {\n\t\t\tthis.idAllocator = idAllocatorFromMaxId();\n\t\t}\n\t}\n\n\tpublic override exitTransaction(): void {\n\t\tassert(this.transactionDepth > 0, 0x5b9 /* Cannot exit inexistent transaction */);\n\t\tthis.transactionDepth -= 1;\n\t\tif (this.transactionDepth === 0) {\n\t\t\tthis.idAllocator = idAllocatorFromMaxId();\n\t\t}\n\t}\n\n\t/**\n\t * Builds a new tree to use in an edit.\n\t *\n\t * @param firstId - The ID to associate with the first node\n\t * @param content - The node(s) to build.\n\t * @param revision - The revision to use for the build.\n\t * @returns A description of the edit that can be passed to `submitChanges`.\n\t * The returned object may contain an owning reference to the given TreeChunk.\n\t */\n\tpublic buildTrees(\n\t\tfirstId: ChangesetLocalId,\n\t\tcontent: TreeChunk,\n\t\trevision: RevisionTag,\n\t): GlobalEditDescription {\n\t\tif (content.topLevelLength === 0) {\n\t\t\treturn { type: \"global\", revision };\n\t\t}\n\n\t\t// This content will be added to a GlobalEditDescription whose lifetime exceeds the scope of this function.\n\t\tcontent.referenceAdded();\n\n\t\tconst builds: ChangeAtomIdBTree<TreeChunk> = newTupleBTree();\n\t\tbuilds.set([revision, firstId], content);\n\n\t\treturn {\n\t\t\ttype: \"global\",\n\t\t\tbuilds,\n\t\t\trevision,\n\t\t};\n\t}\n\n\t/**\n\t * Adds a change to the edit builder\n\t * @param field - the field which is being edited\n\t * @param fieldKind - the kind of the field\n\t * @param change - the change to the field\n\t * @param revision - the revision of the change\n\t */\n\tpublic submitChange(\n\t\tfield: FieldUpPath,\n\t\tfieldKind: FieldKindIdentifier,\n\t\tchange: FieldChangeset,\n\t\trevision: RevisionTag,\n\t): void {\n\t\tconst localCrossFieldKeys = getChangeHandler(this.fieldKinds, fieldKind).getCrossFieldKeys(\n\t\t\tchange,\n\t\t);\n\n\t\tconst modularChange = buildModularChangesetFromField({\n\t\t\tpath: field,\n\t\t\tfieldChange: { fieldKind, change },\n\t\t\tnodeChanges: newTupleBTree(),\n\t\t\tnodeToParent: newTupleBTree(),\n\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\tidAllocator: this.idAllocator,\n\t\t\tlocalCrossFieldKeys,\n\t\t\trevision,\n\t\t});\n\t\tthis.applyChange(tagChange(modularChange, revision));\n\t}\n\n\tpublic submitChanges(changes: EditDescription[], revision: RevisionTag): void {\n\t\tconst modularChange = this.buildChanges(changes);\n\t\tthis.applyChange(tagChange(modularChange, revision));\n\t}\n\n\tpublic buildChanges(changes: EditDescription[]): ModularChangeset {\n\t\tconst revisions: Set<RevisionTag> = new Set();\n\t\tconst changeMaps = changes.map((change) => {\n\t\t\trevisions.add(change.revision);\n\t\t\treturn makeAnonChange(\n\t\t\t\tchange.type === \"global\"\n\t\t\t\t\t? makeModularChangeset({\n\t\t\t\t\t\t\tmaxId: this.idAllocator.getMaxId(),\n\t\t\t\t\t\t\tbuilds: change.builds,\n\t\t\t\t\t\t\trevisions: [{ revision: change.revision }],\n\t\t\t\t\t\t})\n\t\t\t\t\t: buildModularChangesetFromField({\n\t\t\t\t\t\t\tpath: change.field,\n\t\t\t\t\t\t\tfieldChange: {\n\t\t\t\t\t\t\t\tfieldKind: change.fieldKind,\n\t\t\t\t\t\t\t\tchange: change.change,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnodeChanges: newTupleBTree(),\n\t\t\t\t\t\t\tnodeToParent: newTupleBTree(),\n\t\t\t\t\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\t\t\t\t\tidAllocator: this.idAllocator,\n\t\t\t\t\t\t\tlocalCrossFieldKeys: getChangeHandler(\n\t\t\t\t\t\t\t\tthis.fieldKinds,\n\t\t\t\t\t\t\t\tchange.fieldKind,\n\t\t\t\t\t\t\t).getCrossFieldKeys(change.change),\n\t\t\t\t\t\t\trevision: change.revision,\n\t\t\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tconst revInfo = [...revisions].map((revision) => ({ revision }));\n\t\tconst composedChange: Mutable<ModularChangeset> = {\n\t\t\t...this.changeFamily.rebaser.compose(changeMaps),\n\t\t\trevisions: revInfo,\n\t\t};\n\n\t\tconst maxId: ChangesetLocalId = brand(this.idAllocator.getMaxId());\n\t\tif (maxId >= 0) {\n\t\t\tcomposedChange.maxId = maxId;\n\t\t}\n\t\treturn composedChange;\n\t}\n\n\tpublic generateId(count?: number): ChangesetLocalId {\n\t\treturn brand(this.idAllocator.allocate(count));\n\t}\n\n\tpublic addNodeExistsConstraint(path: UpPath, revision: RevisionTag): void {\n\t\tconst nodeChange: NodeChangeset = {\n\t\t\tnodeExistsConstraint: { violated: false },\n\t\t};\n\n\t\tthis.applyChange(\n\t\t\ttagChange(\n\t\t\t\tbuildModularChangesetFromNode({\n\t\t\t\t\tpath,\n\t\t\t\t\tnodeChange,\n\t\t\t\t\tnodeChanges: newTupleBTree(),\n\t\t\t\t\tnodeToParent: newTupleBTree(),\n\t\t\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\t\t\tidAllocator: this.idAllocator,\n\t\t\t\t\trevision,\n\t\t\t\t}),\n\t\t\t\trevision,\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic addNodeExistsConstraintOnRevert(path: UpPath, revision: RevisionTag): void {\n\t\tconst nodeChange: NodeChangeset = {\n\t\t\tnodeExistsConstraintOnRevert: { violated: false },\n\t\t};\n\n\t\tthis.applyChange(\n\t\t\ttagChange(\n\t\t\t\tbuildModularChangesetFromNode({\n\t\t\t\t\tpath,\n\t\t\t\t\tnodeChange,\n\t\t\t\t\tnodeChanges: newTupleBTree(),\n\t\t\t\t\tnodeToParent: newTupleBTree(),\n\t\t\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\t\t\tidAllocator: this.idAllocator,\n\t\t\t\t\trevision,\n\t\t\t\t}),\n\t\t\t\trevision,\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic addNoChangeConstraint(revision: RevisionTag): void {\n\t\tif (lt(this.codecOptions.minVersionForCollab, FluidClientVersion.v2_80)) {\n\t\t\tthrow new UsageError(\n\t\t\t\t`No change constraints require min client version of at least ${FluidClientVersion.v2_80}`,\n\t\t\t);\n\t\t}\n\n\t\tconst changeset = makeModularChangeset({\n\t\t\tmaxId: -1,\n\t\t\tnoChangeConstraint: { violated: false },\n\t\t});\n\n\t\tthis.applyChange(tagChange(changeset, revision));\n\t}\n\n\tpublic addNoChangeConstraintOnRevert(revision: RevisionTag): void {\n\t\tif (lt(this.codecOptions.minVersionForCollab, FluidClientVersion.v2_80)) {\n\t\t\tthrow new UsageError(\n\t\t\t\t`No change constraints require min client version of at least ${FluidClientVersion.v2_80}`,\n\t\t\t);\n\t\t}\n\n\t\tconst changeset = makeModularChangeset({\n\t\t\tmaxId: -1,\n\t\t\tnoChangeConstraintOnRevert: { violated: false },\n\t\t});\n\n\t\tthis.applyChange(tagChange(changeset, revision));\n\t}\n}\n\nfunction buildModularChangesetFromField(props: {\n\tpath: FieldUpPath;\n\tfieldChange: FieldChange;\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>;\n\tnodeToParent: ChangeAtomIdBTree<FieldId>;\n\tcrossFieldKeys: CrossFieldKeyTable;\n\tlocalCrossFieldKeys?: CrossFieldKeyRange[];\n\trevision: RevisionTag;\n\tidAllocator?: IdAllocator;\n\tchildId?: NodeId;\n}): ModularChangeset {\n\tconst {\n\t\tpath,\n\t\tfieldChange,\n\t\tnodeChanges,\n\t\tnodeToParent,\n\t\tcrossFieldKeys,\n\t\tidAllocator = idAllocatorFromMaxId(),\n\t\tlocalCrossFieldKeys = [],\n\t\tchildId,\n\t\trevision,\n\t} = props;\n\tconst fieldChanges: FieldChangeMap = new Map([[path.field, fieldChange]]);\n\n\tif (path.parent === undefined) {\n\t\tfor (const { key, count } of localCrossFieldKeys) {\n\t\t\tcrossFieldKeys.set(key, count, { nodeId: undefined, field: path.field });\n\t\t}\n\n\t\tif (childId !== undefined) {\n\t\t\tsetInChangeAtomIdMap(nodeToParent, childId, {\n\t\t\t\tnodeId: undefined,\n\t\t\t\tfield: path.field,\n\t\t\t});\n\t\t}\n\n\t\treturn makeModularChangeset({\n\t\t\tfieldChanges,\n\t\t\tnodeChanges,\n\t\t\tnodeToParent,\n\t\t\tcrossFieldKeys,\n\t\t\tmaxId: idAllocator.getMaxId(),\n\t\t\trevisions: [{ revision }],\n\t\t});\n\t}\n\n\tconst nodeChangeset: NodeChangeset = {\n\t\tfieldChanges,\n\t};\n\n\tconst parentId: NodeId = { localId: brand(idAllocator.allocate()), revision };\n\n\tfor (const { key, count } of localCrossFieldKeys) {\n\t\tcrossFieldKeys.set(key, count, { nodeId: parentId, field: path.field });\n\t}\n\n\tif (childId !== undefined) {\n\t\tsetInChangeAtomIdMap(nodeToParent, childId, {\n\t\t\tnodeId: parentId,\n\t\t\tfield: path.field,\n\t\t});\n\t}\n\n\treturn buildModularChangesetFromNode({\n\t\tpath: path.parent,\n\t\tnodeChange: nodeChangeset,\n\t\tnodeChanges,\n\t\tnodeToParent,\n\t\tcrossFieldKeys,\n\t\tidAllocator,\n\t\trevision,\n\t\tnodeId: parentId,\n\t});\n}\n\nfunction buildModularChangesetFromNode(props: {\n\tpath: UpPath;\n\tnodeChange: NodeChangeset;\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>;\n\tnodeToParent: ChangeAtomIdBTree<FieldId>;\n\tcrossFieldKeys: CrossFieldKeyTable;\n\tidAllocator: IdAllocator;\n\trevision: RevisionTag;\n\tnodeId?: NodeId;\n}): ModularChangeset {\n\tconst {\n\t\tpath,\n\t\tidAllocator,\n\t\trevision,\n\t\tnodeChanges,\n\t\tnodeChange,\n\t\tnodeId = { localId: brand(idAllocator.allocate()), revision },\n\t} = props;\n\tsetInChangeAtomIdMap(nodeChanges, nodeId, nodeChange);\n\tconst fieldChangeset = genericFieldKind.changeHandler.editor.buildChildChanges([\n\t\t[path.parentIndex, nodeId],\n\t]);\n\n\tconst fieldChange: FieldChange = {\n\t\tfieldKind: genericFieldKind.identifier,\n\t\tchange: fieldChangeset,\n\t};\n\n\treturn buildModularChangesetFromField({\n\t\t...props,\n\t\tpath: { parent: path.parent, field: path.parentField },\n\t\tfieldChange,\n\t\tlocalCrossFieldKeys: [],\n\t\tchildId: nodeId,\n\t});\n}\n\nexport interface FieldEditDescription {\n\ttype: \"field\";\n\tfield: FieldUpPath;\n\tfieldKind: FieldKindIdentifier;\n\tchange: FieldChangeset;\n\trevision: RevisionTag;\n}\n\nexport interface GlobalEditDescription {\n\ttype: \"global\";\n\trevision: RevisionTag;\n\tbuilds?: ChangeAtomIdBTree<TreeChunk>;\n}\n\nexport type EditDescription = FieldEditDescription | GlobalEditDescription;\n\nfunction getRevInfoFromTaggedChanges(changes: TaggedChange<ModularChangeset>[]): {\n\trevInfos: RevisionInfo[];\n\tmaxId: ChangesetLocalId;\n} {\n\tlet maxId = -1;\n\tconst revInfos: RevisionInfo[] = [];\n\tconst revisions = new Set<RevisionTag>();\n\tfor (const taggedChange of changes) {\n\t\tconst change = taggedChange.change;\n\t\tmaxId = Math.max(change.maxId ?? -1, maxId);\n\t\tconst infosToAdd = revisionInfoFromTaggedChange(taggedChange);\n\t\tfor (const info of infosToAdd) {\n\t\t\tif (!revisions.has(info.revision)) {\n\t\t\t\trevisions.add(info.revision);\n\t\t\t\trevInfos.push(info);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rolledBackRevisions: RevisionTag[] = [];\n\tfor (const info of revInfos) {\n\t\tif (info.rollbackOf !== undefined) {\n\t\t\trolledBackRevisions.push(info.rollbackOf);\n\t\t}\n\t}\n\n\trolledBackRevisions.reverse();\n\tfor (const revision of rolledBackRevisions) {\n\t\tif (!revisions.has(revision)) {\n\t\t\trevInfos.push({ revision });\n\t\t}\n\t}\n\n\treturn { maxId: brand(maxId), revInfos };\n}\n\nfunction revisionInfoFromTaggedChange(\n\ttaggedChange: TaggedChange<ModularChangeset>,\n): RevisionInfo[] {\n\tconst revInfos: RevisionInfo[] = [];\n\tif (taggedChange.change.revisions !== undefined) {\n\t\trevInfos.push(...taggedChange.change.revisions);\n\t} else if (taggedChange.revision !== undefined) {\n\t\tconst info: Mutable<RevisionInfo> = { revision: taggedChange.revision };\n\t\tif (taggedChange.rollbackOf !== undefined) {\n\t\t\tinfo.rollbackOf = taggedChange.rollbackOf;\n\t\t}\n\t\trevInfos.push(info);\n\t}\n\treturn revInfos;\n}\n\nfunction fieldChangeFromId(\n\tfields: FieldChangeMap,\n\tnodes: ChangeAtomIdBTree<NodeChangeset>,\n\tid: FieldId,\n): FieldChange {\n\tconst fieldMap = fieldMapFromNodeId(fields, nodes, id.nodeId);\n\treturn fieldMap.get(id.field) ?? fail(0xb25 /* No field exists for the given ID */);\n}\n\nfunction fieldMapFromNodeId(\n\trootFieldMap: FieldChangeMap,\n\tnodes: ChangeAtomIdBTree<NodeChangeset>,\n\tnodeId: NodeId | undefined,\n): FieldChangeMap {\n\tif (nodeId === undefined) {\n\t\treturn rootFieldMap;\n\t}\n\n\tconst node = nodeChangeFromId(nodes, nodeId);\n\tassert(node.fieldChanges !== undefined, 0x9c9 /* Expected node to have field changes */);\n\treturn node.fieldChanges;\n}\n\nfunction rebasedFieldIdFromBaseId(table: RebaseTable, baseId: FieldId): FieldId {\n\tif (baseId.nodeId === undefined) {\n\t\treturn baseId;\n\t}\n\n\treturn { ...baseId, nodeId: rebasedNodeIdFromBaseNodeId(table, baseId.nodeId) };\n}\n\nfunction rebasedNodeIdFromBaseNodeId(table: RebaseTable, baseId: NodeId): NodeId {\n\treturn getFromChangeAtomIdMap(table.baseToRebasedNodeId, baseId) ?? baseId;\n}\n\nfunction nodeChangeFromId(nodes: ChangeAtomIdBTree<NodeChangeset>, id: NodeId): NodeChangeset {\n\tconst node = getFromChangeAtomIdMap(nodes, id);\n\tassert(node !== undefined, 0x9ca /* Unknown node ID */);\n\treturn node;\n}\n\nfunction fieldIdFromFieldIdKey([revision, localId, field]: FieldIdKey): FieldId {\n\tconst nodeId = localId === undefined ? undefined : { revision, localId };\n\treturn { nodeId, field };\n}\n\nfunction cloneNodeChangeset(nodeChangeset: NodeChangeset): NodeChangeset {\n\tif (nodeChangeset.fieldChanges !== undefined) {\n\t\treturn { ...nodeChangeset, fieldChanges: new Map(nodeChangeset.fieldChanges) };\n\t}\n\n\treturn { ...nodeChangeset };\n}\n\nfunction replaceFieldIdRevision(fieldId: FieldId, replacer: RevisionReplacer): FieldId {\n\tif (fieldId.nodeId === undefined) {\n\t\treturn fieldId;\n\t}\n\n\treturn {\n\t\t...fieldId,\n\t\tnodeId: replacer.getUpdatedAtomId(fieldId.nodeId),\n\t};\n}\n\nexport function getParentFieldId(changeset: ModularChangeset, nodeId: NodeId): FieldId {\n\tconst parentId = getFromChangeAtomIdMap(changeset.nodeToParent, nodeId);\n\tassert(parentId !== undefined, 0x9cb /* Parent field should be defined */);\n\treturn normalizeFieldId(parentId, changeset.nodeAliases);\n}\n\nfunction getFieldsForCrossFieldKey(\n\tchangeset: ModularChangeset,\n\tkey: CrossFieldKey,\n\tcount: number,\n): FieldId[] {\n\treturn changeset.crossFieldKeys\n\t\t.getAll(key, count)\n\t\t.map(({ value: fieldId }) => normalizeFieldId(fieldId, changeset.nodeAliases));\n}\n\n// This is only exported for use in test utilities.\nexport function normalizeFieldId(\n\tfieldId: FieldId,\n\tnodeAliases: ChangeAtomIdBTree<NodeId>,\n): FieldId {\n\treturn fieldId.nodeId === undefined\n\t\t? fieldId\n\t\t: { ...fieldId, nodeId: normalizeNodeId(fieldId.nodeId, nodeAliases) };\n}\n\n/**\n * @returns The canonical form of nodeId, according to nodeAliases\n */\nfunction normalizeNodeId(nodeId: NodeId, nodeAliases: ChangeAtomIdBTree<NodeId>): NodeId {\n\tlet currentId = nodeId;\n\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst dealiased = getFromChangeAtomIdMap(nodeAliases, currentId);\n\t\tif (dealiased === undefined) {\n\t\t\treturn currentId;\n\t\t}\n\n\t\tcurrentId = dealiased;\n\t}\n}\n\nfunction hasConflicts(change: ModularChangeset): boolean {\n\treturn (change.constraintViolationCount ?? 0) > 0;\n}\n\ninterface ModularChangesetContent {\n\tfieldChanges: FieldChangeMap;\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>;\n\tnodeToParent: ChangeAtomIdBTree<FieldId>;\n\tnodeAliases: ChangeAtomIdBTree<NodeId>;\n\tcrossFieldKeys: CrossFieldKeyTable;\n}\n\nfunction areEqualFieldIds(a: FieldId, b: FieldId): boolean {\n\treturn areEqualChangeAtomIdOpts(a.nodeId, b.nodeId) && a.field === b.field;\n}\n"]}
1
+ {"version":3,"file":"modularChangeFamily.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeFamily.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, fail } from \"@fluidframework/core-utils/internal\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport { BTree } from \"@tylerbu/sorted-btree-es6\";\nimport { lt } from \"semver-ts\";\n\nimport {\n\tFluidClientVersion,\n\ttype CodecWriteOptions,\n\ttype ICodecFamily,\n} from \"../../codec/index.js\";\nimport {\n\ttype ChangeEncodingContext,\n\ttype ChangeFamily,\n\ttype ChangeFamilyEditor,\n\ttype ChangeRebaser,\n\ttype ChangesetLocalId,\n\ttype DeltaDetachedNodeBuild,\n\ttype DeltaDetachedNodeDestruction,\n\ttype DeltaDetachedNodeId,\n\ttype DeltaFieldChanges,\n\ttype DeltaFieldMap,\n\ttype DeltaRoot,\n\tEditBuilder,\n\ttype FieldKey,\n\ttype FieldKindIdentifier,\n\ttype FieldUpPath,\n\ttype RevisionInfo,\n\ttype RevisionMetadataSource,\n\ttype RevisionTag,\n\ttype TaggedChange,\n\ttype UpPath,\n\tmakeDetachedNodeId,\n\trevisionMetadataSourceFromInfo,\n\tareEqualChangeAtomIds,\n\ttype ChangeAtomId,\n\tareEqualChangeAtomIdOpts,\n\ttagChange,\n\tmakeAnonChange,\n\tnewChangeAtomIdRangeMap,\n\ttype DeltaDetachedNodeChanges,\n\ttype DeltaDetachedNodeRename,\n\tmapTaggedChange,\n\ttype RevisionReplacer,\n} from \"../../core/index.js\";\nimport {\n\ttype IdAllocationState,\n\ttype IdAllocator,\n\ttype Mutable,\n\tbrand,\n\tidAllocatorFromMaxId,\n\tidAllocatorFromState,\n\ttype RangeQueryResult,\n\tgetOrCreate,\n\tnewTupleBTree,\n\tmergeTupleBTrees,\n\ttype TupleBTree,\n\tRangeMap,\n\tbalancedReduce,\n} from \"../../util/index.js\";\nimport {\n\tgetFromChangeAtomIdMap,\n\tsetInChangeAtomIdMap,\n\ttype ChangeAtomIdBTree,\n} from \"../changeAtomIdBTree.js\";\nimport type { TreeChunk } from \"../chunked-forest/index.js\";\n\nimport {\n\ttype CrossFieldManager,\n\ttype CrossFieldMap,\n\tCrossFieldTarget,\n\tgetFirstFromCrossFieldMap,\n\tsetInCrossFieldMap,\n} from \"./crossFieldQueries.js\";\nimport {\n\ttype FieldChangeHandler,\n\tNodeAttachState,\n\ttype RebaseRevisionMetadata,\n} from \"./fieldChangeHandler.js\";\nimport type { FlexFieldKind } from \"./fieldKind.js\";\nimport { convertGenericChange, genericFieldKind } from \"./genericFieldKind.js\";\nimport type { GenericChangeset } from \"./genericFieldKindTypes.js\";\nimport {\n\ttype CrossFieldKey,\n\ttype CrossFieldKeyRange,\n\ttype CrossFieldKeyTable,\n\ttype FieldChange,\n\ttype FieldChangeMap,\n\ttype FieldChangeset,\n\ttype FieldId,\n\ttype ModularChangeset,\n\tnewCrossFieldKeyTable,\n\ttype NoChangeConstraint,\n\ttype NodeChangeset,\n\ttype NodeId,\n} from \"./modularChangeTypes.js\";\n\n/**\n * Implementation of ChangeFamily which delegates work in a given field to the appropriate FieldKind\n * as determined by the schema.\n */\nexport class ModularChangeFamily\n\timplements\n\t\tChangeFamily<ModularEditBuilder, ModularChangeset>,\n\t\tChangeRebaser<ModularChangeset>\n{\n\tpublic static readonly emptyChange: ModularChangeset = makeModularChangeset();\n\n\tpublic readonly fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>;\n\n\tpublic constructor(\n\t\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\t\tpublic readonly codecs: ICodecFamily<ModularChangeset, ChangeEncodingContext>,\n\t\tpublic readonly codecOptions: CodecWriteOptions,\n\t) {\n\t\tthis.fieldKinds = fieldKinds;\n\t}\n\n\tpublic get rebaser(): ChangeRebaser<ModularChangeset> {\n\t\treturn this;\n\t}\n\n\t/**\n\t * Produces an equivalent list of `FieldChangeset`s that all target the same {@link FlexFieldKind}.\n\t * @param changes - The list of `FieldChange`s whose `FieldChangeset`s needs to be normalized.\n\t * @returns An object that contains both the equivalent list of `FieldChangeset`s that all\n\t * target the same {@link FlexFieldKind}, and the `FieldKind` that they target.\n\t * The returned `FieldChangeset`s may be a shallow copy of the input `FieldChange`s.\n\t */\n\tprivate normalizeFieldChanges(\n\t\tchange1: FieldChange,\n\t\tchange2: FieldChange,\n\t): {\n\t\tfieldKind: FieldKindIdentifier;\n\t\tchangeHandler: FieldChangeHandler<unknown>;\n\t\tchange1: FieldChangeset;\n\t\tchange2: FieldChangeset;\n\t} {\n\t\t// TODO: Handle the case where changes have conflicting field kinds\n\t\tconst kind =\n\t\t\tchange1.fieldKind === genericFieldKind.identifier\n\t\t\t\t? change2.fieldKind\n\t\t\t\t: change1.fieldKind;\n\n\t\tif (kind === genericFieldKind.identifier) {\n\t\t\t// Both changes are generic\n\t\t\treturn {\n\t\t\t\tfieldKind: genericFieldKind.identifier,\n\t\t\t\tchangeHandler: genericFieldKind.changeHandler,\n\t\t\t\tchange1: change1.change,\n\t\t\t\tchange2: change2.change,\n\t\t\t};\n\t\t}\n\t\tconst fieldKind = getFieldKind(this.fieldKinds, kind);\n\t\tconst changeHandler = fieldKind.changeHandler;\n\t\tconst normalizedChange1 = this.normalizeFieldChange(change1, changeHandler);\n\t\tconst normalizedChange2 = this.normalizeFieldChange(change2, changeHandler);\n\t\treturn {\n\t\t\tfieldKind: kind,\n\t\t\tchangeHandler,\n\t\t\tchange1: normalizedChange1,\n\t\t\tchange2: normalizedChange2,\n\t\t};\n\t}\n\n\tprivate normalizeFieldChange<T>(\n\t\tfieldChange: FieldChange,\n\t\thandler: FieldChangeHandler<T>,\n\t): FieldChangeset {\n\t\tif (fieldChange.fieldKind !== genericFieldKind.identifier) {\n\t\t\treturn fieldChange.change;\n\t\t}\n\n\t\t// The cast is based on the `fieldKind` check above\n\t\tconst genericChange = fieldChange.change as unknown as GenericChangeset;\n\t\tconst convertedChange = convertGenericChange(genericChange, handler) as FieldChangeset;\n\n\t\treturn convertedChange;\n\t}\n\n\tpublic compose(changes: TaggedChange<ModularChangeset>[]): ModularChangeset {\n\t\tconst { revInfos, maxId } = getRevInfoFromTaggedChanges(changes);\n\t\tconst idState: IdAllocationState = { maxId };\n\n\t\tconst pairwiseDelegate = (\n\t\t\tleft: ModularChangeset,\n\t\t\tright: ModularChangeset,\n\t\t): ModularChangeset => {\n\t\t\treturn this.composePair(left, right, revInfos, idState);\n\t\t};\n\n\t\tconst innerChanges = changes.map((change) => change.change);\n\t\treturn balancedReduce(innerChanges, pairwiseDelegate, makeModularChangeset);\n\t}\n\n\tprivate composePair(\n\t\tchange1: ModularChangeset,\n\t\tchange2: ModularChangeset,\n\t\trevInfos: RevisionInfo[],\n\t\tidState: IdAllocationState,\n\t): ModularChangeset {\n\t\tconst { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys } =\n\t\t\tthis.composeAllFields(change1, change2, revInfos, idState);\n\n\t\tconst { allBuilds, allDestroys, allRefreshers } = composeBuildsDestroysAndRefreshers(\n\t\t\tchange1,\n\t\t\tchange2,\n\t\t);\n\n\t\t// The composed changeset has a \"no change\" constraint if either change has one\n\t\tconst noChangeConstraint = change1.noChangeConstraint ?? change2.noChangeConstraint;\n\t\tconst noChangeConstraintOnRevert =\n\t\t\tchange1.noChangeConstraintOnRevert ?? change2.noChangeConstraintOnRevert;\n\n\t\treturn makeModularChangeset({\n\t\t\tfieldChanges,\n\t\t\tnodeChanges,\n\t\t\tnodeToParent,\n\t\t\tnodeAliases,\n\t\t\tcrossFieldKeys,\n\t\t\tmaxId: idState.maxId,\n\t\t\trevisions: revInfos,\n\t\t\tnoChangeConstraint,\n\t\t\tnoChangeConstraintOnRevert,\n\t\t\tbuilds: allBuilds,\n\t\t\tdestroys: allDestroys,\n\t\t\trefreshers: allRefreshers,\n\t\t});\n\t}\n\n\tprivate composeAllFields(\n\t\tpotentiallyConflictedChange1: ModularChangeset,\n\t\tpotentiallyConflictedChange2: ModularChangeset,\n\t\trevInfos: RevisionInfo[],\n\t\tidState: IdAllocationState,\n\t): ModularChangesetContent {\n\t\t// Our current cell ordering scheme in sequences depends on being able to rebase over a change with conflicts.\n\t\t// This means that compose must preserve declarations (e.g., new cells) made by conflicted changes (so that we can rebase over the composition).\n\t\t// TODO: remove once AB#46104 is completed\n\t\tconst change1 = this.getEffectiveChange(potentiallyConflictedChange1);\n\t\tconst change2 = this.getEffectiveChange(potentiallyConflictedChange2);\n\n\t\tconst genId: IdAllocator = idAllocatorFromState(idState);\n\t\tconst revisionMetadata: RevisionMetadataSource = revisionMetadataSourceFromInfo(revInfos);\n\n\t\t// We merge nodeChanges, nodeToParent, and nodeAliases from the two changesets.\n\t\t// The merged tables will have correct entries for all nodes which are only referenced in one of the input changesets.\n\t\t// During composeFieldMaps and composeInvalidatedElements we will find all nodes referenced in both input changesets\n\t\t// and adjust these tables as necessary.\n\t\t// Note that when merging these tables we may encounter key collisions and will arbitrarily drop values in that case.\n\t\t// A collision for a node ID means that that node is referenced in both changesets\n\t\t// (since we assume that if two changesets use the same node ID they are referring to the same node),\n\t\t// therefore all collisions will be addressed when processing the intersection of the changesets.\n\t\tconst composedNodeChanges: ChangeAtomIdBTree<NodeChangeset> = brand(\n\t\t\tmergeTupleBTrees(change1.nodeChanges, change2.nodeChanges),\n\t\t);\n\n\t\tconst composedNodeToParent: ChangeAtomIdBTree<FieldId> = brand(\n\t\t\tmergeTupleBTrees(change1.nodeToParent, change2.nodeToParent),\n\t\t);\n\t\tconst composedNodeAliases: ChangeAtomIdBTree<NodeId> = brand(\n\t\t\tmergeTupleBTrees(change1.nodeAliases, change2.nodeAliases),\n\t\t);\n\n\t\tconst crossFieldTable = newComposeTable(change1, change2, composedNodeToParent);\n\n\t\tconst composedFields = this.composeFieldMaps(\n\t\t\tchange1.fieldChanges,\n\t\t\tchange2.fieldChanges,\n\t\t\tundefined,\n\t\t\tgenId,\n\t\t\tcrossFieldTable,\n\t\t\trevisionMetadata,\n\t\t);\n\n\t\tthis.composeInvalidatedElements(\n\t\t\tcrossFieldTable,\n\t\t\tcomposedFields,\n\t\t\tcomposedNodeChanges,\n\t\t\tcomposedNodeToParent,\n\t\t\tcomposedNodeAliases,\n\t\t\tgenId,\n\t\t\trevisionMetadata,\n\t\t);\n\n\t\t// Currently no field kinds require making changes to cross-field keys during composition, so we can just merge the two tables.\n\t\tconst composedCrossFieldKeys = RangeMap.union(\n\t\t\tchange1.crossFieldKeys,\n\t\t\tchange2.crossFieldKeys,\n\t\t);\n\t\treturn {\n\t\t\tfieldChanges: composedFields,\n\t\t\tnodeChanges: composedNodeChanges,\n\t\t\tnodeToParent: composedNodeToParent,\n\t\t\tnodeAliases: composedNodeAliases,\n\t\t\tcrossFieldKeys: composedCrossFieldKeys,\n\t\t};\n\t}\n\n\tprivate composeInvalidatedField(\n\t\tfieldChange: FieldChange,\n\t\tcrossFieldTable: ComposeTable,\n\t\tgenId: IdAllocator,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): void {\n\t\tconst context = crossFieldTable.fieldToContext.get(fieldChange);\n\t\tassert(context !== undefined, 0x8cc /* Should have context for every invalidated field */);\n\t\tconst { fieldId, change1: fieldChange1, change2: fieldChange2, composedChange } = context;\n\n\t\tconst rebaser = getChangeHandler(this.fieldKinds, composedChange.fieldKind).rebaser;\n\t\tconst composeNodes = (child1: NodeId | undefined, child2: NodeId | undefined): NodeId => {\n\t\t\tif (\n\t\t\t\tchild1 !== undefined &&\n\t\t\t\tchild2 !== undefined &&\n\t\t\t\tgetFromChangeAtomIdMap(crossFieldTable.newToBaseNodeId, child2) === undefined\n\t\t\t) {\n\t\t\t\tsetInChangeAtomIdMap(crossFieldTable.newToBaseNodeId, child2, child1);\n\t\t\t\tcrossFieldTable.pendingCompositions.nodeIdsToCompose.push([child1, child2]);\n\t\t\t}\n\n\t\t\treturn child1 ?? child2 ?? fail(0xb22 /* Should not compose two undefined nodes */);\n\t\t};\n\n\t\tconst amendedChange = rebaser.compose(\n\t\t\tfieldChange1,\n\t\t\tfieldChange2,\n\t\t\tcomposeNodes,\n\t\t\tgenId,\n\t\t\tnew ComposeManager(crossFieldTable, fieldChange, fieldId, false),\n\t\t\trevisionMetadata,\n\t\t);\n\t\tcomposedChange.change = brand(amendedChange);\n\t}\n\n\t/**\n\t * Updates everything in the composed output which may no longer be valid.\n\t * This could be due to\n\t * - discovering that two node changesets refer to the same node (`nodeIdsToCompose`)\n\t * - a previously composed field being invalidated by a cross field effect (`invalidatedFields`)\n\t * - a field which was copied directly from an input changeset being invalidated by a cross field effect\n\t * (`affectedBaseFields` and `affectedNewFields`)\n\t *\n\t * Updating an element may invalidate further elements. This function runs until there is no more invalidation.\n\t */\n\tprivate composeInvalidatedElements(\n\t\ttable: ComposeTable,\n\t\tcomposedFields: FieldChangeMap,\n\t\tcomposedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tcomposedNodeToParent: ChangeAtomIdBTree<FieldId>,\n\t\tnodeAliases: ChangeAtomIdBTree<NodeId>,\n\t\tgenId: IdAllocator,\n\t\tmetadata: RevisionMetadataSource,\n\t): void {\n\t\tconst pending = table.pendingCompositions;\n\t\twhile (\n\t\t\ttable.invalidatedFields.size > 0 ||\n\t\t\tpending.nodeIdsToCompose.length > 0 ||\n\t\t\tpending.affectedBaseFields.length > 0 ||\n\t\t\tpending.affectedNewFields.length > 0\n\t\t) {\n\t\t\t// Note that the call to `composeNodesById` can add entries to `crossFieldTable.nodeIdPairs`.\n\t\t\tfor (const [id1, id2] of pending.nodeIdsToCompose) {\n\t\t\t\tthis.composeNodesById(\n\t\t\t\t\ttable.baseChange.nodeChanges,\n\t\t\t\t\ttable.newChange.nodeChanges,\n\t\t\t\t\tcomposedNodes,\n\t\t\t\t\tcomposedNodeToParent,\n\t\t\t\t\tnodeAliases,\n\t\t\t\t\tid1,\n\t\t\t\t\tid2,\n\t\t\t\t\tgenId,\n\t\t\t\t\ttable,\n\t\t\t\t\tmetadata,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tpending.nodeIdsToCompose.length = 0;\n\n\t\t\tthis.composeAffectedFields(\n\t\t\t\ttable,\n\t\t\t\ttable.baseChange,\n\t\t\t\ttrue,\n\t\t\t\tpending.affectedBaseFields,\n\t\t\t\tcomposedFields,\n\t\t\t\tcomposedNodes,\n\t\t\t\tgenId,\n\t\t\t\tmetadata,\n\t\t\t);\n\n\t\t\tthis.composeAffectedFields(\n\t\t\t\ttable,\n\t\t\t\ttable.newChange,\n\t\t\t\tfalse,\n\t\t\t\tpending.affectedNewFields,\n\t\t\t\tcomposedFields,\n\t\t\t\tcomposedNodes,\n\t\t\t\tgenId,\n\t\t\t\tmetadata,\n\t\t\t);\n\n\t\t\tthis.processInvalidatedCompositions(table, genId, metadata);\n\t\t}\n\t}\n\n\tprivate processInvalidatedCompositions(\n\t\ttable: ComposeTable,\n\t\tgenId: IdAllocator,\n\t\tmetadata: RevisionMetadataSource,\n\t): void {\n\t\tconst fieldsToUpdate = table.invalidatedFields;\n\t\ttable.invalidatedFields = new Set();\n\t\tfor (const fieldChange of fieldsToUpdate) {\n\t\t\tthis.composeInvalidatedField(fieldChange, table, genId, metadata);\n\t\t}\n\t}\n\n\t/**\n\t * Ensures that each field in `affectedFields` has been updated in the composition output.\n\t * Any field which has already been composed is ignored.\n\t * All other fields are optimistically assumed to not have any changes in the other input changeset.\n\t *\n\t * @param change - The changeset which contains the affected fields.\n\t * This should be one of the two changesets being composed.\n\t * @param areBaseFields - Whether the affected fields are part of the base changeset.\n\t * If not, they are assumed to be part of the new changeset.\n\t * @param affectedFields - The set of fields to process.\n\t */\n\tprivate composeAffectedFields(\n\t\ttable: ComposeTable,\n\t\tchange: ModularChangeset,\n\t\tareBaseFields: boolean,\n\t\taffectedFields: BTree<FieldIdKey, true>,\n\t\tcomposedFields: FieldChangeMap,\n\t\tcomposedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tgenId: IdAllocator,\n\t\tmetadata: RevisionMetadataSource,\n\t): void {\n\t\tfor (const fieldIdKey of affectedFields.keys()) {\n\t\t\tconst fieldId = normalizeFieldId(fieldIdFromFieldIdKey(fieldIdKey), change.nodeAliases);\n\t\t\tconst fieldChange = fieldChangeFromId(change.fieldChanges, change.nodeChanges, fieldId);\n\n\t\t\tif (\n\t\t\t\ttable.fieldToContext.has(fieldChange) ||\n\t\t\t\ttable.newFieldToBaseField.has(fieldChange)\n\t\t\t) {\n\t\t\t\t// This function handles fields which were not part of the intersection of the two changesets but which need to be updated anyway.\n\t\t\t\t// If we've already processed this field then either it is up to date\n\t\t\t\t// or there is pending inval which will be handled in processInvalidatedCompositions.\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst emptyChange = this.createEmptyFieldChange(fieldChange.fieldKind);\n\t\t\tconst [change1, change2] = areBaseFields\n\t\t\t\t? [fieldChange, emptyChange]\n\t\t\t\t: [emptyChange, fieldChange];\n\n\t\t\tconst composedField = this.composeFieldChanges(\n\t\t\t\tfieldId,\n\t\t\t\tchange1,\n\t\t\t\tchange2,\n\t\t\t\tgenId,\n\t\t\t\ttable,\n\t\t\t\tmetadata,\n\t\t\t);\n\n\t\t\tif (fieldId.nodeId === undefined) {\n\t\t\t\tcomposedFields.set(fieldId.field, composedField);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst nodeId =\n\t\t\t\tgetFromChangeAtomIdMap(table.newToBaseNodeId, fieldId.nodeId) ?? fieldId.nodeId;\n\n\t\t\tlet nodeChangeset = nodeChangeFromId(composedNodes, nodeId);\n\t\t\tif (!table.composedNodes.has(nodeChangeset)) {\n\t\t\t\tnodeChangeset = cloneNodeChangeset(nodeChangeset);\n\t\t\t\tsetInChangeAtomIdMap(composedNodes, nodeId, nodeChangeset);\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- using ??= could change behavior if value is falsy\n\t\t\tif (nodeChangeset.fieldChanges === undefined) {\n\t\t\t\tnodeChangeset.fieldChanges = new Map();\n\t\t\t}\n\n\t\t\tnodeChangeset.fieldChanges.set(fieldId.field, composedField);\n\t\t}\n\n\t\taffectedFields.clear();\n\t}\n\n\tprivate composeFieldMaps(\n\t\tchange1: FieldChangeMap | undefined,\n\t\tchange2: FieldChangeMap | undefined,\n\t\tparentId: NodeId | undefined,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: ComposeTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): FieldChangeMap {\n\t\tconst composedFields: FieldChangeMap = new Map();\n\t\tif (change1 === undefined || change2 === undefined) {\n\t\t\treturn change1 ?? change2 ?? composedFields;\n\t\t}\n\n\t\tfor (const [field, fieldChange1] of change1) {\n\t\t\tconst fieldId: FieldId = { nodeId: parentId, field };\n\t\t\tconst fieldChange2 = change2.get(field);\n\t\t\tconst composedField =\n\t\t\t\tfieldChange2 === undefined\n\t\t\t\t\t? fieldChange1\n\t\t\t\t\t: this.composeFieldChanges(\n\t\t\t\t\t\t\tfieldId,\n\t\t\t\t\t\t\tfieldChange1,\n\t\t\t\t\t\t\tfieldChange2,\n\t\t\t\t\t\t\tgenId,\n\t\t\t\t\t\t\tcrossFieldTable,\n\t\t\t\t\t\t\trevisionMetadata,\n\t\t\t\t\t\t);\n\n\t\t\tcomposedFields.set(field, composedField);\n\t\t}\n\n\t\tfor (const [field, fieldChange2] of change2) {\n\t\t\tif (!change1?.has(field)) {\n\t\t\t\tcomposedFields.set(field, fieldChange2);\n\t\t\t}\n\t\t}\n\n\t\treturn composedFields;\n\t}\n\n\t/**\n\t * Returns the composition of the two input fields.\n\t *\n\t * Any nodes in this field which were modified by both changesets\n\t * will be added to `crossFieldTable.pendingCompositions.nodeIdsToCompose`.\n\t *\n\t * Any fields which had cross-field information sent to them as part of this field composition\n\t * will be added to either `affectedBaseFields` or `affectedNewFields` in `crossFieldTable.pendingCompositions`.\n\t *\n\t * Any composed `FieldChange` which is invalidated by new cross-field information will be added to `crossFieldTable.invalidatedFields`.\n\t */\n\tprivate composeFieldChanges(\n\t\tfieldId: FieldId,\n\t\tchange1: FieldChange,\n\t\tchange2: FieldChange,\n\t\tidAllocator: IdAllocator,\n\t\tcrossFieldTable: ComposeTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): FieldChange {\n\t\tconst {\n\t\t\tfieldKind,\n\t\t\tchangeHandler,\n\t\t\tchange1: change1Normalized,\n\t\t\tchange2: change2Normalized,\n\t\t} = this.normalizeFieldChanges(change1, change2);\n\n\t\tconst manager = new ComposeManager(crossFieldTable, change1, fieldId);\n\n\t\tconst composedChange = changeHandler.rebaser.compose(\n\t\t\tchange1Normalized,\n\t\t\tchange2Normalized,\n\t\t\t(child1, child2) => {\n\t\t\t\tif (child1 !== undefined && child2 !== undefined) {\n\t\t\t\t\tsetInChangeAtomIdMap(crossFieldTable.newToBaseNodeId, child2, child1);\n\t\t\t\t\tcrossFieldTable.pendingCompositions.nodeIdsToCompose.push([child1, child2]);\n\t\t\t\t}\n\t\t\t\treturn child1 ?? child2 ?? fail(0xb23 /* Should not compose two undefined nodes */);\n\t\t\t},\n\t\t\tidAllocator,\n\t\t\tmanager,\n\t\t\trevisionMetadata,\n\t\t);\n\n\t\tconst composedField: FieldChange = {\n\t\t\tfieldKind,\n\t\t\tchange: brand(composedChange),\n\t\t};\n\n\t\tcrossFieldTable.fieldToContext.set(change1, {\n\t\t\tfieldId,\n\t\t\tchange1: change1Normalized,\n\t\t\tchange2: change2Normalized,\n\t\t\tcomposedChange: composedField,\n\t\t});\n\n\t\tcrossFieldTable.newFieldToBaseField.set(change2, change1);\n\t\treturn composedField;\n\t}\n\n\tprivate composeNodesById(\n\t\tnodeChanges1: ChangeAtomIdBTree<NodeChangeset>,\n\t\tnodeChanges2: ChangeAtomIdBTree<NodeChangeset>,\n\t\tcomposedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tcomposedNodeToParent: ChangeAtomIdBTree<FieldId>,\n\t\tnodeAliases: ChangeAtomIdBTree<NodeId>,\n\t\tid1: NodeId,\n\t\tid2: NodeId,\n\t\tidAllocator: IdAllocator,\n\t\tcrossFieldTable: ComposeTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): void {\n\t\tconst nodeChangeset1 = nodeChangeFromId(nodeChanges1, id1);\n\t\tconst nodeChangeset2 = nodeChangeFromId(nodeChanges2, id2);\n\t\tconst composedNodeChangeset = this.composeNodeChanges(\n\t\t\tid1,\n\t\t\tnodeChangeset1,\n\t\t\tnodeChangeset2,\n\t\t\tidAllocator,\n\t\t\tcrossFieldTable,\n\t\t\trevisionMetadata,\n\t\t);\n\n\t\tsetInChangeAtomIdMap(composedNodes, id1, composedNodeChangeset);\n\n\t\tif (!areEqualChangeAtomIds(id1, id2)) {\n\t\t\tcomposedNodes.delete([id2.revision, id2.localId]);\n\t\t\tcomposedNodeToParent.delete([id2.revision, id2.localId]);\n\t\t\tsetInChangeAtomIdMap(nodeAliases, id2, id1);\n\n\t\t\t// We need to delete id1 to avoid forming a cycle in case id1 already had an alias.\n\t\t\tnodeAliases.delete([id1.revision, id1.localId]);\n\t\t}\n\n\t\tcrossFieldTable.composedNodes.add(composedNodeChangeset);\n\t}\n\n\tprivate composeNodeChanges(\n\t\tnodeId: NodeId,\n\t\tchange1: NodeChangeset,\n\t\tchange2: NodeChangeset,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: ComposeTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): NodeChangeset {\n\t\t// WARNING: this composition logic assumes that we never make compositions of the following form:\n\t\t// change1: a changeset that impact the existence of a node\n\t\t// change2: a node-exists constraint on that node.\n\t\t// This is currently enforced by the fact that constraints which apply to the input context are included first in the composition.\n\t\t// If that weren't the case, we would need to rebase the status of the constraint backward over the changes from change1.\n\t\tconst nodeExistsConstraint = change1.nodeExistsConstraint ?? change2.nodeExistsConstraint;\n\n\t\t// WARNING: this composition logic assumes that we never make compositions of the following form:\n\t\t// change1: a node-exists-on-revert constraint on a node\n\t\t// change2: a changeset that impacts the existence of that node\n\t\t// This is currently enforced by the fact that constraints which apply to the revert are included last in the composition.\n\t\t// If that weren't the case, we would need to rebase the status of the constraint forward over the changes from change2.\n\t\tconst nodeExistsConstraintOnRevert =\n\t\t\tchange1.nodeExistsConstraintOnRevert ?? change2.nodeExistsConstraintOnRevert;\n\n\t\tconst composedFieldChanges = this.composeFieldMaps(\n\t\t\tchange1.fieldChanges,\n\t\t\tchange2.fieldChanges,\n\t\t\tnodeId,\n\t\t\tgenId,\n\t\t\tcrossFieldTable,\n\t\t\trevisionMetadata,\n\t\t);\n\n\t\tconst composedNodeChange: NodeChangeset = {};\n\n\t\tif (composedFieldChanges.size > 0) {\n\t\t\tcomposedNodeChange.fieldChanges = composedFieldChanges;\n\t\t}\n\n\t\tif (nodeExistsConstraint !== undefined) {\n\t\t\tcomposedNodeChange.nodeExistsConstraint = nodeExistsConstraint;\n\t\t}\n\n\t\tif (nodeExistsConstraintOnRevert !== undefined) {\n\t\t\tcomposedNodeChange.nodeExistsConstraintOnRevert = nodeExistsConstraintOnRevert;\n\t\t}\n\n\t\treturn composedNodeChange;\n\t}\n\n\t/**\n\t * @param change - The change to invert.\n\t * @param isRollback - Whether the inverted change is meant to rollback a change on a branch as is the case when\n\t * performing a sandwich rebase.\n\t * @param revisionForInvert - The revision for the invert changeset.\n\t */\n\tpublic invert(\n\t\tchange: TaggedChange<ModularChangeset>,\n\t\tisRollback: boolean,\n\t\trevisionForInvert: RevisionTag,\n\t): ModularChangeset {\n\t\t// Rollback changesets destroy the nodes created by the change being rolled back.\n\t\tconst destroys = isRollback ? invertBuilds(change.change.builds) : undefined;\n\n\t\t// Destroys only occur in rollback changesets, which are never inverted.\n\t\tassert(\n\t\t\tchange.change.destroys === undefined,\n\t\t\t0x89a /* Unexpected destroys in change to invert */,\n\t\t);\n\n\t\tconst revInfos: RevisionInfo[] = isRollback\n\t\t\t? [{ revision: revisionForInvert, rollbackOf: change.revision }]\n\t\t\t: [{ revision: revisionForInvert }];\n\n\t\tconst noChangeConstraint = change.change.noChangeConstraintOnRevert;\n\t\tconst noChangeConstraintOnRevert = change.change.noChangeConstraint;\n\n\t\tif (hasConflicts(change.change)) {\n\t\t\treturn makeModularChangeset({\n\t\t\t\tmaxId: change.change.maxId as number,\n\t\t\t\trevisions: revInfos,\n\t\t\t\tdestroys,\n\t\t\t});\n\t\t}\n\n\t\tconst genId: IdAllocator = idAllocatorFromMaxId(change.change.maxId ?? -1);\n\n\t\tconst crossFieldTable: InvertTable = {\n\t\t\t...newCrossFieldTable<FieldChange>(),\n\t\t\toriginalFieldToContext: new Map(),\n\t\t\tinvertedNodeToParent: brand(change.change.nodeToParent.clone()),\n\t\t};\n\t\tconst { revInfos: oldRevInfos } = getRevInfoFromTaggedChanges([change]);\n\t\tconst revisionMetadata = revisionMetadataSourceFromInfo(oldRevInfos);\n\n\t\tconst invertedFields = this.invertFieldMap(\n\t\t\tchange.change.fieldChanges,\n\t\t\tundefined,\n\t\t\tisRollback,\n\t\t\tgenId,\n\t\t\tcrossFieldTable,\n\t\t\trevisionMetadata,\n\t\t\trevisionForInvert,\n\t\t);\n\n\t\tconst invertedNodes: ChangeAtomIdBTree<NodeChangeset> = newTupleBTree();\n\t\tchange.change.nodeChanges.forEachPair(([revision, localId], nodeChangeset) => {\n\t\t\tinvertedNodes.set(\n\t\t\t\t[revision, localId],\n\t\t\t\tthis.invertNodeChange(\n\t\t\t\t\tnodeChangeset,\n\t\t\t\t\t{ revision, localId },\n\t\t\t\t\tisRollback,\n\t\t\t\t\tgenId,\n\t\t\t\t\tcrossFieldTable,\n\t\t\t\t\trevisionMetadata,\n\t\t\t\t\trevisionForInvert,\n\t\t\t\t),\n\t\t\t);\n\t\t});\n\n\t\tif (crossFieldTable.invalidatedFields.size > 0) {\n\t\t\tconst fieldsToUpdate = crossFieldTable.invalidatedFields;\n\t\t\tcrossFieldTable.invalidatedFields = new Set();\n\t\t\tfor (const fieldChange of fieldsToUpdate) {\n\t\t\t\tconst originalFieldChange = fieldChange.change;\n\t\t\t\tconst context = crossFieldTable.originalFieldToContext.get(fieldChange);\n\t\t\t\tassert(\n\t\t\t\t\tcontext !== undefined,\n\t\t\t\t\t0x851 /* Should have context for every invalidated field */,\n\t\t\t\t);\n\t\t\t\tconst { invertedField, fieldId } = context;\n\n\t\t\t\tconst amendedChange = getChangeHandler(\n\t\t\t\t\tthis.fieldKinds,\n\t\t\t\t\tfieldChange.fieldKind,\n\t\t\t\t).rebaser.invert(\n\t\t\t\t\toriginalFieldChange,\n\t\t\t\t\tisRollback,\n\t\t\t\t\tgenId,\n\t\t\t\t\trevisionForInvert,\n\t\t\t\t\tnew InvertManager(crossFieldTable, fieldChange, fieldId),\n\t\t\t\t\trevisionMetadata,\n\t\t\t\t);\n\t\t\t\tinvertedField.change = brand(amendedChange);\n\t\t\t}\n\t\t}\n\n\t\tconst crossFieldKeys = this.makeCrossFieldKeyTable(invertedFields, invertedNodes);\n\n\t\treturn makeModularChangeset({\n\t\t\tfieldChanges: invertedFields,\n\t\t\tnodeChanges: invertedNodes,\n\t\t\tnodeToParent: crossFieldTable.invertedNodeToParent,\n\t\t\tnodeAliases: change.change.nodeAliases,\n\t\t\tcrossFieldKeys,\n\t\t\tmaxId: genId.getMaxId(),\n\t\t\trevisions: revInfos,\n\t\t\tconstraintViolationCount: change.change.constraintViolationCountOnRevert,\n\t\t\tconstraintViolationCountOnRevert: change.change.constraintViolationCount,\n\t\t\tnoChangeConstraint,\n\t\t\tnoChangeConstraintOnRevert,\n\t\t\tdestroys,\n\t\t});\n\t}\n\n\tprivate invertFieldMap(\n\t\tchanges: FieldChangeMap,\n\t\tparentId: NodeId | undefined,\n\t\tisRollback: boolean,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: InvertTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t\trevisionForInvert: RevisionTag,\n\t): FieldChangeMap {\n\t\tconst invertedFields: FieldChangeMap = new Map();\n\n\t\tfor (const [field, fieldChange] of changes) {\n\t\t\tconst fieldId = { nodeId: parentId, field };\n\t\t\tconst manager = new InvertManager(crossFieldTable, fieldChange, fieldId);\n\t\t\tconst invertedChange = getChangeHandler(\n\t\t\t\tthis.fieldKinds,\n\t\t\t\tfieldChange.fieldKind,\n\t\t\t).rebaser.invert(\n\t\t\t\tfieldChange.change,\n\t\t\t\tisRollback,\n\t\t\t\tgenId,\n\t\t\t\trevisionForInvert,\n\t\t\t\tmanager,\n\t\t\t\trevisionMetadata,\n\t\t\t);\n\n\t\t\tconst invertedFieldChange: FieldChange = {\n\t\t\t\t...fieldChange,\n\t\t\t\tchange: brand(invertedChange),\n\t\t\t};\n\t\t\tinvertedFields.set(field, invertedFieldChange);\n\n\t\t\tcrossFieldTable.originalFieldToContext.set(fieldChange, {\n\t\t\t\tfieldId,\n\t\t\t\tinvertedField: invertedFieldChange,\n\t\t\t});\n\t\t}\n\n\t\treturn invertedFields;\n\t}\n\n\tprivate invertNodeChange(\n\t\tchange: NodeChangeset,\n\t\tid: NodeId,\n\t\tisRollback: boolean,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: InvertTable,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t\trevisionForInvert: RevisionTag,\n\t): NodeChangeset {\n\t\tconst inverse: NodeChangeset = {};\n\n\t\t// If the node has a constraint, it should be inverted to a node-exist-on-revert constraint. This ensure that if\n\t\t// the inverse is inverted again, the original input constraint will be restored.\n\t\tif (change.nodeExistsConstraint !== undefined) {\n\t\t\tinverse.nodeExistsConstraintOnRevert = change.nodeExistsConstraint;\n\t\t}\n\n\t\t// The node-exist-on-revert constraint of a node is the constraint that should apply when the a change is reverted.\n\t\t// So, it should become the constraint in the inverse. If this constraint is violated when applying the inverse,\n\t\t// it will be discarded.\n\t\tif (change.nodeExistsConstraintOnRevert !== undefined) {\n\t\t\tinverse.nodeExistsConstraint = change.nodeExistsConstraintOnRevert;\n\t\t}\n\n\t\tif (change.fieldChanges !== undefined) {\n\t\t\tinverse.fieldChanges = this.invertFieldMap(\n\t\t\t\tchange.fieldChanges,\n\t\t\t\tid,\n\t\t\t\tisRollback,\n\t\t\t\tgenId,\n\t\t\t\tcrossFieldTable,\n\t\t\t\trevisionMetadata,\n\t\t\t\trevisionForInvert,\n\t\t\t);\n\t\t}\n\n\t\treturn inverse;\n\t}\n\n\tpublic rebase(\n\t\ttaggedChange: TaggedChange<ModularChangeset>,\n\t\tpotentiallyConflictedOver: TaggedChange<ModularChangeset>,\n\t\trevisionMetadata: RevisionMetadataSource,\n\t): ModularChangeset {\n\t\t// Our current cell ordering scheme in sequences depends on being able to rebase over a change with conflicts.\n\t\t// This means that we must rebase over a muted version of the conflicted changeset.\n\t\t// That is, a version that includes its declarations (e.g., new cells) but not its changes.\n\t\t// TODO: remove once AB#46104 is completed\n\t\tconst over = mapTaggedChange(\n\t\t\tpotentiallyConflictedOver,\n\t\t\tthis.getEffectiveChange(potentiallyConflictedOver.change),\n\t\t);\n\n\t\tconst change = taggedChange.change;\n\t\tconst maxId = Math.max(change.maxId ?? -1, over.change.maxId ?? -1);\n\t\tconst idState: IdAllocationState = { maxId };\n\t\tconst genId: IdAllocator = idAllocatorFromState(idState);\n\n\t\tconst crossFieldTable: RebaseTable = {\n\t\t\t...newCrossFieldTable<FieldChange>(),\n\t\t\tnewChange: change,\n\t\t\tbaseChange: over.change,\n\t\t\tbaseFieldToContext: new Map(),\n\t\t\tbaseToRebasedNodeId: newTupleBTree(),\n\t\t\trebasedFields: new Set(),\n\t\t\trebasedNodeToParent: brand(change.nodeToParent.clone()),\n\t\t\trebasedCrossFieldKeys: change.crossFieldKeys.clone(),\n\t\t\tnodeIdPairs: [],\n\t\t\taffectedBaseFields: newTupleBTree(),\n\t\t\tfieldsWithUnattachedChild: new Set(),\n\t\t};\n\n\t\tconst getBaseRevisions = (): RevisionTag[] =>\n\t\t\trevisionInfoFromTaggedChange(over).map((info) => info.revision);\n\n\t\tconst rebaseMetadata: RebaseRevisionMetadata = {\n\t\t\t...revisionMetadata,\n\t\t\tgetRevisionToRebase: () => taggedChange.revision,\n\t\t\tgetBaseRevisions,\n\t\t};\n\n\t\tconst rebasedNodes: ChangeAtomIdBTree<NodeChangeset> = brand(change.nodeChanges.clone());\n\n\t\tconst rebasedFields = this.rebaseIntersectingFields(\n\t\t\tcrossFieldTable,\n\t\t\trebasedNodes,\n\t\t\tgenId,\n\t\t\trebaseMetadata,\n\t\t);\n\n\t\tthis.rebaseInvalidatedElements(\n\t\t\trebasedFields,\n\t\t\trebasedNodes,\n\t\t\tcrossFieldTable,\n\t\t\trebaseMetadata,\n\t\t\tgenId,\n\t\t);\n\n\t\tconst constraintState = newConstraintState(change.constraintViolationCount ?? 0);\n\t\tconst revertConstraintState = newConstraintState(\n\t\t\tchange.constraintViolationCountOnRevert ?? 0,\n\t\t);\n\n\t\tlet noChangeConstraint = change.noChangeConstraint;\n\t\tif (noChangeConstraint !== undefined && !noChangeConstraint.violated) {\n\t\t\tnoChangeConstraint = { violated: true };\n\t\t\tconstraintState.violationCount += 1;\n\t\t}\n\n\t\tthis.updateConstraintsForFields(\n\t\t\trebasedFields,\n\t\t\tNodeAttachState.Attached,\n\t\t\tNodeAttachState.Attached,\n\t\t\tconstraintState,\n\t\t\trevertConstraintState,\n\t\t\trebasedNodes,\n\t\t);\n\n\t\tconst rebased = makeModularChangeset({\n\t\t\tfieldChanges: this.pruneFieldMap(rebasedFields, rebasedNodes),\n\t\t\tnodeChanges: rebasedNodes,\n\t\t\tnodeToParent: crossFieldTable.rebasedNodeToParent,\n\t\t\tnodeAliases: change.nodeAliases,\n\t\t\tcrossFieldKeys: crossFieldTable.rebasedCrossFieldKeys,\n\t\t\tmaxId: idState.maxId,\n\t\t\trevisions: change.revisions,\n\t\t\tconstraintViolationCount: constraintState.violationCount,\n\t\t\tconstraintViolationCountOnRevert: revertConstraintState.violationCount,\n\t\t\tnoChangeConstraint,\n\t\t\tnoChangeConstraintOnRevert: change.noChangeConstraintOnRevert,\n\t\t\tbuilds: change.builds,\n\t\t\tdestroys: change.destroys,\n\t\t\trefreshers: change.refreshers,\n\t\t});\n\n\t\treturn rebased;\n\t}\n\n\t// This performs a first pass on all fields which have both new and base changes.\n\t// TODO: Can we also handle additional passes in this method?\n\tprivate rebaseIntersectingFields(\n\t\tcrossFieldTable: RebaseTable,\n\t\trebasedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tgenId: IdAllocator,\n\t\tmetadata: RebaseRevisionMetadata,\n\t): FieldChangeMap {\n\t\tconst change = crossFieldTable.newChange;\n\t\tconst baseChange = crossFieldTable.baseChange;\n\t\tconst rebasedFields = this.rebaseFieldMap(\n\t\t\tchange.fieldChanges,\n\t\t\tbaseChange.fieldChanges,\n\t\t\tundefined,\n\t\t\tgenId,\n\t\t\tcrossFieldTable,\n\t\t\tmetadata,\n\t\t);\n\n\t\t// This loop processes all fields which have both base and new changes.\n\t\t// Note that the call to `rebaseNodeChange` can add entries to `crossFieldTable.nodeIdPairs`.\n\t\tfor (const [newId, baseId, _attachState] of crossFieldTable.nodeIdPairs) {\n\t\t\tconst rebasedNode = this.rebaseNodeChange(\n\t\t\t\tnewId,\n\t\t\t\tbaseId,\n\t\t\t\tgenId,\n\t\t\t\tcrossFieldTable,\n\t\t\t\tmetadata,\n\t\t\t);\n\n\t\t\tsetInChangeAtomIdMap(rebasedNodes, newId, rebasedNode);\n\t\t}\n\n\t\treturn rebasedFields;\n\t}\n\n\t// This processes fields which have no new changes but have been invalidated by another field.\n\tprivate rebaseFieldsWithoutNewChanges(\n\t\trebasedFields: FieldChangeMap,\n\t\trebasedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tcrossFieldTable: RebaseTable,\n\t\tgenId: IdAllocator,\n\t\tmetadata: RebaseRevisionMetadata,\n\t): void {\n\t\tconst baseChange = crossFieldTable.baseChange;\n\t\tfor (const [revision, localId, fieldKey] of crossFieldTable.affectedBaseFields.keys()) {\n\t\t\tconst baseNodeId =\n\t\t\t\tlocalId === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: normalizeNodeId({ revision, localId }, baseChange.nodeAliases);\n\n\t\t\tconst baseFieldChange = fieldMapFromNodeId(\n\t\t\t\tbaseChange.fieldChanges,\n\t\t\t\tbaseChange.nodeChanges,\n\t\t\t\tbaseNodeId,\n\t\t\t).get(fieldKey);\n\n\t\t\tassert(\n\t\t\t\tbaseFieldChange !== undefined,\n\t\t\t\t0x9c2 /* Cross field key registered for empty field */,\n\t\t\t);\n\t\t\tif (crossFieldTable.baseFieldToContext.has(baseFieldChange)) {\n\t\t\t\t// This field has already been processed because there were changes to rebase.\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// This field has no changes in the new changeset, otherwise it would have been added to\n\t\t\t// `crossFieldTable.baseFieldToContext` when processing fields with both base and new changes.\n\t\t\tconst handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);\n\t\t\tconst fieldChange: FieldChange = {\n\t\t\t\t...baseFieldChange,\n\t\t\t\tchange: brand(handler.createEmpty()),\n\t\t\t};\n\n\t\t\tconst rebasedNodeId =\n\t\t\t\tbaseNodeId === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: rebasedNodeIdFromBaseNodeId(crossFieldTable, baseNodeId);\n\n\t\t\tconst fieldId: FieldId = { nodeId: rebasedNodeId, field: fieldKey };\n\t\t\tconst rebasedField: unknown = handler.rebaser.rebase(\n\t\t\t\tfieldChange.change,\n\t\t\t\tbaseFieldChange.change,\n\t\t\t\tnoNewChangesRebaseChild,\n\t\t\t\tgenId,\n\t\t\t\tnew RebaseManager(crossFieldTable, baseFieldChange, fieldId),\n\t\t\t\tmetadata,\n\t\t\t);\n\n\t\t\tconst rebasedFieldChange: FieldChange = {\n\t\t\t\t...baseFieldChange,\n\t\t\t\tchange: brand(rebasedField),\n\t\t\t};\n\n\t\t\t// TODO: Deduplicate\n\t\t\tcrossFieldTable.baseFieldToContext.set(baseFieldChange, {\n\t\t\t\tnewChange: fieldChange,\n\t\t\t\tbaseChange: baseFieldChange,\n\t\t\t\trebasedChange: rebasedFieldChange,\n\t\t\t\tfieldId,\n\t\t\t\tbaseNodeIds: [],\n\t\t\t});\n\t\t\tcrossFieldTable.rebasedFields.add(rebasedFieldChange);\n\n\t\t\tthis.attachRebasedField(\n\t\t\t\trebasedFields,\n\t\t\t\trebasedNodes,\n\t\t\t\tcrossFieldTable,\n\t\t\t\trebasedFieldChange,\n\t\t\t\tfieldId,\n\t\t\t\tgenId,\n\t\t\t\tmetadata,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate rebaseInvalidatedElements(\n\t\trebasedFields: FieldChangeMap,\n\t\trebasedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\ttable: RebaseTable,\n\t\tmetadata: RebaseRevisionMetadata,\n\t\tidAllocator: IdAllocator,\n\t): void {\n\t\tthis.rebaseFieldsWithoutNewChanges(\n\t\t\trebasedFields,\n\t\t\trebasedNodes,\n\t\t\ttable,\n\t\t\tidAllocator,\n\t\t\tmetadata,\n\t\t);\n\n\t\tthis.rebaseFieldsWithUnattachedChild(table, metadata, idAllocator);\n\t\tthis.rebaseInvalidatedFields(table, metadata, idAllocator);\n\t}\n\n\tprivate rebaseInvalidatedFields(\n\t\tcrossFieldTable: RebaseTable,\n\t\trebaseMetadata: RebaseRevisionMetadata,\n\t\tgenId: IdAllocator,\n\t): void {\n\t\tconst fieldsToUpdate = crossFieldTable.invalidatedFields;\n\t\tcrossFieldTable.invalidatedFields = new Set();\n\t\tfor (const field of fieldsToUpdate) {\n\t\t\tthis.rebaseInvalidatedField(field, crossFieldTable, rebaseMetadata, genId);\n\t\t}\n\t}\n\n\tprivate rebaseFieldsWithUnattachedChild(\n\t\ttable: RebaseTable,\n\t\tmetadata: RebaseRevisionMetadata,\n\t\tidAllocator: IdAllocator,\n\t): void {\n\t\tfor (const field of table.fieldsWithUnattachedChild) {\n\t\t\ttable.invalidatedFields.delete(field);\n\t\t\tthis.rebaseInvalidatedField(field, table, metadata, idAllocator, true);\n\t\t}\n\t}\n\n\tprivate rebaseInvalidatedField(\n\t\tbaseField: FieldChange,\n\t\tcrossFieldTable: RebaseTable,\n\t\trebaseMetadata: RebaseRevisionMetadata,\n\t\tgenId: IdAllocator,\n\t\tallowInval = false,\n\t): void {\n\t\tconst context = crossFieldTable.baseFieldToContext.get(baseField);\n\t\tassert(context !== undefined, 0x852 /* Every field should have a context */);\n\t\tconst {\n\t\t\tchangeHandler,\n\t\t\tchange1: fieldChangeset,\n\t\t\tchange2: baseChangeset,\n\t\t} = this.normalizeFieldChanges(context.newChange, context.baseChange);\n\n\t\tconst rebaseChild = (\n\t\t\tcurr: NodeId | undefined,\n\t\t\tbase: NodeId | undefined,\n\t\t): NodeId | undefined => {\n\t\t\tif (curr !== undefined) {\n\t\t\t\treturn curr;\n\t\t\t}\n\n\t\t\tif (base !== undefined) {\n\t\t\t\tfor (const id of context.baseNodeIds) {\n\t\t\t\t\tif (areEqualChangeAtomIds(base, id)) {\n\t\t\t\t\t\treturn base;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t};\n\n\t\tcontext.rebasedChange.change = brand(\n\t\t\tchangeHandler.rebaser.rebase(\n\t\t\t\tfieldChangeset,\n\t\t\t\tbaseChangeset,\n\t\t\t\trebaseChild,\n\t\t\t\tgenId,\n\t\t\t\tnew RebaseManager(crossFieldTable, baseField, context.fieldId, allowInval),\n\t\t\t\trebaseMetadata,\n\t\t\t),\n\t\t);\n\t}\n\n\tprivate attachRebasedField(\n\t\trebasedFields: FieldChangeMap,\n\t\trebasedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\ttable: RebaseTable,\n\t\trebasedField: FieldChange,\n\t\t{ nodeId, field: fieldKey }: FieldId,\n\t\tidAllocator: IdAllocator,\n\t\tmetadata: RebaseRevisionMetadata,\n\t): void {\n\t\tif (nodeId === undefined) {\n\t\t\trebasedFields.set(fieldKey, rebasedField);\n\t\t\treturn;\n\t\t}\n\t\tconst rebasedNode = getFromChangeAtomIdMap(rebasedNodes, nodeId);\n\t\tif (rebasedNode !== undefined) {\n\t\t\tif (rebasedNode.fieldChanges === undefined) {\n\t\t\t\trebasedNode.fieldChanges = new Map([[fieldKey, rebasedField]]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tassert(!rebasedNode.fieldChanges.has(fieldKey), 0x9c4 /* Expected an empty field */);\n\t\t\trebasedNode.fieldChanges.set(fieldKey, rebasedField);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newNode: NodeChangeset = {\n\t\t\tfieldChanges: new Map([[fieldKey, rebasedField]]),\n\t\t};\n\n\t\tsetInChangeAtomIdMap(rebasedNodes, nodeId, newNode);\n\t\tsetInChangeAtomIdMap(table.baseToRebasedNodeId, nodeId, nodeId);\n\n\t\tconst parentFieldId = getParentFieldId(table.baseChange, nodeId);\n\n\t\tthis.attachRebasedNode(\n\t\t\trebasedFields,\n\t\t\trebasedNodes,\n\t\t\ttable,\n\t\t\tnodeId,\n\t\t\tparentFieldId,\n\t\t\tidAllocator,\n\t\t\tmetadata,\n\t\t);\n\t}\n\n\tprivate attachRebasedNode(\n\t\trebasedFields: FieldChangeMap,\n\t\trebasedNodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\ttable: RebaseTable,\n\t\tbaseNodeId: NodeId,\n\t\tparentFieldIdBase: FieldId,\n\t\tidAllocator: IdAllocator,\n\t\tmetadata: RebaseRevisionMetadata,\n\t): void {\n\t\tconst baseFieldChange = fieldChangeFromId(\n\t\t\ttable.baseChange.fieldChanges,\n\t\t\ttable.baseChange.nodeChanges,\n\t\t\tparentFieldIdBase,\n\t\t);\n\n\t\tconst rebasedFieldId = rebasedFieldIdFromBaseId(table, parentFieldIdBase);\n\t\tsetInChangeAtomIdMap(table.rebasedNodeToParent, baseNodeId, rebasedFieldId);\n\n\t\tconst context = table.baseFieldToContext.get(baseFieldChange);\n\t\tif (context !== undefined) {\n\t\t\t// We've already processed this field.\n\t\t\t// The new child node will be attached in rebaseFieldsWithUnattachedChild.\n\t\t\tcontext.baseNodeIds.push(baseNodeId);\n\t\t\ttable.fieldsWithUnattachedChild.add(baseFieldChange);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);\n\n\t\tconst fieldChange: FieldChange = {\n\t\t\t...baseFieldChange,\n\t\t\tchange: brand(handler.createEmpty()),\n\t\t};\n\n\t\tconst rebasedChangeset = handler.rebaser.rebase(\n\t\t\thandler.createEmpty(),\n\t\t\tbaseFieldChange.change,\n\t\t\t(_idNew, idBase) =>\n\t\t\t\tidBase !== undefined && areEqualChangeAtomIds(idBase, baseNodeId)\n\t\t\t\t\t? baseNodeId\n\t\t\t\t\t: undefined,\n\t\t\tidAllocator,\n\t\t\tnew RebaseManager(table, baseFieldChange, rebasedFieldId),\n\t\t\tmetadata,\n\t\t);\n\n\t\tconst rebasedField: FieldChange = { ...baseFieldChange, change: brand(rebasedChangeset) };\n\t\ttable.rebasedFields.add(rebasedField);\n\t\ttable.baseFieldToContext.set(baseFieldChange, {\n\t\t\tnewChange: fieldChange,\n\t\t\tbaseChange: baseFieldChange,\n\t\t\trebasedChange: rebasedField,\n\t\t\tfieldId: rebasedFieldId,\n\t\t\tbaseNodeIds: [],\n\t\t});\n\n\t\tthis.attachRebasedField(\n\t\t\trebasedFields,\n\t\t\trebasedNodes,\n\t\t\ttable,\n\t\t\trebasedField,\n\t\t\trebasedFieldId,\n\t\t\tidAllocator,\n\t\t\tmetadata,\n\t\t);\n\t}\n\n\tprivate rebaseFieldMap(\n\t\tchange: FieldChangeMap,\n\t\tover: FieldChangeMap,\n\t\tparentId: NodeId | undefined,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: RebaseTable,\n\t\trevisionMetadata: RebaseRevisionMetadata,\n\t): FieldChangeMap {\n\t\tconst rebasedFields: FieldChangeMap = new Map();\n\t\tconst rebaseChild = (\n\t\t\tchild: NodeId | undefined,\n\t\t\tbaseChild: NodeId | undefined,\n\t\t\tstateChange: NodeAttachState | undefined,\n\t\t): NodeId | undefined => {\n\t\t\tif (child !== undefined && baseChild !== undefined) {\n\t\t\t\tcrossFieldTable.nodeIdPairs.push([child, baseChild, stateChange]);\n\t\t\t}\n\t\t\treturn child;\n\t\t};\n\n\t\tfor (const [field, fieldChange] of change) {\n\t\t\tconst fieldId: FieldId = { nodeId: parentId, field };\n\t\t\tconst baseChange = over.get(field);\n\t\t\tif (baseChange === undefined) {\n\t\t\t\trebasedFields.set(field, fieldChange);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tfieldKind,\n\t\t\t\tchangeHandler,\n\t\t\t\tchange1: fieldChangeset,\n\t\t\t\tchange2: baseChangeset,\n\t\t\t} = this.normalizeFieldChanges(fieldChange, baseChange);\n\n\t\t\tconst manager = new RebaseManager(crossFieldTable, baseChange, fieldId);\n\n\t\t\tconst rebasedField = changeHandler.rebaser.rebase(\n\t\t\t\tfieldChangeset,\n\t\t\t\tbaseChangeset,\n\t\t\t\trebaseChild,\n\t\t\t\tgenId,\n\t\t\t\tmanager,\n\t\t\t\trevisionMetadata,\n\t\t\t);\n\n\t\t\tconst rebasedFieldChange: FieldChange = {\n\t\t\t\tfieldKind,\n\t\t\t\tchange: brand(rebasedField),\n\t\t\t};\n\n\t\t\trebasedFields.set(field, rebasedFieldChange);\n\n\t\t\tcrossFieldTable.baseFieldToContext.set(baseChange, {\n\t\t\t\tbaseChange,\n\t\t\t\tnewChange: fieldChange,\n\t\t\t\trebasedChange: rebasedFieldChange,\n\t\t\t\tfieldId,\n\t\t\t\tbaseNodeIds: [],\n\t\t\t});\n\n\t\t\tcrossFieldTable.rebasedFields.add(rebasedFieldChange);\n\t\t}\n\n\t\treturn rebasedFields;\n\t}\n\n\tprivate rebaseNodeChange(\n\t\tnewId: NodeId,\n\t\tbaseId: NodeId,\n\t\tgenId: IdAllocator,\n\t\tcrossFieldTable: RebaseTable,\n\t\trevisionMetadata: RebaseRevisionMetadata,\n\t): NodeChangeset {\n\t\tconst change = nodeChangeFromId(crossFieldTable.newChange.nodeChanges, newId);\n\t\tconst over = nodeChangeFromId(crossFieldTable.baseChange.nodeChanges, baseId);\n\n\t\tconst baseMap: FieldChangeMap = over?.fieldChanges ?? new Map();\n\n\t\tconst fieldChanges =\n\t\t\tchange.fieldChanges !== undefined && over.fieldChanges !== undefined\n\t\t\t\t? this.rebaseFieldMap(\n\t\t\t\t\t\tchange?.fieldChanges ?? new Map(),\n\t\t\t\t\t\tbaseMap,\n\t\t\t\t\t\tnewId,\n\t\t\t\t\t\tgenId,\n\t\t\t\t\t\tcrossFieldTable,\n\t\t\t\t\t\trevisionMetadata,\n\t\t\t\t\t)\n\t\t\t\t: change.fieldChanges;\n\n\t\tconst rebasedChange: NodeChangeset = {};\n\n\t\tif (fieldChanges !== undefined && fieldChanges.size > 0) {\n\t\t\trebasedChange.fieldChanges = fieldChanges;\n\t\t}\n\n\t\tif (change?.nodeExistsConstraint !== undefined) {\n\t\t\trebasedChange.nodeExistsConstraint = change.nodeExistsConstraint;\n\t\t}\n\n\t\tif (change?.nodeExistsConstraintOnRevert !== undefined) {\n\t\t\trebasedChange.nodeExistsConstraintOnRevert = change.nodeExistsConstraintOnRevert;\n\t\t}\n\n\t\tsetInChangeAtomIdMap(crossFieldTable.baseToRebasedNodeId, baseId, newId);\n\t\treturn rebasedChange;\n\t}\n\n\tprivate updateConstraintsForFields(\n\t\tfields: FieldChangeMap,\n\t\tparentInputAttachState: NodeAttachState,\n\t\tparentOutputAttachState: NodeAttachState,\n\t\tconstraintState: ConstraintState,\n\t\trevertConstraintState: ConstraintState,\n\t\tnodes: ChangeAtomIdBTree<NodeChangeset>,\n\t): void {\n\t\tfor (const field of fields.values()) {\n\t\t\tconst handler = getChangeHandler(this.fieldKinds, field.fieldKind);\n\t\t\tfor (const [nodeId, inputIndex, outputIndex] of handler.getNestedChanges(field.change)) {\n\t\t\t\tconst isInputDetached = inputIndex === undefined;\n\t\t\t\tconst inputAttachState =\n\t\t\t\t\tparentInputAttachState === NodeAttachState.Detached || isInputDetached\n\t\t\t\t\t\t? NodeAttachState.Detached\n\t\t\t\t\t\t: NodeAttachState.Attached;\n\t\t\t\tconst isOutputDetached = outputIndex === undefined;\n\t\t\t\tconst outputAttachState =\n\t\t\t\t\tparentOutputAttachState === NodeAttachState.Detached || isOutputDetached\n\t\t\t\t\t\t? NodeAttachState.Detached\n\t\t\t\t\t\t: NodeAttachState.Attached;\n\t\t\t\tthis.updateConstraintsForNode(\n\t\t\t\t\tnodeId,\n\t\t\t\t\tinputAttachState,\n\t\t\t\t\toutputAttachState,\n\t\t\t\t\tnodes,\n\t\t\t\t\tconstraintState,\n\t\t\t\t\trevertConstraintState,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate updateConstraintsForNode(\n\t\tnodeId: NodeId,\n\t\tinputAttachState: NodeAttachState,\n\t\toutputAttachState: NodeAttachState,\n\t\tnodes: ChangeAtomIdBTree<NodeChangeset>,\n\t\tconstraintState: ConstraintState,\n\t\trevertConstraintState: ConstraintState,\n\t): void {\n\t\tconst node =\n\t\t\tnodes.get([nodeId.revision, nodeId.localId]) ?? fail(0xb24 /* Unknown node ID */);\n\t\tif (node.nodeExistsConstraint !== undefined) {\n\t\t\tconst isNowViolated = inputAttachState === NodeAttachState.Detached;\n\t\t\tif (node.nodeExistsConstraint.violated !== isNowViolated) {\n\t\t\t\tnode.nodeExistsConstraint = {\n\t\t\t\t\t...node.nodeExistsConstraint,\n\t\t\t\t\tviolated: isNowViolated,\n\t\t\t\t};\n\t\t\t\tconstraintState.violationCount += isNowViolated ? 1 : -1;\n\t\t\t}\n\t\t}\n\t\tif (node.nodeExistsConstraintOnRevert !== undefined) {\n\t\t\tconst isNowViolated = outputAttachState === NodeAttachState.Detached;\n\t\t\tif (node.nodeExistsConstraintOnRevert.violated !== isNowViolated) {\n\t\t\t\tnode.nodeExistsConstraintOnRevert = {\n\t\t\t\t\t...node.nodeExistsConstraintOnRevert,\n\t\t\t\t\tviolated: isNowViolated,\n\t\t\t\t};\n\t\t\t\trevertConstraintState.violationCount += isNowViolated ? 1 : -1;\n\t\t\t}\n\t\t}\n\n\t\tif (node.fieldChanges !== undefined) {\n\t\t\tthis.updateConstraintsForFields(\n\t\t\t\tnode.fieldChanges,\n\t\t\t\tinputAttachState,\n\t\t\t\toutputAttachState,\n\t\t\t\tconstraintState,\n\t\t\t\trevertConstraintState,\n\t\t\t\tnodes,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate pruneFieldMap(\n\t\tchangeset: FieldChangeMap | undefined,\n\t\tnodeMap: ChangeAtomIdBTree<NodeChangeset>,\n\t): FieldChangeMap | undefined {\n\t\tif (changeset === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst prunedChangeset: FieldChangeMap = new Map();\n\t\tfor (const [field, fieldChange] of changeset) {\n\t\t\tconst handler = getChangeHandler(this.fieldKinds, fieldChange.fieldKind);\n\n\t\t\tconst prunedFieldChangeset = handler.rebaser.prune(fieldChange.change, (nodeId) =>\n\t\t\t\tthis.pruneNodeChange(nodeId, nodeMap),\n\t\t\t);\n\n\t\t\tif (!handler.isEmpty(prunedFieldChangeset)) {\n\t\t\t\tprunedChangeset.set(field, { ...fieldChange, change: brand(prunedFieldChangeset) });\n\t\t\t}\n\t\t}\n\n\t\treturn prunedChangeset.size > 0 ? prunedChangeset : undefined;\n\t}\n\n\tprivate pruneNodeChange(\n\t\tnodeId: NodeId,\n\t\tnodeMap: ChangeAtomIdBTree<NodeChangeset>,\n\t): NodeId | undefined {\n\t\tconst changeset = nodeChangeFromId(nodeMap, nodeId);\n\t\tconst prunedFields =\n\t\t\tchangeset.fieldChanges === undefined\n\t\t\t\t? undefined\n\t\t\t\t: this.pruneFieldMap(changeset.fieldChanges, nodeMap);\n\n\t\tconst prunedChange = { ...changeset, fieldChanges: prunedFields };\n\t\tif (prunedChange.fieldChanges === undefined) {\n\t\t\tdelete prunedChange.fieldChanges;\n\t\t}\n\n\t\tif (isEmptyNodeChangeset(prunedChange)) {\n\t\t\tnodeMap.delete([nodeId.revision, nodeId.localId]);\n\t\t\treturn undefined;\n\t\t} else {\n\t\t\tsetInChangeAtomIdMap(nodeMap, nodeId, prunedChange);\n\t\t\treturn nodeId;\n\t\t}\n\t}\n\n\tpublic getRevisions(change: ModularChangeset): Set<RevisionTag | undefined> {\n\t\tconst aggregated: Set<RevisionTag | undefined> = new Set();\n\t\tfor (const revInfo of change.revisions ?? [{ revision: undefined }]) {\n\t\t\taggregated.add(revInfo.revision);\n\t\t}\n\t\treturn aggregated;\n\t}\n\n\tpublic changeRevision(\n\t\tchange: ModularChangeset,\n\t\treplacer: RevisionReplacer,\n\t): ModularChangeset {\n\t\tconst updatedFields = this.replaceFieldMapRevisions(change.fieldChanges, replacer);\n\t\tconst updatedNodes = replaceIdMapRevisions(change.nodeChanges, replacer, (nodeChangeset) =>\n\t\t\tthis.replaceNodeChangesetRevisions(nodeChangeset, replacer),\n\t\t);\n\t\tconst updatedNodeToParent = replaceIdMapRevisions(\n\t\t\tchange.nodeToParent,\n\t\t\treplacer,\n\t\t\t(fieldId) =>\n\t\t\t\treplaceFieldIdRevision(normalizeFieldId(fieldId, change.nodeAliases), replacer),\n\t\t);\n\n\t\tconst updated: Mutable<ModularChangeset> = {\n\t\t\t...change,\n\t\t\tfieldChanges: updatedFields,\n\t\t\tnodeChanges: updatedNodes,\n\t\t\tnodeToParent: updatedNodeToParent,\n\n\t\t\t// We've updated all references to old node IDs, so we no longer need an alias table.\n\t\t\tnodeAliases: newTupleBTree(),\n\t\t\tcrossFieldKeys: replaceCrossFieldKeyTableRevisions(\n\t\t\t\tchange.crossFieldKeys,\n\t\t\t\treplacer,\n\t\t\t\tchange.nodeAliases,\n\t\t\t),\n\t\t};\n\n\t\tif (change.builds !== undefined) {\n\t\t\tupdated.builds = replaceIdMapRevisions(change.builds, replacer);\n\t\t}\n\n\t\tif (change.destroys !== undefined) {\n\t\t\tupdated.destroys = replaceIdMapRevisions(change.destroys, replacer);\n\t\t}\n\n\t\tif (change.refreshers !== undefined) {\n\t\t\tupdated.refreshers = replaceIdMapRevisions(change.refreshers, replacer);\n\t\t}\n\n\t\tupdated.revisions = [{ revision: replacer.updatedRevision }];\n\n\t\treturn updated;\n\t}\n\n\tprivate replaceNodeChangesetRevisions(\n\t\tnodeChangeset: NodeChangeset,\n\t\treplacer: RevisionReplacer,\n\t): NodeChangeset {\n\t\tconst updated = { ...nodeChangeset };\n\t\tif (nodeChangeset.fieldChanges !== undefined) {\n\t\t\tupdated.fieldChanges = this.replaceFieldMapRevisions(\n\t\t\t\tnodeChangeset.fieldChanges,\n\t\t\t\treplacer,\n\t\t\t);\n\t\t}\n\n\t\treturn updated;\n\t}\n\n\tprivate replaceFieldMapRevisions(\n\t\tfields: FieldChangeMap,\n\t\treplacer: RevisionReplacer,\n\t): FieldChangeMap {\n\t\tconst updatedFields: FieldChangeMap = new Map();\n\t\tfor (const [field, fieldChange] of fields) {\n\t\t\tconst updatedFieldChange = getChangeHandler(\n\t\t\t\tthis.fieldKinds,\n\t\t\t\tfieldChange.fieldKind,\n\t\t\t).rebaser.replaceRevisions(fieldChange.change, replacer);\n\n\t\t\tupdatedFields.set(field, { ...fieldChange, change: brand(updatedFieldChange) });\n\t\t}\n\n\t\treturn updatedFields;\n\t}\n\n\tprivate makeCrossFieldKeyTable(\n\t\tfields: FieldChangeMap,\n\t\tnodes: ChangeAtomIdBTree<NodeChangeset>,\n\t): CrossFieldKeyTable {\n\t\tconst keys: CrossFieldKeyTable = newCrossFieldKeyTable();\n\t\tthis.populateCrossFieldKeyTableForFieldMap(keys, fields, undefined);\n\t\tnodes.forEachPair(([revision, localId], node) => {\n\t\t\tif (node.fieldChanges !== undefined) {\n\t\t\t\tthis.populateCrossFieldKeyTableForFieldMap(keys, node.fieldChanges, {\n\t\t\t\t\trevision,\n\t\t\t\t\tlocalId,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn keys;\n\t}\n\n\tprivate populateCrossFieldKeyTableForFieldMap(\n\t\ttable: CrossFieldKeyTable,\n\t\tfields: FieldChangeMap,\n\t\tparent: NodeId | undefined,\n\t): void {\n\t\tfor (const [fieldKey, fieldChange] of fields) {\n\t\t\tconst keys = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).getCrossFieldKeys(\n\t\t\t\tfieldChange.change,\n\t\t\t);\n\t\t\tfor (const { key, count } of keys) {\n\t\t\t\ttable.set(key, count, { nodeId: parent, field: fieldKey });\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic buildEditor(\n\t\tmintRevisionTag: () => RevisionTag,\n\t\tchangeReceiver: (change: TaggedChange<ModularChangeset>) => void,\n\t): ModularEditBuilder {\n\t\treturn new ModularEditBuilder(this, this.fieldKinds, changeReceiver, this.codecOptions);\n\t}\n\n\tprivate createEmptyFieldChange(fieldKind: FieldKindIdentifier): FieldChange {\n\t\tconst emptyChange = getChangeHandler(this.fieldKinds, fieldKind).createEmpty();\n\t\treturn { fieldKind, change: brand(emptyChange) };\n\t}\n\n\tpublic validateChangeset(change: ModularChangeset): void {\n\t\tlet numNodes = this.validateFieldChanges(change, change.fieldChanges, undefined);\n\n\t\tfor (const [[revision, localId], node] of change.nodeChanges.entries()) {\n\t\t\tif (node.fieldChanges === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst nodeId: NodeId = { revision, localId };\n\t\t\tconst numChildren = this.validateFieldChanges(change, node.fieldChanges, nodeId);\n\n\t\t\tnumNodes += numChildren;\n\t\t}\n\n\t\tassert(\n\t\t\tnumNodes === change.nodeChanges.size,\n\t\t\t0xa4d /* Node table contains unparented nodes */,\n\t\t);\n\t}\n\n\t/**\n\t * Asserts that each child and cross field key in each field has a correct entry in\n\t * `nodeToParent` or `crossFieldKeyTable`.\n\t * @returns the number of children found.\n\t */\n\tprivate validateFieldChanges(\n\t\tchange: ModularChangeset,\n\t\tfieldChanges: FieldChangeMap,\n\t\tnodeParent: NodeId | undefined,\n\t): number {\n\t\tlet numChildren = 0;\n\t\tfor (const [field, fieldChange] of fieldChanges.entries()) {\n\t\t\tconst fieldId = { nodeId: nodeParent, field };\n\t\t\tconst handler = getChangeHandler(this.fieldKinds, fieldChange.fieldKind);\n\t\t\tfor (const [child, _index] of handler.getNestedChanges(fieldChange.change)) {\n\t\t\t\tconst parentFieldId = getParentFieldId(change, child);\n\t\t\t\tassert(\n\t\t\t\t\tareEqualFieldIds(parentFieldId, fieldId),\n\t\t\t\t\t0xa4e /* Inconsistent node parentage */,\n\t\t\t\t);\n\t\t\t\tnumChildren += 1;\n\t\t\t}\n\n\t\t\tfor (const keyRange of handler.getCrossFieldKeys(fieldChange.change)) {\n\t\t\t\tconst fields = getFieldsForCrossFieldKey(change, keyRange.key, keyRange.count);\n\t\t\t\tassert(\n\t\t\t\t\tfields.length === 1 &&\n\t\t\t\t\t\tfields[0] !== undefined &&\n\t\t\t\t\t\tareEqualFieldIds(fields[0], fieldId),\n\t\t\t\t\t0xa4f /* Inconsistent cross field keys */,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn numChildren;\n\t}\n\n\tprivate getEffectiveChange(change: ModularChangeset): ModularChangeset {\n\t\tif (hasConflicts(change)) {\n\t\t\treturn this.muteChange(change);\n\t\t}\n\t\treturn change;\n\t}\n\n\t/**\n\t * Returns a copy of the given changeset with the same declarations (e.g., new cells) but no actual changes.\n\t */\n\tprivate muteChange(change: ModularChangeset): ModularChangeset {\n\t\tconst muted: Mutable<ModularChangeset> = {\n\t\t\t...change,\n\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\tfieldChanges: this.muteFieldChanges(change.fieldChanges),\n\t\t\tnodeChanges: brand(change.nodeChanges.mapValues((v) => this.muteNodeChange(v))),\n\t\t};\n\t\treturn muted;\n\t}\n\n\tprivate muteNodeChange(change: NodeChangeset): NodeChangeset {\n\t\tif (change.fieldChanges === undefined) {\n\t\t\treturn change;\n\t\t}\n\t\treturn {\n\t\t\t...change,\n\t\t\tfieldChanges: this.muteFieldChanges(change.fieldChanges),\n\t\t};\n\t}\n\n\tprivate muteFieldChanges(change: FieldChangeMap): FieldChangeMap {\n\t\treturn new Map(\n\t\t\tArray.from(change.entries(), ([key, value]) => [key, this.muteFieldChange(value)]),\n\t\t);\n\t}\n\n\tprivate muteFieldChange(change: FieldChange): FieldChange {\n\t\tconst handler = getChangeHandler(this.fieldKinds, change.fieldKind);\n\t\treturn {\n\t\t\tfieldKind: change.fieldKind,\n\t\t\tchange: brand(handler.rebaser.mute(change.change)),\n\t\t};\n\t}\n}\n\nfunction replaceCrossFieldKeyTableRevisions(\n\ttable: CrossFieldKeyTable,\n\treplacer: RevisionReplacer,\n\tnodeAliases: ChangeAtomIdBTree<NodeId>,\n): CrossFieldKeyTable {\n\tconst updated: CrossFieldKeyTable = newCrossFieldKeyTable();\n\tfor (const entry of table.entries()) {\n\t\tconst key = entry.start;\n\t\tconst updatedKey: CrossFieldKey = replacer.getUpdatedAtomId(key);\n\n\t\tconst field = entry.value;\n\t\tconst normalizedFieldId = normalizeFieldId(field, nodeAliases);\n\t\tconst updatedNodeId =\n\t\t\tnormalizedFieldId.nodeId === undefined\n\t\t\t\t? undefined\n\t\t\t\t: replacer.getUpdatedAtomId(normalizedFieldId.nodeId);\n\n\t\tconst updatedValue: FieldId = {\n\t\t\t...normalizedFieldId,\n\t\t\tnodeId: updatedNodeId,\n\t\t};\n\n\t\tupdated.set(updatedKey, entry.length, updatedValue);\n\t}\n\n\treturn updated;\n}\n\nfunction replaceIdMapRevisions<T>(\n\tmap: ChangeAtomIdBTree<T>,\n\treplacer: RevisionReplacer,\n\tvalueMapper: (value: T) => T = (value) => value,\n): ChangeAtomIdBTree<T> {\n\tconst updated: ChangeAtomIdBTree<T> = newTupleBTree();\n\tfor (const [[revision, localId], value] of map.entries()) {\n\t\tconst newAtom = replacer.getUpdatedAtomId({ revision, localId });\n\t\tupdated.set([newAtom.revision, newAtom.localId], valueMapper(value));\n\t}\n\n\treturn updated;\n}\n\ninterface BuildsDestroysAndRefreshers {\n\treadonly allBuilds: ChangeAtomIdBTree<TreeChunk>;\n\treadonly allDestroys: ChangeAtomIdBTree<number>;\n\treadonly allRefreshers: ChangeAtomIdBTree<TreeChunk>;\n}\n\nfunction composeBuildsDestroysAndRefreshers(\n\tchange1: ModularChangeset,\n\tchange2: ModularChangeset,\n): BuildsDestroysAndRefreshers {\n\t// Duplicate builds can happen in compositions of commits that needed to include detached tree refreshers (e.g., undos):\n\t// In that case, it's possible for the refreshers to contain different trees because the latter\n\t// refresher may already reflect the changes made by the commit that includes the earlier\n\t// refresher. This composition includes the changes made by the commit that includes the\n\t// earlier refresher, so we need to include the build for the earlier refresher, otherwise\n\t// the produced changeset will build a tree one which those changes have already been applied\n\t// and also try to apply the changes again, effectively applying them twice.\n\t// Note that it would in principle be possible to adopt the later build and exclude from the\n\t// composition all the changes already reflected on the tree, but that is not something we\n\t// care to support at this time.\n\tconst allBuilds: ChangeAtomIdBTree<TreeChunk> = brand(\n\t\tmergeTupleBTrees(\n\t\t\tchange1.builds ?? newTupleBTree(),\n\t\t\tchange2.builds ?? newTupleBTree(),\n\t\t\ttrue,\n\t\t),\n\t);\n\n\tconst allDestroys: ChangeAtomIdBTree<number> = brand(\n\t\tmergeTupleBTrees(change1.destroys ?? newTupleBTree(), change2.destroys ?? newTupleBTree()),\n\t);\n\n\tconst allRefreshers: ChangeAtomIdBTree<TreeChunk> = brand(\n\t\tmergeTupleBTrees(\n\t\t\tchange1.refreshers ?? newTupleBTree(),\n\t\t\tchange2.refreshers ?? newTupleBTree(),\n\t\t\ttrue,\n\t\t),\n\t);\n\n\tif (change1.destroys !== undefined && change2.builds !== undefined) {\n\t\tfor (const [key, chunk] of change2.builds.entries()) {\n\t\t\tconst destroyCount = change1.destroys.get(key);\n\t\t\tif (destroyCount !== undefined) {\n\t\t\t\tassert(\n\t\t\t\t\tdestroyCount === chunk.topLevelLength,\n\t\t\t\t\t0x89b /* Expected build and destroy to have the same length */,\n\t\t\t\t);\n\n\t\t\t\tallBuilds.delete(key);\n\t\t\t\tallDestroys.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (change1.builds !== undefined && change2.destroys !== undefined) {\n\t\tfor (const [key, chunk] of change1.builds.entries()) {\n\t\t\tconst destroyCount = change2.destroys.get(key);\n\t\t\tif (destroyCount !== undefined) {\n\t\t\t\tassert(\n\t\t\t\t\tdestroyCount === chunk.topLevelLength,\n\t\t\t\t\t0x9f0 /* Expected build and destroy to have the same length */,\n\t\t\t\t);\n\n\t\t\t\tallBuilds.delete(key);\n\t\t\t\tallDestroys.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { allBuilds, allDestroys, allRefreshers };\n}\n\nfunction invertBuilds(\n\tbuilds: ChangeAtomIdBTree<TreeChunk> | undefined,\n): ChangeAtomIdBTree<number> | undefined {\n\tif (builds !== undefined) {\n\t\treturn brand(builds.mapValues((chunk) => chunk.topLevelLength));\n\t}\n\treturn undefined;\n}\n\n/**\n * Returns the set of removed roots that should be in memory for the given change to be applied.\n * A removed root is relevant if any of the following is true:\n * - It is being inserted\n * - It is being restored\n * - It is being edited\n * - The ID it is associated with is being changed\n *\n * May be conservative by returning more removed roots than strictly necessary.\n *\n * Will never return IDs for non-root trees, even if they are removed.\n *\n * @param change - The change to be applied.\n * @param fieldKinds - The field kinds to delegate to.\n */\nexport function* relevantRemovedRoots(\n\tchange: ModularChangeset,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n): Iterable<DeltaDetachedNodeId> {\n\tyield* relevantRemovedRootsFromFields(change.fieldChanges, change.nodeChanges, fieldKinds);\n}\n\nfunction* relevantRemovedRootsFromNode(\n\tnode: NodeId,\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n): Iterable<DeltaDetachedNodeId> {\n\tconst nodeChangeset = nodeChangeFromId(nodeChanges, node);\n\tif (nodeChangeset.fieldChanges !== undefined) {\n\t\tyield* relevantRemovedRootsFromFields(nodeChangeset.fieldChanges, nodeChanges, fieldKinds);\n\t}\n}\n\nfunction* relevantRemovedRootsFromFields(\n\tchange: FieldChangeMap,\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n): Iterable<DeltaDetachedNodeId> {\n\tconst delegate = (node: NodeId): Iterable<DeltaDetachedNodeId> =>\n\t\trelevantRemovedRootsFromNode(node, nodeChanges, fieldKinds);\n\tfor (const [_, fieldChange] of change) {\n\t\tconst handler = getChangeHandler(fieldKinds, fieldChange.fieldKind);\n\t\tyield* handler.relevantRemovedRoots(fieldChange.change, delegate);\n\t}\n}\n\n/**\n * Adds any refreshers missing from the provided change that are relevant to the change and\n * removes any refreshers from the provided change that are not relevant to the change.\n *\n * @param change - The change that possibly has missing or superfluous refreshers. Not mutated by this function.\n * @param getDetachedNode - The function to retrieve a tree chunk from the corresponding detached node id.\n * @param removedRoots - The set of removed roots that should be in memory for the given change to be applied.\n * Can be retrieved by calling {@link relevantRemovedRoots}.\n * @param requireRefreshers - when true, this function enforces that all relevant removed roots have a\n * corresponding build or refresher.\n */\nexport function updateRefreshers(\n\tchange: ModularChangeset,\n\tgetDetachedNode: (id: DeltaDetachedNodeId) => TreeChunk | undefined,\n\tremovedRoots: Iterable<DeltaDetachedNodeId>,\n\trequireRefreshers: boolean = true,\n): ModularChangeset {\n\tconst refreshers: ChangeAtomIdBTree<TreeChunk> = newTupleBTree();\n\tconst chunkLengths: Map<RevisionTag | undefined, BTree<number, number>> = new Map();\n\n\tif (change.builds !== undefined) {\n\t\tfor (const [[revision, id], chunk] of change.builds.entries()) {\n\t\t\tconst lengthTree = getOrCreate(chunkLengths, revision, () => new BTree());\n\t\t\tlengthTree.set(id, chunk.topLevelLength);\n\t\t}\n\t}\n\n\tfor (const root of removedRoots) {\n\t\tif (change.builds !== undefined) {\n\t\t\tconst lengthTree = chunkLengths.get(root.major);\n\n\t\t\tif (lengthTree !== undefined) {\n\t\t\t\tconst lengthPair = lengthTree.getPairOrNextLower(root.minor);\n\t\t\t\tif (lengthPair !== undefined) {\n\t\t\t\t\tconst [firstMinor, length] = lengthPair;\n\n\t\t\t\t\t// if the root minor is within the length of the minor of the retrieved pair\n\t\t\t\t\t// then there's no need to check for the detached node\n\t\t\t\t\tif (root.minor < firstMinor + length) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst node = getDetachedNode(root);\n\t\tif (node === undefined) {\n\t\t\tassert(!requireRefreshers, 0x8cd /* detached node should exist */);\n\t\t} else {\n\t\t\trefreshers.set([root.major, brand(root.minor)], node);\n\t\t}\n\t}\n\n\tconst {\n\t\tfieldChanges,\n\t\tnodeChanges,\n\t\tnodeToParent,\n\t\tnodeAliases,\n\t\tcrossFieldKeys,\n\t\tmaxId,\n\t\trevisions,\n\t\tconstraintViolationCount,\n\t\tconstraintViolationCountOnRevert,\n\t\tbuilds,\n\t\tdestroys,\n\t} = change;\n\n\treturn makeModularChangeset({\n\t\tfieldChanges,\n\t\tnodeChanges,\n\t\tnodeToParent,\n\t\tnodeAliases,\n\t\tcrossFieldKeys,\n\t\tmaxId: maxId as number,\n\t\trevisions,\n\t\tconstraintViolationCount,\n\t\tconstraintViolationCountOnRevert,\n\t\tbuilds,\n\t\tdestroys,\n\t\trefreshers,\n\t});\n}\n\n/**\n * Converts a change into the delta format.\n *\n * @param change - The change to convert into a delta.\n * @param fieldKinds - The field kinds to delegate to.\n */\nexport function intoDelta(\n\ttaggedChange: TaggedChange<ModularChangeset>,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n): DeltaRoot {\n\tconst change = taggedChange.change;\n\tconst rootDelta: Mutable<DeltaRoot> = {};\n\tconst global: DeltaDetachedNodeChanges[] = [];\n\tconst rename: DeltaDetachedNodeRename[] = [];\n\n\tif (!hasConflicts(change)) {\n\t\t// If there are no constraint violations, then tree changes apply.\n\t\tconst fieldDeltas = intoDeltaImpl(\n\t\t\tchange.fieldChanges,\n\t\t\tchange.nodeChanges,\n\t\t\tfieldKinds,\n\t\t\tglobal,\n\t\t\trename,\n\t\t);\n\t\tif (fieldDeltas.size > 0) {\n\t\t\trootDelta.fields = fieldDeltas;\n\t\t}\n\t\tif (global.length > 0) {\n\t\t\trootDelta.global = global;\n\t\t}\n\t\tif (rename.length > 0) {\n\t\t\trootDelta.rename = rename;\n\t\t}\n\t}\n\n\t// Constraint violations should not prevent nodes from being built\n\tif (change.builds && change.builds.size > 0) {\n\t\trootDelta.build = copyDetachedNodes(change.builds);\n\t}\n\tif (change.destroys !== undefined && change.destroys.size > 0) {\n\t\tconst destroys: DeltaDetachedNodeDestruction[] = [];\n\t\tfor (const [[major, minor], count] of change.destroys.entries()) {\n\t\t\tdestroys.push({\n\t\t\t\tid: makeDetachedNodeId(major, minor),\n\t\t\t\tcount,\n\t\t\t});\n\t\t}\n\t\trootDelta.destroy = destroys;\n\t}\n\tif (change.refreshers && change.refreshers.size > 0) {\n\t\trootDelta.refreshers = copyDetachedNodes(change.refreshers);\n\t}\n\treturn rootDelta;\n}\n\nfunction copyDetachedNodes(\n\tdetachedNodes: ChangeAtomIdBTree<TreeChunk>,\n): DeltaDetachedNodeBuild[] | undefined {\n\tconst copiedDetachedNodes: DeltaDetachedNodeBuild[] = [];\n\tfor (const [[major, minor], chunk] of detachedNodes.entries()) {\n\t\tif (chunk.topLevelLength > 0) {\n\t\t\tchunk.referenceAdded();\n\t\t\tcopiedDetachedNodes.push({\n\t\t\t\tid: makeDetachedNodeId(major, minor),\n\t\t\t\ttrees: chunk,\n\t\t\t});\n\t\t}\n\t}\n\treturn copiedDetachedNodes.length > 0 ? copiedDetachedNodes : undefined;\n}\n\n/**\n * @param change - The change to convert into a delta.\n */\nfunction intoDeltaImpl(\n\tchange: FieldChangeMap,\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\tglobal: DeltaDetachedNodeChanges[],\n\trename: DeltaDetachedNodeRename[],\n): Map<FieldKey, DeltaFieldChanges> {\n\tconst delta: Map<FieldKey, DeltaFieldChanges> = new Map();\n\n\tfor (const [field, fieldChange] of change) {\n\t\tconst {\n\t\t\tlocal: fieldChanges,\n\t\t\tglobal: fieldGlobal,\n\t\t\trename: fieldRename,\n\t\t} = getChangeHandler(fieldKinds, fieldChange.fieldKind).intoDelta(\n\t\t\tfieldChange.change,\n\t\t\t(childChange): DeltaFieldMap => {\n\t\t\t\tconst nodeChange = nodeChangeFromId(nodeChanges, childChange);\n\t\t\t\treturn deltaFromNodeChange(nodeChange, nodeChanges, fieldKinds, global, rename);\n\t\t\t},\n\t\t);\n\t\tif (fieldChanges !== undefined && fieldChanges.length > 0) {\n\t\t\tdelta.set(field, fieldChanges);\n\t\t}\n\t\tfor (const c of fieldGlobal ?? []) {\n\t\t\tglobal.push(c);\n\t\t}\n\t\tfor (const r of fieldRename ?? []) {\n\t\t\trename.push(r);\n\t\t}\n\t}\n\treturn delta;\n}\n\nfunction deltaFromNodeChange(\n\tchange: NodeChangeset,\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>,\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\tglobal: DeltaDetachedNodeChanges[],\n\trename: DeltaDetachedNodeRename[],\n): DeltaFieldMap {\n\tif (change.fieldChanges !== undefined) {\n\t\treturn intoDeltaImpl(change.fieldChanges, nodeChanges, fieldKinds, global, rename);\n\t}\n\t// TODO: update the API to allow undefined to be returned here\n\treturn new Map();\n}\n\n/**\n * @param revInfos - This should describe the revision being rebased and all revisions in the rebase path,\n * even if not part of the current base changeset.\n * For example, when rebasing change B from a local branch [A, B, C] over a branch [X, Y], the `revInfos` must include\n * the changes [A⁻¹ X, Y, A, B] for each rebase step of B.\n * @param revisionToRebase - The revision of the changeset which is being rebased.\n * @param baseRevisions - The set of revisions in the changeset being rebased over.\n * For example, when rebasing change B from a local branch [A, B, C] over a branch [X, Y], the `baseRevisions` must include\n * revisions [A⁻¹ X, Y, A] if rebasing over the composition of all those changes, or\n * revision [A⁻¹] for the first rebase, then [X], etc. if rebasing over edits individually.\n * @returns RebaseRevisionMetadata to be passed to `FieldChangeRebaser.rebase`*\n */\nexport function rebaseRevisionMetadataFromInfo(\n\trevInfos: readonly RevisionInfo[],\n\trevisionToRebase: RevisionTag | undefined,\n\tbaseRevisions: (RevisionTag | undefined)[],\n): RebaseRevisionMetadata {\n\tconst filteredRevisions: RevisionTag[] = [];\n\tfor (const revision of baseRevisions) {\n\t\tif (revision !== undefined) {\n\t\t\tfilteredRevisions.push(revision);\n\t\t}\n\t}\n\n\tconst getBaseRevisions = (): RevisionTag[] => filteredRevisions;\n\treturn {\n\t\t...revisionMetadataSourceFromInfo(revInfos),\n\t\tgetRevisionToRebase: () => revisionToRebase,\n\t\tgetBaseRevisions,\n\t};\n}\n\nfunction isEmptyNodeChangeset(change: NodeChangeset): boolean {\n\treturn (\n\t\tchange.fieldChanges === undefined &&\n\t\tchange.nodeExistsConstraint === undefined &&\n\t\tchange.nodeExistsConstraintOnRevert === undefined\n\t);\n}\n\nexport function getFieldKind(\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\tkind: FieldKindIdentifier,\n): FlexFieldKind {\n\tif (kind === genericFieldKind.identifier) {\n\t\treturn genericFieldKind;\n\t}\n\tconst fieldKind = fieldKinds.get(kind);\n\tassert(fieldKind !== undefined, 0x3ad /* Unknown field kind */);\n\treturn fieldKind;\n}\n\nexport function getChangeHandler(\n\tfieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\tkind: FieldKindIdentifier,\n): FieldChangeHandler<unknown> {\n\treturn getFieldKind(fieldKinds, kind).changeHandler;\n}\n\n// TODO: TFieldData could instead just be a numeric ID generated by the CrossFieldTable\n// The CrossFieldTable could have a generic field ID to context table\ninterface CrossFieldTable<TFieldData> {\n\tsrcTable: CrossFieldMap<unknown>;\n\tdstTable: CrossFieldMap<unknown>;\n\tsrcDependents: CrossFieldMap<TFieldData>;\n\tdstDependents: CrossFieldMap<TFieldData>;\n\tinvalidatedFields: Set<TFieldData>;\n}\n\ninterface InvertTable extends CrossFieldTable<FieldChange> {\n\toriginalFieldToContext: Map<FieldChange, InvertContext>;\n\tinvertedNodeToParent: ChangeAtomIdBTree<FieldId>;\n}\n\ninterface InvertContext {\n\tfieldId: FieldId;\n\tinvertedField: FieldChange;\n}\n\ninterface RebaseTable extends CrossFieldTable<FieldChange> {\n\treadonly baseChange: ModularChangeset;\n\treadonly newChange: ModularChangeset;\n\n\t/**\n\t * Maps from the FieldChange key used for the CrossFieldTable (which is the base FieldChange)\n\t * to the context for the field.\n\t */\n\treadonly baseFieldToContext: Map<FieldChange, RebaseFieldContext>;\n\treadonly baseToRebasedNodeId: ChangeAtomIdBTree<NodeId>;\n\treadonly rebasedFields: Set<FieldChange>;\n\treadonly rebasedNodeToParent: ChangeAtomIdBTree<FieldId>;\n\treadonly rebasedCrossFieldKeys: CrossFieldKeyTable;\n\n\t/**\n\t * List of unprocessed (newId, baseId) pairs encountered so far.\n\t */\n\treadonly nodeIdPairs: [NodeId, NodeId, NodeAttachState | undefined][];\n\treadonly affectedBaseFields: TupleBTree<FieldIdKey, boolean>;\n\n\t/**\n\t * Set of base fields which contain a node which needs to be attached in the rebased changeset.\n\t */\n\treadonly fieldsWithUnattachedChild: Set<FieldChange>;\n}\n\ntype FieldIdKey = [RevisionTag | undefined, ChangesetLocalId | undefined, FieldKey];\n\ninterface RebaseFieldContext {\n\tbaseChange: FieldChange;\n\tnewChange: FieldChange;\n\trebasedChange: FieldChange;\n\tfieldId: FieldId;\n\n\t/**\n\t * The set of node IDs in the base changeset which should be included in the rebased field,\n\t * even if there is no corresponding node changeset in the new change.\n\t */\n\tbaseNodeIds: NodeId[];\n}\n\nfunction newComposeTable(\n\tbaseChange: ModularChangeset,\n\tnewChange: ModularChangeset,\n\tcomposedNodeToParent: ChangeAtomIdBTree<FieldId>,\n): ComposeTable {\n\treturn {\n\t\t...newCrossFieldTable<FieldChange>(),\n\t\tbaseChange,\n\t\tnewChange,\n\t\tfieldToContext: new Map(),\n\t\tnewFieldToBaseField: new Map(),\n\t\tnewToBaseNodeId: newTupleBTree(),\n\t\tcomposedNodes: new Set(),\n\t\tcomposedNodeToParent,\n\t\tpendingCompositions: {\n\t\t\tnodeIdsToCompose: [],\n\t\t\taffectedBaseFields: newTupleBTree(),\n\t\t\taffectedNewFields: newTupleBTree(),\n\t\t},\n\t};\n}\n\ninterface ComposeTable extends CrossFieldTable<FieldChange> {\n\treadonly baseChange: ModularChangeset;\n\treadonly newChange: ModularChangeset;\n\n\t/**\n\t * Maps from an input changeset for a field (from change1 if it has one, from change2 otherwise) to the context for that field.\n\t */\n\treadonly fieldToContext: Map<FieldChange, ComposeFieldContext>;\n\treadonly newFieldToBaseField: Map<FieldChange, FieldChange>;\n\treadonly newToBaseNodeId: ChangeAtomIdBTree<NodeId>;\n\treadonly composedNodes: Set<NodeChangeset>;\n\treadonly composedNodeToParent: ChangeAtomIdBTree<FieldId>;\n\treadonly pendingCompositions: PendingCompositions;\n}\n\ninterface PendingCompositions {\n\t/**\n\t * Each entry in this list represents a node with both base and new changes which have not yet been composed.\n\t * Entries are of the form [baseId, newId].\n\t */\n\treadonly nodeIdsToCompose: [NodeId, NodeId][];\n\n\t/**\n\t * The set of fields in the base changeset which have been affected by a cross field effect.\n\t */\n\treadonly affectedBaseFields: BTree<FieldIdKey, true>;\n\n\t/**\n\t * The set of fields in the new changeset which have been affected by a cross field effect.\n\t */\n\treadonly affectedNewFields: BTree<FieldIdKey, true>;\n}\n\ninterface ComposeFieldContext {\n\t/**\n\t * The field ID for this field in the composed changeset.\n\t */\n\tfieldId: FieldId;\n\tchange1: FieldChangeset;\n\tchange2: FieldChangeset;\n\tcomposedChange: FieldChange;\n}\n\nfunction newCrossFieldTable<T>(): CrossFieldTable<T> {\n\treturn {\n\t\tsrcTable: newChangeAtomIdRangeMap(),\n\t\tdstTable: newChangeAtomIdRangeMap(),\n\t\tsrcDependents: newChangeAtomIdRangeMap(),\n\t\tdstDependents: newChangeAtomIdRangeMap(),\n\t\tinvalidatedFields: new Set(),\n\t};\n}\n\ninterface ConstraintState {\n\tviolationCount: number;\n}\n\nfunction newConstraintState(violationCount: number): ConstraintState {\n\treturn {\n\t\tviolationCount,\n\t};\n}\n\nabstract class CrossFieldManagerI<T> implements CrossFieldManager {\n\tpublic constructor(\n\t\tprotected readonly crossFieldTable: CrossFieldTable<T>,\n\t\tprivate readonly currentFieldKey: T,\n\t\tprotected readonly allowInval = true,\n\t) {}\n\n\tpublic set(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t\tnewValue: unknown,\n\t\tinvalidateDependents: boolean,\n\t): void {\n\t\tif (invalidateDependents && this.allowInval) {\n\t\t\tconst lastChangedId = (id as number) + count - 1;\n\t\t\tlet firstId = id;\n\t\t\twhile (firstId <= lastChangedId) {\n\t\t\t\tconst dependentEntry = getFirstFromCrossFieldMap(\n\t\t\t\t\tthis.getDependents(target),\n\t\t\t\t\trevision,\n\t\t\t\t\tfirstId,\n\t\t\t\t\tlastChangedId - firstId + 1,\n\t\t\t\t);\n\t\t\t\tif (dependentEntry.value !== undefined) {\n\t\t\t\t\tthis.crossFieldTable.invalidatedFields.add(dependentEntry.value);\n\t\t\t\t}\n\n\t\t\t\tfirstId = brand(firstId + dependentEntry.length);\n\t\t\t}\n\t\t}\n\t\tsetInCrossFieldMap(this.getMap(target), revision, id, count, newValue);\n\t}\n\n\tpublic get(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t\taddDependency: boolean,\n\t): RangeQueryResult<ChangeAtomId, unknown> {\n\t\tif (addDependency) {\n\t\t\t// We assume that if there is already an entry for this ID it is because\n\t\t\t// a field handler has called compose on the same node multiple times.\n\t\t\t// In this case we only want to update the latest version, so we overwrite the dependency.\n\t\t\tsetInCrossFieldMap(\n\t\t\t\tthis.getDependents(target),\n\t\t\t\trevision,\n\t\t\t\tid,\n\t\t\t\tcount,\n\t\t\t\tthis.currentFieldKey,\n\t\t\t);\n\t\t}\n\t\treturn getFirstFromCrossFieldMap(this.getMap(target), revision, id, count);\n\t}\n\n\tpublic abstract onMoveIn(id: NodeId): void;\n\n\tpublic abstract moveKey(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t): void;\n\n\tprivate getMap(target: CrossFieldTarget): CrossFieldMap<unknown> {\n\t\treturn target === CrossFieldTarget.Source\n\t\t\t? this.crossFieldTable.srcTable\n\t\t\t: this.crossFieldTable.dstTable;\n\t}\n\n\tprivate getDependents(target: CrossFieldTarget): CrossFieldMap<T> {\n\t\treturn target === CrossFieldTarget.Source\n\t\t\t? this.crossFieldTable.srcDependents\n\t\t\t: this.crossFieldTable.dstDependents;\n\t}\n}\n\nclass InvertManager extends CrossFieldManagerI<FieldChange> {\n\tpublic constructor(\n\t\ttable: InvertTable,\n\t\tfield: FieldChange,\n\t\tprivate readonly fieldId: FieldId,\n\t\tallowInval = true,\n\t) {\n\t\tsuper(table, field, allowInval);\n\t}\n\n\tpublic override onMoveIn(id: ChangeAtomId): void {\n\t\tsetInChangeAtomIdMap(this.table.invertedNodeToParent, id, this.fieldId);\n\t}\n\n\tpublic override moveKey(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t): void {\n\t\tassert(false, 0x9c5 /* Keys should not be moved manually during invert */);\n\t}\n\n\tprivate get table(): InvertTable {\n\t\treturn this.crossFieldTable as InvertTable;\n\t}\n}\n\nclass RebaseManager extends CrossFieldManagerI<FieldChange> {\n\tpublic constructor(\n\t\ttable: RebaseTable,\n\t\tcurrentField: FieldChange,\n\t\tprivate readonly fieldId: FieldId,\n\t\tallowInval = true,\n\t) {\n\t\tsuper(table, currentField, allowInval);\n\t}\n\n\tpublic override set(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t\tnewValue: unknown,\n\t\tinvalidateDependents: boolean,\n\t): void {\n\t\tif (invalidateDependents && this.allowInval) {\n\t\t\tconst newFieldIds = getFieldsForCrossFieldKey(\n\t\t\t\tthis.table.newChange,\n\t\t\t\t{\n\t\t\t\t\ttarget,\n\t\t\t\t\trevision,\n\t\t\t\t\tlocalId: id,\n\t\t\t\t},\n\t\t\t\tcount,\n\t\t\t);\n\n\t\t\tassert(\n\t\t\t\tnewFieldIds.length === 0,\n\t\t\t\t0x9c6 /* TODO: Modifying a cross-field key from the new changeset is currently unsupported */,\n\t\t\t);\n\n\t\t\tconst baseFieldIds = getFieldsForCrossFieldKey(\n\t\t\t\tthis.table.baseChange,\n\t\t\t\t{\n\t\t\t\t\ttarget,\n\t\t\t\t\trevision,\n\t\t\t\t\tlocalId: id,\n\t\t\t\t},\n\t\t\t\tcount,\n\t\t\t);\n\n\t\t\tassert(\n\t\t\t\tbaseFieldIds.length > 0,\n\t\t\t\t0x9c7 /* Cross field key not registered in base or new change */,\n\t\t\t);\n\n\t\t\tfor (const baseFieldId of baseFieldIds) {\n\t\t\t\tthis.table.affectedBaseFields.set(\n\t\t\t\t\t[baseFieldId.nodeId?.revision, baseFieldId.nodeId?.localId, baseFieldId.field],\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tsuper.set(target, revision, id, count, newValue, invalidateDependents);\n\t}\n\n\tpublic override onMoveIn(id: ChangeAtomId): void {\n\t\tsetInChangeAtomIdMap(this.table.rebasedNodeToParent, id, this.fieldId);\n\t}\n\n\tpublic override moveKey(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t): void {\n\t\tthis.table.rebasedCrossFieldKeys.set(\n\t\t\t{ target, revision, localId: id },\n\t\t\tcount,\n\t\t\tthis.fieldId,\n\t\t);\n\t}\n\n\tprivate get table(): RebaseTable {\n\t\treturn this.crossFieldTable as RebaseTable;\n\t}\n}\n\n// TODO: Deduplicate this with RebaseTable\nclass ComposeManager extends CrossFieldManagerI<FieldChange> {\n\tpublic constructor(\n\t\ttable: ComposeTable,\n\t\tcurrentField: FieldChange,\n\t\tprivate readonly fieldId: FieldId,\n\t\tallowInval = true,\n\t) {\n\t\tsuper(table, currentField, allowInval);\n\t}\n\n\tpublic override set(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t\tnewValue: unknown,\n\t\tinvalidateDependents: boolean,\n\t): void {\n\t\tif (invalidateDependents && this.allowInval) {\n\t\t\tconst newFieldIds = getFieldsForCrossFieldKey(\n\t\t\t\tthis.table.newChange,\n\t\t\t\t{\n\t\t\t\t\ttarget,\n\t\t\t\t\trevision,\n\t\t\t\t\tlocalId: id,\n\t\t\t\t},\n\t\t\t\tcount,\n\t\t\t);\n\n\t\t\tif (newFieldIds.length > 0) {\n\t\t\t\tfor (const newFieldId of newFieldIds) {\n\t\t\t\t\tthis.table.pendingCompositions.affectedNewFields.set(\n\t\t\t\t\t\t[newFieldId.nodeId?.revision, newFieldId.nodeId?.localId, newFieldId.field],\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst baseFieldIds = getFieldsForCrossFieldKey(\n\t\t\t\t\tthis.table.baseChange,\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\trevision,\n\t\t\t\t\t\tlocalId: id,\n\t\t\t\t\t},\n\t\t\t\t\tcount,\n\t\t\t\t);\n\n\t\t\t\tassert(\n\t\t\t\t\tbaseFieldIds.length > 0,\n\t\t\t\t\t0x9c8 /* Cross field key not registered in base or new change */,\n\t\t\t\t);\n\n\t\t\t\tfor (const baseFieldId of baseFieldIds) {\n\t\t\t\t\tthis.table.pendingCompositions.affectedBaseFields.set(\n\t\t\t\t\t\t[baseFieldId.nodeId?.revision, baseFieldId.nodeId?.localId, baseFieldId.field],\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsuper.set(target, revision, id, count, newValue, invalidateDependents);\n\t}\n\n\tpublic override onMoveIn(id: ChangeAtomId): void {\n\t\tsetInChangeAtomIdMap(this.table.composedNodeToParent, id, this.fieldId);\n\t}\n\n\tpublic override moveKey(\n\t\ttarget: CrossFieldTarget,\n\t\trevision: RevisionTag | undefined,\n\t\tid: ChangesetLocalId,\n\t\tcount: number,\n\t): void {\n\t\tthrow new Error(\"Moving cross-field keys during compose is currently unsupported\");\n\t}\n\n\tprivate get table(): ComposeTable {\n\t\treturn this.crossFieldTable as ComposeTable;\n\t}\n}\n\nfunction makeModularChangeset(props?: {\n\tfieldChanges?: FieldChangeMap;\n\tnodeChanges?: ChangeAtomIdBTree<NodeChangeset>;\n\tnodeToParent?: ChangeAtomIdBTree<FieldId>;\n\tnodeAliases?: ChangeAtomIdBTree<NodeId>;\n\tcrossFieldKeys?: CrossFieldKeyTable;\n\tmaxId: number;\n\trevisions?: readonly RevisionInfo[];\n\tconstraintViolationCount?: number;\n\tconstraintViolationCountOnRevert?: number;\n\tnoChangeConstraint?: NoChangeConstraint;\n\tnoChangeConstraintOnRevert?: NoChangeConstraint;\n\tbuilds?: ChangeAtomIdBTree<TreeChunk>;\n\tdestroys?: ChangeAtomIdBTree<number>;\n\trefreshers?: ChangeAtomIdBTree<TreeChunk>;\n}): ModularChangeset {\n\tconst p = props ?? { maxId: -1 };\n\tconst changeset: Mutable<ModularChangeset> = {\n\t\tfieldChanges: p.fieldChanges ?? new Map(),\n\t\tnodeChanges: p.nodeChanges ?? newTupleBTree(),\n\t\tnodeToParent: p.nodeToParent ?? newTupleBTree(),\n\t\tnodeAliases: p.nodeAliases ?? newTupleBTree(),\n\t\tcrossFieldKeys: p.crossFieldKeys ?? newCrossFieldKeyTable(),\n\t};\n\n\tif (p.revisions !== undefined && p.revisions.length > 0) {\n\t\tchangeset.revisions = p.revisions;\n\t}\n\tif (p.maxId >= 0) {\n\t\tchangeset.maxId = brand(p.maxId);\n\t}\n\tif (p.constraintViolationCount !== undefined && p.constraintViolationCount > 0) {\n\t\tchangeset.constraintViolationCount = p.constraintViolationCount;\n\t}\n\tif (\n\t\tp.constraintViolationCountOnRevert !== undefined &&\n\t\tp.constraintViolationCountOnRevert > 0\n\t) {\n\t\tchangeset.constraintViolationCountOnRevert = p.constraintViolationCountOnRevert;\n\t}\n\tif (p.noChangeConstraint !== undefined) {\n\t\tchangeset.noChangeConstraint = p.noChangeConstraint;\n\t}\n\tif (p.noChangeConstraintOnRevert !== undefined) {\n\t\tchangeset.noChangeConstraintOnRevert = p.noChangeConstraintOnRevert;\n\t}\n\tif (p.builds !== undefined && p.builds.size > 0) {\n\t\tchangeset.builds = p.builds;\n\t}\n\tif (p.destroys !== undefined && p.destroys.size > 0) {\n\t\tchangeset.destroys = p.destroys;\n\t}\n\tif (p.refreshers !== undefined && p.refreshers.size > 0) {\n\t\tchangeset.refreshers = p.refreshers;\n\t}\n\treturn changeset;\n}\n\nexport class ModularEditBuilder extends EditBuilder<ModularChangeset> {\n\tprivate transactionDepth: number = 0;\n\tprivate idAllocator: IdAllocator;\n\tprivate readonly codecOptions: CodecWriteOptions;\n\n\tpublic constructor(\n\t\tfamily: ChangeFamily<ChangeFamilyEditor, ModularChangeset>,\n\t\tprivate readonly fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,\n\t\tchangeReceiver: (change: TaggedChange<ModularChangeset>) => void,\n\t\tcodecOptions: CodecWriteOptions,\n\t) {\n\t\tsuper(family, changeReceiver);\n\t\tthis.idAllocator = idAllocatorFromMaxId();\n\t\tthis.codecOptions = codecOptions;\n\t}\n\n\tpublic override enterTransaction(): void {\n\t\tthis.transactionDepth += 1;\n\t\tif (this.transactionDepth === 1) {\n\t\t\tthis.idAllocator = idAllocatorFromMaxId();\n\t\t}\n\t}\n\n\tpublic override exitTransaction(): void {\n\t\tassert(this.transactionDepth > 0, 0x5b9 /* Cannot exit inexistent transaction */);\n\t\tthis.transactionDepth -= 1;\n\t\tif (this.transactionDepth === 0) {\n\t\t\tthis.idAllocator = idAllocatorFromMaxId();\n\t\t}\n\t}\n\n\t/**\n\t * Builds a new tree to use in an edit.\n\t *\n\t * @param firstId - The ID to associate with the first node\n\t * @param content - The node(s) to build.\n\t * @param revision - The revision to use for the build.\n\t * @returns A description of the edit that can be passed to `submitChanges`.\n\t * The returned object may contain an owning reference to the given TreeChunk.\n\t */\n\tpublic buildTrees(\n\t\tfirstId: ChangesetLocalId,\n\t\tcontent: TreeChunk,\n\t\trevision: RevisionTag,\n\t): GlobalEditDescription {\n\t\tif (content.topLevelLength === 0) {\n\t\t\treturn { type: \"global\", revision };\n\t\t}\n\n\t\t// This content will be added to a GlobalEditDescription whose lifetime exceeds the scope of this function.\n\t\tcontent.referenceAdded();\n\n\t\tconst builds: ChangeAtomIdBTree<TreeChunk> = newTupleBTree();\n\t\tbuilds.set([revision, firstId], content);\n\n\t\treturn {\n\t\t\ttype: \"global\",\n\t\t\tbuilds,\n\t\t\trevision,\n\t\t};\n\t}\n\n\t/**\n\t * Adds a change to the edit builder\n\t * @param field - the field which is being edited\n\t * @param fieldKind - the kind of the field\n\t * @param change - the change to the field\n\t * @param revision - the revision of the change\n\t */\n\tpublic submitChange(\n\t\tfield: FieldUpPath,\n\t\tfieldKind: FieldKindIdentifier,\n\t\tchange: FieldChangeset,\n\t\trevision: RevisionTag,\n\t): void {\n\t\tconst localCrossFieldKeys = getChangeHandler(this.fieldKinds, fieldKind).getCrossFieldKeys(\n\t\t\tchange,\n\t\t);\n\n\t\tconst modularChange = buildModularChangesetFromField({\n\t\t\tpath: field,\n\t\t\tfieldChange: { fieldKind, change },\n\t\t\tnodeChanges: newTupleBTree(),\n\t\t\tnodeToParent: newTupleBTree(),\n\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\tidAllocator: this.idAllocator,\n\t\t\tlocalCrossFieldKeys,\n\t\t\trevision,\n\t\t});\n\t\tthis.applyChange(tagChange(modularChange, revision));\n\t}\n\n\tpublic submitChanges(changes: EditDescription[], revision: RevisionTag): void {\n\t\tconst modularChange = this.buildChanges(changes);\n\t\tthis.applyChange(tagChange(modularChange, revision));\n\t}\n\n\tpublic buildChanges(changes: EditDescription[]): ModularChangeset {\n\t\tconst revisions: Set<RevisionTag> = new Set();\n\t\tconst changeMaps = changes.map((change) => {\n\t\t\trevisions.add(change.revision);\n\t\t\treturn makeAnonChange(\n\t\t\t\tchange.type === \"global\"\n\t\t\t\t\t? makeModularChangeset({\n\t\t\t\t\t\t\tmaxId: this.idAllocator.getMaxId(),\n\t\t\t\t\t\t\tbuilds: change.builds,\n\t\t\t\t\t\t\trevisions: [{ revision: change.revision }],\n\t\t\t\t\t\t})\n\t\t\t\t\t: buildModularChangesetFromField({\n\t\t\t\t\t\t\tpath: change.field,\n\t\t\t\t\t\t\tfieldChange: {\n\t\t\t\t\t\t\t\tfieldKind: change.fieldKind,\n\t\t\t\t\t\t\t\tchange: change.change,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnodeChanges: newTupleBTree(),\n\t\t\t\t\t\t\tnodeToParent: newTupleBTree(),\n\t\t\t\t\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\t\t\t\t\tidAllocator: this.idAllocator,\n\t\t\t\t\t\t\tlocalCrossFieldKeys: getChangeHandler(\n\t\t\t\t\t\t\t\tthis.fieldKinds,\n\t\t\t\t\t\t\t\tchange.fieldKind,\n\t\t\t\t\t\t\t).getCrossFieldKeys(change.change),\n\t\t\t\t\t\t\trevision: change.revision,\n\t\t\t\t\t\t}),\n\t\t\t);\n\t\t});\n\t\tconst revInfo = [...revisions].map((revision) => ({ revision }));\n\t\tconst composedChange: Mutable<ModularChangeset> = {\n\t\t\t...this.changeFamily.rebaser.compose(changeMaps),\n\t\t\trevisions: revInfo,\n\t\t};\n\n\t\tconst maxId: ChangesetLocalId = brand(this.idAllocator.getMaxId());\n\t\tif (maxId >= 0) {\n\t\t\tcomposedChange.maxId = maxId;\n\t\t}\n\t\treturn composedChange;\n\t}\n\n\tpublic generateId(count?: number): ChangesetLocalId {\n\t\treturn brand(this.idAllocator.allocate(count));\n\t}\n\n\tpublic addNodeExistsConstraint(path: UpPath, revision: RevisionTag): void {\n\t\tconst nodeChange: NodeChangeset = {\n\t\t\tnodeExistsConstraint: { violated: false },\n\t\t};\n\n\t\tthis.applyChange(\n\t\t\ttagChange(\n\t\t\t\tbuildModularChangesetFromNode({\n\t\t\t\t\tpath,\n\t\t\t\t\tnodeChange,\n\t\t\t\t\tnodeChanges: newTupleBTree(),\n\t\t\t\t\tnodeToParent: newTupleBTree(),\n\t\t\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\t\t\tidAllocator: this.idAllocator,\n\t\t\t\t\trevision,\n\t\t\t\t}),\n\t\t\t\trevision,\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic addNodeExistsConstraintOnRevert(path: UpPath, revision: RevisionTag): void {\n\t\tconst nodeChange: NodeChangeset = {\n\t\t\tnodeExistsConstraintOnRevert: { violated: false },\n\t\t};\n\n\t\tthis.applyChange(\n\t\t\ttagChange(\n\t\t\t\tbuildModularChangesetFromNode({\n\t\t\t\t\tpath,\n\t\t\t\t\tnodeChange,\n\t\t\t\t\tnodeChanges: newTupleBTree(),\n\t\t\t\t\tnodeToParent: newTupleBTree(),\n\t\t\t\t\tcrossFieldKeys: newCrossFieldKeyTable(),\n\t\t\t\t\tidAllocator: this.idAllocator,\n\t\t\t\t\trevision,\n\t\t\t\t}),\n\t\t\t\trevision,\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic addNoChangeConstraint(revision: RevisionTag): void {\n\t\tif (lt(this.codecOptions.minVersionForCollab, FluidClientVersion.v2_80)) {\n\t\t\tthrow new UsageError(\n\t\t\t\t`No change constraints require min client version of at least ${FluidClientVersion.v2_80}`,\n\t\t\t);\n\t\t}\n\n\t\tconst changeset = makeModularChangeset({\n\t\t\tmaxId: -1,\n\t\t\tnoChangeConstraint: { violated: false },\n\t\t});\n\n\t\tthis.applyChange(tagChange(changeset, revision));\n\t}\n\n\tpublic addNoChangeConstraintOnRevert(revision: RevisionTag): void {\n\t\tif (lt(this.codecOptions.minVersionForCollab, FluidClientVersion.v2_80)) {\n\t\t\tthrow new UsageError(\n\t\t\t\t`No change constraints require min client version of at least ${FluidClientVersion.v2_80}`,\n\t\t\t);\n\t\t}\n\n\t\tconst changeset = makeModularChangeset({\n\t\t\tmaxId: -1,\n\t\t\tnoChangeConstraintOnRevert: { violated: false },\n\t\t});\n\n\t\tthis.applyChange(tagChange(changeset, revision));\n\t}\n}\n\nfunction buildModularChangesetFromField(props: {\n\tpath: FieldUpPath;\n\tfieldChange: FieldChange;\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>;\n\tnodeToParent: ChangeAtomIdBTree<FieldId>;\n\tcrossFieldKeys: CrossFieldKeyTable;\n\tlocalCrossFieldKeys?: CrossFieldKeyRange[];\n\trevision: RevisionTag;\n\tidAllocator?: IdAllocator;\n\tchildId?: NodeId;\n}): ModularChangeset {\n\tconst {\n\t\tpath,\n\t\tfieldChange,\n\t\tnodeChanges,\n\t\tnodeToParent,\n\t\tcrossFieldKeys,\n\t\tidAllocator = idAllocatorFromMaxId(),\n\t\tlocalCrossFieldKeys = [],\n\t\tchildId,\n\t\trevision,\n\t} = props;\n\tconst fieldChanges: FieldChangeMap = new Map([[path.field, fieldChange]]);\n\n\tif (path.parent === undefined) {\n\t\tfor (const { key, count } of localCrossFieldKeys) {\n\t\t\tcrossFieldKeys.set(key, count, { nodeId: undefined, field: path.field });\n\t\t}\n\n\t\tif (childId !== undefined) {\n\t\t\tsetInChangeAtomIdMap(nodeToParent, childId, {\n\t\t\t\tnodeId: undefined,\n\t\t\t\tfield: path.field,\n\t\t\t});\n\t\t}\n\n\t\treturn makeModularChangeset({\n\t\t\tfieldChanges,\n\t\t\tnodeChanges,\n\t\t\tnodeToParent,\n\t\t\tcrossFieldKeys,\n\t\t\tmaxId: idAllocator.getMaxId(),\n\t\t\trevisions: [{ revision }],\n\t\t});\n\t}\n\n\tconst nodeChangeset: NodeChangeset = {\n\t\tfieldChanges,\n\t};\n\n\tconst parentId: NodeId = { localId: brand(idAllocator.allocate()), revision };\n\n\tfor (const { key, count } of localCrossFieldKeys) {\n\t\tcrossFieldKeys.set(key, count, { nodeId: parentId, field: path.field });\n\t}\n\n\tif (childId !== undefined) {\n\t\tsetInChangeAtomIdMap(nodeToParent, childId, {\n\t\t\tnodeId: parentId,\n\t\t\tfield: path.field,\n\t\t});\n\t}\n\n\treturn buildModularChangesetFromNode({\n\t\tpath: path.parent,\n\t\tnodeChange: nodeChangeset,\n\t\tnodeChanges,\n\t\tnodeToParent,\n\t\tcrossFieldKeys,\n\t\tidAllocator,\n\t\trevision,\n\t\tnodeId: parentId,\n\t});\n}\n\nfunction buildModularChangesetFromNode(props: {\n\tpath: UpPath;\n\tnodeChange: NodeChangeset;\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>;\n\tnodeToParent: ChangeAtomIdBTree<FieldId>;\n\tcrossFieldKeys: CrossFieldKeyTable;\n\tidAllocator: IdAllocator;\n\trevision: RevisionTag;\n\tnodeId?: NodeId;\n}): ModularChangeset {\n\tconst {\n\t\tpath,\n\t\tidAllocator,\n\t\trevision,\n\t\tnodeChanges,\n\t\tnodeChange,\n\t\tnodeId = { localId: brand(idAllocator.allocate()), revision },\n\t} = props;\n\tsetInChangeAtomIdMap(nodeChanges, nodeId, nodeChange);\n\tconst fieldChangeset = genericFieldKind.changeHandler.editor.buildChildChanges([\n\t\t[path.parentIndex, nodeId],\n\t]);\n\n\tconst fieldChange: FieldChange = {\n\t\tfieldKind: genericFieldKind.identifier,\n\t\tchange: fieldChangeset,\n\t};\n\n\treturn buildModularChangesetFromField({\n\t\t...props,\n\t\tpath: { parent: path.parent, field: path.parentField },\n\t\tfieldChange,\n\t\tlocalCrossFieldKeys: [],\n\t\tchildId: nodeId,\n\t});\n}\n\nexport interface FieldEditDescription {\n\ttype: \"field\";\n\tfield: FieldUpPath;\n\tfieldKind: FieldKindIdentifier;\n\tchange: FieldChangeset;\n\trevision: RevisionTag;\n}\n\nexport interface GlobalEditDescription {\n\ttype: \"global\";\n\trevision: RevisionTag;\n\tbuilds?: ChangeAtomIdBTree<TreeChunk>;\n}\n\nexport type EditDescription = FieldEditDescription | GlobalEditDescription;\n\nfunction getRevInfoFromTaggedChanges(changes: TaggedChange<ModularChangeset>[]): {\n\trevInfos: RevisionInfo[];\n\tmaxId: ChangesetLocalId;\n} {\n\tlet maxId = -1;\n\tconst revInfos: RevisionInfo[] = [];\n\tconst revisions = new Set<RevisionTag>();\n\tfor (const taggedChange of changes) {\n\t\tconst change = taggedChange.change;\n\t\tmaxId = Math.max(change.maxId ?? -1, maxId);\n\t\tconst infosToAdd = revisionInfoFromTaggedChange(taggedChange);\n\t\tfor (const info of infosToAdd) {\n\t\t\tif (!revisions.has(info.revision)) {\n\t\t\t\trevisions.add(info.revision);\n\t\t\t\trevInfos.push(info);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rolledBackRevisions: RevisionTag[] = [];\n\tfor (const info of revInfos) {\n\t\tif (info.rollbackOf !== undefined) {\n\t\t\trolledBackRevisions.push(info.rollbackOf);\n\t\t}\n\t}\n\n\trolledBackRevisions.reverse();\n\tfor (const revision of rolledBackRevisions) {\n\t\tif (!revisions.has(revision)) {\n\t\t\trevInfos.push({ revision });\n\t\t}\n\t}\n\n\treturn { maxId: brand(maxId), revInfos };\n}\n\nfunction revisionInfoFromTaggedChange(\n\ttaggedChange: TaggedChange<ModularChangeset>,\n): RevisionInfo[] {\n\tconst revInfos: RevisionInfo[] = [];\n\tif (taggedChange.change.revisions !== undefined) {\n\t\trevInfos.push(...taggedChange.change.revisions);\n\t} else if (taggedChange.revision !== undefined) {\n\t\tconst info: Mutable<RevisionInfo> = { revision: taggedChange.revision };\n\t\tif (taggedChange.rollbackOf !== undefined) {\n\t\t\tinfo.rollbackOf = taggedChange.rollbackOf;\n\t\t}\n\t\trevInfos.push(info);\n\t}\n\treturn revInfos;\n}\n\nfunction fieldChangeFromId(\n\tfields: FieldChangeMap,\n\tnodes: ChangeAtomIdBTree<NodeChangeset>,\n\tid: FieldId,\n): FieldChange {\n\tconst fieldMap = fieldMapFromNodeId(fields, nodes, id.nodeId);\n\treturn fieldMap.get(id.field) ?? fail(0xb25 /* No field exists for the given ID */);\n}\n\nfunction fieldMapFromNodeId(\n\trootFieldMap: FieldChangeMap,\n\tnodes: ChangeAtomIdBTree<NodeChangeset>,\n\tnodeId: NodeId | undefined,\n): FieldChangeMap {\n\tif (nodeId === undefined) {\n\t\treturn rootFieldMap;\n\t}\n\n\tconst node = nodeChangeFromId(nodes, nodeId);\n\tassert(node.fieldChanges !== undefined, 0x9c9 /* Expected node to have field changes */);\n\treturn node.fieldChanges;\n}\n\nfunction rebasedFieldIdFromBaseId(table: RebaseTable, baseId: FieldId): FieldId {\n\tif (baseId.nodeId === undefined) {\n\t\treturn baseId;\n\t}\n\n\treturn { ...baseId, nodeId: rebasedNodeIdFromBaseNodeId(table, baseId.nodeId) };\n}\n\nfunction rebasedNodeIdFromBaseNodeId(table: RebaseTable, baseId: NodeId): NodeId {\n\treturn getFromChangeAtomIdMap(table.baseToRebasedNodeId, baseId) ?? baseId;\n}\n\nfunction nodeChangeFromId(nodes: ChangeAtomIdBTree<NodeChangeset>, id: NodeId): NodeChangeset {\n\tconst node = getFromChangeAtomIdMap(nodes, id);\n\tassert(node !== undefined, 0x9ca /* Unknown node ID */);\n\treturn node;\n}\n\nfunction fieldIdFromFieldIdKey([revision, localId, field]: FieldIdKey): FieldId {\n\tconst nodeId = localId === undefined ? undefined : { revision, localId };\n\treturn { nodeId, field };\n}\n\nfunction cloneNodeChangeset(nodeChangeset: NodeChangeset): NodeChangeset {\n\tif (nodeChangeset.fieldChanges !== undefined) {\n\t\treturn { ...nodeChangeset, fieldChanges: new Map(nodeChangeset.fieldChanges) };\n\t}\n\n\treturn { ...nodeChangeset };\n}\n\nfunction replaceFieldIdRevision(fieldId: FieldId, replacer: RevisionReplacer): FieldId {\n\tif (fieldId.nodeId === undefined) {\n\t\treturn fieldId;\n\t}\n\n\treturn {\n\t\t...fieldId,\n\t\tnodeId: replacer.getUpdatedAtomId(fieldId.nodeId),\n\t};\n}\n\nexport function getParentFieldId(changeset: ModularChangeset, nodeId: NodeId): FieldId {\n\tconst parentId = getFromChangeAtomIdMap(changeset.nodeToParent, nodeId);\n\tassert(parentId !== undefined, 0x9cb /* Parent field should be defined */);\n\treturn normalizeFieldId(parentId, changeset.nodeAliases);\n}\n\nfunction getFieldsForCrossFieldKey(\n\tchangeset: ModularChangeset,\n\tkey: CrossFieldKey,\n\tcount: number,\n): FieldId[] {\n\treturn changeset.crossFieldKeys\n\t\t.getAll(key, count)\n\t\t.map(({ value: fieldId }) => normalizeFieldId(fieldId, changeset.nodeAliases));\n}\n\n// This is only exported for use in test utilities.\nexport function normalizeFieldId(\n\tfieldId: FieldId,\n\tnodeAliases: ChangeAtomIdBTree<NodeId>,\n): FieldId {\n\treturn fieldId.nodeId === undefined\n\t\t? fieldId\n\t\t: { ...fieldId, nodeId: normalizeNodeId(fieldId.nodeId, nodeAliases) };\n}\n\n/**\n * @returns The canonical form of nodeId, according to nodeAliases\n */\nfunction normalizeNodeId(nodeId: NodeId, nodeAliases: ChangeAtomIdBTree<NodeId>): NodeId {\n\tlet currentId = nodeId;\n\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst dealiased = getFromChangeAtomIdMap(nodeAliases, currentId);\n\t\tif (dealiased === undefined) {\n\t\t\treturn currentId;\n\t\t}\n\n\t\tcurrentId = dealiased;\n\t}\n}\n\nfunction hasConflicts(change: ModularChangeset): boolean {\n\treturn (change.constraintViolationCount ?? 0) > 0;\n}\n\n/**\n * A rebaseChild callback for fields with no new changes.\n * Asserts that there are no new changes and returns undefined.\n */\nfunction noNewChangesRebaseChild(\n\tchild: NodeId | undefined,\n\t_baseChild: NodeId | undefined,\n\t_stateChange: NodeAttachState | undefined,\n): NodeId | undefined {\n\tassert(child === undefined, 0x9c3 /* There should be no new changes in this field */);\n\treturn undefined;\n}\n\ninterface ModularChangesetContent {\n\tfieldChanges: FieldChangeMap;\n\tnodeChanges: ChangeAtomIdBTree<NodeChangeset>;\n\tnodeToParent: ChangeAtomIdBTree<FieldId>;\n\tnodeAliases: ChangeAtomIdBTree<NodeId>;\n\tcrossFieldKeys: CrossFieldKeyTable;\n}\n\nfunction areEqualFieldIds(a: FieldId, b: FieldId): boolean {\n\treturn areEqualChangeAtomIdOpts(a.nodeId, b.nodeId) && a.field === b.field;\n}\n"]}