@fluidframework/tree 2.80.0 → 2.81.0-374083

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 (914) hide show
  1. package/api-report/tree.alpha.api.md +43 -7
  2. package/dist/alpha.d.ts +5 -0
  3. package/dist/core/change-family/changeFamily.d.ts +4 -1
  4. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  5. package/dist/core/change-family/changeFamily.js.map +1 -1
  6. package/dist/core/change-family/index.d.ts +1 -1
  7. package/dist/core/change-family/index.d.ts.map +1 -1
  8. package/dist/core/change-family/index.js.map +1 -1
  9. package/dist/core/index.d.ts +3 -3
  10. package/dist/core/index.d.ts.map +1 -1
  11. package/dist/core/index.js +6 -4
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/rebase/changeRebaser.d.ts +6 -1
  14. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  15. package/dist/core/rebase/changeRebaser.js.map +1 -1
  16. package/dist/core/rebase/index.d.ts +1 -1
  17. package/dist/core/rebase/index.d.ts.map +1 -1
  18. package/dist/core/rebase/index.js +2 -1
  19. package/dist/core/rebase/index.js.map +1 -1
  20. package/dist/core/rebase/types.d.ts +46 -8
  21. package/dist/core/rebase/types.d.ts.map +1 -1
  22. package/dist/core/rebase/types.js +5 -1
  23. package/dist/core/rebase/types.js.map +1 -1
  24. package/dist/core/rebase/utils.d.ts.map +1 -1
  25. package/dist/core/rebase/utils.js +30 -8
  26. package/dist/core/rebase/utils.js.map +1 -1
  27. package/dist/core/tree/anchorSet.js +1 -0
  28. package/dist/core/tree/anchorSet.js.map +1 -1
  29. package/dist/core/tree/detachedFieldIndex.d.ts +6 -0
  30. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  31. package/dist/core/tree/detachedFieldIndex.js +9 -0
  32. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  33. package/dist/core/tree/index.d.ts +1 -1
  34. package/dist/core/tree/index.d.ts.map +1 -1
  35. package/dist/core/tree/index.js +4 -3
  36. package/dist/core/tree/index.js.map +1 -1
  37. package/dist/core/tree/pathTree.d.ts +11 -3
  38. package/dist/core/tree/pathTree.d.ts.map +1 -1
  39. package/dist/core/tree/pathTree.js +14 -2
  40. package/dist/core/tree/pathTree.js.map +1 -1
  41. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  42. package/dist/core/tree/visitDelta.js +3 -2
  43. package/dist/core/tree/visitDelta.js.map +1 -1
  44. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  45. package/dist/core/tree/visitorUtils.js +58 -18
  46. package/dist/core/tree/visitorUtils.js.map +1 -1
  47. package/dist/feature-libraries/changeAtomIdBTree.d.ts +10 -4
  48. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  49. package/dist/feature-libraries/changeAtomIdBTree.js +16 -2
  50. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  51. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  52. package/dist/feature-libraries/chunked-forest/basicChunk.js +7 -0
  53. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  54. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  55. package/dist/feature-libraries/chunked-forest/chunkTree.js +4 -1
  56. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  57. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  58. package/dist/feature-libraries/chunked-forest/chunkedForest.js +3 -1
  59. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  60. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +1 -0
  61. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  62. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +93 -44
  63. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  64. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +238 -69
  65. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  66. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -1
  67. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  68. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +11 -2
  69. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  70. package/dist/feature-libraries/default-schema/index.d.ts +2 -1
  71. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  72. package/dist/feature-libraries/default-schema/index.js +5 -2
  73. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  74. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +38 -0
  75. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
  76. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js +132 -0
  77. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
  78. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
  79. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  80. package/dist/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
  81. package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  82. package/dist/feature-libraries/deltaUtils.d.ts +1 -0
  83. package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
  84. package/dist/feature-libraries/deltaUtils.js +6 -1
  85. package/dist/feature-libraries/deltaUtils.js.map +1 -1
  86. package/dist/feature-libraries/flex-tree/context.d.ts +9 -0
  87. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  88. package/dist/feature-libraries/flex-tree/context.js +6 -0
  89. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  90. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  91. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  92. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  93. package/dist/feature-libraries/flex-tree/lazyField.d.ts +8 -7
  94. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  95. package/dist/feature-libraries/flex-tree/lazyField.js +40 -9
  96. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  97. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  98. package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -1
  99. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  100. package/dist/feature-libraries/index.d.ts +3 -3
  101. package/dist/feature-libraries/index.d.ts.map +1 -1
  102. package/dist/feature-libraries/index.js +8 -3
  103. package/dist/feature-libraries/index.js.map +1 -1
  104. package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  105. package/dist/feature-libraries/mapTreeCursor.js +1 -0
  106. package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
  107. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  108. package/dist/feature-libraries/mitigatedChangeFamily.js +2 -2
  109. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  110. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +97 -21
  111. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  112. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +4 -7
  113. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  114. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +20 -51
  115. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  116. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  117. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  118. package/dist/feature-libraries/modular-schema/genericFieldKind.js +3 -9
  119. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  120. package/dist/feature-libraries/modular-schema/index.d.ts +4 -4
  121. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  122. package/dist/feature-libraries/modular-schema/index.js +2 -2
  123. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  124. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +11 -28
  125. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  126. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +255 -161
  127. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  128. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
  129. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
  130. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js +393 -0
  131. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
  132. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  133. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +8 -1
  134. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  135. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +48 -20
  136. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  137. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +1350 -476
  138. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  139. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  140. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  141. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +146 -0
  142. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
  143. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js +32 -0
  144. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
  145. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +47 -11
  146. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  147. package/dist/feature-libraries/modular-schema/modularChangeTypes.js +3 -3
  148. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  149. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  150. package/dist/feature-libraries/object-forest/objectForest.js +3 -1
  151. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  152. package/dist/feature-libraries/optional-field/index.d.ts +2 -2
  153. package/dist/feature-libraries/optional-field/index.d.ts.map +1 -1
  154. package/dist/feature-libraries/optional-field/index.js +1 -2
  155. package/dist/feature-libraries/optional-field/index.js.map +1 -1
  156. package/dist/feature-libraries/optional-field/optionalField.d.ts +5 -26
  157. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  158. package/dist/feature-libraries/optional-field/optionalField.js +221 -443
  159. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  160. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  161. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  162. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +31 -0
  163. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  164. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +24 -33
  165. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  166. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  167. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  168. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  169. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +57 -28
  170. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  171. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  172. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  173. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +57 -0
  174. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  175. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  176. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  177. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  178. package/dist/feature-libraries/sequence-field/compose.d.ts +6 -7
  179. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  180. package/dist/feature-libraries/sequence-field/compose.js +83 -259
  181. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  182. package/dist/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
  183. package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  184. package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  185. package/dist/feature-libraries/sequence-field/index.d.ts +2 -3
  186. package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
  187. package/dist/feature-libraries/sequence-field/index.js +1 -3
  188. package/dist/feature-libraries/sequence-field/index.js.map +1 -1
  189. package/dist/feature-libraries/sequence-field/invert.d.ts +3 -3
  190. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  191. package/dist/feature-libraries/sequence-field/invert.js +65 -167
  192. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  193. package/dist/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  194. package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  195. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  196. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
  197. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  198. package/dist/feature-libraries/sequence-field/moveEffectTable.js +7 -90
  199. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  200. package/dist/feature-libraries/sequence-field/rebase.d.ts +3 -3
  201. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  202. package/dist/feature-libraries/sequence-field/rebase.js +107 -114
  203. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  204. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  205. package/dist/feature-libraries/sequence-field/replaceRevisions.js +18 -31
  206. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  207. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  208. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +0 -2
  209. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  210. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
  211. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  212. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +365 -187
  213. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  214. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  215. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +20 -62
  216. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  217. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  218. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  219. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
  220. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  221. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
  222. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  223. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +14 -109
  224. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  225. package/dist/feature-libraries/sequence-field/types.d.ts +30 -59
  226. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  227. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  228. package/dist/feature-libraries/sequence-field/utils.d.ts +15 -24
  229. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  230. package/dist/feature-libraries/sequence-field/utils.js +116 -305
  231. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  232. package/dist/index.d.ts +3 -2
  233. package/dist/index.d.ts.map +1 -1
  234. package/dist/index.js +4 -1
  235. package/dist/index.js.map +1 -1
  236. package/dist/packageVersion.d.ts +1 -1
  237. package/dist/packageVersion.d.ts.map +1 -1
  238. package/dist/packageVersion.js +1 -1
  239. package/dist/packageVersion.js.map +1 -1
  240. package/dist/shared-tree/index.d.ts +1 -1
  241. package/dist/shared-tree/index.d.ts.map +1 -1
  242. package/dist/shared-tree/index.js.map +1 -1
  243. package/dist/shared-tree/schematizeTree.d.ts +4 -4
  244. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  245. package/dist/shared-tree/schematizeTree.js +2 -1
  246. package/dist/shared-tree/schematizeTree.js.map +1 -1
  247. package/dist/shared-tree/schematizingTreeView.d.ts +1 -5
  248. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  249. package/dist/shared-tree/schematizingTreeView.js +38 -35
  250. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  251. package/dist/shared-tree/sharedTree.d.ts +9 -3
  252. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  253. package/dist/shared-tree/sharedTree.js +11 -0
  254. package/dist/shared-tree/sharedTree.js.map +1 -1
  255. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  256. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  257. package/dist/shared-tree/sharedTreeChangeCodecs.js +1 -0
  258. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  259. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  260. package/dist/shared-tree/sharedTreeChangeEnricher.js +1 -1
  261. package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  262. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
  263. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  264. package/dist/shared-tree/sharedTreeChangeFamily.js +10 -4
  265. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  266. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
  267. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  268. package/dist/shared-tree/sharedTreeEditBuilder.js +14 -7
  269. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  270. package/dist/shared-tree/treeCheckout.d.ts +9 -10
  271. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  272. package/dist/shared-tree/treeCheckout.js +63 -8
  273. package/dist/shared-tree/treeCheckout.js.map +1 -1
  274. package/dist/shared-tree-core/branch.d.ts +3 -2
  275. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  276. package/dist/shared-tree-core/branch.js +9 -4
  277. package/dist/shared-tree-core/branch.js.map +1 -1
  278. package/dist/shared-tree-core/editManager.d.ts +2 -2
  279. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  280. package/dist/shared-tree-core/editManager.js +20 -14
  281. package/dist/shared-tree-core/editManager.js.map +1 -1
  282. package/dist/shared-tree-core/editManagerCodecs.d.ts +4 -0
  283. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  284. package/dist/shared-tree-core/editManagerCodecs.js +10 -2
  285. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  286. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  287. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  288. package/dist/shared-tree-core/editManagerFormatCommons.js +6 -0
  289. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  290. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  291. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  292. package/dist/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  293. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  294. package/dist/shared-tree-core/index.d.ts +2 -2
  295. package/dist/shared-tree-core/index.d.ts.map +1 -1
  296. package/dist/shared-tree-core/index.js +3 -1
  297. package/dist/shared-tree-core/index.js.map +1 -1
  298. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  299. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  300. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  301. package/dist/shared-tree-core/messageCodecs.d.ts +4 -0
  302. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  303. package/dist/shared-tree-core/messageCodecs.js +10 -2
  304. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  305. package/dist/shared-tree-core/messageFormat.d.ts +1 -0
  306. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  307. package/dist/shared-tree-core/messageFormat.js +6 -0
  308. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  309. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  310. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  311. package/dist/shared-tree-core/messageFormatV1ToV4.js +1 -0
  312. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  313. package/dist/shared-tree-core/sharedTreeCore.d.ts +1 -0
  314. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  315. package/dist/shared-tree-core/sharedTreeCore.js +1 -1
  316. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  317. package/dist/simple-tree/api/index.d.ts +1 -1
  318. package/dist/simple-tree/api/index.d.ts.map +1 -1
  319. package/dist/simple-tree/api/index.js +2 -1
  320. package/dist/simple-tree/api/index.js.map +1 -1
  321. package/dist/simple-tree/api/schemaFactoryAlpha.js +1 -1
  322. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  323. package/dist/simple-tree/api/schemaFactoryBeta.js +1 -1
  324. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  325. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +4 -4
  326. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  327. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts +244 -0
  328. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  329. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +297 -1
  330. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  331. package/dist/simple-tree/api/tree.d.ts +3 -1
  332. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  333. package/dist/simple-tree/api/tree.js.map +1 -1
  334. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  335. package/dist/simple-tree/core/treeNodeKernel.js +6 -2
  336. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  337. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +15 -15
  338. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  339. package/dist/simple-tree/core/unhydratedFlexTree.js +59 -8
  340. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  341. package/dist/simple-tree/fieldSchema.d.ts +4 -4
  342. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  343. package/dist/simple-tree/fieldSchema.js.map +1 -1
  344. package/dist/simple-tree/index.d.ts +3 -3
  345. package/dist/simple-tree/index.d.ts.map +1 -1
  346. package/dist/simple-tree/index.js +4 -3
  347. package/dist/simple-tree/index.js.map +1 -1
  348. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  349. package/dist/simple-tree/node-kinds/array/arrayNode.js +7 -5
  350. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  351. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
  352. package/dist/simple-tree/node-kinds/common.js +1 -1
  353. package/dist/simple-tree/node-kinds/common.js.map +1 -1
  354. package/dist/simple-tree/node-kinds/map/mapNode.js +2 -2
  355. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  356. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  357. package/dist/simple-tree/node-kinds/object/objectNode.js +19 -19
  358. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  359. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  360. package/dist/simple-tree/node-kinds/record/recordNode.js +4 -2
  361. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  362. package/dist/simple-tree/prepareForInsertion.d.ts +54 -47
  363. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  364. package/dist/simple-tree/prepareForInsertion.js +184 -126
  365. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  366. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +13 -4
  367. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  368. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +31 -13
  369. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  370. package/dist/text/index.d.ts +6 -0
  371. package/dist/text/index.d.ts.map +1 -0
  372. package/dist/text/index.js +10 -0
  373. package/dist/text/index.js.map +1 -0
  374. package/dist/text/textDomain.d.ts +138 -0
  375. package/dist/text/textDomain.d.ts.map +1 -0
  376. package/dist/text/textDomain.js +121 -0
  377. package/dist/text/textDomain.js.map +1 -0
  378. package/dist/treeFactory.d.ts.map +1 -1
  379. package/dist/treeFactory.js +12 -2
  380. package/dist/treeFactory.js.map +1 -1
  381. package/dist/util/bTreeUtils.d.ts +12 -4
  382. package/dist/util/bTreeUtils.d.ts.map +1 -1
  383. package/dist/util/bTreeUtils.js +14 -18
  384. package/dist/util/bTreeUtils.js.map +1 -1
  385. package/dist/util/index.d.ts +1 -1
  386. package/dist/util/index.d.ts.map +1 -1
  387. package/dist/util/index.js +2 -1
  388. package/dist/util/index.js.map +1 -1
  389. package/dist/util/nestedMap.js +12 -12
  390. package/dist/util/nestedMap.js.map +1 -1
  391. package/dist/util/rangeMap.d.ts +24 -12
  392. package/dist/util/rangeMap.d.ts.map +1 -1
  393. package/dist/util/rangeMap.js +46 -6
  394. package/dist/util/rangeMap.js.map +1 -1
  395. package/docs/user-facing/merge-semantics.md +3 -2
  396. package/eslint.config.mts +4 -32
  397. package/lib/alpha.d.ts +5 -0
  398. package/lib/core/change-family/changeFamily.d.ts +4 -1
  399. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  400. package/lib/core/change-family/changeFamily.js.map +1 -1
  401. package/lib/core/change-family/index.d.ts +1 -1
  402. package/lib/core/change-family/index.d.ts.map +1 -1
  403. package/lib/core/change-family/index.js.map +1 -1
  404. package/lib/core/index.d.ts +3 -3
  405. package/lib/core/index.d.ts.map +1 -1
  406. package/lib/core/index.js +2 -2
  407. package/lib/core/index.js.map +1 -1
  408. package/lib/core/rebase/changeRebaser.d.ts +6 -1
  409. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  410. package/lib/core/rebase/changeRebaser.js.map +1 -1
  411. package/lib/core/rebase/index.d.ts +1 -1
  412. package/lib/core/rebase/index.d.ts.map +1 -1
  413. package/lib/core/rebase/index.js +1 -1
  414. package/lib/core/rebase/index.js.map +1 -1
  415. package/lib/core/rebase/types.d.ts +46 -8
  416. package/lib/core/rebase/types.d.ts.map +1 -1
  417. package/lib/core/rebase/types.js +3 -0
  418. package/lib/core/rebase/types.js.map +1 -1
  419. package/lib/core/rebase/utils.d.ts.map +1 -1
  420. package/lib/core/rebase/utils.js +30 -8
  421. package/lib/core/rebase/utils.js.map +1 -1
  422. package/lib/core/tree/anchorSet.js +1 -0
  423. package/lib/core/tree/anchorSet.js.map +1 -1
  424. package/lib/core/tree/detachedFieldIndex.d.ts +6 -0
  425. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  426. package/lib/core/tree/detachedFieldIndex.js +10 -1
  427. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  428. package/lib/core/tree/index.d.ts +1 -1
  429. package/lib/core/tree/index.d.ts.map +1 -1
  430. package/lib/core/tree/index.js +1 -1
  431. package/lib/core/tree/index.js.map +1 -1
  432. package/lib/core/tree/pathTree.d.ts +11 -3
  433. package/lib/core/tree/pathTree.d.ts.map +1 -1
  434. package/lib/core/tree/pathTree.js +12 -1
  435. package/lib/core/tree/pathTree.js.map +1 -1
  436. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  437. package/lib/core/tree/visitDelta.js +3 -2
  438. package/lib/core/tree/visitDelta.js.map +1 -1
  439. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  440. package/lib/core/tree/visitorUtils.js +58 -18
  441. package/lib/core/tree/visitorUtils.js.map +1 -1
  442. package/lib/feature-libraries/changeAtomIdBTree.d.ts +10 -4
  443. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  444. package/lib/feature-libraries/changeAtomIdBTree.js +14 -1
  445. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  446. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  447. package/lib/feature-libraries/chunked-forest/basicChunk.js +8 -1
  448. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  449. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  450. package/lib/feature-libraries/chunked-forest/chunkTree.js +4 -1
  451. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  452. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  453. package/lib/feature-libraries/chunked-forest/chunkedForest.js +3 -1
  454. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  455. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +1 -0
  456. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  457. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +93 -44
  458. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  459. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +236 -70
  460. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  461. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -1
  462. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  463. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +11 -2
  464. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  465. package/lib/feature-libraries/default-schema/index.d.ts +2 -1
  466. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  467. package/lib/feature-libraries/default-schema/index.js +2 -1
  468. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  469. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +38 -0
  470. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +1 -0
  471. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js +128 -0
  472. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js.map +1 -0
  473. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +7 -6
  474. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  475. package/lib/feature-libraries/default-schema/mappedEditBuilder.js +15 -0
  476. package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  477. package/lib/feature-libraries/deltaUtils.d.ts +1 -0
  478. package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
  479. package/lib/feature-libraries/deltaUtils.js +5 -1
  480. package/lib/feature-libraries/deltaUtils.js.map +1 -1
  481. package/lib/feature-libraries/flex-tree/context.d.ts +9 -0
  482. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  483. package/lib/feature-libraries/flex-tree/context.js +6 -0
  484. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  485. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  486. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  487. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  488. package/lib/feature-libraries/flex-tree/lazyField.d.ts +8 -7
  489. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  490. package/lib/feature-libraries/flex-tree/lazyField.js +41 -10
  491. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  492. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  493. package/lib/feature-libraries/forest-summary/forestSummarizer.js +3 -1
  494. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  495. package/lib/feature-libraries/index.d.ts +3 -3
  496. package/lib/feature-libraries/index.d.ts.map +1 -1
  497. package/lib/feature-libraries/index.js +2 -2
  498. package/lib/feature-libraries/index.js.map +1 -1
  499. package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  500. package/lib/feature-libraries/mapTreeCursor.js +2 -1
  501. package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
  502. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  503. package/lib/feature-libraries/mitigatedChangeFamily.js +2 -2
  504. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  505. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +97 -21
  506. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  507. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +3 -5
  508. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  509. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +20 -51
  510. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  511. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  512. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  513. package/lib/feature-libraries/modular-schema/genericFieldKind.js +3 -9
  514. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  515. package/lib/feature-libraries/modular-schema/index.d.ts +4 -4
  516. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  517. package/lib/feature-libraries/modular-schema/index.js +2 -2
  518. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  519. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +11 -28
  520. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  521. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +247 -143
  522. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  523. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +15 -0
  524. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +1 -0
  525. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js +389 -0
  526. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js.map +1 -0
  527. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  528. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +8 -1
  529. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  530. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +48 -20
  531. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  532. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +1344 -479
  533. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  534. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  535. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  536. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +146 -0
  537. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +1 -0
  538. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js +29 -0
  539. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js.map +1 -0
  540. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +47 -11
  541. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  542. package/lib/feature-libraries/modular-schema/modularChangeTypes.js +1 -1
  543. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  544. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  545. package/lib/feature-libraries/object-forest/objectForest.js +3 -1
  546. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  547. package/lib/feature-libraries/optional-field/index.d.ts +2 -2
  548. package/lib/feature-libraries/optional-field/index.d.ts.map +1 -1
  549. package/lib/feature-libraries/optional-field/index.js +1 -1
  550. package/lib/feature-libraries/optional-field/index.js.map +1 -1
  551. package/lib/feature-libraries/optional-field/optionalField.d.ts +5 -26
  552. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  553. package/lib/feature-libraries/optional-field/optionalField.js +221 -441
  554. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  555. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  556. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  557. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +27 -0
  558. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  559. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +24 -33
  560. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  561. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  562. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  563. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  564. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +55 -26
  565. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  566. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  567. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  568. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +53 -0
  569. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  570. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  571. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  572. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  573. package/lib/feature-libraries/sequence-field/compose.d.ts +6 -7
  574. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  575. package/lib/feature-libraries/sequence-field/compose.js +85 -261
  576. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  577. package/lib/feature-libraries/sequence-field/helperTypes.d.ts +14 -10
  578. package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  579. package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  580. package/lib/feature-libraries/sequence-field/index.d.ts +2 -3
  581. package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
  582. package/lib/feature-libraries/sequence-field/index.js +0 -1
  583. package/lib/feature-libraries/sequence-field/index.js.map +1 -1
  584. package/lib/feature-libraries/sequence-field/invert.d.ts +3 -3
  585. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  586. package/lib/feature-libraries/sequence-field/invert.js +67 -169
  587. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  588. package/lib/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  589. package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  590. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  591. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +4 -56
  592. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  593. package/lib/feature-libraries/sequence-field/moveEffectTable.js +6 -84
  594. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  595. package/lib/feature-libraries/sequence-field/rebase.d.ts +3 -3
  596. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  597. package/lib/feature-libraries/sequence-field/rebase.js +109 -116
  598. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  599. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  600. package/lib/feature-libraries/sequence-field/replaceRevisions.js +18 -31
  601. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  602. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  603. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +0 -2
  604. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  605. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +22 -4
  606. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  607. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +356 -182
  608. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  609. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  610. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +21 -63
  611. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  612. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  613. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  614. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
  615. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  616. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +3 -2
  617. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  618. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +14 -109
  619. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  620. package/lib/feature-libraries/sequence-field/types.d.ts +30 -59
  621. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  622. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  623. package/lib/feature-libraries/sequence-field/utils.d.ts +15 -24
  624. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  625. package/lib/feature-libraries/sequence-field/utils.js +112 -298
  626. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  627. package/lib/index.d.ts +3 -2
  628. package/lib/index.d.ts.map +1 -1
  629. package/lib/index.js +2 -1
  630. package/lib/index.js.map +1 -1
  631. package/lib/packageVersion.d.ts +1 -1
  632. package/lib/packageVersion.d.ts.map +1 -1
  633. package/lib/packageVersion.js +1 -1
  634. package/lib/packageVersion.js.map +1 -1
  635. package/lib/shared-tree/index.d.ts +1 -1
  636. package/lib/shared-tree/index.d.ts.map +1 -1
  637. package/lib/shared-tree/index.js.map +1 -1
  638. package/lib/shared-tree/schematizeTree.d.ts +4 -4
  639. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  640. package/lib/shared-tree/schematizeTree.js +3 -2
  641. package/lib/shared-tree/schematizeTree.js.map +1 -1
  642. package/lib/shared-tree/schematizingTreeView.d.ts +1 -5
  643. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  644. package/lib/shared-tree/schematizingTreeView.js +41 -38
  645. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  646. package/lib/shared-tree/sharedTree.d.ts +9 -3
  647. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  648. package/lib/shared-tree/sharedTree.js +11 -0
  649. package/lib/shared-tree/sharedTree.js.map +1 -1
  650. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  651. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  652. package/lib/shared-tree/sharedTreeChangeCodecs.js +1 -0
  653. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  654. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  655. package/lib/shared-tree/sharedTreeChangeEnricher.js +2 -2
  656. package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  657. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
  658. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  659. package/lib/shared-tree/sharedTreeChangeFamily.js +11 -5
  660. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  661. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +16 -6
  662. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  663. package/lib/shared-tree/sharedTreeEditBuilder.js +12 -6
  664. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  665. package/lib/shared-tree/treeCheckout.d.ts +9 -10
  666. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  667. package/lib/shared-tree/treeCheckout.js +66 -11
  668. package/lib/shared-tree/treeCheckout.js.map +1 -1
  669. package/lib/shared-tree-core/branch.d.ts +3 -2
  670. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  671. package/lib/shared-tree-core/branch.js +9 -4
  672. package/lib/shared-tree-core/branch.js.map +1 -1
  673. package/lib/shared-tree-core/editManager.d.ts +2 -2
  674. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  675. package/lib/shared-tree-core/editManager.js +20 -14
  676. package/lib/shared-tree-core/editManager.js.map +1 -1
  677. package/lib/shared-tree-core/editManagerCodecs.d.ts +4 -0
  678. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  679. package/lib/shared-tree-core/editManagerCodecs.js +8 -1
  680. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  681. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  682. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  683. package/lib/shared-tree-core/editManagerFormatCommons.js +6 -0
  684. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  685. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  686. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  687. package/lib/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  688. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  689. package/lib/shared-tree-core/index.d.ts +2 -2
  690. package/lib/shared-tree-core/index.d.ts.map +1 -1
  691. package/lib/shared-tree-core/index.js +2 -2
  692. package/lib/shared-tree-core/index.js.map +1 -1
  693. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  694. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  695. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  696. package/lib/shared-tree-core/messageCodecs.d.ts +4 -0
  697. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  698. package/lib/shared-tree-core/messageCodecs.js +8 -1
  699. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  700. package/lib/shared-tree-core/messageFormat.d.ts +1 -0
  701. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  702. package/lib/shared-tree-core/messageFormat.js +6 -0
  703. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  704. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  705. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  706. package/lib/shared-tree-core/messageFormatV1ToV4.js +1 -0
  707. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  708. package/lib/shared-tree-core/sharedTreeCore.d.ts +1 -0
  709. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  710. package/lib/shared-tree-core/sharedTreeCore.js +1 -1
  711. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  712. package/lib/simple-tree/api/index.d.ts +1 -1
  713. package/lib/simple-tree/api/index.d.ts.map +1 -1
  714. package/lib/simple-tree/api/index.js +1 -1
  715. package/lib/simple-tree/api/index.js.map +1 -1
  716. package/lib/simple-tree/api/schemaFactoryAlpha.js +1 -1
  717. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  718. package/lib/simple-tree/api/schemaFactoryBeta.js +1 -1
  719. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  720. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +4 -4
  721. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  722. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts +244 -0
  723. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  724. package/lib/simple-tree/api/snapshotCompatibilityChecker.js +270 -0
  725. package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  726. package/lib/simple-tree/api/tree.d.ts +3 -1
  727. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  728. package/lib/simple-tree/api/tree.js.map +1 -1
  729. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  730. package/lib/simple-tree/core/treeNodeKernel.js +6 -2
  731. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  732. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +15 -15
  733. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  734. package/lib/simple-tree/core/unhydratedFlexTree.js +58 -8
  735. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  736. package/lib/simple-tree/fieldSchema.d.ts +4 -4
  737. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  738. package/lib/simple-tree/fieldSchema.js.map +1 -1
  739. package/lib/simple-tree/index.d.ts +3 -3
  740. package/lib/simple-tree/index.d.ts.map +1 -1
  741. package/lib/simple-tree/index.js +2 -2
  742. package/lib/simple-tree/index.js.map +1 -1
  743. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  744. package/lib/simple-tree/node-kinds/array/arrayNode.js +8 -6
  745. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  746. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
  747. package/lib/simple-tree/node-kinds/common.js +2 -2
  748. package/lib/simple-tree/node-kinds/common.js.map +1 -1
  749. package/lib/simple-tree/node-kinds/map/mapNode.js +2 -2
  750. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  751. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  752. package/lib/simple-tree/node-kinds/object/objectNode.js +20 -20
  753. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  754. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  755. package/lib/simple-tree/node-kinds/record/recordNode.js +4 -2
  756. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  757. package/lib/simple-tree/prepareForInsertion.d.ts +54 -47
  758. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  759. package/lib/simple-tree/prepareForInsertion.js +184 -125
  760. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  761. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +13 -4
  762. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  763. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +28 -11
  764. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  765. package/lib/text/index.d.ts +6 -0
  766. package/lib/text/index.d.ts.map +1 -0
  767. package/lib/text/index.js +6 -0
  768. package/lib/text/index.js.map +1 -0
  769. package/lib/text/textDomain.d.ts +138 -0
  770. package/lib/text/textDomain.d.ts.map +1 -0
  771. package/lib/text/textDomain.js +118 -0
  772. package/lib/text/textDomain.js.map +1 -0
  773. package/lib/treeFactory.d.ts.map +1 -1
  774. package/lib/treeFactory.js +13 -3
  775. package/lib/treeFactory.js.map +1 -1
  776. package/lib/util/bTreeUtils.d.ts +12 -4
  777. package/lib/util/bTreeUtils.d.ts.map +1 -1
  778. package/lib/util/bTreeUtils.js +15 -19
  779. package/lib/util/bTreeUtils.js.map +1 -1
  780. package/lib/util/index.d.ts +1 -1
  781. package/lib/util/index.d.ts.map +1 -1
  782. package/lib/util/index.js +1 -1
  783. package/lib/util/index.js.map +1 -1
  784. package/lib/util/nestedMap.js +12 -12
  785. package/lib/util/nestedMap.js.map +1 -1
  786. package/lib/util/rangeMap.d.ts +24 -12
  787. package/lib/util/rangeMap.d.ts.map +1 -1
  788. package/lib/util/rangeMap.js +44 -5
  789. package/lib/util/rangeMap.js.map +1 -1
  790. package/package.json +25 -25
  791. package/src/core/change-family/changeFamily.ts +5 -0
  792. package/src/core/change-family/index.ts +1 -0
  793. package/src/core/index.ts +6 -1
  794. package/src/core/rebase/changeRebaser.ts +6 -1
  795. package/src/core/rebase/index.ts +3 -0
  796. package/src/core/rebase/types.ts +65 -21
  797. package/src/core/rebase/utils.ts +39 -11
  798. package/src/core/tree/anchorSet.ts +1 -0
  799. package/src/core/tree/detachedFieldIndex.ts +17 -1
  800. package/src/core/tree/index.ts +2 -1
  801. package/src/core/tree/pathTree.ts +16 -4
  802. package/src/core/tree/visitDelta.ts +6 -2
  803. package/src/core/tree/visitorUtils.ts +55 -19
  804. package/src/feature-libraries/changeAtomIdBTree.ts +37 -5
  805. package/src/feature-libraries/chunked-forest/basicChunk.ts +7 -1
  806. package/src/feature-libraries/chunked-forest/chunkTree.ts +6 -1
  807. package/src/feature-libraries/chunked-forest/chunkedForest.ts +3 -1
  808. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +1 -0
  809. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +399 -127
  810. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +13 -5
  811. package/src/feature-libraries/default-schema/index.ts +17 -5
  812. package/src/feature-libraries/default-schema/locationBasedEditBuilder.ts +188 -0
  813. package/src/feature-libraries/default-schema/mappedEditBuilder.ts +35 -9
  814. package/src/feature-libraries/deltaUtils.ts +6 -1
  815. package/src/feature-libraries/flex-tree/context.ts +17 -0
  816. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +7 -8
  817. package/src/feature-libraries/flex-tree/lazyField.ts +68 -25
  818. package/src/feature-libraries/forest-summary/forestSummarizer.ts +3 -1
  819. package/src/feature-libraries/index.ts +22 -8
  820. package/src/feature-libraries/mapTreeCursor.ts +2 -1
  821. package/src/feature-libraries/mitigatedChangeFamily.ts +3 -1
  822. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +142 -44
  823. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +32 -58
  824. package/src/feature-libraries/modular-schema/genericFieldKind.ts +6 -18
  825. package/src/feature-libraries/modular-schema/index.ts +16 -15
  826. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +560 -351
  827. package/src/feature-libraries/modular-schema/modularChangeCodecV3.ts +760 -0
  828. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +14 -1
  829. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +2620 -782
  830. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +1 -0
  831. package/src/feature-libraries/modular-schema/modularChangeFormatV3.ts +62 -0
  832. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +58 -11
  833. package/src/feature-libraries/object-forest/objectForest.ts +3 -1
  834. package/src/feature-libraries/optional-field/index.ts +1 -3
  835. package/src/feature-libraries/optional-field/optionalField.ts +318 -562
  836. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +45 -0
  837. package/src/feature-libraries/optional-field/optionalFieldChangeTypes.ts +24 -38
  838. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +89 -35
  839. package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +94 -0
  840. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -1
  841. package/src/feature-libraries/sequence-field/compose.ts +139 -522
  842. package/src/feature-libraries/sequence-field/helperTypes.ts +34 -19
  843. package/src/feature-libraries/sequence-field/index.ts +0 -9
  844. package/src/feature-libraries/sequence-field/invert.ts +103 -228
  845. package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
  846. package/src/feature-libraries/sequence-field/moveEffectTable.ts +8 -195
  847. package/src/feature-libraries/sequence-field/rebase.ts +169 -205
  848. package/src/feature-libraries/sequence-field/replaceRevisions.ts +25 -47
  849. package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +0 -2
  850. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +648 -228
  851. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +56 -70
  852. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +25 -27
  853. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +19 -129
  854. package/src/feature-libraries/sequence-field/types.ts +34 -64
  855. package/src/feature-libraries/sequence-field/utils.ts +139 -353
  856. package/src/index.ts +7 -0
  857. package/src/packageVersion.ts +1 -1
  858. package/src/shared-tree/index.ts +3 -2
  859. package/src/shared-tree/schematizeTree.ts +21 -8
  860. package/src/shared-tree/schematizingTreeView.ts +56 -70
  861. package/src/shared-tree/sharedTree.ts +20 -3
  862. package/src/shared-tree/sharedTreeChangeCodecs.ts +5 -1
  863. package/src/shared-tree/sharedTreeChangeEnricher.ts +2 -0
  864. package/src/shared-tree/sharedTreeChangeFamily.ts +15 -5
  865. package/src/shared-tree/sharedTreeEditBuilder.ts +39 -8
  866. package/src/shared-tree/treeCheckout.ts +95 -24
  867. package/src/shared-tree-core/branch.ts +13 -3
  868. package/src/shared-tree-core/editManager.ts +42 -28
  869. package/src/shared-tree-core/editManagerCodecs.ts +11 -1
  870. package/src/shared-tree-core/editManagerFormatCommons.ts +6 -0
  871. package/src/shared-tree-core/editManagerFormatV1toV4.ts +3 -1
  872. package/src/shared-tree-core/index.ts +2 -0
  873. package/src/shared-tree-core/messageCodecV1ToV4.ts +2 -1
  874. package/src/shared-tree-core/messageCodecs.ts +11 -1
  875. package/src/shared-tree-core/messageFormat.ts +6 -0
  876. package/src/shared-tree-core/messageFormatV1ToV4.ts +3 -1
  877. package/src/shared-tree-core/sharedTreeCore.ts +4 -1
  878. package/src/simple-tree/api/index.ts +3 -0
  879. package/src/simple-tree/api/schemaFactoryAlpha.ts +1 -1
  880. package/src/simple-tree/api/schemaFactoryBeta.ts +1 -1
  881. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +4 -4
  882. package/src/simple-tree/api/snapshotCompatibilityChecker.ts +501 -0
  883. package/src/simple-tree/api/tree.ts +3 -1
  884. package/src/simple-tree/core/treeNodeKernel.ts +6 -2
  885. package/src/simple-tree/core/unhydratedFlexTree.ts +87 -36
  886. package/src/simple-tree/fieldSchema.ts +6 -4
  887. package/src/simple-tree/index.ts +5 -1
  888. package/src/simple-tree/node-kinds/array/arrayNode.ts +9 -7
  889. package/src/simple-tree/node-kinds/common.ts +2 -5
  890. package/src/simple-tree/node-kinds/map/mapNode.ts +4 -4
  891. package/src/simple-tree/node-kinds/object/objectNode.ts +26 -26
  892. package/src/simple-tree/node-kinds/record/recordNode.ts +10 -9
  893. package/src/simple-tree/prepareForInsertion.ts +343 -201
  894. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +43 -15
  895. package/src/text/README.md +8 -0
  896. package/src/text/index.ts +6 -0
  897. package/src/text/textDomain.ts +199 -0
  898. package/src/treeFactory.ts +14 -4
  899. package/src/util/bTreeUtils.ts +33 -22
  900. package/src/util/index.ts +3 -0
  901. package/src/util/nestedMap.ts +12 -12
  902. package/src/util/rangeMap.ts +72 -18
  903. package/.eslintrc.cjs +0 -125
  904. package/assertTagging.config.mjs +0 -14
  905. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
  906. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
  907. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -50
  908. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
  909. package/docs/main/sequence-field/move-composition.md +0 -46
  910. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +0 -9
  911. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +0 -1
  912. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +0 -46
  913. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +0 -1
  914. package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +0 -57
