@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
@@ -4,552 +4,363 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.optional = exports.optionalChangeHandler = exports.optionalFieldIntoDelta = exports.optionalFieldEditor = exports.taggedRegister = exports.optionalChangeRebaser = exports.RegisterMap = void 0;
7
+ exports.optional = exports.optionalChangeHandler = exports.optionalOrRequiredFieldIntoDelta = exports.optionalFieldIntoDelta = exports.optionalFieldEditor = exports.optionalChangeRebaser = void 0;
8
8
  const internal_1 = require("@fluidframework/core-utils/internal");
9
9
  const index_js_1 = require("../../core/index.js");
10
- const index_js_2 = require("../../util/index.js");
11
10
  const deltaUtils_js_1 = require("../deltaUtils.js");
12
11
  const fieldKindIdentifiers_js_1 = require("../fieldKindIdentifiers.js");
13
- const index_js_3 = require("../modular-schema/index.js");
12
+ const index_js_2 = require("../modular-schema/index.js");
14
13
  const optionalFieldCodecs_js_1 = require("./optionalFieldCodecs.js");
15
- class RegisterMap {
16
- constructor() {
17
- this.nestedMapData = new index_js_2.SizedNestedMap();
18
- }
19
- clone() {
20
- const clone = new RegisterMap();
21
- for (const [id, t] of this.entries()) {
22
- clone.set(id, t);
23
- }
24
- return clone;
25
- }
26
- set(id, childChange) {
27
- if (id === "self") {
28
- this.nestedMapData.set("self", undefined, childChange);
29
- }
30
- else {
31
- this.nestedMapData.set(id.localId, id.revision, childChange);
32
- }
33
- }
34
- get(id) {
35
- return id === "self"
36
- ? this.nestedMapData.tryGet(id, undefined)
37
- : this.nestedMapData.tryGet(id.localId, id.revision);
38
- }
39
- has(id) {
40
- return this.get(id) !== undefined;
41
- }
42
- delete(id) {
43
- return id === "self"
44
- ? this.nestedMapData.delete("self", undefined)
45
- : this.nestedMapData.delete(id.localId, id.revision);
46
- }
47
- keys() {
48
- const changeIds = [];
49
- for (const [localId, nestedMap] of this.nestedMapData) {
50
- if (localId === "self") {
51
- changeIds.push("self");
52
- }
53
- else {
54
- for (const [revisionTag, _] of nestedMap) {
55
- changeIds.push(revisionTag === undefined ? { localId } : { localId, revision: revisionTag });
56
- }
57
- }
58
- }
59
- return changeIds;
60
- }
61
- values() {
62
- return this.nestedMapData.values();
63
- }
64
- entries() {
65
- const entries = [];
66
- for (const changeId of this.keys()) {
67
- if (changeId === "self") {
68
- const entry = this.nestedMapData.tryGet("self", undefined);
69
- (0, internal_1.assert)(entry !== undefined, 0x770 /* Entry should not be undefined when iterating keys. */);
70
- entries.push(["self", entry]);
71
- }
72
- else {
73
- const entry = this.nestedMapData.tryGet(changeId.localId, changeId.revision);
74
- (0, internal_1.assert)(entry !== undefined, 0x771 /* Entry should not be undefined when iterating keys. */);
75
- entries.push([changeId, entry]);
76
- }
77
- }
78
- return entries;
79
- }
80
- get size() {
81
- return this.nestedMapData.size;
82
- }
83
- }
84
- exports.RegisterMap = RegisterMap;
85
14
  exports.optionalChangeRebaser = {
86
- compose: (change1, change2, composeChild) => {
87
- const { srcToDst, dstToSrc } = getBidirectionalMaps(change1.moves);
88
- const change1FieldSrc = change1.valueReplace?.src;
89
- const change1FieldDst = getEffectfulDst(change1.valueReplace);
90
- const change2FieldSrc = change2.valueReplace?.src;
91
- let composedFieldSrc;
92
- if (change2FieldSrc !== undefined) {
93
- if (change2FieldSrc === "self") {
94
- composedFieldSrc = change1FieldSrc ?? change2FieldSrc;
95
- }
96
- else if (change1FieldDst !== undefined &&
97
- areEqualRegisterIds(change1FieldDst, change2FieldSrc)) {
98
- composedFieldSrc = "self";
99
- }
100
- else {
101
- composedFieldSrc =
102
- (0, index_js_2.tryGetFromNestedMap)(dstToSrc, change2FieldSrc.revision, change2FieldSrc.localId) ??
103
- change2FieldSrc;
104
- }
105
- }
106
- else if (change1FieldSrc !== undefined && change2.valueReplace === undefined) {
107
- composedFieldSrc = change1FieldSrc;
108
- }
109
- const childChanges2ByOriginalId = new RegisterMap();
110
- for (const [id, change] of change2.childChanges) {
111
- if (id === "self") {
112
- if (change1FieldSrc === undefined) {
113
- childChanges2ByOriginalId.set("self", change);
114
- }
115
- else {
116
- childChanges2ByOriginalId.set(change1FieldSrc, change);
117
- }
118
- }
119
- else {
120
- if (change1FieldDst !== undefined && (0, index_js_1.areEqualChangeAtomIds)(change1FieldDst, id)) {
121
- childChanges2ByOriginalId.set("self", change);
122
- }
123
- else {
124
- const originalId = (0, index_js_2.tryGetFromNestedMap)(dstToSrc, id.revision, id.localId);
125
- childChanges2ByOriginalId.set(originalId ?? id, change);
126
- }
127
- }
128
- }
129
- const composedMoves = [];
130
- const composedChildChanges = [];
131
- const composed = {
132
- moves: composedMoves,
133
- childChanges: composedChildChanges,
134
- };
135
- for (const [id, childChange1] of change1.childChanges) {
136
- const childChange2 = childChanges2ByOriginalId.get(id);
137
- composedChildChanges.push([id, composeChild(childChange1, childChange2)]);
138
- childChanges2ByOriginalId.delete(id);
139
- }
140
- for (const [id, childChange2] of childChanges2ByOriginalId.entries()) {
141
- composedChildChanges.push([id, composeChild(undefined, childChange2)]);
15
+ compose,
16
+ invert: (change, isRollback, genId, revision, nodeManager) => {
17
+ const inverted = {};
18
+ const detachId = getEffectiveDetachId(change);
19
+ if (detachId !== undefined) {
20
+ const attachIdForInverse = isRollback
21
+ ? detachId
22
+ : (0, index_js_1.makeChangeAtomId)(detachId.localId, revision);
23
+ nodeManager.invertDetach(detachId, 1, change.childChange, attachIdForInverse);
24
+ inverted.valueReplace = {
25
+ isEmpty: change.valueReplace?.src === undefined,
26
+ dst: (0, index_js_1.makeChangeAtomId)(genId.allocate(), revision),
27
+ src: attachIdForInverse,
28
+ };
142
29
  }
143
- for (const [leg2Src, leg2Dst] of change2.moves) {
144
- const leg1Src = (0, index_js_2.tryGetFromNestedMap)(dstToSrc, leg2Src.revision, leg2Src.localId);
145
- if (leg1Src !== undefined) {
146
- composedMoves.push([leg1Src, leg2Dst]);
147
- (0, index_js_2.deleteFromNestedMap)(srcToDst, leg1Src.revision, leg1Src.localId);
148
- (0, index_js_2.deleteFromNestedMap)(dstToSrc, leg2Src.revision, leg2Src.localId);
30
+ if (change.valueReplace?.src !== undefined) {
31
+ const attachEntry = nodeManager.invertAttach(change.valueReplace.src, 1);
32
+ const detachIdForInverse = invertAttachId(change.valueReplace.src, revision, isRollback, attachEntry.value?.detachId);
33
+ if (attachEntry.value?.nodeChange !== undefined) {
34
+ inverted.childChange = attachEntry.value.nodeChange;
149
35
  }
150
- else if (change1FieldDst === undefined ||
151
- !(0, index_js_1.areEqualChangeAtomIds)(change1FieldDst, leg2Src)) {
152
- composedMoves.push([leg2Src, leg2Dst]);
36
+ // TODO: Always use nodeDetach instead of valueReplace if not supporting older client versions.
37
+ if (isPin(change)) {
38
+ inverted.nodeDetach = detachIdForInverse;
153
39
  }
154
- }
155
- for (const [revision, innerMap] of srcToDst.entries()) {
156
- for (const [localId, dst] of innerMap.entries()) {
157
- const src = (0, index_js_1.makeChangeAtomId)(localId, revision);
158
- if (composedFieldSrc === undefined || !areEqualRegisterIds(src, composedFieldSrc)) {
159
- composedMoves.push([src, dst]);
160
- }
40
+ else if (inverted.valueReplace === undefined) {
41
+ inverted.valueReplace = { isEmpty: false, dst: detachIdForInverse };
161
42
  }
162
- }
163
- if (change1FieldSrc !== undefined &&
164
- change1FieldSrc !== "self" &&
165
- change2.valueReplace !== undefined) {
166
- const change2FieldDst = change2.valueReplace.dst;
167
- if (isReplaceEffectful(change2.valueReplace) &&
168
- !(0, index_js_1.areEqualChangeAtomIds)(change1FieldSrc, change2FieldDst)) {
169
- composedMoves.push([change1FieldSrc, change2FieldDst]);
43
+ else {
44
+ inverted.valueReplace.dst = detachIdForInverse;
170
45
  }
171
46
  }
172
- const firstChange = change1.valueReplace ?? change2.valueReplace;
173
- if (firstChange === undefined) {
174
- return composed;
175
- }
176
- const replace = {
177
- isEmpty: firstChange.isEmpty,
178
- dst: getComposedReplaceDst(change1.valueReplace, change2),
179
- };
180
- if (composedFieldSrc !== undefined) {
181
- replace.src = composedFieldSrc;
47
+ else if (detachId === undefined && change.childChange !== undefined) {
48
+ // This change does not affect which node is in the field, so its child change should remain here.
49
+ inverted.childChange = change.childChange;
182
50
  }
183
- composed.valueReplace = replace;
184
- return composed;
51
+ return inverted;
185
52
  },
186
- invert: (change, isRollback, genId, revision) => {
187
- const { moves, childChanges, valueReplace } = change;
188
- const invertIdMap = new RegisterMap();
189
- const invertedMoves = [];
190
- for (const [src, dst] of moves) {
191
- invertIdMap.set(src, dst);
192
- invertedMoves.push([dst, src]);
193
- }
194
- if (valueReplace !== undefined) {
195
- const effectfulDst = getEffectfulDst(valueReplace);
196
- if (effectfulDst !== undefined) {
197
- invertIdMap.set("self", valueReplace.dst);
53
+ rebase: (newChange, overChange, rebaseChild, _genId, nodeManager, _metadata, rebaseVersion) => {
54
+ const rebased = {};
55
+ const rebasedChild = rebaseChild(newChange.childChange, overChange.childChange);
56
+ const overDetach = getEffectiveDetachId(overChange);
57
+ // Note that composition ignores rebase version, and so will create node detaches even when we are supporting collaboration with older clients.
58
+ // Therefore, in rebase version 1 we must rebase node detach as if it were a clear, matching the behavior of older clients.
59
+ const hasNodeDetachTreatedAsClear = newChange.nodeDetach !== undefined && rebaseVersion < 2 && !isPin(newChange);
60
+ if (overDetach !== undefined) {
61
+ const nodeDetach = hasNodeDetachTreatedAsClear ? undefined : newChange.nodeDetach;
62
+ nodeManager.rebaseOverDetach(overDetach, 1, nodeDetach, rebasedChild);
63
+ }
64
+ const overAttach = overChange.valueReplace?.src;
65
+ if (overAttach !== undefined) {
66
+ const movedChangeEntry = nodeManager.getNewChangesForBaseAttach(overAttach, 1).value;
67
+ if (movedChangeEntry?.nodeChange !== undefined) {
68
+ rebased.childChange = movedChangeEntry.nodeChange;
198
69
  }
199
- if (valueReplace.src !== undefined) {
200
- invertIdMap.set(valueReplace.src, "self");
201
- }
202
- }
203
- const inverted = {
204
- moves: invertedMoves,
205
- childChanges: childChanges.map(([id, childChange]) => {
206
- return [invertIdMap.get(id) ?? id, childChange];
207
- }),
208
- };
209
- if (valueReplace !== undefined) {
210
- if (isReplaceEffectful(valueReplace)) {
211
- const replace = valueReplace.src === undefined
212
- ? {
213
- isEmpty: true,
214
- dst: (0, index_js_1.makeChangeAtomId)(genId.allocate(), revision),
215
- }
216
- : {
217
- isEmpty: false,
218
- dst: isRollback
219
- ? valueReplace.src
220
- : (0, index_js_1.makeChangeAtomId)(genId.allocate(), revision),
221
- };
222
- if (valueReplace.isEmpty === false) {
223
- replace.src = valueReplace.dst;
70
+ if (movedChangeEntry?.detachId !== undefined) {
71
+ rebased.nodeDetach = movedChangeEntry.detachId;
72
+ if (newChange.valueReplace !== undefined) {
73
+ // Now that the rebased change has a node detach,
74
+ // the detach from the value replace no longer takes effect.
75
+ nodeManager.removeDetach(newChange.valueReplace.dst, 1);
224
76
  }
225
- inverted.valueReplace = replace;
226
- }
227
- else if (!isRollback && valueReplace.src === "self") {
228
- inverted.valueReplace = {
229
- isEmpty: false,
230
- src: "self",
231
- dst: (0, index_js_1.makeChangeAtomId)(genId.allocate(), revision),
232
- };
233
77
  }
234
78
  }
235
- return inverted;
236
- },
237
- rebase: (change, overChange, rebaseChild) => {
238
- const { moves, childChanges, valueReplace: field } = change;
239
- // TODO: avoid computing the dstToSrc map if it's not needed.
240
- // TODO: de-dupe overSrcToDst and forwardMap
241
- const { srcToDst: overSrcToDst } = getBidirectionalMaps(overChange.moves);
242
- const forwardMap = new RegisterMap();
243
- for (const [src, dst] of overChange.moves) {
244
- forwardMap.set(src, dst);
245
- }
246
- if (overChange.valueReplace !== undefined) {
247
- const effectfulDst = getEffectfulDst(overChange.valueReplace);
248
- if (effectfulDst !== undefined) {
249
- forwardMap.set("self", overChange.valueReplace.dst);
79
+ else if (overDetach === undefined) {
80
+ // `overChange` did not change which node is in the field.
81
+ if (rebasedChild !== undefined) {
82
+ rebased.childChange = rebasedChild;
250
83
  }
251
- if (overChange.valueReplace.src !== undefined) {
252
- forwardMap.set(overChange.valueReplace.src, "self");
84
+ if (newChange.nodeDetach !== undefined) {
85
+ rebased.nodeDetach = newChange.nodeDetach;
253
86
  }
254
87
  }
255
- const rebasedMoves = [];
256
- for (const [src, dst] of moves) {
257
- const newDst = (0, index_js_2.tryGetFromNestedMap)(overSrcToDst, src.revision, src.localId);
258
- rebasedMoves.push([src, newDst ?? dst]);
259
- }
260
- const overChildChangesBySrc = new RegisterMap();
261
- for (const [id, childChange] of overChange.childChanges) {
262
- overChildChangesBySrc.set(id, childChange);
263
- }
264
- const rebasedChildChanges = [];
265
- for (const [id, childChange] of childChanges) {
266
- const overChildChange = overChildChangesBySrc.get(id);
267
- if (overChildChange !== undefined) {
268
- overChildChangesBySrc.delete(id);
88
+ if (hasNodeDetachTreatedAsClear && overDetach !== undefined) {
89
+ // In order to emulate the rebasing behavior of older clients,
90
+ // we convert the node detach to a clear.
91
+ const valueReplace = {
92
+ dst: newChange.nodeDetach,
93
+ isEmpty: overAttach === undefined,
94
+ };
95
+ if (newChange.valueReplace?.src !== undefined) {
96
+ valueReplace.src = newChange.valueReplace.src;
269
97
  }
270
- const rebasedId = forwardMap.get(id) ?? id;
271
- const rebasedChildChange = rebaseChild(childChange, overChildChange, rebasedId === "self" ? index_js_3.NodeAttachState.Attached : index_js_3.NodeAttachState.Detached);
272
- if (rebasedChildChange !== undefined) {
273
- rebasedChildChanges.push([rebasedId, rebasedChildChange]);
98
+ rebased.valueReplace = valueReplace;
99
+ }
100
+ else if (newChange.valueReplace !== undefined) {
101
+ const isEmpty = overDetach !== undefined || overAttach !== undefined
102
+ ? overAttach === undefined
103
+ : newChange.valueReplace.isEmpty;
104
+ rebased.valueReplace = { ...newChange.valueReplace, isEmpty };
105
+ }
106
+ const detachId = getEffectiveDetachId(newChange);
107
+ const rebasedDetachId = getEffectiveDetachId(rebased);
108
+ if (!(0, index_js_1.areEqualChangeAtomIdOpts)(detachId, rebasedDetachId)) {
109
+ if (detachId !== undefined) {
110
+ nodeManager.removeDetach(detachId, 1);
274
111
  }
275
- }
276
- for (const [id, overChildChange] of overChildChangesBySrc.entries()) {
277
- const rebasedId = forwardMap.get(id) ?? id;
278
- const rebasedChildChange = rebaseChild(undefined, overChildChange, rebasedId === "self" ? index_js_3.NodeAttachState.Attached : index_js_3.NodeAttachState.Detached);
279
- if (rebasedChildChange !== undefined) {
280
- rebasedChildChanges.push([rebasedId, rebasedChildChange]);
112
+ if (rebasedDetachId !== undefined) {
113
+ nodeManager.addDetach(rebasedDetachId, 1);
281
114
  }
282
115
  }
283
- const rebased = {
284
- moves: rebasedMoves,
285
- childChanges: rebasedChildChanges,
286
- };
287
- if (field !== undefined) {
288
- const replace = {
289
- isEmpty: overChange.valueReplace === undefined
290
- ? field.isEmpty
291
- : overChange.valueReplace.src === undefined,
292
- dst: field.dst,
293
- };
294
- if (field.src !== undefined) {
295
- replace.src = forwardMap.get(field.src) ?? field.src;
296
- }
297
- rebased.valueReplace = replace;
298
- }
299
116
  return rebased;
300
117
  },
301
118
  prune: (change, pruneChild) => {
302
- const childChanges = [];
303
- const prunedChange = {
304
- moves: change.moves,
305
- childChanges,
306
- };
307
- if (change.valueReplace !== undefined) {
308
- prunedChange.valueReplace = change.valueReplace;
309
- }
310
- for (const [id, childChange] of change.childChanges) {
311
- const prunedChildChange = pruneChild(childChange);
312
- if (prunedChildChange !== undefined) {
313
- childChanges.push([id, prunedChildChange]);
119
+ const prunedChange = { ...change };
120
+ delete prunedChange.childChange;
121
+ if (change.childChange !== undefined) {
122
+ const childChange = pruneChild(change.childChange);
123
+ if (childChange !== undefined) {
124
+ prunedChange.childChange = childChange;
314
125
  }
315
126
  }
316
127
  return prunedChange;
317
128
  },
318
129
  replaceRevisions: (change, replacer) => {
130
+ const updated = {};
319
131
  const valueReplace = replaceReplaceRevisions(change.valueReplace, replacer);
320
- const childChanges = [];
321
- for (const [id, childChange] of change.childChanges) {
322
- childChanges.push([
323
- replaceRegisterRevisions(id, replacer),
324
- replacer.getUpdatedAtomId(childChange),
325
- ]);
132
+ if (change.childChange !== undefined) {
133
+ updated.childChange = replacer.getUpdatedAtomId(change.childChange);
326
134
  }
327
- const moves = [];
328
- for (const [src, dst] of change.moves) {
329
- moves.push([replacer.getUpdatedAtomId(src), replacer.getUpdatedAtomId(dst)]);
330
- }
331
- const updated = { childChanges, moves };
332
135
  if (valueReplace !== undefined) {
333
136
  updated.valueReplace = valueReplace;
334
137
  }
138
+ if (change.nodeDetach !== undefined) {
139
+ updated.nodeDetach = replacer.getUpdatedAtomId(change.nodeDetach);
140
+ }
335
141
  return updated;
336
142
  },
337
143
  mute: (change) => {
338
- return { childChanges: change.childChanges, moves: [] };
144
+ return { childChange: change.childChange };
339
145
  },
340
146
  };
341
- function replaceReplaceRevisions(replace, replacer) {
342
- if (replace === undefined) {
343
- return undefined;
147
+ function compose(change1, change2, composeChild, _genId, nodeManager) {
148
+ const detachId2 = getEffectiveDetachId(change2);
149
+ if (change1.valueReplace?.src !== undefined && detachId2 !== undefined) {
150
+ nodeManager.composeAttachDetach(change1.valueReplace.src, detachId2, 1);
344
151
  }
345
- const updated = {
346
- ...replace,
347
- dst: replacer.getUpdatedAtomId(replace.dst),
348
- };
349
- if (replace.src !== undefined) {
350
- updated.src = replaceRegisterRevisions(replace.src, replacer);
152
+ const composedDetach = composeNodeDetaches(change1, change2, nodeManager);
153
+ const composedReplace = composeReplaces(change1, change2);
154
+ const composedChildChange = getComposedChildChanges(change1, change2, nodeManager, composeChild);
155
+ sendNewChildChanges(change1, change2, nodeManager);
156
+ if (change1.nodeDetach !== undefined &&
157
+ (0, index_js_1.areEqualChangeAtomIdOpts)(change1.nodeDetach, change2.valueReplace?.src)) {
158
+ nodeManager.composeDetachAttach(change1.nodeDetach, change1.nodeDetach, 1, true);
351
159
  }
352
- return updated;
160
+ return makeChangeset(composedReplace, composedDetach, composedChildChange);
353
161
  }
354
- function replaceRegisterRevisions(register, replacer) {
355
- return register === "self" ? register : replacer.getUpdatedAtomId(register);
162
+ function composeNodeDetaches(change1, change2, nodeManager) {
163
+ const detach1 = getEffectiveDetachId(change1);
164
+ if (detach1 !== undefined) {
165
+ const newDetachId = nodeManager.getNewChangesForBaseDetach(detach1, 1).value?.detachId;
166
+ if (newDetachId !== undefined) {
167
+ // change2 either renames or detaches this node (the latter case implying that change1 reattaches/moves it).
168
+ // In either case, the composition ends with the node detached by `newDetachId`.
169
+ // Note that even if change2 detaches the node with a location-targeting detach (e.g. an optional field clear),
170
+ // the composition should still have a node-targeting detach.
171
+ // This is because change1 must attach the node in the location targeted by the detach,
172
+ // and rebasing does not affect attaches, although that could change if slice moves are implemented.
173
+ return newDetachId;
174
+ }
175
+ }
176
+ if (change1.nodeDetach !== undefined) {
177
+ return change1.nodeDetach;
178
+ }
179
+ return change1.valueReplace === undefined ? change2.nodeDetach : undefined;
356
180
  }
357
- function getComposedReplaceDst(change1, change2) {
358
- const dst1 = change1?.dst;
359
- if (change2.valueReplace === undefined) {
360
- (0, internal_1.assert)(dst1 !== undefined, 0x8ce /* Both replace replaces should not be undefined */);
361
- return getIdAfterMoves(dst1, change2.moves);
181
+ function composeReplaces(change1, change2) {
182
+ const firstReplace = change1.valueReplace ?? change2.valueReplace;
183
+ if (firstReplace === undefined) {
184
+ return undefined;
362
185
  }
363
- if (dst1 === undefined ||
364
- change1?.src === "self" ||
365
- (change2.valueReplace.src !== undefined &&
366
- areEqualRegisterIds(change2.valueReplace.src, dst1))) {
367
- (0, internal_1.assert)(change2.valueReplace !== undefined, 0x8cf /* Both replace replaces should not be undefined */);
368
- return change2.valueReplace.dst;
186
+ const isEmpty = change1.nodeDetach === undefined ? firstReplace.isEmpty : false;
187
+ const replace = { isEmpty, dst: firstReplace.dst };
188
+ if (change2.valueReplace?.src !== undefined) {
189
+ replace.src = change2.valueReplace.src;
369
190
  }
370
- else {
371
- return getIdAfterMoves(dst1, change2.moves);
191
+ else if (getEffectiveDetachId(change2) === undefined &&
192
+ change1.valueReplace?.src !== undefined) {
193
+ replace.src = change1.valueReplace.src;
372
194
  }
195
+ return replace;
373
196
  }
374
- function getIdAfterMoves(id, moves) {
375
- for (const [src, dst] of moves) {
376
- if ((0, index_js_1.areEqualChangeAtomIds)(id, src)) {
377
- return dst;
378
- }
197
+ /**
198
+ * 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.
199
+ * See {@link ComposeNodeManager.sendNewChangesToBaseSourceLocation} for motivation.
200
+ * @param change1 - The first change to compose. Conceptually applies before `change2`.
201
+ * @param change2 - The second change to compose. Conceptually applies after `change1`.
202
+ * @param nodeManager - The node manager that needs to be informed of the child changes.
203
+ */
204
+ function sendNewChildChanges(change1, change2, nodeManager) {
205
+ if (change2.childChange !== undefined && change1.valueReplace?.src !== undefined) {
206
+ // The presence of new child implies that there is some node present in the field in the input context of change2.
207
+ // The fact that the change1 has a shallow effect implies that this node was attached by change1.
208
+ nodeManager.sendNewChangesToBaseSourceLocation(change1.valueReplace.src, change2.childChange);
379
209
  }
380
- return id;
381
- }
382
- function areEqualRegisterIds(id1, id2) {
383
- return id1 === "self" || id2 === "self" ? id1 === id2 : (0, index_js_1.areEqualChangeAtomIds)(id1, id2);
384
210
  }
385
- function areEqualRegisterIdsOpt(id1, id2) {
386
- if (id1 === undefined || id2 === undefined) {
387
- return id1 === id2;
211
+ /**
212
+ * Computes the child changes that should be included in the composed changeset.
213
+ * @param change1 - The first change to compose. Conceptually applies before `change2`.
214
+ * @param change2 - The second change to compose. Conceptually applies after `change1`.
215
+ * @param nodeManager - The node manager. Provides information about potential child changes from `change2`.
216
+ * @param composeChild - The delegate to compose child changes.
217
+ * @returns The composed child changes (if any) for the node (if any) present in the field in the input context of `change1`.
218
+ */
219
+ function getComposedChildChanges(change1, change2, nodeManager, composeChild) {
220
+ const detachId1 = getEffectiveDetachId(change1);
221
+ // 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.
222
+ const childChangesFromChange2 =
223
+ // If such a node did exist, the changes for it in change2 would come from wherever change1 sends that node.
224
+ // Note: in both branches of this ternary, we are leveraging the fact querying for changes of a non-existent node safely yields undefined
225
+ detachId1 === undefined
226
+ ? change1.valueReplace?.src === undefined
227
+ ? change2.childChange
228
+ : undefined
229
+ : nodeManager.getNewChangesForBaseDetach(detachId1, 1).value?.nodeChange;
230
+ let composedChildChange;
231
+ if (change1.childChange !== undefined || childChangesFromChange2 !== undefined) {
232
+ composedChildChange = composeChild(change1.childChange, childChangesFromChange2);
388
233
  }
389
- return areEqualRegisterIds(id1, id2);
234
+ return composedChildChange;
390
235
  }
391
- function getBidirectionalMaps(moves) {
392
- const srcToDst = new Map();
393
- const dstToSrc = new Map();
394
- for (const [src, dst] of moves) {
395
- (0, index_js_2.setInNestedMap)(srcToDst, src.revision, src.localId, dst);
396
- (0, index_js_2.setInNestedMap)(dstToSrc, dst.revision, dst.localId, src);
236
+ function makeChangeset(replace, nodeDetach, childChange) {
237
+ const changeset = {};
238
+ if (replace !== undefined) {
239
+ changeset.valueReplace = replace;
397
240
  }
398
- return { srcToDst, dstToSrc };
399
- }
400
- function isReplaceEffectful(replace) {
401
- if (replace.src === "self") {
402
- return false;
241
+ if (nodeDetach !== undefined) {
242
+ changeset.nodeDetach = nodeDetach;
243
+ }
244
+ if (childChange !== undefined) {
245
+ changeset.childChange = childChange;
403
246
  }
404
- return !replace.isEmpty || replace.src !== undefined;
247
+ return changeset;
405
248
  }
406
- function getEffectfulDst(replace) {
407
- return replace === undefined || replace.isEmpty || replace.src === "self"
408
- ? undefined
409
- : replace.dst;
249
+ function replaceReplaceRevisions(replace, replacer) {
250
+ if (replace === undefined) {
251
+ return undefined;
252
+ }
253
+ const updated = {
254
+ ...replace,
255
+ dst: replacer.getUpdatedAtomId(replace.dst),
256
+ };
257
+ if (replace.src !== undefined) {
258
+ updated.src = replacer.getUpdatedAtomId(replace.src);
259
+ }
260
+ return updated;
410
261
  }
411
- function taggedRegister(id, revision) {
412
- if (id === "self") {
413
- return id;
262
+ function getEffectiveDetachId(change) {
263
+ if (change.nodeDetach !== undefined) {
264
+ return change.nodeDetach;
414
265
  }
415
- return (0, index_js_1.taggedAtomId)(id, revision);
266
+ return change.valueReplace?.isEmpty === false ? change.valueReplace.dst : undefined;
416
267
  }
417
- exports.taggedRegister = taggedRegister;
418
268
  exports.optionalFieldEditor = {
419
- set: (wasEmpty, ids) => ({
420
- moves: [],
421
- childChanges: [],
269
+ set: (isEmpty, ids) => ({
422
270
  valueReplace: {
423
- isEmpty: wasEmpty,
271
+ isEmpty,
424
272
  src: ids.fill,
425
273
  dst: ids.detach,
426
274
  },
427
275
  }),
428
- clear: (wasEmpty, detachId) => ({
429
- moves: [],
430
- childChanges: [],
276
+ clear: (isEmpty, detachId) => ({
431
277
  valueReplace: {
432
- isEmpty: wasEmpty,
278
+ isEmpty,
433
279
  dst: detachId,
434
280
  },
435
281
  }),
436
282
  buildChildChanges: (changes) => {
437
- const childChanges = Array.from(changes, ([index, childChange]) => {
283
+ const childChanges = Array.from(changes, ([index, child]) => {
438
284
  (0, internal_1.assert)(index === 0, 0x404 /* Optional fields only support a single child node */);
439
- return ["self", childChange];
285
+ return child;
440
286
  });
441
287
  (0, internal_1.assert)(childChanges.length <= 1, 0xabd /* Optional fields only support a single child node */);
442
- return {
443
- moves: [],
444
- childChanges,
445
- };
288
+ const childChange = childChanges[0];
289
+ return childChange === undefined ? {} : { childChange };
446
290
  },
447
291
  };
448
292
  function optionalFieldIntoDelta(change, deltaFromChild) {
449
- const delta = {};
293
+ return optionalOrRequiredFieldIntoDelta(true, change, deltaFromChild);
294
+ }
295
+ exports.optionalFieldIntoDelta = optionalFieldIntoDelta;
296
+ function optionalOrRequiredFieldIntoDelta(allowReattach, change, deltaFromChild) {
450
297
  let markIsANoop = true;
451
298
  const mark = { count: 1 };
452
- if (change.valueReplace !== undefined && isReplaceEffectful(change.valueReplace)) {
453
- if (!change.valueReplace.isEmpty) {
454
- mark.detach = (0, deltaUtils_js_1.nodeIdFromChangeAtom)(change.valueReplace.dst);
455
- }
456
- if (change.valueReplace.src !== undefined) {
457
- mark.attach = (0, deltaUtils_js_1.nodeIdFromChangeAtom)(change.valueReplace.src);
458
- }
299
+ const detachId = getEffectiveDetachId(change);
300
+ const attachId = change.valueReplace?.src;
301
+ if (!(0, index_js_1.areEqualChangeAtomIdOpts)(detachId, attachId)) {
459
302
  markIsANoop = false;
460
- }
461
- if (change.moves.length > 0) {
462
- delta.rename = change.moves.map(([src, dst]) => ({
463
- count: 1,
464
- oldId: (0, deltaUtils_js_1.nodeIdFromChangeAtom)(src),
465
- newId: (0, deltaUtils_js_1.nodeIdFromChangeAtom)(dst),
466
- }));
467
- }
468
- if (change.childChanges.length > 0) {
469
- const globals = [];
470
- for (const [id, childChange] of change.childChanges) {
471
- const childDelta = deltaFromChild(childChange);
472
- if (id === "self") {
473
- mark.fields = childDelta;
474
- markIsANoop = false;
475
- }
476
- else {
477
- const fields = childDelta;
478
- globals.push({
479
- id: { major: id.revision, minor: id.localId },
480
- fields,
481
- });
482
- }
303
+ if (detachId !== undefined) {
304
+ mark.detach = (0, deltaUtils_js_1.nodeIdFromChangeAtom)(detachId);
483
305
  }
484
- if (globals.length > 0) {
485
- delta.global = globals;
306
+ if (attachId !== undefined) {
307
+ mark.attach = (0, deltaUtils_js_1.nodeIdFromChangeAtom)(attachId);
486
308
  }
487
309
  }
488
- if (!markIsANoop) {
489
- delta.local = { marks: [mark] };
310
+ if (change.childChange !== undefined) {
311
+ mark.fields = deltaFromChild(change.childChange);
312
+ markIsANoop = false;
490
313
  }
491
- return delta;
314
+ return { marks: markIsANoop ? [] : [mark], allowReattach };
492
315
  }
493
- exports.optionalFieldIntoDelta = optionalFieldIntoDelta;
316
+ exports.optionalOrRequiredFieldIntoDelta = optionalOrRequiredFieldIntoDelta;
494
317
  exports.optionalChangeHandler = {
495
318
  rebaser: exports.optionalChangeRebaser,
496
319
  codecsFactory: optionalFieldCodecs_js_1.makeOptionalFieldCodecFamily,
497
320
  editor: exports.optionalFieldEditor,
498
321
  intoDelta: optionalFieldIntoDelta,
499
- relevantRemovedRoots,
500
- isEmpty: (change) => change.childChanges.length === 0 &&
501
- change.moves.length === 0 &&
502
- change.valueReplace === undefined,
322
+ isEmpty: (change) => change.childChange === undefined &&
323
+ change.valueReplace === undefined &&
324
+ change.nodeDetach === undefined,
503
325
  getNestedChanges,
504
- createEmpty: () => ({ moves: [], childChanges: [] }),
505
- getCrossFieldKeys: (_change) => [],
326
+ createEmpty: () => ({}),
327
+ getCrossFieldKeys,
328
+ getDetachCellIds: (_change) => [],
506
329
  };
507
- function getNestedChanges(change) {
508
- // True iff the content of the field changes in some way
509
- const isFieldContentChanged = change.valueReplace !== undefined && change.valueReplace.src !== "self";
510
- // The node that is moved into the field (if any).
511
- const nodeMovedIntoField = change.valueReplace?.src;
512
- return change.childChanges.map(([register, nodeId]) => {
513
- // The node is removed in the input context iif register is not self.
514
- const inputIndex = register === "self" ? 0 : undefined;
515
- const outputIndex = register === "self"
516
- ? // If the node starts out as not-removed, it is removed in the output context iff the field content is changed
517
- isFieldContentChanged
518
- ? undefined
519
- : 0
520
- : // 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
521
- areEqualRegisterIdsOpt(register, nodeMovedIntoField)
522
- ? 0
523
- : undefined;
524
- return [nodeId, inputIndex, outputIndex];
525
- });
526
- }
527
- function* relevantRemovedRoots(change, relevantRemovedRootsFromChild) {
528
- const alreadyYielded = new RegisterMap();
529
- for (const [src] of change.moves) {
530
- if (!alreadyYielded.has(src)) {
531
- alreadyYielded.set(src, true);
532
- yield (0, deltaUtils_js_1.nodeIdFromChangeAtom)(src);
533
- }
330
+ function getCrossFieldKeys(change) {
331
+ const keys = [];
332
+ if (change.valueReplace?.src !== undefined) {
333
+ keys.push({
334
+ key: { ...change.valueReplace.src, target: index_js_2.NodeMoveType.Attach },
335
+ count: 1,
336
+ });
534
337
  }
535
- for (const [id, childChange] of change.childChanges) {
536
- // Child changes make the tree they apply to relevant unless that tree existed in the starting context of
537
- // of this change.
538
- if (id !== "self" && !alreadyYielded.has(id)) {
539
- alreadyYielded.set(id, true);
540
- yield (0, deltaUtils_js_1.nodeIdFromChangeAtom)(id);
541
- }
542
- yield* relevantRemovedRootsFromChild(childChange);
338
+ const detachId = getEffectiveDetachId(change);
339
+ if (detachId !== undefined) {
340
+ keys.push({ key: { ...detachId, target: index_js_2.NodeMoveType.Detach }, count: 1 });
543
341
  }
544
- const selfSrc = change.valueReplace?.src;
545
- if (selfSrc !== undefined && selfSrc !== "self" && !alreadyYielded.has(selfSrc)) {
546
- yield (0, deltaUtils_js_1.nodeIdFromChangeAtom)(selfSrc);
342
+ return keys;
343
+ }
344
+ function getNestedChanges(change) {
345
+ if (change.childChange === undefined) {
346
+ return [];
547
347
  }
348
+ return [[change.childChange, 0]];
349
+ }
350
+ function invertAttachId(attachId, revision, isRollback, detachId) {
351
+ if (!isRollback) {
352
+ return (0, index_js_1.makeChangeAtomId)(attachId.localId, revision);
353
+ }
354
+ return detachId ?? attachId;
355
+ }
356
+ function isPin(change) {
357
+ return (change.nodeDetach !== undefined &&
358
+ (0, index_js_1.areEqualChangeAtomIdOpts)(change.nodeDetach, change.valueReplace?.src));
548
359
  }
549
360
  /**
550
361
  * 0 or 1 items.
551
362
  */
552
- exports.optional = new index_js_3.FlexFieldKind(fieldKindIdentifiers_js_1.optionalIdentifier, index_js_1.Multiplicity.Optional, {
363
+ exports.optional = new index_js_2.FlexFieldKind(fieldKindIdentifiers_js_1.optionalIdentifier, index_js_1.Multiplicity.Optional, {
553
364
  changeHandler: exports.optionalChangeHandler,
554
365
  allowMonotonicUpgradeFrom: new Set([
555
366
  fieldKindIdentifiers_js_1.identifierFieldIdentifier,