@fluidframework/tree 2.81.0-374083 → 2.81.1

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 (1522) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/api-report/tree.alpha.api.md +0 -1
  3. package/dist/codec/codec.d.ts +2 -2
  4. package/dist/codec/codec.d.ts.map +1 -1
  5. package/dist/codec/codec.js +8 -8
  6. package/dist/codec/codec.js.map +1 -1
  7. package/dist/codec/versioned/codec.d.ts +1 -1
  8. package/dist/codec/versioned/codec.d.ts.map +1 -1
  9. package/dist/codec/versioned/codec.js +12 -12
  10. package/dist/codec/versioned/codec.js.map +1 -1
  11. package/dist/core/change-family/changeFamily.d.ts +1 -4
  12. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  13. package/dist/core/change-family/changeFamily.js.map +1 -1
  14. package/dist/core/change-family/index.d.ts +1 -1
  15. package/dist/core/change-family/index.d.ts.map +1 -1
  16. package/dist/core/change-family/index.js.map +1 -1
  17. package/dist/core/index.d.ts +3 -3
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +4 -6
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/core/rebase/changeRebaser.d.ts +1 -6
  22. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  23. package/dist/core/rebase/changeRebaser.js.map +1 -1
  24. package/dist/core/rebase/index.d.ts +1 -1
  25. package/dist/core/rebase/index.d.ts.map +1 -1
  26. package/dist/core/rebase/index.js +1 -2
  27. package/dist/core/rebase/index.js.map +1 -1
  28. package/dist/core/rebase/types.d.ts +1 -2
  29. package/dist/core/rebase/types.d.ts.map +1 -1
  30. package/dist/core/rebase/types.js +1 -5
  31. package/dist/core/rebase/types.js.map +1 -1
  32. package/dist/core/rebase/utils.d.ts.map +1 -1
  33. package/dist/core/rebase/utils.js +7 -25
  34. package/dist/core/rebase/utils.js.map +1 -1
  35. package/dist/core/schema-stored/formatV2.d.ts.map +1 -1
  36. package/dist/core/schema-stored/formatV2.js +4 -4
  37. package/dist/core/schema-stored/formatV2.js.map +1 -1
  38. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  39. package/dist/core/tree/anchorSet.js +1 -1
  40. package/dist/core/tree/anchorSet.js.map +1 -1
  41. package/dist/core/tree/detachedFieldIndex.d.ts +0 -6
  42. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  43. package/dist/core/tree/detachedFieldIndex.js +0 -9
  44. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  45. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +1 -1
  46. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -1
  47. package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -1
  48. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -1
  49. package/dist/core/tree/detachedFieldIndexCodecV1.js +3 -3
  50. package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -1
  51. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -1
  52. package/dist/core/tree/detachedFieldIndexCodecV2.js +2 -2
  53. package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -1
  54. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -1
  55. package/dist/core/tree/detachedFieldIndexFormatV1.js +3 -3
  56. package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -1
  57. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
  58. package/dist/core/tree/detachedFieldIndexFormatV2.js +4 -4
  59. package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
  60. package/dist/core/tree/index.d.ts +1 -1
  61. package/dist/core/tree/index.d.ts.map +1 -1
  62. package/dist/core/tree/index.js +3 -4
  63. package/dist/core/tree/index.js.map +1 -1
  64. package/dist/core/tree/pathTree.d.ts +3 -11
  65. package/dist/core/tree/pathTree.d.ts.map +1 -1
  66. package/dist/core/tree/pathTree.js +2 -14
  67. package/dist/core/tree/pathTree.js.map +1 -1
  68. package/dist/core/tree/visitDelta.d.ts +1 -1
  69. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  70. package/dist/core/tree/visitDelta.js.map +1 -1
  71. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  72. package/dist/core/tree/visitorUtils.js +1 -1
  73. package/dist/core/tree/visitorUtils.js.map +1 -1
  74. package/dist/feature-libraries/changeAtomIdBTree.d.ts +3 -4
  75. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  76. package/dist/feature-libraries/changeAtomIdBTree.js +2 -16
  77. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  78. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  79. package/dist/feature-libraries/chunked-forest/basicChunk.js +0 -7
  80. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  81. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +1 -1
  82. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  83. package/dist/feature-libraries/chunked-forest/chunkTree.js +1 -4
  84. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  85. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -1
  86. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  87. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  88. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -1
  89. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  90. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  91. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +1 -1
  92. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  93. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  94. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
  95. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  96. package/dist/feature-libraries/chunked-forest/codec/codecs.js +1 -1
  97. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  98. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
  99. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  100. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  101. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  102. package/dist/feature-libraries/chunked-forest/codec/format.js +1 -1
  103. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  104. package/dist/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
  105. package/dist/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
  106. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +1 -1
  107. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  108. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +2 -2
  109. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  110. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +44 -93
  111. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  112. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +78 -245
  113. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  114. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +11 -53
  115. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  116. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +25 -75
  117. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  118. package/dist/feature-libraries/default-schema/index.d.ts +2 -3
  119. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  120. package/dist/feature-libraries/default-schema/index.js +2 -5
  121. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  122. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +6 -7
  123. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  124. package/dist/feature-libraries/default-schema/mappedEditBuilder.js +0 -15
  125. package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  126. package/dist/feature-libraries/deltaUtils.d.ts +0 -1
  127. package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
  128. package/dist/feature-libraries/deltaUtils.js +1 -6
  129. package/dist/feature-libraries/deltaUtils.js.map +1 -1
  130. package/dist/feature-libraries/fieldKindIdentifiers.d.ts +9 -0
  131. package/dist/feature-libraries/fieldKindIdentifiers.d.ts.map +1 -0
  132. package/dist/feature-libraries/fieldKindIdentifiers.js +16 -0
  133. package/dist/feature-libraries/fieldKindIdentifiers.js.map +1 -0
  134. package/dist/feature-libraries/flex-tree/context.d.ts +0 -9
  135. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  136. package/dist/feature-libraries/flex-tree/context.js +0 -6
  137. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  138. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  139. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  140. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  141. package/dist/feature-libraries/flex-tree/lazyField.d.ts +7 -8
  142. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  143. package/dist/feature-libraries/flex-tree/lazyField.js +17 -48
  144. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  145. package/dist/feature-libraries/flex-tree/observer.d.ts +1 -1
  146. package/dist/feature-libraries/flex-tree/observer.d.ts.map +1 -1
  147. package/dist/feature-libraries/flex-tree/observer.js.map +1 -1
  148. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  149. package/dist/feature-libraries/forest-summary/codec.js +1 -1
  150. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  151. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  152. package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -3
  153. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  154. package/dist/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  155. package/dist/feature-libraries/forest-summary/formatV1.js.map +1 -1
  156. package/dist/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  157. package/dist/feature-libraries/forest-summary/formatV2.js.map +1 -1
  158. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -4
  159. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  160. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -2
  161. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  162. package/dist/feature-libraries/forest-summary/summaryTypes.d.ts.map +1 -1
  163. package/dist/feature-libraries/forest-summary/summaryTypes.js.map +1 -1
  164. package/dist/feature-libraries/index.d.ts +3 -3
  165. package/dist/feature-libraries/index.d.ts.map +1 -1
  166. package/dist/feature-libraries/index.js +3 -8
  167. package/dist/feature-libraries/index.js.map +1 -1
  168. package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  169. package/dist/feature-libraries/mapTreeCursor.js +0 -1
  170. package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
  171. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  172. package/dist/feature-libraries/mitigatedChangeFamily.js +2 -2
  173. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  174. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +21 -97
  175. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  176. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +7 -4
  177. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  178. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +51 -20
  179. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  180. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  181. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.d.ts.map +1 -1
  182. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
  183. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -1
  184. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  185. package/dist/feature-libraries/modular-schema/genericFieldKind.js +11 -5
  186. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  187. package/dist/feature-libraries/modular-schema/index.d.ts +4 -4
  188. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  189. package/dist/feature-libraries/modular-schema/index.js +2 -2
  190. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  191. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +28 -11
  192. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  193. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +162 -254
  194. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  195. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  196. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  197. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  198. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  199. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +1 -8
  200. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  201. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +21 -49
  202. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  203. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +460 -1325
  204. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  205. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  206. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  207. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +8 -44
  208. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  209. package/dist/feature-libraries/modular-schema/modularChangeTypes.js +3 -3
  210. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  211. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  212. package/dist/feature-libraries/object-forest/objectForest.js +2 -2
  213. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  214. package/dist/feature-libraries/optional-field/index.d.ts +2 -2
  215. package/dist/feature-libraries/optional-field/index.d.ts.map +1 -1
  216. package/dist/feature-libraries/optional-field/index.js +4 -7
  217. package/dist/feature-libraries/optional-field/index.js.map +1 -1
  218. package/dist/feature-libraries/optional-field/optionalField.d.ts +34 -5
  219. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  220. package/dist/feature-libraries/optional-field/optionalField.js +455 -221
  221. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  222. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +33 -24
  223. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  224. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  225. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  226. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  227. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +28 -57
  228. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  229. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  230. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
  231. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  232. package/dist/feature-libraries/optional-field/requiredField.d.ts +36 -0
  233. package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -0
  234. package/dist/feature-libraries/optional-field/requiredField.js +27 -0
  235. package/dist/feature-libraries/optional-field/requiredField.js.map +1 -0
  236. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts +1 -1
  237. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  238. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +7 -7
  239. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  240. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  241. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  242. package/dist/feature-libraries/schemaChecker.d.ts.map +1 -1
  243. package/dist/feature-libraries/schemaChecker.js +1 -1
  244. package/dist/feature-libraries/schemaChecker.js.map +1 -1
  245. package/dist/feature-libraries/sequence-field/compose.d.ts +7 -6
  246. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  247. package/dist/feature-libraries/sequence-field/compose.js +259 -83
  248. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  249. package/dist/feature-libraries/sequence-field/helperTypes.d.ts +10 -14
  250. package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  251. package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  252. package/dist/feature-libraries/sequence-field/index.d.ts +2 -13
  253. package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
  254. package/dist/feature-libraries/sequence-field/index.js +3 -28
  255. package/dist/feature-libraries/sequence-field/index.js.map +1 -1
  256. package/dist/feature-libraries/sequence-field/invert.d.ts +3 -3
  257. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  258. package/dist/feature-libraries/sequence-field/invert.js +167 -65
  259. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  260. package/dist/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  261. package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  262. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  263. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +56 -4
  264. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  265. package/dist/feature-libraries/sequence-field/moveEffectTable.js +90 -7
  266. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  267. package/dist/feature-libraries/sequence-field/rebase.d.ts +3 -3
  268. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  269. package/dist/feature-libraries/sequence-field/rebase.js +114 -107
  270. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  271. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +9 -0
  272. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +1 -0
  273. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +50 -0
  274. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +1 -0
  275. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  276. package/dist/feature-libraries/sequence-field/replaceRevisions.js +31 -18
  277. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  278. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  279. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -0
  280. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  281. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -22
  282. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  283. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +187 -365
  284. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  285. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  286. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +62 -20
  287. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  288. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  289. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  290. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
  291. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  292. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
  293. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  294. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +109 -14
  295. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  296. package/dist/feature-libraries/sequence-field/sequenceKind.d.ts +16 -0
  297. package/dist/feature-libraries/sequence-field/sequenceKind.d.ts.map +1 -0
  298. package/dist/feature-libraries/sequence-field/sequenceKind.js +24 -0
  299. package/dist/feature-libraries/sequence-field/sequenceKind.js.map +1 -0
  300. package/dist/feature-libraries/sequence-field/types.d.ts +59 -30
  301. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  302. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  303. package/dist/feature-libraries/sequence-field/utils.d.ts +24 -15
  304. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  305. package/dist/feature-libraries/sequence-field/utils.js +305 -116
  306. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  307. package/dist/index.d.ts +1 -1
  308. package/dist/index.d.ts.map +1 -1
  309. package/dist/index.js +2 -1
  310. package/dist/index.js.map +1 -1
  311. package/dist/packageVersion.d.ts +1 -1
  312. package/dist/packageVersion.d.ts.map +1 -1
  313. package/dist/packageVersion.js +1 -1
  314. package/dist/packageVersion.js.map +1 -1
  315. package/dist/shared-tree/independentView.d.ts.map +1 -1
  316. package/dist/shared-tree/independentView.js +7 -7
  317. package/dist/shared-tree/independentView.js.map +1 -1
  318. package/dist/shared-tree/index.d.ts +1 -1
  319. package/dist/shared-tree/index.d.ts.map +1 -1
  320. package/dist/shared-tree/index.js.map +1 -1
  321. package/dist/shared-tree/schematizeTree.d.ts +4 -4
  322. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  323. package/dist/shared-tree/schematizeTree.js +1 -2
  324. package/dist/shared-tree/schematizeTree.js.map +1 -1
  325. package/dist/shared-tree/schematizingTreeView.d.ts +5 -1
  326. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  327. package/dist/shared-tree/schematizingTreeView.js +39 -40
  328. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  329. package/dist/shared-tree/sharedTree.d.ts +5 -11
  330. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  331. package/dist/shared-tree/sharedTree.js +5 -43
  332. package/dist/shared-tree/sharedTree.js.map +1 -1
  333. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  334. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  335. package/dist/shared-tree/sharedTreeChangeCodecs.js +0 -1
  336. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  337. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts +31 -24
  338. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  339. package/dist/shared-tree/sharedTreeChangeEnricher.js +75 -58
  340. package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  341. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
  342. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  343. package/dist/shared-tree/sharedTreeChangeFamily.js +4 -10
  344. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  345. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +6 -16
  346. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  347. package/dist/shared-tree/sharedTreeEditBuilder.js +7 -14
  348. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  349. package/dist/shared-tree/tree.d.ts.map +1 -1
  350. package/dist/shared-tree/tree.js +14 -14
  351. package/dist/shared-tree/tree.js.map +1 -1
  352. package/dist/shared-tree/treeAlpha.d.ts +1 -1
  353. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  354. package/dist/shared-tree/treeAlpha.js +77 -77
  355. package/dist/shared-tree/treeAlpha.js.map +1 -1
  356. package/dist/shared-tree/treeCheckout.d.ts +29 -13
  357. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  358. package/dist/shared-tree/treeCheckout.js +80 -79
  359. package/dist/shared-tree/treeCheckout.js.map +1 -1
  360. package/dist/shared-tree-core/branch.d.ts +3 -4
  361. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  362. package/dist/shared-tree-core/branch.js +3 -4
  363. package/dist/shared-tree-core/branch.js.map +1 -1
  364. package/dist/shared-tree-core/branchCommitEnricher.d.ts +18 -31
  365. package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  366. package/dist/shared-tree-core/branchCommitEnricher.js +24 -76
  367. package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
  368. package/dist/shared-tree-core/branchIdCodec.d.ts.map +1 -1
  369. package/dist/shared-tree-core/branchIdCodec.js.map +1 -1
  370. package/dist/shared-tree-core/changeEnricher.d.ts +8 -43
  371. package/dist/shared-tree-core/changeEnricher.d.ts.map +1 -1
  372. package/dist/shared-tree-core/changeEnricher.js +0 -13
  373. package/dist/shared-tree-core/changeEnricher.js.map +1 -1
  374. package/dist/shared-tree-core/defaultResubmitMachine.d.ts +4 -12
  375. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  376. package/dist/shared-tree-core/defaultResubmitMachine.js +26 -36
  377. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  378. package/dist/shared-tree-core/editManager.d.ts +3 -3
  379. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  380. package/dist/shared-tree-core/editManager.js +11 -11
  381. package/dist/shared-tree-core/editManager.js.map +1 -1
  382. package/dist/shared-tree-core/editManagerCodecs.d.ts +1 -5
  383. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  384. package/dist/shared-tree-core/editManagerCodecs.js +2 -10
  385. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  386. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +1 -1
  387. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  388. package/dist/shared-tree-core/editManagerCodecsCommons.js +1 -2
  389. package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  390. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  391. package/dist/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
  392. package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  393. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  394. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
  395. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  396. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +0 -1
  397. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  398. package/dist/shared-tree-core/editManagerFormatCommons.js +0 -6
  399. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  400. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  401. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  402. package/dist/shared-tree-core/editManagerFormatV1toV4.js +0 -1
  403. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  404. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
  405. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
  406. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
  407. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  408. package/dist/shared-tree-core/index.d.ts +4 -4
  409. package/dist/shared-tree-core/index.d.ts.map +1 -1
  410. package/dist/shared-tree-core/index.js +1 -5
  411. package/dist/shared-tree-core/index.js.map +1 -1
  412. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
  413. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  414. package/dist/shared-tree-core/messageCodecV1ToV4.js +1 -1
  415. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  416. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts +1 -1
  417. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  418. package/dist/shared-tree-core/messageCodecVSharedBranches.js +2 -2
  419. package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  420. package/dist/shared-tree-core/messageCodecs.d.ts +2 -6
  421. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  422. package/dist/shared-tree-core/messageCodecs.js +2 -10
  423. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  424. package/dist/shared-tree-core/messageFormat.d.ts +0 -1
  425. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  426. package/dist/shared-tree-core/messageFormat.js +0 -6
  427. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  428. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  429. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  430. package/dist/shared-tree-core/messageFormatV1ToV4.js +0 -1
  431. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  432. package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  433. package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  434. package/dist/shared-tree-core/messageTypes.d.ts.map +1 -1
  435. package/dist/shared-tree-core/messageTypes.js.map +1 -1
  436. package/dist/shared-tree-core/sharedTreeCore.d.ts +8 -5
  437. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  438. package/dist/shared-tree-core/sharedTreeCore.js +14 -14
  439. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  440. package/dist/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  441. package/dist/shared-tree-core/versionedSummarizer.js +1 -1
  442. package/dist/shared-tree-core/versionedSummarizer.js.map +1 -1
  443. package/dist/simple-tree/api/configuration.d.ts +2 -2
  444. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  445. package/dist/simple-tree/api/configuration.js +14 -14
  446. package/dist/simple-tree/api/configuration.js.map +1 -1
  447. package/dist/simple-tree/api/create.d.ts +1 -1
  448. package/dist/simple-tree/api/create.d.ts.map +1 -1
  449. package/dist/simple-tree/api/create.js +7 -7
  450. package/dist/simple-tree/api/create.js.map +1 -1
  451. package/dist/simple-tree/api/dirtyIndex.d.ts +1 -1
  452. package/dist/simple-tree/api/dirtyIndex.d.ts.map +1 -1
  453. package/dist/simple-tree/api/dirtyIndex.js.map +1 -1
  454. package/dist/simple-tree/api/discrepancies.d.ts.map +1 -1
  455. package/dist/simple-tree/api/discrepancies.js +23 -23
  456. package/dist/simple-tree/api/discrepancies.js.map +1 -1
  457. package/dist/simple-tree/api/getJsonSchema.d.ts +1 -1
  458. package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  459. package/dist/simple-tree/api/getJsonSchema.js +1 -1
  460. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  461. package/dist/simple-tree/api/identifierIndex.d.ts +2 -2
  462. package/dist/simple-tree/api/identifierIndex.d.ts.map +1 -1
  463. package/dist/simple-tree/api/identifierIndex.js.map +1 -1
  464. package/dist/simple-tree/api/incrementalAllowedTypes.d.ts +1 -1
  465. package/dist/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -1
  466. package/dist/simple-tree/api/incrementalAllowedTypes.js +6 -6
  467. package/dist/simple-tree/api/incrementalAllowedTypes.js.map +1 -1
  468. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +1 -1
  469. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  470. package/dist/simple-tree/api/schemaCompatibilityTester.js +1 -1
  471. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  472. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +2 -2
  473. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  474. package/dist/simple-tree/api/schemaCreationUtilities.js +7 -7
  475. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  476. package/dist/simple-tree/api/schemaFactory.d.ts +2 -2
  477. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  478. package/dist/simple-tree/api/schemaFactory.js +7 -7
  479. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  480. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +6 -6
  481. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  482. package/dist/simple-tree/api/schemaFactoryAlpha.js +1 -1
  483. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  484. package/dist/simple-tree/api/schemaFactoryBeta.d.ts +2 -2
  485. package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  486. package/dist/simple-tree/api/schemaFactoryBeta.js +1 -0
  487. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  488. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
  489. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  490. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  491. package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  492. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  493. package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -1
  494. package/dist/simple-tree/api/schemaStatics.js.map +1 -1
  495. package/dist/simple-tree/api/simpleSchemaCodec.d.ts +1 -1
  496. package/dist/simple-tree/api/simpleSchemaCodec.d.ts.map +1 -1
  497. package/dist/simple-tree/api/simpleSchemaCodec.js +17 -17
  498. package/dist/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  499. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts +2 -2
  500. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  501. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +2 -2
  502. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  503. package/dist/simple-tree/api/simpleTreeIndex.d.ts +1 -1
  504. package/dist/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
  505. package/dist/simple-tree/api/simpleTreeIndex.js +1 -1
  506. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  507. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  508. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +14 -14
  509. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  510. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  511. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  512. package/dist/simple-tree/api/tree.d.ts +2 -2
  513. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  514. package/dist/simple-tree/api/tree.js.map +1 -1
  515. package/dist/simple-tree/api/treeBeta.d.ts +1 -1
  516. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  517. package/dist/simple-tree/api/treeBeta.js +2 -2
  518. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  519. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  520. package/dist/simple-tree/api/treeNodeApi.js +4 -4
  521. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  522. package/dist/simple-tree/api/typesUnsafe.d.ts +1 -1
  523. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  524. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  525. package/dist/simple-tree/api/verboseTree.d.ts +1 -1
  526. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  527. package/dist/simple-tree/api/verboseTree.js +22 -22
  528. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  529. package/dist/simple-tree/core/allowedTypes.d.ts +1 -1
  530. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  531. package/dist/simple-tree/core/allowedTypes.js +7 -7
  532. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  533. package/dist/simple-tree/core/context.d.ts.map +1 -1
  534. package/dist/simple-tree/core/context.js.map +1 -1
  535. package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
  536. package/dist/simple-tree/core/treeNode.js +1 -1
  537. package/dist/simple-tree/core/treeNode.js.map +1 -1
  538. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  539. package/dist/simple-tree/core/treeNodeKernel.js +1 -3
  540. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  541. package/dist/simple-tree/core/treeNodeSchema.d.ts +5 -5
  542. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  543. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  544. package/dist/simple-tree/core/treeNodeValid.d.ts +3 -3
  545. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  546. package/dist/simple-tree/core/treeNodeValid.js +2 -2
  547. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  548. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +16 -16
  549. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  550. package/dist/simple-tree/core/unhydratedFlexTree.js +8 -59
  551. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  552. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  553. package/dist/simple-tree/core/withType.js.map +1 -1
  554. package/dist/simple-tree/createContext.d.ts.map +1 -1
  555. package/dist/simple-tree/createContext.js.map +1 -1
  556. package/dist/simple-tree/fieldSchema.d.ts +5 -5
  557. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  558. package/dist/simple-tree/fieldSchema.js.map +1 -1
  559. package/dist/simple-tree/index.d.ts +2 -2
  560. package/dist/simple-tree/index.d.ts.map +1 -1
  561. package/dist/simple-tree/index.js +1 -1
  562. package/dist/simple-tree/index.js.map +1 -1
  563. package/dist/simple-tree/leafNodeSchema.d.ts +1 -1
  564. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  565. package/dist/simple-tree/leafNodeSchema.js +15 -15
  566. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  567. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +1 -1
  568. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  569. package/dist/simple-tree/node-kinds/array/arrayNode.js +47 -49
  570. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  571. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +1 -1
  572. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
  573. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
  574. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
  575. package/dist/simple-tree/node-kinds/common.js +1 -1
  576. package/dist/simple-tree/node-kinds/common.js.map +1 -1
  577. package/dist/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
  578. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  579. package/dist/simple-tree/node-kinds/map/mapNode.js +26 -26
  580. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  581. package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts +1 -1
  582. package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
  583. package/dist/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
  584. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
  585. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  586. package/dist/simple-tree/node-kinds/object/objectNode.js +28 -28
  587. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  588. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +3 -3
  589. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  590. package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  591. package/dist/simple-tree/node-kinds/record/recordNode.d.ts +1 -1
  592. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  593. package/dist/simple-tree/node-kinds/record/recordNode.js +36 -38
  594. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  595. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +1 -1
  596. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
  597. package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  598. package/dist/simple-tree/prepareForInsertion.d.ts +47 -54
  599. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  600. package/dist/simple-tree/prepareForInsertion.js +128 -186
  601. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  602. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  603. package/dist/simple-tree/simpleSchema.js.map +1 -1
  604. package/dist/simple-tree/treeSchema.d.ts.map +1 -1
  605. package/dist/simple-tree/treeSchema.js.map +1 -1
  606. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +4 -13
  607. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  608. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +22 -40
  609. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  610. package/dist/tableSchema.d.ts.map +1 -1
  611. package/dist/tableSchema.js +22 -21
  612. package/dist/tableSchema.js.map +1 -1
  613. package/dist/text/index.d.ts +1 -0
  614. package/dist/text/index.d.ts.map +1 -1
  615. package/dist/text/index.js +3 -1
  616. package/dist/text/index.js.map +1 -1
  617. package/dist/text/textDomain.d.ts +8 -0
  618. package/dist/text/textDomain.d.ts.map +1 -1
  619. package/dist/text/textDomain.js +2 -1
  620. package/dist/text/textDomain.js.map +1 -1
  621. package/dist/text/textDomainFormatted.d.ts +572 -0
  622. package/dist/text/textDomainFormatted.d.ts.map +1 -0
  623. package/dist/text/textDomainFormatted.js +183 -0
  624. package/dist/text/textDomainFormatted.js.map +1 -0
  625. package/dist/treeFactory.d.ts.map +1 -1
  626. package/dist/treeFactory.js +11 -21
  627. package/dist/treeFactory.js.map +1 -1
  628. package/dist/util/bTreeUtils.d.ts.map +1 -1
  629. package/dist/util/bTreeUtils.js +1 -1
  630. package/dist/util/bTreeUtils.js.map +1 -1
  631. package/dist/util/index.d.ts +1 -1
  632. package/dist/util/index.d.ts.map +1 -1
  633. package/dist/util/index.js +1 -2
  634. package/dist/util/index.js.map +1 -1
  635. package/dist/util/rangeMap.d.ts +12 -24
  636. package/dist/util/rangeMap.d.ts.map +1 -1
  637. package/dist/util/rangeMap.js +6 -46
  638. package/dist/util/rangeMap.js.map +1 -1
  639. package/dist/util/readSnapshotBlob.d.ts +1 -1
  640. package/dist/util/readSnapshotBlob.d.ts.map +1 -1
  641. package/dist/util/readSnapshotBlob.js.map +1 -1
  642. package/docs/main/sequence-field/move-composition.md +46 -0
  643. package/eslint.config.mts +4 -4
  644. package/lib/codec/codec.d.ts +2 -2
  645. package/lib/codec/codec.d.ts.map +1 -1
  646. package/lib/codec/codec.js +1 -1
  647. package/lib/codec/codec.js.map +1 -1
  648. package/lib/codec/versioned/codec.d.ts +1 -1
  649. package/lib/codec/versioned/codec.d.ts.map +1 -1
  650. package/lib/codec/versioned/codec.js +2 -2
  651. package/lib/codec/versioned/codec.js.map +1 -1
  652. package/lib/core/change-family/changeFamily.d.ts +1 -4
  653. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  654. package/lib/core/change-family/changeFamily.js.map +1 -1
  655. package/lib/core/change-family/index.d.ts +1 -1
  656. package/lib/core/change-family/index.d.ts.map +1 -1
  657. package/lib/core/change-family/index.js.map +1 -1
  658. package/lib/core/index.d.ts +3 -3
  659. package/lib/core/index.d.ts.map +1 -1
  660. package/lib/core/index.js +2 -2
  661. package/lib/core/index.js.map +1 -1
  662. package/lib/core/rebase/changeRebaser.d.ts +1 -6
  663. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  664. package/lib/core/rebase/changeRebaser.js.map +1 -1
  665. package/lib/core/rebase/index.d.ts +1 -1
  666. package/lib/core/rebase/index.d.ts.map +1 -1
  667. package/lib/core/rebase/index.js +1 -1
  668. package/lib/core/rebase/index.js.map +1 -1
  669. package/lib/core/rebase/types.d.ts +1 -2
  670. package/lib/core/rebase/types.d.ts.map +1 -1
  671. package/lib/core/rebase/types.js +0 -3
  672. package/lib/core/rebase/types.js.map +1 -1
  673. package/lib/core/rebase/utils.d.ts.map +1 -1
  674. package/lib/core/rebase/utils.js +7 -25
  675. package/lib/core/rebase/utils.js.map +1 -1
  676. package/lib/core/schema-stored/formatV2.d.ts.map +1 -1
  677. package/lib/core/schema-stored/formatV2.js +1 -1
  678. package/lib/core/schema-stored/formatV2.js.map +1 -1
  679. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  680. package/lib/core/tree/anchorSet.js +1 -1
  681. package/lib/core/tree/anchorSet.js.map +1 -1
  682. package/lib/core/tree/detachedFieldIndex.d.ts +0 -6
  683. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  684. package/lib/core/tree/detachedFieldIndex.js +1 -10
  685. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  686. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +1 -1
  687. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -1
  688. package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -1
  689. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -1
  690. package/lib/core/tree/detachedFieldIndexCodecV1.js +1 -1
  691. package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -1
  692. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -1
  693. package/lib/core/tree/detachedFieldIndexCodecV2.js +2 -2
  694. package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -1
  695. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -1
  696. package/lib/core/tree/detachedFieldIndexFormatV1.js +2 -2
  697. package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -1
  698. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
  699. package/lib/core/tree/detachedFieldIndexFormatV2.js +2 -2
  700. package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
  701. package/lib/core/tree/index.d.ts +1 -1
  702. package/lib/core/tree/index.d.ts.map +1 -1
  703. package/lib/core/tree/index.js +1 -1
  704. package/lib/core/tree/index.js.map +1 -1
  705. package/lib/core/tree/pathTree.d.ts +3 -11
  706. package/lib/core/tree/pathTree.d.ts.map +1 -1
  707. package/lib/core/tree/pathTree.js +1 -12
  708. package/lib/core/tree/pathTree.js.map +1 -1
  709. package/lib/core/tree/visitDelta.d.ts +1 -1
  710. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  711. package/lib/core/tree/visitDelta.js.map +1 -1
  712. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  713. package/lib/core/tree/visitorUtils.js +1 -1
  714. package/lib/core/tree/visitorUtils.js.map +1 -1
  715. package/lib/feature-libraries/changeAtomIdBTree.d.ts +3 -4
  716. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  717. package/lib/feature-libraries/changeAtomIdBTree.js +1 -14
  718. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  719. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  720. package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -8
  721. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  722. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +1 -1
  723. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  724. package/lib/feature-libraries/chunked-forest/chunkTree.js +1 -4
  725. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  726. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -1
  727. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  728. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  729. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -1
  730. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  731. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  732. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +1 -1
  733. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  734. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  735. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
  736. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  737. package/lib/feature-libraries/chunked-forest/codec/codecs.js +1 -1
  738. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  739. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
  740. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  741. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  742. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  743. package/lib/feature-libraries/chunked-forest/codec/format.js +1 -1
  744. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  745. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
  746. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
  747. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +1 -1
  748. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  749. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +2 -2
  750. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  751. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +44 -93
  752. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  753. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +73 -237
  754. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  755. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +11 -53
  756. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  757. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +6 -56
  758. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  759. package/lib/feature-libraries/default-schema/index.d.ts +2 -3
  760. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  761. package/lib/feature-libraries/default-schema/index.js +1 -2
  762. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  763. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +6 -7
  764. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  765. package/lib/feature-libraries/default-schema/mappedEditBuilder.js +0 -15
  766. package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  767. package/lib/feature-libraries/deltaUtils.d.ts +0 -1
  768. package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
  769. package/lib/feature-libraries/deltaUtils.js +1 -5
  770. package/lib/feature-libraries/deltaUtils.js.map +1 -1
  771. package/lib/feature-libraries/fieldKindIdentifiers.d.ts +9 -0
  772. package/lib/feature-libraries/fieldKindIdentifiers.d.ts.map +1 -0
  773. package/lib/feature-libraries/fieldKindIdentifiers.js +13 -0
  774. package/lib/feature-libraries/fieldKindIdentifiers.js.map +1 -0
  775. package/lib/feature-libraries/flex-tree/context.d.ts +0 -9
  776. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  777. package/lib/feature-libraries/flex-tree/context.js +0 -6
  778. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  779. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  780. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  781. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  782. package/lib/feature-libraries/flex-tree/lazyField.d.ts +7 -8
  783. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  784. package/lib/feature-libraries/flex-tree/lazyField.js +11 -42
  785. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  786. package/lib/feature-libraries/flex-tree/observer.d.ts +1 -1
  787. package/lib/feature-libraries/flex-tree/observer.d.ts.map +1 -1
  788. package/lib/feature-libraries/flex-tree/observer.js.map +1 -1
  789. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  790. package/lib/feature-libraries/forest-summary/codec.js +1 -1
  791. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  792. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  793. package/lib/feature-libraries/forest-summary/forestSummarizer.js +3 -3
  794. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  795. package/lib/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  796. package/lib/feature-libraries/forest-summary/formatV1.js.map +1 -1
  797. package/lib/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  798. package/lib/feature-libraries/forest-summary/formatV2.js.map +1 -1
  799. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -4
  800. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  801. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -2
  802. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  803. package/lib/feature-libraries/forest-summary/summaryTypes.d.ts.map +1 -1
  804. package/lib/feature-libraries/forest-summary/summaryTypes.js.map +1 -1
  805. package/lib/feature-libraries/index.d.ts +3 -3
  806. package/lib/feature-libraries/index.d.ts.map +1 -1
  807. package/lib/feature-libraries/index.js +2 -2
  808. package/lib/feature-libraries/index.js.map +1 -1
  809. package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  810. package/lib/feature-libraries/mapTreeCursor.js +1 -2
  811. package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
  812. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  813. package/lib/feature-libraries/mitigatedChangeFamily.js +2 -2
  814. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  815. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +21 -97
  816. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  817. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +5 -3
  818. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  819. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +51 -20
  820. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  821. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  822. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.d.ts.map +1 -1
  823. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
  824. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -1
  825. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  826. package/lib/feature-libraries/modular-schema/genericFieldKind.js +11 -5
  827. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  828. package/lib/feature-libraries/modular-schema/index.d.ts +4 -4
  829. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  830. package/lib/feature-libraries/modular-schema/index.js +2 -2
  831. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  832. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +28 -11
  833. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  834. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +144 -246
  835. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  836. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  837. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  838. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  839. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  840. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +1 -8
  841. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  842. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +21 -49
  843. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  844. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +463 -1319
  845. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  846. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  847. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  848. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +8 -44
  849. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  850. package/lib/feature-libraries/modular-schema/modularChangeTypes.js +1 -1
  851. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  852. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  853. package/lib/feature-libraries/object-forest/objectForest.js +2 -2
  854. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  855. package/lib/feature-libraries/optional-field/index.d.ts +2 -2
  856. package/lib/feature-libraries/optional-field/index.d.ts.map +1 -1
  857. package/lib/feature-libraries/optional-field/index.js +2 -2
  858. package/lib/feature-libraries/optional-field/index.js.map +1 -1
  859. package/lib/feature-libraries/optional-field/optionalField.d.ts +34 -5
  860. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  861. package/lib/feature-libraries/optional-field/optionalField.js +453 -221
  862. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  863. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +33 -24
  864. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  865. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  866. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  867. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  868. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +26 -55
  869. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  870. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  871. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
  872. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  873. package/lib/feature-libraries/optional-field/requiredField.d.ts +36 -0
  874. package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -0
  875. package/lib/feature-libraries/optional-field/requiredField.js +24 -0
  876. package/lib/feature-libraries/optional-field/requiredField.js.map +1 -0
  877. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts +1 -1
  878. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  879. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +1 -1
  880. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  881. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  882. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  883. package/lib/feature-libraries/schemaChecker.d.ts.map +1 -1
  884. package/lib/feature-libraries/schemaChecker.js +1 -1
  885. package/lib/feature-libraries/schemaChecker.js.map +1 -1
  886. package/lib/feature-libraries/sequence-field/compose.d.ts +7 -6
  887. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  888. package/lib/feature-libraries/sequence-field/compose.js +261 -85
  889. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  890. package/lib/feature-libraries/sequence-field/helperTypes.d.ts +10 -14
  891. package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  892. package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  893. package/lib/feature-libraries/sequence-field/index.d.ts +2 -13
  894. package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
  895. package/lib/feature-libraries/sequence-field/index.js +1 -12
  896. package/lib/feature-libraries/sequence-field/index.js.map +1 -1
  897. package/lib/feature-libraries/sequence-field/invert.d.ts +3 -3
  898. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  899. package/lib/feature-libraries/sequence-field/invert.js +169 -67
  900. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  901. package/lib/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  902. package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  903. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  904. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +56 -4
  905. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  906. package/lib/feature-libraries/sequence-field/moveEffectTable.js +84 -6
  907. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  908. package/lib/feature-libraries/sequence-field/rebase.d.ts +3 -3
  909. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  910. package/lib/feature-libraries/sequence-field/rebase.js +116 -109
  911. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  912. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +9 -0
  913. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +1 -0
  914. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +46 -0
  915. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +1 -0
  916. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  917. package/lib/feature-libraries/sequence-field/replaceRevisions.js +31 -18
  918. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  919. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  920. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -0
  921. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  922. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -22
  923. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  924. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +182 -356
  925. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  926. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  927. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +63 -21
  928. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  929. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  930. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  931. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
  932. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  933. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
  934. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  935. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +109 -14
  936. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  937. package/lib/feature-libraries/sequence-field/sequenceKind.d.ts +16 -0
  938. package/lib/feature-libraries/sequence-field/sequenceKind.d.ts.map +1 -0
  939. package/lib/feature-libraries/sequence-field/sequenceKind.js +21 -0
  940. package/lib/feature-libraries/sequence-field/sequenceKind.js.map +1 -0
  941. package/lib/feature-libraries/sequence-field/types.d.ts +59 -30
  942. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  943. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  944. package/lib/feature-libraries/sequence-field/utils.d.ts +24 -15
  945. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  946. package/lib/feature-libraries/sequence-field/utils.js +298 -112
  947. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  948. package/lib/index.d.ts +1 -1
  949. package/lib/index.d.ts.map +1 -1
  950. package/lib/index.js +1 -1
  951. package/lib/index.js.map +1 -1
  952. package/lib/packageVersion.d.ts +1 -1
  953. package/lib/packageVersion.d.ts.map +1 -1
  954. package/lib/packageVersion.js +1 -1
  955. package/lib/packageVersion.js.map +1 -1
  956. package/lib/shared-tree/independentView.d.ts.map +1 -1
  957. package/lib/shared-tree/independentView.js +3 -3
  958. package/lib/shared-tree/independentView.js.map +1 -1
  959. package/lib/shared-tree/index.d.ts +1 -1
  960. package/lib/shared-tree/index.d.ts.map +1 -1
  961. package/lib/shared-tree/index.js.map +1 -1
  962. package/lib/shared-tree/schematizeTree.d.ts +4 -4
  963. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  964. package/lib/shared-tree/schematizeTree.js +2 -3
  965. package/lib/shared-tree/schematizeTree.js.map +1 -1
  966. package/lib/shared-tree/schematizingTreeView.d.ts +5 -1
  967. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  968. package/lib/shared-tree/schematizingTreeView.js +42 -43
  969. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  970. package/lib/shared-tree/sharedTree.d.ts +5 -11
  971. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  972. package/lib/shared-tree/sharedTree.js +5 -43
  973. package/lib/shared-tree/sharedTree.js.map +1 -1
  974. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  975. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  976. package/lib/shared-tree/sharedTreeChangeCodecs.js +0 -1
  977. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  978. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts +31 -24
  979. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  980. package/lib/shared-tree/sharedTreeChangeEnricher.js +74 -56
  981. package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  982. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
  983. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  984. package/lib/shared-tree/sharedTreeChangeFamily.js +5 -11
  985. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  986. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +6 -16
  987. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  988. package/lib/shared-tree/sharedTreeEditBuilder.js +6 -12
  989. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  990. package/lib/shared-tree/tree.d.ts.map +1 -1
  991. package/lib/shared-tree/tree.js +7 -7
  992. package/lib/shared-tree/tree.js.map +1 -1
  993. package/lib/shared-tree/treeAlpha.d.ts +1 -1
  994. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  995. package/lib/shared-tree/treeAlpha.js +3 -3
  996. package/lib/shared-tree/treeAlpha.js.map +1 -1
  997. package/lib/shared-tree/treeCheckout.d.ts +29 -13
  998. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  999. package/lib/shared-tree/treeCheckout.js +55 -54
  1000. package/lib/shared-tree/treeCheckout.js.map +1 -1
  1001. package/lib/shared-tree-core/branch.d.ts +3 -4
  1002. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  1003. package/lib/shared-tree-core/branch.js +3 -4
  1004. package/lib/shared-tree-core/branch.js.map +1 -1
  1005. package/lib/shared-tree-core/branchCommitEnricher.d.ts +18 -31
  1006. package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  1007. package/lib/shared-tree-core/branchCommitEnricher.js +24 -76
  1008. package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
  1009. package/lib/shared-tree-core/branchIdCodec.d.ts.map +1 -1
  1010. package/lib/shared-tree-core/branchIdCodec.js.map +1 -1
  1011. package/lib/shared-tree-core/changeEnricher.d.ts +8 -43
  1012. package/lib/shared-tree-core/changeEnricher.d.ts.map +1 -1
  1013. package/lib/shared-tree-core/changeEnricher.js +1 -11
  1014. package/lib/shared-tree-core/changeEnricher.js.map +1 -1
  1015. package/lib/shared-tree-core/defaultResubmitMachine.d.ts +4 -12
  1016. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  1017. package/lib/shared-tree-core/defaultResubmitMachine.js +28 -38
  1018. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  1019. package/lib/shared-tree-core/editManager.d.ts +3 -3
  1020. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  1021. package/lib/shared-tree-core/editManager.js +11 -11
  1022. package/lib/shared-tree-core/editManager.js.map +1 -1
  1023. package/lib/shared-tree-core/editManagerCodecs.d.ts +1 -5
  1024. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  1025. package/lib/shared-tree-core/editManagerCodecs.js +1 -8
  1026. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  1027. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +1 -1
  1028. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  1029. package/lib/shared-tree-core/editManagerCodecsCommons.js +1 -2
  1030. package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  1031. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  1032. package/lib/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
  1033. package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  1034. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  1035. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
  1036. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  1037. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +0 -1
  1038. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  1039. package/lib/shared-tree-core/editManagerFormatCommons.js +0 -6
  1040. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  1041. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  1042. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  1043. package/lib/shared-tree-core/editManagerFormatV1toV4.js +0 -1
  1044. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  1045. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
  1046. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
  1047. package/lib/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
  1048. package/lib/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  1049. package/lib/shared-tree-core/index.d.ts +4 -4
  1050. package/lib/shared-tree-core/index.d.ts.map +1 -1
  1051. package/lib/shared-tree-core/index.js +2 -3
  1052. package/lib/shared-tree-core/index.js.map +1 -1
  1053. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
  1054. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  1055. package/lib/shared-tree-core/messageCodecV1ToV4.js +1 -1
  1056. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  1057. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts +1 -1
  1058. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  1059. package/lib/shared-tree-core/messageCodecVSharedBranches.js +2 -2
  1060. package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  1061. package/lib/shared-tree-core/messageCodecs.d.ts +2 -6
  1062. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  1063. package/lib/shared-tree-core/messageCodecs.js +1 -8
  1064. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  1065. package/lib/shared-tree-core/messageFormat.d.ts +0 -1
  1066. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  1067. package/lib/shared-tree-core/messageFormat.js +0 -6
  1068. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  1069. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  1070. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  1071. package/lib/shared-tree-core/messageFormatV1ToV4.js +0 -1
  1072. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  1073. package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  1074. package/lib/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  1075. package/lib/shared-tree-core/messageTypes.d.ts.map +1 -1
  1076. package/lib/shared-tree-core/messageTypes.js.map +1 -1
  1077. package/lib/shared-tree-core/sharedTreeCore.d.ts +8 -5
  1078. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  1079. package/lib/shared-tree-core/sharedTreeCore.js +15 -15
  1080. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  1081. package/lib/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  1082. package/lib/shared-tree-core/versionedSummarizer.js +1 -1
  1083. package/lib/shared-tree-core/versionedSummarizer.js.map +1 -1
  1084. package/lib/simple-tree/api/configuration.d.ts +2 -2
  1085. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  1086. package/lib/simple-tree/api/configuration.js +4 -4
  1087. package/lib/simple-tree/api/configuration.js.map +1 -1
  1088. package/lib/simple-tree/api/create.d.ts +1 -1
  1089. package/lib/simple-tree/api/create.d.ts.map +1 -1
  1090. package/lib/simple-tree/api/create.js +1 -1
  1091. package/lib/simple-tree/api/create.js.map +1 -1
  1092. package/lib/simple-tree/api/dirtyIndex.d.ts +1 -1
  1093. package/lib/simple-tree/api/dirtyIndex.d.ts.map +1 -1
  1094. package/lib/simple-tree/api/dirtyIndex.js.map +1 -1
  1095. package/lib/simple-tree/api/discrepancies.d.ts.map +1 -1
  1096. package/lib/simple-tree/api/discrepancies.js +3 -3
  1097. package/lib/simple-tree/api/discrepancies.js.map +1 -1
  1098. package/lib/simple-tree/api/getJsonSchema.d.ts +1 -1
  1099. package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  1100. package/lib/simple-tree/api/getJsonSchema.js +1 -1
  1101. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  1102. package/lib/simple-tree/api/identifierIndex.d.ts +2 -2
  1103. package/lib/simple-tree/api/identifierIndex.d.ts.map +1 -1
  1104. package/lib/simple-tree/api/identifierIndex.js.map +1 -1
  1105. package/lib/simple-tree/api/incrementalAllowedTypes.d.ts +1 -1
  1106. package/lib/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -1
  1107. package/lib/simple-tree/api/incrementalAllowedTypes.js +3 -3
  1108. package/lib/simple-tree/api/incrementalAllowedTypes.js.map +1 -1
  1109. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +1 -1
  1110. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  1111. package/lib/simple-tree/api/schemaCompatibilityTester.js +1 -1
  1112. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  1113. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +2 -2
  1114. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  1115. package/lib/simple-tree/api/schemaCreationUtilities.js +1 -1
  1116. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  1117. package/lib/simple-tree/api/schemaFactory.d.ts +2 -2
  1118. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  1119. package/lib/simple-tree/api/schemaFactory.js +2 -2
  1120. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  1121. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +6 -6
  1122. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  1123. package/lib/simple-tree/api/schemaFactoryAlpha.js +1 -1
  1124. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  1125. package/lib/simple-tree/api/schemaFactoryBeta.d.ts +2 -2
  1126. package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  1127. package/lib/simple-tree/api/schemaFactoryBeta.js +1 -0
  1128. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  1129. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
  1130. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  1131. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  1132. package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  1133. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  1134. package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -1
  1135. package/lib/simple-tree/api/schemaStatics.js.map +1 -1
  1136. package/lib/simple-tree/api/simpleSchemaCodec.d.ts +1 -1
  1137. package/lib/simple-tree/api/simpleSchemaCodec.d.ts.map +1 -1
  1138. package/lib/simple-tree/api/simpleSchemaCodec.js +3 -3
  1139. package/lib/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  1140. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts +2 -2
  1141. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  1142. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +2 -2
  1143. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  1144. package/lib/simple-tree/api/simpleTreeIndex.d.ts +1 -1
  1145. package/lib/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
  1146. package/lib/simple-tree/api/simpleTreeIndex.js +1 -1
  1147. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  1148. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  1149. package/lib/simple-tree/api/snapshotCompatibilityChecker.js +5 -5
  1150. package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  1151. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  1152. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  1153. package/lib/simple-tree/api/tree.d.ts +2 -2
  1154. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  1155. package/lib/simple-tree/api/tree.js.map +1 -1
  1156. package/lib/simple-tree/api/treeBeta.d.ts +1 -1
  1157. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  1158. package/lib/simple-tree/api/treeBeta.js +2 -2
  1159. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  1160. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  1161. package/lib/simple-tree/api/treeNodeApi.js +4 -4
  1162. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  1163. package/lib/simple-tree/api/typesUnsafe.d.ts +1 -1
  1164. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  1165. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  1166. package/lib/simple-tree/api/verboseTree.d.ts +1 -1
  1167. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  1168. package/lib/simple-tree/api/verboseTree.js +3 -3
  1169. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  1170. package/lib/simple-tree/core/allowedTypes.d.ts +1 -1
  1171. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  1172. package/lib/simple-tree/core/allowedTypes.js +2 -2
  1173. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  1174. package/lib/simple-tree/core/context.d.ts.map +1 -1
  1175. package/lib/simple-tree/core/context.js.map +1 -1
  1176. package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
  1177. package/lib/simple-tree/core/treeNode.js +1 -1
  1178. package/lib/simple-tree/core/treeNode.js.map +1 -1
  1179. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  1180. package/lib/simple-tree/core/treeNodeKernel.js +1 -3
  1181. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  1182. package/lib/simple-tree/core/treeNodeSchema.d.ts +5 -5
  1183. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  1184. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  1185. package/lib/simple-tree/core/treeNodeValid.d.ts +3 -3
  1186. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  1187. package/lib/simple-tree/core/treeNodeValid.js +2 -2
  1188. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  1189. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +16 -16
  1190. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  1191. package/lib/simple-tree/core/unhydratedFlexTree.js +8 -58
  1192. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  1193. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  1194. package/lib/simple-tree/core/withType.js.map +1 -1
  1195. package/lib/simple-tree/createContext.d.ts.map +1 -1
  1196. package/lib/simple-tree/createContext.js.map +1 -1
  1197. package/lib/simple-tree/fieldSchema.d.ts +5 -5
  1198. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  1199. package/lib/simple-tree/fieldSchema.js.map +1 -1
  1200. package/lib/simple-tree/index.d.ts +2 -2
  1201. package/lib/simple-tree/index.d.ts.map +1 -1
  1202. package/lib/simple-tree/index.js +1 -1
  1203. package/lib/simple-tree/index.js.map +1 -1
  1204. package/lib/simple-tree/leafNodeSchema.d.ts +1 -1
  1205. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  1206. package/lib/simple-tree/leafNodeSchema.js +2 -2
  1207. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  1208. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +1 -1
  1209. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  1210. package/lib/simple-tree/node-kinds/array/arrayNode.js +6 -8
  1211. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  1212. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +1 -1
  1213. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
  1214. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
  1215. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
  1216. package/lib/simple-tree/node-kinds/common.js +2 -2
  1217. package/lib/simple-tree/node-kinds/common.js.map +1 -1
  1218. package/lib/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
  1219. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  1220. package/lib/simple-tree/node-kinds/map/mapNode.js +8 -8
  1221. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  1222. package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts +1 -1
  1223. package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
  1224. package/lib/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
  1225. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
  1226. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  1227. package/lib/simple-tree/node-kinds/object/objectNode.js +22 -22
  1228. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  1229. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +3 -3
  1230. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  1231. package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  1232. package/lib/simple-tree/node-kinds/record/recordNode.d.ts +1 -1
  1233. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  1234. package/lib/simple-tree/node-kinds/record/recordNode.js +6 -8
  1235. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  1236. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +1 -1
  1237. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
  1238. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  1239. package/lib/simple-tree/prepareForInsertion.d.ts +47 -54
  1240. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  1241. package/lib/simple-tree/prepareForInsertion.js +125 -184
  1242. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  1243. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  1244. package/lib/simple-tree/simpleSchema.js.map +1 -1
  1245. package/lib/simple-tree/treeSchema.d.ts.map +1 -1
  1246. package/lib/simple-tree/treeSchema.js.map +1 -1
  1247. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +4 -13
  1248. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  1249. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +13 -30
  1250. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  1251. package/lib/tableSchema.d.ts.map +1 -1
  1252. package/lib/tableSchema.js +2 -1
  1253. package/lib/tableSchema.js.map +1 -1
  1254. package/lib/text/index.d.ts +1 -0
  1255. package/lib/text/index.d.ts.map +1 -1
  1256. package/lib/text/index.js +1 -0
  1257. package/lib/text/index.js.map +1 -1
  1258. package/lib/text/textDomain.d.ts +8 -0
  1259. package/lib/text/textDomain.d.ts.map +1 -1
  1260. package/lib/text/textDomain.js +1 -1
  1261. package/lib/text/textDomain.js.map +1 -1
  1262. package/lib/text/textDomainFormatted.d.ts +572 -0
  1263. package/lib/text/textDomainFormatted.d.ts.map +1 -0
  1264. package/lib/text/textDomainFormatted.js +180 -0
  1265. package/lib/text/textDomainFormatted.js.map +1 -0
  1266. package/lib/treeFactory.d.ts.map +1 -1
  1267. package/lib/treeFactory.js +4 -14
  1268. package/lib/treeFactory.js.map +1 -1
  1269. package/lib/util/bTreeUtils.d.ts.map +1 -1
  1270. package/lib/util/bTreeUtils.js +1 -1
  1271. package/lib/util/bTreeUtils.js.map +1 -1
  1272. package/lib/util/index.d.ts +1 -1
  1273. package/lib/util/index.d.ts.map +1 -1
  1274. package/lib/util/index.js +1 -1
  1275. package/lib/util/index.js.map +1 -1
  1276. package/lib/util/rangeMap.d.ts +12 -24
  1277. package/lib/util/rangeMap.d.ts.map +1 -1
  1278. package/lib/util/rangeMap.js +5 -44
  1279. package/lib/util/rangeMap.js.map +1 -1
  1280. package/lib/util/readSnapshotBlob.d.ts +1 -1
  1281. package/lib/util/readSnapshotBlob.d.ts.map +1 -1
  1282. package/lib/util/readSnapshotBlob.js.map +1 -1
  1283. package/package.json +22 -22
  1284. package/src/codec/codec.ts +10 -7
  1285. package/src/codec/versioned/codec.ts +3 -3
  1286. package/src/core/change-family/changeFamily.ts +0 -5
  1287. package/src/core/change-family/index.ts +0 -1
  1288. package/src/core/index.ts +1 -4
  1289. package/src/core/rebase/changeRebaser.ts +1 -6
  1290. package/src/core/rebase/index.ts +0 -1
  1291. package/src/core/rebase/types.ts +1 -8
  1292. package/src/core/rebase/utils.ts +7 -31
  1293. package/src/core/schema-stored/formatV2.ts +2 -1
  1294. package/src/core/tree/anchorSet.ts +1 -1
  1295. package/src/core/tree/detachedFieldIndex.ts +2 -18
  1296. package/src/core/tree/detachedFieldIndexCodecCommon.ts +2 -1
  1297. package/src/core/tree/detachedFieldIndexCodecV1.ts +2 -2
  1298. package/src/core/tree/detachedFieldIndexCodecV2.ts +3 -3
  1299. package/src/core/tree/detachedFieldIndexFormatV1.ts +3 -2
  1300. package/src/core/tree/detachedFieldIndexFormatV2.ts +3 -2
  1301. package/src/core/tree/index.ts +1 -2
  1302. package/src/core/tree/pathTree.ts +4 -16
  1303. package/src/core/tree/visitDelta.ts +2 -3
  1304. package/src/core/tree/visitorUtils.ts +2 -1
  1305. package/src/feature-libraries/changeAtomIdBTree.ts +4 -28
  1306. package/src/feature-libraries/chunked-forest/basicChunk.ts +1 -7
  1307. package/src/feature-libraries/chunked-forest/chunkTree.ts +2 -7
  1308. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +1 -1
  1309. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +1 -1
  1310. package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +1 -1
  1311. package/src/feature-libraries/chunked-forest/codec/codecs.ts +2 -2
  1312. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +1 -1
  1313. package/src/feature-libraries/chunked-forest/codec/format.ts +1 -1
  1314. package/src/feature-libraries/chunked-forest/codec/formatGeneric.ts +1 -0
  1315. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +3 -3
  1316. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +128 -405
  1317. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +27 -123
  1318. package/src/feature-libraries/default-schema/index.ts +5 -22
  1319. package/src/feature-libraries/default-schema/mappedEditBuilder.ts +9 -35
  1320. package/src/feature-libraries/deltaUtils.ts +1 -6
  1321. package/src/feature-libraries/fieldKindIdentifiers.ts +16 -0
  1322. package/src/feature-libraries/flex-tree/context.ts +0 -17
  1323. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +8 -7
  1324. package/src/feature-libraries/flex-tree/lazyField.ts +26 -69
  1325. package/src/feature-libraries/flex-tree/observer.ts +3 -1
  1326. package/src/feature-libraries/forest-summary/codec.ts +1 -1
  1327. package/src/feature-libraries/forest-summary/forestSummarizer.ts +6 -6
  1328. package/src/feature-libraries/forest-summary/formatV1.ts +1 -0
  1329. package/src/feature-libraries/forest-summary/formatV2.ts +1 -0
  1330. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +9 -7
  1331. package/src/feature-libraries/forest-summary/summaryTypes.ts +1 -0
  1332. package/src/feature-libraries/index.ts +8 -27
  1333. package/src/feature-libraries/mapTreeCursor.ts +2 -3
  1334. package/src/feature-libraries/mitigatedChangeFamily.ts +1 -3
  1335. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +44 -142
  1336. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +58 -32
  1337. package/src/feature-libraries/modular-schema/fieldKindConfiguration.ts +1 -0
  1338. package/src/feature-libraries/modular-schema/genericFieldKind.ts +20 -8
  1339. package/src/feature-libraries/modular-schema/index.ts +15 -16
  1340. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +336 -543
  1341. package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +2 -2
  1342. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +3 -15
  1343. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +753 -2582
  1344. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +0 -1
  1345. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +8 -55
  1346. package/src/feature-libraries/object-forest/objectForest.ts +2 -2
  1347. package/src/feature-libraries/optional-field/index.ts +5 -5
  1348. package/src/feature-libraries/optional-field/optionalField.ts +592 -317
  1349. package/src/feature-libraries/optional-field/optionalFieldChangeTypes.ts +38 -24
  1350. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +35 -89
  1351. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +1 -5
  1352. package/src/feature-libraries/optional-field/requiredField.ts +62 -0
  1353. package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +1 -1
  1354. package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +1 -0
  1355. package/src/feature-libraries/schemaChecker.ts +3 -2
  1356. package/src/feature-libraries/sequence-field/compose.ts +522 -139
  1357. package/src/feature-libraries/sequence-field/helperTypes.ts +19 -34
  1358. package/src/feature-libraries/sequence-field/index.ts +2 -42
  1359. package/src/feature-libraries/sequence-field/invert.ts +228 -103
  1360. package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
  1361. package/src/feature-libraries/sequence-field/moveEffectTable.ts +195 -8
  1362. package/src/feature-libraries/sequence-field/rebase.ts +205 -169
  1363. package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +57 -0
  1364. package/src/feature-libraries/sequence-field/replaceRevisions.ts +47 -25
  1365. package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +2 -0
  1366. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +228 -648
  1367. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +70 -56
  1368. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +27 -25
  1369. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +129 -19
  1370. package/src/feature-libraries/sequence-field/sequenceKind.ts +40 -0
  1371. package/src/feature-libraries/sequence-field/types.ts +64 -34
  1372. package/src/feature-libraries/sequence-field/utils.ts +353 -139
  1373. package/src/index.ts +1 -1
  1374. package/src/packageVersion.ts +1 -1
  1375. package/src/shared-tree/independentView.ts +4 -3
  1376. package/src/shared-tree/index.ts +2 -3
  1377. package/src/shared-tree/schematizeTree.ts +8 -21
  1378. package/src/shared-tree/schematizingTreeView.ts +79 -61
  1379. package/src/shared-tree/sharedTree.ts +10 -64
  1380. package/src/shared-tree/sharedTreeChangeCodecs.ts +2 -5
  1381. package/src/shared-tree/sharedTreeChangeEnricher.ts +87 -68
  1382. package/src/shared-tree/sharedTreeChangeFamily.ts +5 -15
  1383. package/src/shared-tree/sharedTreeEditBuilder.ts +8 -39
  1384. package/src/shared-tree/tree.ts +10 -10
  1385. package/src/shared-tree/treeAlpha.ts +26 -25
  1386. package/src/shared-tree/treeCheckout.ts +119 -94
  1387. package/src/shared-tree-core/branch.ts +6 -12
  1388. package/src/shared-tree-core/branchCommitEnricher.ts +25 -77
  1389. package/src/shared-tree-core/branchIdCodec.ts +1 -0
  1390. package/src/shared-tree-core/changeEnricher.ts +8 -52
  1391. package/src/shared-tree-core/defaultResubmitMachine.ts +39 -51
  1392. package/src/shared-tree-core/editManager.ts +8 -22
  1393. package/src/shared-tree-core/editManagerCodecs.ts +3 -13
  1394. package/src/shared-tree-core/editManagerCodecsCommons.ts +7 -6
  1395. package/src/shared-tree-core/editManagerCodecsV1toV4.ts +1 -1
  1396. package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +2 -2
  1397. package/src/shared-tree-core/editManagerFormatCommons.ts +1 -6
  1398. package/src/shared-tree-core/editManagerFormatV1toV4.ts +2 -3
  1399. package/src/shared-tree-core/editManagerFormatVSharedBranches.ts +3 -2
  1400. package/src/shared-tree-core/index.ts +2 -7
  1401. package/src/shared-tree-core/messageCodecV1ToV4.ts +4 -5
  1402. package/src/shared-tree-core/messageCodecVSharedBranches.ts +4 -4
  1403. package/src/shared-tree-core/messageCodecs.ts +3 -13
  1404. package/src/shared-tree-core/messageFormat.ts +0 -6
  1405. package/src/shared-tree-core/messageFormatV1ToV4.ts +2 -3
  1406. package/src/shared-tree-core/messageFormatVSharedBranches.ts +1 -0
  1407. package/src/shared-tree-core/messageTypes.ts +1 -0
  1408. package/src/shared-tree-core/sharedTreeCore.ts +27 -31
  1409. package/src/shared-tree-core/versionedSummarizer.ts +3 -1
  1410. package/src/simple-tree/api/configuration.ts +9 -9
  1411. package/src/simple-tree/api/create.ts +7 -6
  1412. package/src/simple-tree/api/dirtyIndex.ts +4 -2
  1413. package/src/simple-tree/api/discrepancies.ts +9 -8
  1414. package/src/simple-tree/api/getJsonSchema.ts +4 -3
  1415. package/src/simple-tree/api/identifierIndex.ts +4 -2
  1416. package/src/simple-tree/api/incrementalAllowedTypes.ts +6 -5
  1417. package/src/simple-tree/api/schemaCompatibilityTester.ts +3 -3
  1418. package/src/simple-tree/api/schemaCreationUtilities.ts +4 -3
  1419. package/src/simple-tree/api/schemaFactory.ts +16 -17
  1420. package/src/simple-tree/api/schemaFactoryAlpha.ts +21 -21
  1421. package/src/simple-tree/api/schemaFactoryBeta.ts +17 -15
  1422. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -1
  1423. package/src/simple-tree/api/schemaFromSimple.ts +1 -1
  1424. package/src/simple-tree/api/schemaStatics.ts +2 -0
  1425. package/src/simple-tree/api/simpleSchemaCodec.ts +12 -11
  1426. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +20 -18
  1427. package/src/simple-tree/api/simpleTreeIndex.ts +6 -4
  1428. package/src/simple-tree/api/snapshotCompatibilityChecker.ts +7 -5
  1429. package/src/simple-tree/api/storedSchema.ts +2 -1
  1430. package/src/simple-tree/api/tree.ts +2 -2
  1431. package/src/simple-tree/api/treeBeta.ts +3 -3
  1432. package/src/simple-tree/api/treeNodeApi.ts +14 -13
  1433. package/src/simple-tree/api/typesUnsafe.ts +7 -8
  1434. package/src/simple-tree/api/verboseTree.ts +6 -5
  1435. package/src/simple-tree/core/allowedTypes.ts +4 -4
  1436. package/src/simple-tree/core/context.ts +1 -1
  1437. package/src/simple-tree/core/treeNode.ts +1 -1
  1438. package/src/simple-tree/core/treeNodeKernel.ts +1 -3
  1439. package/src/simple-tree/core/treeNodeSchema.ts +7 -6
  1440. package/src/simple-tree/core/treeNodeValid.ts +9 -9
  1441. package/src/simple-tree/core/unhydratedFlexTree.ts +37 -88
  1442. package/src/simple-tree/core/withType.ts +3 -2
  1443. package/src/simple-tree/createContext.ts +1 -0
  1444. package/src/simple-tree/fieldSchema.ts +5 -8
  1445. package/src/simple-tree/index.ts +1 -2
  1446. package/src/simple-tree/leafNodeSchema.ts +3 -3
  1447. package/src/simple-tree/node-kinds/array/arrayNode.ts +20 -21
  1448. package/src/simple-tree/node-kinds/array/arrayNodeTypes.ts +2 -2
  1449. package/src/simple-tree/node-kinds/common.ts +6 -3
  1450. package/src/simple-tree/node-kinds/map/mapNode.ts +20 -19
  1451. package/src/simple-tree/node-kinds/map/mapNodeTypes.ts +2 -2
  1452. package/src/simple-tree/node-kinds/object/objectNode.ts +37 -37
  1453. package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +8 -7
  1454. package/src/simple-tree/node-kinds/record/recordNode.ts +21 -22
  1455. package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +1 -2
  1456. package/src/simple-tree/prepareForInsertion.ts +205 -345
  1457. package/src/simple-tree/simpleSchema.ts +1 -0
  1458. package/src/simple-tree/treeSchema.ts +1 -0
  1459. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +16 -44
  1460. package/src/tableSchema.ts +3 -1
  1461. package/src/text/index.ts +1 -0
  1462. package/src/text/textDomain.ts +1 -1
  1463. package/src/text/textDomainFormatted.ts +309 -0
  1464. package/src/treeFactory.ts +8 -18
  1465. package/src/util/bTreeUtils.ts +1 -1
  1466. package/src/util/index.ts +0 -3
  1467. package/src/util/rangeMap.ts +18 -72
  1468. package/src/util/readSnapshotBlob.ts +4 -2
  1469. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +0 -38
  1470. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +0 -1
  1471. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js +0 -132
  1472. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js.map +0 -1
  1473. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +0 -15
  1474. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +0 -1
  1475. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js +0 -393
  1476. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js.map +0 -1
  1477. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +0 -146
  1478. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +0 -1
  1479. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js +0 -32
  1480. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js.map +0 -1
  1481. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +0 -23
  1482. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +0 -1
  1483. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +0 -31
  1484. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +0 -1
  1485. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +0 -12
  1486. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +0 -1
  1487. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +0 -57
  1488. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +0 -1
  1489. package/dist/shared-tree-core/transactionEnricher.d.ts +0 -23
  1490. package/dist/shared-tree-core/transactionEnricher.d.ts.map +0 -1
  1491. package/dist/shared-tree-core/transactionEnricher.js +0 -74
  1492. package/dist/shared-tree-core/transactionEnricher.js.map +0 -1
  1493. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +0 -38
  1494. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +0 -1
  1495. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js +0 -128
  1496. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js.map +0 -1
  1497. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +0 -15
  1498. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +0 -1
  1499. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js +0 -389
  1500. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js.map +0 -1
  1501. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +0 -146
  1502. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +0 -1
  1503. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js +0 -29
  1504. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js.map +0 -1
  1505. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +0 -23
  1506. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +0 -1
  1507. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +0 -27
  1508. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +0 -1
  1509. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +0 -12
  1510. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +0 -1
  1511. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +0 -53
  1512. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +0 -1
  1513. package/lib/shared-tree-core/transactionEnricher.d.ts +0 -23
  1514. package/lib/shared-tree-core/transactionEnricher.d.ts.map +0 -1
  1515. package/lib/shared-tree-core/transactionEnricher.js +0 -70
  1516. package/lib/shared-tree-core/transactionEnricher.js.map +0 -1
  1517. package/src/feature-libraries/default-schema/locationBasedEditBuilder.ts +0 -188
  1518. package/src/feature-libraries/modular-schema/modularChangeCodecV3.ts +0 -760
  1519. package/src/feature-libraries/modular-schema/modularChangeFormatV3.ts +0 -62
  1520. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +0 -45
  1521. package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +0 -94
  1522. package/src/shared-tree-core/transactionEnricher.ts +0 -74