@@ -3,68 +3,85 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert, oob, fail } from "@fluidframework/core-utils/internal";
7
- import type { TAnySchema } from "@sinclair/typebox";
8
-
6
+ import { assert, fail, oob } from "@fluidframework/core-utils/internal";
9
7
  import {
8
+ extractJsonValidator,
9
+ withSchemaValidation,
10
10
  type ICodecOptions,
11
11
  type IJsonCodec,
12
12
  type IMultiFormatCodec,
13
13
  type SchemaValidationFunction,
14
- extractJsonValidator,
15
- withSchemaValidation,
16
14
  } from "../../codec/index.js";
17
- import type {
18
- ChangeEncodingContext,
19
- ChangesetLocalId,
20
- EncodedRevisionTag,
21
- FieldKey,
22
- FieldKindIdentifier,
23
- ITreeCursorSynchronous,
24
- RevisionInfo,
25
- RevisionTag,
15
+ import {
16
+ newChangeAtomIdTransform,
17
+ type ChangeAtomId,
18
+ type ChangeAtomIdRangeMap,
19
+ type ChangeEncodingContext,
20
+ type ChangesetLocalId,
21
+ type EncodedRevisionTag,
22
+ type FieldKey,
23
+ type FieldKindIdentifier,
24
+ type ITreeCursorSynchronous,
25
+ type RevisionInfo,
26
+ type RevisionTag,
26
27
  } from "../../core/index.js";
27
28
  import {
28
- type IdAllocator,
29
- type JsonCompatibleReadOnly,
30
- type Mutable,
31
29
  brand,
32
30
  idAllocatorFromMaxId,
33
31
  newTupleBTree,
32
+ type IdAllocator,
33
+ type JsonCompatibleReadOnly,
34
+ type Mutable,
35
+ type RangeQueryEntry,
36
+ type RangeQueryResult,
37
+ type TupleBTree,
34
38
  } from "../../util/index.js";
35
39
  import {
36
- type FieldBatchCodec,
37
- type TreeChunk,
38
40
  chunkFieldSingle,
39
41
  defaultChunkPolicy,
42
+ type FieldBatchCodec,
43
+ type TreeChunk,
40
44
  } from "../chunked-forest/index.js";
41
45
  import { TreeCompressionStrategy } from "../treeCompressionUtils.js";
42
-
43
- import type { FieldChangeEncodingContext, FieldChangeHandler } from "./fieldChangeHandler.js";
44
46
  import type {
45
47
  FieldKindConfiguration,
46
48
  FieldKindConfigurationEntry,
47
49
  } from "./fieldKindConfiguration.js";
48
- import { genericFieldKind } from "./genericFieldKind.js";
49
50
  import {
50
- type EncodedBuilds,
51
- type EncodedBuildsArray,
52
- type EncodedFieldChange,
53
- type EncodedFieldChangeMap,
54
- EncodedModularChangesetV1,
55
- type EncodedNodeChangeset,
56
- type EncodedRevisionInfo,
57
- } from "./modularChangeFormatV1.js";
51
+ addNodeRename,
52
+ getFirstAttachField,
53
+ getFirstDetachField,
54
+ newRootTable,
55
+ normalizeFieldId,
56
+ validateChangeset,
57
+ type FieldIdKey,
58
+ } from "./modularChangeFamily.js";
58
59
  import {
59
- type FieldChangeset,
60
- newCrossFieldKeyTable,
60
+ newCrossFieldRangeTable,
61
+ type CrossFieldKeyTable,
61
62
  type FieldChangeMap,
63
+ type FieldChangeset,
62
64
  type FieldId,
63
65
  type ModularChangeset,
64
66
  type NodeChangeset,
65
67
  type NodeId,
68
+ type NodeLocation,
69
+ type RootNodeTable,
66
70
  } from "./modularChangeTypes.js";
