@fluidframework/tree 2.74.0 → 2.80.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (895) hide show
  1. package/.eslintrc.cjs +1 -16
  2. package/CHANGELOG.md +18 -0
  3. package/api-report/tree.alpha.api.md +20 -2
  4. package/dist/alpha.d.ts +4 -0
  5. package/dist/codec/codec.d.ts +31 -3
  6. package/dist/codec/codec.d.ts.map +1 -1
  7. package/dist/codec/codec.js +10 -0
  8. package/dist/codec/codec.js.map +1 -1
  9. package/dist/codec/index.d.ts +2 -2
  10. package/dist/codec/index.d.ts.map +1 -1
  11. package/dist/codec/index.js +2 -2
  12. package/dist/codec/index.js.map +1 -1
  13. package/dist/codec/versioned/codec.d.ts +80 -22
  14. package/dist/codec/versioned/codec.d.ts.map +1 -1
  15. package/dist/codec/versioned/codec.js +137 -15
  16. package/dist/codec/versioned/codec.js.map +1 -1
  17. package/dist/codec/versioned/index.d.ts +1 -1
  18. package/dist/codec/versioned/index.d.ts.map +1 -1
  19. package/dist/codec/versioned/index.js +2 -2
  20. package/dist/codec/versioned/index.js.map +1 -1
  21. package/dist/core/index.d.ts +2 -2
  22. package/dist/core/index.d.ts.map +1 -1
  23. package/dist/core/index.js +3 -4
  24. package/dist/core/index.js.map +1 -1
  25. package/dist/core/rebase/changeRebaser.d.ts +36 -2
  26. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  27. package/dist/core/rebase/changeRebaser.js.map +1 -1
  28. package/dist/core/rebase/index.d.ts +2 -2
  29. package/dist/core/rebase/index.d.ts.map +1 -1
  30. package/dist/core/rebase/index.js +1 -2
  31. package/dist/core/rebase/index.js.map +1 -1
  32. package/dist/core/rebase/types.d.ts +6 -2
  33. package/dist/core/rebase/types.d.ts.map +1 -1
  34. package/dist/core/rebase/types.js +1 -12
  35. package/dist/core/rebase/types.js.map +1 -1
  36. package/dist/core/rebase/utils.js +3 -3
  37. package/dist/core/rebase/utils.js.map +1 -1
  38. package/dist/core/schema-stored/schema.js +3 -3
  39. package/dist/core/schema-stored/schema.js.map +1 -1
  40. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  41. package/dist/core/tree/anchorSet.js +3 -4
  42. package/dist/core/tree/anchorSet.js.map +1 -1
  43. package/dist/core/tree/detachedFieldIndex.d.ts +1 -2
  44. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  45. package/dist/core/tree/detachedFieldIndex.js +12 -56
  46. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  47. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +18 -10
  48. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -1
  49. package/dist/core/tree/detachedFieldIndexCodecCommon.js +6 -6
  50. package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -1
  51. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts +2 -3
  52. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -1
  53. package/dist/core/tree/detachedFieldIndexCodecV1.js +4 -5
  54. package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -1
  55. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts +2 -3
  56. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -1
  57. package/dist/core/tree/detachedFieldIndexCodecV2.js +4 -6
  58. package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -1
  59. package/dist/core/tree/detachedFieldIndexCodecs.d.ts +5 -6
  60. package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -1
  61. package/dist/core/tree/detachedFieldIndexCodecs.js +11 -41
  62. package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  63. package/dist/core/tree/index.d.ts +1 -1
  64. package/dist/core/tree/index.d.ts.map +1 -1
  65. package/dist/core/tree/index.js +2 -2
  66. package/dist/core/tree/index.js.map +1 -1
  67. package/dist/core/tree/mapTree.js +1 -1
  68. package/dist/core/tree/mapTree.js.map +1 -1
  69. package/dist/core/tree/sparseTree.d.ts.map +1 -1
  70. package/dist/core/tree/sparseTree.js +1 -0
  71. package/dist/core/tree/sparseTree.js.map +1 -1
  72. package/dist/core/tree/treeTextFormat.d.ts.map +1 -1
  73. package/dist/core/tree/treeTextFormat.js +5 -9
  74. package/dist/core/tree/treeTextFormat.js.map +1 -1
  75. package/dist/feature-libraries/changeAtomIdBTree.d.ts +10 -0
  76. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -0
  77. package/dist/feature-libraries/changeAtomIdBTree.js +16 -0
  78. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -0
  79. package/dist/feature-libraries/chunked-forest/basicChunk.js +1 -1
  80. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  81. package/dist/feature-libraries/chunked-forest/chunkedForest.js +6 -6
  82. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  83. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  84. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +7 -4
  85. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  86. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  87. package/dist/feature-libraries/chunked-forest/codec/codecs.js +19 -11
  88. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  89. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +3 -3
  90. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  91. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +9 -5
  92. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  93. package/dist/feature-libraries/chunked-forest/uniformChunk.js +1 -1
  94. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  95. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +15 -5
  96. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  97. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +19 -14
  98. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  99. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -1
  100. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  101. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +11 -1
  102. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  103. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +2 -0
  104. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  105. package/dist/feature-libraries/default-schema/mappedEditBuilder.js +6 -0
  106. package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  107. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  108. package/dist/feature-libraries/flex-tree/lazyField.js +11 -13
  109. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  110. package/dist/feature-libraries/index.d.ts +3 -2
  111. package/dist/feature-libraries/index.d.ts.map +1 -1
  112. package/dist/feature-libraries/index.js +9 -7
  113. package/dist/feature-libraries/index.js.map +1 -1
  114. package/dist/feature-libraries/indexing/anchorTreeIndex.js +6 -6
  115. package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  116. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  117. package/dist/feature-libraries/mitigatedChangeFamily.js +10 -1
  118. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  119. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  120. package/dist/feature-libraries/modular-schema/comparison.js +12 -9
  121. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  122. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts +25 -0
  123. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts.map +1 -0
  124. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.js +59 -0
  125. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.js.map +1 -0
  126. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +3 -3
  127. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  128. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  129. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  130. package/dist/feature-libraries/modular-schema/genericFieldKind.js +4 -4
  131. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  132. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js +2 -2
  133. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  134. package/dist/feature-libraries/modular-schema/index.d.ts +4 -2
  135. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  136. package/dist/feature-libraries/modular-schema/index.js +11 -7
  137. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  138. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +49 -0
  139. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -0
  140. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +315 -0
  141. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -0
  142. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts +15 -0
  143. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -0
  144. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js +31 -0
  145. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -0
  146. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  147. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  148. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +25 -288
  149. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  150. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +14 -8
  151. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  152. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +225 -195
  153. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  154. package/dist/feature-libraries/modular-schema/{modularChangeFormat.d.ts → modularChangeFormatV1.d.ts} +5 -6
  155. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -0
  156. package/dist/feature-libraries/modular-schema/{modularChangeFormat.js → modularChangeFormatV1.js} +7 -7
  157. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -0
  158. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +112 -0
  159. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -0
  160. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js +21 -0
  161. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -0
  162. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +13 -3
  163. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  164. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  165. package/dist/feature-libraries/node-identifier/mockNodeIdentifierManager.js +1 -1
  166. package/dist/feature-libraries/node-identifier/mockNodeIdentifierManager.js.map +1 -1
  167. package/dist/feature-libraries/object-forest/objectForest.js +4 -4
  168. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  169. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  170. package/dist/feature-libraries/optional-field/optionalField.js +34 -39
  171. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  172. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  173. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +14 -2
  174. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  175. package/dist/feature-libraries/schema-index/codec.d.ts +7 -21
  176. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  177. package/dist/feature-libraries/schema-index/codec.js +28 -70
  178. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  179. package/dist/feature-libraries/schema-index/index.d.ts +2 -2
  180. package/dist/feature-libraries/schema-index/index.d.ts.map +1 -1
  181. package/dist/feature-libraries/schema-index/index.js +2 -5
  182. package/dist/feature-libraries/schema-index/index.js.map +1 -1
  183. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts +1 -9
  184. package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  185. package/dist/feature-libraries/schema-index/schemaSummarizer.js +1 -12
  186. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  187. package/dist/feature-libraries/schemaChecker.d.ts.map +1 -1
  188. package/dist/feature-libraries/schemaChecker.js +11 -6
  189. package/dist/feature-libraries/schemaChecker.js.map +1 -1
  190. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  191. package/dist/feature-libraries/sequence-field/compose.js +17 -13
  192. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  193. package/dist/feature-libraries/sequence-field/invert.js +5 -4
  194. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  195. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  196. package/dist/feature-libraries/sequence-field/moveEffectTable.js +15 -9
  197. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  198. package/dist/feature-libraries/sequence-field/rebase.js +26 -18
  199. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  200. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts +2 -2
  201. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  202. package/dist/feature-libraries/sequence-field/replaceRevisions.js +40 -35
  203. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  204. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  205. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +16 -8
  206. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  207. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  208. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +4 -2
  209. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  210. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  211. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +6 -3
  212. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  213. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  214. package/dist/feature-libraries/sequence-field/utils.js +46 -27
  215. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  216. package/dist/feature-libraries/treeCursorUtils.js +7 -7
  217. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  218. package/dist/feature-libraries/treeTextCursor.js +2 -2
  219. package/dist/feature-libraries/treeTextCursor.js.map +1 -1
  220. package/dist/feature-libraries/valueUtilities.d.ts.map +1 -1
  221. package/dist/feature-libraries/valueUtilities.js +16 -8
  222. package/dist/feature-libraries/valueUtilities.js.map +1 -1
  223. package/dist/index.d.ts +2 -2
  224. package/dist/index.d.ts.map +1 -1
  225. package/dist/index.js.map +1 -1
  226. package/dist/packageVersion.d.ts +1 -1
  227. package/dist/packageVersion.js +1 -1
  228. package/dist/packageVersion.js.map +1 -1
  229. package/dist/shared-tree/schematizingTreeView.d.ts +2 -3
  230. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  231. package/dist/shared-tree/schematizingTreeView.js +20 -9
  232. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  233. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  234. package/dist/shared-tree/sharedTree.js +61 -44
  235. package/dist/shared-tree/sharedTree.js.map +1 -1
  236. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  237. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  238. package/dist/shared-tree/sharedTreeChangeCodecs.js +9 -8
  239. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  240. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  241. package/dist/shared-tree/sharedTreeChangeEnricher.js +4 -2
  242. package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  243. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +3 -2
  244. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  245. package/dist/shared-tree/sharedTreeChangeFamily.js +19 -14
  246. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  247. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  248. package/dist/shared-tree/sharedTreeEditBuilder.js +1 -1
  249. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  250. package/dist/shared-tree/treeAlpha.d.ts +35 -29
  251. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  252. package/dist/shared-tree/treeAlpha.js +21 -23
  253. package/dist/shared-tree/treeAlpha.js.map +1 -1
  254. package/dist/shared-tree/treeCheckout.d.ts +2 -0
  255. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  256. package/dist/shared-tree/treeCheckout.js +31 -18
  257. package/dist/shared-tree/treeCheckout.js.map +1 -1
  258. package/dist/shared-tree-core/branch.d.ts +3 -1
  259. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  260. package/dist/shared-tree-core/branch.js +5 -3
  261. package/dist/shared-tree-core/branch.js.map +1 -1
  262. package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  263. package/dist/shared-tree-core/branchCommitEnricher.js +1 -1
  264. package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
  265. package/dist/shared-tree-core/editManager.js +1 -1
  266. package/dist/shared-tree-core/editManager.js.map +1 -1
  267. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  268. package/dist/shared-tree-core/editManagerCodecs.js +9 -4
  269. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  270. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  271. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  272. package/dist/shared-tree-core/editManagerFormatCommons.js +6 -0
  273. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  274. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  275. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  276. package/dist/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  277. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  278. package/dist/shared-tree-core/editManagerSummarizer.js +3 -3
  279. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  280. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  281. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  282. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  283. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  284. package/dist/shared-tree-core/messageCodecVSharedBranches.js +2 -1
  285. package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  286. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  287. package/dist/shared-tree-core/messageCodecs.js +8 -4
  288. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  289. package/dist/shared-tree-core/messageFormat.d.ts +1 -0
  290. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  291. package/dist/shared-tree-core/messageFormat.js +6 -0
  292. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  293. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +3 -2
  294. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  295. package/dist/shared-tree-core/messageFormatV1ToV4.js +8 -1
  296. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  297. package/dist/shared-tree-core/sequenceIdUtils.d.ts.map +1 -1
  298. package/dist/shared-tree-core/sequenceIdUtils.js +4 -4
  299. package/dist/shared-tree-core/sequenceIdUtils.js.map +1 -1
  300. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  301. package/dist/shared-tree-core/sharedTreeCore.js +12 -8
  302. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  303. package/dist/shared-tree-core/transaction.d.ts +25 -8
  304. package/dist/shared-tree-core/transaction.d.ts.map +1 -1
  305. package/dist/shared-tree-core/transaction.js +65 -30
  306. package/dist/shared-tree-core/transaction.js.map +1 -1
  307. package/dist/shared-tree-core/transactionEnricher.d.ts +2 -2
  308. package/dist/shared-tree-core/transactionEnricher.d.ts.map +1 -1
  309. package/dist/shared-tree-core/transactionEnricher.js +3 -3
  310. package/dist/shared-tree-core/transactionEnricher.js.map +1 -1
  311. package/dist/simple-tree/api/configuration.js +1 -1
  312. package/dist/simple-tree/api/configuration.js.map +1 -1
  313. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  314. package/dist/simple-tree/api/customTree.js +13 -9
  315. package/dist/simple-tree/api/customTree.js.map +1 -1
  316. package/dist/simple-tree/api/discrepancies.d.ts.map +1 -1
  317. package/dist/simple-tree/api/discrepancies.js +21 -17
  318. package/dist/simple-tree/api/discrepancies.js.map +1 -1
  319. package/dist/simple-tree/api/index.d.ts +1 -1
  320. package/dist/simple-tree/api/index.d.ts.map +1 -1
  321. package/dist/simple-tree/api/index.js.map +1 -1
  322. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  323. package/dist/simple-tree/api/schemaFactory.js +12 -8
  324. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  325. package/dist/simple-tree/api/schemaFromSimple.js +18 -9
  326. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  327. package/dist/simple-tree/api/simpleSchemaCodec.js +10 -5
  328. package/dist/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  329. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  330. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +15 -11
  331. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  332. package/dist/simple-tree/api/simpleTreeIndex.js +10 -10
  333. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  334. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  335. package/dist/simple-tree/api/storedSchema.js +2 -3
  336. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  337. package/dist/simple-tree/api/transactionTypes.d.ts +17 -4
  338. package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -1
  339. package/dist/simple-tree/api/transactionTypes.js.map +1 -1
  340. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  341. package/dist/simple-tree/api/treeNodeApi.js +21 -13
  342. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  343. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  344. package/dist/simple-tree/api/verboseTree.js +14 -9
  345. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  346. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  347. package/dist/simple-tree/core/treeNodeKernel.js +6 -3
  348. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  349. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  350. package/dist/simple-tree/core/unhydratedFlexTree.js +20 -15
  351. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  352. package/dist/simple-tree/getTreeNodeForField.d.ts.map +1 -1
  353. package/dist/simple-tree/getTreeNodeForField.js +2 -1
  354. package/dist/simple-tree/getTreeNodeForField.js.map +1 -1
  355. package/dist/simple-tree/index.d.ts +1 -1
  356. package/dist/simple-tree/index.d.ts.map +1 -1
  357. package/dist/simple-tree/index.js.map +1 -1
  358. package/dist/simple-tree/leafNodeSchema.js +9 -6
  359. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  360. package/dist/simple-tree/node-kinds/array/arrayNode.js +15 -15
  361. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  362. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  363. package/dist/simple-tree/node-kinds/object/objectNode.js +4 -5
  364. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  365. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  366. package/dist/simple-tree/node-kinds/record/recordNode.js +2 -3
  367. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  368. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  369. package/dist/simple-tree/toStoredSchema.js +9 -5
  370. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  371. package/dist/treeFactory.js +7 -3
  372. package/dist/treeFactory.js.map +1 -1
  373. package/dist/util/bTreeUtils.js +1 -1
  374. package/dist/util/bTreeUtils.js.map +1 -1
  375. package/dist/util/breakable.js +7 -9
  376. package/dist/util/breakable.js.map +1 -1
  377. package/dist/util/idAllocator.d.ts.map +1 -1
  378. package/dist/util/idAllocator.js +1 -2
  379. package/dist/util/idAllocator.js.map +1 -1
  380. package/dist/util/nestedMap.d.ts.map +1 -1
  381. package/dist/util/nestedMap.js +1 -1
  382. package/dist/util/nestedMap.js.map +1 -1
  383. package/dist/util/utils.d.ts.map +1 -1
  384. package/dist/util/utils.js +16 -15
  385. package/dist/util/utils.js.map +1 -1
  386. package/eslint.config.mts +1 -16
  387. package/lib/alpha.d.ts +4 -0
  388. package/lib/codec/codec.d.ts +31 -3
  389. package/lib/codec/codec.d.ts.map +1 -1
  390. package/lib/codec/codec.js +10 -0
  391. package/lib/codec/codec.js.map +1 -1
  392. package/lib/codec/index.d.ts +2 -2
  393. package/lib/codec/index.d.ts.map +1 -1
  394. package/lib/codec/index.js +1 -1
  395. package/lib/codec/index.js.map +1 -1
  396. package/lib/codec/versioned/codec.d.ts +80 -22
  397. package/lib/codec/versioned/codec.d.ts.map +1 -1
  398. package/lib/codec/versioned/codec.js +138 -15
  399. package/lib/codec/versioned/codec.js.map +1 -1
  400. package/lib/codec/versioned/index.d.ts +1 -1
  401. package/lib/codec/versioned/index.d.ts.map +1 -1
  402. package/lib/codec/versioned/index.js +1 -1
  403. package/lib/codec/versioned/index.js.map +1 -1
  404. package/lib/core/index.d.ts +2 -2
  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 +36 -2
  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 +2 -2
  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 +6 -2
  416. package/lib/core/rebase/types.d.ts.map +1 -1
  417. package/lib/core/rebase/types.js +0 -10
  418. package/lib/core/rebase/types.js.map +1 -1
  419. package/lib/core/rebase/utils.js +3 -3
  420. package/lib/core/rebase/utils.js.map +1 -1
  421. package/lib/core/schema-stored/schema.js +3 -3
  422. package/lib/core/schema-stored/schema.js.map +1 -1
  423. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  424. package/lib/core/tree/anchorSet.js +3 -4
  425. package/lib/core/tree/anchorSet.js.map +1 -1
  426. package/lib/core/tree/detachedFieldIndex.d.ts +1 -2
  427. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  428. package/lib/core/tree/detachedFieldIndex.js +13 -57
  429. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  430. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +18 -10
  431. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -1
  432. package/lib/core/tree/detachedFieldIndexCodecCommon.js +4 -4
  433. package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -1
  434. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts +2 -3
  435. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -1
  436. package/lib/core/tree/detachedFieldIndexCodecV1.js +4 -5
  437. package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -1
  438. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts +2 -3
  439. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -1
  440. package/lib/core/tree/detachedFieldIndexCodecV2.js +4 -6
  441. package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -1
  442. package/lib/core/tree/detachedFieldIndexCodecs.d.ts +5 -6
  443. package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -1
  444. package/lib/core/tree/detachedFieldIndexCodecs.js +12 -39
  445. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  446. package/lib/core/tree/index.d.ts +1 -1
  447. package/lib/core/tree/index.d.ts.map +1 -1
  448. package/lib/core/tree/index.js +1 -1
  449. package/lib/core/tree/index.js.map +1 -1
  450. package/lib/core/tree/mapTree.js +1 -1
  451. package/lib/core/tree/mapTree.js.map +1 -1
  452. package/lib/core/tree/sparseTree.d.ts.map +1 -1
  453. package/lib/core/tree/sparseTree.js +1 -0
  454. package/lib/core/tree/sparseTree.js.map +1 -1
  455. package/lib/core/tree/treeTextFormat.d.ts.map +1 -1
  456. package/lib/core/tree/treeTextFormat.js +5 -9
  457. package/lib/core/tree/treeTextFormat.js.map +1 -1
  458. package/lib/feature-libraries/changeAtomIdBTree.d.ts +10 -0
  459. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -0
  460. package/lib/feature-libraries/changeAtomIdBTree.js +11 -0
  461. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -0
  462. package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -1
  463. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  464. package/lib/feature-libraries/chunked-forest/chunkedForest.js +6 -6
  465. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  466. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  467. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +7 -4
  468. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  469. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  470. package/lib/feature-libraries/chunked-forest/codec/codecs.js +19 -11
  471. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  472. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +3 -3
  473. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  474. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +9 -5
  475. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  476. package/lib/feature-libraries/chunked-forest/uniformChunk.js +1 -1
  477. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  478. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +15 -5
  479. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  480. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +19 -14
  481. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  482. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -1
  483. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  484. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +11 -1
  485. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  486. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +2 -0
  487. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  488. package/lib/feature-libraries/default-schema/mappedEditBuilder.js +6 -0
  489. package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  490. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  491. package/lib/feature-libraries/flex-tree/lazyField.js +11 -13
  492. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  493. package/lib/feature-libraries/index.d.ts +3 -2
  494. package/lib/feature-libraries/index.d.ts.map +1 -1
  495. package/lib/feature-libraries/index.js +3 -2
  496. package/lib/feature-libraries/index.js.map +1 -1
  497. package/lib/feature-libraries/indexing/anchorTreeIndex.js +6 -6
  498. package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  499. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  500. package/lib/feature-libraries/mitigatedChangeFamily.js +10 -1
  501. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  502. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  503. package/lib/feature-libraries/modular-schema/comparison.js +12 -9
  504. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  505. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts +25 -0
  506. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts.map +1 -0
  507. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.js +55 -0
  508. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.js.map +1 -0
  509. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +3 -3
  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 +5 -5
  514. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  515. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js +1 -1
  516. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  517. package/lib/feature-libraries/modular-schema/index.d.ts +4 -2
  518. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  519. package/lib/feature-libraries/modular-schema/index.js +3 -1
  520. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  521. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +49 -0
  522. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -0
  523. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +298 -0
  524. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -0
  525. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts +15 -0
  526. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -0
  527. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js +27 -0
  528. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -0
  529. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
  530. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  531. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +27 -290
  532. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  533. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +14 -8
  534. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  535. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +118 -88
  536. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  537. package/lib/feature-libraries/modular-schema/{modularChangeFormat.d.ts → modularChangeFormatV1.d.ts} +5 -6
  538. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -0
  539. package/lib/feature-libraries/modular-schema/{modularChangeFormat.js → modularChangeFormatV1.js} +4 -4
  540. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -0
  541. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +112 -0
  542. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -0
  543. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js +18 -0
  544. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -0
  545. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +13 -3
  546. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  547. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  548. package/lib/feature-libraries/node-identifier/mockNodeIdentifierManager.js +1 -1
  549. package/lib/feature-libraries/node-identifier/mockNodeIdentifierManager.js.map +1 -1
  550. package/lib/feature-libraries/object-forest/objectForest.js +4 -4
  551. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  552. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  553. package/lib/feature-libraries/optional-field/optionalField.js +35 -40
  554. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  555. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  556. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +15 -3
  557. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  558. package/lib/feature-libraries/schema-index/codec.d.ts +7 -21
  559. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  560. package/lib/feature-libraries/schema-index/codec.js +30 -68
  561. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  562. package/lib/feature-libraries/schema-index/index.d.ts +2 -2
  563. package/lib/feature-libraries/schema-index/index.d.ts.map +1 -1
  564. package/lib/feature-libraries/schema-index/index.js +2 -2
  565. package/lib/feature-libraries/schema-index/index.js.map +1 -1
  566. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts +1 -9
  567. package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
  568. package/lib/feature-libraries/schema-index/schemaSummarizer.js +0 -10
  569. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  570. package/lib/feature-libraries/schemaChecker.d.ts.map +1 -1
  571. package/lib/feature-libraries/schemaChecker.js +11 -6
  572. package/lib/feature-libraries/schemaChecker.js.map +1 -1
  573. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  574. package/lib/feature-libraries/sequence-field/compose.js +17 -13
  575. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  576. package/lib/feature-libraries/sequence-field/invert.js +5 -4
  577. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  578. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  579. package/lib/feature-libraries/sequence-field/moveEffectTable.js +15 -9
  580. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  581. package/lib/feature-libraries/sequence-field/rebase.js +26 -18
  582. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  583. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts +2 -2
  584. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  585. package/lib/feature-libraries/sequence-field/replaceRevisions.js +41 -36
  586. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  587. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  588. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +16 -8
  589. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  590. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  591. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +4 -2
  592. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  593. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  594. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +6 -3
  595. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  596. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  597. package/lib/feature-libraries/sequence-field/utils.js +46 -27
  598. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  599. package/lib/feature-libraries/treeCursorUtils.js +7 -7
  600. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  601. package/lib/feature-libraries/treeTextCursor.js +2 -2
  602. package/lib/feature-libraries/treeTextCursor.js.map +1 -1
  603. package/lib/feature-libraries/valueUtilities.d.ts.map +1 -1
  604. package/lib/feature-libraries/valueUtilities.js +16 -8
  605. package/lib/feature-libraries/valueUtilities.js.map +1 -1
  606. package/lib/index.d.ts +2 -2
  607. package/lib/index.d.ts.map +1 -1
  608. package/lib/index.js.map +1 -1
  609. package/lib/packageVersion.d.ts +1 -1
  610. package/lib/packageVersion.js +1 -1
  611. package/lib/packageVersion.js.map +1 -1
  612. package/lib/shared-tree/schematizingTreeView.d.ts +2 -3
  613. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  614. package/lib/shared-tree/schematizingTreeView.js +20 -9
  615. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  616. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  617. package/lib/shared-tree/sharedTree.js +30 -13
  618. package/lib/shared-tree/sharedTree.js.map +1 -1
  619. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  620. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  621. package/lib/shared-tree/sharedTreeChangeCodecs.js +9 -8
  622. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  623. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  624. package/lib/shared-tree/sharedTreeChangeEnricher.js +4 -2
  625. package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  626. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +3 -2
  627. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  628. package/lib/shared-tree/sharedTreeChangeFamily.js +19 -14
  629. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  630. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  631. package/lib/shared-tree/sharedTreeEditBuilder.js +1 -1
  632. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  633. package/lib/shared-tree/treeAlpha.d.ts +35 -29
  634. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  635. package/lib/shared-tree/treeAlpha.js +21 -23
  636. package/lib/shared-tree/treeAlpha.js.map +1 -1
  637. package/lib/shared-tree/treeCheckout.d.ts +2 -0
  638. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  639. package/lib/shared-tree/treeCheckout.js +32 -19
  640. package/lib/shared-tree/treeCheckout.js.map +1 -1
  641. package/lib/shared-tree-core/branch.d.ts +3 -1
  642. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  643. package/lib/shared-tree-core/branch.js +5 -3
  644. package/lib/shared-tree-core/branch.js.map +1 -1
  645. package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  646. package/lib/shared-tree-core/branchCommitEnricher.js +2 -2
  647. package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
  648. package/lib/shared-tree-core/editManager.js +1 -1
  649. package/lib/shared-tree-core/editManager.js.map +1 -1
  650. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  651. package/lib/shared-tree-core/editManagerCodecs.js +9 -4
  652. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  653. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +1 -0
  654. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  655. package/lib/shared-tree-core/editManagerFormatCommons.js +6 -0
  656. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  657. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  658. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  659. package/lib/shared-tree-core/editManagerFormatV1toV4.js +1 -0
  660. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  661. package/lib/shared-tree-core/editManagerSummarizer.js +3 -3
  662. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  663. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  664. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  665. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  666. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  667. package/lib/shared-tree-core/messageCodecVSharedBranches.js +2 -1
  668. package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  669. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  670. package/lib/shared-tree-core/messageCodecs.js +8 -4
  671. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  672. package/lib/shared-tree-core/messageFormat.d.ts +1 -0
  673. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  674. package/lib/shared-tree-core/messageFormat.js +6 -0
  675. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  676. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +3 -2
  677. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  678. package/lib/shared-tree-core/messageFormatV1ToV4.js +8 -1
  679. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  680. package/lib/shared-tree-core/sequenceIdUtils.d.ts.map +1 -1
  681. package/lib/shared-tree-core/sequenceIdUtils.js +4 -4
  682. package/lib/shared-tree-core/sequenceIdUtils.js.map +1 -1
  683. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  684. package/lib/shared-tree-core/sharedTreeCore.js +12 -8
  685. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  686. package/lib/shared-tree-core/transaction.d.ts +25 -8
  687. package/lib/shared-tree-core/transaction.d.ts.map +1 -1
  688. package/lib/shared-tree-core/transaction.js +67 -32
  689. package/lib/shared-tree-core/transaction.js.map +1 -1
  690. package/lib/shared-tree-core/transactionEnricher.d.ts +2 -2
  691. package/lib/shared-tree-core/transactionEnricher.d.ts.map +1 -1
  692. package/lib/shared-tree-core/transactionEnricher.js +3 -3
  693. package/lib/shared-tree-core/transactionEnricher.js.map +1 -1
  694. package/lib/simple-tree/api/configuration.js +1 -1
  695. package/lib/simple-tree/api/configuration.js.map +1 -1
  696. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  697. package/lib/simple-tree/api/customTree.js +13 -9
  698. package/lib/simple-tree/api/customTree.js.map +1 -1
  699. package/lib/simple-tree/api/discrepancies.d.ts.map +1 -1
  700. package/lib/simple-tree/api/discrepancies.js +21 -17
  701. package/lib/simple-tree/api/discrepancies.js.map +1 -1
  702. package/lib/simple-tree/api/index.d.ts +1 -1
  703. package/lib/simple-tree/api/index.d.ts.map +1 -1
  704. package/lib/simple-tree/api/index.js.map +1 -1
  705. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  706. package/lib/simple-tree/api/schemaFactory.js +12 -8
  707. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  708. package/lib/simple-tree/api/schemaFromSimple.js +18 -9
  709. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  710. package/lib/simple-tree/api/simpleSchemaCodec.js +10 -5
  711. package/lib/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  712. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  713. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +15 -11
  714. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  715. package/lib/simple-tree/api/simpleTreeIndex.js +10 -10
  716. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  717. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  718. package/lib/simple-tree/api/storedSchema.js +4 -7
  719. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  720. package/lib/simple-tree/api/transactionTypes.d.ts +17 -4
  721. package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -1
  722. package/lib/simple-tree/api/transactionTypes.js.map +1 -1
  723. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  724. package/lib/simple-tree/api/treeNodeApi.js +21 -13
  725. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  726. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  727. package/lib/simple-tree/api/verboseTree.js +14 -9
  728. package/lib/simple-tree/api/verboseTree.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 -3
  731. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  732. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  733. package/lib/simple-tree/core/unhydratedFlexTree.js +20 -15
  734. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  735. package/lib/simple-tree/getTreeNodeForField.d.ts.map +1 -1
  736. package/lib/simple-tree/getTreeNodeForField.js +2 -1
  737. package/lib/simple-tree/getTreeNodeForField.js.map +1 -1
  738. package/lib/simple-tree/index.d.ts +1 -1
  739. package/lib/simple-tree/index.d.ts.map +1 -1
  740. package/lib/simple-tree/index.js.map +1 -1
  741. package/lib/simple-tree/leafNodeSchema.js +9 -6
  742. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  743. package/lib/simple-tree/node-kinds/array/arrayNode.js +15 -15
  744. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  745. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  746. package/lib/simple-tree/node-kinds/object/objectNode.js +4 -5
  747. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  748. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  749. package/lib/simple-tree/node-kinds/record/recordNode.js +2 -3
  750. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  751. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  752. package/lib/simple-tree/toStoredSchema.js +9 -5
  753. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  754. package/lib/treeFactory.js +7 -3
  755. package/lib/treeFactory.js.map +1 -1
  756. package/lib/util/bTreeUtils.js +1 -1
  757. package/lib/util/bTreeUtils.js.map +1 -1
  758. package/lib/util/breakable.js +7 -9
  759. package/lib/util/breakable.js.map +1 -1
  760. package/lib/util/idAllocator.d.ts.map +1 -1
  761. package/lib/util/idAllocator.js +1 -2
  762. package/lib/util/idAllocator.js.map +1 -1
  763. package/lib/util/nestedMap.d.ts.map +1 -1
  764. package/lib/util/nestedMap.js +1 -1
  765. package/lib/util/nestedMap.js.map +1 -1
  766. package/lib/util/utils.d.ts.map +1 -1
  767. package/lib/util/utils.js +16 -15
  768. package/lib/util/utils.js.map +1 -1
  769. package/package.json +32 -32
  770. package/src/codec/codec.ts +48 -8
  771. package/src/codec/index.ts +4 -1
  772. package/src/codec/versioned/codec.ts +340 -22
  773. package/src/codec/versioned/index.ts +3 -1
  774. package/src/core/index.ts +2 -2
  775. package/src/core/rebase/changeRebaser.ts +40 -6
  776. package/src/core/rebase/index.ts +1 -1
  777. package/src/core/rebase/types.ts +6 -18
  778. package/src/core/rebase/utils.ts +3 -3
  779. package/src/core/schema-stored/schema.ts +3 -3
  780. package/src/core/tree/anchorSet.ts +3 -4
  781. package/src/core/tree/detachedFieldIndex.ts +13 -74
  782. package/src/core/tree/detachedFieldIndexCodecCommon.ts +4 -8
  783. package/src/core/tree/detachedFieldIndexCodecV1.ts +3 -7
  784. package/src/core/tree/detachedFieldIndexCodecV2.ts +5 -9
  785. package/src/core/tree/detachedFieldIndexCodecs.ts +21 -64
  786. package/src/core/tree/index.ts +1 -1
  787. package/src/core/tree/mapTree.ts +1 -1
  788. package/src/core/tree/sparseTree.ts +1 -0
  789. package/src/core/tree/treeTextFormat.ts +5 -9
  790. package/src/feature-libraries/changeAtomIdBTree.ts +24 -0
  791. package/src/feature-libraries/chunked-forest/basicChunk.ts +1 -1
  792. package/src/feature-libraries/chunked-forest/chunkedForest.ts +5 -5
  793. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +7 -4
  794. package/src/feature-libraries/chunked-forest/codec/codecs.ts +19 -11
  795. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +3 -3
  796. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +9 -5
  797. package/src/feature-libraries/chunked-forest/uniformChunk.ts +1 -1
  798. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +48 -17
  799. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +12 -2
  800. package/src/feature-libraries/default-schema/mappedEditBuilder.ts +6 -0
  801. package/src/feature-libraries/flex-tree/lazyField.ts +13 -14
  802. package/src/feature-libraries/index.ts +10 -5
  803. package/src/feature-libraries/indexing/anchorTreeIndex.ts +5 -5
  804. package/src/feature-libraries/mitigatedChangeFamily.ts +11 -6
  805. package/src/feature-libraries/modular-schema/comparison.ts +12 -9
  806. package/src/feature-libraries/modular-schema/defaultRevisionReplacer.ts +70 -0
  807. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +3 -6
  808. package/src/feature-libraries/modular-schema/genericFieldKind.ts +5 -7
  809. package/src/feature-libraries/modular-schema/genericFieldKindCodecs.ts +1 -1
  810. package/src/feature-libraries/modular-schema/index.ts +5 -2
  811. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +703 -0
  812. package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +89 -0
  813. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +39 -523
  814. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +159 -125
  815. package/src/feature-libraries/modular-schema/{modularChangeFormat.ts → modularChangeFormatV1.ts} +4 -4
  816. package/src/feature-libraries/modular-schema/modularChangeFormatV2.ts +34 -0
  817. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +13 -4
  818. package/src/feature-libraries/node-identifier/mockNodeIdentifierManager.ts +1 -1
  819. package/src/feature-libraries/object-forest/objectForest.ts +4 -4
  820. package/src/feature-libraries/optional-field/optionalField.ts +34 -46
  821. package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +18 -3
  822. package/src/feature-libraries/schema-index/codec.ts +30 -90
  823. package/src/feature-libraries/schema-index/index.ts +2 -4
  824. package/src/feature-libraries/schema-index/schemaSummarizer.ts +0 -17
  825. package/src/feature-libraries/schemaChecker.ts +11 -6
  826. package/src/feature-libraries/sequence-field/compose.ts +17 -13
  827. package/src/feature-libraries/sequence-field/invert.ts +5 -4
  828. package/src/feature-libraries/sequence-field/moveEffectTable.ts +15 -9
  829. package/src/feature-libraries/sequence-field/rebase.ts +26 -18
  830. package/src/feature-libraries/sequence-field/replaceRevisions.ts +52 -56
  831. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +16 -8
  832. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +4 -2
  833. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +6 -3
  834. package/src/feature-libraries/sequence-field/utils.ts +46 -27
  835. package/src/feature-libraries/treeCursorUtils.ts +7 -7
  836. package/src/feature-libraries/treeTextCursor.ts +2 -2
  837. package/src/feature-libraries/valueUtilities.ts +16 -8
  838. package/src/index.ts +4 -0
  839. package/src/packageVersion.ts +1 -1
  840. package/src/shared-tree/schematizingTreeView.ts +23 -13
  841. package/src/shared-tree/sharedTree.ts +30 -14
  842. package/src/shared-tree/sharedTreeChangeCodecs.ts +10 -9
  843. package/src/shared-tree/sharedTreeChangeEnricher.ts +4 -2
  844. package/src/shared-tree/sharedTreeChangeFamily.ts +29 -19
  845. package/src/shared-tree/sharedTreeEditBuilder.ts +9 -5
  846. package/src/shared-tree/treeAlpha.ts +60 -51
  847. package/src/shared-tree/treeCheckout.ts +66 -50
  848. package/src/shared-tree-core/branch.ts +8 -3
  849. package/src/shared-tree-core/branchCommitEnricher.ts +3 -8
  850. package/src/shared-tree-core/editManager.ts +1 -1
  851. package/src/shared-tree-core/editManagerCodecs.ts +9 -4
  852. package/src/shared-tree-core/editManagerFormatCommons.ts +6 -0
  853. package/src/shared-tree-core/editManagerFormatV1toV4.ts +3 -1
  854. package/src/shared-tree-core/editManagerSummarizer.ts +3 -3
  855. package/src/shared-tree-core/messageCodecV1ToV4.ts +2 -1
  856. package/src/shared-tree-core/messageCodecVSharedBranches.ts +2 -1
  857. package/src/shared-tree-core/messageCodecs.ts +8 -4
  858. package/src/shared-tree-core/messageFormat.ts +6 -1
  859. package/src/shared-tree-core/messageFormatV1ToV4.ts +16 -2
  860. package/src/shared-tree-core/sequenceIdUtils.ts +4 -4
  861. package/src/shared-tree-core/sharedTreeCore.ts +11 -7
  862. package/src/shared-tree-core/transaction.ts +115 -56
  863. package/src/shared-tree-core/transactionEnricher.ts +5 -6
  864. package/src/simple-tree/api/configuration.ts +1 -1
  865. package/src/simple-tree/api/customTree.ts +14 -10
  866. package/src/simple-tree/api/discrepancies.ts +23 -17
  867. package/src/simple-tree/api/index.ts +2 -0
  868. package/src/simple-tree/api/schemaFactory.ts +11 -7
  869. package/src/simple-tree/api/schemaFromSimple.ts +18 -9
  870. package/src/simple-tree/api/simpleSchemaCodec.ts +10 -5
  871. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +17 -13
  872. package/src/simple-tree/api/simpleTreeIndex.ts +8 -8
  873. package/src/simple-tree/api/storedSchema.ts +10 -7
  874. package/src/simple-tree/api/transactionTypes.ts +19 -4
  875. package/src/simple-tree/api/treeNodeApi.ts +21 -13
  876. package/src/simple-tree/api/verboseTree.ts +14 -9
  877. package/src/simple-tree/core/treeNodeKernel.ts +6 -3
  878. package/src/simple-tree/core/unhydratedFlexTree.ts +22 -17
  879. package/src/simple-tree/getTreeNodeForField.ts +2 -1
  880. package/src/simple-tree/index.ts +2 -0
  881. package/src/simple-tree/leafNodeSchema.ts +8 -5
  882. package/src/simple-tree/node-kinds/array/arrayNode.ts +23 -23
  883. package/src/simple-tree/node-kinds/object/objectNode.ts +4 -5
  884. package/src/simple-tree/node-kinds/record/recordNode.ts +2 -3
  885. package/src/simple-tree/toStoredSchema.ts +9 -5
  886. package/src/treeFactory.ts +10 -5
  887. package/src/util/bTreeUtils.ts +1 -1
  888. package/src/util/breakable.ts +9 -9
  889. package/src/util/idAllocator.ts +1 -2
  890. package/src/util/nestedMap.ts +1 -3
  891. package/src/util/utils.ts +14 -13
  892. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +0 -1
  893. package/dist/feature-libraries/modular-schema/modularChangeFormat.js.map +0 -1
  894. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +0 -1
  895. package/lib/feature-libraries/modular-schema/modularChangeFormat.js.map +0 -1