@@ -4,19 +4,19 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.validateChangeset = exports.addNodeRename = exports.getFirstAttachField = exports.getFirstDetachField = exports.cloneRootTable = exports.newRootTable = exports.normalizeNodeId = exports.normalizeFieldId = exports.getNodeParent = exports.buildModularChangesetFromField = exports.ModularEditBuilder = exports.getChangeHandler = exports.getFieldKind = exports.rebaseRevisionMetadataFromInfo = exports.intoDelta = exports.updateRefreshers = exports.getBuildIds = exports.relevantRemovedRoots = exports.ModularChangeFamily = void 0;
7
+ exports.normalizeFieldId = exports.getParentFieldId = exports.ModularEditBuilder = exports.getChangeHandler = exports.getFieldKind = exports.rebaseRevisionMetadataFromInfo = exports.intoDelta = exports.updateRefreshers = exports.relevantRemovedRoots = exports.ModularChangeFamily = void 0;
8
8
  const internal_1 = require("@fluidframework/core-utils/internal");
9
- const sorted_btree_es6_1 = require("@tylerbu/sorted-btree-es6");
10
9
  const internal_2 = require("@fluidframework/telemetry-utils/internal");
10
+ const sorted_btree_es6_1 = require("@tylerbu/sorted-btree-es6");
11
+ const semver_ts_1 = require("semver-ts");
11
12
  const index_js_1 = require("../../codec/index.js");