67
- import type { ChangeAtomIdBTree } from "../changeAtomIdBTree.js";
71
+ import type {
72
+ EncodedBuilds,
73
+ EncodedBuildsArray,
74
+ EncodedFieldChange,
75
+ EncodedFieldChangeMap,
76
+ EncodedNodeChangeset,
77
+ EncodedRevisionInfo,
78
+ } from "./modularChangeFormatV1.js";
79
+ import { EncodedModularChangesetV1 } from "./modularChangeFormatV1.js";
80
+ import type { FieldChangeEncodingContext, FieldChangeHandler } from "./fieldChangeHandler.js";
81
+ import { genericFieldKind } from "./genericFieldKind.js";
82
+ import type { TAnySchema } from "@sinclair/typebox";
83
+ import { setInChangeAtomIdMap, type ChangeAtomIdBTree } from "../changeAtomIdBTree.js";
84
+ import type { FlexFieldKind } from "./fieldKind.js";
68
85
 
69
86
  type ModularChangeCodec = IJsonCodec<
70
87
  ModularChangeset,
@@ -80,6 +97,13 @@ type FieldCodec = IMultiFormatCodec<
80
97
  FieldChangeEncodingContext
81
98
  >;
82
99
 
100
+ interface FieldRootChanges {
101
+ readonly nodeChanges: ChangeAtomIdBTree<NodeId>;
102
+ readonly renames: ChangeAtomIdRangeMap<ChangeAtomId>;
103
+ }
104
+
105
+ type FieldRootMap = TupleBTree<FieldIdKey, FieldRootChanges>;
106
+
83
107
  type FieldChangesetCodecs = Map<