@@ -5,8 +5,13 @@
5
5
 
6
6
  import { assert, fail } from "@fluidframework/core-utils/internal";
7
7
  import { BTree } from "@tylerbu/sorted-btree-es6";
8
+ import { UsageError } from "@fluidframework/telemetry-utils/internal";
8
9
 
9
- import type { ICodecFamily } from "../../codec/index.js";
10
+ import {
11
+ FluidClientVersion,
12
+ type CodecWriteOptions,
13
+ type ICodecFamily,
14
+ } from "../../codec/index.js";
10
15
  import {
11
16
  type ChangeEncodingContext,
12
17
  type ChangeFamily,
@@ -29,7 +34,6 @@ import {
29
34
  type TaggedChange,
30
35
  type UpPath,
31
36
  makeDetachedNodeId,
32
- replaceAtomRevisions,
33
37
  revisionMetadataSourceFromInfo,
34
38
  areEqualChangeAtomIds,
35
39
  type ChangeAtomId,
@@ -40,6 +44,7 @@ import {
40
44
  type DeltaDetachedNodeChanges,
41
45
  type DeltaDetachedNodeRename,
42
46
  mapTaggedChange,
47
+ type RevisionReplacer,
43
48
  } from "../../core/index.js";
44
49
  import {
45
50
  type IdAllocationState,
@@ -73,7 +78,6 @@ import {
73
78
  import { convertGenericChange, genericFieldKind } from "./genericFieldKind.js";
74
79
  import type { GenericChangeset } from "./genericFieldKindTypes.js";
75
80
  import {
76
- type ChangeAtomIdBTree,
77
81
  type CrossFieldKey,
78
82
  type CrossFieldKeyRange,
79
83
  type CrossFieldKeyTable,
@@ -83,10 +87,17 @@ import {
83
87
  type FieldId,
84
88
  type ModularChangeset,
85
89
  newCrossFieldKeyTable,
90
+ type NoChangeConstraint,
86
91
  type NodeChangeset,
87
92
  type NodeId,
88
93
  } from "./modularChangeTypes.js";
89
94
  import type { FlexFieldKind } from "./fieldKind.js";
95
+ import {
96
+ getFromChangeAtomIdMap,
97
+ setInChangeAtomIdMap,
98
+ type ChangeAtomIdBTree,
99
+ } from "../changeAtomIdBTree.js";
100
+ import { lt } from "semver-ts";
90
101
 
91
102
  /**
92
103
  * Implementation of ChangeFamily which delegates work in a given field to the appropriate FieldKind
@@ -104,6 +115,7 @@ export class ModularChangeFamily
104
115
  public constructor(
105
116
  fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,
106
117
  public readonly codecs: ICodecFamily<ModularChangeset, ChangeEncodingContext>,
118
+ public readonly codecOptions: CodecWriteOptions,
107
119
  ) {
108
120
  this.fieldKinds = fieldKinds;
109
121
  }
@@ -130,9 +142,9 @@ export class ModularChangeFamily
130
142
  } {
131
143
  // TODO: Handle the case where changes have conflicting field kinds
132
144
  const kind =
133
- change1.fieldKind !== genericFieldKind.identifier
134
- ? change1.fieldKind
135
- : change2.fieldKind;
145
+ change1.fieldKind === genericFieldKind.identifier
146
+ ? change2.fieldKind
147
+ : change1.fieldKind;
136
148
 
137
149
  if (kind === genericFieldKind.identifier) {
138
150
  // Both changes are generic
@@ -199,6 +211,11 @@ export class ModularChangeFamily
199
211
  change2,
200
212
  );
201
213
 
214
+ // The composed changeset has a "no change" constraint if either change has one
215
+ const noChangeConstraint = change1.noChangeConstraint ?? change2.noChangeConstraint;
216
+ const noChangeConstraintOnRevert =
217
+ change1.noChangeConstraintOnRevert ?? change2.noChangeConstraintOnRevert;
218
+
202
219
  return makeModularChangeset({
203
220
  fieldChanges,
204
221
  nodeChanges,
@@ -207,6 +224,8 @@ export class ModularChangeFamily
207
224
  crossFieldKeys,
208
225
  maxId: idState.maxId,
209
226
  revisions: revInfos,
227
+ noChangeConstraint,
228
+ noChangeConstraintOnRevert,
210
229
  builds: allBuilds,
211
230
  destroys: allDestroys,
212
231
  refreshers: allRefreshers,
@@ -489,16 +508,16 @@ export class ModularChangeFamily
489
508
  const fieldId: FieldId = { nodeId: parentId, field };
490
509
  const fieldChange2 = change2.get(field);
491
510
  const composedField =
492
- fieldChange2 !== undefined
493
- ? this.composeFieldChanges(
511
+ fieldChange2 === undefined
512
+ ? fieldChange1
513
+ : this.composeFieldChanges(
494
514
  fieldId,
495
515
  fieldChange1,
496
516
  fieldChange2,
497
517
  genId,
498
518
  crossFieldTable,
499
519
  revisionMetadata,
500
- )
501
- : fieldChange1;
520
+ );
502
521
 
503
522
  composedFields.set(field, composedField);
504
523
  }
@@ -660,8 +679,8 @@ export class ModularChangeFamily
660
679
  /**
661
680
  * @param change - The change to invert.
662
681
  * @param isRollback - Whether the inverted change is meant to rollback a change on a branch as is the case when
663
- * @param revisionForInvert - The revision for the invert changeset.
664
682
  * performing a sandwich rebase.
683
+ * @param revisionForInvert - The revision for the invert changeset.
665
684
  */
666
685
  public invert(
667
686
  change: TaggedChange<ModularChangeset>,
@@ -681,6 +700,9 @@ export class ModularChangeFamily
681
700
  ? [{ revision: revisionForInvert, rollbackOf: change.revision }]
682
701
  : [{ revision: revisionForInvert }];
683
702
 
703
+ const noChangeConstraint = change.change.noChangeConstraintOnRevert;
704
+ const noChangeConstraintOnRevert = change.change.noChangeConstraint;
705
+
684
706
  if (hasConflicts(change.change)) {
685
707
  return makeModularChangeset({
686
708
  maxId: change.change.maxId as number,
@@ -764,6 +786,8 @@ export class ModularChangeFamily
764
786
  revisions: revInfos,
765
787
  constraintViolationCount: change.change.constraintViolationCountOnRevert,
766
788
  constraintViolationCountOnRevert: change.change.constraintViolationCount,
789
+ noChangeConstraint,
790
+ noChangeConstraintOnRevert,
767
791
  destroys,
768
792
  });
769
793
  }
@@ -911,6 +935,13 @@ export class ModularChangeFamily
911
935
  const revertConstraintState = newConstraintState(
912
936
  change.constraintViolationCountOnRevert ?? 0,
913
937
  );
938
+
939
+ let noChangeConstraint = change.noChangeConstraint;
940
+ if (noChangeConstraint !== undefined && !noChangeConstraint.violated) {
941
+ noChangeConstraint = { violated: true };
942
+ constraintState.violationCount += 1;
943
+ }
944
+
914
945
  this.updateConstraintsForFields(
915
946
  rebasedFields,
916
947
  NodeAttachState.Attached,
@@ -930,6 +961,8 @@ export class ModularChangeFamily
930
961
  revisions: change.revisions,
931
962
  constraintViolationCount: constraintState.violationCount,
932
963
  constraintViolationCountOnRevert: revertConstraintState.violationCount,
964
+ noChangeConstraint,
965
+ noChangeConstraintOnRevert: change.noChangeConstraintOnRevert,
933
966
  builds: change.builds,
934
967
  destroys: change.destroys,
935
968
  refreshers: change.refreshers,
@@ -985,9 +1018,9 @@ export class ModularChangeFamily
985
1018
  const baseChange = crossFieldTable.baseChange;
986
1019
  for (const [revision, localId, fieldKey] of crossFieldTable.affectedBaseFields.keys()) {
987
1020
  const baseNodeId =
988
- localId !== undefined
989
- ? normalizeNodeId({ revision, localId }, baseChange.nodeAliases)
990
- : undefined;
1021
+ localId === undefined
1022
+ ? undefined
1023
+ : normalizeNodeId({ revision, localId }, baseChange.nodeAliases);
991
1024
 
992
1025
  const baseFieldChange = fieldMapFromNodeId(
993
1026
  baseChange.fieldChanges,
@@ -1022,9 +1055,9 @@ export class ModularChangeFamily
1022
1055
  };
1023
1056
 
1024
1057
  const rebasedNodeId =
1025
- baseNodeId !== undefined
1026
- ? rebasedNodeIdFromBaseNodeId(crossFieldTable, baseNodeId)
1027
- : undefined;
1058
+ baseNodeId === undefined
1059
+ ? undefined
1060
+ : rebasedNodeIdFromBaseNodeId(crossFieldTable, baseNodeId);
1028
1061
 
1029
1062
  const fieldId: FieldId = { nodeId: rebasedNodeId, field: fieldKey };
1030
1063
  const rebasedField: unknown = handler.rebaser.rebase(
@@ -1478,9 +1511,9 @@ export class ModularChangeFamily
1478
1511
  ): NodeId | undefined {
1479
1512
  const changeset = nodeChangeFromId(nodeMap, nodeId);
1480
1513
  const prunedFields =
1481
- changeset.fieldChanges !== undefined
1482
- ? this.pruneFieldMap(changeset.fieldChanges, nodeMap)
1483
- : undefined;
1514
+ changeset.fieldChanges === undefined
1515
+ ? undefined
1516
+ : this.pruneFieldMap(changeset.fieldChanges, nodeMap);
1484
1517
 
1485
1518
  const prunedChange = { ...changeset, fieldChanges: prunedFields };
1486
1519
  if (prunedChange.fieldChanges === undefined) {
@@ -1496,42 +1529,29 @@ export class ModularChangeFamily
1496
1529
  }
1497
1530
  }
1498
1531
 
1532
+ public getRevisions(change: ModularChangeset): Set<RevisionTag | undefined> {
1533
+ const aggregated: Set<RevisionTag | undefined> = new Set();
1534
+ for (const revInfo of change.revisions ?? [{ revision: undefined }]) {
1535
+ aggregated.add(revInfo.revision);
1536
+ }
1537
+ return aggregated;
1538
+ }
1539
+
1499
1540
  public changeRevision(
1500
1541
  change: ModularChangeset,
1501
- newRevision: RevisionTag | undefined,
1502
- rollbackOf?: RevisionTag,
1542
+ replacer: RevisionReplacer,
1503
1543
  ): ModularChangeset {
1504
- const oldRevisions = new Set(
1505
- change.revisions === undefined || change.revisions.length === 0
1506
- ? [undefined]
1507
- : change.revisions.map((revInfo) => revInfo.revision),
1544
+ const updatedFields = this.replaceFieldMapRevisions(change.fieldChanges, replacer);
1545
+ const updatedNodes = replaceIdMapRevisions(change.nodeChanges, replacer, (nodeChangeset) =>
1546
+ this.replaceNodeChangesetRevisions(nodeChangeset, replacer),
1508
1547
  );
1509
- const updatedFields = this.replaceFieldMapRevisions(
1510
- change.fieldChanges,
1511
- oldRevisions,
1512
- newRevision,
1548
+ const updatedNodeToParent = replaceIdMapRevisions(
1549
+ change.nodeToParent,
1550
+ replacer,
1551
+ (fieldId) =>
1552
+ replaceFieldIdRevision(normalizeFieldId(fieldId, change.nodeAliases), replacer),
1513
1553
  );
1514
1554
 
1515
- const updatedNodes: ChangeAtomIdBTree<NodeChangeset> = newTupleBTree();
1516
- for (const [[revision, id], nodeChangeset] of change.nodeChanges.entries()) {
1517
- updatedNodes.set(
1518
- [replaceRevision(revision, oldRevisions, newRevision), id],
1519
- this.replaceNodeChangesetRevisions(nodeChangeset, oldRevisions, newRevision),
1520
- );
1521
- }
1522
-
1523
- const updatedNodeToParent: ChangeAtomIdBTree<FieldId> = newTupleBTree();
1524
- for (const [[revision, id], fieldId] of change.nodeToParent.entries()) {
1525
- updatedNodeToParent.set(
1526
- [replaceRevision(revision, oldRevisions, newRevision), id],
1527
- replaceFieldIdRevision(
1528
- normalizeFieldId(fieldId, change.nodeAliases),
1529
- oldRevisions,
1530
- newRevision,
1531
- ),
1532
- );
1533
- }
1534
-
1535
1555
  const updated: Mutable<ModularChangeset> = {
1536
1556
  ...change,
1537
1557
  fieldChanges: updatedFields,
@@ -1542,49 +1562,37 @@ export class ModularChangeFamily
1542
1562
  nodeAliases: newTupleBTree(),
1543
1563
  crossFieldKeys: replaceCrossFieldKeyTableRevisions(
1544
1564
  change.crossFieldKeys,
1545
- oldRevisions,
1546
- newRevision,
1565
+ replacer,
1547
1566
  change.nodeAliases,
1548
1567
  ),
1549
1568
  };
1550
1569
 
1551
1570
  if (change.builds !== undefined) {
1552
- updated.builds = replaceIdMapRevisions(change.builds, oldRevisions, newRevision);
1571
+ updated.builds = replaceIdMapRevisions(change.builds, replacer);
1553
1572
  }
1554
1573
 
1555
1574
  if (change.destroys !== undefined) {
1556
- updated.destroys = replaceIdMapRevisions(change.destroys, oldRevisions, newRevision);
1575
+ updated.destroys = replaceIdMapRevisions(change.destroys, replacer);
1557
1576
  }
1558
1577
 
1559
1578
  if (change.refreshers !== undefined) {
1560
- updated.refreshers = replaceIdMapRevisions(change.refreshers, oldRevisions, newRevision);
1579
+ updated.refreshers = replaceIdMapRevisions(change.refreshers, replacer);
1561
1580
  }
1562
1581
 
1563
- if (newRevision !== undefined) {
1564
- const revInfo: Mutable<RevisionInfo> = { revision: newRevision };
1565
- if (rollbackOf !== undefined) {
1566
- revInfo.rollbackOf = rollbackOf;
1567
- }
1568
-
1569
- updated.revisions = [revInfo];
1570
- } else {
1571
- delete updated.revisions;
1572
- }
1582
+ updated.revisions = [{ revision: replacer.updatedRevision }];
1573
1583
 
1574
1584
  return updated;
1575
1585
  }
1576
1586
 
1577
1587
  private replaceNodeChangesetRevisions(
1578
1588
  nodeChangeset: NodeChangeset,
1579
- oldRevisions: Set<RevisionTag | undefined>,
1580
- newRevision: RevisionTag | undefined,
1589
+ replacer: RevisionReplacer,
1581
1590
  ): NodeChangeset {
1582
1591
  const updated = { ...nodeChangeset };
1583
1592
  if (nodeChangeset.fieldChanges !== undefined) {
1584
1593
  updated.fieldChanges = this.replaceFieldMapRevisions(
1585
1594
  nodeChangeset.fieldChanges,
1586
- oldRevisions,
1587
- newRevision,
1595
+ replacer,
1588
1596
  );
1589
1597
  }
1590
1598
 
@@ -1593,15 +1601,14 @@ export class ModularChangeFamily
1593
1601
 
1594
1602
  private replaceFieldMapRevisions(
1595
1603
  fields: FieldChangeMap,
1596
- oldRevisions: Set<RevisionTag | undefined>,
1597
- newRevision: RevisionTag | undefined,
1604
+ replacer: RevisionReplacer,
1598
1605
  ): FieldChangeMap {
1599
1606
  const updatedFields: FieldChangeMap = new Map();
1600
1607
  for (const [field, fieldChange] of fields) {
1601
1608
  const updatedFieldChange = getChangeHandler(
1602
1609
  this.fieldKinds,
1603
1610
  fieldChange.fieldKind,
1604
- ).rebaser.replaceRevisions(fieldChange.change, oldRevisions, newRevision);
1611
+ ).rebaser.replaceRevisions(fieldChange.change, replacer);
1605
1612
 
1606
1613
  updatedFields.set(field, { ...fieldChange, change: brand(updatedFieldChange) });
1607
1614
  }
@@ -1643,9 +1650,10 @@ export class ModularChangeFamily
1643
1650
  }
1644
1651
 
1645
1652
  public buildEditor(
1653
+ mintRevisionTag: () => RevisionTag,
1646
1654
  changeReceiver: (change: TaggedChange<ModularChangeset>) => void,
1647
1655
  ): ModularEditBuilder {
1648
- return new ModularEditBuilder(this, this.fieldKinds, changeReceiver);
1656
+ return new ModularEditBuilder(this, this.fieldKinds, changeReceiver, this.codecOptions);
1649
1657
  }
1650
1658
 
1651
1659
  private createEmptyFieldChange(fieldKind: FieldKindIdentifier): FieldChange {
@@ -1757,25 +1765,20 @@ export class ModularChangeFamily
1757
1765
 
1758
1766
  function replaceCrossFieldKeyTableRevisions(
1759
1767
  table: CrossFieldKeyTable,
1760
- oldRevisions: Set<RevisionTag | undefined>,
1761
- newRevision: RevisionTag | undefined,
1768
+ replacer: RevisionReplacer,
1762
1769
  nodeAliases: ChangeAtomIdBTree<NodeId>,
1763
1770
  ): CrossFieldKeyTable {
1764
1771
  const updated: CrossFieldKeyTable = newCrossFieldKeyTable();
1765
1772
  for (const entry of table.entries()) {
1766
1773
  const key = entry.start;
1767
- const updatedKey: CrossFieldKey = {
1768
- target: key.target,
1769
- revision: replaceRevision(key.revision, oldRevisions, newRevision),
1770
- localId: key.localId,
1771
- };
1774
+ const updatedKey: CrossFieldKey = replacer.getUpdatedAtomId(key);
1772
1775
 
1773
1776
  const field = entry.value;
1774
1777
  const normalizedFieldId = normalizeFieldId(field, nodeAliases);
1775
1778
  const updatedNodeId =
1776
- normalizedFieldId.nodeId !== undefined
1777
- ? replaceAtomRevisions(normalizedFieldId.nodeId, oldRevisions, newRevision)
1778
- : undefined;
1779
+ normalizedFieldId.nodeId === undefined
1780
+ ? undefined
1781
+ : replacer.getUpdatedAtomId(normalizedFieldId.nodeId);
1779
1782
 
1780
1783
  const updatedValue: FieldId = {
1781
1784
  ...normalizedFieldId,
@@ -1788,22 +1791,15 @@ function replaceCrossFieldKeyTableRevisions(
1788
1791
  return updated;
1789
1792
  }
1790
1793
 
1791
- function replaceRevision(
1792
- revision: RevisionTag | undefined,
1793
- oldRevisions: Set<RevisionTag | undefined>,
1794
- newRevision: RevisionTag | undefined,
1795
- ): RevisionTag | undefined {
1796
- return oldRevisions.has(revision) ? newRevision : revision;
1797
- }
1798
-
1799
1794
  function replaceIdMapRevisions<T>(
1800
1795
  map: ChangeAtomIdBTree<T>,
1801
- oldRevisions: Set<RevisionTag | undefined>,
1802
- newRevision: RevisionTag | undefined,
1796
+ replacer: RevisionReplacer,
1797
+ valueMapper: (value: T) => T = (value) => value,
1803
1798
  ): ChangeAtomIdBTree<T> {
1804
1799
  const updated: ChangeAtomIdBTree<T> = newTupleBTree();
1805
- for (const [[revision, id], value] of map.entries()) {
1806
- updated.set([replaceRevision(revision, oldRevisions, newRevision), id], value);
1800
+ for (const [[revision, localId], value] of map.entries()) {
1801
+ const newAtom = replacer.getUpdatedAtomId({ revision, localId });
1802
+ updated.set([newAtom.revision, newAtom.localId], valueMapper(value));
1807
1803
  }
1808
1804
 
1809
1805
  return updated;
@@ -1990,6 +1986,9 @@ export function updateRefreshers(
1990
1986
  const {
1991
1987
  fieldChanges,
1992
1988
  nodeChanges,
1989
+ nodeToParent,
1990
+ nodeAliases,
1991
+ crossFieldKeys,
1993
1992
  maxId,
1994
1993
  revisions,
1995
1994
  constraintViolationCount,
@@ -2001,9 +2000,9 @@ export function updateRefreshers(
2001
2000
  return makeModularChangeset({
2002
2001
  fieldChanges,
2003
2002
  nodeChanges,
2004
- nodeToParent: change.nodeToParent,
2005
- nodeAliases: change.nodeAliases,
2006
- crossFieldKeys: change.crossFieldKeys,
2003
+ nodeToParent,
2004
+ nodeAliases,
2005
+ crossFieldKeys,
2007
2006
  maxId: maxId as number,
2008
2007
  revisions,
2009
2008
  constraintViolationCount,
@@ -2620,6 +2619,8 @@ function makeModularChangeset(
2620
2619
  revisions?: readonly RevisionInfo[];
2621
2620
  constraintViolationCount?: number;
2622
2621
  constraintViolationCountOnRevert?: number;
2622
+ noChangeConstraint?: NoChangeConstraint;
2623
+ noChangeConstraintOnRevert?: NoChangeConstraint;
2623
2624
  builds?: ChangeAtomIdBTree<TreeChunk>;
2624
2625
  destroys?: ChangeAtomIdBTree<number>;
2625
2626
  refreshers?: ChangeAtomIdBTree<TreeChunk>;
@@ -2650,6 +2651,12 @@ function makeModularChangeset(
2650
2651
  ) {
2651
2652
  changeset.constraintViolationCountOnRevert = props.constraintViolationCountOnRevert;
2652
2653
  }
2654
+ if (props.noChangeConstraint !== undefined) {
2655
+ changeset.noChangeConstraint = props.noChangeConstraint;
2656
+ }
2657
+ if (props.noChangeConstraintOnRevert !== undefined) {
2658
+ changeset.noChangeConstraintOnRevert = props.noChangeConstraintOnRevert;
2659
+ }
2653
2660
  if (props.builds !== undefined && props.builds.size > 0) {
2654
2661
  changeset.builds = props.builds;
2655
2662
  }
@@ -2665,14 +2672,17 @@ function makeModularChangeset(
2665
2672
  export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2666
2673
  private transactionDepth: number = 0;
2667
2674
  private idAllocator: IdAllocator;
2675
+ private readonly codecOptions: CodecWriteOptions;
2668
2676
 
2669
2677
  public constructor(
2670
2678
  family: ChangeFamily<ChangeFamilyEditor, ModularChangeset>,
2671
2679
  private readonly fieldKinds: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,
2672
2680
  changeReceiver: (change: TaggedChange<ModularChangeset>) => void,
2681
+ codecOptions: CodecWriteOptions,
2673
2682
  ) {
2674
2683
  super(family, changeReceiver);
2675
2684
  this.idAllocator = idAllocatorFromMaxId();
2685
+ this.codecOptions = codecOptions;
2676
2686
  }
2677
2687
 
2678
2688
  public override enterTransaction(): void {
@@ -2785,7 +2795,7 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2785
2795
  }),
2786
2796
  );
2787
2797
  });
2788
- const revInfo = Array.from(revisions).map((revision) => ({ revision }));
2798
+ const revInfo = [...revisions].map((revision) => ({ revision }));
2789
2799
  const composedChange: Mutable<ModularChangeset> = {
2790
2800
  ...this.changeFamily.rebaser.compose(changeMaps),
2791
2801
  revisions: revInfo,
@@ -2843,6 +2853,36 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2843
2853
  ),
2844
2854
  );
2845
2855
  }
2856
+
2857
+ public addNoChangeConstraint(revision: RevisionTag): void {
2858
+ if (lt(this.codecOptions.minVersionForCollab, FluidClientVersion.v2_80)) {
2859
+ throw new UsageError(
2860
+ `No change constraints require min client version of at least ${FluidClientVersion.v2_80}`,
2861
+ );
2862
+ }
2863
+
2864
+ const changeset = makeModularChangeset({
2865
+ maxId: -1,
2866
+ noChangeConstraint: { violated: false },
2867
+ });
2868
+
2869
+ this.applyChange(tagChange(changeset, revision));
2870
+ }
2871
+
2872
+ public addNoChangeConstraintOnRevert(revision: RevisionTag): void {
2873
+ if (lt(this.codecOptions.minVersionForCollab, FluidClientVersion.v2_80)) {
2874
+ throw new UsageError(
2875
+ `No change constraints require min client version of at least ${FluidClientVersion.v2_80}`,
2876
+ );
2877
+ }
2878
+
2879
+ const changeset = makeModularChangeset({
2880
+ maxId: -1,
2881
+ noChangeConstraintOnRevert: { violated: false },
2882
+ });
2883
+
2884
+ this.applyChange(tagChange(changeset, revision));
2885
+ }
2846
2886
  }
2847
2887
 
2848
2888
  function buildModularChangesetFromField(props: {
@@ -2932,9 +2972,13 @@ function buildModularChangesetFromNode(props: {
2932
2972
  }): ModularChangeset {
2933
2973
  const {
2934
2974
  path,
2935
- nodeId = { localId: brand(props.idAllocator.allocate()), revision: props.revision },
2975
+ idAllocator,
2976
+ revision,
2977
+ nodeChanges,
2978
+ nodeChange,
2979
+ nodeId = { localId: brand(idAllocator.allocate()), revision },
2936
2980
  } = props;
2937
- setInChangeAtomIdMap(props.nodeChanges, nodeId, props.nodeChange);
2981
+ setInChangeAtomIdMap(nodeChanges, nodeId, nodeChange);
2938
2982
  const fieldChangeset = genericFieldKind.changeHandler.editor.buildChildChanges([
2939
2983
  [path.parentIndex, nodeId],
2940
2984
  ]);
@@ -2975,16 +3019,21 @@ function getRevInfoFromTaggedChanges(changes: TaggedChange<ModularChangeset>[]):
2975
3019
  } {
2976
3020
  let maxId = -1;
2977
3021
  const revInfos: RevisionInfo[] = [];
3022
+ const revisions = new Set<RevisionTag>();
2978
3023
  for (const taggedChange of changes) {
2979
3024
  const change = taggedChange.change;
2980
3025
  maxId = Math.max(change.maxId ?? -1, maxId);
2981
- revInfos.push(...revisionInfoFromTaggedChange(taggedChange));
3026
+ const infosToAdd = revisionInfoFromTaggedChange(taggedChange);
3027
+ for (const info of infosToAdd) {
3028
+ if (!revisions.has(info.revision)) {
3029
+ revisions.add(info.revision);
3030
+ revInfos.push(info);
3031
+ }
3032
+ }
2982
3033
  }
2983
3034
 
2984
- const revisions = new Set<RevisionTag>();
2985
3035
  const rolledBackRevisions: RevisionTag[] = [];
2986
3036
  for (const info of revInfos) {
2987
- revisions.add(info.revision);
2988
3037
  if (info.rollbackOf !== undefined) {
2989
3038
  rolledBackRevisions.push(info.rollbackOf);
2990
3039
  }
@@ -3058,7 +3107,7 @@ function nodeChangeFromId(nodes: ChangeAtomIdBTree<NodeChangeset>, id: NodeId):
3058
3107
  }
3059
3108
 
3060
3109
  function fieldIdFromFieldIdKey([revision, localId, field]: FieldIdKey): FieldId {
3061
- const nodeId = localId !== undefined ? { revision, localId } : undefined;
3110
+ const nodeId = localId === undefined ? undefined : { revision, localId };
3062
3111
  return { nodeId, field };
3063
3112
  }
3064
3113
 
@@ -3070,18 +3119,14 @@ function cloneNodeChangeset(nodeChangeset: NodeChangeset): NodeChangeset {
3070
3119
  return { ...nodeChangeset };
3071
3120
  }
3072
3121
 
3073
- function replaceFieldIdRevision(
3074
- fieldId: FieldId,
3075
- oldRevisions: Set<RevisionTag | undefined>,
3076
- newRevision: RevisionTag | undefined,
3077
- ): FieldId {
3122
+ function replaceFieldIdRevision(fieldId: FieldId, replacer: RevisionReplacer): FieldId {
3078
3123
  if (fieldId.nodeId === undefined) {
3079
3124
  return fieldId;
3080
3125
  }
3081
3126
 
3082
3127
  return {
3083
3128
  ...fieldId,
3084
- nodeId: replaceAtomRevisions(fieldId.nodeId, oldRevisions, newRevision),
3129
+ nodeId: replacer.getUpdatedAtomId(fieldId.nodeId),
3085
3130
  };
3086
3131
  }
3087
3132
 
@@ -3106,9 +3151,9 @@ export function normalizeFieldId(
3106
3151
  fieldId: FieldId,
3107
3152
  nodeAliases: ChangeAtomIdBTree<NodeId>,
3108
3153
  ): FieldId {
3109
- return fieldId.nodeId !== undefined
3110
- ? { ...fieldId, nodeId: normalizeNodeId(fieldId.nodeId, nodeAliases) }
3111
- : fieldId;
3154
+ return fieldId.nodeId === undefined
3155
+ ? fieldId
3156
+ : { ...fieldId, nodeId: normalizeNodeId(fieldId.nodeId, nodeAliases) };
3112
3157
  }
3113
3158
 
3114
3159
  /**
@@ -3140,17 +3185,6 @@ interface ModularChangesetContent {
3140
3185
  crossFieldKeys: CrossFieldKeyTable;
3141
3186
  }
3142
3187
 
3143
- function getFromChangeAtomIdMap<T>(
3144
- map: ChangeAtomIdBTree<T>,
3145
- id: ChangeAtomId,
3146
- ): T | undefined {
3147
- return map.get([id.revision, id.localId]);
3148
- }
3149
-
3150
- function setInChangeAtomIdMap<T>(map: ChangeAtomIdBTree<T>, id: ChangeAtomId, value: T): void {
3151
- map.set([id.revision, id.localId], value);
3152
- }
3153
-
3154
3188
  function areEqualFieldIds(a: FieldId, b: FieldId): boolean {
3155
3189
  return areEqualChangeAtomIdOpts(a.nodeId, b.nodeId) && a.field === b.field;
3156
3190
  }
@@ -25,7 +25,7 @@ export const EncodedChangeAtomId = Type.Union([
25
25
  ]);
26
26
  export type EncodedChangeAtomId = Static<typeof EncodedChangeAtomId>;
27
27
 
28
- const EncodedFieldChange = Type.Object(
28
+ export const EncodedFieldChange = Type.Object(
29
29
  {
30
30
  fieldKey: schemaFormatV1.FieldKeySchema,
31
31
  fieldKind: schemaFormatV1.FieldKindIdentifierSchema,
@@ -44,7 +44,7 @@ export interface EncodedFieldChange extends Static<typeof EncodedFieldChange> {
44
44
  change: JsonCompatibleReadOnly;
45
45
  }
46
46
 
47
- const EncodedFieldChangeMap = Type.Array(EncodedFieldChange);
47
+ export const EncodedFieldChangeMap = Type.Array(EncodedFieldChange);
48
48
 
49
49
  /**
50
50
  * Format for encoding as json.
@@ -125,7 +125,7 @@ export const EncodedBuilds = Type.Object(
125
125
 
126
126
  export type EncodedBuilds = Static<typeof EncodedBuilds>;
127
127
 
128
- export const EncodedModularChangeset = Type.Object(
128
+ export const EncodedModularChangesetV1 = Type.Object(
129
129
  {
130
130
  maxId: Type.Optional(ChangesetLocalIdSchema),
131
131
  changes: EncodedFieldChangeMap,
@@ -142,4 +142,4 @@ export const EncodedModularChangeset = Type.Object(
142
142
  noAdditionalProps,
143
143
  );
144
144
 
145
- export type EncodedModularChangeset = Static<typeof EncodedModularChangeset>;
145
+ export type EncodedModularChangesetV1 = Static<typeof EncodedModularChangesetV1>;
@@ -0,0 +1,34 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { type ObjectOptions, type Static, Type } from "@sinclair/typebox";
7
+
8
+ import { EncodedModularChangesetV1 } from "./modularChangeFormatV1.js";
9
+
10
+ const noAdditionalProps: ObjectOptions = { additionalProperties: false };
11
+
12
+ const EncodedNoChangeConstraint = Type.Object(
13
+ {
14
+ violated: Type.Boolean(),
15
+ },
16
+ noAdditionalProps,
17
+ );
18
+ export type EncodedNoChangeConstraint = Static<typeof EncodedNoChangeConstraint>;
19
+
20
+ export const EncodedModularChangesetV2 = Type.Composite(
21
+ [
22
+ EncodedModularChangesetV1,
23
+ Type.Object(
24
+ {
25
+ /** Global no change constraint that gets violated whenever the changeset is rebased */
26
+ noChangeConstraint: Type.Optional(EncodedNoChangeConstraint),
27
+ },
28
+ noAdditionalProps,
29
+ ),
30
+ ],
31
+ noAdditionalProps,
32
+ );
33
+
34
+ export type EncodedModularChangesetV2 = Static<typeof EncodedModularChangesetV2>;