12
13
  const index_js_2 = require("../../core/index.js");
13
14
  const index_js_3 = require("../../util/index.js");
15
+ const changeAtomIdBTree_js_1 = require("../changeAtomIdBTree.js");
14
16
  const crossFieldQueries_js_1 = require("./crossFieldQueries.js");
15
17
  const fieldChangeHandler_js_1 = require("./fieldChangeHandler.js");
16
18
  const genericFieldKind_js_1 = require("./genericFieldKind.js");
17
19
  const modularChangeTypes_js_1 = require("./modularChangeTypes.js");
18
- const semver_ts_1 = require("semver-ts");
19
- const changeAtomIdBTree_js_1 = require("../changeAtomIdBTree.js");
20
20
  /**
21
21
  * Implementation of ChangeFamily which delegates work in a given field to the appropriate FieldKind
22
22
  * as determined by the schema.
@@ -72,22 +72,21 @@ class ModularChangeFamily {
72
72
  return convertedChange;
73
73
  }
74
74
  compose(changes) {
75
- const { maxId } = getRevInfoFromTaggedChanges(changes);
75
+ const { revInfos, maxId } = getRevInfoFromTaggedChanges(changes);
76
76
  const idState = { maxId };
77
77
  const pairwiseDelegate = (left, right) => {
78
- return this.composePair(left, right, idState);
78
+ return this.composePair(left, right, revInfos, idState);
79
79
  };
80
80
  const innerChanges = changes.map((change) => change.change);
81
81
  return (0, index_js_3.balancedReduce)(innerChanges, pairwiseDelegate, makeModularChangeset);
82
82
  }
83
- composePair(change1, change2, idState) {
84
- const revInfos = composeRevInfos(change1.revisions, change2.revisions);
85
- const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys, rootNodes } = this.composeAllFields(change1, change2, revInfos, idState);
83
+ composePair(change1, change2, revInfos, idState) {
84
+ const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys } = this.composeAllFields(change1, change2, revInfos, idState);
86
85
  const { allBuilds, allDestroys, allRefreshers } = composeBuildsDestroysAndRefreshers(change1, change2);
87
86
  // The composed changeset has a "no change" constraint if either change has one
88
87
  const noChangeConstraint = change1.noChangeConstraint ?? change2.noChangeConstraint;
89
88
  const noChangeConstraintOnRevert = change1.noChangeConstraintOnRevert ?? change2.noChangeConstraintOnRevert;
90
- const composed = makeModularChangeset({
89
+ return makeModularChangeset({
91
90
  fieldChanges,
92
91
  nodeChanges,
93
92
  nodeToParent,
@@ -95,16 +94,12 @@ class ModularChangeFamily {
95
94
  crossFieldKeys,
96
95
  maxId: idState.maxId,
97
96
  revisions: revInfos,
98
- rootNodes,
97
+ noChangeConstraint,
98
+ noChangeConstraintOnRevert,
99
99
  builds: allBuilds,
100
100
  destroys: allDestroys,
101
101
  refreshers: allRefreshers,
102
- noChangeConstraint,
103
- noChangeConstraintOnRevert,
104
102
  });
105
- // XXX: This is an expensive assert which should be disabled before merging.
106
- validateChangeset(composed, this.fieldKinds);
107
- return composed;
108
103
  }
109
104
  composeAllFields(potentiallyConflictedChange1, potentiallyConflictedChange2, revInfos, idState) {
110
105
  // Our current cell ordering scheme in sequences depends on being able to rebase over a change with conflicts.
@@ -125,50 +120,34 @@ class ModularChangeFamily {
125
120
  const composedNodeChanges = (0, index_js_3.brand)((0, index_js_3.mergeTupleBTrees)(change1.nodeChanges, change2.nodeChanges));
126
121
  const composedNodeToParent = (0, index_js_3.brand)((0, index_js_3.mergeTupleBTrees)(change1.nodeToParent, change2.nodeToParent));
127
122
  const composedNodeAliases = (0, index_js_3.brand)((0, index_js_3.mergeTupleBTrees)(change1.nodeAliases, change2.nodeAliases));
128
- const pendingCompositions = {
129
- nodeIdsToCompose: [],
130
- affectedBaseFields: (0, index_js_3.newTupleBTree)(),
131
- };
132
- const movedCrossFieldKeys = (0, modularChangeTypes_js_1.newCrossFieldRangeTable)();
133
- const removedCrossFieldKeys = (0, modularChangeTypes_js_1.newCrossFieldRangeTable)();
134
- const composedRoots = composeRootTables(change1, change2, composedNodeToParent, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions);
135
- const crossFieldTable = newComposeTable(change1, change2, composedRoots, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions);
123
+ const crossFieldTable = newComposeTable(change1, change2, composedNodeToParent);
136
124
  const composedFields = this.composeFieldMaps(change1.fieldChanges, change2.fieldChanges, undefined, genId, crossFieldTable, revisionMetadata);
137
125
  this.composeInvalidatedElements(crossFieldTable, composedFields, composedNodeChanges, composedNodeToParent, composedNodeAliases, genId, revisionMetadata);
138
- for (const entry of crossFieldTable.renamesToDelete.entries()) {
139
- deleteNodeRenameFrom(crossFieldTable.composedRootNodes, entry.start, entry.length);
140
- }
141
- for (const [nodeId, location] of crossFieldTable.movedNodeToParent.entries()) {
142
- // Moved nodes are from change2.
143
- // If there is a corresponding node in change1, then composedNodeToParent will already have the correct entry,
144
- // because the location of the node is the same in change1 and the composed change
145
- // (since they have the same input context).
146
- if (crossFieldTable.newToBaseNodeId.get(nodeId) === undefined) {
147
- composedNodeToParent.set(nodeId, location);
148
- }
149
- }
126
+ // Currently no field kinds require making changes to cross-field keys during composition, so we can just merge the two tables.
127
+ const composedCrossFieldKeys = index_js_3.RangeMap.union(change1.crossFieldKeys, change2.crossFieldKeys);
150
128
  return {
151
129
  fieldChanges: composedFields,
152
130
  nodeChanges: composedNodeChanges,
153
131
  nodeToParent: composedNodeToParent,
154
132
  nodeAliases: composedNodeAliases,
155
- crossFieldKeys: composeCrossFieldKeyTables(change1.crossFieldKeys, change2.crossFieldKeys, crossFieldTable.movedCrossFieldKeys, crossFieldTable.removedCrossFieldKeys),
156
- rootNodes: composedRoots,
133
+ crossFieldKeys: composedCrossFieldKeys,
157
134
  };
158
135
  }
159
136
  composeInvalidatedField(fieldChange, crossFieldTable, genId, revisionMetadata) {
160
137
  const context = crossFieldTable.fieldToContext.get(fieldChange);
161
138
  (0, internal_1.assert)(context !== undefined, 0x8cc /* Should have context for every invalidated field */);
162
- const { change1: fieldChange1, change2: fieldChange2, composedChange } = context;
163
- crossFieldTable.pendingCompositions.affectedBaseFields.delete(fieldIdKeyFromFieldId(context.fieldId));
139
+ const { fieldId, change1: fieldChange1, change2: fieldChange2, composedChange } = context;
164
140
  const rebaser = getChangeHandler(this.fieldKinds, composedChange.fieldKind).rebaser;
