@fluidframework/tree 2.83.0 → 2.90.0-378676

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 (781) hide show
  1. package/api-report/tree.alpha.api.md +1 -0
  2. package/dist/core/change-family/changeFamily.d.ts +4 -1
  3. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  4. package/dist/core/change-family/changeFamily.js.map +1 -1
  5. package/dist/core/change-family/index.d.ts +1 -1
  6. package/dist/core/change-family/index.d.ts.map +1 -1
  7. package/dist/core/change-family/index.js.map +1 -1
  8. package/dist/core/index.d.ts +3 -3
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +6 -4
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/core/rebase/changeRebaser.d.ts +6 -1
  13. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  14. package/dist/core/rebase/changeRebaser.js.map +1 -1
  15. package/dist/core/rebase/index.d.ts +1 -1
  16. package/dist/core/rebase/index.d.ts.map +1 -1
  17. package/dist/core/rebase/index.js +2 -1
  18. package/dist/core/rebase/index.js.map +1 -1
  19. package/dist/core/rebase/types.d.ts +1 -0
  20. package/dist/core/rebase/types.d.ts.map +1 -1
  21. package/dist/core/rebase/types.js +5 -1
  22. package/dist/core/rebase/types.js.map +1 -1
  23. package/dist/core/rebase/utils.d.ts.map +1 -1
  24. package/dist/core/rebase/utils.js +25 -7
  25. package/dist/core/rebase/utils.js.map +1 -1
  26. package/dist/core/tree/delta.d.ts +5 -0
  27. package/dist/core/tree/delta.d.ts.map +1 -1
  28. package/dist/core/tree/delta.js.map +1 -1
  29. package/dist/core/tree/detachedFieldIndex.d.ts +13 -1
  30. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  31. package/dist/core/tree/detachedFieldIndex.js +14 -1
  32. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  33. package/dist/core/tree/detachedFieldIndexTypes.d.ts +4 -0
  34. package/dist/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  35. package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
  36. package/dist/core/tree/index.d.ts +2 -2
  37. package/dist/core/tree/index.d.ts.map +1 -1
  38. package/dist/core/tree/index.js +4 -3
  39. package/dist/core/tree/index.js.map +1 -1
  40. package/dist/core/tree/pathTree.d.ts +11 -3
  41. package/dist/core/tree/pathTree.d.ts.map +1 -1
  42. package/dist/core/tree/pathTree.js +14 -2
  43. package/dist/core/tree/pathTree.js.map +1 -1
  44. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  45. package/dist/core/tree/visitDelta.js +17 -13
  46. package/dist/core/tree/visitDelta.js.map +1 -1
  47. package/dist/feature-libraries/changeAtomIdBTree.d.ts +3 -2
  48. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  49. package/dist/feature-libraries/changeAtomIdBTree.js +15 -2
  50. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  51. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +92 -44
  52. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  53. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +220 -70
  54. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  55. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  56. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +12 -2
  57. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  58. package/dist/feature-libraries/default-schema/index.d.ts +2 -1
  59. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  60. package/dist/feature-libraries/default-schema/index.js +4 -2
  61. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  62. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +40 -0
  63. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
  64. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js +153 -0
  65. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
  66. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
  67. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  68. package/dist/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
  69. package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  70. package/dist/feature-libraries/deltaUtils.d.ts +1 -0
  71. package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
  72. package/dist/feature-libraries/deltaUtils.js +6 -1
  73. package/dist/feature-libraries/deltaUtils.js.map +1 -1
  74. package/dist/feature-libraries/flex-tree/context.d.ts +9 -0
  75. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  76. package/dist/feature-libraries/flex-tree/context.js +6 -0
  77. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  78. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  79. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  80. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  81. package/dist/feature-libraries/flex-tree/lazyField.d.ts +8 -7
  82. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  83. package/dist/feature-libraries/flex-tree/lazyField.js +39 -8
  84. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  85. package/dist/feature-libraries/index.d.ts +3 -3
  86. package/dist/feature-libraries/index.d.ts.map +1 -1
  87. package/dist/feature-libraries/index.js +8 -4
  88. package/dist/feature-libraries/index.js.map +1 -1
  89. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  90. package/dist/feature-libraries/mitigatedChangeFamily.js +2 -2
  91. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  92. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +100 -24
  93. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  94. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +8 -12
  95. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  96. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +85 -51
  97. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  98. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  99. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  100. package/dist/feature-libraries/modular-schema/genericFieldKind.js +4 -9
  101. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  102. package/dist/feature-libraries/modular-schema/index.d.ts +3 -3
  103. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  104. package/dist/feature-libraries/modular-schema/index.js +2 -3
  105. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  106. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +18 -22
  107. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  108. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +276 -158
  109. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  110. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  111. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  112. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  113. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
  114. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
  115. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js +296 -0
  116. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
  117. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -0
  118. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  119. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +8 -0
  120. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  121. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +56 -22
  122. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  123. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +1390 -462
  124. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  125. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  126. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  127. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +1 -2
  128. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  129. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js +3 -3
  130. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  131. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +74 -0
  132. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
  133. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js +35 -0
  134. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
  135. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +49 -10
  136. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  137. package/dist/feature-libraries/modular-schema/modularChangeTypes.js +3 -3
  138. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  139. package/dist/feature-libraries/optional-field/optionalField.d.ts +13 -32
  140. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  141. package/dist/feature-libraries/optional-field/optionalField.js +257 -446
  142. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  143. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  144. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  145. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +31 -0
  146. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  147. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +31 -31
  148. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  149. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  150. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  151. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  152. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +57 -28
  153. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  154. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  155. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  156. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +57 -0
  157. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  158. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  159. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  160. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  161. package/dist/feature-libraries/optional-field/requiredField.d.ts +3 -2
  162. package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  163. package/dist/feature-libraries/optional-field/requiredField.js +6 -1
  164. package/dist/feature-libraries/optional-field/requiredField.js.map +1 -1
  165. package/dist/feature-libraries/sequence-field/compose.d.ts +6 -7
  166. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  167. package/dist/feature-libraries/sequence-field/compose.js +81 -259
  168. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  169. package/dist/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
  170. package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  171. package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  172. package/dist/feature-libraries/sequence-field/invert.d.ts +3 -3
  173. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  174. package/dist/feature-libraries/sequence-field/invert.js +65 -167
  175. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  176. package/dist/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  177. package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  178. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  179. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
  180. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  181. package/dist/feature-libraries/sequence-field/moveEffectTable.js +7 -90
  182. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  183. package/dist/feature-libraries/sequence-field/rebase.d.ts +3 -3
  184. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  185. package/dist/feature-libraries/sequence-field/rebase.js +109 -116
  186. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  187. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  188. package/dist/feature-libraries/sequence-field/replaceRevisions.js +19 -32
  189. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  190. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  191. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +1 -2
  192. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  193. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
  194. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  195. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +388 -187
  196. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  197. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  198. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +20 -62
  199. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  200. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  201. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  202. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +13 -13
  203. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  204. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
  205. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  206. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +16 -111
  207. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  208. package/dist/feature-libraries/sequence-field/types.d.ts +37 -74
  209. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  210. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  211. package/dist/feature-libraries/sequence-field/utils.d.ts +20 -25
  212. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  213. package/dist/feature-libraries/sequence-field/utils.js +159 -320
  214. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  215. package/dist/packageVersion.d.ts +1 -1
  216. package/dist/packageVersion.d.ts.map +1 -1
  217. package/dist/packageVersion.js +1 -1
  218. package/dist/packageVersion.js.map +1 -1
  219. package/dist/shared-tree/independentView.d.ts.map +1 -1
  220. package/dist/shared-tree/independentView.js +1 -1
  221. package/dist/shared-tree/independentView.js.map +1 -1
  222. package/dist/shared-tree/index.d.ts +1 -1
  223. package/dist/shared-tree/index.d.ts.map +1 -1
  224. package/dist/shared-tree/index.js.map +1 -1
  225. package/dist/shared-tree/schematizeTree.d.ts +4 -4
  226. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  227. package/dist/shared-tree/schematizeTree.js +2 -1
  228. package/dist/shared-tree/schematizeTree.js.map +1 -1
  229. package/dist/shared-tree/schematizingTreeView.d.ts +1 -5
  230. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  231. package/dist/shared-tree/schematizingTreeView.js +21 -35
  232. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  233. package/dist/shared-tree/sharedTree.d.ts +9 -3
  234. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  235. package/dist/shared-tree/sharedTree.js +4 -1
  236. package/dist/shared-tree/sharedTree.js.map +1 -1
  237. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -0
  238. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  239. package/dist/shared-tree/sharedTreeChangeCodecs.js +8 -0
  240. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  241. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +4 -4
  242. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  243. package/dist/shared-tree/sharedTreeChangeFamily.js +2 -2
  244. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  245. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
  246. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  247. package/dist/shared-tree/sharedTreeEditBuilder.js +14 -7
  248. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  249. package/dist/shared-tree/treeCheckout.d.ts +13 -11
  250. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  251. package/dist/shared-tree/treeCheckout.js +56 -6
  252. package/dist/shared-tree/treeCheckout.js.map +1 -1
  253. package/dist/shared-tree-core/branch.d.ts +3 -2
  254. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  255. package/dist/shared-tree-core/branch.js +4 -3
  256. package/dist/shared-tree-core/branch.js.map +1 -1
  257. package/dist/shared-tree-core/editManager.d.ts +2 -2
  258. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  259. package/dist/shared-tree-core/editManager.js +9 -9
  260. package/dist/shared-tree-core/editManager.js.map +1 -1
  261. package/dist/shared-tree-core/editManagerCodecs.d.ts +4 -0
  262. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  263. package/dist/shared-tree-core/editManagerCodecs.js +10 -2
  264. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  265. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  266. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  267. package/dist/shared-tree-core/editManagerFormatCommons.js +6 -0
  268. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  269. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  270. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  271. package/dist/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  272. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  273. package/dist/shared-tree-core/index.d.ts +2 -2
  274. package/dist/shared-tree-core/index.d.ts.map +1 -1
  275. package/dist/shared-tree-core/index.js +3 -1
  276. package/dist/shared-tree-core/index.js.map +1 -1
  277. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  278. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  279. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  280. package/dist/shared-tree-core/messageCodecs.d.ts +4 -0
  281. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  282. package/dist/shared-tree-core/messageCodecs.js +10 -2
  283. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  284. package/dist/shared-tree-core/messageFormat.d.ts +1 -0
  285. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  286. package/dist/shared-tree-core/messageFormat.js +6 -0
  287. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  288. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  289. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  290. package/dist/shared-tree-core/messageFormatV1ToV4.js +1 -0
  291. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  292. package/dist/shared-tree-core/sharedTreeCore.d.ts +1 -0
  293. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  294. package/dist/shared-tree-core/sharedTreeCore.js +1 -1
  295. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  296. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +16 -12
  297. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  298. package/dist/simple-tree/core/unhydratedFlexTree.js +59 -8
  299. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  300. package/dist/simple-tree/fieldSchema.d.ts +4 -4
  301. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  302. package/dist/simple-tree/fieldSchema.js.map +1 -1
  303. package/dist/simple-tree/index.d.ts +2 -2
  304. package/dist/simple-tree/index.d.ts.map +1 -1
  305. package/dist/simple-tree/index.js +1 -1
  306. package/dist/simple-tree/index.js.map +1 -1
  307. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  308. package/dist/simple-tree/node-kinds/array/arrayNode.js +5 -3
  309. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  310. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
  311. package/dist/simple-tree/node-kinds/common.js +1 -1
  312. package/dist/simple-tree/node-kinds/common.js.map +1 -1
  313. package/dist/simple-tree/node-kinds/map/mapNode.js +2 -2
  314. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  315. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  316. package/dist/simple-tree/node-kinds/object/objectNode.js +19 -19
  317. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  318. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  319. package/dist/simple-tree/node-kinds/record/recordNode.js +4 -2
  320. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  321. package/dist/simple-tree/prepareForInsertion.d.ts +54 -47
  322. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  323. package/dist/simple-tree/prepareForInsertion.js +183 -125
  324. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  325. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +8 -3
  326. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  327. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +27 -13
  328. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  329. package/dist/treeFactory.d.ts.map +1 -1
  330. package/dist/treeFactory.js +12 -2
  331. package/dist/treeFactory.js.map +1 -1
  332. package/dist/util/index.d.ts +1 -1
  333. package/dist/util/index.d.ts.map +1 -1
  334. package/dist/util/index.js +2 -1
  335. package/dist/util/index.js.map +1 -1
  336. package/dist/util/rangeMap.d.ts +23 -11
  337. package/dist/util/rangeMap.d.ts.map +1 -1
  338. package/dist/util/rangeMap.js +43 -10
  339. package/dist/util/rangeMap.js.map +1 -1
  340. package/lib/core/change-family/changeFamily.d.ts +4 -1
  341. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  342. package/lib/core/change-family/changeFamily.js.map +1 -1
  343. package/lib/core/change-family/index.d.ts +1 -1
  344. package/lib/core/change-family/index.d.ts.map +1 -1
  345. package/lib/core/change-family/index.js.map +1 -1
  346. package/lib/core/index.d.ts +3 -3
  347. package/lib/core/index.d.ts.map +1 -1
  348. package/lib/core/index.js +2 -2
  349. package/lib/core/index.js.map +1 -1
  350. package/lib/core/rebase/changeRebaser.d.ts +6 -1
  351. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  352. package/lib/core/rebase/changeRebaser.js.map +1 -1
  353. package/lib/core/rebase/index.d.ts +1 -1
  354. package/lib/core/rebase/index.d.ts.map +1 -1
  355. package/lib/core/rebase/index.js +1 -1
  356. package/lib/core/rebase/index.js.map +1 -1
  357. package/lib/core/rebase/types.d.ts +1 -0
  358. package/lib/core/rebase/types.d.ts.map +1 -1
  359. package/lib/core/rebase/types.js +3 -0
  360. package/lib/core/rebase/types.js.map +1 -1
  361. package/lib/core/rebase/utils.d.ts.map +1 -1
  362. package/lib/core/rebase/utils.js +25 -7
  363. package/lib/core/rebase/utils.js.map +1 -1
  364. package/lib/core/tree/delta.d.ts +5 -0
  365. package/lib/core/tree/delta.d.ts.map +1 -1
  366. package/lib/core/tree/delta.js.map +1 -1
  367. package/lib/core/tree/detachedFieldIndex.d.ts +13 -1
  368. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  369. package/lib/core/tree/detachedFieldIndex.js +15 -2
  370. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  371. package/lib/core/tree/detachedFieldIndexTypes.d.ts +4 -0
  372. package/lib/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  373. package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
  374. package/lib/core/tree/index.d.ts +2 -2
  375. package/lib/core/tree/index.d.ts.map +1 -1
  376. package/lib/core/tree/index.js +1 -1
  377. package/lib/core/tree/index.js.map +1 -1
  378. package/lib/core/tree/pathTree.d.ts +11 -3
  379. package/lib/core/tree/pathTree.d.ts.map +1 -1
  380. package/lib/core/tree/pathTree.js +12 -1
  381. package/lib/core/tree/pathTree.js.map +1 -1
  382. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  383. package/lib/core/tree/visitDelta.js +17 -13
  384. package/lib/core/tree/visitDelta.js.map +1 -1
  385. package/lib/feature-libraries/changeAtomIdBTree.d.ts +3 -2
  386. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  387. package/lib/feature-libraries/changeAtomIdBTree.js +15 -3
  388. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  389. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +92 -44
  390. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  391. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +217 -69
  392. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  393. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  394. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +12 -2
  395. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  396. package/lib/feature-libraries/default-schema/index.d.ts +2 -1
  397. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  398. package/lib/feature-libraries/default-schema/index.js +2 -1
  399. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  400. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +40 -0
  401. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
  402. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js +149 -0
  403. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
  404. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
  405. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  406. package/lib/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
  407. package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  408. package/lib/feature-libraries/deltaUtils.d.ts +1 -0
  409. package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
  410. package/lib/feature-libraries/deltaUtils.js +5 -1
  411. package/lib/feature-libraries/deltaUtils.js.map +1 -1
  412. package/lib/feature-libraries/flex-tree/context.d.ts +9 -0
  413. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  414. package/lib/feature-libraries/flex-tree/context.js +6 -0
  415. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  416. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  417. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  418. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  419. package/lib/feature-libraries/flex-tree/lazyField.d.ts +8 -7
  420. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  421. package/lib/feature-libraries/flex-tree/lazyField.js +40 -9
  422. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  423. package/lib/feature-libraries/index.d.ts +3 -3
  424. package/lib/feature-libraries/index.d.ts.map +1 -1
  425. package/lib/feature-libraries/index.js +3 -3
  426. package/lib/feature-libraries/index.js.map +1 -1
  427. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  428. package/lib/feature-libraries/mitigatedChangeFamily.js +2 -2
  429. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  430. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +100 -24
  431. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  432. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +7 -10
  433. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  434. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +85 -51
  435. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  436. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  437. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  438. package/lib/feature-libraries/modular-schema/genericFieldKind.js +4 -9
  439. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  440. package/lib/feature-libraries/modular-schema/index.d.ts +3 -3
  441. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  442. package/lib/feature-libraries/modular-schema/index.js +1 -1
  443. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  444. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +18 -22
  445. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  446. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +267 -144
  447. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  448. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  449. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  450. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  451. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
  452. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
  453. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js +292 -0
  454. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
  455. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -0
  456. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  457. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +8 -0
  458. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  459. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +56 -22
  460. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  461. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +1387 -468
  462. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  463. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  464. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  465. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +1 -2
  466. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  467. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js +1 -1
  468. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  469. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +74 -0
  470. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
  471. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js +32 -0
  472. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
  473. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +49 -10
  474. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  475. package/lib/feature-libraries/modular-schema/modularChangeTypes.js +1 -1
  476. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  477. package/lib/feature-libraries/optional-field/optionalField.d.ts +13 -32
  478. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  479. package/lib/feature-libraries/optional-field/optionalField.js +254 -442
  480. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  481. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  482. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  483. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +27 -0
  484. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  485. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +31 -31
  486. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  487. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  488. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  489. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  490. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +55 -26
  491. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  492. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  493. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  494. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +53 -0
  495. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  496. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  497. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  498. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  499. package/lib/feature-libraries/optional-field/requiredField.d.ts +3 -2
  500. package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  501. package/lib/feature-libraries/optional-field/requiredField.js +5 -1
  502. package/lib/feature-libraries/optional-field/requiredField.js.map +1 -1
  503. package/lib/feature-libraries/sequence-field/compose.d.ts +6 -7
  504. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  505. package/lib/feature-libraries/sequence-field/compose.js +83 -261
  506. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  507. package/lib/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
  508. package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  509. package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  510. package/lib/feature-libraries/sequence-field/invert.d.ts +3 -3
  511. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  512. package/lib/feature-libraries/sequence-field/invert.js +67 -169
  513. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  514. package/lib/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  515. package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  516. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  517. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
  518. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  519. package/lib/feature-libraries/sequence-field/moveEffectTable.js +6 -84
  520. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  521. package/lib/feature-libraries/sequence-field/rebase.d.ts +3 -3
  522. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  523. package/lib/feature-libraries/sequence-field/rebase.js +111 -118
  524. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  525. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  526. package/lib/feature-libraries/sequence-field/replaceRevisions.js +19 -32
  527. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  528. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  529. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -3
  530. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  531. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
  532. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  533. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +379 -182
  534. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  535. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  536. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +21 -63
  537. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  538. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  539. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  540. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +13 -13
  541. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  542. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
  543. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  544. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +16 -111
  545. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  546. package/lib/feature-libraries/sequence-field/types.d.ts +37 -74
  547. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  548. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  549. package/lib/feature-libraries/sequence-field/utils.d.ts +20 -25
  550. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  551. package/lib/feature-libraries/sequence-field/utils.js +155 -313
  552. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  553. package/lib/packageVersion.d.ts +1 -1
  554. package/lib/packageVersion.d.ts.map +1 -1
  555. package/lib/packageVersion.js +1 -1
  556. package/lib/packageVersion.js.map +1 -1
  557. package/lib/shared-tree/independentView.d.ts.map +1 -1
  558. package/lib/shared-tree/independentView.js +1 -1
  559. package/lib/shared-tree/independentView.js.map +1 -1
  560. package/lib/shared-tree/index.d.ts +1 -1
  561. package/lib/shared-tree/index.d.ts.map +1 -1
  562. package/lib/shared-tree/index.js.map +1 -1
  563. package/lib/shared-tree/schematizeTree.d.ts +4 -4
  564. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  565. package/lib/shared-tree/schematizeTree.js +3 -2
  566. package/lib/shared-tree/schematizeTree.js.map +1 -1
  567. package/lib/shared-tree/schematizingTreeView.d.ts +1 -5
  568. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  569. package/lib/shared-tree/schematizingTreeView.js +24 -38
  570. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  571. package/lib/shared-tree/sharedTree.d.ts +9 -3
  572. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  573. package/lib/shared-tree/sharedTree.js +4 -1
  574. package/lib/shared-tree/sharedTree.js.map +1 -1
  575. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -0
  576. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  577. package/lib/shared-tree/sharedTreeChangeCodecs.js +8 -0
  578. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  579. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +4 -4
  580. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  581. package/lib/shared-tree/sharedTreeChangeFamily.js +3 -3
  582. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  583. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
  584. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  585. package/lib/shared-tree/sharedTreeEditBuilder.js +12 -6
  586. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  587. package/lib/shared-tree/treeCheckout.d.ts +13 -11
  588. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  589. package/lib/shared-tree/treeCheckout.js +59 -9
  590. package/lib/shared-tree/treeCheckout.js.map +1 -1
  591. package/lib/shared-tree-core/branch.d.ts +3 -2
  592. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  593. package/lib/shared-tree-core/branch.js +4 -3
  594. package/lib/shared-tree-core/branch.js.map +1 -1
  595. package/lib/shared-tree-core/editManager.d.ts +2 -2
  596. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  597. package/lib/shared-tree-core/editManager.js +9 -9
  598. package/lib/shared-tree-core/editManager.js.map +1 -1
  599. package/lib/shared-tree-core/editManagerCodecs.d.ts +4 -0
  600. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  601. package/lib/shared-tree-core/editManagerCodecs.js +8 -1
  602. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  603. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  604. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  605. package/lib/shared-tree-core/editManagerFormatCommons.js +6 -0
  606. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  607. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  608. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  609. package/lib/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  610. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  611. package/lib/shared-tree-core/index.d.ts +2 -2
  612. package/lib/shared-tree-core/index.d.ts.map +1 -1
  613. package/lib/shared-tree-core/index.js +2 -2
  614. package/lib/shared-tree-core/index.js.map +1 -1
  615. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  616. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  617. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  618. package/lib/shared-tree-core/messageCodecs.d.ts +4 -0
  619. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  620. package/lib/shared-tree-core/messageCodecs.js +8 -1
  621. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  622. package/lib/shared-tree-core/messageFormat.d.ts +1 -0
  623. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  624. package/lib/shared-tree-core/messageFormat.js +6 -0
  625. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  626. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  627. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  628. package/lib/shared-tree-core/messageFormatV1ToV4.js +1 -0
  629. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  630. package/lib/shared-tree-core/sharedTreeCore.d.ts +1 -0
  631. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  632. package/lib/shared-tree-core/sharedTreeCore.js +1 -1
  633. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  634. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +16 -12
  635. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  636. package/lib/simple-tree/core/unhydratedFlexTree.js +58 -8
  637. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  638. package/lib/simple-tree/fieldSchema.d.ts +4 -4
  639. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  640. package/lib/simple-tree/fieldSchema.js.map +1 -1
  641. package/lib/simple-tree/index.d.ts +2 -2
  642. package/lib/simple-tree/index.d.ts.map +1 -1
  643. package/lib/simple-tree/index.js +1 -1
  644. package/lib/simple-tree/index.js.map +1 -1
  645. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  646. package/lib/simple-tree/node-kinds/array/arrayNode.js +6 -4
  647. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  648. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
  649. package/lib/simple-tree/node-kinds/common.js +2 -2
  650. package/lib/simple-tree/node-kinds/common.js.map +1 -1
  651. package/lib/simple-tree/node-kinds/map/mapNode.js +2 -2
  652. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  653. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  654. package/lib/simple-tree/node-kinds/object/objectNode.js +20 -20
  655. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  656. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  657. package/lib/simple-tree/node-kinds/record/recordNode.js +4 -2
  658. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  659. package/lib/simple-tree/prepareForInsertion.d.ts +54 -47
  660. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  661. package/lib/simple-tree/prepareForInsertion.js +184 -125
  662. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  663. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +8 -3
  664. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  665. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +23 -10
  666. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  667. package/lib/treeFactory.d.ts.map +1 -1
  668. package/lib/treeFactory.js +13 -3
  669. package/lib/treeFactory.js.map +1 -1
  670. package/lib/util/index.d.ts +1 -1
  671. package/lib/util/index.d.ts.map +1 -1
  672. package/lib/util/index.js +1 -1
  673. package/lib/util/index.js.map +1 -1
  674. package/lib/util/rangeMap.d.ts +23 -11
  675. package/lib/util/rangeMap.d.ts.map +1 -1
  676. package/lib/util/rangeMap.js +41 -9
  677. package/lib/util/rangeMap.js.map +1 -1
  678. package/package.json +21 -21
  679. package/src/core/change-family/changeFamily.ts +5 -0
  680. package/src/core/change-family/index.ts +1 -0
  681. package/src/core/index.ts +4 -1
  682. package/src/core/rebase/changeRebaser.ts +6 -1
  683. package/src/core/rebase/index.ts +1 -0
  684. package/src/core/rebase/types.ts +4 -0
  685. package/src/core/rebase/utils.ts +31 -7
  686. package/src/core/tree/delta.ts +6 -0
  687. package/src/core/tree/detachedFieldIndex.ts +29 -1
  688. package/src/core/tree/detachedFieldIndexTypes.ts +5 -0
  689. package/src/core/tree/index.ts +13 -12
  690. package/src/core/tree/pathTree.ts +16 -4
  691. package/src/core/tree/visitDelta.ts +31 -11
  692. package/src/feature-libraries/changeAtomIdBTree.ts +28 -3
  693. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +369 -127
  694. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +13 -4
  695. package/src/feature-libraries/default-schema/index.ts +16 -5
  696. package/src/feature-libraries/default-schema/locationBasedEditBuilder.ts +231 -0
  697. package/src/feature-libraries/default-schema/mappedEditBuilder.ts +35 -9
  698. package/src/feature-libraries/deltaUtils.ts +6 -1
  699. package/src/feature-libraries/flex-tree/context.ts +17 -0
  700. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +7 -8
  701. package/src/feature-libraries/flex-tree/lazyField.ts +65 -24
  702. package/src/feature-libraries/index.ts +22 -9
  703. package/src/feature-libraries/mitigatedChangeFamily.ts +3 -1
  704. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +144 -47
  705. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +113 -58
  706. package/src/feature-libraries/modular-schema/genericFieldKind.ts +7 -18
  707. package/src/feature-libraries/modular-schema/index.ts +16 -16
  708. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +623 -348
  709. package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +1 -0
  710. package/src/feature-libraries/modular-schema/modularChangeCodecV3.ts +649 -0
  711. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +14 -0
  712. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +2694 -748
  713. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +1 -0
  714. package/src/feature-libraries/modular-schema/modularChangeFormatV2.ts +1 -1
  715. package/src/feature-libraries/modular-schema/modularChangeFormatV3.ts +67 -0
  716. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +62 -10
  717. package/src/feature-libraries/optional-field/optionalField.ts +359 -568
  718. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +45 -0
  719. package/src/feature-libraries/optional-field/optionalFieldChangeTypes.ts +31 -35
  720. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +89 -35
  721. package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +94 -0
  722. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -1
  723. package/src/feature-libraries/optional-field/requiredField.ts +15 -2
  724. package/src/feature-libraries/sequence-field/compose.ts +137 -522
  725. package/src/feature-libraries/sequence-field/helperTypes.ts +34 -19
  726. package/src/feature-libraries/sequence-field/invert.ts +102 -228
  727. package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
  728. package/src/feature-libraries/sequence-field/moveEffectTable.ts +8 -195
  729. package/src/feature-libraries/sequence-field/rebase.ts +171 -207
  730. package/src/feature-libraries/sequence-field/replaceRevisions.ts +26 -52
  731. package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +8 -3
  732. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +677 -229
  733. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +56 -70
  734. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +28 -30
  735. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +21 -131
  736. package/src/feature-libraries/sequence-field/types.ts +40 -79
  737. package/src/feature-libraries/sequence-field/utils.ts +211 -370
  738. package/src/packageVersion.ts +1 -1
  739. package/src/shared-tree/independentView.ts +12 -6
  740. package/src/shared-tree/index.ts +3 -2
  741. package/src/shared-tree/schematizeTree.ts +21 -8
  742. package/src/shared-tree/schematizingTreeView.ts +38 -68
  743. package/src/shared-tree/sharedTree.ts +30 -15
  744. package/src/shared-tree/sharedTreeChangeCodecs.ts +8 -0
  745. package/src/shared-tree/sharedTreeChangeFamily.ts +7 -4
  746. package/src/shared-tree/sharedTreeEditBuilder.ts +43 -8
  747. package/src/shared-tree/treeCheckout.ts +93 -17
  748. package/src/shared-tree-core/branch.ts +8 -2
  749. package/src/shared-tree-core/editManager.ts +16 -2
  750. package/src/shared-tree-core/editManagerCodecs.ts +11 -1
  751. package/src/shared-tree-core/editManagerFormatCommons.ts +6 -0
  752. package/src/shared-tree-core/editManagerFormatV1toV4.ts +3 -1
  753. package/src/shared-tree-core/index.ts +2 -0
  754. package/src/shared-tree-core/messageCodecV1ToV4.ts +2 -1
  755. package/src/shared-tree-core/messageCodecs.ts +11 -1
  756. package/src/shared-tree-core/messageFormat.ts +6 -0
  757. package/src/shared-tree-core/messageFormatV1ToV4.ts +3 -1
  758. package/src/shared-tree-core/sharedTreeCore.ts +4 -1
  759. package/src/simple-tree/core/unhydratedFlexTree.ts +82 -35
  760. package/src/simple-tree/fieldSchema.ts +6 -4
  761. package/src/simple-tree/index.ts +2 -1
  762. package/src/simple-tree/node-kinds/array/arrayNode.ts +7 -5
  763. package/src/simple-tree/node-kinds/common.ts +2 -5
  764. package/src/simple-tree/node-kinds/map/mapNode.ts +4 -4
  765. package/src/simple-tree/node-kinds/object/objectNode.ts +26 -26
  766. package/src/simple-tree/node-kinds/record/recordNode.ts +10 -9
  767. package/src/simple-tree/prepareForInsertion.ts +342 -200
  768. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +35 -15
  769. package/src/treeFactory.ts +16 -4
  770. package/src/util/index.ts +3 -0
  771. package/src/util/rangeMap.ts +68 -26
  772. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
  773. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
  774. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -50
  775. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
  776. package/docs/main/sequence-field/move-composition.md +0 -46
  777. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
  778. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
  779. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -46
  780. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
  781. package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +0 -57