84
108
  FieldKindIdentifier,
85
109
  {
@@ -88,42 +112,64 @@ type FieldChangesetCodecs = Map<
88
112
  }
89
113
  >;
90
114
 
91
- export function getFieldChangesetCodec(
92
- fieldKind: FieldKindIdentifier,
93
- fieldChangesetCodecs: FieldChangesetCodecs,
94
- ): {
95
- compiledSchema?: SchemaValidationFunction<TAnySchema>;
96
- codec: FieldCodec;
97
- } {
98
- const entry = fieldChangesetCodecs.get(fieldKind);
99
- assert(entry !== undefined, 0x5ea /* Tried to encode unsupported fieldKind */);
100
- return entry;
101
- }
102
-
103
- export function encodeFieldChangesForJson(
104
- change: FieldChangeMap,
105
- context: ChangeEncodingContext,
106
- nodeChanges: ChangeAtomIdBTree<NodeChangeset>,
107
- fieldChangesetCodecs: FieldChangesetCodecs,
108
- ): EncodedFieldChangeMap {
109
- const fieldContext: FieldChangeEncodingContext = {
110
- baseContext: context,
115
+ export function getFieldChangesetCodecs(
116
+ fieldKinds: FieldKindConfiguration,
117
+ revisionTagCodec: IJsonCodec<
118
+ RevisionTag,
119
+ EncodedRevisionTag,
120
+ EncodedRevisionTag,
121
+ ChangeEncodingContext
122
+ >,
123
+ codecOptions: ICodecOptions,
124
+ ): Map<
125
+ FieldKindIdentifier,
126
+ { compiledSchema?: SchemaValidationFunction<TAnySchema>; codec: FieldCodec }
127
+ > {
128
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
129
+ const getMapEntry = ({ kind, formatVersion }: FieldKindConfigurationEntry) => {
130
+ const codec = kind.changeHandler.codecsFactory(revisionTagCodec).resolve(formatVersion);
131
+ return {
132
+ codec,
133
+ compiledSchema: codec.json.encodedSchema
134
+ ? extractJsonValidator(codecOptions.jsonValidator).compile(codec.json.encodedSchema)
135
+ : undefined,
136
+ };
137
+ };
111
138
 
112
- encodeNode: (nodeId: NodeId): EncodedNodeChangeset => {
113
- const node = nodeChanges.get([nodeId.revision, nodeId.localId]);
114
- assert(node !== undefined, 0x92e /* Unknown node ID */);
115
- return encodeNodeChangesForJson(node, fieldContext, fieldChangesetCodecs);
116
- },
139
+ /**
140
+ * The codec version for the generic field kind.
141
+ */
142
+ const genericFieldKindFormatVersion = 1;
143
+ const fieldChangesetCodecs: Map<
144
+ FieldKindIdentifier,
145
+ {
146
+ compiledSchema?: SchemaValidationFunction<TAnySchema>;
147
+ codec: FieldCodec;
148
+ }
149
+ > = new Map([
150
+ [
151
+ genericFieldKind.identifier,
152
+ getMapEntry({ kind: genericFieldKind, formatVersion: genericFieldKindFormatVersion }),
153
+ ],
154
+ ]);
117
155
 
118
- decodeNode: () => fail(0xb1e /* Should not decode nodes during field encoding */),
119
- };
156
+ // eslint-disable-next-line unicorn/no-array-for-each -- Map.forEach with (value, key) signature; codec initialization
157
+ fieldKinds.forEach((entry, identifier) => {
158
+ fieldChangesetCodecs.set(identifier, getMapEntry(entry));
159
+ });
120
160
 
121
- return encodeFieldChangesForJsonI(change, fieldContext, fieldChangesetCodecs);
161
+ return fieldChangesetCodecs;
122
162
  }
123
163
 
124
- export function encodeFieldChangesForJsonI(
164
+ function encodeFieldChangesForJson(
125
165
  change: FieldChangeMap,
126
- context: FieldChangeEncodingContext,
166
+ parentId: NodeId | undefined,
167
+ fieldToRoots: FieldRootMap,
168
+ context: ChangeEncodingContext,
169
+ encodeNode: NodeEncoder,
170
+ getInputRootId: ChangeAtomMappingQuery,
171
+ isAttachId: ChangeAtomIdRangeQuery,
172
+ isDetachId: ChangeAtomIdRangeQuery,
127
173
  fieldChangesetCodecs: FieldChangesetCodecs,
128
174
  ): EncodedFieldChangeMap {
129
175
  const encodedFields: EncodedFieldChangeMap = [];
@@ -133,7 +179,25 @@ export function encodeFieldChangesForJsonI(
133
179
  fieldChange.fieldKind,
134
180
  fieldChangesetCodecs,
135
181
  );
136
- const encodedChange = codec.json.encode(fieldChange.change, context);
182
+ const rootChanges = fieldToRoots.get([parentId?.revision, parentId?.localId, field]);
183
+
184
+ const fieldContext: FieldChangeEncodingContext = {
185
+ baseContext: context,
186
+ rootNodeChanges: rootChanges?.nodeChanges ?? newTupleBTree(),
187
+ rootRenames: rootChanges?.renames ?? newChangeAtomIdTransform(),
188
+
189
+ encodeNode,
190
+ getInputRootId,
191
+ isAttachId,
192
+ isDetachId,
193
+ decodeNode: () => fail(0xb1e /* Should not decode nodes during field encoding */),
194
+ decodeRootNodeChange: () => fail("Should not be called during encoding"),
195
+ decodeRootRename: () => fail("Should not be called during encoding"),
196
+ decodeMoveAndDetach: () => fail("Should not be called during encoding"),
197
+ generateId: () => fail("Should not be called during encoding"),
198
+ };
199
+
200
+ const encodedChange = codec.json.encode(fieldChange.change, fieldContext);
137
201
  if (compiledSchema !== undefined && !compiledSchema.check(encodedChange)) {
138
202
  fail(0xb1f /* Encoded change didn't pass schema validation. */);
139
203
  }
@@ -151,9 +215,24 @@ export function encodeFieldChangesForJsonI(
151
215
  return encodedFields;
152
216
  }
153
217
 
154
- export function encodeNodeChangesForJson(
218
+ type ChangeAtomMappingQuery = (
219
+ id: ChangeAtomId,
220
+ count: number,
221
+ ) => RangeQueryResult<ChangeAtomId | undefined>;
222
+
223
+ type ChangeAtomIdRangeQuery = (id: ChangeAtomId, count: number) => RangeQueryResult<boolean>;
224
+ type NodeEncoder = (nodeId: NodeId) => EncodedNodeChangeset;
225
+ type NodeDecoder = (encoded: EncodedNodeChangeset, fieldId: NodeLocation) => NodeId;
226
+
227
+ function encodeNodeChangesForJson(
155
228
  change: NodeChangeset,
156
- context: FieldChangeEncodingContext,
229
+ id: NodeId,
230
+ fieldToRoots: FieldRootMap,
231
+ context: ChangeEncodingContext,
232
+ encodeNode: NodeEncoder,
233
+ getInputRootId: ChangeAtomMappingQuery,
234
+ isAttachId: ChangeAtomIdRangeQuery,
235
+ isDetachId: ChangeAtomIdRangeQuery,
157
236
  fieldChangesetCodecs: FieldChangesetCodecs,
158
237
  ): EncodedNodeChangeset {
159
238
  const encodedChange: EncodedNodeChangeset = {};
@@ -161,9 +240,15 @@ export function encodeNodeChangesForJson(
161
240
  const { fieldChanges, nodeExistsConstraint } = change;
162
241
 
163
242
  if (fieldChanges !== undefined) {
164
- encodedChange.fieldChanges = encodeFieldChangesForJsonI(
243
+ encodedChange.fieldChanges = encodeFieldChangesForJson(
165
244
  fieldChanges,
245
+ id,
246
+ fieldToRoots,
166
247
  context,
248
+ encodeNode,
249
+ getInputRootId,
250
+ isAttachId,
251
+ isDetachId,
167
252
  fieldChangesetCodecs,
168
253
  );
169
254
  }
@@ -175,11 +260,25 @@ export function encodeNodeChangesForJson(
175
260
  return encodedChange;
176
261
  }
177
262
 
178
- export function decodeFieldChangesFromJson(
263
+ function getFieldChangesetCodec(
264
+ fieldKind: FieldKindIdentifier,
265
+ fieldChangesetCodecs: FieldChangesetCodecs,
266
+ ): {
267
+ compiledSchema?: SchemaValidationFunction<TAnySchema>;
268
+ codec: FieldCodec;
269
+ } {
270
+ const entry = fieldChangesetCodecs.get(fieldKind);
271
+ assert(entry !== undefined, 0x5ea /* Tried to encode unsupported fieldKind */);
272
+ return entry;
273
+ }
274
+
275
+ function decodeFieldChangesFromJson(
179
276
  encodedChange: EncodedFieldChangeMap,
180
277
  parentId: NodeId | undefined,
181
- decoded: ModularChangeset,
278
+ decodedCrossFieldKeys: CrossFieldKeyTable,
279
+ decodedRootTable: RootNodeTable,
182
280
  context: ChangeEncodingContext,
281
+ decodeNode: NodeDecoder,
183
282
  idAllocator: IdAllocator,
184
283
  fieldKinds: FieldKindConfiguration,
185
284
  fieldChangesetCodecs: FieldChangesetCodecs,
@@ -201,29 +300,39 @@ export function decodeFieldChangesFromJson(
201
300
 
202
301
  const fieldContext: FieldChangeEncodingContext = {
203
302
  baseContext: context,
303
+ rootNodeChanges: newTupleBTree(),
304
+ rootRenames: newChangeAtomIdTransform(),
204
305
 
205
306
  encodeNode: () => fail(0xb21 /* Should not encode nodes during field decoding */),
307
+ getInputRootId: () => fail("Should not query during decoding"),
308
+ isAttachId: () => fail("Should not query during decoding"),
309
+ isDetachId: () => fail("Should not query during decoding"),
206
310
 
207
311
  decodeNode: (encodedNode: EncodedNodeChangeset): NodeId => {
208
- const nodeId: NodeId = {
209
- revision: context.revision,
210
- localId: brand(idAllocator.allocate()),
211
- };
212
-
213
- const node = decodeNodeChangesetFromJson(
214
- encodedNode,
215
- nodeId,
216
- decoded,
217
- context,
218
- idAllocator,
219
- fieldKinds,
220
- fieldChangesetCodecs,
312
+ return decodeNode(encodedNode, { field: fieldId });
313
+ },
314
+
315
+ decodeRootNodeChange: (detachId, encodedNode): void => {
316
+ setInChangeAtomIdMap(
317
+ decodedRootTable.nodeChanges,
318
+ detachId,
319
+ decodeNode(encodedNode, { root: detachId }),
221
320
  );
321
+ decodedRootTable.detachLocations.set(detachId, 1, fieldId);
322
+ },
323
+
324
+ decodeRootRename: (oldId, newId, count): void => {
325
+ addNodeRename(decodedRootTable, oldId, newId, count, fieldId);
326
+ },
222
327
 
223
- decoded.nodeChanges.set([nodeId.revision, nodeId.localId], node);
224
- decoded.nodeToParent.set([nodeId.revision, nodeId.localId], fieldId);
225
- return nodeId;
328
+ decodeMoveAndDetach: (detachId, count): void => {
329
+ decodedRootTable.outputDetachLocations.set(detachId, count, fieldId);
226
330
  },
331
+
332
+ generateId: (): ChangeAtomId => ({
333
+ revision: context.revision,
334
+ localId: brand(idAllocator.allocate()),
335
+ }),
227
336
  };
228
337
 
229
338
  const fieldChangeset = codec.json.decode(field.change, fieldContext);
@@ -233,7 +342,7 @@ export function decodeFieldChangesFromJson(
233
342
  );
234
343
 
235
344
  for (const { key, count } of crossFieldKeys) {
236
- decoded.crossFieldKeys.set(key, count, fieldId);
345
+ decodedCrossFieldKeys.set(key, count, fieldId);
237
346
  }
238
347
 
239
348
  const fieldKey: FieldKey = brand<FieldKey>(field.fieldKey);
@@ -247,24 +356,28 @@ export function decodeFieldChangesFromJson(
247
356
  return decodedFields;
248
357
  }
249
358
 
250
- export function decodeNodeChangesetFromJson(
359
+ function decodeNodeChangesetFromJson(
251
360
  encodedChange: EncodedNodeChangeset,
252
361
  id: NodeId,
253
- decoded: ModularChangeset,
362
+ decodedCrossFieldKeys: CrossFieldKeyTable,
363
+ decodedRootTable: RootNodeTable,
254
364
  context: ChangeEncodingContext,
365
+ decodeNode: NodeDecoder,
255
366
  idAllocator: IdAllocator,
256
367
  fieldKinds: FieldKindConfiguration,
257
368
  fieldChangesetCodecs: FieldChangesetCodecs,
258
369
  ): NodeChangeset {
259
- const decodedChange: NodeChangeset = {};
370
+ const decodedChange: Mutable<NodeChangeset> = {};
260
371
  const { fieldChanges, nodeExistsConstraint } = encodedChange;
261
372
 
262
373
  if (fieldChanges !== undefined) {
263
374
  decodedChange.fieldChanges = decodeFieldChangesFromJson(
264
375
  fieldChanges,
265
376
  id,
266
- decoded,
377
+ decodedCrossFieldKeys,
378
+ decodedRootTable,
267
379
  context,
380
+ decodeNode,
268
381
  idAllocator,
269
382
  fieldKinds,
270
383
  fieldChangesetCodecs,
@@ -278,64 +391,7 @@ export function decodeNodeChangesetFromJson(
278
391
  return decodedChange;
279
392
  }
280
393
 
281
- export function encodeDetachedNodes(
282
- detachedNodes: ChangeAtomIdBTree<TreeChunk> | undefined,
283
- context: ChangeEncodingContext,
284
- revisionTagCodec: IJsonCodec<
285
- RevisionTag,
286
- EncodedRevisionTag,
287
- EncodedRevisionTag,
288
- ChangeEncodingContext
289
- >,
290
- fieldsCodec: FieldBatchCodec,
291
- chunkCompressionStrategy: TreeCompressionStrategy,
292
- ): EncodedBuilds | undefined {
293
- if (detachedNodes === undefined) {
294
- return undefined;
295
- }
296
-
297
- const treesToEncode: ITreeCursorSynchronous[] = [];
298
- const buildsArray: EncodedBuildsArray = [];
299
-
300
- let buildsForRevision:
301
- | [[ChangesetLocalId, number][], EncodedRevisionTag]
302
- | [[ChangesetLocalId, number][]]
303
- | undefined;
304
-
305
- for (const [[revision, id], chunk] of detachedNodes.entries()) {
306
- const encodedRevision = encodeRevisionOpt(revisionTagCodec, revision, context);
307
-
308
- if (buildsForRevision === undefined || buildsForRevision[1] !== encodedRevision) {
309
- if (buildsForRevision !== undefined) {
310
- buildsArray.push(buildsForRevision);
311
- }
312
-
313
- buildsForRevision = encodedRevision === undefined ? [[]] : [[], encodedRevision];
314
- }
315
-
316
- treesToEncode.push(chunk.cursor());
317
- const treeIndexInBatch = treesToEncode.length - 1;
318
- buildsForRevision?.[0].push([id, treeIndexInBatch]);
319
- }
320
-
321
- if (buildsForRevision !== undefined) {
322
- buildsArray.push(buildsForRevision);
323
- }
324
-
325
- return buildsArray.length === 0
326
- ? undefined
327
- : {
328
- builds: buildsArray,
329
- trees: fieldsCodec.encode(treesToEncode, {
330
- encodeType: chunkCompressionStrategy,
331
- schema: context.schema,
332
- originatorId: context.originatorId,
333
- idCompressor: context.idCompressor,
334
- }),
335
- };
336
- }
337
-
338
- export function decodeDetachedNodes(
394
+ function decodeDetachedNodes(
339
395
  encoded: EncodedBuilds | undefined,
340
396
  context: ChangeEncodingContext,
341
397
  revisionTagCodec: IJsonCodec<
@@ -365,6 +421,7 @@ export function decodeDetachedNodes(
365
421
  };
366
422
 
367
423
  const map: ModularChangeset["builds"] = newTupleBTree();
424
+ // eslint-disable-next-line unicorn/no-array-for-each -- Codec internals: minimizing changes to serialization logic
368
425
  encoded.builds.forEach((build) => {
369
426
  // EncodedRevisionTag cannot be an array so this ensures that we can isolate the tuple
370
427
  const revision =
@@ -383,45 +440,7 @@ export function decodeDetachedNodes(
383
440
  return map;
384
441
  }
385
442
 
386
- export function encodeRevisionInfos(
387
- revisions: readonly RevisionInfo[],
388
- context: ChangeEncodingContext,
389
- revisionTagCodec: IJsonCodec<
390
- RevisionTag,
391
- EncodedRevisionTag,
392
- EncodedRevisionTag,
393
- ChangeEncodingContext
394
- >,
395
- ): EncodedRevisionInfo[] | undefined {
396
- if (context.revision !== undefined) {
397
- assert(
398
- revisions.length === 1 &&
399
- revisions[0] !== undefined &&
400
- revisions[0].revision === context.revision &&
401
- revisions[0].rollbackOf === undefined,
402
- 0x964 /* A tagged change should only contain the tagged revision */,
403
- );
404
-
405
- return undefined;
406
- }
407
-
408
- const encodedRevisions = [];
409
- for (const revision of revisions) {
410
- const encodedRevision: Mutable<EncodedRevisionInfo> = {
411
- revision: revisionTagCodec.encode(revision.revision, context),
412
- };
413
-
414
- if (revision.rollbackOf !== undefined) {
415
- encodedRevision.rollbackOf = revisionTagCodec.encode(revision.rollbackOf, context);
416
- }
417
-
418
- encodedRevisions.push(encodedRevision);
419
- }
420
-
421
- return encodedRevisions;
422
- }
423
-
424
- export function decodeRevisionInfos(
443
+ function decodeRevisionInfos(
425
444
  revisions: readonly EncodedRevisionInfo[] | undefined,
426
445
  context: ChangeEncodingContext,
427
446
  revisionTagCodec: IJsonCodec<
@@ -451,16 +470,8 @@ export function decodeRevisionInfos(
451
470
  return decodedRevisions;
452
471
  }
453
472
 
454
- export function encodeChange(
455
- change: ModularChangeset,
456
- context: ChangeEncodingContext,
457
- fieldChangesetCodecs: Map<
458
- FieldKindIdentifier,
459
- {
460
- compiledSchema?: SchemaValidationFunction<TAnySchema>;
461
- codec: FieldCodec;
462
- }
463
- >,
473
+ export function makeModularChangeCodecV1(
474
+ fieldKinds: FieldKindConfiguration,
464
475
  revisionTagCodec: IJsonCodec<
465
476
  RevisionTag,
466
477
  EncodedRevisionTag,
@@ -468,51 +479,49 @@ export function encodeChange(
468
479
  ChangeEncodingContext
469
480
  >,
470
481
  fieldsCodec: FieldBatchCodec,
471
- chunkCompressionStrategy: TreeCompressionStrategy,
472
- ): EncodedModularChangesetV1 {
473
- // Destroys only exist in rollback changesets, which are never sent.
474
- assert(change.destroys === undefined, 0x899 /* Unexpected changeset with destroys */);
475
- return {
476
- maxId: change.maxId,
477
- revisions:
478
- change.revisions === undefined
479
- ? undefined
480
- : encodeRevisionInfos(change.revisions, context, revisionTagCodec),
481
- changes: encodeFieldChangesForJson(
482
- change.fieldChanges,
483
- context,
484
- change.nodeChanges,
485
- fieldChangesetCodecs,
486
- ),
487
- builds: encodeDetachedNodes(
488
- change.builds,
489
- context,
490
- revisionTagCodec,
491
- fieldsCodec,
492
- chunkCompressionStrategy,
493
- ),
494
- refreshers: encodeDetachedNodes(
495
- change.refreshers,
496
- context,
497
- revisionTagCodec,
498
- fieldsCodec,
499
- chunkCompressionStrategy,
500
- ),
501
- violations: change.constraintViolationCount,
482
+ codecOptions: ICodecOptions,
483
+ chunkCompressionStrategy: TreeCompressionStrategy = TreeCompressionStrategy.Compressed,
484
+ ): ModularChangeCodec {
485
+ const fieldChangesetCodecs = getFieldChangesetCodecs(
486
+ fieldKinds,
487
+ revisionTagCodec,
488
+ codecOptions,
489
+ );
490
+
491
+ const modularChangeCodec: ModularChangeCodec = {
492
+ encode: (change, context) =>
493
+ encodeChange(
494
+ change,
495
+ context,
496
+ fieldChangesetCodecs,
497
+ revisionTagCodec,
498
+ fieldsCodec,
499
+ chunkCompressionStrategy,
500
+ ),
501
+
502
+ decode: (encodedChange, context) =>
503
+ decodeChange(
504
+ encodedChange,
505
+ context,
506
+ fieldKinds,
507
+ fieldChangesetCodecs,
508
+ revisionTagCodec,
509
+ fieldsCodec,
510
+ chunkCompressionStrategy,
511
+ ),
502
512
  };
513
+
514
+ return withSchemaValidation(
515
+ EncodedModularChangesetV1,
516
+ modularChangeCodec,
517
+ codecOptions.jsonValidator,
518
+ );
503
519
  }
504
520
 
505
- export function decodeChange(
506
- encodedChange: EncodedModularChangesetV1,
521
+ export function encodeChange(
522
+ change: ModularChangeset,
507
523
  context: ChangeEncodingContext,
508
- fieldKinds: FieldKindConfiguration,
509
- fieldChangesetCodecs: Map<
510
- FieldKindIdentifier,
511
- {
512
- compiledSchema?: SchemaValidationFunction<TAnySchema>;
513
- codec: FieldCodec;
514
- }
515
- >,
524
+ fieldChangesetCodecs: FieldChangesetCodecs,
516
525
  revisionTagCodec: IJsonCodec<
517
526
  RevisionTag,
518
527
  EncodedRevisionTag,
@@ -521,112 +530,127 @@ export function decodeChange(
521
530
  >,
522
531
  fieldsCodec: FieldBatchCodec,
523
532
  chunkCompressionStrategy: TreeCompressionStrategy,
524
- ): Mutable<ModularChangeset> {
525
- const decoded: Mutable<ModularChangeset> = {
526
- fieldChanges: new Map(),
527
- nodeChanges: newTupleBTree(),
528
- nodeToParent: newTupleBTree(),
529
- nodeAliases: newTupleBTree(),
530
- crossFieldKeys: newCrossFieldKeyTable(),
533
+ ): EncodedModularChangesetV1 {
534
+ const fieldToRoots = getFieldToRoots(change.rootNodes, change.nodeAliases);
535
+ const isAttachId = (id: ChangeAtomId, count: number): RangeQueryResult<boolean> => {
536
+ const attachEntry = getFirstAttachField(change.crossFieldKeys, id, count);
537
+ return { ...attachEntry, value: attachEntry.value !== undefined };
531
538
  };
532
539
 
533
- decoded.fieldChanges = decodeFieldChangesFromJson(
534
- encodedChange.changes,
535
- undefined,
536
- decoded,
537
- context,
538
- idAllocatorFromMaxId(encodedChange.maxId),
539
- fieldKinds,
540
- fieldChangesetCodecs,
541
- );
540
+ const isDetachId = (
541
+ id: ChangeAtomId,
542
+ count: number,
543
+ ): RangeQueryEntry<ChangeAtomId, boolean> => {
544
+ const detachEntry = getFirstDetachField(change.crossFieldKeys, id, count);
545
+ const renameEntry = change.rootNodes.oldToNewId.getFirst(id, detachEntry.length);
546
+ const isDetach = (detachEntry.value ?? renameEntry.value) !== undefined;
547
+ return { start: id, value: isDetach, length: renameEntry.length };
548
+ };
542
549
 
543
- if (encodedChange.builds !== undefined) {
544
- decoded.builds = decodeDetachedNodes(
545
- encodedChange.builds,
550
+ const getInputRootId = (
551
+ id: ChangeAtomId,
552
+ count: number,
553
+ ): RangeQueryResult<ChangeAtomId | undefined> => {
554
+ return change.rootNodes.newToOldId.getFirst(id, count);
555
+ };
556
+
557
+ const encodeNode = (nodeId: NodeId): EncodedNodeChangeset => {
558
+ // TODO: Handle node aliasing.
559
+ const node = change.nodeChanges.get([nodeId.revision, nodeId.localId]);
560
+ assert(node !== undefined, 0x92e /* Unknown node ID */);
561
+ return encodeNodeChangesForJson(
562
+ node,
563
+ nodeId,
564
+ fieldToRoots,
565
+ context,
566
+ encodeNode,
567
+ getInputRootId,
568
+ isAttachId,
569
+ isDetachId,
570
+ fieldChangesetCodecs,
571
+ );
572
+ };
573
+
574
+ // Destroys only exist in rollback changesets, which are never sent.
575
+ assert(change.destroys === undefined, 0x899 /* Unexpected changeset with destroys */);
576
+ const encoded: EncodedModularChangesetV1 = {
577
+ maxId: change.maxId,
578
+ revisions:
579
+ change.revisions === undefined
580
+ ? undefined
581
+ : encodeRevisionInfos(change.revisions, context, revisionTagCodec),
582
+ changes: encodeFieldChangesForJson(
583
+ change.fieldChanges,
584
+ undefined,
585
+ fieldToRoots,
586
+ context,
587
+ encodeNode,
588
+ getInputRootId,
589
+ isAttachId,
590
+ isDetachId,
591
+ fieldChangesetCodecs,
592
+ ),
593
+ builds: encodeDetachedNodes(
594
+ change.builds,
546
595
  context,
547
596
  revisionTagCodec,
548
597
  fieldsCodec,
549
598
  chunkCompressionStrategy,
550
- );
551
- }
552
- if (encodedChange.refreshers !== undefined) {
553
- decoded.refreshers = decodeDetachedNodes(
554
- encodedChange.refreshers,
599
+ ),
600
+ refreshers: encodeDetachedNodes(
601
+ change.refreshers,
555
602
  context,
556
603
  revisionTagCodec,
557
604
  fieldsCodec,
558
605
  chunkCompressionStrategy,
559
- );
560
- }
561
-
562
- if (encodedChange.violations !== undefined) {
563
- decoded.constraintViolationCount = encodedChange.violations;
564
- }
606
+ ),
607
+ violations: change.constraintViolationCount,
608
+ };
565
609
 
566
- const decodedRevInfos = decodeRevisionInfos(
567
- encodedChange.revisions,
568
- context,
569
- revisionTagCodec,
570
- );
571
- if (decodedRevInfos !== undefined) {
572
- decoded.revisions = decodedRevInfos;
573
- }
574
- if (encodedChange.maxId !== undefined) {
575
- decoded.maxId = encodedChange.maxId;
576
- }
577
- return decoded;
610
+ return encoded;
578
611
  }
579
612
 
580
- export function getFieldChangesetCodecs(
581
- fieldKinds: FieldKindConfiguration,
613
+ function encodeRevisionInfos(
614
+ revisions: readonly RevisionInfo[],
615
+ context: ChangeEncodingContext,
582
616
  revisionTagCodec: IJsonCodec<
583
617
  RevisionTag,
584
618
  EncodedRevisionTag,
585
619
  EncodedRevisionTag,
586
620
  ChangeEncodingContext
587
621
  >,
588
- codecOptions: ICodecOptions,
589
- ): Map<
590
- FieldKindIdentifier,
591
- { compiledSchema?: SchemaValidationFunction<TAnySchema>; codec: FieldCodec }
592
- > {
593
- // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
594
- const getMapEntry = ({ kind, formatVersion }: FieldKindConfigurationEntry) => {
595
- const codec = kind.changeHandler.codecsFactory(revisionTagCodec).resolve(formatVersion);
596
- return {
597
- codec,
598
- compiledSchema: codec.json.encodedSchema
599
- ? extractJsonValidator(codecOptions.jsonValidator).compile(codec.json.encodedSchema)
600
- : undefined,
622
+ ): EncodedRevisionInfo[] | undefined {
623
+ if (context.revision !== undefined) {
624
+ assert(
625
+ revisions.length === 1 &&
626
+ revisions[0] !== undefined &&
627
+ revisions[0].revision === context.revision &&
628
+ revisions[0].rollbackOf === undefined,
629
+ 0x964 /* A tagged change should only contain the tagged revision */,
630
+ );
631
+
632
+ return undefined;
633
+ }
634
+
635
+ const encodedRevisions = [];
636
+ for (const revision of revisions) {
637
+ const encodedRevision: Mutable<EncodedRevisionInfo> = {
638
+ revision: revisionTagCodec.encode(revision.revision, context),
601
639
  };
602
- };
603
640
 
604
- /**
605
- * The codec version for the generic field kind.
606
- */
607
- const genericFieldKindFormatVersion = 1;
608
- const fieldChangesetCodecs: Map<
609
- FieldKindIdentifier,
610
- {
611
- compiledSchema?: SchemaValidationFunction<TAnySchema>;
612
- codec: FieldCodec;
641
+ if (revision.rollbackOf !== undefined) {
642
+ encodedRevision.rollbackOf = revisionTagCodec.encode(revision.rollbackOf, context);
613
643
  }
614
- > = new Map([
615
- [
616
- genericFieldKind.identifier,
617
- getMapEntry({ kind: genericFieldKind, formatVersion: genericFieldKindFormatVersion }),
618
- ],
619
- ]);
620
644
 
621
- fieldKinds.forEach((entry, identifier) => {
622
- fieldChangesetCodecs.set(identifier, getMapEntry(entry));
623
- });
645
+ encodedRevisions.push(encodedRevision);
646
+ }
624
647
 
625
- return fieldChangesetCodecs;
648
+ return encodedRevisions;
626
649
  }
627
650
 
628
- export function makeModularChangeCodecV1(
629
- fieldKinds: FieldKindConfiguration,
651
+ function encodeDetachedNodes(
652
+ detachedNodes: ChangeAtomIdBTree<TreeChunk> | undefined,
653
+ context: ChangeEncodingContext,
630
654
  revisionTagCodec: IJsonCodec<
631
655
  RevisionTag,
632
656
  EncodedRevisionTag,
@@ -634,42 +658,51 @@ export function makeModularChangeCodecV1(
634
658
  ChangeEncodingContext
635
659
  >,
636
660
  fieldsCodec: FieldBatchCodec,
637
- codecOptions: ICodecOptions,
638
- chunkCompressionStrategy: TreeCompressionStrategy = TreeCompressionStrategy.Compressed,
639
- ): ModularChangeCodec {
640
- const fieldChangesetCodecs = getFieldChangesetCodecs(
641
- fieldKinds,
642
- revisionTagCodec,
643
- codecOptions,
644
- );
661
+ chunkCompressionStrategy: TreeCompressionStrategy,
662
+ ): EncodedBuilds | undefined {
663
+ if (detachedNodes === undefined) {
664
+ return undefined;
665
+ }
645
666
 
646
- const modularChangeCodec: ModularChangeCodec = {
647
- encode: (change, context) =>
648
- encodeChange(
649
- change,
650
- context,
651
- fieldChangesetCodecs,
652
- revisionTagCodec,
653
- fieldsCodec,
654
- chunkCompressionStrategy,
655
- ),
656
- decode: (encodedChange, context) =>
657
- decodeChange(
658
- encodedChange,
659
- context,
660
- fieldKinds,
661
- fieldChangesetCodecs,
662
- revisionTagCodec,
663
- fieldsCodec,
664
- chunkCompressionStrategy,
665
- ),
666
- };
667
+ const treesToEncode: ITreeCursorSynchronous[] = [];
668
+ const buildsArray: EncodedBuildsArray = [];
667
669
 
668
- return withSchemaValidation(
669
- EncodedModularChangesetV1,
670
- modularChangeCodec,
671
- codecOptions.jsonValidator,
672
- );
670
+ let buildsForRevision:
671
+ | [[ChangesetLocalId, number][], EncodedRevisionTag]
672
+ | [[ChangesetLocalId, number][]]
673
+ | undefined;
674
+
675
+ for (const [[revision, id], chunk] of detachedNodes.entries()) {
676
+ const encodedRevision = encodeRevisionOpt(revisionTagCodec, revision, context);
677
+
678
+ if (buildsForRevision === undefined || buildsForRevision[1] !== encodedRevision) {
679
+ if (buildsForRevision !== undefined) {
680
+ buildsArray.push(buildsForRevision);
681
+ }
682
+
683
+ buildsForRevision = encodedRevision === undefined ? [[]] : [[], encodedRevision];
684
+ }
685
+
686
+ treesToEncode.push(chunk.cursor());
687
+ const treeIndexInBatch = treesToEncode.length - 1;
688
+ buildsForRevision?.[0].push([id, treeIndexInBatch]);
689
+ }
690
+
691
+ if (buildsForRevision !== undefined) {
692
+ buildsArray.push(buildsForRevision);
693
+ }
694
+
695
+ return buildsArray.length === 0
696
+ ? undefined
697
+ : {
698
+ builds: buildsArray,
699
+ trees: fieldsCodec.encode(treesToEncode, {
700
+ encodeType: chunkCompressionStrategy,
701
+ schema: context.schema,
702
+ originatorId: context.originatorId,
703
+ idCompressor: context.idCompressor,
704
+ }),
705
+ };
673
706
  }
674
707
 
675
708
  function getChangeHandler(
@@ -701,3 +734,179 @@ function encodeRevisionOpt(
701
734
 
702
735
  return revision === context.revision ? undefined : revisionCodec.encode(revision, context);
703
736
  }
737
+
738
+ function getFieldToRoots(
739
+ rootTable: RootNodeTable,
740
+ aliases: ChangeAtomIdBTree<NodeId>,
741
+ ): FieldRootMap {
742
+ const fieldToRoots: FieldRootMap = newTupleBTree();
743
+ for (const [[revision, localId], nodeId] of rootTable.nodeChanges.entries()) {
744
+ const detachId: ChangeAtomId = { revision, localId };
745
+ const fieldId = rootTable.detachLocations.getFirst(detachId, 1).value;
746
+ if (fieldId === undefined) {
747
+ fail("Untracked root change");
748
+ } else {
749
+ setInChangeAtomIdMap(
750
+ getOrAddInFieldRootMap(fieldToRoots, normalizeFieldId(fieldId, aliases)).nodeChanges,
751
+ detachId,
752
+ nodeId,
753
+ );
754
+ }
755
+ }
756
+
757
+ for (const entry of rootTable.oldToNewId.entries()) {
758
+ const fieldId = rootTable.detachLocations.getFirst(entry.start, 1).value;
759
+ if (fieldId === undefined) {
760
+ fail("Untracked root change");
761
+ } else {
762
+ getOrAddInFieldRootMap(fieldToRoots, normalizeFieldId(fieldId, aliases)).renames.set(
763
+ entry.start,
764
+ entry.length,
765
+ entry.value,
766
+ );
767
+ }
768
+ }
769
+
770
+ return fieldToRoots;
771
+ }
772
+
773
+ function getOrAddInFieldRootMap(map: FieldRootMap, fieldId: FieldId): FieldRootChanges {
774
+ const key: FieldIdKey = [fieldId.nodeId?.revision, fieldId.nodeId?.localId, fieldId.field];
775
+ const rootChanges = map.get(key);
776
+ if (rootChanges !== undefined) {
777
+ return rootChanges;
778
+ }
779
+
780
+ const newRootChanges: FieldRootChanges = {
781
+ nodeChanges: newTupleBTree(),
782
+ renames: newChangeAtomIdTransform(),
783
+ };
784
+ map.set(key, newRootChanges);
785
+ return newRootChanges;
786
+ }
787
+
788
+ export function decodeChange(
789
+ encodedChange: EncodedModularChangesetV1,
790
+ context: ChangeEncodingContext,
791
+ fieldKinds: FieldKindConfiguration,
792
+ fieldChangesetCodecs: Map<
793
+ FieldKindIdentifier,
794
+ {
795
+ compiledSchema?: SchemaValidationFunction<TAnySchema>;
796
+ codec: FieldCodec;
797
+ }
798
+ >,
799
+ revisionTagCodec: IJsonCodec<
800
+ RevisionTag,
801
+ EncodedRevisionTag,
802
+ EncodedRevisionTag,
803
+ ChangeEncodingContext
804
+ >,
805
+ fieldsCodec: FieldBatchCodec,
806
+ chunkCompressionStrategy: TreeCompressionStrategy,
807
+ ): Mutable<ModularChangeset> {
808
+ const idAllocator = idAllocatorFromMaxId(encodedChange.maxId);
809
+ const nodeChanges: ChangeAtomIdBTree<NodeChangeset> = newTupleBTree();
810
+ const nodeToParent: ChangeAtomIdBTree<NodeLocation> = newTupleBTree();
811
+ const crossFieldKeys: CrossFieldKeyTable = newCrossFieldRangeTable();
812
+ const rootNodes = newRootTable();
813
+
814
+ const decodeNode: NodeDecoder = (
815
+ encodedNode: EncodedNodeChangeset,
816
+ fieldId: NodeLocation,
817
+ ): NodeId => {
818
+ const nodeId: NodeId = {
819
+ revision: context.revision,
820
+ localId: brand(idAllocator.allocate()),
821
+ };
822
+
823
+ const node = decodeNodeChangesetFromJson(
824
+ encodedNode,
825
+ nodeId,
826
+ crossFieldKeys,
827
+ rootNodes,
828
+ context,
829
+ decodeNode,
830
+ idAllocator,
831
+ fieldKinds,
832
+ fieldChangesetCodecs,
833
+ );
834
+
835
+ nodeChanges.set([nodeId.revision, nodeId.localId], node);
836
+
837
+ if (fieldId !== undefined) {
838
+ nodeToParent.set([nodeId.revision, nodeId.localId], fieldId);
839
+ }
840
+
841
+ return nodeId;
842
+ };
843
+
844
+ const decoded: Mutable<ModularChangeset> = {
845
+ rebaseVersion: 1,
846
+ fieldChanges: decodeFieldChangesFromJson(
847
+ encodedChange.changes,
848
+ undefined,
849
+ crossFieldKeys,
850
+ rootNodes,
851
+ context,
852
+ decodeNode,
853
+ idAllocator,
854
+ fieldKinds,
855
+ fieldChangesetCodecs,
856
+ ),
857
+ nodeChanges,
858
+ rootNodes,
859
+ nodeToParent,
860
+ nodeAliases: newTupleBTree(),
861
+ crossFieldKeys,
862
+ };
863
+
864
+ if (encodedChange.builds !== undefined) {
865
+ decoded.builds = decodeDetachedNodes(
866
+ encodedChange.builds,
867
+ context,
868
+ revisionTagCodec,
869
+ fieldsCodec,
870
+ chunkCompressionStrategy,
871
+ );
872
+ }
873
+ if (encodedChange.refreshers !== undefined) {
874
+ decoded.refreshers = decodeDetachedNodes(
875
+ encodedChange.refreshers,
876
+ context,
877
+ revisionTagCodec,
878
+ fieldsCodec,
879
+ chunkCompressionStrategy,
880
+ );
881
+ }
882
+
883
+ if (encodedChange.violations !== undefined) {
884
+ decoded.constraintViolationCount = encodedChange.violations;
885
+ }
886
+
887
+ const decodedRevInfos = decodeRevisionInfos(
888
+ encodedChange.revisions,
889
+ context,
890
+ revisionTagCodec,
891
+ );
892
+ if (decodedRevInfos !== undefined) {
893
+ decoded.revisions = decodedRevInfos;
894
+ }
895
+ if (encodedChange.maxId !== undefined) {
896
+ decoded.maxId = encodedChange.maxId;
897
+ }
898
+
899
+ // XXX: This is an expensive assert which should be removed before merging.
900
+ validateChangeset(decoded, fieldKindsFromConfiguration(fieldKinds));
901
+ return decoded;
902
+ }
903
+
904
+ function fieldKindsFromConfiguration(
905
+ configuration: FieldKindConfiguration,
906
+ ): ReadonlyMap<FieldKindIdentifier, FlexFieldKind> {
907
+ const map = new Map();
908
+ for (const [id, entry] of configuration.entries()) {
909
+ map.set(id, entry.kind);
910
+ }
911
+ return map;
912
+ }