165
141
  const composeNodes = (child1, child2) => {
166
- if (child1 !== undefined && child2 !== undefined) {
167
- addNodesToCompose(crossFieldTable, child1, child2);
142
+ if (child1 !== undefined &&
143
+ child2 !== undefined &&
144
+ (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(crossFieldTable.newToBaseNodeId, child2) === undefined) {
145
+ (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(crossFieldTable.newToBaseNodeId, child2, child1);
146
+ crossFieldTable.pendingCompositions.nodeIdsToCompose.push([child1, child2]);
168
147
  }
169
148
  return child1 ?? child2 ?? (0, internal_1.fail)(0xb22 /* Should not compose two undefined nodes */);
170
149
  };
171
- const amendedChange = rebaser.compose(fieldChange1, fieldChange2, composeNodes, genId, new ComposeNodeManagerI(crossFieldTable, context.fieldId, false), revisionMetadata);
150
+ const amendedChange = rebaser.compose(fieldChange1, fieldChange2, composeNodes, genId, new ComposeManager(crossFieldTable, fieldChange, fieldId, false), revisionMetadata);
172
151
  composedChange.change = (0, index_js_3.brand)(amendedChange);
173
152
  }
174
153
  /**
@@ -177,23 +156,32 @@ class ModularChangeFamily {
177
156
  * - discovering that two node changesets refer to the same node (`nodeIdsToCompose`)
178
157
  * - a previously composed field being invalidated by a cross field effect (`invalidatedFields`)
179
158
  * - a field which was copied directly from an input changeset being invalidated by a cross field effect
180
- * (`affectedBaseFields`)
159
+ * (`affectedBaseFields` and `affectedNewFields`)
181
160
  *
182
161
  * Updating an element may invalidate further elements. This function runs until there is no more invalidation.
183
162
  */
184
163
  composeInvalidatedElements(table, composedFields, composedNodes, composedNodeToParent, nodeAliases, genId, metadata) {
185
164
  const pending = table.pendingCompositions;
186
- while (pending.nodeIdsToCompose.length > 0 || pending.affectedBaseFields.length > 0) {
187
- this.processPendingNodeCompositions(table, composedNodes, composedNodeToParent, nodeAliases, genId, metadata);
188
- this.composeAffectedFields(table, table.baseChange, pending.affectedBaseFields, composedFields, composedNodes, genId, metadata);
165
+ while (table.invalidatedFields.size > 0 ||
166
+ pending.nodeIdsToCompose.length > 0 ||
167
+ pending.affectedBaseFields.length > 0 ||
168
+ pending.affectedNewFields.length > 0) {
169
+ // Note that the call to `composeNodesById` can add entries to `crossFieldTable.nodeIdPairs`.
170
+ for (const [id1, id2] of pending.nodeIdsToCompose) {
171
+ this.composeNodesById(table.baseChange.nodeChanges, table.newChange.nodeChanges, composedNodes, composedNodeToParent, nodeAliases, id1, id2, genId, table, metadata);
172
+ }
173
+ pending.nodeIdsToCompose.length = 0;
174
+ this.composeAffectedFields(table, table.baseChange, true, pending.affectedBaseFields, composedFields, composedNodes, genId, metadata);
175
+ this.composeAffectedFields(table, table.newChange, false, pending.affectedNewFields, composedFields, composedNodes, genId, metadata);
176
+ this.processInvalidatedCompositions(table, genId, metadata);
189
177
  }
190
178
  }
191
- processPendingNodeCompositions(table, composedNodes, composedNodeToParent, nodeAliases, genId, metadata) {
192
- // Note that the call to `composeNodesById` can add entries to `crossFieldTable.nodeIdPairs`.
193
- for (const [id1, id2] of table.pendingCompositions.nodeIdsToCompose) {
194
- this.composeNodesById(table.baseChange, table.newChange, composedNodes, composedNodeToParent, nodeAliases, id1, id2, genId, table, metadata);
179
+ processInvalidatedCompositions(table, genId, metadata) {
180
+ const fieldsToUpdate = table.invalidatedFields;
181
+ table.invalidatedFields = new Set();
182
+ for (const fieldChange of fieldsToUpdate) {
183
+ this.composeInvalidatedField(fieldChange, table, genId, metadata);
195
184
  }
196
- table.pendingCompositions.nodeIdsToCompose.length = 0;
197
185
  }
198
186
  /**
199
187
  * Ensures that each field in `affectedFields` has been updated in the composition output.
@@ -206,36 +194,39 @@ class ModularChangeFamily {
206
194
  * If not, they are assumed to be part of the new changeset.
207
195
  * @param affectedFields - The set of fields to process.
208
196
  */
209
- composeAffectedFields(table, change, affectedFields, composedFields, composedNodes, genId, metadata) {
210
- const fieldsToProcess = affectedFields.clone();
211
- affectedFields.clear();
212
- for (const fieldIdKey of fieldsToProcess.keys()) {
213
- const fieldId = fieldIdFromFieldIdKey(fieldIdKey);
214
- const fieldChange = fieldChangeFromId(change, fieldId);
197
+ composeAffectedFields(table, change, areBaseFields, affectedFields, composedFields, composedNodes, genId, metadata) {
198
+ for (const fieldIdKey of affectedFields.keys()) {
199
+ const fieldId = normalizeFieldId(fieldIdFromFieldIdKey(fieldIdKey), change.nodeAliases);
200
+ const fieldChange = fieldChangeFromId(change.fieldChanges, change.nodeChanges, fieldId);
215
201
  if (table.fieldToContext.has(fieldChange) ||
216
202
  table.newFieldToBaseField.has(fieldChange)) {
217
- this.composeInvalidatedField(fieldChange, table, genId, metadata);
203
+ // This function handles fields which were not part of the intersection of the two changesets but which need to be updated anyway.
204
+ // If we've already processed this field then either it is up to date
205
+ // or there is pending inval which will be handled in processInvalidatedCompositions.
206
+ continue;
218
207
  }
219
- else {
220
- this.composeFieldWithNoNewChange(table, fieldChange, fieldId, composedFields, composedNodes, genId, metadata);
208
+ const emptyChange = this.createEmptyFieldChange(fieldChange.fieldKind);
209
+ const [change1, change2] = areBaseFields
210
+ ? [fieldChange, emptyChange]
211
+ : [emptyChange, fieldChange];
212
+ const composedField = this.composeFieldChanges(fieldId, change1, change2, genId, table, metadata);
213
+ if (fieldId.nodeId === undefined) {
214
+ composedFields.set(fieldId.field, composedField);
215
+ continue;
221
216
  }
217
+ const nodeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(table.newToBaseNodeId, fieldId.nodeId) ?? fieldId.nodeId;
218
+ let nodeChangeset = nodeChangeFromId(composedNodes, nodeId);
219
+ if (!table.composedNodes.has(nodeChangeset)) {
220
+ nodeChangeset = cloneNodeChangeset(nodeChangeset);
221
+ (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(composedNodes, nodeId, nodeChangeset);
222
+ }
223
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- using ??= could change behavior if value is falsy
224
+ if (nodeChangeset.fieldChanges === undefined) {
225
+ nodeChangeset.fieldChanges = new Map();
226
+ }
227
+ nodeChangeset.fieldChanges.set(fieldId.field, composedField);
222
228
  }
223
- }
224
- composeFieldWithNoNewChange(table, baseFieldChange, fieldId, composedFields, composedNodes, genId, metadata) {
225
- const emptyChange = this.createEmptyFieldChange(baseFieldChange.fieldKind);
226
- const composedField = this.composeFieldChanges(fieldId, baseFieldChange, emptyChange, genId, table, metadata);
227
- if (fieldId.nodeId === undefined) {
228
- composedFields.set(fieldId.field, composedField);
229
- return;
230
- }
231
- const nodeId = normalizeNodeId((0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(table.newToBaseNodeId, fieldId.nodeId) ?? fieldId.nodeId, table.baseChange.nodeAliases);
232
- // We clone the node changeset before mutating it, as it may be from one of the input changesets.
233
- const nodeChangeset = cloneNodeChangeset(nodeChangeFromId(composedNodes, table.baseChange.nodeAliases, nodeId));
234
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(composedNodes, nodeId, nodeChangeset);
235
- if (nodeChangeset.fieldChanges === undefined) {
236
- nodeChangeset.fieldChanges = new Map();
237
- }
238
- nodeChangeset.fieldChanges.set(fieldId.field, composedField);
229
+ affectedFields.clear();
239
230
  }
240
231
  composeFieldMaps(change1, change2, parentId, genId, crossFieldTable, revisionMetadata) {
241
232
  const composedFields = new Map();
@@ -245,14 +236,6 @@ class ModularChangeFamily {
245
236
  for (const [field, fieldChange1] of change1) {
246
237
  const fieldId = { nodeId: parentId, field };
247
238
  const fieldChange2 = change2.get(field);
248
- const cachedComposedFieldChange = crossFieldTable.fieldToContext.get(fieldChange1)?.composedChange;
249
- if (fieldChange2 === undefined && cachedComposedFieldChange !== undefined) {
250
- // This can happen if the field was previous processed in `composeFieldWithNoNewChange`.
251
- // If `change2` does not have a change for this field, then without this check we would
252
- // lose the composed field change and instead simply have `change1`'s change.
253
- composedFields.set(field, cachedComposedFieldChange);
254
- continue;
255
- }
256
239
  const composedField = fieldChange2 === undefined
257
240
  ? fieldChange1
258
241
  : this.composeFieldChanges(fieldId, fieldChange1, fieldChange2, genId, crossFieldTable, revisionMetadata);
@@ -272,16 +255,17 @@ class ModularChangeFamily {
272
255
  * will be added to `crossFieldTable.pendingCompositions.nodeIdsToCompose`.
273
256
  *
274
257
  * Any fields which had cross-field information sent to them as part of this field composition
275
- * will be added to `affectedBaseFields` in `crossFieldTable.pendingCompositions`.
258
+ * will be added to either `affectedBaseFields` or `affectedNewFields` in `crossFieldTable.pendingCompositions`.
276
259
  *
277
260
  * Any composed `FieldChange` which is invalidated by new cross-field information will be added to `crossFieldTable.invalidatedFields`.
278
261
  */
279
262
  composeFieldChanges(fieldId, change1, change2, idAllocator, crossFieldTable, revisionMetadata) {
280
263
  const { fieldKind, changeHandler, change1: change1Normalized, change2: change2Normalized, } = this.normalizeFieldChanges(change1, change2);
281
- const manager = new ComposeNodeManagerI(crossFieldTable, fieldId);
264
+ const manager = new ComposeManager(crossFieldTable, change1, fieldId);
282
265
  const composedChange = changeHandler.rebaser.compose(change1Normalized, change2Normalized, (child1, child2) => {
283
266
  if (child1 !== undefined && child2 !== undefined) {
284
- addNodesToCompose(crossFieldTable, child1, child2);
267
+ (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(crossFieldTable.newToBaseNodeId, child2, child1);
268
+ crossFieldTable.pendingCompositions.nodeIdsToCompose.push([child1, child2]);
285
269
  }
286
270
  return child1 ?? child2 ?? (0, internal_1.fail)(0xb23 /* Should not compose two undefined nodes */);
287
271
  }, idAllocator, manager, revisionMetadata);
@@ -298,18 +282,19 @@ class ModularChangeFamily {
298
282
  crossFieldTable.newFieldToBaseField.set(change2, change1);
299
283
  return composedField;
300
284
  }
301
- composeNodesById(change1, change2, composedNodes, composedNodeToParent, composedAliases, id1, id2, idAllocator, crossFieldTable, revisionMetadata) {
302
- const nodeChangeset1 = nodeChangeFromId(change1.nodeChanges, change1.nodeAliases, id1);
303
- const nodeChangeset2 = nodeChangeFromId(change2.nodeChanges, change2.nodeAliases, id2);
285
+ composeNodesById(nodeChanges1, nodeChanges2, composedNodes, composedNodeToParent, nodeAliases, id1, id2, idAllocator, crossFieldTable, revisionMetadata) {
286
+ const nodeChangeset1 = nodeChangeFromId(nodeChanges1, id1);
287
+ const nodeChangeset2 = nodeChangeFromId(nodeChanges2, id2);
304
288
  const composedNodeChangeset = this.composeNodeChanges(id1, nodeChangeset1, nodeChangeset2, idAllocator, crossFieldTable, revisionMetadata);
305
289
  (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(composedNodes, id1, composedNodeChangeset);
306
290
  if (!(0, index_js_2.areEqualChangeAtomIds)(id1, id2)) {
307
291
  composedNodes.delete([id2.revision, id2.localId]);
308
292
  composedNodeToParent.delete([id2.revision, id2.localId]);
309
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(composedAliases, id2, id1);
293
+ (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeAliases, id2, id1);
310
294
  // We need to delete id1 to avoid forming a cycle in case id1 already had an alias.
311
- composedAliases.delete([id1.revision, id1.localId]);
295
+ nodeAliases.delete([id1.revision, id1.localId]);
312
296
  }
297
+ crossFieldTable.composedNodes.add(composedNodeChangeset);
313
298
  }
314
299
  composeNodeChanges(nodeId, change1, change2, genId, crossFieldTable, revisionMetadata) {
315
300
  // WARNING: this composition logic assumes that we never make compositions of the following form:
@@ -362,14 +347,9 @@ class ModularChangeFamily {
362
347
  }
363
348
  const genId = (0, index_js_3.idAllocatorFromMaxId)(change.change.maxId ?? -1);
364
349
  const crossFieldTable = {
365
- change: change.change,
366
- entries: (0, index_js_2.newChangeAtomIdRangeMap)(),
350
+ ...newCrossFieldTable(),
367
351
  originalFieldToContext: new Map(),
368
- invertRevision: revisionForInvert,
369
352
  invertedNodeToParent: (0, index_js_3.brand)(change.change.nodeToParent.clone()),
370
- invalidatedFields: new Set(),
371
- invertedRoots: invertRootTable(change.change, isRollback),
372
- attachToDetachId: (0, index_js_2.newChangeAtomIdTransform)(),
373
353
  };
374
354
  const { revInfos: oldRevInfos } = getRevInfoFromTaggedChanges([change]);
375
355
  const revisionMetadata = (0, index_js_2.revisionMetadataSourceFromInfo)(oldRevInfos);
@@ -385,18 +365,16 @@ class ModularChangeFamily {
385
365
  const originalFieldChange = fieldChange.change;
386
366
  const context = crossFieldTable.originalFieldToContext.get(fieldChange);
387
367
  (0, internal_1.assert)(context !== undefined, 0x851 /* Should have context for every invalidated field */);
388
- const { invertedField } = context;
389
- const amendedChange = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).rebaser.invert(originalFieldChange, isRollback, genId, revisionForInvert, new InvertNodeManagerI(crossFieldTable, context.fieldId), revisionMetadata);
368
+ const { invertedField, fieldId } = context;
369
+ const amendedChange = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).rebaser.invert(originalFieldChange, isRollback, genId, revisionForInvert, new InvertManager(crossFieldTable, fieldChange, fieldId), revisionMetadata);
390
370
  invertedField.change = (0, index_js_3.brand)(amendedChange);
391
371
  }
392
372
  }
393
373
  const crossFieldKeys = this.makeCrossFieldKeyTable(invertedFields, invertedNodes);
394
- this.processInvertRenames(crossFieldTable);
395
374
  return makeModularChangeset({
396
375
  fieldChanges: invertedFields,
397
376
  nodeChanges: invertedNodes,
398
377
  nodeToParent: crossFieldTable.invertedNodeToParent,
399
- rootNodes: crossFieldTable.invertedRoots,
400
378
  nodeAliases: change.change.nodeAliases,
401
379
  crossFieldKeys,
402
380
  maxId: genId.getMaxId(),
@@ -412,7 +390,7 @@ class ModularChangeFamily {
412
390
  const invertedFields = new Map();
413
391
  for (const [field, fieldChange] of changes) {
414
392
  const fieldId = { nodeId: parentId, field };
415
- const manager = new InvertNodeManagerI(crossFieldTable, fieldId);
393
+ const manager = new InvertManager(crossFieldTable, fieldChange, fieldId);
416
394
  const invertedChange = getChangeHandler(this.fieldKinds, fieldChange.fieldKind).rebaser.invert(fieldChange.change, isRollback, genId, revisionForInvert, manager, revisionMetadata);
417
395
  const invertedFieldChange = {
418
396
  ...fieldChange,
@@ -444,12 +422,6 @@ class ModularChangeFamily {
444
422
  }
445
423
  return inverse;
446
424
  }
447
- processInvertRenames(table) {
448
- for (const { start: newAttachId, value: originalDetachId, length, } of table.attachToDetachId.entries()) {
449
- // Note that the detach location is already set in `invertDetach`.
450
- addNodeRename(table.invertedRoots, originalDetachId, newAttachId, length, undefined);
451
- }
452
- }
453
425
  rebase(taggedChange, potentiallyConflictedOver, revisionMetadata) {
454
426
  // Our current cell ordering scheme in sequences depends on being able to rebase over a change with conflicts.
455
427
  // This means that we must rebase over a muted version of the conflicted changeset.
@@ -460,26 +432,17 @@ class ModularChangeFamily {
460
432
  const maxId = Math.max(change.maxId ?? -1, over.change.maxId ?? -1);
461
433
  const idState = { maxId };
462
434
  const genId = (0, index_js_3.idAllocatorFromState)(idState);
463
- const affectedBaseFields = (0, index_js_3.newTupleBTree)();
464
- const nodesToRebase = [];
465
- const rebasedNodeToParent = (0, index_js_3.brand)(change.nodeToParent.clone());
466
- const rebaseVersion = Math.max(change.rebaseVersion, over.change.rebaseVersion);
467
- const rebasedRootNodes = rebaseRoots(change, over.change, affectedBaseFields, nodesToRebase, rebasedNodeToParent, rebaseVersion);
468
435
  const crossFieldTable = {
469
- rebaseVersion,
470
- entries: newDetachedEntryMap(),
436
+ ...newCrossFieldTable(),
471
437
  newChange: change,
472
438
  baseChange: over.change,
473
439
  baseFieldToContext: new Map(),
474
- baseRoots: over.change.rootNodes,
475
- rebasedRootNodes,
476
440
  baseToRebasedNodeId: (0, index_js_3.newTupleBTree)(),
477
441
  rebasedFields: new Set(),
478
- rebasedNodeToParent,
479
- rebasedDetachLocations: (0, index_js_2.newChangeAtomIdRangeMap)(),
480
- movedDetaches: (0, index_js_2.newChangeAtomIdRangeMap)(),
442
+ rebasedNodeToParent: (0, index_js_3.brand)(change.nodeToParent.clone()),
443
+ rebasedCrossFieldKeys: change.crossFieldKeys.clone(),
481
444
  nodeIdPairs: [],
482
- affectedBaseFields,
445
+ affectedBaseFields: (0, index_js_3.newTupleBTree)(),
483
446
  fieldsWithUnattachedChild: new Set(),
484
447
  };
485
448
  const getBaseRevisions = () => revisionInfoFromTaggedChange(over).map((info) => info.revision);
@@ -489,9 +452,8 @@ class ModularChangeFamily {
489
452
  getBaseRevisions,
490
453
  };
491
454
  const rebasedNodes = (0, index_js_3.brand)(change.nodeChanges.clone());
492
- const rebasedFields = this.rebaseIntersectingFields(nodesToRebase, crossFieldTable, rebasedNodes, genId, rebaseMetadata);
493
- this.rebaseInvalidatedFields(rebasedFields, rebasedNodes, crossFieldTable, rebaseMetadata, genId);
494
- fixupRebasedDetachLocations(crossFieldTable);
455
+ const rebasedFields = this.rebaseIntersectingFields(crossFieldTable, rebasedNodes, genId, rebaseMetadata);
456
+ this.rebaseInvalidatedElements(rebasedFields, rebasedNodes, crossFieldTable, rebaseMetadata, genId);
495
457
  const constraintState = newConstraintState(change.constraintViolationCount ?? 0);
496
458
  const revertConstraintState = newConstraintState(change.constraintViolationCountOnRevert ?? 0);
497
459
  let noChangeConstraint = change.noChangeConstraint;
@@ -499,17 +461,13 @@ class ModularChangeFamily {
499
461
  noChangeConstraint = { violated: true };
500
462
  constraintState.violationCount += 1;
501
463
  }
502
- this.updateConstraints(rebasedFields, rebasedNodes, rebasedRootNodes, constraintState, revertConstraintState);
503
- const fieldsWithRootMoves = getFieldsWithRootMoves(crossFieldTable.rebasedRootNodes, change.nodeAliases);
504
- const fieldToRootChanges = getFieldToRootChanges(crossFieldTable.rebasedRootNodes, change.nodeAliases);
464
+ this.updateConstraintsForFields(rebasedFields, fieldChangeHandler_js_1.NodeAttachState.Attached, fieldChangeHandler_js_1.NodeAttachState.Attached, constraintState, revertConstraintState, rebasedNodes);
505
465
  const rebased = makeModularChangeset({
506
- fieldChanges: this.pruneFieldMap(rebasedFields, undefined, rebasedNodes, crossFieldTable.rebasedNodeToParent, change.nodeAliases, crossFieldTable.rebasedRootNodes, fieldsWithRootMoves, fieldToRootChanges),
466
+ fieldChanges: this.pruneFieldMap(rebasedFields, rebasedNodes),
507
467
  nodeChanges: rebasedNodes,
508
468
  nodeToParent: crossFieldTable.rebasedNodeToParent,
509
- rootNodes: this.pruneRoots(crossFieldTable.rebasedRootNodes, rebasedNodes, crossFieldTable.rebasedNodeToParent, change.nodeAliases, fieldsWithRootMoves, fieldToRootChanges),
510
- // TODO: Do we need to include aliases for node changesets added during rebasing?
511
469
  nodeAliases: change.nodeAliases,
512
- crossFieldKeys: rebaseCrossFieldKeys(change.crossFieldKeys, crossFieldTable.movedDetaches, crossFieldTable.rebasedDetachLocations),
470
+ crossFieldKeys: crossFieldTable.rebasedCrossFieldKeys,
513
471
  maxId: idState.maxId,
514
472
  revisions: change.revisions,
515
473
  constraintViolationCount: constraintState.violationCount,
@@ -519,22 +477,15 @@ class ModularChangeFamily {
519
477
  builds: change.builds,
520
478
  destroys: change.destroys,
521
479
  refreshers: change.refreshers,
522
- rebaseVersion,
523
480
  });
524
- // XXX: This is an expensive assert which should be disabled before merging.
525
- validateChangeset(rebased, this.fieldKinds);
526
481
  return rebased;
527
482
  }
528
483
  // This performs a first pass on all fields which have both new and base changes.
529
484
  // TODO: Can we also handle additional passes in this method?
530
- rebaseIntersectingFields(rootChanges, crossFieldTable, rebasedNodes, genId, metadata) {
485
+ rebaseIntersectingFields(crossFieldTable, rebasedNodes, genId, metadata) {
531
486
  const change = crossFieldTable.newChange;
532
487
  const baseChange = crossFieldTable.baseChange;
533
488
  const rebasedFields = this.rebaseFieldMap(change.fieldChanges, baseChange.fieldChanges, undefined, genId, crossFieldTable, metadata);
534
- for (const [newChildChange, baseChildChange] of rootChanges) {
535
- const rebasedNode = this.rebaseNodeChange(newChildChange, baseChildChange, genId, crossFieldTable, metadata);
536
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(rebasedNodes, newChildChange, rebasedNode);
537
- }
538
489
  // This loop processes all fields which have both base and new changes.
539
490
  // Note that the call to `rebaseNodeChange` can add entries to `crossFieldTable.nodeIdPairs`.
540
491
  for (const [newId, baseId, _attachState] of crossFieldTable.nodeIdPairs) {
@@ -543,85 +494,83 @@ class ModularChangeFamily {
543
494
  }
544
495
  return rebasedFields;
545
496
  }
546
- rebaseFieldWithoutNewChanges(baseFieldChange, baseFieldId, crossFieldTable, rebasedFields, rebasedNodes, genId, metadata,
547
- /**
548
- * The ID of a node in `baseFieldChange` which should be included in the rebased field change.
549
- */
550
- baseNodeId) {
551
- // This field has no changes in the new changeset, otherwise it would have been added to
552
- // `crossFieldTable.baseFieldToContext` when processing fields with both base and new changes.
553
- const rebaseChild = (child, baseChild, stateChange) => {
554
- (0, internal_1.assert)(child === undefined, 0x9c3 /* There should be no new changes in this field */);
555
- if (baseChild === undefined || baseNodeId === undefined) {
556
- return undefined;
557
- }
558
- return (0, index_js_2.areEqualChangeAtomIds)(normalizeNodeId(baseChild, crossFieldTable.baseChange.nodeAliases), baseNodeId)
559
- ? baseNodeId
560
- : undefined;
561
- };
562
- const handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);
563
- const fieldChange = {
564
- ...baseFieldChange,
565
- change: (0, index_js_3.brand)(handler.createEmpty()),
566
- };
567
- const rebasedNodeId = baseFieldId.nodeId === undefined
568
- ? undefined
569
- : rebasedNodeIdFromBaseNodeId(crossFieldTable, baseFieldId.nodeId);
570
- const fieldId = { nodeId: rebasedNodeId, field: baseFieldId.field };
571
- const rebasedField = handler.rebaser.rebase(fieldChange.change, baseFieldChange.change, rebaseChild, genId, new RebaseNodeManagerI(crossFieldTable, fieldId), metadata, crossFieldTable.rebaseVersion);
572
- const rebasedFieldChange = {
573
- ...baseFieldChange,
574
- change: (0, index_js_3.brand)(rebasedField),
575
- };
576
- const context = {
577
- newChange: fieldChange,
578
- baseChange: baseFieldChange,
579
- rebasedChange: rebasedFieldChange,
580
- fieldId,
581
- baseNodeIds: (0, index_js_3.newTupleBTree)(),
582
- };
583
- if (baseNodeId !== undefined) {
584
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(context.baseNodeIds, baseNodeId, true);
585
- }
586
- crossFieldTable.baseFieldToContext.set(baseFieldChange, context);
587
- crossFieldTable.rebasedFields.add(rebasedFieldChange);
588
- this.attachRebasedField(rebasedFields, rebasedNodes, crossFieldTable, rebasedFieldChange, fieldId, genId, metadata);
589
- }
590
- rebaseInvalidatedFields(rebasedFields, rebasedNodes, crossFieldTable, rebaseMetadata, genId) {
591
- while (crossFieldTable.affectedBaseFields.size > 0) {
592
- const baseFields = crossFieldTable.affectedBaseFields.clone();
593
- crossFieldTable.affectedBaseFields.clear();
594
- for (const baseFieldIdKey of baseFields.keys()) {
595
- const baseFieldId = normalizeFieldId(fieldIdFromFieldIdKey(baseFieldIdKey), crossFieldTable.baseChange.nodeAliases);
596
- const baseField = fieldChangeFromId(crossFieldTable.baseChange, baseFieldId);
597
- (0, internal_1.assert)(baseField !== undefined, 0x9c2 /* Cross field key registered for empty field */);
598
- const context = crossFieldTable.baseFieldToContext.get(baseField);
599
- if (context === undefined) {
600
- this.rebaseFieldWithoutNewChanges(baseField, baseFieldId, crossFieldTable, rebasedFields, rebasedNodes, genId, rebaseMetadata);
601
- }
602
- else {
603
- this.rebaseInvalidatedField(baseField, crossFieldTable, context, rebaseMetadata, genId);
604
- }
497
+ // This processes fields which have no new changes but have been invalidated by another field.
498
+ rebaseFieldsWithoutNewChanges(rebasedFields, rebasedNodes, crossFieldTable, genId, metadata) {
499
+ const baseChange = crossFieldTable.baseChange;
500
+ for (const [revision, localId, fieldKey] of crossFieldTable.affectedBaseFields.keys()) {
501
+ const baseNodeId = localId === undefined
502
+ ? undefined
503
+ : normalizeNodeId({ revision, localId }, baseChange.nodeAliases);
504
+ const baseFieldChange = fieldMapFromNodeId(baseChange.fieldChanges, baseChange.nodeChanges, baseNodeId).get(fieldKey);
505
+ (0, internal_1.assert)(baseFieldChange !== undefined, 0x9c2 /* Cross field key registered for empty field */);
506
+ if (crossFieldTable.baseFieldToContext.has(baseFieldChange)) {
507
+ // This field has already been processed because there were changes to rebase.
508
+ continue;
605
509
  }
510
+ // This field has no changes in the new changeset, otherwise it would have been added to
511
+ // `crossFieldTable.baseFieldToContext` when processing fields with both base and new changes.
512
+ const handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);
513
+ const fieldChange = {
514
+ ...baseFieldChange,
515
+ change: (0, index_js_3.brand)(handler.createEmpty()),
516
+ };
517
+ const rebasedNodeId = baseNodeId === undefined
518
+ ? undefined
519
+ : rebasedNodeIdFromBaseNodeId(crossFieldTable, baseNodeId);
520
+ const fieldId = { nodeId: rebasedNodeId, field: fieldKey };
521
+ const rebasedField = handler.rebaser.rebase(fieldChange.change, baseFieldChange.change, noNewChangesRebaseChild, genId, new RebaseManager(crossFieldTable, baseFieldChange, fieldId), metadata);
522
+ const rebasedFieldChange = {
523
+ ...baseFieldChange,
524
+ change: (0, index_js_3.brand)(rebasedField),
525
+ };
526
+ // TODO: Deduplicate
527
+ crossFieldTable.baseFieldToContext.set(baseFieldChange, {
528
+ newChange: fieldChange,
529
+ baseChange: baseFieldChange,
530
+ rebasedChange: rebasedFieldChange,
531
+ fieldId,
532
+ baseNodeIds: [],
533
+ });
534
+ crossFieldTable.rebasedFields.add(rebasedFieldChange);
535
+ this.attachRebasedField(rebasedFields, rebasedNodes, crossFieldTable, rebasedFieldChange, fieldId, genId, metadata);
536
+ }
537
+ }
538
+ rebaseInvalidatedElements(rebasedFields, rebasedNodes, table, metadata, idAllocator) {
539
+ this.rebaseFieldsWithoutNewChanges(rebasedFields, rebasedNodes, table, idAllocator, metadata);
540
+ this.rebaseFieldsWithUnattachedChild(table, metadata, idAllocator);
541
+ this.rebaseInvalidatedFields(table, metadata, idAllocator);
542
+ }
543
+ rebaseInvalidatedFields(crossFieldTable, rebaseMetadata, genId) {
544
+ const fieldsToUpdate = crossFieldTable.invalidatedFields;
545
+ crossFieldTable.invalidatedFields = new Set();
546
+ for (const field of fieldsToUpdate) {
547
+ this.rebaseInvalidatedField(field, crossFieldTable, rebaseMetadata, genId);
548
+ }
549
+ }
550
+ rebaseFieldsWithUnattachedChild(table, metadata, idAllocator) {
551
+ for (const field of table.fieldsWithUnattachedChild) {
552
+ table.invalidatedFields.delete(field);
553
+ this.rebaseInvalidatedField(field, table, metadata, idAllocator, true);
606
554
  }
607
555
  }
608
- rebaseInvalidatedField(baseField, crossFieldTable, context, rebaseMetadata, genId) {
556
+ rebaseInvalidatedField(baseField, crossFieldTable, rebaseMetadata, genId, allowInval = false) {
557
+ const context = crossFieldTable.baseFieldToContext.get(baseField);
558
+ (0, internal_1.assert)(context !== undefined, 0x852 /* Every field should have a context */);
609
559
  const { changeHandler, change1: fieldChangeset, change2: baseChangeset, } = this.normalizeFieldChanges(context.newChange, context.baseChange);
610
560
  const rebaseChild = (curr, base) => {
611
561
  if (curr !== undefined) {
612
562
  return curr;
613
563
  }
614
- if (base !== undefined && (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(context.baseNodeIds, base) === true) {
615
- return base;
564
+ if (base !== undefined) {
565
+ for (const id of context.baseNodeIds) {
566
+ if ((0, index_js_2.areEqualChangeAtomIds)(base, id)) {
567
+ return base;
568
+ }
569
+ }
616
570
  }
617
571
  return undefined;
618
572
  };
619
- let allowInval = false;
620
- if (crossFieldTable.fieldsWithUnattachedChild.has(baseField)) {
621
- crossFieldTable.fieldsWithUnattachedChild.delete(baseField);
622
- allowInval = true;
623
- }
624
- context.rebasedChange.change = (0, index_js_3.brand)(changeHandler.rebaser.rebase(fieldChangeset, baseChangeset, rebaseChild, genId, new RebaseNodeManagerI(crossFieldTable, context.fieldId, allowInval), rebaseMetadata, crossFieldTable.rebaseVersion));
573
+ context.rebasedChange.change = (0, index_js_3.brand)(changeHandler.rebaser.rebase(fieldChangeset, baseChangeset, rebaseChild, genId, new RebaseManager(crossFieldTable, baseField, context.fieldId, allowInval), rebaseMetadata));
625
574
  }
626
575
  attachRebasedField(rebasedFields, rebasedNodes, table, rebasedField, { nodeId, field: fieldKey }, idAllocator, metadata) {
627
576
  if (nodeId === undefined) {
@@ -630,14 +579,12 @@ class ModularChangeFamily {
630
579
  }
631
580
  const rebasedNode = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(rebasedNodes, nodeId);
632
581
  if (rebasedNode !== undefined) {
633
- const updatedRebasedNode = cloneNodeChangeset(rebasedNode);
634
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(rebasedNodes, nodeId, updatedRebasedNode);
635
- if (updatedRebasedNode.fieldChanges === undefined) {
636
- updatedRebasedNode.fieldChanges = new Map([[fieldKey, rebasedField]]);
582
+ if (rebasedNode.fieldChanges === undefined) {
583
+ rebasedNode.fieldChanges = new Map([[fieldKey, rebasedField]]);
637
584
  return;
638
585
  }
639
- (0, internal_1.assert)(!updatedRebasedNode.fieldChanges.has(fieldKey), 0x9c4 /* Expected an empty field */);
640
- updatedRebasedNode.fieldChanges.set(fieldKey, rebasedField);
586
+ (0, internal_1.assert)(!rebasedNode.fieldChanges.has(fieldKey), 0x9c4 /* Expected an empty field */);
587
+ rebasedNode.fieldChanges.set(fieldKey, rebasedField);
641
588
  return;
642
589
  }
643
590
  const newNode = {
@@ -645,51 +592,39 @@ class ModularChangeFamily {
645
592
  };
646
593
  (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(rebasedNodes, nodeId, newNode);
647
594
  (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(table.baseToRebasedNodeId, nodeId, nodeId);
648
- const parentBase = getNodeParent(table.baseChange, nodeId);
649
- this.attachRebasedNode(rebasedFields, rebasedNodes, table, nodeId, parentBase, idAllocator, metadata);
650
- }
651
- attachRebasedNode(rebasedFields, rebasedNodes, table, baseNodeId, parentBase, idAllocator, metadata) {
652
- if (parentBase.root !== undefined) {
653
- const renamedRoot = firstAttachIdFromDetachId(table.baseChange.rootNodes, parentBase.root, 1).value;
654
- const attachField = table.baseChange.crossFieldKeys.getFirst({ ...renamedRoot, target: crossFieldQueries_js_1.CrossFieldTarget.Destination }, 1).value;
655
- if (attachField === undefined) {
656
- const baseDetachLocation = table.baseChange.rootNodes.detachLocations.getFirst(parentBase.root, 1).value;
657
- assignRootChange(table.rebasedRootNodes, table.rebasedNodeToParent, renamedRoot, baseNodeId, baseDetachLocation, table.rebaseVersion);
658
- // We need to make sure the rebased changeset includes the detach location,
659
- // so we add that field to `affectedBaseFields` unless it's already been processed.
660
- if (baseDetachLocation !== undefined &&
661
- !table.baseFieldToContext.has(fieldChangeFromId(table.baseChange, baseDetachLocation))) {
662
- table.affectedBaseFields.set(fieldIdKeyFromFieldId(baseDetachLocation), true);
663
- }
664
- }
665
- else {
666
- // The base change inserts this node into `attachField`, so the rebased change should represent this node there.
667
- const normalizedAttachField = normalizeFieldId(attachField, table.baseChange.nodeAliases);
668
- const entry = table.entries.getFirst(renamedRoot, 1).value ?? {};
669
- table.entries.set(renamedRoot, 1, { ...entry, nodeChange: baseNodeId });
670
- table.affectedBaseFields.set(fieldIdKeyFromFieldId(normalizedAttachField), true);
671
- this.attachRebasedNode(rebasedFields, rebasedNodes, table, baseNodeId, { field: normalizedAttachField }, idAllocator, metadata);
672
- }
673
- return;
674
- }
675
- const parentFieldIdBase = parentBase.field;
676
- const baseFieldChange = fieldChangeFromId(table.baseChange, parentFieldIdBase);
595
+ const parentFieldId = getParentFieldId(table.baseChange, nodeId);
596
+ this.attachRebasedNode(rebasedFields, rebasedNodes, table, nodeId, parentFieldId, idAllocator, metadata);
597
+ }
598
+ attachRebasedNode(rebasedFields, rebasedNodes, table, baseNodeId, parentFieldIdBase, idAllocator, metadata) {
599
+ const baseFieldChange = fieldChangeFromId(table.baseChange.fieldChanges, table.baseChange.nodeChanges, parentFieldIdBase);
677
600
  const rebasedFieldId = rebasedFieldIdFromBaseId(table, parentFieldIdBase);
678
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(table.rebasedNodeToParent, baseNodeId, { field: rebasedFieldId });
601
+ (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(table.rebasedNodeToParent, baseNodeId, rebasedFieldId);
679
602
  const context = table.baseFieldToContext.get(baseFieldChange);
680
603
  if (context !== undefined) {
681
604
  // We've already processed this field.
682
- // The new child node will be attached in the next pass.
683
- // Note that adding to `fieldsWithUnattachedChild` allows that field to generate new invalidations,
684
- // so to avoid invalidation cycles we make sure we only add to it once per new unattached child.
685
- // This is done by checking whether `context.baseNodeIds` already contained `baseNodeId`.
686
- if ((0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(context.baseNodeIds, baseNodeId, true)) {
687
- table.fieldsWithUnattachedChild.add(baseFieldChange);
688
- table.affectedBaseFields.set(fieldIdKeyFromFieldId(parentFieldIdBase), true);
689
- }
605
+ // The new child node will be attached in rebaseFieldsWithUnattachedChild.
606
+ context.baseNodeIds.push(baseNodeId);
607
+ table.fieldsWithUnattachedChild.add(baseFieldChange);
690
608
  return;
691
609
  }
692
- this.rebaseFieldWithoutNewChanges(baseFieldChange, parentFieldIdBase, table, rebasedFields, rebasedNodes, idAllocator, metadata, baseNodeId);
610
+ const handler = getChangeHandler(this.fieldKinds, baseFieldChange.fieldKind);
611
+ const fieldChange = {
612
+ ...baseFieldChange,
613
+ change: (0, index_js_3.brand)(handler.createEmpty()),
614
+ };
615
+ const rebasedChangeset = handler.rebaser.rebase(handler.createEmpty(), baseFieldChange.change, (_idNew, idBase) => idBase !== undefined && (0, index_js_2.areEqualChangeAtomIds)(idBase, baseNodeId)
616
+ ? baseNodeId
617
+ : undefined, idAllocator, new RebaseManager(table, baseFieldChange, rebasedFieldId), metadata);
618
+ const rebasedField = { ...baseFieldChange, change: (0, index_js_3.brand)(rebasedChangeset) };
619
+ table.rebasedFields.add(rebasedField);
620
+ table.baseFieldToContext.set(baseFieldChange, {
621
+ newChange: fieldChange,
622
+ baseChange: baseFieldChange,
623
+ rebasedChange: rebasedField,
624
+ fieldId: rebasedFieldId,
625
+ baseNodeIds: [],
626
+ });
627
+ this.attachRebasedField(rebasedFields, rebasedNodes, table, rebasedField, rebasedFieldId, idAllocator, metadata);
693
628
  }
694
629
  rebaseFieldMap(change, over, parentId, genId, crossFieldTable, revisionMetadata) {
695
630
  const rebasedFields = new Map();
@@ -707,8 +642,8 @@ class ModularChangeFamily {
707
642
  continue;
708
643
  }
709
644
  const { fieldKind, changeHandler, change1: fieldChangeset, change2: baseChangeset, } = this.normalizeFieldChanges(fieldChange, baseChange);
710
- const manager = new RebaseNodeManagerI(crossFieldTable, fieldId);
711
- const rebasedField = changeHandler.rebaser.rebase(fieldChangeset, baseChangeset, rebaseChild, genId, manager, revisionMetadata, crossFieldTable.rebaseVersion);
645
+ const manager = new RebaseManager(crossFieldTable, baseChange, fieldId);
646
+ const rebasedField = changeHandler.rebaser.rebase(fieldChangeset, baseChangeset, rebaseChild, genId, manager, revisionMetadata);
712
647
  const rebasedFieldChange = {
713
648
  fieldKind,
714
649
  change: (0, index_js_3.brand)(rebasedField),
@@ -719,15 +654,15 @@ class ModularChangeFamily {
719
654
  newChange: fieldChange,
720
655
  rebasedChange: rebasedFieldChange,
721
656
  fieldId,
722
- baseNodeIds: (0, index_js_3.newTupleBTree)(),
657
+ baseNodeIds: [],
723
658
  });
724
659
  crossFieldTable.rebasedFields.add(rebasedFieldChange);
725
660
  }
726
661
  return rebasedFields;
727
662
  }
728
663
  rebaseNodeChange(newId, baseId, genId, crossFieldTable, revisionMetadata) {
729
- const change = nodeChangeFromId(crossFieldTable.newChange.nodeChanges, crossFieldTable.newChange.nodeAliases, newId);
730
- const over = nodeChangeFromId(crossFieldTable.baseChange.nodeChanges, crossFieldTable.baseChange.nodeAliases, baseId);
664
+ const change = nodeChangeFromId(crossFieldTable.newChange.nodeChanges, newId);
665
+ const over = nodeChangeFromId(crossFieldTable.baseChange.nodeChanges, baseId);
731
666
  const baseMap = over?.fieldChanges ?? new Map();
732
667
  const fieldChanges = change.fieldChanges !== undefined && over.fieldChanges !== undefined
733
668
  ? this.rebaseFieldMap(change?.fieldChanges ?? new Map(), baseMap, newId, genId, crossFieldTable, revisionMetadata)
@@ -745,37 +680,28 @@ class ModularChangeFamily {
745
680
  (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(crossFieldTable.baseToRebasedNodeId, baseId, newId);
746
681
  return rebasedChange;
747
682
  }
748
- updateConstraints(rebasedFields, rebasedNodes, rebasedRoots, constraintState, revertConstraintState) {
749
- this.updateConstraintsForFields(rebasedFields, fieldChangeHandler_js_1.NodeAttachState.Attached, fieldChangeHandler_js_1.NodeAttachState.Attached, constraintState, revertConstraintState, rebasedNodes);
750
- for (const [_detachId, nodeId] of rebasedRoots.nodeChanges.entries()) {
751
- // XXX: This is incorrect if the rebased changeset attaches the node.
752
- // Efficiently computing whether the changeset attaches the node would require maintaining a mapping from node ID to attach ID.
753
- const detachedInOutput = true;
754
- this.updateConstraintsForNode(nodeId, fieldChangeHandler_js_1.NodeAttachState.Detached, detachedInOutput ? fieldChangeHandler_js_1.NodeAttachState.Detached : fieldChangeHandler_js_1.NodeAttachState.Attached, rebasedNodes, constraintState, revertConstraintState);
755
- }
756
- }
757
683
  updateConstraintsForFields(fields, parentInputAttachState, parentOutputAttachState, constraintState, revertConstraintState, nodes) {
758
684
  for (const field of fields.values()) {
759
685
  const handler = getChangeHandler(this.fieldKinds, field.fieldKind);
760
- for (const [nodeId] of handler.getNestedChanges(field.change)) {
761
- // XXX: This is incorrect if the rebased changeset detaches this node.
762
- // Efficiently computing whether the changeset detaches the node would require maintaining a mapping from node ID to detach ID.
763
- const isOutputDetached = false;
686
+ for (const [nodeId, inputIndex, outputIndex] of handler.getNestedChanges(field.change)) {
687
+ const isInputDetached = inputIndex === undefined;
688
+ const inputAttachState = parentInputAttachState === fieldChangeHandler_js_1.NodeAttachState.Detached || isInputDetached
689
+ ? fieldChangeHandler_js_1.NodeAttachState.Detached
690
+ : fieldChangeHandler_js_1.NodeAttachState.Attached;
691
+ const isOutputDetached = outputIndex === undefined;
764
692
  const outputAttachState = parentOutputAttachState === fieldChangeHandler_js_1.NodeAttachState.Detached || isOutputDetached
765
693
  ? fieldChangeHandler_js_1.NodeAttachState.Detached
766
694
  : fieldChangeHandler_js_1.NodeAttachState.Attached;
767
- this.updateConstraintsForNode(nodeId, parentInputAttachState, outputAttachState, nodes, constraintState, revertConstraintState);
695
+ this.updateConstraintsForNode(nodeId, inputAttachState, outputAttachState, nodes, constraintState, revertConstraintState);
768
696
  }
769
697
  }
770
698
  }
771
699
  updateConstraintsForNode(nodeId, inputAttachState, outputAttachState, nodes, constraintState, revertConstraintState) {
772
- const node = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodes, nodeId) ?? (0, internal_1.fail)(0xb24 /* Unknown node ID */);
773
- const updatedNode = { ...node };
774
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodes, nodeId, updatedNode);
700
+ const node = nodes.get([nodeId.revision, nodeId.localId]) ?? (0, internal_1.fail)(0xb24 /* Unknown node ID */);
775
701
  if (node.nodeExistsConstraint !== undefined) {
776
702
  const isNowViolated = inputAttachState === fieldChangeHandler_js_1.NodeAttachState.Detached;
777
703
  if (node.nodeExistsConstraint.violated !== isNowViolated) {
778
- updatedNode.nodeExistsConstraint = {
704
+ node.nodeExistsConstraint = {
779
705
  ...node.nodeExistsConstraint,
780
706
  violated: isNowViolated,
781
707
  };
@@ -785,7 +711,7 @@ class ModularChangeFamily {
785
711
  if (node.nodeExistsConstraintOnRevert !== undefined) {
786
712
  const isNowViolated = outputAttachState === fieldChangeHandler_js_1.NodeAttachState.Detached;
787
713
  if (node.nodeExistsConstraintOnRevert.violated !== isNowViolated) {
788
- updatedNode.nodeExistsConstraintOnRevert = {
714
+ node.nodeExistsConstraintOnRevert = {
789
715
  ...node.nodeExistsConstraintOnRevert,
790
716
  violated: isNowViolated,
791
717
  };
@@ -796,82 +722,41 @@ class ModularChangeFamily {
796
722
  this.updateConstraintsForFields(node.fieldChanges, inputAttachState, outputAttachState, constraintState, revertConstraintState, nodes);
797
723
  }
798
724
  }
799
- pruneFieldMap(changeset, parentId, nodeMap, nodeToParent, aliases, roots, fieldsWithRootMoves, fieldsToRootChanges) {
725
+ pruneFieldMap(changeset, nodeMap) {
800
726
  if (changeset === undefined) {
801
727
  return undefined;
802
728
  }
803
729
  const prunedChangeset = new Map();
804
730
  for (const [field, fieldChange] of changeset) {
805
731
  const handler = getChangeHandler(this.fieldKinds, fieldChange.fieldKind);
806
- const prunedFieldChangeset = handler.rebaser.prune(fieldChange.change, (nodeId) => this.pruneNodeChange(nodeId, nodeMap, nodeToParent, aliases, roots, fieldsWithRootMoves, fieldsToRootChanges));
807
- const fieldId = { nodeId: parentId, field };
808
- const fieldIdKey = fieldIdKeyFromFieldId(fieldId);
809
- const rootsWithChanges = fieldsToRootChanges.get(fieldIdKey) ?? [];
810
- let hasRootWithNodeChange = false;
811
- for (const rootId of rootsWithChanges) {
812
- const nodeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(roots.nodeChanges, rootId) ?? (0, internal_1.fail)("No root change found");
813
- const isRootChangeEmpty = this.pruneNodeChange(nodeId, nodeMap, nodeToParent, aliases, roots, fieldsWithRootMoves, fieldsToRootChanges) === undefined;
814
- if (isRootChangeEmpty) {
815
- roots.nodeChanges.delete([rootId.revision, rootId.localId]);
816
- tryRemoveDetachLocation(roots, rootId, 1);
817
- }
818
- else {
819
- hasRootWithNodeChange = true;
820
- }
821
- }
822
- const hasRootChanges = hasRootWithNodeChange || fieldsWithRootMoves.get(fieldIdKey) === true;
823
- if (!handler.isEmpty(prunedFieldChangeset) || hasRootChanges) {
732
+ const prunedFieldChangeset = handler.rebaser.prune(fieldChange.change, (nodeId) => this.pruneNodeChange(nodeId, nodeMap));
733
+ if (!handler.isEmpty(prunedFieldChangeset)) {
824
734
  prunedChangeset.set(field, { ...fieldChange, change: (0, index_js_3.brand)(prunedFieldChangeset) });
825
735
  }
826
736
  }
827
737
  return prunedChangeset.size > 0 ? prunedChangeset : undefined;
828
738
  }
829
- pruneRoots(roots, nodeMap, nodeToParent, aliases, fieldsWithRootMoves, fieldsToRootChanges) {
830
- const pruned = { ...roots, nodeChanges: (0, index_js_3.newTupleBTree)() };
831
- for (const [rootIdKey, nodeId] of roots.nodeChanges.entries()) {
832
- const rootId = { revision: rootIdKey[0], localId: rootIdKey[1] };
833
- const hasDetachLocation = roots.detachLocations.getFirst(rootId, 1).value !== undefined;
834
- // If the root has a detach location it should be pruned by recursion when pruning the field it was detached from.
835
- const prunedId = hasDetachLocation
836
- ? nodeId
837
- : this.pruneNodeChange(nodeId, nodeMap, nodeToParent, aliases, roots, fieldsWithRootMoves, fieldsToRootChanges);
838
- if (prunedId !== undefined) {
839
- pruned.nodeChanges.set(rootIdKey, prunedId);
840
- }
841
- tryRemoveDetachLocation(pruned, rootId, 1);
842
- }
843
- return pruned;
844
- }
845
- pruneNodeChange(nodeId, nodes, nodeToParent, aliases, roots, fieldsWithRootMoves, fieldsToRootChanges) {
846
- const changeset = nodeChangeFromId(nodes, aliases, nodeId);
739
+ pruneNodeChange(nodeId, nodeMap) {
740
+ const changeset = nodeChangeFromId(nodeMap, nodeId);
847
741
  const prunedFields = changeset.fieldChanges === undefined
848
742
  ? undefined
849
- : this.pruneFieldMap(changeset.fieldChanges, nodeId, nodes, nodeToParent, aliases, roots, fieldsWithRootMoves, fieldsToRootChanges);
743
+ : this.pruneFieldMap(changeset.fieldChanges, nodeMap);
850
744
  const prunedChange = { ...changeset, fieldChanges: prunedFields };
851
745
  if (prunedChange.fieldChanges === undefined) {
852
746
  delete prunedChange.fieldChanges;
853
747
  }
854
748
  if (isEmptyNodeChangeset(prunedChange)) {
855
- const nodeIdKey = [
856
- nodeId.revision,
857
- nodeId.localId,
858
- ];
859
- // TODO: Shouldn't we also delete all aliases associated with this node?
860
- nodes.delete(nodeIdKey);
861
- nodeToParent.delete(nodeIdKey);
749
+ nodeMap.delete([nodeId.revision, nodeId.localId]);
862
750
  return undefined;
863
751
  }
864
752
  else {
865
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodes, nodeId, prunedChange);
753
+ (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeMap, nodeId, prunedChange);
866
754
  return nodeId;
867
755
  }
868
756
  }
869
757
  getRevisions(change) {
870
- if (change.revisions === undefined || change.revisions.length === 0) {
871
- return new Set([undefined]);
872
- }
873
758
  const aggregated = new Set();
874
- for (const revInfo of change.revisions) {
759
+ for (const revInfo of change.revisions ?? [{ revision: undefined }]) {
875
760
  aggregated.add(revInfo.revision);
876
761
  }
877
762
  return aggregated;
@@ -879,13 +764,12 @@ class ModularChangeFamily {
879
764
  changeRevision(change, replacer) {
880
765
  const updatedFields = this.replaceFieldMapRevisions(change.fieldChanges, replacer);
881
766
  const updatedNodes = replaceIdMapRevisions(change.nodeChanges, replacer, (nodeChangeset) => this.replaceNodeChangesetRevisions(nodeChangeset, replacer));
882
- const updatedNodeToParent = replaceIdMapRevisions(change.nodeToParent, replacer, (location) => replaceNodeLocationRevision(normalizeNodeLocation(location, change.nodeAliases), replacer));
767
+ const updatedNodeToParent = replaceIdMapRevisions(change.nodeToParent, replacer, (fieldId) => replaceFieldIdRevision(normalizeFieldId(fieldId, change.nodeAliases), replacer));
883
768
  const updated = {
884
769
  ...change,
885
770
  fieldChanges: updatedFields,
886
771
  nodeChanges: updatedNodes,
887
772
  nodeToParent: updatedNodeToParent,
888
- rootNodes: replaceRootTableRevision(change.rootNodes, replacer, change.nodeAliases),
889
773
  // We've updated all references to old node IDs, so we no longer need an alias table.
890
774
  nodeAliases: (0, index_js_3.newTupleBTree)(),
891
775
  crossFieldKeys: replaceCrossFieldKeyTableRevisions(change.crossFieldKeys, replacer, change.nodeAliases),
@@ -918,7 +802,7 @@ class ModularChangeFamily {
918
802
  return updatedFields;
919
803
  }
920
804
  makeCrossFieldKeyTable(fields, nodes) {
921
- const keys = (0, modularChangeTypes_js_1.newCrossFieldRangeTable)();
805
+ const keys = (0, modularChangeTypes_js_1.newCrossFieldKeyTable)();
922
806
  this.populateCrossFieldKeyTableForFieldMap(keys, fields, undefined);
923
807
  nodes.forEachPair(([revision, localId], node) => {
924
808
  if (node.fieldChanges !== undefined) {
@@ -945,6 +829,42 @@ class ModularChangeFamily {
945
829
  const emptyChange = getChangeHandler(this.fieldKinds, fieldKind).createEmpty();
946
830
  return { fieldKind, change: (0, index_js_3.brand)(emptyChange) };
947
831
  }
832
+ validateChangeset(change) {
833
+ let numNodes = this.validateFieldChanges(change, change.fieldChanges, undefined);
834
+ for (const [[revision, localId], node] of change.nodeChanges.entries()) {
835
+ if (node.fieldChanges === undefined) {
836
+ continue;
837
+ }
838
+ const nodeId = { revision, localId };
839
+ const numChildren = this.validateFieldChanges(change, node.fieldChanges, nodeId);
840
+ numNodes += numChildren;
841
+ }
842
+ (0, internal_1.assert)(numNodes === change.nodeChanges.size, 0xa4d /* Node table contains unparented nodes */);
843
+ }
844
+ /**
845
+ * Asserts that each child and cross field key in each field has a correct entry in
846
+ * `nodeToParent` or `crossFieldKeyTable`.
847
+ * @returns the number of children found.
848
+ */
849
+ validateFieldChanges(change, fieldChanges, nodeParent) {
850
+ let numChildren = 0;
851
+ for (const [field, fieldChange] of fieldChanges.entries()) {
852
+ const fieldId = { nodeId: nodeParent, field };
853
+ const handler = getChangeHandler(this.fieldKinds, fieldChange.fieldKind);
854
+ for (const [child, _index] of handler.getNestedChanges(fieldChange.change)) {
855
+ const parentFieldId = getParentFieldId(change, child);
856
+ (0, internal_1.assert)(areEqualFieldIds(parentFieldId, fieldId), 0xa4e /* Inconsistent node parentage */);
857
+ numChildren += 1;
858
+ }
859
+ for (const keyRange of handler.getCrossFieldKeys(fieldChange.change)) {
860
+ const fields = getFieldsForCrossFieldKey(change, keyRange.key, keyRange.count);
861
+ (0, internal_1.assert)(fields.length === 1 &&
862
+ fields[0] !== undefined &&
863
+ areEqualFieldIds(fields[0], fieldId), 0xa4f /* Inconsistent cross field keys */);
864
+ }
865
+ }
866
+ return numChildren;
867
+ }
948
868
  getEffectiveChange(change) {
949
869
  if (hasConflicts(change)) {
950
870
  return this.muteChange(change);
@@ -957,8 +877,7 @@ class ModularChangeFamily {
957
877
  muteChange(change) {
958
878
  const muted = {
959
879
  ...change,
960
- rootNodes: muteRootChanges(change.rootNodes),
961
- crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldRangeTable)(),
880
+ crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
962
881
  fieldChanges: this.muteFieldChanges(change.fieldChanges),
963
882
  nodeChanges: (0, index_js_3.brand)(change.nodeChanges.mapValues((v) => this.muteNodeChange(v))),
964
883
  };
@@ -987,7 +906,7 @@ class ModularChangeFamily {
987
906
  exports.ModularChangeFamily = ModularChangeFamily;
988
907
  ModularChangeFamily.emptyChange = makeModularChangeset();
989
908
  function replaceCrossFieldKeyTableRevisions(table, replacer, nodeAliases) {
990
- const updated = (0, modularChangeTypes_js_1.newCrossFieldRangeTable)();
909
+ const updated = (0, modularChangeTypes_js_1.newCrossFieldKeyTable)();
991
910
  for (const entry of table.entries()) {
992
911
  const key = entry.start;
993
912
  const updatedKey = replacer.getUpdatedAtomId(key);
@@ -1046,19 +965,6 @@ function composeBuildsDestroysAndRefreshers(change1, change2) {
1046
965
  }
1047
966
  }
1048
967
  }
1049
- // It's possible to have a build and a refresher for the same root because an attach operation need not be performed in the same changeset as the corresponding build.
1050
- if (change1.builds !== undefined && change2.refreshers !== undefined) {
1051
- for (const [key, chunk] of change2.refreshers.entries()) {
1052
- (0, internal_1.assert)(chunk.topLevelLength === 1, "Expected refresher chunk to have length 1");
1053
- const match = change1.builds.getPairOrNextLower(key);
1054
- if (match !== undefined) {
1055
- const [buildKey, buildChunk] = match;
1056
- if (buildKey[0] === key[0] && buildKey[1] + buildChunk.topLevelLength > key[1]) {
1057
- allRefreshers.delete(key);
1058
- }
1059
- }
1060
- }
1061
- }
1062
968
  return { allBuilds, allDestroys, allRefreshers };
1063
969
  }
1064
970
  function invertBuilds(builds) {
@@ -1083,53 +989,20 @@ function invertBuilds(builds) {
1083
989
  * @param fieldKinds - The field kinds to delegate to.
1084
990
  */
1085
991
  function* relevantRemovedRoots(change, fieldKinds) {
1086
- const rootIds = (0, index_js_2.newChangeAtomIdRangeMap)();
1087
- addAttachesToSet(change, rootIds);
1088
- addRenamesToSet(change, rootIds);
1089
- for (const [[revision, localId]] of change.rootNodes.nodeChanges.entries()) {
1090
- rootIds.set({ revision, localId }, 1, true);
1091
- }
1092
- for (const entry of rootIds.entries()) {
1093
- for (let offset = 0; offset < entry.length; offset++) {
1094
- const detachId = (0, index_js_2.offsetChangeAtomId)(entry.start, offset);
1095
- yield (0, index_js_2.makeDetachedNodeId)(detachId.revision, detachId.localId);
1096
- }
1097
- }
992
+ yield* relevantRemovedRootsFromFields(change.fieldChanges, change.nodeChanges, fieldKinds);
1098
993
  }
1099
994
  exports.relevantRemovedRoots = relevantRemovedRoots;
1100
- function* getBuildIds(change) {
1101
- if (change.builds !== undefined) {
1102
- for (const [[revision, localId]] of change.builds.entries()) {
1103
- yield (0, index_js_2.makeDetachedNodeId)(revision, localId);
1104
- }
1105
- }
1106
- }
1107
- exports.getBuildIds = getBuildIds;
1108
- function addAttachesToSet(change, rootIds) {
1109
- // This includes each attach which does not have a corresponding detach.
1110
- for (const entry of change.crossFieldKeys.entries()) {
1111
- if (entry.start.target !== crossFieldQueries_js_1.CrossFieldTarget.Destination) {
1112
- continue;
1113
- }
1114
- for (const detachIdEntry of change.rootNodes.newToOldId.getAll2(entry.start, entry.length)) {
1115
- const detachId = detachIdEntry.value ?? (0, index_js_2.offsetChangeAtomId)(entry.start, detachIdEntry.offset);
1116
- for (const detachEntry of change.crossFieldKeys.getAll2({ ...detachId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, detachIdEntry.length)) {
1117
- if (detachEntry.value === undefined) {
1118
- rootIds.set((0, index_js_2.offsetChangeAtomId)(detachId, detachEntry.offset), detachEntry.length, true);
1119
- }
1120
- }
1121
- }
995
+ function* relevantRemovedRootsFromNode(node, nodeChanges, fieldKinds) {
996
+ const nodeChangeset = nodeChangeFromId(nodeChanges, node);
997
+ if (nodeChangeset.fieldChanges !== undefined) {
998
+ yield* relevantRemovedRootsFromFields(nodeChangeset.fieldChanges, nodeChanges, fieldKinds);
1122
999
  }
1123
1000
  }
1124
- function addRenamesToSet(change, rootIds) {
1125
- for (const renameEntry of change.rootNodes.oldToNewId.entries()) {
1126
- for (const detachEntry of change.crossFieldKeys.getAll2({ ...renameEntry.start, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, renameEntry.length)) {
1127
- // We only want to include renames of nodes which are detached in the input context of the changeset.
1128
- // So if there is a detach for the node, the rename is not relevant.
1129
- if (detachEntry.value === undefined) {
1130
- rootIds.set(renameEntry.start, renameEntry.length, true);
1131
- }
1132
- }
1001
+ function* relevantRemovedRootsFromFields(change, nodeChanges, fieldKinds) {
1002
+ const delegate = (node) => relevantRemovedRootsFromNode(node, nodeChanges, fieldKinds);
1003
+ for (const [_, fieldChange] of change) {
1004
+ const handler = getChangeHandler(fieldKinds, fieldChange.fieldKind);
1005
+ yield* handler.relevantRemovedRoots(fieldChange.change, delegate);
1133
1006
  }
1134
1007
  }
1135
1008
  /**
@@ -1175,14 +1048,13 @@ function updateRefreshers(change, getDetachedNode, removedRoots, requireRefreshe
1175
1048
  refreshers.set([root.major, (0, index_js_3.brand)(root.minor)], node);
1176
1049
  }
1177
1050
  }
1178
- const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys, maxId, revisions, constraintViolationCount, constraintViolationCountOnRevert, builds, destroys, rootNodes, } = change;
1051
+ const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys, maxId, revisions, constraintViolationCount, constraintViolationCountOnRevert, builds, destroys, } = change;
1179
1052
  return makeModularChangeset({
1180
1053
  fieldChanges,
1181
1054
  nodeChanges,
1182
1055
  nodeToParent,
1183
1056
  nodeAliases,
1184
1057
  crossFieldKeys,
1185
- rootNodes,
1186
1058
  maxId: maxId,
1187
1059
  revisions,
1188
1060
  constraintViolationCount,
@@ -1202,24 +1074,11 @@ exports.updateRefreshers = updateRefreshers;
1202
1074
  function intoDelta(taggedChange, fieldKinds) {
1203
1075
  const change = taggedChange.change;
1204
1076
  const rootDelta = {};
1077
+ const global = [];
1078
+ const rename = [];
1205
1079
  if (!hasConflicts(change)) {
1206
1080
  // If there are no constraint violations, then tree changes apply.
1207
- const fieldDeltas = intoDeltaImpl(change.fieldChanges, change.nodeChanges, change.nodeAliases, fieldKinds);
1208
- const global = [];
1209
- for (const [[major, minor], nodeId] of change.rootNodes.nodeChanges.entries()) {
1210
- global.push({
1211
- id: { major, minor },
1212
- fields: deltaFromNodeChange(nodeChangeFromId(change.nodeChanges, change.nodeAliases, nodeId), change.nodeChanges, change.nodeAliases, fieldKinds),
1213
- });
1214
- }
1215
- const rename = [];
1216
- for (const { start: oldId, value: newId, length, } of change.rootNodes.oldToNewId.entries()) {
1217
- rename.push({
1218
- count: length,
1219
- oldId: (0, index_js_2.makeDetachedNodeId)(oldId.revision, oldId.localId),
1220
- newId: (0, index_js_2.makeDetachedNodeId)(newId.revision, newId.localId),
1221
- });
1222
- }
1081
+ const fieldDeltas = intoDeltaImpl(change.fieldChanges, change.nodeChanges, fieldKinds, global, rename);
1223
1082
  if (fieldDeltas.size > 0) {
1224
1083
  rootDelta.fields = fieldDeltas;
1225
1084
  }
@@ -1266,22 +1125,28 @@ function copyDetachedNodes(detachedNodes) {
1266
1125
  /**
1267
1126
  * @param change - The change to convert into a delta.
1268
1127
  */
1269
- function intoDeltaImpl(change, nodeChanges, nodeAliases, fieldKinds) {
1128
+ function intoDeltaImpl(change, nodeChanges, fieldKinds, global, rename) {
1270
1129
  const delta = new Map();
1271
1130
  for (const [field, fieldChange] of change) {
1272
- const fieldDelta = getChangeHandler(fieldKinds, fieldChange.fieldKind).intoDelta(fieldChange.change, (childChange) => {
1273
- const nodeChange = nodeChangeFromId(nodeChanges, nodeAliases, childChange);
1274
- return deltaFromNodeChange(nodeChange, nodeChanges, nodeAliases, fieldKinds);
1131
+ const { local: fieldChanges, global: fieldGlobal, rename: fieldRename, } = getChangeHandler(fieldKinds, fieldChange.fieldKind).intoDelta(fieldChange.change, (childChange) => {
1132
+ const nodeChange = nodeChangeFromId(nodeChanges, childChange);
1133
+ return deltaFromNodeChange(nodeChange, nodeChanges, fieldKinds, global, rename);
1275
1134
  });
1276
- if (fieldDelta !== undefined && fieldDelta.length > 0) {
1277
- delta.set(field, fieldDelta);
1135
+ if (fieldChanges !== undefined && fieldChanges.length > 0) {
1136
+ delta.set(field, fieldChanges);
1137
+ }
1138
+ for (const c of fieldGlobal ?? []) {
1139
+ global.push(c);
1140
+ }
1141
+ for (const r of fieldRename ?? []) {
1142
+ rename.push(r);
1278
1143
  }
1279
1144
  }
1280
1145
  return delta;
1281
1146
  }
1282
- function deltaFromNodeChange(change, nodeChanges, nodeAliases, fieldKinds) {
1147
+ function deltaFromNodeChange(change, nodeChanges, fieldKinds, global, rename) {
1283
1148
  if (change.fieldChanges !== undefined) {
1284
- return intoDeltaImpl(change.fieldChanges, nodeChanges, nodeAliases, fieldKinds);
1149
+ return intoDeltaImpl(change.fieldChanges, nodeChanges, fieldKinds, global, rename);
1285
1150
  }
1286
1151
  // TODO: update the API to allow undefined to be returned here
1287
1152
  return new Map();
@@ -1331,22 +1196,30 @@ function getChangeHandler(fieldKinds, kind) {
1331
1196
  return getFieldKind(fieldKinds, kind).changeHandler;
1332
1197
  }
1333
1198
  exports.getChangeHandler = getChangeHandler;
1334
- function newComposeTable(baseChange, newChange, composedRootNodes, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions) {
1199
+ function newComposeTable(baseChange, newChange, composedNodeToParent) {
1335
1200
  return {
1336
- rebaseVersion: Math.max(baseChange.rebaseVersion, newChange.rebaseVersion),
1337
- entries: newDetachedEntryMap(),
1201
+ ...newCrossFieldTable(),
1338
1202
  baseChange,
1339
1203
  newChange,
1340
1204
  fieldToContext: new Map(),
1341
1205
  newFieldToBaseField: new Map(),
1342
1206
  newToBaseNodeId: (0, index_js_3.newTupleBTree)(),
1343
1207
  composedNodes: new Set(),
1344
- movedNodeToParent: (0, index_js_3.newTupleBTree)(),
1345
- composedRootNodes,
1346
- movedCrossFieldKeys,
1347
- removedCrossFieldKeys,
1348
- renamesToDelete: (0, index_js_2.newChangeAtomIdRangeMap)(),
1349
- pendingCompositions,
1208
+ composedNodeToParent,
1209
+ pendingCompositions: {
1210
+ nodeIdsToCompose: [],
1211
+ affectedBaseFields: (0, index_js_3.newTupleBTree)(),
1212
+ affectedNewFields: (0, index_js_3.newTupleBTree)(),
1213
+ },
1214
+ };
1215
+ }
1216
+ function newCrossFieldTable() {
1217
+ return {
1218
+ srcTable: (0, index_js_2.newChangeAtomIdRangeMap)(),
1219
+ dstTable: (0, index_js_2.newChangeAtomIdRangeMap)(),
1220
+ srcDependents: (0, index_js_2.newChangeAtomIdRangeMap)(),
1221
+ dstDependents: (0, index_js_2.newChangeAtomIdRangeMap)(),
1222
+ invalidatedFields: new Set(),
1350
1223
  };
1351
1224
  }
1352
1225
  function newConstraintState(violationCount) {
@@ -1354,353 +1227,146 @@ function newConstraintState(violationCount) {
1354
1227
  violationCount,
1355
1228
  };
1356
1229
  }
1357
- class InvertNodeManagerI {
1358
- constructor(table, fieldId) {
1359
- this.table = table;
1360
- this.fieldId = fieldId;
1230
+ class CrossFieldManagerI {
1231
+ constructor(crossFieldTable, currentFieldKey, allowInval = true) {
1232
+ this.crossFieldTable = crossFieldTable;
1233
+ this.currentFieldKey = currentFieldKey;
1234
+ this.allowInval = allowInval;
1361
1235
  }
1362
- invertDetach(detachId, count, nodeChange, newAttachId) {
1363
- if (nodeChange !== undefined) {
1364
- (0, internal_1.assert)(count === 1, "A node change should only affect one node");
1365
- const attachEntry = firstAttachIdFromDetachId(this.table.change.rootNodes, detachId, count);
1366
- const attachFieldEntry = this.table.change.crossFieldKeys.getFirst({ target: crossFieldQueries_js_1.CrossFieldTarget.Destination, ...attachEntry.value }, count);
1367
- if (attachFieldEntry.value === undefined) {
1368
- assignRootChange(this.table.invertedRoots, this.table.invertedNodeToParent, attachEntry.value, nodeChange, this.fieldId, this.table.change.rebaseVersion);
1369
- }
1370
- else {
1371
- (0, crossFieldQueries_js_1.setInCrossFieldMap)(this.table.entries, attachEntry.value, count, nodeChange);
1372
- this.table.invalidatedFields.add(fieldChangeFromId(this.table.change, attachFieldEntry.value));
1373
- }
1374
- }
1375
- if (!(0, index_js_2.areEqualChangeAtomIds)(detachId, newAttachId)) {
1376
- for (const entry of doesChangeAttachNodes(this.table.change.crossFieldKeys, detachId, count)) {
1377
- if (!entry.value) {
1378
- this.table.attachToDetachId.set(newAttachId, count, detachId);
1379
- this.table.invertedRoots.detachLocations.set(detachId, count, this.fieldId);
1236
+ set(target, revision, id, count, newValue, invalidateDependents) {
1237
+ if (invalidateDependents && this.allowInval) {
1238
+ const lastChangedId = id + count - 1;
1239
+ let firstId = id;
1240
+ while (firstId <= lastChangedId) {
1241
+ const dependentEntry = (0, crossFieldQueries_js_1.getFirstFromCrossFieldMap)(this.getDependents(target), revision, firstId, lastChangedId - firstId + 1);
1242
+ if (dependentEntry.value !== undefined) {
1243
+ this.crossFieldTable.invalidatedFields.add(dependentEntry.value);
1380
1244
  }
1245
+ firstId = (0, index_js_3.brand)(firstId + dependentEntry.length);
1381
1246
  }
1382
1247
  }
1248
+ (0, crossFieldQueries_js_1.setInCrossFieldMap)(this.getMap(target), revision, id, count, newValue);
1383
1249
  }
1384
- invertAttach(attachId, count) {
1385
- let countToProcess = count;
1386
- const detachIdEntry = firstDetachIdFromAttachId(this.table.change.rootNodes, attachId, countToProcess);
1387
- countToProcess = detachIdEntry.length;
1388
- const detachEntry = getFirstFieldForCrossFieldKey(this.table.change, { target: crossFieldQueries_js_1.CrossFieldTarget.Source, ...detachIdEntry.value }, countToProcess);
1389
- countToProcess = detachEntry.length;
1390
- let result;
1391
- if (detachEntry.value === undefined) {
1392
- // This node is detached in the input context of the original change.
1393
- const nodeIdEntry = (0, changeAtomIdBTree_js_1.rangeQueryChangeAtomIdMap)(this.table.change.rootNodes.nodeChanges, detachIdEntry.value, countToProcess);
1394
- countToProcess = nodeIdEntry.length;
1395
- result = {
1396
- value: { nodeChange: nodeIdEntry.value, detachId: detachIdEntry.value },
1397
- length: countToProcess,
1398
- };
1399
- }
1400
- else {
1401
- const moveEntry = this.table.entries.getFirst(attachId, countToProcess);
1402
- result = { ...moveEntry, value: { nodeChange: moveEntry.value } };
1403
- }
1404
- if (result.value?.nodeChange !== undefined) {
1405
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.invertedNodeToParent, result.value.nodeChange, {
1406
- field: this.fieldId,
1407
- });
1250
+ get(target, revision, id, count, addDependency) {
1251
+ if (addDependency) {
1252
+ // We assume that if there is already an entry for this ID it is because
1253
+ // a field handler has called compose on the same node multiple times.
1254
+ // In this case we only want to update the latest version, so we overwrite the dependency.
1255
+ (0, crossFieldQueries_js_1.setInCrossFieldMap)(this.getDependents(target), revision, id, count, this.currentFieldKey);
1408
1256
  }
1409
- return result;
1257
+ return (0, crossFieldQueries_js_1.getFirstFromCrossFieldMap)(this.getMap(target), revision, id, count);
1258
+ }
1259
+ getMap(target) {
1260
+ return target === crossFieldQueries_js_1.CrossFieldTarget.Source
1261
+ ? this.crossFieldTable.srcTable
1262
+ : this.crossFieldTable.dstTable;
1263
+ }
1264
+ getDependents(target) {
1265
+ return target === crossFieldQueries_js_1.CrossFieldTarget.Source
1266
+ ? this.crossFieldTable.srcDependents
1267
+ : this.crossFieldTable.dstDependents;
1410
1268
  }
1411
1269
  }
1412
- class RebaseNodeManagerI {
1413
- constructor(table, fieldId, allowInval = true) {
1414
- this.table = table;
1270
+ class InvertManager extends CrossFieldManagerI {
1271
+ constructor(table, field, fieldId, allowInval = true) {
1272
+ super(table, field, allowInval);
1415
1273
  this.fieldId = fieldId;
1416
- this.allowInval = allowInval;
1417
1274
  }
1418
- getNewChangesForBaseAttach(baseAttachId, count) {
1419
- let countToProcess = count;
1420
- const detachEntry = firstDetachIdFromAttachId(this.table.baseChange.rootNodes, baseAttachId, countToProcess);
1421
- countToProcess = detachEntry.length;
1422
- const nodeEntry = (0, changeAtomIdBTree_js_1.rangeQueryChangeAtomIdMap)(this.table.newChange.rootNodes.nodeChanges, detachEntry.value, countToProcess);
1423
- countToProcess = nodeEntry.length;
1424
- const newNodeId = nodeEntry.value;
1425
- const newRenameEntry = this.table.newChange.rootNodes.oldToNewId.getFirst(detachEntry.value, countToProcess);
1426
- countToProcess = newRenameEntry.length;
1427
- let result;
1428
- // eslint-disable-next-line unicorn/prefer-ternary
1429
- if (newNodeId !== undefined || newRenameEntry.value !== undefined) {
1430
- result = {
1431
- ...newRenameEntry,
1432
- value: { detachId: newRenameEntry.value, nodeChange: newNodeId },
1433
- };
1434
- }
1435
- else {
1436
- // This handles the case where the base changeset has moved these nodes,
1437
- // meaning they were attached in the input context of the base changeset.
1438
- result = this.table.entries.getFirst(baseAttachId, countToProcess);
1439
- }
1440
- // TODO: Consider moving these two checks into a separate method so that this function has no side effects.
1441
- if (result.value?.detachId !== undefined) {
1442
- this.table.rebasedDetachLocations.set(result.value.detachId, result.length, this.fieldId);
1443
- }
1444
- if (result.value?.nodeChange !== undefined) {
1445
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.rebasedNodeToParent, result.value.nodeChange, {
1446
- field: this.fieldId,
1447
- });
1448
- }
1449
- return result;
1450
- }
1451
- rebaseOverDetach(baseDetachId, count, newDetachId, nodeChange, cellRename) {
1452
- let countToProcess = count;
1453
- const attachIdEntry = firstAttachIdFromDetachId(this.table.baseRoots, baseDetachId, countToProcess);
1454
- const baseAttachId = attachIdEntry.value;
1455
- countToProcess = attachIdEntry.length;
1456
- const attachFieldEntry = getFirstFieldForCrossFieldKey(this.table.baseChange, { ...baseAttachId, target: crossFieldQueries_js_1.CrossFieldTarget.Destination }, countToProcess);
1457
- countToProcess = attachFieldEntry.length;
1458
- const detachedMoveEntry = this.table.baseChange.rootNodes.outputDetachLocations.getFirst(baseDetachId, countToProcess);
1459
- countToProcess = detachedMoveEntry.length;
1460
- const destinationField = attachFieldEntry.value ?? detachedMoveEntry.value;
1461
- if (destinationField !== undefined) {
1462
- // The base detach is part of a move (or move of detach location) in the base changeset.
1463
- (0, crossFieldQueries_js_1.setInCrossFieldMap)(this.table.entries, baseAttachId, countToProcess, {
1464
- nodeChange,
1465
- detachId: newDetachId,
1466
- cellRename,
1467
- });
1468
- if (nodeChange !== undefined || newDetachId !== undefined) {
1469
- this.invalidateBaseFields([destinationField]);
1470
- }
1471
- }
1472
- if (attachFieldEntry.value === undefined) {
1473
- // These nodes are detached in the output context of the base changeset.
1474
- if (nodeChange !== undefined) {
1475
- assignRootChange(this.table.rebasedRootNodes, this.table.rebasedNodeToParent, baseAttachId, nodeChange, this.fieldId, this.table.rebaseVersion);
1476
- }
1477
- if (newDetachId !== undefined) {
1478
- addNodeRename(this.table.rebasedRootNodes, baseAttachId, newDetachId, countToProcess, this.fieldId);
1479
- }
1480
- }
1481
- if (newDetachId !== undefined) {
1482
- this.table.movedDetaches.set(newDetachId, countToProcess, true);
1483
- }
1484
- if (countToProcess < count) {
1485
- const remainingCount = count - countToProcess;
1486
- const nextDetachId = newDetachId === undefined
1487
- ? undefined
1488
- : (0, index_js_2.offsetChangeAtomId)(newDetachId, countToProcess);
1489
- this.rebaseOverDetach((0, index_js_2.offsetChangeAtomId)(baseDetachId, countToProcess), remainingCount, nextDetachId, nodeChange);
1490
- }
1491
- }
1492
- addDetach(id, count) {
1493
- this.table.rebasedDetachLocations.set(id, count, this.fieldId);
1494
- }
1495
- removeDetach(id, count) {
1496
- this.table.movedDetaches.set(id, count, true);
1497
- }
1498
- doesBaseAttachNodes(id, count) {
1499
- let countToProcess = count;
1500
- const attachEntry = getFirstAttachField(this.table.baseChange.crossFieldKeys, id, countToProcess);
1501
- countToProcess = attachEntry.length;
1502
- return { start: id, value: attachEntry.value !== undefined, length: countToProcess };
1503
- }
1504
- getBaseRename(id, count) {
1505
- return this.table.baseChange.rootNodes.oldToNewId.getFirst(id, count);
1506
- }
1507
- getNewRenameForBaseRename(baseRenameTo, count) {
1508
- let countToProcess = count;
1509
- const inputEntry = firstDetachIdFromAttachId(this.table.baseChange.rootNodes, baseRenameTo, countToProcess);
1510
- const attachEntry = getFirstAttachField(this.table.baseChange.crossFieldKeys, baseRenameTo, countToProcess);
1511
- countToProcess = attachEntry.length;
1512
- if (attachEntry.value !== undefined) {
1513
- // These nodes are attached in the output context of the base changeset.
1514
- return { value: undefined, length: countToProcess };
1515
- }
1516
- countToProcess = inputEntry.length;
1517
- const inputId = inputEntry.value;
1518
- const moveEntry = this.table.entries.getFirst(inputId, countToProcess);
1519
- countToProcess = moveEntry.length;
1520
- if (moveEntry.value !== undefined) {
1521
- return { ...moveEntry, value: moveEntry.value.cellRename ?? moveEntry.value.detachId };
1522
- }
1523
- return this.table.newChange.rootNodes.oldToNewId.getFirst(inputId, countToProcess);
1524
- }
1525
- invalidateBaseFields(fields) {
1526
- if (this.allowInval) {
1527
- for (const fieldId of fields) {
1528
- this.table.affectedBaseFields.set(fieldIdKeyFromFieldId(fieldId), true);
1529
- }
1530
- }
1275
+ onMoveIn(id) {
1276
+ (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.invertedNodeToParent, id, this.fieldId);
1531
1277
  }
1532
- }
1533
- function assignRootChange(table, nodeToParent, detachId, nodeId, detachLocation, rebaseVersion) {
1534
- (0, internal_1.assert)(rebaseVersion >= 2 || detachLocation !== undefined, "All root changes need a detach location to support compatibility with older client versions");
1535
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(table.nodeChanges, detachId, nodeId);
1536
- if (nodeToParent !== undefined) {
1537
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeToParent, nodeId, { root: detachId });
1278
+ moveKey(target, revision, id, count) {
1279
+ (0, internal_1.assert)(false, 0x9c5 /* Keys should not be moved manually during invert */);
1280
+ }
1281
+ get table() {
1282
+ return this.crossFieldTable;
1538
1283
  }
1539
- table.detachLocations.set(detachId, 1, detachLocation);
1540
1284
  }
1541
- class ComposeNodeManagerI {
1542
- constructor(table, fieldId, allowInval = true) {
1543
- this.table = table;
1285
+ class RebaseManager extends CrossFieldManagerI {
1286
+ constructor(table, currentField, fieldId, allowInval = true) {
1287
+ super(table, currentField, allowInval);
1544
1288
  this.fieldId = fieldId;
1545
- this.allowInval = allowInval;
1546
1289
  }
1547
- getNewChangesForBaseDetach(baseDetachId, count) {
1548
- let countToProcess = count;
1549
- const baseAttachEntry = getFirstFieldForCrossFieldKey(this.table.baseChange, { target: crossFieldQueries_js_1.CrossFieldTarget.Destination, ...baseDetachId }, countToProcess);
1550
- countToProcess = baseAttachEntry.length;
1551
- let result;
1552
- if (baseAttachEntry.value === undefined) {
1553
- // The detached nodes are still detached in the new change's input context.
1554
- const rootEntry = (0, changeAtomIdBTree_js_1.rangeQueryChangeAtomIdMap)(this.table.newChange.rootNodes.nodeChanges, baseDetachId, countToProcess);
1555
- countToProcess = rootEntry.length;
1556
- const newRenameEntry = this.table.newChange.rootNodes.oldToNewId.getFirst(baseDetachId, countToProcess);
1557
- countToProcess = newRenameEntry.length;
1558
- result = {
1559
- value: { nodeChange: rootEntry.value, detachId: newRenameEntry.value },
1560
- length: countToProcess,
1561
- };
1562
- }
1563
- else {
1564
- // The base detach was part of a move.
1565
- // We check if we've previously seen a node change at the move destination.
1566
- const entry = this.table.entries.getFirst(baseDetachId, countToProcess);
1567
- result = { value: entry.value, length: entry.length };
1568
- }
1569
- // TODO: Consider moving this to a separate method so that this method can be side-effect free.
1570
- if (result.value?.nodeChange !== undefined) {
1571
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.movedNodeToParent, result.value.nodeChange, {
1572
- field: this.fieldId,
1573
- });
1574
- }
1575
- return result;
1576
- }
1577
- composeAttachDetach(baseAttachId, newDetachId, count) {
1578
- let countToProcess = count;
1579
- const newAttachEntry = getFirstAttachField(this.table.newChange.crossFieldKeys, newDetachId, countToProcess);
1580
- countToProcess = newAttachEntry.length;
1581
- // Both changes can have the same ID if they came from inverse changesets.
1582
- // If the new detach is part of a move,
1583
- // then both input changesets contain the attach cross-field key for this ID.
1584
- // The new attach may still exist in the composed changeset so we do not remove it here.
1585
- // The new attach will typically cancel with a base detach,
1586
- // in which case the cross-field key will be removed in `composeDetachAttach`.
1587
- const hasNewAttachWithBaseAttachId = (0, index_js_2.areEqualChangeAtomIds)(baseAttachId, newDetachId) && newAttachEntry.value !== undefined;
1588
- if (!hasNewAttachWithBaseAttachId) {
1589
- this.table.removedCrossFieldKeys.set({ ...baseAttachId, target: crossFieldQueries_js_1.CrossFieldTarget.Destination }, countToProcess, true);
1590
- }
1591
- const baseDetachEntry = getFirstDetachField(this.table.baseChange.crossFieldKeys, baseAttachId, countToProcess);
1592
- countToProcess = baseDetachEntry.length;
1593
- const baseRootIdEntry = firstDetachIdFromAttachId(this.table.baseChange.rootNodes, baseAttachId, countToProcess);
1594
- countToProcess = baseRootIdEntry.length;
1595
- const baseDetachId = baseRootIdEntry.value;
1596
- if (baseDetachEntry.value === undefined) {
1597
- const baseDetachLocationEntry = this.table.baseChange.rootNodes.detachLocations.getFirst(baseDetachId, countToProcess);
1598
- countToProcess = baseDetachLocationEntry.length;
1599
- // These nodes were detached in the base change's input context,
1600
- // so the net effect of the two changes is a rename.
1601
- appendNodeRename(this.table.composedRootNodes, baseAttachId, newDetachId, baseDetachEntry.length, this.table.baseChange.rootNodes, baseDetachLocationEntry.value ?? this.fieldId);
1602
- this.table.removedCrossFieldKeys.set({ ...newDetachId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, countToProcess, true);
1603
- }
1604
- else {
1605
- // The base change moves these nodes.
1606
- const prevEntry = this.table.entries.getFirst(baseAttachId, baseDetachEntry.length).value ?? {};
1607
- this.table.entries.set(baseAttachId, baseDetachEntry.length, {
1608
- ...prevEntry,
1609
- detachId: newDetachId,
1610
- });
1611
- // The new detach will replace the base detach, so we remove the key for the base detach, unless they have the same ID.
1612
- if (!(0, index_js_2.areEqualChangeAtomIds)(baseAttachId, newDetachId)) {
1613
- this.table.removedCrossFieldKeys.set({ ...baseAttachId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, countToProcess, true);
1614
- }
1615
- this.table.movedCrossFieldKeys.set({ ...newDetachId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, countToProcess, baseDetachEntry.value);
1616
- this.invalidateBaseFields([baseDetachEntry.value]);
1617
- }
1618
- if (newAttachEntry.value === undefined) {
1619
- const newOutputDetachLocationEntry = this.table.newChange.rootNodes.outputDetachLocations.getFirst(newDetachId, countToProcess);
1620
- countToProcess = newOutputDetachLocationEntry.length;
1621
- this.table.composedRootNodes.outputDetachLocations.set(newDetachId, countToProcess, newOutputDetachLocationEntry.value ?? this.fieldId);
1622
- }
1623
- if (countToProcess < count) {
1624
- const remainingCount = count - countToProcess;
1625
- this.composeAttachDetach((0, index_js_2.offsetChangeAtomId)(baseAttachId, countToProcess), (0, index_js_2.offsetChangeAtomId)(newDetachId, countToProcess), remainingCount);
1626
- }
1627
- }
1628
- sendNewChangesToBaseSourceLocation(baseAttachId, newChanges) {
1629
- const { value: baseDetachId } = firstDetachIdFromAttachId(this.table.baseChange.rootNodes, baseAttachId, 1);
1630
- const detachFields = getFieldsForCrossFieldKey(this.table.baseChange, {
1631
- ...baseDetachId,
1632
- target: crossFieldQueries_js_1.CrossFieldTarget.Source,
1633
- }, 1);
1634
- if (detachFields.length > 0) {
1635
- // The base attach is part of a move in the base changeset.
1636
- const prevEntry = this.table.entries.getFirst(baseDetachId, 1).value ?? {};
1637
- this.table.entries.set(baseDetachId, 1, { ...prevEntry, nodeChange: newChanges });
1638
- if (newChanges !== undefined) {
1639
- this.invalidateBaseFields(detachFields);
1290
+ set(target, revision, id, count, newValue, invalidateDependents) {
1291
+ if (invalidateDependents && this.allowInval) {
1292
+ const newFieldIds = getFieldsForCrossFieldKey(this.table.newChange, {
1293
+ target,
1294
+ revision,
1295
+ localId: id,
1296
+ }, count);
1297
+ (0, internal_1.assert)(newFieldIds.length === 0, 0x9c6 /* TODO: Modifying a cross-field key from the new changeset is currently unsupported */);
1298
+ const baseFieldIds = getFieldsForCrossFieldKey(this.table.baseChange, {
1299
+ target,
1300
+ revision,
1301
+ localId: id,
1302
+ }, count);
1303
+ (0, internal_1.assert)(baseFieldIds.length > 0, 0x9c7 /* Cross field key not registered in base or new change */);
1304
+ for (const baseFieldId of baseFieldIds) {
1305
+ this.table.affectedBaseFields.set([baseFieldId.nodeId?.revision, baseFieldId.nodeId?.localId, baseFieldId.field], true);
1640
1306
  }
1641
1307
  }
1642
- else {
1643
- const baseNodeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(this.table.baseChange.rootNodes.nodeChanges, baseDetachId);
1644
- if (baseNodeId === undefined) {
1645
- assignRootChange(this.table.composedRootNodes, this.table.movedNodeToParent, baseDetachId, newChanges, this.fieldId, this.table.rebaseVersion);
1308
+ super.set(target, revision, id, count, newValue, invalidateDependents);
1309
+ }
1310
+ onMoveIn(id) {
1311
+ (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.rebasedNodeToParent, id, this.fieldId);
1312
+ }
1313
+ moveKey(target, revision, id, count) {
1314
+ this.table.rebasedCrossFieldKeys.set({ target, revision, localId: id }, count, this.fieldId);
1315
+ }
1316
+ get table() {
1317
+ return this.crossFieldTable;
1318
+ }
1319
+ }
1320
+ // TODO: Deduplicate this with RebaseTable
1321
+ class ComposeManager extends CrossFieldManagerI {
1322
+ constructor(table, currentField, fieldId, allowInval = true) {
1323
+ super(table, currentField, allowInval);
1324
+ this.fieldId = fieldId;
1325
+ }
1326
+ set(target, revision, id, count, newValue, invalidateDependents) {
1327
+ if (invalidateDependents && this.allowInval) {
1328
+ const newFieldIds = getFieldsForCrossFieldKey(this.table.newChange, {
1329
+ target,
1330
+ revision,
1331
+ localId: id,
1332
+ }, count);
1333
+ if (newFieldIds.length > 0) {
1334
+ for (const newFieldId of newFieldIds) {
1335
+ this.table.pendingCompositions.affectedNewFields.set([newFieldId.nodeId?.revision, newFieldId.nodeId?.localId, newFieldId.field], true);
1336
+ }
1646
1337
  }
1647
1338
  else {
1648
- addNodesToCompose(this.table, baseNodeId, newChanges);
1339
+ const baseFieldIds = getFieldsForCrossFieldKey(this.table.baseChange, {
1340
+ target,
1341
+ revision,
1342
+ localId: id,
1343
+ }, count);
1344
+ (0, internal_1.assert)(baseFieldIds.length > 0, 0x9c8 /* Cross field key not registered in base or new change */);
1345
+ for (const baseFieldId of baseFieldIds) {
1346
+ this.table.pendingCompositions.affectedBaseFields.set([baseFieldId.nodeId?.revision, baseFieldId.nodeId?.localId, baseFieldId.field], true);
1347
+ }
1649
1348
  }
1650
1349
  }
1350
+ super.set(target, revision, id, count, newValue, invalidateDependents);
1651
1351
  }
1652
- areSameNodes(baseDetachId, newAttachId, count) {
1653
- const renamedDetachEntry = firstAttachIdFromDetachId(this.table.composedRootNodes, baseDetachId, count);
1654
- const isReattachOfSameNodes = (0, index_js_2.areEqualChangeAtomIds)(renamedDetachEntry.value, newAttachId);
1655
- return { ...renamedDetachEntry, value: isReattachOfSameNodes };
1656
- }
1657
- composeDetachAttach(baseDetachId, newAttachId, count, composeToPin) {
1658
- const areSameEntry = this.areSameNodes(baseDetachId, newAttachId, count);
1659
- const countToProcess = areSameEntry.length;
1660
- if (areSameEntry.value) {
1661
- // These nodes have been moved back to their original location, so the composed changeset should not have any renames for them.
1662
- // Note that deleting the rename from `this.table.composedRootNodes` would change the result of this method
1663
- // if it were rerun due to the field being invalidated, so we instead record that the rename should be deleted later.
1664
- this.table.renamesToDelete.set(baseDetachId, countToProcess, true);
1665
- }
1666
- if (composeToPin) {
1667
- this.table.movedCrossFieldKeys.set({ target: crossFieldQueries_js_1.CrossFieldTarget.Source, ...newAttachId }, countToProcess, this.fieldId);
1668
- if (!(0, index_js_2.areEqualChangeAtomIds)(baseDetachId, newAttachId)) {
1669
- // The pin will have `newAttachId` as both its detach and attach ID.
1670
- // So we remove `baseDetachId` unless that is equal to the pin's detach ID.
1671
- this.table.removedCrossFieldKeys.set({ target: crossFieldQueries_js_1.CrossFieldTarget.Source, ...baseDetachId }, countToProcess, true);
1672
- }
1673
- // Note that while change2 should already have this key, change1 may have a rollback for the same ID in a different location.
1674
- // In that case, change1's attach should be canceled out by a detach from change2.
1675
- // Here we make sure that the composed change has the correct location (this field) for the attach ID.
1676
- this.table.movedCrossFieldKeys.set({ target: crossFieldQueries_js_1.CrossFieldTarget.Destination, ...newAttachId }, countToProcess, this.fieldId);
1677
- }
1678
- else {
1679
- this.table.removedCrossFieldKeys.set({ target: crossFieldQueries_js_1.CrossFieldTarget.Source, ...baseDetachId }, countToProcess, true);
1680
- this.table.removedCrossFieldKeys.set({ target: crossFieldQueries_js_1.CrossFieldTarget.Destination, ...newAttachId }, countToProcess, true);
1681
- }
1682
- if (countToProcess < count) {
1683
- this.composeAttachDetach((0, index_js_2.offsetChangeAtomId)(baseDetachId, countToProcess), (0, index_js_2.offsetChangeAtomId)(newAttachId, countToProcess), count - countToProcess);
1684
- }
1352
+ onMoveIn(id) {
1353
+ (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(this.table.composedNodeToParent, id, this.fieldId);
1685
1354
  }
1686
- invalidateBaseFields(fields) {
1687
- if (this.allowInval) {
1688
- for (const fieldId of fields) {
1689
- this.table.pendingCompositions.affectedBaseFields.set(fieldIdKeyFromFieldId(fieldId), true);
1690
- }
1691
- }
1355
+ moveKey(target, revision, id, count) {
1356
+ throw new Error("Moving cross-field keys during compose is currently unsupported");
1357
+ }
1358
+ get table() {
1359
+ return this.crossFieldTable;
1692
1360
  }
1693
1361
  }
1694
1362
  function makeModularChangeset(props) {
1695
1363
  const p = props ?? { maxId: -1 };
1696
1364
  const changeset = {
1697
- rebaseVersion: p.rebaseVersion ?? 1,
1698
1365
  fieldChanges: p.fieldChanges ?? new Map(),
1699
1366
  nodeChanges: p.nodeChanges ?? (0, index_js_3.newTupleBTree)(),
1700
- rootNodes: p.rootNodes ?? newRootTable(),
1701
1367
  nodeToParent: p.nodeToParent ?? (0, index_js_3.newTupleBTree)(),
1702
1368
  nodeAliases: p.nodeAliases ?? (0, index_js_3.newTupleBTree)(),
1703
- crossFieldKeys: p.crossFieldKeys ?? (0, modularChangeTypes_js_1.newCrossFieldRangeTable)(),
1369
+ crossFieldKeys: p.crossFieldKeys ?? (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
1704
1370
  };
1705
1371
  if (p.revisions !== undefined && p.revisions.length > 0) {
1706
1372
  changeset.revisions = p.revisions;
@@ -1740,9 +1406,6 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
1740
1406
  this.idAllocator = (0, index_js_3.idAllocatorFromMaxId)();
1741
1407
  this.codecOptions = codecOptions;
1742
1408
  }
1743
- isInTransaction() {
1744
- return this.transactionDepth > 0;
1745
- }
1746
1409
  enterTransaction() {
1747
1410
  this.transactionDepth += 1;
1748
1411
  if (this.transactionDepth === 1) {
@@ -1793,8 +1456,7 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
1793
1456
  fieldChange: { fieldKind, change },
1794
1457
  nodeChanges: (0, index_js_3.newTupleBTree)(),
1795
1458
  nodeToParent: (0, index_js_3.newTupleBTree)(),
1796
- crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldRangeTable)(),
1797
- rootNodes: newRootTable(),
1459
+ crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
1798
1460
  idAllocator: this.idAllocator,
1799
1461
  localCrossFieldKeys,
1800
1462
  revision,
@@ -1813,7 +1475,6 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
1813
1475
  ? makeModularChangeset({
1814
1476
  maxId: this.idAllocator.getMaxId(),
1815
1477
  builds: change.builds,
1816
- rootNodes: renameTableFromRenameDescriptions(change.renames ?? []),
1817
1478
  revisions: [{ revision: change.revision }],
1818
1479
  })
1819
1480
  : buildModularChangesetFromField({
@@ -1824,8 +1485,7 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
1824
1485
  },
1825
1486
  nodeChanges: (0, index_js_3.newTupleBTree)(),
1826
1487
  nodeToParent: (0, index_js_3.newTupleBTree)(),
1827
- crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldRangeTable)(),
1828
- rootNodes: newRootTable(),
1488
+ crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
1829
1489
  idAllocator: this.idAllocator,
1830
1490
  localCrossFieldKeys: getChangeHandler(this.fieldKinds, change.fieldKind).getCrossFieldKeys(change.change),
1831
1491
  revision: change.revision,
@@ -1854,8 +1514,7 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
1854
1514
  nodeChange,
1855
1515
  nodeChanges: (0, index_js_3.newTupleBTree)(),
1856
1516
  nodeToParent: (0, index_js_3.newTupleBTree)(),
1857
- crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldRangeTable)(),
1858
- rootNodes: newRootTable(),
1517
+ crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
1859
1518
  idAllocator: this.idAllocator,
1860
1519
  revision,
1861
1520
  }), revision));
@@ -1869,8 +1528,7 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
1869
1528
  nodeChange,
1870
1529
  nodeChanges: (0, index_js_3.newTupleBTree)(),
1871
1530
  nodeToParent: (0, index_js_3.newTupleBTree)(),
1872
- crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldRangeTable)(),
1873
- rootNodes: newRootTable(),
1531
+ crossFieldKeys: (0, modularChangeTypes_js_1.newCrossFieldKeyTable)(),
1874
1532
  idAllocator: this.idAllocator,
1875
1533
  revision,
1876
1534
  }), revision));
@@ -1898,19 +1556,16 @@ class ModularEditBuilder extends index_js_2.EditBuilder {
1898
1556
  }
1899
1557
  exports.ModularEditBuilder = ModularEditBuilder;
1900
1558
  function buildModularChangesetFromField(props) {
1901
- const { path, fieldChange, nodeChanges, nodeToParent, crossFieldKeys, rootNodes, idAllocator = (0, index_js_3.idAllocatorFromMaxId)(), localCrossFieldKeys = [], childId, revision, } = props;
1559
+ const { path, fieldChange, nodeChanges, nodeToParent, crossFieldKeys, idAllocator = (0, index_js_3.idAllocatorFromMaxId)(), localCrossFieldKeys = [], childId, revision, } = props;
1902
1560
  const fieldChanges = new Map([[path.field, fieldChange]]);
1903
1561
  if (path.parent === undefined) {
1904
- const field = { nodeId: undefined, field: path.field };
1905
1562
  for (const { key, count } of localCrossFieldKeys) {
1906
- crossFieldKeys.set(key, count, field);
1563
+ crossFieldKeys.set(key, count, { nodeId: undefined, field: path.field });
1907
1564
  }
1908
1565
  if (childId !== undefined) {
1909
1566
  (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeToParent, childId, {
1910
- field: {
1911
- nodeId: undefined,
1912
- field: path.field,
1913
- },
1567
+ nodeId: undefined,
1568
+ field: path.field,
1914
1569
  });
1915
1570
  }
1916
1571
  return makeModularChangeset({
@@ -1918,7 +1573,6 @@ function buildModularChangesetFromField(props) {
1918
1573
  nodeChanges,
1919
1574
  nodeToParent,
1920
1575
  crossFieldKeys,
1921
- rootNodes,
1922
1576
  maxId: idAllocator.getMaxId(),
1923
1577
  revisions: [{ revision }],
1924
1578
  });
@@ -1927,13 +1581,13 @@ function buildModularChangesetFromField(props) {
1927
1581
  fieldChanges,
1928
1582
  };
1929
1583
  const parentId = { localId: (0, index_js_3.brand)(idAllocator.allocate()), revision };
1930
- const fieldId = { nodeId: parentId, field: path.field };
1931
1584
  for (const { key, count } of localCrossFieldKeys) {
1932
1585
  crossFieldKeys.set(key, count, { nodeId: parentId, field: path.field });
1933
1586
  }
1934
1587
  if (childId !== undefined) {
1935
1588
  (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeToParent, childId, {
1936
- field: fieldId,
1589
+ nodeId: parentId,
1590
+ field: path.field,
1937
1591
  });
1938
1592
  }
1939
1593
  return buildModularChangesetFromNode({
@@ -1942,50 +1596,28 @@ function buildModularChangesetFromField(props) {
1942
1596
  nodeChanges,
1943
1597
  nodeToParent,
1944
1598
  crossFieldKeys,
1945
- rootNodes,
1946
1599
  idAllocator,
1947
1600
  revision,
1948
1601
  nodeId: parentId,
1949
1602
  });
1950
1603
  }
1951
- exports.buildModularChangesetFromField = buildModularChangesetFromField;
1952
1604
  function buildModularChangesetFromNode(props) {
1953
1605
  const { path, idAllocator, revision, nodeChanges, nodeChange, nodeId = { localId: (0, index_js_3.brand)(idAllocator.allocate()), revision }, } = props;
1954
1606
  (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(nodeChanges, nodeId, nodeChange);
1955
- if ((0, index_js_2.isDetachedUpPathRoot)(path)) {
1956
- props.rootNodes.nodeChanges.set([path.detachedNodeId.major, (0, index_js_3.brand)(path.detachedNodeId.minor)], nodeId);
1957
- return makeModularChangeset({
1958
- rootNodes: props.rootNodes,
1959
- nodeChanges: props.nodeChanges,
1960
- nodeToParent: props.nodeToParent,
1961
- crossFieldKeys: props.crossFieldKeys,
1962
- maxId: props.idAllocator.getMaxId(),
1963
- revisions: [{ revision: props.revision }],
1964
- });
1965
- }
1966
- else {
1967
- const fieldChangeset = genericFieldKind_js_1.genericFieldKind.changeHandler.editor.buildChildChanges([
1968
- [path.parentIndex, nodeId],
1969
- ]);
1970
- const fieldChange = {
1971
- fieldKind: genericFieldKind_js_1.genericFieldKind.identifier,
1972
- change: fieldChangeset,
1973
- };
1974
- return buildModularChangesetFromField({
1975
- ...props,
1976
- path: { parent: path.parent, field: path.parentField },
1977
- fieldChange,
1978
- localCrossFieldKeys: [],
1979
- childId: nodeId,
1980
- });
1981
- }
1982
- }
1983
- function renameTableFromRenameDescriptions(renames) {
1984
- const table = newRootTable();
1985
- for (const rename of renames) {
1986
- addNodeRename(table, rename.oldId, rename.newId, rename.count, rename.detachLocation);
1987
- }
1988
- return table;
1607
+ const fieldChangeset = genericFieldKind_js_1.genericFieldKind.changeHandler.editor.buildChildChanges([
1608
+ [path.parentIndex, nodeId],
1609
+ ]);
1610
+ const fieldChange = {
1611
+ fieldKind: genericFieldKind_js_1.genericFieldKind.identifier,
1612
+ change: fieldChangeset,
1613
+ };
1614
+ return buildModularChangesetFromField({
1615
+ ...props,
1616
+ path: { parent: path.parent, field: path.parentField },
1617
+ fieldChange,
1618
+ localCrossFieldKeys: [],
1619
+ childId: nodeId,
1620
+ });
1989
1621
  }
1990
1622
  function getRevInfoFromTaggedChanges(changes) {
1991
1623
  let maxId = -1;
@@ -2002,6 +1634,18 @@ function getRevInfoFromTaggedChanges(changes) {
2002
1634
  }
2003
1635
  }
2004
1636
  }
1637
+ const rolledBackRevisions = [];
1638
+ for (const info of revInfos) {
1639
+ if (info.rollbackOf !== undefined) {
1640
+ rolledBackRevisions.push(info.rollbackOf);
1641
+ }
1642
+ }
1643
+ rolledBackRevisions.reverse();
1644
+ for (const revision of rolledBackRevisions) {
1645
+ if (!revisions.has(revision)) {
1646
+ revInfos.push({ revision });
1647
+ }
1648
+ }
2005
1649
  return { maxId: (0, index_js_3.brand)(maxId), revInfos };
2006
1650
  }
2007
1651
  function revisionInfoFromTaggedChange(taggedChange) {
@@ -2018,16 +1662,15 @@ function revisionInfoFromTaggedChange(taggedChange) {
2018
1662
  }
2019
1663
  return revInfos;
2020
1664
  }
2021
- function fieldChangeFromId(change, id) {
2022
- const fieldId = normalizeFieldId(id, change.nodeAliases);
2023
- const fieldMap = fieldMapFromNodeId(change.fieldChanges, change.nodeChanges, change.nodeAliases, fieldId.nodeId);
1665
+ function fieldChangeFromId(fields, nodes, id) {
1666
+ const fieldMap = fieldMapFromNodeId(fields, nodes, id.nodeId);
2024
1667
  return fieldMap.get(id.field) ?? (0, internal_1.fail)(0xb25 /* No field exists for the given ID */);
2025
1668
  }
2026
- function fieldMapFromNodeId(rootFieldMap, nodes, aliases, nodeId) {
1669
+ function fieldMapFromNodeId(rootFieldMap, nodes, nodeId) {
2027
1670
  if (nodeId === undefined) {
2028
1671
  return rootFieldMap;
2029
1672
  }
2030
- const node = nodeChangeFromId(nodes, aliases, nodeId);
1673
+ const node = nodeChangeFromId(nodes, nodeId);
2031
1674
  (0, internal_1.assert)(node.fieldChanges !== undefined, 0x9c9 /* Expected node to have field changes */);
2032
1675
  return node.fieldChanges;
2033
1676
  }
@@ -2040,9 +1683,8 @@ function rebasedFieldIdFromBaseId(table, baseId) {
2040
1683
  function rebasedNodeIdFromBaseNodeId(table, baseId) {
2041
1684
  return (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(table.baseToRebasedNodeId, baseId) ?? baseId;
2042
1685
  }
2043
- function nodeChangeFromId(nodes, aliases, id) {
2044
- const normalizedId = normalizeNodeId(id, aliases);
2045
- const node = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodes, normalizedId);
1686
+ function nodeChangeFromId(nodes, id) {
1687
+ const node = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodes, id);
2046
1688
  (0, internal_1.assert)(node !== undefined, 0x9ca /* Unknown node ID */);
2047
1689
  return node;
2048
1690
  }
@@ -2050,20 +1692,12 @@ function fieldIdFromFieldIdKey([revision, localId, field]) {
2050
1692
  const nodeId = localId === undefined ? undefined : { revision, localId };
2051
1693
  return { nodeId, field };
2052
1694
  }
2053
- function fieldIdKeyFromFieldId(fieldId) {
2054
- return [fieldId.nodeId?.revision, fieldId.nodeId?.localId, fieldId.field];
2055
- }
2056
1695
  function cloneNodeChangeset(nodeChangeset) {
2057
1696
  if (nodeChangeset.fieldChanges !== undefined) {
2058
1697
  return { ...nodeChangeset, fieldChanges: new Map(nodeChangeset.fieldChanges) };
2059
1698
  }
2060
1699
  return { ...nodeChangeset };
2061
1700
  }
2062
- function replaceNodeLocationRevision(location, replacer) {
2063
- return location.field === undefined
2064
- ? { root: replacer.getUpdatedAtomId(location.root) }
2065
- : { field: replaceFieldIdRevision(location.field, replacer) };
2066
- }
2067
1701
  function replaceFieldIdRevision(fieldId, replacer) {
2068
1702
  if (fieldId.nodeId === undefined) {
2069
1703
  return fieldId;
@@ -2073,34 +1707,17 @@ function replaceFieldIdRevision(fieldId, replacer) {
2073
1707
  nodeId: replacer.getUpdatedAtomId(fieldId.nodeId),
2074
1708
  };
2075
1709
  }
2076
- function getNodeParent(changeset, nodeId) {
2077
- const normalizedNodeId = normalizeNodeId(nodeId, changeset.nodeAliases);
2078
- const location = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(changeset.nodeToParent, normalizedNodeId);
2079
- (0, internal_1.assert)(location !== undefined, 0x9cb /* Parent field should be defined */);
2080
- if (location.field !== undefined) {
2081
- return { field: normalizeFieldId(location.field, changeset.nodeAliases) };
2082
- }
2083
- return location;
1710
+ function getParentFieldId(changeset, nodeId) {
1711
+ const parentId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(changeset.nodeToParent, nodeId);
1712
+ (0, internal_1.assert)(parentId !== undefined, 0x9cb /* Parent field should be defined */);
1713
+ return normalizeFieldId(parentId, changeset.nodeAliases);
2084
1714
  }
2085
- exports.getNodeParent = getNodeParent;
1715
+ exports.getParentFieldId = getParentFieldId;
2086
1716
  function getFieldsForCrossFieldKey(changeset, key, count) {
2087
1717
  return changeset.crossFieldKeys
2088
1718
  .getAll(key, count)
2089
1719
  .map(({ value: fieldId }) => normalizeFieldId(fieldId, changeset.nodeAliases));
2090
1720
  }
2091
- function getFirstFieldForCrossFieldKey(changeset, key, count) {
2092
- const result = changeset.crossFieldKeys.getFirst(key, count);
2093
- if (result.value === undefined) {
2094
- return result;
2095
- }
2096
- return { ...result, value: normalizeFieldId(result.value, changeset.nodeAliases) };
2097
- }
2098
- function normalizeNodeLocation(location, nodeAliases) {
2099
- if (location.field !== undefined) {
2100
- return { field: normalizeFieldId(location.field, nodeAliases) };
2101
- }
2102
- return location;
2103
- }
2104
1721
  // This is only exported for use in test utilities.
2105
1722
  function normalizeFieldId(fieldId, nodeAliases) {
2106
1723
  return fieldId.nodeId === undefined
@@ -2113,7 +1730,6 @@ exports.normalizeFieldId = normalizeFieldId;
2113
1730
  */
2114
1731
  function normalizeNodeId(nodeId, nodeAliases) {
2115
1732
  let currentId = nodeId;
2116
- let cycleProbeId = nodeId;
2117
1733
  // eslint-disable-next-line no-constant-condition
2118
1734
  while (true) {
2119
1735
  const dealiased = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodeAliases, currentId);
@@ -2121,501 +1737,20 @@ function normalizeNodeId(nodeId, nodeAliases) {
2121
1737
  return currentId;
2122
1738
  }
2123
1739
  currentId = dealiased;
2124
- if (cycleProbeId !== undefined) {
2125
- cycleProbeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodeAliases, cycleProbeId);
2126
- }
2127
- if (cycleProbeId !== undefined) {
2128
- cycleProbeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(nodeAliases, cycleProbeId);
2129
- }
2130
- (0, internal_1.assert)(!(0, index_js_2.areEqualChangeAtomIdOpts)(cycleProbeId, currentId), "Alias cycle detected");
2131
1740
  }
2132
1741
  }
2133
- exports.normalizeNodeId = normalizeNodeId;
2134
1742
  function hasConflicts(change) {
2135
1743
  return (change.constraintViolationCount ?? 0) > 0;
2136
1744
  }
2137
- function areEqualFieldIds(a, b) {
2138
- return (0, index_js_2.areEqualChangeAtomIdOpts)(a.nodeId, b.nodeId) && a.field === b.field;
2139
- }
2140
- function firstAttachIdFromDetachId(roots, detachId, count) {
2141
- const result = roots.oldToNewId.getFirst(detachId, count);
2142
- return { ...result, value: result.value ?? detachId };
2143
- }
2144
- function firstDetachIdFromAttachId(roots, attachId, count) {
2145
- const result = roots.newToOldId.getFirst(attachId, count);
2146
- return { ...result, start: attachId, value: result.value ?? attachId };
2147
- }
2148
- function rebaseCrossFieldKeys(sourceTable, movedDetaches, newDetachLocations) {
2149
- const rebasedTable = sourceTable.clone();
2150
- for (const entry of movedDetaches.entries()) {
2151
- rebasedTable.delete({ ...entry.start, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, entry.length);
2152
- }
2153
- for (const entry of newDetachLocations.entries()) {
2154
- rebasedTable.set({ ...entry.start, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, entry.length, entry.value);
2155
- }
2156
- return rebasedTable;
2157
- }
2158
- function newRootTable() {
2159
- return {
2160
- newToOldId: (0, index_js_2.newChangeAtomIdTransform)(),
2161
- oldToNewId: (0, index_js_2.newChangeAtomIdTransform)(),
2162
- nodeChanges: (0, index_js_3.newTupleBTree)(),
2163
- detachLocations: (0, index_js_2.newChangeAtomIdRangeMap)(),
2164
- outputDetachLocations: (0, index_js_2.newChangeAtomIdRangeMap)(),
2165
- };
2166
- }
2167
- exports.newRootTable = newRootTable;
2168
- function rebaseRoots(change, base, affectedBaseFields, nodesToRebase, rebasedNodeToParent, rebaseVersion) {
2169
- const rebasedRoots = newRootTable();
2170
- for (const renameEntry of change.rootNodes.oldToNewId.entries()) {
2171
- rebaseRename(change.rootNodes, rebasedRoots, renameEntry, base, affectedBaseFields);
2172
- }
2173
- for (const [detachIdKey, nodeId] of change.rootNodes.nodeChanges.entries()) {
2174
- const changes = base.rootNodes.nodeChanges.get(detachIdKey);
2175
- if (changes !== undefined) {
2176
- nodesToRebase.push([nodeId, changes]);
2177
- }
2178
- const detachId = (0, index_js_2.makeChangeAtomId)(detachIdKey[1], detachIdKey[0]);
2179
- const attachId = firstAttachIdFromDetachId(base.rootNodes, detachId, 1).value;
2180
- const baseAttachEntry = base.crossFieldKeys.getFirst({ target: crossFieldQueries_js_1.CrossFieldTarget.Destination, ...attachId }, 1);
2181
- if (baseAttachEntry.value === undefined) {
2182
- const renamedDetachId = firstAttachIdFromDetachId(base.rootNodes, detachId, 1).value;
2183
- const baseOutputDetachLocation = base.rootNodes.outputDetachLocations.getFirst(renamedDetachId, 1).value;
2184
- if (baseOutputDetachLocation !== undefined) {
2185
- affectedBaseFields.set(fieldIdKeyFromFieldId(baseOutputDetachLocation), true);
2186
- }
2187
- const detachLocation = baseOutputDetachLocation ??
2188
- change.rootNodes.detachLocations.getFirst(detachId, 1).value;
2189
- // Note that `baseOutputDetachLocation` may contain a node ID from the base changeset.
2190
- // We will replace the detach location entry with the node ID from the rebased changeset in `fixupRebasedDetachLocations`
2191
- assignRootChange(rebasedRoots, rebasedNodeToParent, renamedDetachId, nodeId, detachLocation, rebaseVersion);
2192
- }
2193
- else {
2194
- affectedBaseFields.set(fieldIdKeyFromFieldId(baseAttachEntry.value), true);
2195
- rebasedNodeToParent.delete(detachIdKey);
2196
- }
2197
- }
2198
- for (const entry of change.rootNodes.outputDetachLocations.entries()) {
2199
- rebasedRoots.outputDetachLocations.set(entry.start, entry.length, entry.value);
2200
- }
2201
- return rebasedRoots;
2202
- }
2203
- function rebaseRename(newRoots, rebasedRoots, renameEntry, base, affectedBaseFields) {
2204
- let count = renameEntry.length;
2205
- const baseRenameEntry = firstAttachIdFromDetachId(base.rootNodes, renameEntry.start, count);
2206
- count = baseRenameEntry.length;
2207
- const baseAttachEntry = base.crossFieldKeys.getFirst({
2208
- ...baseRenameEntry.value,
2209
- target: crossFieldQueries_js_1.CrossFieldTarget.Destination,
2210
- }, count);
2211
- count = baseAttachEntry.length;
2212
- if (baseAttachEntry.value === undefined) {
2213
- const baseOutputDetachLocation = base.rootNodes.outputDetachLocations.getFirst(baseRenameEntry.value, 1).value;
2214
- if (baseOutputDetachLocation !== undefined) {
2215
- affectedBaseFields.set(fieldIdKeyFromFieldId(baseOutputDetachLocation), true);
2216
- }
2217
- const detachEntry = newRoots.detachLocations.getFirst(renameEntry.start, count);
2218
- count = detachEntry.length;
2219
- const detachLocation = baseOutputDetachLocation ?? detachEntry.value;
2220
- // Note that `baseOutputDetachLocation` may contain a node ID from the base changeset.
2221
- // We will replace the detach location entry with the node ID from the rebased changeset in `fixupRebasedDetachLocations`
2222
- addNodeRename(rebasedRoots, baseRenameEntry.value, renameEntry.value, count, detachLocation);
2223
- }
2224
- else {
2225
- // This rename represents an intention to detach these nodes.
2226
- // The rebased change should have a detach in the field where the base change attaches the nodes,
2227
- // so we need to ensure that field is processed.
2228
- affectedBaseFields.set(fieldIdKeyFromFieldId(normalizeFieldId(baseAttachEntry.value, base.nodeAliases)), true);
2229
- }
2230
- const countRemaining = renameEntry.length - count;
2231
- if (countRemaining > 0) {
2232
- rebaseRename(newRoots, rebasedRoots, {
2233
- start: (0, index_js_2.offsetChangeAtomId)(renameEntry.start, count),
2234
- value: (0, index_js_2.offsetChangeAtomId)(renameEntry.value, count),
2235
- length: countRemaining,
2236
- }, base, affectedBaseFields);
2237
- }
2238
- }
2239
1745
  /**
2240
- * For each root detach location, replaces any node ID from the base changeset
2241
- * with the corresponding ID in the new changeset.
1746
+ * A rebaseChild callback for fields with no new changes.
1747
+ * Asserts that there are no new changes and returns undefined.
2242
1748
  */
2243
- function fixupRebasedDetachLocations(table) {
2244
- for (const { start, length, value: detachLocation, } of table.rebasedRootNodes.detachLocations.entries()) {
2245
- const normalizedDetachLocation = normalizeFieldId(detachLocation, table.baseChange.nodeAliases);
2246
- if (normalizedDetachLocation.nodeId !== undefined) {
2247
- const rebasedNodeId = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(table.baseToRebasedNodeId, normalizedDetachLocation.nodeId);
2248
- if (rebasedNodeId !== undefined) {
2249
- table.rebasedRootNodes.detachLocations.set(start, length, {
2250
- ...normalizedDetachLocation,
2251
- nodeId: rebasedNodeId,
2252
- });
2253
- }
2254
- }
2255
- }
2256
- }
2257
- function addNodesToCompose(table, id1, id2) {
2258
- const normalizedId1 = normalizeNodeId(id1, table.baseChange.nodeAliases);
2259
- const normalizedId2 = normalizeNodeId(id2, table.newChange.nodeAliases);
2260
- if ((0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(table.newToBaseNodeId, normalizedId2) === undefined) {
2261
- (0, changeAtomIdBTree_js_1.setInChangeAtomIdMap)(table.newToBaseNodeId, normalizedId2, normalizedId1);
2262
- table.pendingCompositions.nodeIdsToCompose.push([normalizedId1, normalizedId2]);
2263
- }
2264
- }
2265
- function composeRevInfos(revisions1, revisions2) {
2266
- if (revisions1?.length === 1 &&
2267
- revisions2?.length === 1 &&
2268
- revisions1[0]?.revision === revisions2[0]?.revision) {
2269
- // This is a special case where we are composing two changesets from the same transaction.
2270
- // We return one of the input arrays to avoid duplicating revision entries.
2271
- return revisions1;
2272
- }
2273
- const result = [...(revisions1 ?? []), ...(revisions2 ?? [])];
2274
- return result;
2275
- }
2276
- function composeCrossFieldKeyTables(table1, table2, movedCrossFieldKeys, removedCrossFieldKeys) {
2277
- const composedTable = index_js_3.RangeMap.union(table1, table2);
2278
- for (const entry of movedCrossFieldKeys.entries()) {
2279
- composedTable.set(entry.start, entry.length, entry.value);
2280
- }
2281
- for (const entry of removedCrossFieldKeys.entries()) {
2282
- composedTable.delete(entry.start, entry.length);
2283
- }
2284
- return composedTable;
2285
- }
2286
- function composeRootTables(change1, change2, composedNodeToParent, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions) {
2287
- const composedTable = cloneRootTable(change1.rootNodes);
2288
- for (const renameEntry of change2.rootNodes.oldToNewId.entries()) {
2289
- composeRename(change1, change2, composedTable, renameEntry.start, renameEntry.value, renameEntry.length, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions);
2290
- }
2291
- for (const [[revision2, id2], nodeId2] of change2.rootNodes.nodeChanges.entries()) {
2292
- const detachId2 = { revision: revision2, localId: id2 };
2293
- const detachId1 = firstDetachIdFromAttachId(change1.rootNodes, detachId2, 1).value;
2294
- const nodeId1 = (0, changeAtomIdBTree_js_1.getFromChangeAtomIdMap)(change1.rootNodes.nodeChanges, detachId1);
2295
- if (nodeId1 === undefined) {
2296
- const fieldId = getFieldsForCrossFieldKey(change1, { ...detachId1, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, 1)[0];
2297
- if (fieldId === undefined) {
2298
- assignRootChange(composedTable, composedNodeToParent, detachId1, nodeId2, change1.rootNodes.detachLocations.getFirst(detachId1, 1).value ??
2299
- change2.rootNodes.detachLocations.getFirst(detachId2, 1).value, Math.max(change1.rebaseVersion, change2.rebaseVersion));
2300
- }
2301
- else {
2302
- // In this case, this node is attached in the input context of change1,
2303
- // and is represented in detachFieldId.
2304
- pendingCompositions.affectedBaseFields.set([fieldId.nodeId?.revision, fieldId.nodeId?.localId, fieldId.field], true);
2305
- }
2306
- }
2307
- else {
2308
- pendingCompositions.nodeIdsToCompose.push([nodeId1, nodeId2]);
2309
- }
2310
- }
2311
- for (const outputDetachEntry of change1.rootNodes.outputDetachLocations.entries()) {
2312
- composeOutputDetachLocation(outputDetachEntry.start, outputDetachEntry.length, outputDetachEntry.value, change2, composedTable);
2313
- }
2314
- for (const entry of change2.rootNodes.outputDetachLocations.entries()) {
2315
- composedTable.outputDetachLocations.set(entry.start, entry.length, entry.value);
2316
- }
2317
- return composedTable;
2318
- }
2319
- function composeOutputDetachLocation(outputDetachId1, count, detachLocation, change2, composedTable) {
2320
- let countToProcess = count;
2321
- const renameEntry = firstAttachIdFromDetachId(change2.rootNodes, outputDetachId1, countToProcess);
2322
- countToProcess = renameEntry.length;
2323
- const attachEntry = getFirstAttachField(change2.crossFieldKeys, renameEntry.value, countToProcess);
2324
- countToProcess = attachEntry.length;
2325
- composedTable.outputDetachLocations.delete(outputDetachId1, countToProcess);
2326
- if (attachEntry.value === undefined) {
2327
- // We update the key for the detach location to the renamed ID of the root in the composed output context.
2328
- composedTable.outputDetachLocations.set(renameEntry.value, countToProcess, detachLocation);
2329
- }
2330
- else {
2331
- // These nodes are attached by `change2` and thus attached in the composed output context,
2332
- // so there should be no output detach location.
2333
- }
2334
- const countRemaining = count - countToProcess;
2335
- if (countRemaining > 0) {
2336
- composeOutputDetachLocation((0, index_js_2.offsetChangeAtomId)(outputDetachId1, countToProcess), countRemaining, detachLocation, change2, composedTable);
2337
- }
2338
- }
2339
- function composeRename(change1, change2, mergedTable, oldId, newId, count, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions) {
2340
- let countToProcess = count;
2341
- const detachEntry = getFirstDetachField(change1.crossFieldKeys, oldId, countToProcess);
2342
- countToProcess = detachEntry.length;
2343
- if (detachEntry.value === undefined) {
2344
- // `change1` may also have a rename to `renameEntry.value`, in which case it must refer to a different node.
2345
- // That node must have been attached by `change1` and detached by `change2`.
2346
- // The final rename for that node will be created in `composeAttachDetach`.
2347
- // We delete any such rename for now to avoid colliding with the rename currently being processed.
2348
- deleteNodeRenameTo(mergedTable, newId, countToProcess);
2349
- // The nodes were detached before `change`, so we append this rename.
2350
- appendNodeRename(mergedTable, oldId, newId, countToProcess, change1.rootNodes, change2.rootNodes.detachLocations.getFirst(oldId, countToProcess).value);
2351
- }
2352
- else {
2353
- // `change1` detached these nodes,
2354
- // so we invalidate the detach location so that the detach's ID can be replaced with the new ID.
2355
- pendingCompositions.affectedBaseFields.set(fieldIdKeyFromFieldId(detachEntry.value), true);
2356
- if (!(0, index_js_2.areEqualChangeAtomIds)(oldId, newId)) {
2357
- // `change1`'s detach will be replaced by `change2`'s detach, so we update the cross-field keys.
2358
- removedCrossFieldKeys.set({ ...oldId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, countToProcess, true);
2359
- }
2360
- movedCrossFieldKeys.set({ ...newId, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, countToProcess, detachEntry.value);
2361
- }
2362
- if (countToProcess < count) {
2363
- composeRename(change1, change2, mergedTable, (0, index_js_2.offsetChangeAtomId)(oldId, countToProcess), (0, index_js_2.offsetChangeAtomId)(newId, countToProcess), count - countToProcess, movedCrossFieldKeys, removedCrossFieldKeys, pendingCompositions);
2364
- }
2365
- }
2366
- function cloneRootTable(table) {
2367
- return {
2368
- oldToNewId: table.oldToNewId.clone(),
2369
- newToOldId: table.newToOldId.clone(),
2370
- nodeChanges: (0, index_js_3.brand)(table.nodeChanges.clone()),
2371
- detachLocations: table.detachLocations.clone(),
2372
- outputDetachLocations: table.outputDetachLocations.clone(),
2373
- };
2374
- }
2375
- exports.cloneRootTable = cloneRootTable;
2376
- function invertRootTable(change, isRollback) {
2377
- const invertedRoots = newRootTable();
2378
- for (const [[revision, localId], nodeId] of change.rootNodes.nodeChanges.entries()) {
2379
- const detachId = { revision, localId };
2380
- const renamedId = firstAttachIdFromDetachId(change.rootNodes, detachId, 1).value;
2381
- // This checks whether `change` attaches this node.
2382
- // If it does, the node is not detached in the input context of the inverse, and so should not be included in the root table.
2383
- if (change.crossFieldKeys.getFirst({ ...renamedId, target: crossFieldQueries_js_1.CrossFieldTarget.Destination }, 1)
2384
- .value === undefined) {
2385
- assignRootChange(invertedRoots, undefined, renamedId, nodeId, change.rootNodes.detachLocations.getFirst(detachId, 1).value, change.rebaseVersion);
2386
- }
2387
- }
2388
- if (isRollback) {
2389
- // We only invert renames of nodes which are not attached or detached by this changeset.
2390
- // When we invert an attach we will create a detach which incorporates the rename.
2391
- for (const { start: oldId, value: newId, length, } of change.rootNodes.oldToNewId.entries()) {
2392
- invertRename(change, invertedRoots, oldId, newId, length);
2393
- }
2394
- }
2395
- return invertedRoots;
2396
- }
2397
- function invertRename(change, invertedRoots, oldId, newId, length) {
2398
- for (const detachEntry of doesChangeDetachNodes(change.crossFieldKeys, newId, length)) {
2399
- (0, internal_1.assert)(!detachEntry.value, "A changeset should not have a rename and detach for the same node.");
2400
- }
2401
- let countProcessed = length;
2402
- const attachEntry = getFirstAttachField(change.crossFieldKeys, newId, countProcessed);
2403
- countProcessed = attachEntry.length;
2404
- if (attachEntry.value === undefined) {
2405
- const outputDetachEntry = change.rootNodes.outputDetachLocations.getFirst(newId, countProcessed);
2406
- countProcessed = outputDetachEntry.length;
2407
- const inputDetachEntry = change.rootNodes.detachLocations.getFirst(oldId, countProcessed);
2408
- countProcessed = inputDetachEntry.length;
2409
- addNodeRename(invertedRoots, newId, oldId, countProcessed, outputDetachEntry.value ?? inputDetachEntry.value);
2410
- }
2411
- if (countProcessed < length) {
2412
- invertRename(change, invertedRoots, (0, index_js_2.offsetChangeAtomId)(oldId, countProcessed), (0, index_js_2.offsetChangeAtomId)(newId, countProcessed), length - countProcessed);
2413
- }
2414
- }
2415
- function doesChangeAttachNodes(table, id, count) {
2416
- return table
2417
- .getAll2({ ...id, target: crossFieldQueries_js_1.CrossFieldTarget.Destination }, count)
2418
- .map((entry) => ({ ...entry, value: entry.value !== undefined }));
2419
- }
2420
- function doesChangeDetachNodes(table, id, count) {
2421
- return table
2422
- .getAll2({ ...id, target: crossFieldQueries_js_1.CrossFieldTarget.Source }, count)
2423
- .map((entry) => ({ ...entry, value: entry.value !== undefined }));
2424
- }
2425
- function getFirstDetachField(table, id, count) {
2426
- return table.getFirst({ target: crossFieldQueries_js_1.CrossFieldTarget.Source, ...id }, count);
2427
- }
2428
- exports.getFirstDetachField = getFirstDetachField;
2429
- function getFirstAttachField(table, id, count) {
2430
- return table.getFirst({ target: crossFieldQueries_js_1.CrossFieldTarget.Destination, ...id }, count);
2431
- }
2432
- exports.getFirstAttachField = getFirstAttachField;
2433
- function addNodeRename(table, oldId, newId, count, detachLocation) {
2434
- if ((0, index_js_2.areEqualChangeAtomIds)(oldId, newId)) {
2435
- return;
2436
- }
2437
- for (const entry of table.oldToNewId.getAll2(oldId, count)) {
2438
- (0, internal_1.assert)(entry.value === undefined ||
2439
- (0, index_js_2.areEqualChangeAtomIds)(entry.value, (0, index_js_2.offsetChangeAtomId)(newId, entry.offset)), "Rename collision detected");
2440
- }
2441
- for (const entry of table.newToOldId.getAll2(newId, count)) {
2442
- (0, internal_1.assert)(entry.value === undefined ||
2443
- (0, index_js_2.areEqualChangeAtomIds)(entry.value, (0, index_js_2.offsetChangeAtomId)(oldId, entry.offset)), "Rename collision detected");
2444
- }
2445
- table.oldToNewId.set(oldId, count, newId);
2446
- table.newToOldId.set(newId, count, oldId);
2447
- if (detachLocation !== undefined) {
2448
- table.detachLocations.set(oldId, count, detachLocation);
2449
- }
2450
- }
2451
- exports.addNodeRename = addNodeRename;
2452
- /**
2453
- * Deletes any renames from `id`.
2454
- */
2455
- function deleteNodeRenameFrom(roots, id, count) {
2456
- for (const entry of roots.oldToNewId.getAll(id, count)) {
2457
- deleteNodeRenameEntry(roots, entry.start, entry.value, entry.length);
2458
- }
2459
- }
2460
- /**
2461
- * Deletes any renames to `id`.
2462
- */
2463
- function deleteNodeRenameTo(roots, id, count) {
2464
- for (const entry of roots.newToOldId.getAll(id, count)) {
2465
- deleteNodeRenameEntry(roots, entry.value, entry.start, entry.length);
2466
- }
2467
- }
2468
- function appendNodeRename(composedTable, oldId, newId, count, change1Table, detachLocation) {
2469
- let countToProcess = count;
2470
- const rename1Entry = change1Table.newToOldId.getFirst(oldId, countToProcess);
2471
- countToProcess = rename1Entry.length;
2472
- if (rename1Entry.value !== undefined) {
2473
- deleteNodeRenameFrom(composedTable, rename1Entry.value, countToProcess);
2474
- }
2475
- addNodeRename(composedTable, rename1Entry.value ?? oldId, newId, countToProcess, detachLocation);
2476
- tryRemoveDetachLocation(composedTable, newId, countToProcess);
2477
- if (countToProcess < count) {
2478
- const countRemaining = count - countToProcess;
2479
- appendNodeRename(composedTable, (0, index_js_2.offsetChangeAtomId)(oldId, countToProcess), (0, index_js_2.offsetChangeAtomId)(newId, countToProcess), countRemaining, change1Table, detachLocation);
2480
- }
2481
- }
2482
- function tryRemoveDetachLocation(roots, rootId, count) {
2483
- let countProcessed = count;
2484
- const renameEntry = roots.oldToNewId.getFirst(rootId, countProcessed);
2485
- countProcessed = renameEntry.length;
2486
- const outputDetachEntry = roots.outputDetachLocations.getFirst(rootId, countProcessed);
2487
- countProcessed = outputDetachEntry.length;
2488
- const nodeChangeEntry = (0, changeAtomIdBTree_js_1.rangeQueryChangeAtomIdMap)(roots.nodeChanges, rootId, countProcessed);
2489
- countProcessed = nodeChangeEntry.length;
2490
- if (nodeChangeEntry.value === undefined &&
2491
- renameEntry.value === undefined &&
2492
- outputDetachEntry.value === undefined) {
2493
- roots.detachLocations.delete(rootId, countProcessed);
2494
- }
2495
- const countRemaining = count - countProcessed;
2496
- if (countRemaining > 0) {
2497
- tryRemoveDetachLocation(roots, (0, index_js_2.offsetChangeAtomId)(rootId, countProcessed), countRemaining);
2498
- }
2499
- }
2500
- /**
2501
- * Deletes the entry renaming the ID range of length `count` from `oldId` to `newId`.
2502
- * This function assumes that such an entry exists.
2503
- */
2504
- function deleteNodeRenameEntry(roots, oldId, newId, count) {
2505
- roots.oldToNewId.delete(oldId, count);
2506
- roots.newToOldId.delete(newId, count);
2507
- }
2508
- function replaceRootTableRevision(table, replacer, nodeAliases) {
2509
- const oldToNewId = table.oldToNewId.mapEntries((id) => replacer.getUpdatedAtomId(id), (id) => replacer.getUpdatedAtomId(id));
2510
- const newToOldId = table.newToOldId.mapEntries((id) => replacer.getUpdatedAtomId(id), (id) => replacer.getUpdatedAtomId(id));
2511
- const nodeChanges = replaceIdMapRevisions(table.nodeChanges, replacer, (nodeId) => replacer.getUpdatedAtomId(normalizeNodeId(nodeId, nodeAliases)));
2512
- const detachLocations = table.detachLocations.mapEntries((id) => replacer.getUpdatedAtomId(id), (fieldId) => replaceFieldIdRevision(normalizeFieldId(fieldId, nodeAliases), replacer));
2513
- const outputDetachLocations = table.outputDetachLocations.mapEntries((id) => replacer.getUpdatedAtomId(id), (fieldId) => replaceFieldIdRevision(normalizeFieldId(fieldId, nodeAliases), replacer));
2514
- return { oldToNewId, newToOldId, nodeChanges, detachLocations, outputDetachLocations };
2515
- }
2516
- function newDetachedEntryMap() {
2517
- return new index_js_3.RangeMap(index_js_2.offsetChangeAtomId, index_js_2.subtractChangeAtomIds, offsetDetachedNodeEntry);
2518
- }
2519
- function offsetDetachedNodeEntry(entry, count) {
2520
- (0, internal_1.assert)(count <= 1 || entry.nodeChange === undefined, "Cannot split an entry with a node change");
2521
- return entry.detachId === undefined
2522
- ? entry
2523
- : { ...entry, detachId: (0, index_js_2.offsetChangeAtomId)(entry.detachId, count) };
2524
- }
2525
- function getFieldsWithRootMoves(roots, nodeAliases) {
2526
- const fields = (0, index_js_3.newTupleBTree)();
2527
- for (const { start: rootId, value: fieldId, length } of roots.detachLocations.entries()) {
2528
- let isRootMoved = false;
2529
- for (const renameEntry of roots.oldToNewId.getAll2(rootId, length)) {
2530
- if (renameEntry.value !== undefined) {
2531
- isRootMoved = true;
2532
- }
2533
- }
2534
- for (const outputDetachEntry of roots.outputDetachLocations.getAll2(rootId, length)) {
2535
- if (outputDetachEntry.value !== undefined) {
2536
- isRootMoved = true;
2537
- }
2538
- }
2539
- if (isRootMoved) {
2540
- fields.set(fieldIdKeyFromFieldId(normalizeFieldId(fieldId, nodeAliases)), true);
2541
- }
2542
- }
2543
- return fields;
2544
- }
2545
- function getFieldToRootChanges(roots, nodeAliases) {
2546
- const fields = (0, index_js_3.newTupleBTree)();
2547
- for (const rootIdKey of roots.nodeChanges.keys()) {
2548
- const rootId = { revision: rootIdKey[0], localId: rootIdKey[1] };
2549
- const detachLocation = roots.detachLocations.getFirst(rootId, 1).value;
2550
- if (detachLocation !== undefined) {
2551
- const fieldIdKey = fieldIdKeyFromFieldId(normalizeFieldId(detachLocation, nodeAliases));
2552
- let rootsInField = fields.get(fieldIdKey);
2553
- if (rootsInField === undefined) {
2554
- rootsInField = [];
2555
- fields.set(fieldIdKey, rootsInField);
2556
- }
2557
- rootsInField.push(rootId);
2558
- }
2559
- }
2560
- return fields;
2561
- }
2562
- function muteRootChanges(roots) {
2563
- return {
2564
- oldToNewId: (0, index_js_2.newChangeAtomIdTransform)(),
2565
- newToOldId: (0, index_js_2.newChangeAtomIdTransform)(),
2566
- nodeChanges: (0, index_js_3.brand)(roots.nodeChanges.clone()),
2567
- detachLocations: roots.detachLocations.clone(),
2568
- outputDetachLocations: (0, index_js_2.newChangeAtomIdRangeMap)(),
2569
- };
2570
- }
2571
- function validateChangeset(change, fieldKinds) {
2572
- const unreachableNodes = (0, index_js_3.brand)(change.nodeToParent.clone());
2573
- const unreachableCFKs = change.crossFieldKeys.clone();
2574
- validateFieldChanges(fieldKinds, change, change.fieldChanges, undefined, unreachableNodes, unreachableCFKs);
2575
- for (const [[revision, localId], node] of change.nodeChanges.entries()) {
2576
- if (node.fieldChanges === undefined) {
2577
- continue;
2578
- }
2579
- const nodeId = normalizeNodeId({ revision, localId }, change.nodeAliases);
2580
- validateFieldChanges(fieldKinds, change, node.fieldChanges, nodeId, unreachableNodes, unreachableCFKs);
2581
- }
2582
- for (const [detachIdKey, nodeId] of change.rootNodes.nodeChanges.entries()) {
2583
- const detachId = { revision: detachIdKey[0], localId: detachIdKey[1] };
2584
- const location = getNodeParent(change, nodeId);
2585
- (0, internal_1.assert)((0, index_js_2.areEqualChangeAtomIdOpts)(location.root, detachId), "Inconsistent node location");
2586
- const normalizedNodeId = normalizeNodeId(nodeId, change.nodeAliases);
2587
- unreachableNodes.delete([normalizedNodeId.revision, normalizedNodeId.localId]);
2588
- const fieldChanges = nodeChangeFromId(change.nodeChanges, change.nodeAliases, nodeId).fieldChanges;
2589
- if (fieldChanges !== undefined) {
2590
- validateFieldChanges(fieldKinds, change, fieldChanges, normalizedNodeId, unreachableNodes, unreachableCFKs);
2591
- }
2592
- }
2593
- (0, internal_1.assert)(unreachableNodes.size === 0, "Unreachable nodes found");
2594
- (0, internal_1.assert)(unreachableCFKs.entries().length === 0, "Unreachable cross-field keys found");
1749
+ function noNewChangesRebaseChild(child, _baseChild, _stateChange) {
1750
+ (0, internal_1.assert)(child === undefined, 0x9c3 /* There should be no new changes in this field */);
1751
+ return undefined;
2595
1752
  }
2596
- exports.validateChangeset = validateChangeset;
2597
- /**
2598
- * Asserts that each node has a correct entry in `change.nodeToParent`,
2599
- * and each cross field key has a correct entry in `change.crossFieldKeys`.
2600
- * @returns the number of children found.
2601
- */
2602
- function validateFieldChanges(fieldKinds, change, fieldChanges, nodeParent, unreachableNodes, unreachableCFKs) {
2603
- for (const [field, fieldChange] of fieldChanges.entries()) {
2604
- const fieldId = { nodeId: nodeParent, field };
2605
- const handler = getChangeHandler(fieldKinds, fieldChange.fieldKind);
2606
- for (const [child, _index] of handler.getNestedChanges(fieldChange.change)) {
2607
- const parentFieldId = getNodeParent(change, child);
2608
- (0, internal_1.assert)(parentFieldId.field !== undefined && areEqualFieldIds(parentFieldId.field, fieldId), 0xa4e /* Inconsistent node parentage */);
2609
- unreachableNodes.delete([child.revision, child.localId]);
2610
- }
2611
- for (const keyRange of handler.getCrossFieldKeys(fieldChange.change)) {
2612
- const fields = getFieldsForCrossFieldKey(change, keyRange.key, keyRange.count);
2613
- (0, internal_1.assert)(fields.length > 0, "Unregistered cross-field key");
2614
- for (const fieldFromLookup of fields) {
2615
- (0, internal_1.assert)(areEqualFieldIds(fieldFromLookup, fieldId), 0xa4f /* Inconsistent cross field keys */);
2616
- }
2617
- unreachableCFKs.delete(keyRange.key, keyRange.count);
2618
- }
2619
- }
1753
+ function areEqualFieldIds(a, b) {
1754
+ return (0, index_js_2.areEqualChangeAtomIdOpts)(a.nodeId, b.nodeId) && a.field === b.field;
2620
1755
  }
2621
1756
  //# sourceMappingURL=modularChangeFamily.js.map