@@ -3,542 +3,354 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { assert } from "@fluidframework/core-utils/internal";
6
- import { Multiplicity, areEqualChangeAtomIds, forbiddenFieldKindIdentifier, makeChangeAtomId, taggedAtomId, } from "../../core/index.js";
7
- import { SizedNestedMap, deleteFromNestedMap, setInNestedMap, tryGetFromNestedMap, } from "../../util/index.js";
6
+ import { Multiplicity, areEqualChangeAtomIdOpts, forbiddenFieldKindIdentifier, makeChangeAtomId, } from "../../core/index.js";
8
7
  import { nodeIdFromChangeAtom } from "../deltaUtils.js";
9
8
  import { optionalIdentifier, identifierFieldIdentifier, requiredIdentifier, } from "../fieldKindIdentifiers.js";
10
- import { NodeAttachState, FlexFieldKind, } from "../modular-schema/index.js";
9
+ import { NodeMoveType, FlexFieldKind, } from "../modular-schema/index.js";
11
10
  import { makeOptionalFieldCodecFamily } from "./optionalFieldCodecs.js";
12
- export class RegisterMap {
13
- constructor() {
14
- this.nestedMapData = new SizedNestedMap();
15
- }
16
- clone() {
17
- const clone = new RegisterMap();
18
- for (const [id, t] of this.entries()) {
19
- clone.set(id, t);
20
- }
21
- return clone;
22
- }
23
- set(id, childChange) {
24
- if (id === "self") {
25
- this.nestedMapData.set("self", undefined, childChange);
26
- }
27
- else {
28
- this.nestedMapData.set(id.localId, id.revision, childChange);
29
- }
30
- }
31
- get(id) {
32
- return id === "self"
33
- ? this.nestedMapData.tryGet(id, undefined)
34
- : this.nestedMapData.tryGet(id.localId, id.revision);
35
- }
36
- has(id) {
37
- return this.get(id) !== undefined;
38
- }
39
- delete(id) {
40
- return id === "self"
41
- ? this.nestedMapData.delete("self", undefined)
42
- : this.nestedMapData.delete(id.localId, id.revision);
43
- }
44
- keys() {
45
- const changeIds = [];
46
- for (const [localId, nestedMap] of this.nestedMapData) {
47
- if (localId === "self") {
48
- changeIds.push("self");
49
- }
50
- else {
51
- for (const [revisionTag, _] of nestedMap) {
52
- changeIds.push(revisionTag === undefined ? { localId } : { localId, revision: revisionTag });
53
- }
54
- }
55
- }
56
- return changeIds;
57
- }
58
- values() {
59
- return this.nestedMapData.values();
60
- }
61
- entries() {
62
- const entries = [];
63
- for (const changeId of this.keys()) {
64
- if (changeId === "self") {
65
- const entry = this.nestedMapData.tryGet("self", undefined);
66
- assert(entry !== undefined, 0x770 /* Entry should not be undefined when iterating keys. */);
67
- entries.push(["self", entry]);
68
- }
69
- else {
70
- const entry = this.nestedMapData.tryGet(changeId.localId, changeId.revision);
71
- assert(entry !== undefined, 0x771 /* Entry should not be undefined when iterating keys. */);
72
- entries.push([changeId, entry]);
73
- }
74
- }
75
- return entries;
76
- }
77
- get size() {
78
- return this.nestedMapData.size;
79
- }
80
- }
81
11
  export const optionalChangeRebaser = {
82
- compose: (change1, change2, composeChild) => {
83
- const { srcToDst, dstToSrc } = getBidirectionalMaps(change1.moves);
84
- const change1FieldSrc = change1.valueReplace?.src;
85
- const change1FieldDst = getEffectfulDst(change1.valueReplace);
86
- const change2FieldSrc = change2.valueReplace?.src;
87
- let composedFieldSrc;
88
- if (change2FieldSrc !== undefined) {
89
- if (change2FieldSrc === "self") {
90
- composedFieldSrc = change1FieldSrc ?? change2FieldSrc;
91
- }
92
- else if (change1FieldDst !== undefined &&
93
- areEqualRegisterIds(change1FieldDst, change2FieldSrc)) {
94
- composedFieldSrc = "self";
95
- }
96
- else {
97
- composedFieldSrc =
98
- tryGetFromNestedMap(dstToSrc, change2FieldSrc.revision, change2FieldSrc.localId) ??
99
- change2FieldSrc;
100
- }
101
- }
102
- else if (change1FieldSrc !== undefined && change2.valueReplace === undefined) {
103
- composedFieldSrc = change1FieldSrc;
104
- }
105
- const childChanges2ByOriginalId = new RegisterMap();
106
- for (const [id, change] of change2.childChanges) {
107
- if (id === "self") {
108
- if (change1FieldSrc === undefined) {
109
- childChanges2ByOriginalId.set("self", change);
110
- }
111
- else {
112
- childChanges2ByOriginalId.set(change1FieldSrc, change);
113
- }
114
- }
115
- else {
116
- if (change1FieldDst !== undefined && areEqualChangeAtomIds(change1FieldDst, id)) {
117
- childChanges2ByOriginalId.set("self", change);
118
- }
119
- else {
120
- const originalId = tryGetFromNestedMap(dstToSrc, id.revision, id.localId);
121
- childChanges2ByOriginalId.set(originalId ?? id, change);
122
- }
123
- }
124
- }
125
- const composedMoves = [];
126
- const composedChildChanges = [];
127
- const composed = {
128
- moves: composedMoves,
129
- childChanges: composedChildChanges,
130
- };
131
- for (const [id, childChange1] of change1.childChanges) {
132
- const childChange2 = childChanges2ByOriginalId.get(id);
133
- composedChildChanges.push([id, composeChild(childChange1, childChange2)]);
134
- childChanges2ByOriginalId.delete(id);
135
- }
136
- for (const [id, childChange2] of childChanges2ByOriginalId.entries()) {
137
- composedChildChanges.push([id, composeChild(undefined, childChange2)]);
12
+ compose,
13
+ invert: (change, isRollback, genId, revision, nodeManager) => {
14
+ const inverted = {};
15
+ const detachId = getEffectiveDetachId(change);
16
+ if (detachId !== undefined) {
17
+ const attachIdForInverse = isRollback
18
+ ? detachId
19
+ : makeChangeAtomId(detachId.localId, revision);
20
+ nodeManager.invertDetach(detachId, 1, change.childChange, attachIdForInverse);
21
+ inverted.valueReplace = {
22
+ isEmpty: change.valueReplace?.src === undefined,
23
+ dst: makeChangeAtomId(genId.allocate(), revision),
24
+ src: attachIdForInverse,
25
+ };
138
26
  }
139
- for (const [leg2Src, leg2Dst] of change2.moves) {
140
- const leg1Src = tryGetFromNestedMap(dstToSrc, leg2Src.revision, leg2Src.localId);
141
- if (leg1Src !== undefined) {
142
- composedMoves.push([leg1Src, leg2Dst]);
143
- deleteFromNestedMap(srcToDst, leg1Src.revision, leg1Src.localId);
144
- deleteFromNestedMap(dstToSrc, leg2Src.revision, leg2Src.localId);
27
+ if (change.valueReplace?.src !== undefined) {
28
+ const attachEntry = nodeManager.invertAttach(change.valueReplace.src, 1);
29
+ const detachIdForInverse = invertAttachId(change.valueReplace.src, revision, isRollback, attachEntry.value?.detachId);
30
+ if (attachEntry.value?.nodeChange !== undefined) {
31
+ inverted.childChange = attachEntry.value.nodeChange;
145
32
  }
146
- else if (change1FieldDst === undefined ||
147
- !areEqualChangeAtomIds(change1FieldDst, leg2Src)) {
148
- composedMoves.push([leg2Src, leg2Dst]);
33
+ // TODO: Always use nodeDetach instead of valueReplace if not supporting older client versions.
34
+ if (isPin(change)) {
35
+ inverted.nodeDetach = detachIdForInverse;
149
36
  }
150
- }
151
- for (const [revision, innerMap] of srcToDst.entries()) {
152
- for (const [localId, dst] of innerMap.entries()) {
153
- const src = makeChangeAtomId(localId, revision);
154
- if (composedFieldSrc === undefined || !areEqualRegisterIds(src, composedFieldSrc)) {
155
- composedMoves.push([src, dst]);
156
- }
37
+ else if (inverted.valueReplace === undefined) {
38
+ inverted.valueReplace = { isEmpty: false, dst: detachIdForInverse };
157
39
  }
158
- }
159
- if (change1FieldSrc !== undefined &&
160
- change1FieldSrc !== "self" &&
161
- change2.valueReplace !== undefined) {
162
- const change2FieldDst = change2.valueReplace.dst;
163
- if (isReplaceEffectful(change2.valueReplace) &&
164
- !areEqualChangeAtomIds(change1FieldSrc, change2FieldDst)) {
165
- composedMoves.push([change1FieldSrc, change2FieldDst]);
40
+ else {
41
+ inverted.valueReplace.dst = detachIdForInverse;
166
42
  }
167
43
  }
168
- const firstChange = change1.valueReplace ?? change2.valueReplace;
169
- if (firstChange === undefined) {
170
- return composed;
171
- }
172
- const replace = {
173
- isEmpty: firstChange.isEmpty,
174
- dst: getComposedReplaceDst(change1.valueReplace, change2),
175
- };
176
- if (composedFieldSrc !== undefined) {
177
- replace.src = composedFieldSrc;
44
+ else if (detachId === undefined && change.childChange !== undefined) {
45
+ // This change does not affect which node is in the field, so its child change should remain here.
46
+ inverted.childChange = change.childChange;
178
47
  }
179
- composed.valueReplace = replace;
180
- return composed;
48
+ return inverted;
181
49
  },
182
- invert: (change, isRollback, genId, revision) => {
183
- const { moves, childChanges, valueReplace } = change;
184
- const invertIdMap = new RegisterMap();
185
- const invertedMoves = [];
186
- for (const [src, dst] of moves) {
187
- invertIdMap.set(src, dst);
188
- invertedMoves.push([dst, src]);
189
- }
190
- if (valueReplace !== undefined) {
191
- const effectfulDst = getEffectfulDst(valueReplace);
192
- if (effectfulDst !== undefined) {
193
- invertIdMap.set("self", valueReplace.dst);
50
+ rebase: (newChange, overChange, rebaseChild, _genId, nodeManager, _metadata, rebaseVersion) => {
51
+ const rebased = {};
52
+ const rebasedChild = rebaseChild(newChange.childChange, overChange.childChange);
53
+ const overDetach = getEffectiveDetachId(overChange);
54
+ // Note that composition ignores rebase version, and so will create node detaches even when we are supporting collaboration with older clients.
55
+ // Therefore, in rebase version 1 we must rebase node detach as if it were a clear, matching the behavior of older clients.
56
+ const hasNodeDetachTreatedAsClear = newChange.nodeDetach !== undefined && rebaseVersion < 2 && !isPin(newChange);
57
+ if (overDetach !== undefined) {
58
+ const nodeDetach = hasNodeDetachTreatedAsClear ? undefined : newChange.nodeDetach;
59
+ nodeManager.rebaseOverDetach(overDetach, 1, nodeDetach, rebasedChild);
60
+ }
61
+ const overAttach = overChange.valueReplace?.src;
62
+ if (overAttach !== undefined) {
63
+ const movedChangeEntry = nodeManager.getNewChangesForBaseAttach(overAttach, 1).value;
64
+ if (movedChangeEntry?.nodeChange !== undefined) {
65
+ rebased.childChange = movedChangeEntry.nodeChange;
194
66
  }
195
- if (valueReplace.src !== undefined) {
196
- invertIdMap.set(valueReplace.src, "self");
197
- }
198
- }
199
- const inverted = {
200
- moves: invertedMoves,
201
- childChanges: childChanges.map(([id, childChange]) => {
202
- return [invertIdMap.get(id) ?? id, childChange];
203
- }),
204
- };
205
- if (valueReplace !== undefined) {
206
- if (isReplaceEffectful(valueReplace)) {
207
- const replace = valueReplace.src === undefined
208
- ? {
209
- isEmpty: true,
210
- dst: makeChangeAtomId(genId.allocate(), revision),
211
- }
212
- : {
213
- isEmpty: false,
214
- dst: isRollback
215
- ? valueReplace.src
216
- : makeChangeAtomId(genId.allocate(), revision),
217
- };
218
- if (valueReplace.isEmpty === false) {
219
- replace.src = valueReplace.dst;
67
+ if (movedChangeEntry?.detachId !== undefined) {
68
+ rebased.nodeDetach = movedChangeEntry.detachId;
69
+ if (newChange.valueReplace !== undefined) {
70
+ // Now that the rebased change has a node detach,
71
+ // the detach from the value replace no longer takes effect.
72
+ nodeManager.removeDetach(newChange.valueReplace.dst, 1);
220
73
  }
221
- inverted.valueReplace = replace;
222
- }
223
- else if (!isRollback && valueReplace.src === "self") {
224
- inverted.valueReplace = {
225
- isEmpty: false,
226
- src: "self",
227
- dst: makeChangeAtomId(genId.allocate(), revision),
228
- };
229
74
  }
230
75
  }
231
- return inverted;
232
- },
233
- rebase: (change, overChange, rebaseChild) => {
234
- const { moves, childChanges, valueReplace: field } = change;
235
- // TODO: avoid computing the dstToSrc map if it's not needed.
236
- // TODO: de-dupe overSrcToDst and forwardMap
237
- const { srcToDst: overSrcToDst } = getBidirectionalMaps(overChange.moves);
238
- const forwardMap = new RegisterMap();
239
- for (const [src, dst] of overChange.moves) {
240
- forwardMap.set(src, dst);
241
- }
242
- if (overChange.valueReplace !== undefined) {
243
- const effectfulDst = getEffectfulDst(overChange.valueReplace);
244
- if (effectfulDst !== undefined) {
245
- forwardMap.set("self", overChange.valueReplace.dst);
76
+ else if (overDetach === undefined) {
77
+ // `overChange` did not change which node is in the field.
78
+ if (rebasedChild !== undefined) {
79
+ rebased.childChange = rebasedChild;
246
80
  }
247
- if (overChange.valueReplace.src !== undefined) {
248
- forwardMap.set(overChange.valueReplace.src, "self");
81
+ if (newChange.nodeDetach !== undefined) {
82
+ rebased.nodeDetach = newChange.nodeDetach;
249
83
  }
250
84
  }
251
- const rebasedMoves = [];
252
- for (const [src, dst] of moves) {
253
- const newDst = tryGetFromNestedMap(overSrcToDst, src.revision, src.localId);
254
- rebasedMoves.push([src, newDst ?? dst]);
255
- }
256
- const overChildChangesBySrc = new RegisterMap();
257
- for (const [id, childChange] of overChange.childChanges) {
258
- overChildChangesBySrc.set(id, childChange);
259
- }
260
- const rebasedChildChanges = [];
261
- for (const [id, childChange] of childChanges) {
262
- const overChildChange = overChildChangesBySrc.get(id);
263
- if (overChildChange !== undefined) {
264
- overChildChangesBySrc.delete(id);
85
+ if (hasNodeDetachTreatedAsClear && overDetach !== undefined) {
86
+ // In order to emulate the rebasing behavior of older clients,
87
+ // we convert the node detach to a clear.
88
+ const valueReplace = {
89
+ dst: newChange.nodeDetach,
90
+ isEmpty: overAttach === undefined,
91
+ };
92
+ if (newChange.valueReplace?.src !== undefined) {
93
+ valueReplace.src = newChange.valueReplace.src;
265
94
  }
266
- const rebasedId = forwardMap.get(id) ?? id;
267
- const rebasedChildChange = rebaseChild(childChange, overChildChange, rebasedId === "self" ? NodeAttachState.Attached : NodeAttachState.Detached);
268
- if (rebasedChildChange !== undefined) {
269
- rebasedChildChanges.push([rebasedId, rebasedChildChange]);
95
+ rebased.valueReplace = valueReplace;
96
+ }
97
+ else if (newChange.valueReplace !== undefined) {
98
+ const isEmpty = overDetach !== undefined || overAttach !== undefined
99
+ ? overAttach === undefined
100
+ : newChange.valueReplace.isEmpty;
101
+ rebased.valueReplace = { ...newChange.valueReplace, isEmpty };
102
+ }
103
+ const detachId = getEffectiveDetachId(newChange);
104
+ const rebasedDetachId = getEffectiveDetachId(rebased);
105
+ if (!areEqualChangeAtomIdOpts(detachId, rebasedDetachId)) {
106
+ if (detachId !== undefined) {
107
+ nodeManager.removeDetach(detachId, 1);
270
108
  }
271
- }
272
- for (const [id, overChildChange] of overChildChangesBySrc.entries()) {
273
- const rebasedId = forwardMap.get(id) ?? id;
274
- const rebasedChildChange = rebaseChild(undefined, overChildChange, rebasedId === "self" ? NodeAttachState.Attached : NodeAttachState.Detached);
275
- if (rebasedChildChange !== undefined) {
276
- rebasedChildChanges.push([rebasedId, rebasedChildChange]);
109
+ if (rebasedDetachId !== undefined) {
110
+ nodeManager.addDetach(rebasedDetachId, 1);
277
111
  }
278
112
  }
279
- const rebased = {
280
- moves: rebasedMoves,
281
- childChanges: rebasedChildChanges,
282
- };
283
- if (field !== undefined) {
284
- const replace = {
285
- isEmpty: overChange.valueReplace === undefined
286
- ? field.isEmpty
287
- : overChange.valueReplace.src === undefined,
288
- dst: field.dst,
289
- };
290
- if (field.src !== undefined) {
291
- replace.src = forwardMap.get(field.src) ?? field.src;
292
- }
293
- rebased.valueReplace = replace;
294
- }
295
113
  return rebased;
296
114
  },
297
115
  prune: (change, pruneChild) => {
298
- const childChanges = [];
299
- const prunedChange = {
300
- moves: change.moves,
301
- childChanges,
302
- };
303
- if (change.valueReplace !== undefined) {
304
- prunedChange.valueReplace = change.valueReplace;
305
- }
306
- for (const [id, childChange] of change.childChanges) {
307
- const prunedChildChange = pruneChild(childChange);
308
- if (prunedChildChange !== undefined) {
309
- childChanges.push([id, prunedChildChange]);
116
+ const prunedChange = { ...change };
117
+ delete prunedChange.childChange;
118
+ if (change.childChange !== undefined) {
119
+ const childChange = pruneChild(change.childChange);
120
+ if (childChange !== undefined) {
121
+ prunedChange.childChange = childChange;
310
122
  }
311
123
  }
312
124
  return prunedChange;
313
125
  },
314
126
  replaceRevisions: (change, replacer) => {
127
+ const updated = {};
315
128
  const valueReplace = replaceReplaceRevisions(change.valueReplace, replacer);
316
- const childChanges = [];
317
- for (const [id, childChange] of change.childChanges) {
318
- childChanges.push([
319
- replaceRegisterRevisions(id, replacer),
320
- replacer.getUpdatedAtomId(childChange),
321
- ]);
322
- }
323
- const moves = [];
324
- for (const [src, dst] of change.moves) {
325
- moves.push([replacer.getUpdatedAtomId(src), replacer.getUpdatedAtomId(dst)]);
129
+ if (change.childChange !== undefined) {
130
+ updated.childChange = replacer.getUpdatedAtomId(change.childChange);
326
131
  }
327
- const updated = { childChanges, moves };
328
132
  if (valueReplace !== undefined) {
329
133
  updated.valueReplace = valueReplace;
330
134
  }
135
+ if (change.nodeDetach !== undefined) {
136
+ updated.nodeDetach = replacer.getUpdatedAtomId(change.nodeDetach);
137
+ }
331
138
  return updated;
332
139
  },
333
140
  mute: (change) => {
334
- return { childChanges: change.childChanges, moves: [] };
141
+ return { childChange: change.childChange };
335
142
  },
336
143
  };
337
- function replaceReplaceRevisions(replace, replacer) {
338
- if (replace === undefined) {
339
- return undefined;
144
+ function compose(change1, change2, composeChild, _genId, nodeManager) {
145
+ const detachId2 = getEffectiveDetachId(change2);
146
+ if (change1.valueReplace?.src !== undefined && detachId2 !== undefined) {
147
+ nodeManager.composeAttachDetach(change1.valueReplace.src, detachId2, 1);
340
148
  }
341
- const updated = {
342
- ...replace,
343
- dst: replacer.getUpdatedAtomId(replace.dst),
344
- };
345
- if (replace.src !== undefined) {
346
- updated.src = replaceRegisterRevisions(replace.src, replacer);
149
+ const composedDetach = composeNodeDetaches(change1, change2, nodeManager);
150
+ const composedReplace = composeReplaces(change1, change2);
151
+ const composedChildChange = getComposedChildChanges(change1, change2, nodeManager, composeChild);
152
+ sendNewChildChanges(change1, change2, nodeManager);
153
+ if (change1.nodeDetach !== undefined &&
154
+ areEqualChangeAtomIdOpts(change1.nodeDetach, change2.valueReplace?.src)) {
155
+ nodeManager.composeDetachAttach(change1.nodeDetach, change1.nodeDetach, 1, true);
347
156
  }
348
- return updated;
157
+ return makeChangeset(composedReplace, composedDetach, composedChildChange);
349
158
  }
350
- function replaceRegisterRevisions(register, replacer) {
351
- return register === "self" ? register : replacer.getUpdatedAtomId(register);
159
+ function composeNodeDetaches(change1, change2, nodeManager) {
160
+ const detach1 = getEffectiveDetachId(change1);
161
+ if (detach1 !== undefined) {
162
+ const newDetachId = nodeManager.getNewChangesForBaseDetach(detach1, 1).value?.detachId;
163
+ if (newDetachId !== undefined) {
164
+ // change2 either renames or detaches this node (the latter case implying that change1 reattaches/moves it).
165
+ // In either case, the composition ends with the node detached by `newDetachId`.
166
+ // Note that even if change2 detaches the node with a location-targeting detach (e.g. an optional field clear),
167
+ // the composition should still have a node-targeting detach.
168
+ // This is because change1 must attach the node in the location targeted by the detach,
169
+ // and rebasing does not affect attaches, although that could change if slice moves are implemented.
170
+ return newDetachId;
171
+ }
172
+ }
173
+ if (change1.nodeDetach !== undefined) {
174
+ return change1.nodeDetach;
175
+ }
176
+ return change1.valueReplace === undefined ? change2.nodeDetach : undefined;
352
177
  }
353
- function getComposedReplaceDst(change1, change2) {
354
- const dst1 = change1?.dst;
355
- if (change2.valueReplace === undefined) {
356
- assert(dst1 !== undefined, 0x8ce /* Both replace replaces should not be undefined */);
357
- return getIdAfterMoves(dst1, change2.moves);
178
+ function composeReplaces(change1, change2) {
179
+ const firstReplace = change1.valueReplace ?? change2.valueReplace;
180
+ if (firstReplace === undefined) {
181
+ return undefined;
358
182
  }
359
- if (dst1 === undefined ||
360
- change1?.src === "self" ||
361
- (change2.valueReplace.src !== undefined &&
362
- areEqualRegisterIds(change2.valueReplace.src, dst1))) {
363
- assert(change2.valueReplace !== undefined, 0x8cf /* Both replace replaces should not be undefined */);
364
- return change2.valueReplace.dst;
183
+ const isEmpty = change1.nodeDetach === undefined ? firstReplace.isEmpty : false;
184
+ const replace = { isEmpty, dst: firstReplace.dst };
185
+ if (change2.valueReplace?.src !== undefined) {
186
+ replace.src = change2.valueReplace.src;
365
187
  }
366
- else {
367
- return getIdAfterMoves(dst1, change2.moves);
188
+ else if (getEffectiveDetachId(change2) === undefined &&
189
+ change1.valueReplace?.src !== undefined) {
190
+ replace.src = change1.valueReplace.src;
368
191
  }
192
+ return replace;
369
193
  }
370
- function getIdAfterMoves(id, moves) {
371
- for (const [src, dst] of moves) {
372
- if (areEqualChangeAtomIds(id, src)) {
373
- return dst;
374
- }
194
+ /**
195
+ * Informs the node manager of any child changes in `change2` that may need to be represented somewhere else in the input context of the composed changeset.
196
+ * See {@link ComposeNodeManager.sendNewChangesToBaseSourceLocation} for motivation.
197
+ * @param change1 - The first change to compose. Conceptually applies before `change2`.
198
+ * @param change2 - The second change to compose. Conceptually applies after `change1`.
199
+ * @param nodeManager - The node manager that needs to be informed of the child changes.
200
+ */
201
+ function sendNewChildChanges(change1, change2, nodeManager) {
202
+ if (change2.childChange !== undefined && change1.valueReplace?.src !== undefined) {
203
+ // The presence of new child implies that there is some node present in the field in the input context of change2.
204
+ // The fact that the change1 has a shallow effect implies that this node was attached by change1.
205
+ nodeManager.sendNewChangesToBaseSourceLocation(change1.valueReplace.src, change2.childChange);
375
206
  }
376
- return id;
377
- }
378
- function areEqualRegisterIds(id1, id2) {
379
- return id1 === "self" || id2 === "self" ? id1 === id2 : areEqualChangeAtomIds(id1, id2);
380
207
  }
381
- function areEqualRegisterIdsOpt(id1, id2) {
382
- if (id1 === undefined || id2 === undefined) {
383
- return id1 === id2;
208
+ /**
209
+ * Computes the child changes that should be included in the composed changeset.
210
+ * @param change1 - The first change to compose. Conceptually applies before `change2`.
211
+ * @param change2 - The second change to compose. Conceptually applies after `change1`.
212
+ * @param nodeManager - The node manager. Provides information about potential child changes from `change2`.
213
+ * @param composeChild - The delegate to compose child changes.
214
+ * @returns The composed child changes (if any) for the node (if any) present in the field in the input context of `change1`.
215
+ */
216
+ function getComposedChildChanges(change1, change2, nodeManager, composeChild) {
217
+ const detachId1 = getEffectiveDetachId(change1);
218
+ // We need to determine what the child changes are in change2 for the node (if any) that resides in the field in the input context of change1.
219
+ const childChangesFromChange2 =
220
+ // If such a node did exist, the changes for it in change2 would come from wherever change1 sends that node.
221
+ // Note: in both branches of this ternary, we are leveraging the fact querying for changes of a non-existent node safely yields undefined
222
+ detachId1 === undefined
223
+ ? change1.valueReplace?.src === undefined
224
+ ? change2.childChange
225
+ : undefined
226
+ : nodeManager.getNewChangesForBaseDetach(detachId1, 1).value?.nodeChange;
227
+ let composedChildChange;
228
+ if (change1.childChange !== undefined || childChangesFromChange2 !== undefined) {
229
+ composedChildChange = composeChild(change1.childChange, childChangesFromChange2);
384
230
  }
385
- return areEqualRegisterIds(id1, id2);
231
+ return composedChildChange;
386
232
  }
387
- function getBidirectionalMaps(moves) {
388
- const srcToDst = new Map();
389
- const dstToSrc = new Map();
390
- for (const [src, dst] of moves) {
391
- setInNestedMap(srcToDst, src.revision, src.localId, dst);
392
- setInNestedMap(dstToSrc, dst.revision, dst.localId, src);
233
+ function makeChangeset(replace, nodeDetach, childChange) {
234
+ const changeset = {};
235
+ if (replace !== undefined) {
236
+ changeset.valueReplace = replace;
393
237
  }
394
- return { srcToDst, dstToSrc };
395
- }
396
- function isReplaceEffectful(replace) {
397
- if (replace.src === "self") {
398
- return false;
238
+ if (nodeDetach !== undefined) {
239
+ changeset.nodeDetach = nodeDetach;
240
+ }
241
+ if (childChange !== undefined) {
242
+ changeset.childChange = childChange;
399
243
  }
400
- return !replace.isEmpty || replace.src !== undefined;
244
+ return changeset;
401
245
  }
402
- function getEffectfulDst(replace) {
403
- return replace === undefined || replace.isEmpty || replace.src === "self"
404
- ? undefined
405
- : replace.dst;
246
+ function replaceReplaceRevisions(replace, replacer) {
247
+ if (replace === undefined) {
248
+ return undefined;
249
+ }
250
+ const updated = {
251
+ ...replace,
252
+ dst: replacer.getUpdatedAtomId(replace.dst),
253
+ };
254
+ if (replace.src !== undefined) {
255
+ updated.src = replacer.getUpdatedAtomId(replace.src);
256
+ }
257
+ return updated;
406
258
  }
407
- export function taggedRegister(id, revision) {
408
- if (id === "self") {
409
- return id;
259
+ function getEffectiveDetachId(change) {
260
+ if (change.nodeDetach !== undefined) {
261
+ return change.nodeDetach;
410
262
  }
411
- return taggedAtomId(id, revision);
263
+ return change.valueReplace?.isEmpty === false ? change.valueReplace.dst : undefined;
412
264
  }
413
265
  export const optionalFieldEditor = {
414
- set: (wasEmpty, ids) => ({
415
- moves: [],
416
- childChanges: [],
266
+ set: (isEmpty, ids) => ({
417
267
  valueReplace: {
418
- isEmpty: wasEmpty,
268
+ isEmpty,
419
269
  src: ids.fill,
420
270
  dst: ids.detach,
421
271
  },
422
272
  }),
423
- clear: (wasEmpty, detachId) => ({
424
- moves: [],
425
- childChanges: [],
273
+ clear: (isEmpty, detachId) => ({
426
274
  valueReplace: {
427
- isEmpty: wasEmpty,
275
+ isEmpty,
428
276
  dst: detachId,
429
277
  },
430
278
  }),
431
279
  buildChildChanges: (changes) => {
432
- const childChanges = Array.from(changes, ([index, childChange]) => {
280
+ const childChanges = Array.from(changes, ([index, child]) => {
433
281
  assert(index === 0, 0x404 /* Optional fields only support a single child node */);
434
- return ["self", childChange];
282
+ return child;
435
283
  });
436
284
  assert(childChanges.length <= 1, 0xabd /* Optional fields only support a single child node */);
437
- return {
438
- moves: [],
439
- childChanges,
440
- };
285
+ const childChange = childChanges[0];
286
+ return childChange === undefined ? {} : { childChange };
441
287
  },
442
288
  };
443
289
  export function optionalFieldIntoDelta(change, deltaFromChild) {
444
- const delta = {};
290
+ return optionalOrRequiredFieldIntoDelta(true, change, deltaFromChild);
291
+ }
292
+ export function optionalOrRequiredFieldIntoDelta(allowReattach, change, deltaFromChild) {
445
293
  let markIsANoop = true;
446
294
  const mark = { count: 1 };
447
- if (change.valueReplace !== undefined && isReplaceEffectful(change.valueReplace)) {
448
- if (!change.valueReplace.isEmpty) {
449
- mark.detach = nodeIdFromChangeAtom(change.valueReplace.dst);
450
- }
451
- if (change.valueReplace.src !== undefined) {
452
- mark.attach = nodeIdFromChangeAtom(change.valueReplace.src);
453
- }
295
+ const detachId = getEffectiveDetachId(change);
296
+ const attachId = change.valueReplace?.src;
297
+ if (!areEqualChangeAtomIdOpts(detachId, attachId)) {
454
298
  markIsANoop = false;
455
- }
456
- if (change.moves.length > 0) {
457
- delta.rename = change.moves.map(([src, dst]) => ({
458
- count: 1,
459
- oldId: nodeIdFromChangeAtom(src),
460
- newId: nodeIdFromChangeAtom(dst),
461
- }));
462
- }
463
- if (change.childChanges.length > 0) {
464
- const globals = [];
465
- for (const [id, childChange] of change.childChanges) {
466
- const childDelta = deltaFromChild(childChange);
467
- if (id === "self") {
468
- mark.fields = childDelta;
469
- markIsANoop = false;
470
- }
471
- else {
472
- const fields = childDelta;
473
- globals.push({
474
- id: { major: id.revision, minor: id.localId },
475
- fields,
476
- });
477
- }
299
+ if (detachId !== undefined) {
300
+ mark.detach = nodeIdFromChangeAtom(detachId);
478
301
  }
479
- if (globals.length > 0) {
480
- delta.global = globals;
302
+ if (attachId !== undefined) {
303
+ mark.attach = nodeIdFromChangeAtom(attachId);
481
304
  }
482
305
  }
483
- if (!markIsANoop) {
484
- delta.local = { marks: [mark] };
306
+ if (change.childChange !== undefined) {
307
+ mark.fields = deltaFromChild(change.childChange);
308
+ markIsANoop = false;
485
309
  }
486
- return delta;
310
+ return { marks: markIsANoop ? [] : [mark], allowReattach };
487
311
  }
488
312
  export const optionalChangeHandler = {
489
313
  rebaser: optionalChangeRebaser,
490
314
  codecsFactory: makeOptionalFieldCodecFamily,
491
315
  editor: optionalFieldEditor,
492
316
  intoDelta: optionalFieldIntoDelta,
493
- relevantRemovedRoots,
494
- isEmpty: (change) => change.childChanges.length === 0 &&
495
- change.moves.length === 0 &&
496
- change.valueReplace === undefined,
317
+ isEmpty: (change) => change.childChange === undefined &&
318
+ change.valueReplace === undefined &&
319
+ change.nodeDetach === undefined,
497
320
  getNestedChanges,
498
- createEmpty: () => ({ moves: [], childChanges: [] }),
499
- getCrossFieldKeys: (_change) => [],
321
+ createEmpty: () => ({}),
322
+ getCrossFieldKeys,
323
+ getDetachCellIds: (_change) => [],
500
324
  };
501
- function getNestedChanges(change) {
502
- // True iff the content of the field changes in some way
503
- const isFieldContentChanged = change.valueReplace !== undefined && change.valueReplace.src !== "self";
504
- // The node that is moved into the field (if any).
505
- const nodeMovedIntoField = change.valueReplace?.src;
506
- return change.childChanges.map(([register, nodeId]) => {
507
- // The node is removed in the input context iif register is not self.
508
- const inputIndex = register === "self" ? 0 : undefined;
509
- const outputIndex = register === "self"
510
- ? // If the node starts out as not-removed, it is removed in the output context iff the field content is changed
511
- isFieldContentChanged
512
- ? undefined
513
- : 0
514
- : // If the node starts out as removed, then it remains removed in the output context iff it is not the node that is moved into the field
515
- areEqualRegisterIdsOpt(register, nodeMovedIntoField)
516
- ? 0
517
- : undefined;
518
- return [nodeId, inputIndex, outputIndex];
519
- });
520
- }
521
- function* relevantRemovedRoots(change, relevantRemovedRootsFromChild) {
522
- const alreadyYielded = new RegisterMap();
523
- for (const [src] of change.moves) {
524
- if (!alreadyYielded.has(src)) {
525
- alreadyYielded.set(src, true);
526
- yield nodeIdFromChangeAtom(src);
527
- }
325
+ function getCrossFieldKeys(change) {
326
+ const keys = [];
327
+ if (change.valueReplace?.src !== undefined) {
328
+ keys.push({
329
+ key: { ...change.valueReplace.src, target: NodeMoveType.Attach },
330
+ count: 1,
331
+ });
528
332
  }
529
- for (const [id, childChange] of change.childChanges) {
530
- // Child changes make the tree they apply to relevant unless that tree existed in the starting context of
531
- // of this change.
532
- if (id !== "self" && !alreadyYielded.has(id)) {
533
- alreadyYielded.set(id, true);
534
- yield nodeIdFromChangeAtom(id);
535
- }
536
- yield* relevantRemovedRootsFromChild(childChange);
333
+ const detachId = getEffectiveDetachId(change);
334
+ if (detachId !== undefined) {
335
+ keys.push({ key: { ...detachId, target: NodeMoveType.Detach }, count: 1 });
537
336
  }
538
- const selfSrc = change.valueReplace?.src;
539
- if (selfSrc !== undefined && selfSrc !== "self" && !alreadyYielded.has(selfSrc)) {
540
- yield nodeIdFromChangeAtom(selfSrc);
337
+ return keys;
338
+ }
339
+ function getNestedChanges(change) {
340
+ if (change.childChange === undefined) {
341
+ return [];
541
342
  }
343
+ return [[change.childChange, 0]];
344
+ }
345
+ function invertAttachId(attachId, revision, isRollback, detachId) {
346
+ if (!isRollback) {
347
+ return makeChangeAtomId(attachId.localId, revision);
348
+ }
349
+ return detachId ?? attachId;
350
+ }
351
+ function isPin(change) {
352
+ return (change.nodeDetach !== undefined &&
353
+ areEqualChangeAtomIdOpts(change.nodeDetach, change.valueReplace?.src));
542
354
  }
543
355
  /**
544
356
  * 0 or 1 items.