@fluidframework/tree 2.81.0-374083 → 2.81.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1522) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/api-report/tree.alpha.api.md +0 -1
  3. package/dist/codec/codec.d.ts +2 -2
  4. package/dist/codec/codec.d.ts.map +1 -1
  5. package/dist/codec/codec.js +8 -8
  6. package/dist/codec/codec.js.map +1 -1
  7. package/dist/codec/versioned/codec.d.ts +1 -1
  8. package/dist/codec/versioned/codec.d.ts.map +1 -1
  9. package/dist/codec/versioned/codec.js +12 -12
  10. package/dist/codec/versioned/codec.js.map +1 -1
  11. package/dist/core/change-family/changeFamily.d.ts +1 -4
  12. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  13. package/dist/core/change-family/changeFamily.js.map +1 -1
  14. package/dist/core/change-family/index.d.ts +1 -1
  15. package/dist/core/change-family/index.d.ts.map +1 -1
  16. package/dist/core/change-family/index.js.map +1 -1
  17. package/dist/core/index.d.ts +3 -3
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +4 -6
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/core/rebase/changeRebaser.d.ts +1 -6
  22. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  23. package/dist/core/rebase/changeRebaser.js.map +1 -1
  24. package/dist/core/rebase/index.d.ts +1 -1
  25. package/dist/core/rebase/index.d.ts.map +1 -1
  26. package/dist/core/rebase/index.js +1 -2
  27. package/dist/core/rebase/index.js.map +1 -1
  28. package/dist/core/rebase/types.d.ts +1 -2
  29. package/dist/core/rebase/types.d.ts.map +1 -1
  30. package/dist/core/rebase/types.js +1 -5
  31. package/dist/core/rebase/types.js.map +1 -1
  32. package/dist/core/rebase/utils.d.ts.map +1 -1
  33. package/dist/core/rebase/utils.js +7 -25
  34. package/dist/core/rebase/utils.js.map +1 -1
  35. package/dist/core/schema-stored/formatV2.d.ts.map +1 -1
  36. package/dist/core/schema-stored/formatV2.js +4 -4
  37. package/dist/core/schema-stored/formatV2.js.map +1 -1
  38. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  39. package/dist/core/tree/anchorSet.js +1 -1
  40. package/dist/core/tree/anchorSet.js.map +1 -1
  41. package/dist/core/tree/detachedFieldIndex.d.ts +0 -6
  42. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  43. package/dist/core/tree/detachedFieldIndex.js +0 -9
  44. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  45. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +1 -1
  46. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -1
  47. package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -1
  48. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -1
  49. package/dist/core/tree/detachedFieldIndexCodecV1.js +3 -3
  50. package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -1
  51. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -1
  52. package/dist/core/tree/detachedFieldIndexCodecV2.js +2 -2
  53. package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -1
  54. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -1
  55. package/dist/core/tree/detachedFieldIndexFormatV1.js +3 -3
  56. package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -1
  57. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
  58. package/dist/core/tree/detachedFieldIndexFormatV2.js +4 -4
  59. package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
  60. package/dist/core/tree/index.d.ts +1 -1
  61. package/dist/core/tree/index.d.ts.map +1 -1
  62. package/dist/core/tree/index.js +3 -4
  63. package/dist/core/tree/index.js.map +1 -1
  64. package/dist/core/tree/pathTree.d.ts +3 -11
  65. package/dist/core/tree/pathTree.d.ts.map +1 -1
  66. package/dist/core/tree/pathTree.js +2 -14
  67. package/dist/core/tree/pathTree.js.map +1 -1
  68. package/dist/core/tree/visitDelta.d.ts +1 -1
  69. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  70. package/dist/core/tree/visitDelta.js.map +1 -1
  71. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  72. package/dist/core/tree/visitorUtils.js +1 -1
  73. package/dist/core/tree/visitorUtils.js.map +1 -1
  74. package/dist/feature-libraries/changeAtomIdBTree.d.ts +3 -4
  75. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  76. package/dist/feature-libraries/changeAtomIdBTree.js +2 -16
  77. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  78. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  79. package/dist/feature-libraries/chunked-forest/basicChunk.js +0 -7
  80. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  81. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +1 -1
  82. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  83. package/dist/feature-libraries/chunked-forest/chunkTree.js +1 -4
  84. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  85. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -1
  86. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  87. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  88. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -1
  89. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  90. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  91. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +1 -1
  92. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  93. package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  94. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
  95. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  96. package/dist/feature-libraries/chunked-forest/codec/codecs.js +1 -1
  97. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  98. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
  99. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  100. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  101. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  102. package/dist/feature-libraries/chunked-forest/codec/format.js +1 -1
  103. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  104. package/dist/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
  105. package/dist/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
  106. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +1 -1
  107. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  108. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +2 -2
  109. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  110. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +44 -93
  111. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  112. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +78 -245
  113. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  114. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +11 -53
  115. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  116. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +25 -75
  117. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  118. package/dist/feature-libraries/default-schema/index.d.ts +2 -3
  119. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  120. package/dist/feature-libraries/default-schema/index.js +2 -5
  121. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  122. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +6 -7
  123. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  124. package/dist/feature-libraries/default-schema/mappedEditBuilder.js +0 -15
  125. package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  126. package/dist/feature-libraries/deltaUtils.d.ts +0 -1
  127. package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
  128. package/dist/feature-libraries/deltaUtils.js +1 -6
  129. package/dist/feature-libraries/deltaUtils.js.map +1 -1
  130. package/dist/feature-libraries/fieldKindIdentifiers.d.ts +9 -0
  131. package/dist/feature-libraries/fieldKindIdentifiers.d.ts.map +1 -0
  132. package/dist/feature-libraries/fieldKindIdentifiers.js +16 -0
  133. package/dist/feature-libraries/fieldKindIdentifiers.js.map +1 -0
  134. package/dist/feature-libraries/flex-tree/context.d.ts +0 -9
  135. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  136. package/dist/feature-libraries/flex-tree/context.js +0 -6
  137. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  138. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  139. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  140. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  141. package/dist/feature-libraries/flex-tree/lazyField.d.ts +7 -8
  142. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  143. package/dist/feature-libraries/flex-tree/lazyField.js +17 -48
  144. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  145. package/dist/feature-libraries/flex-tree/observer.d.ts +1 -1
  146. package/dist/feature-libraries/flex-tree/observer.d.ts.map +1 -1
  147. package/dist/feature-libraries/flex-tree/observer.js.map +1 -1
  148. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  149. package/dist/feature-libraries/forest-summary/codec.js +1 -1
  150. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  151. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  152. package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -3
  153. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  154. package/dist/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  155. package/dist/feature-libraries/forest-summary/formatV1.js.map +1 -1
  156. package/dist/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  157. package/dist/feature-libraries/forest-summary/formatV2.js.map +1 -1
  158. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -4
  159. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  160. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -2
  161. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  162. package/dist/feature-libraries/forest-summary/summaryTypes.d.ts.map +1 -1
  163. package/dist/feature-libraries/forest-summary/summaryTypes.js.map +1 -1
  164. package/dist/feature-libraries/index.d.ts +3 -3
  165. package/dist/feature-libraries/index.d.ts.map +1 -1
  166. package/dist/feature-libraries/index.js +3 -8
  167. package/dist/feature-libraries/index.js.map +1 -1
  168. package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  169. package/dist/feature-libraries/mapTreeCursor.js +0 -1
  170. package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
  171. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  172. package/dist/feature-libraries/mitigatedChangeFamily.js +2 -2
  173. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  174. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +21 -97
  175. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  176. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +7 -4
  177. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  178. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +51 -20
  179. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  180. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  181. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.d.ts.map +1 -1
  182. package/dist/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
  183. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -1
  184. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  185. package/dist/feature-libraries/modular-schema/genericFieldKind.js +11 -5
  186. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  187. package/dist/feature-libraries/modular-schema/index.d.ts +4 -4
  188. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  189. package/dist/feature-libraries/modular-schema/index.js +2 -2
  190. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  191. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +28 -11
  192. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  193. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +162 -254
  194. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  195. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  196. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  197. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  198. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  199. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +1 -8
  200. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  201. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +21 -49
  202. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  203. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +460 -1325
  204. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  205. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  206. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  207. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +8 -44
  208. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  209. package/dist/feature-libraries/modular-schema/modularChangeTypes.js +3 -3
  210. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  211. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  212. package/dist/feature-libraries/object-forest/objectForest.js +2 -2
  213. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  214. package/dist/feature-libraries/optional-field/index.d.ts +2 -2
  215. package/dist/feature-libraries/optional-field/index.d.ts.map +1 -1
  216. package/dist/feature-libraries/optional-field/index.js +4 -7
  217. package/dist/feature-libraries/optional-field/index.js.map +1 -1
  218. package/dist/feature-libraries/optional-field/optionalField.d.ts +34 -5
  219. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  220. package/dist/feature-libraries/optional-field/optionalField.js +455 -221
  221. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  222. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +33 -24
  223. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  224. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  225. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  226. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  227. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +28 -57
  228. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  229. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  230. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
  231. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  232. package/dist/feature-libraries/optional-field/requiredField.d.ts +36 -0
  233. package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -0
  234. package/dist/feature-libraries/optional-field/requiredField.js +27 -0
  235. package/dist/feature-libraries/optional-field/requiredField.js.map +1 -0
  236. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts +1 -1
  237. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  238. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +7 -7
  239. package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  240. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  241. package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  242. package/dist/feature-libraries/schemaChecker.d.ts.map +1 -1
  243. package/dist/feature-libraries/schemaChecker.js +1 -1
  244. package/dist/feature-libraries/schemaChecker.js.map +1 -1
  245. package/dist/feature-libraries/sequence-field/compose.d.ts +7 -6
  246. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  247. package/dist/feature-libraries/sequence-field/compose.js +259 -83
  248. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  249. package/dist/feature-libraries/sequence-field/helperTypes.d.ts +10 -14
  250. package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  251. package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  252. package/dist/feature-libraries/sequence-field/index.d.ts +2 -13
  253. package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
  254. package/dist/feature-libraries/sequence-field/index.js +3 -28
  255. package/dist/feature-libraries/sequence-field/index.js.map +1 -1
  256. package/dist/feature-libraries/sequence-field/invert.d.ts +3 -3
  257. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  258. package/dist/feature-libraries/sequence-field/invert.js +167 -65
  259. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  260. package/dist/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  261. package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  262. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  263. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +56 -4
  264. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  265. package/dist/feature-libraries/sequence-field/moveEffectTable.js +90 -7
  266. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  267. package/dist/feature-libraries/sequence-field/rebase.d.ts +3 -3
  268. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  269. package/dist/feature-libraries/sequence-field/rebase.js +114 -107
  270. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  271. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +9 -0
  272. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +1 -0
  273. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +50 -0
  274. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +1 -0
  275. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  276. package/dist/feature-libraries/sequence-field/replaceRevisions.js +31 -18
  277. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  278. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  279. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -0
  280. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  281. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -22
  282. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  283. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +187 -365
  284. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  285. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  286. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +62 -20
  287. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  288. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  289. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  290. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
  291. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  292. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
  293. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  294. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +109 -14
  295. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  296. package/dist/feature-libraries/sequence-field/sequenceKind.d.ts +16 -0
  297. package/dist/feature-libraries/sequence-field/sequenceKind.d.ts.map +1 -0
  298. package/dist/feature-libraries/sequence-field/sequenceKind.js +24 -0
  299. package/dist/feature-libraries/sequence-field/sequenceKind.js.map +1 -0
  300. package/dist/feature-libraries/sequence-field/types.d.ts +59 -30
  301. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  302. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  303. package/dist/feature-libraries/sequence-field/utils.d.ts +24 -15
  304. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  305. package/dist/feature-libraries/sequence-field/utils.js +305 -116
  306. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  307. package/dist/index.d.ts +1 -1
  308. package/dist/index.d.ts.map +1 -1
  309. package/dist/index.js +2 -1
  310. package/dist/index.js.map +1 -1
  311. package/dist/packageVersion.d.ts +1 -1
  312. package/dist/packageVersion.d.ts.map +1 -1
  313. package/dist/packageVersion.js +1 -1
  314. package/dist/packageVersion.js.map +1 -1
  315. package/dist/shared-tree/independentView.d.ts.map +1 -1
  316. package/dist/shared-tree/independentView.js +7 -7
  317. package/dist/shared-tree/independentView.js.map +1 -1
  318. package/dist/shared-tree/index.d.ts +1 -1
  319. package/dist/shared-tree/index.d.ts.map +1 -1
  320. package/dist/shared-tree/index.js.map +1 -1
  321. package/dist/shared-tree/schematizeTree.d.ts +4 -4
  322. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  323. package/dist/shared-tree/schematizeTree.js +1 -2
  324. package/dist/shared-tree/schematizeTree.js.map +1 -1
  325. package/dist/shared-tree/schematizingTreeView.d.ts +5 -1
  326. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  327. package/dist/shared-tree/schematizingTreeView.js +39 -40
  328. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  329. package/dist/shared-tree/sharedTree.d.ts +5 -11
  330. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  331. package/dist/shared-tree/sharedTree.js +5 -43
  332. package/dist/shared-tree/sharedTree.js.map +1 -1
  333. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  334. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  335. package/dist/shared-tree/sharedTreeChangeCodecs.js +0 -1
  336. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  337. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts +31 -24
  338. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  339. package/dist/shared-tree/sharedTreeChangeEnricher.js +75 -58
  340. package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  341. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
  342. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  343. package/dist/shared-tree/sharedTreeChangeFamily.js +4 -10
  344. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  345. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +6 -16
  346. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  347. package/dist/shared-tree/sharedTreeEditBuilder.js +7 -14
  348. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  349. package/dist/shared-tree/tree.d.ts.map +1 -1
  350. package/dist/shared-tree/tree.js +14 -14
  351. package/dist/shared-tree/tree.js.map +1 -1
  352. package/dist/shared-tree/treeAlpha.d.ts +1 -1
  353. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  354. package/dist/shared-tree/treeAlpha.js +77 -77
  355. package/dist/shared-tree/treeAlpha.js.map +1 -1
  356. package/dist/shared-tree/treeCheckout.d.ts +29 -13
  357. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  358. package/dist/shared-tree/treeCheckout.js +80 -79
  359. package/dist/shared-tree/treeCheckout.js.map +1 -1
  360. package/dist/shared-tree-core/branch.d.ts +3 -4
  361. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  362. package/dist/shared-tree-core/branch.js +3 -4
  363. package/dist/shared-tree-core/branch.js.map +1 -1
  364. package/dist/shared-tree-core/branchCommitEnricher.d.ts +18 -31
  365. package/dist/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  366. package/dist/shared-tree-core/branchCommitEnricher.js +24 -76
  367. package/dist/shared-tree-core/branchCommitEnricher.js.map +1 -1
  368. package/dist/shared-tree-core/branchIdCodec.d.ts.map +1 -1
  369. package/dist/shared-tree-core/branchIdCodec.js.map +1 -1
  370. package/dist/shared-tree-core/changeEnricher.d.ts +8 -43
  371. package/dist/shared-tree-core/changeEnricher.d.ts.map +1 -1
  372. package/dist/shared-tree-core/changeEnricher.js +0 -13
  373. package/dist/shared-tree-core/changeEnricher.js.map +1 -1
  374. package/dist/shared-tree-core/defaultResubmitMachine.d.ts +4 -12
  375. package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  376. package/dist/shared-tree-core/defaultResubmitMachine.js +26 -36
  377. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  378. package/dist/shared-tree-core/editManager.d.ts +3 -3
  379. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  380. package/dist/shared-tree-core/editManager.js +11 -11
  381. package/dist/shared-tree-core/editManager.js.map +1 -1
  382. package/dist/shared-tree-core/editManagerCodecs.d.ts +1 -5
  383. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  384. package/dist/shared-tree-core/editManagerCodecs.js +2 -10
  385. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  386. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +1 -1
  387. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  388. package/dist/shared-tree-core/editManagerCodecsCommons.js +1 -2
  389. package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  390. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  391. package/dist/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
  392. package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  393. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  394. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
  395. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  396. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +0 -1
  397. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  398. package/dist/shared-tree-core/editManagerFormatCommons.js +0 -6
  399. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  400. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  401. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  402. package/dist/shared-tree-core/editManagerFormatV1toV4.js +0 -1
  403. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  404. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
  405. package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
  406. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
  407. package/dist/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  408. package/dist/shared-tree-core/index.d.ts +4 -4
  409. package/dist/shared-tree-core/index.d.ts.map +1 -1
  410. package/dist/shared-tree-core/index.js +1 -5
  411. package/dist/shared-tree-core/index.js.map +1 -1
  412. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
  413. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  414. package/dist/shared-tree-core/messageCodecV1ToV4.js +1 -1
  415. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  416. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts +1 -1
  417. package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  418. package/dist/shared-tree-core/messageCodecVSharedBranches.js +2 -2
  419. package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  420. package/dist/shared-tree-core/messageCodecs.d.ts +2 -6
  421. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  422. package/dist/shared-tree-core/messageCodecs.js +2 -10
  423. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  424. package/dist/shared-tree-core/messageFormat.d.ts +0 -1
  425. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  426. package/dist/shared-tree-core/messageFormat.js +0 -6
  427. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  428. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  429. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  430. package/dist/shared-tree-core/messageFormatV1ToV4.js +0 -1
  431. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  432. package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  433. package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  434. package/dist/shared-tree-core/messageTypes.d.ts.map +1 -1
  435. package/dist/shared-tree-core/messageTypes.js.map +1 -1
  436. package/dist/shared-tree-core/sharedTreeCore.d.ts +8 -5
  437. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  438. package/dist/shared-tree-core/sharedTreeCore.js +14 -14
  439. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  440. package/dist/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  441. package/dist/shared-tree-core/versionedSummarizer.js +1 -1
  442. package/dist/shared-tree-core/versionedSummarizer.js.map +1 -1
  443. package/dist/simple-tree/api/configuration.d.ts +2 -2
  444. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  445. package/dist/simple-tree/api/configuration.js +14 -14
  446. package/dist/simple-tree/api/configuration.js.map +1 -1
  447. package/dist/simple-tree/api/create.d.ts +1 -1
  448. package/dist/simple-tree/api/create.d.ts.map +1 -1
  449. package/dist/simple-tree/api/create.js +7 -7
  450. package/dist/simple-tree/api/create.js.map +1 -1
  451. package/dist/simple-tree/api/dirtyIndex.d.ts +1 -1
  452. package/dist/simple-tree/api/dirtyIndex.d.ts.map +1 -1
  453. package/dist/simple-tree/api/dirtyIndex.js.map +1 -1
  454. package/dist/simple-tree/api/discrepancies.d.ts.map +1 -1
  455. package/dist/simple-tree/api/discrepancies.js +23 -23
  456. package/dist/simple-tree/api/discrepancies.js.map +1 -1
  457. package/dist/simple-tree/api/getJsonSchema.d.ts +1 -1
  458. package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  459. package/dist/simple-tree/api/getJsonSchema.js +1 -1
  460. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  461. package/dist/simple-tree/api/identifierIndex.d.ts +2 -2
  462. package/dist/simple-tree/api/identifierIndex.d.ts.map +1 -1
  463. package/dist/simple-tree/api/identifierIndex.js.map +1 -1
  464. package/dist/simple-tree/api/incrementalAllowedTypes.d.ts +1 -1
  465. package/dist/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -1
  466. package/dist/simple-tree/api/incrementalAllowedTypes.js +6 -6
  467. package/dist/simple-tree/api/incrementalAllowedTypes.js.map +1 -1
  468. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +1 -1
  469. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  470. package/dist/simple-tree/api/schemaCompatibilityTester.js +1 -1
  471. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  472. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +2 -2
  473. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  474. package/dist/simple-tree/api/schemaCreationUtilities.js +7 -7
  475. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  476. package/dist/simple-tree/api/schemaFactory.d.ts +2 -2
  477. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  478. package/dist/simple-tree/api/schemaFactory.js +7 -7
  479. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  480. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +6 -6
  481. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  482. package/dist/simple-tree/api/schemaFactoryAlpha.js +1 -1
  483. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  484. package/dist/simple-tree/api/schemaFactoryBeta.d.ts +2 -2
  485. package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  486. package/dist/simple-tree/api/schemaFactoryBeta.js +1 -0
  487. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  488. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
  489. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  490. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  491. package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  492. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  493. package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -1
  494. package/dist/simple-tree/api/schemaStatics.js.map +1 -1
  495. package/dist/simple-tree/api/simpleSchemaCodec.d.ts +1 -1
  496. package/dist/simple-tree/api/simpleSchemaCodec.d.ts.map +1 -1
  497. package/dist/simple-tree/api/simpleSchemaCodec.js +17 -17
  498. package/dist/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  499. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts +2 -2
  500. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  501. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +2 -2
  502. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  503. package/dist/simple-tree/api/simpleTreeIndex.d.ts +1 -1
  504. package/dist/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
  505. package/dist/simple-tree/api/simpleTreeIndex.js +1 -1
  506. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  507. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  508. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +14 -14
  509. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  510. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  511. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  512. package/dist/simple-tree/api/tree.d.ts +2 -2
  513. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  514. package/dist/simple-tree/api/tree.js.map +1 -1
  515. package/dist/simple-tree/api/treeBeta.d.ts +1 -1
  516. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  517. package/dist/simple-tree/api/treeBeta.js +2 -2
  518. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  519. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  520. package/dist/simple-tree/api/treeNodeApi.js +4 -4
  521. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  522. package/dist/simple-tree/api/typesUnsafe.d.ts +1 -1
  523. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  524. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  525. package/dist/simple-tree/api/verboseTree.d.ts +1 -1
  526. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  527. package/dist/simple-tree/api/verboseTree.js +22 -22
  528. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  529. package/dist/simple-tree/core/allowedTypes.d.ts +1 -1
  530. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  531. package/dist/simple-tree/core/allowedTypes.js +7 -7
  532. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  533. package/dist/simple-tree/core/context.d.ts.map +1 -1
  534. package/dist/simple-tree/core/context.js.map +1 -1
  535. package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
  536. package/dist/simple-tree/core/treeNode.js +1 -1
  537. package/dist/simple-tree/core/treeNode.js.map +1 -1
  538. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  539. package/dist/simple-tree/core/treeNodeKernel.js +1 -3
  540. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  541. package/dist/simple-tree/core/treeNodeSchema.d.ts +5 -5
  542. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  543. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  544. package/dist/simple-tree/core/treeNodeValid.d.ts +3 -3
  545. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  546. package/dist/simple-tree/core/treeNodeValid.js +2 -2
  547. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  548. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +16 -16
  549. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  550. package/dist/simple-tree/core/unhydratedFlexTree.js +8 -59
  551. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  552. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  553. package/dist/simple-tree/core/withType.js.map +1 -1
  554. package/dist/simple-tree/createContext.d.ts.map +1 -1
  555. package/dist/simple-tree/createContext.js.map +1 -1
  556. package/dist/simple-tree/fieldSchema.d.ts +5 -5
  557. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  558. package/dist/simple-tree/fieldSchema.js.map +1 -1
  559. package/dist/simple-tree/index.d.ts +2 -2
  560. package/dist/simple-tree/index.d.ts.map +1 -1
  561. package/dist/simple-tree/index.js +1 -1
  562. package/dist/simple-tree/index.js.map +1 -1
  563. package/dist/simple-tree/leafNodeSchema.d.ts +1 -1
  564. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  565. package/dist/simple-tree/leafNodeSchema.js +15 -15
  566. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  567. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +1 -1
  568. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  569. package/dist/simple-tree/node-kinds/array/arrayNode.js +47 -49
  570. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  571. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +1 -1
  572. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
  573. package/dist/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
  574. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
  575. package/dist/simple-tree/node-kinds/common.js +1 -1
  576. package/dist/simple-tree/node-kinds/common.js.map +1 -1
  577. package/dist/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
  578. package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  579. package/dist/simple-tree/node-kinds/map/mapNode.js +26 -26
  580. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  581. package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts +1 -1
  582. package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
  583. package/dist/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
  584. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
  585. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  586. package/dist/simple-tree/node-kinds/object/objectNode.js +28 -28
  587. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  588. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +3 -3
  589. package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  590. package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  591. package/dist/simple-tree/node-kinds/record/recordNode.d.ts +1 -1
  592. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  593. package/dist/simple-tree/node-kinds/record/recordNode.js +36 -38
  594. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  595. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +1 -1
  596. package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
  597. package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  598. package/dist/simple-tree/prepareForInsertion.d.ts +47 -54
  599. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  600. package/dist/simple-tree/prepareForInsertion.js +128 -186
  601. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  602. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  603. package/dist/simple-tree/simpleSchema.js.map +1 -1
  604. package/dist/simple-tree/treeSchema.d.ts.map +1 -1
  605. package/dist/simple-tree/treeSchema.js.map +1 -1
  606. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +4 -13
  607. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  608. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +22 -40
  609. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  610. package/dist/tableSchema.d.ts.map +1 -1
  611. package/dist/tableSchema.js +22 -21
  612. package/dist/tableSchema.js.map +1 -1
  613. package/dist/text/index.d.ts +1 -0
  614. package/dist/text/index.d.ts.map +1 -1
  615. package/dist/text/index.js +3 -1
  616. package/dist/text/index.js.map +1 -1
  617. package/dist/text/textDomain.d.ts +8 -0
  618. package/dist/text/textDomain.d.ts.map +1 -1
  619. package/dist/text/textDomain.js +2 -1
  620. package/dist/text/textDomain.js.map +1 -1
  621. package/dist/text/textDomainFormatted.d.ts +572 -0
  622. package/dist/text/textDomainFormatted.d.ts.map +1 -0
  623. package/dist/text/textDomainFormatted.js +183 -0
  624. package/dist/text/textDomainFormatted.js.map +1 -0
  625. package/dist/treeFactory.d.ts.map +1 -1
  626. package/dist/treeFactory.js +11 -21
  627. package/dist/treeFactory.js.map +1 -1
  628. package/dist/util/bTreeUtils.d.ts.map +1 -1
  629. package/dist/util/bTreeUtils.js +1 -1
  630. package/dist/util/bTreeUtils.js.map +1 -1
  631. package/dist/util/index.d.ts +1 -1
  632. package/dist/util/index.d.ts.map +1 -1
  633. package/dist/util/index.js +1 -2
  634. package/dist/util/index.js.map +1 -1
  635. package/dist/util/rangeMap.d.ts +12 -24
  636. package/dist/util/rangeMap.d.ts.map +1 -1
  637. package/dist/util/rangeMap.js +6 -46
  638. package/dist/util/rangeMap.js.map +1 -1
  639. package/dist/util/readSnapshotBlob.d.ts +1 -1
  640. package/dist/util/readSnapshotBlob.d.ts.map +1 -1
  641. package/dist/util/readSnapshotBlob.js.map +1 -1
  642. package/docs/main/sequence-field/move-composition.md +46 -0
  643. package/eslint.config.mts +4 -4
  644. package/lib/codec/codec.d.ts +2 -2
  645. package/lib/codec/codec.d.ts.map +1 -1
  646. package/lib/codec/codec.js +1 -1
  647. package/lib/codec/codec.js.map +1 -1
  648. package/lib/codec/versioned/codec.d.ts +1 -1
  649. package/lib/codec/versioned/codec.d.ts.map +1 -1
  650. package/lib/codec/versioned/codec.js +2 -2
  651. package/lib/codec/versioned/codec.js.map +1 -1
  652. package/lib/core/change-family/changeFamily.d.ts +1 -4
  653. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  654. package/lib/core/change-family/changeFamily.js.map +1 -1
  655. package/lib/core/change-family/index.d.ts +1 -1
  656. package/lib/core/change-family/index.d.ts.map +1 -1
  657. package/lib/core/change-family/index.js.map +1 -1
  658. package/lib/core/index.d.ts +3 -3
  659. package/lib/core/index.d.ts.map +1 -1
  660. package/lib/core/index.js +2 -2
  661. package/lib/core/index.js.map +1 -1
  662. package/lib/core/rebase/changeRebaser.d.ts +1 -6
  663. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  664. package/lib/core/rebase/changeRebaser.js.map +1 -1
  665. package/lib/core/rebase/index.d.ts +1 -1
  666. package/lib/core/rebase/index.d.ts.map +1 -1
  667. package/lib/core/rebase/index.js +1 -1
  668. package/lib/core/rebase/index.js.map +1 -1
  669. package/lib/core/rebase/types.d.ts +1 -2
  670. package/lib/core/rebase/types.d.ts.map +1 -1
  671. package/lib/core/rebase/types.js +0 -3
  672. package/lib/core/rebase/types.js.map +1 -1
  673. package/lib/core/rebase/utils.d.ts.map +1 -1
  674. package/lib/core/rebase/utils.js +7 -25
  675. package/lib/core/rebase/utils.js.map +1 -1
  676. package/lib/core/schema-stored/formatV2.d.ts.map +1 -1
  677. package/lib/core/schema-stored/formatV2.js +1 -1
  678. package/lib/core/schema-stored/formatV2.js.map +1 -1
  679. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  680. package/lib/core/tree/anchorSet.js +1 -1
  681. package/lib/core/tree/anchorSet.js.map +1 -1
  682. package/lib/core/tree/detachedFieldIndex.d.ts +0 -6
  683. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  684. package/lib/core/tree/detachedFieldIndex.js +1 -10
  685. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  686. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +1 -1
  687. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -1
  688. package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -1
  689. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -1
  690. package/lib/core/tree/detachedFieldIndexCodecV1.js +1 -1
  691. package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -1
  692. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -1
  693. package/lib/core/tree/detachedFieldIndexCodecV2.js +2 -2
  694. package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -1
  695. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -1
  696. package/lib/core/tree/detachedFieldIndexFormatV1.js +2 -2
  697. package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -1
  698. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
  699. package/lib/core/tree/detachedFieldIndexFormatV2.js +2 -2
  700. package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
  701. package/lib/core/tree/index.d.ts +1 -1
  702. package/lib/core/tree/index.d.ts.map +1 -1
  703. package/lib/core/tree/index.js +1 -1
  704. package/lib/core/tree/index.js.map +1 -1
  705. package/lib/core/tree/pathTree.d.ts +3 -11
  706. package/lib/core/tree/pathTree.d.ts.map +1 -1
  707. package/lib/core/tree/pathTree.js +1 -12
  708. package/lib/core/tree/pathTree.js.map +1 -1
  709. package/lib/core/tree/visitDelta.d.ts +1 -1
  710. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  711. package/lib/core/tree/visitDelta.js.map +1 -1
  712. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  713. package/lib/core/tree/visitorUtils.js +1 -1
  714. package/lib/core/tree/visitorUtils.js.map +1 -1
  715. package/lib/feature-libraries/changeAtomIdBTree.d.ts +3 -4
  716. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  717. package/lib/feature-libraries/changeAtomIdBTree.js +1 -14
  718. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  719. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  720. package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -8
  721. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  722. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +1 -1
  723. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  724. package/lib/feature-libraries/chunked-forest/chunkTree.js +1 -4
  725. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  726. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +1 -1
  727. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  728. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  729. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +1 -1
  730. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  731. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  732. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +1 -1
  733. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
  734. package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
  735. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
  736. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  737. package/lib/feature-libraries/chunked-forest/codec/codecs.js +1 -1
  738. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  739. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
  740. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  741. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  742. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  743. package/lib/feature-libraries/chunked-forest/codec/format.js +1 -1
  744. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  745. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.d.ts.map +1 -1
  746. package/lib/feature-libraries/chunked-forest/codec/formatGeneric.js.map +1 -1
  747. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +1 -1
  748. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  749. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +2 -2
  750. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  751. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +44 -93
  752. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  753. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +73 -237
  754. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  755. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +11 -53
  756. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  757. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +6 -56
  758. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  759. package/lib/feature-libraries/default-schema/index.d.ts +2 -3
  760. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  761. package/lib/feature-libraries/default-schema/index.js +1 -2
  762. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  763. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +6 -7
  764. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  765. package/lib/feature-libraries/default-schema/mappedEditBuilder.js +0 -15
  766. package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  767. package/lib/feature-libraries/deltaUtils.d.ts +0 -1
  768. package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
  769. package/lib/feature-libraries/deltaUtils.js +1 -5
  770. package/lib/feature-libraries/deltaUtils.js.map +1 -1
  771. package/lib/feature-libraries/fieldKindIdentifiers.d.ts +9 -0
  772. package/lib/feature-libraries/fieldKindIdentifiers.d.ts.map +1 -0
  773. package/lib/feature-libraries/fieldKindIdentifiers.js +13 -0
  774. package/lib/feature-libraries/fieldKindIdentifiers.js.map +1 -0
  775. package/lib/feature-libraries/flex-tree/context.d.ts +0 -9
  776. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  777. package/lib/feature-libraries/flex-tree/context.js +0 -6
  778. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  779. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  780. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  781. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  782. package/lib/feature-libraries/flex-tree/lazyField.d.ts +7 -8
  783. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  784. package/lib/feature-libraries/flex-tree/lazyField.js +11 -42
  785. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  786. package/lib/feature-libraries/flex-tree/observer.d.ts +1 -1
  787. package/lib/feature-libraries/flex-tree/observer.d.ts.map +1 -1
  788. package/lib/feature-libraries/flex-tree/observer.js.map +1 -1
  789. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  790. package/lib/feature-libraries/forest-summary/codec.js +1 -1
  791. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  792. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  793. package/lib/feature-libraries/forest-summary/forestSummarizer.js +3 -3
  794. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  795. package/lib/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  796. package/lib/feature-libraries/forest-summary/formatV1.js.map +1 -1
  797. package/lib/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  798. package/lib/feature-libraries/forest-summary/formatV2.js.map +1 -1
  799. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -4
  800. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  801. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -2
  802. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  803. package/lib/feature-libraries/forest-summary/summaryTypes.d.ts.map +1 -1
  804. package/lib/feature-libraries/forest-summary/summaryTypes.js.map +1 -1
  805. package/lib/feature-libraries/index.d.ts +3 -3
  806. package/lib/feature-libraries/index.d.ts.map +1 -1
  807. package/lib/feature-libraries/index.js +2 -2
  808. package/lib/feature-libraries/index.js.map +1 -1
  809. package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  810. package/lib/feature-libraries/mapTreeCursor.js +1 -2
  811. package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
  812. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  813. package/lib/feature-libraries/mitigatedChangeFamily.js +2 -2
  814. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  815. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +21 -97
  816. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  817. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +5 -3
  818. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  819. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +51 -20
  820. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  821. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  822. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.d.ts.map +1 -1
  823. package/lib/feature-libraries/modular-schema/fieldKindConfiguration.js.map +1 -1
  824. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -1
  825. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  826. package/lib/feature-libraries/modular-schema/genericFieldKind.js +11 -5
  827. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  828. package/lib/feature-libraries/modular-schema/index.d.ts +4 -4
  829. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  830. package/lib/feature-libraries/modular-schema/index.js +2 -2
  831. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  832. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +28 -11
  833. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  834. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +144 -246
  835. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  836. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  837. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  838. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  839. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  840. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +1 -8
  841. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  842. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +21 -49
  843. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  844. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +463 -1319
  845. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  846. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  847. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  848. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +8 -44
  849. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  850. package/lib/feature-libraries/modular-schema/modularChangeTypes.js +1 -1
  851. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  852. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  853. package/lib/feature-libraries/object-forest/objectForest.js +2 -2
  854. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  855. package/lib/feature-libraries/optional-field/index.d.ts +2 -2
  856. package/lib/feature-libraries/optional-field/index.d.ts.map +1 -1
  857. package/lib/feature-libraries/optional-field/index.js +2 -2
  858. package/lib/feature-libraries/optional-field/index.js.map +1 -1
  859. package/lib/feature-libraries/optional-field/optionalField.d.ts +34 -5
  860. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  861. package/lib/feature-libraries/optional-field/optionalField.js +453 -221
  862. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  863. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +33 -24
  864. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  865. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  866. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  867. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  868. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +26 -55
  869. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  870. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  871. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
  872. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  873. package/lib/feature-libraries/optional-field/requiredField.d.ts +36 -0
  874. package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -0
  875. package/lib/feature-libraries/optional-field/requiredField.js +24 -0
  876. package/lib/feature-libraries/optional-field/requiredField.js.map +1 -0
  877. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts +1 -1
  878. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
  879. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +1 -1
  880. package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
  881. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
  882. package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
  883. package/lib/feature-libraries/schemaChecker.d.ts.map +1 -1
  884. package/lib/feature-libraries/schemaChecker.js +1 -1
  885. package/lib/feature-libraries/schemaChecker.js.map +1 -1
  886. package/lib/feature-libraries/sequence-field/compose.d.ts +7 -6
  887. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  888. package/lib/feature-libraries/sequence-field/compose.js +261 -85
  889. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  890. package/lib/feature-libraries/sequence-field/helperTypes.d.ts +10 -14
  891. package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  892. package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  893. package/lib/feature-libraries/sequence-field/index.d.ts +2 -13
  894. package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
  895. package/lib/feature-libraries/sequence-field/index.js +1 -12
  896. package/lib/feature-libraries/sequence-field/index.js.map +1 -1
  897. package/lib/feature-libraries/sequence-field/invert.d.ts +3 -3
  898. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  899. package/lib/feature-libraries/sequence-field/invert.js +169 -67
  900. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  901. package/lib/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  902. package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  903. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  904. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +56 -4
  905. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  906. package/lib/feature-libraries/sequence-field/moveEffectTable.js +84 -6
  907. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  908. package/lib/feature-libraries/sequence-field/rebase.d.ts +3 -3
  909. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  910. package/lib/feature-libraries/sequence-field/rebase.js +116 -109
  911. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  912. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +9 -0
  913. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +1 -0
  914. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +46 -0
  915. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +1 -0
  916. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  917. package/lib/feature-libraries/sequence-field/replaceRevisions.js +31 -18
  918. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  919. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  920. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -0
  921. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  922. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -22
  923. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  924. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +182 -356
  925. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  926. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  927. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +63 -21
  928. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  929. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  930. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  931. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +10 -10
  932. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  933. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
  934. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  935. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +109 -14
  936. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  937. package/lib/feature-libraries/sequence-field/sequenceKind.d.ts +16 -0
  938. package/lib/feature-libraries/sequence-field/sequenceKind.d.ts.map +1 -0
  939. package/lib/feature-libraries/sequence-field/sequenceKind.js +21 -0
  940. package/lib/feature-libraries/sequence-field/sequenceKind.js.map +1 -0
  941. package/lib/feature-libraries/sequence-field/types.d.ts +59 -30
  942. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  943. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  944. package/lib/feature-libraries/sequence-field/utils.d.ts +24 -15
  945. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  946. package/lib/feature-libraries/sequence-field/utils.js +298 -112
  947. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  948. package/lib/index.d.ts +1 -1
  949. package/lib/index.d.ts.map +1 -1
  950. package/lib/index.js +1 -1
  951. package/lib/index.js.map +1 -1
  952. package/lib/packageVersion.d.ts +1 -1
  953. package/lib/packageVersion.d.ts.map +1 -1
  954. package/lib/packageVersion.js +1 -1
  955. package/lib/packageVersion.js.map +1 -1
  956. package/lib/shared-tree/independentView.d.ts.map +1 -1
  957. package/lib/shared-tree/independentView.js +3 -3
  958. package/lib/shared-tree/independentView.js.map +1 -1
  959. package/lib/shared-tree/index.d.ts +1 -1
  960. package/lib/shared-tree/index.d.ts.map +1 -1
  961. package/lib/shared-tree/index.js.map +1 -1
  962. package/lib/shared-tree/schematizeTree.d.ts +4 -4
  963. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  964. package/lib/shared-tree/schematizeTree.js +2 -3
  965. package/lib/shared-tree/schematizeTree.js.map +1 -1
  966. package/lib/shared-tree/schematizingTreeView.d.ts +5 -1
  967. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  968. package/lib/shared-tree/schematizingTreeView.js +42 -43
  969. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  970. package/lib/shared-tree/sharedTree.d.ts +5 -11
  971. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  972. package/lib/shared-tree/sharedTree.js +5 -43
  973. package/lib/shared-tree/sharedTree.js.map +1 -1
  974. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +1 -1
  975. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  976. package/lib/shared-tree/sharedTreeChangeCodecs.js +0 -1
  977. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  978. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts +31 -24
  979. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  980. package/lib/shared-tree/sharedTreeChangeEnricher.js +74 -56
  981. package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  982. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +5 -5
  983. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  984. package/lib/shared-tree/sharedTreeChangeFamily.js +5 -11
  985. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  986. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +6 -16
  987. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  988. package/lib/shared-tree/sharedTreeEditBuilder.js +6 -12
  989. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  990. package/lib/shared-tree/tree.d.ts.map +1 -1
  991. package/lib/shared-tree/tree.js +7 -7
  992. package/lib/shared-tree/tree.js.map +1 -1
  993. package/lib/shared-tree/treeAlpha.d.ts +1 -1
  994. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  995. package/lib/shared-tree/treeAlpha.js +3 -3
  996. package/lib/shared-tree/treeAlpha.js.map +1 -1
  997. package/lib/shared-tree/treeCheckout.d.ts +29 -13
  998. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  999. package/lib/shared-tree/treeCheckout.js +55 -54
  1000. package/lib/shared-tree/treeCheckout.js.map +1 -1
  1001. package/lib/shared-tree-core/branch.d.ts +3 -4
  1002. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  1003. package/lib/shared-tree-core/branch.js +3 -4
  1004. package/lib/shared-tree-core/branch.js.map +1 -1
  1005. package/lib/shared-tree-core/branchCommitEnricher.d.ts +18 -31
  1006. package/lib/shared-tree-core/branchCommitEnricher.d.ts.map +1 -1
  1007. package/lib/shared-tree-core/branchCommitEnricher.js +24 -76
  1008. package/lib/shared-tree-core/branchCommitEnricher.js.map +1 -1
  1009. package/lib/shared-tree-core/branchIdCodec.d.ts.map +1 -1
  1010. package/lib/shared-tree-core/branchIdCodec.js.map +1 -1
  1011. package/lib/shared-tree-core/changeEnricher.d.ts +8 -43
  1012. package/lib/shared-tree-core/changeEnricher.d.ts.map +1 -1
  1013. package/lib/shared-tree-core/changeEnricher.js +1 -11
  1014. package/lib/shared-tree-core/changeEnricher.js.map +1 -1
  1015. package/lib/shared-tree-core/defaultResubmitMachine.d.ts +4 -12
  1016. package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
  1017. package/lib/shared-tree-core/defaultResubmitMachine.js +28 -38
  1018. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  1019. package/lib/shared-tree-core/editManager.d.ts +3 -3
  1020. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  1021. package/lib/shared-tree-core/editManager.js +11 -11
  1022. package/lib/shared-tree-core/editManager.js.map +1 -1
  1023. package/lib/shared-tree-core/editManagerCodecs.d.ts +1 -5
  1024. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  1025. package/lib/shared-tree-core/editManagerCodecs.js +1 -8
  1026. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  1027. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +1 -1
  1028. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  1029. package/lib/shared-tree-core/editManagerCodecsCommons.js +1 -2
  1030. package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  1031. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  1032. package/lib/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
  1033. package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  1034. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  1035. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
  1036. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  1037. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +0 -1
  1038. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  1039. package/lib/shared-tree-core/editManagerFormatCommons.js +0 -6
  1040. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  1041. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  1042. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  1043. package/lib/shared-tree-core/editManagerFormatV1toV4.js +0 -1
  1044. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  1045. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts +1 -1
  1046. package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
  1047. package/lib/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
  1048. package/lib/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
  1049. package/lib/shared-tree-core/index.d.ts +4 -4
  1050. package/lib/shared-tree-core/index.d.ts.map +1 -1
  1051. package/lib/shared-tree-core/index.js +2 -3
  1052. package/lib/shared-tree-core/index.js.map +1 -1
  1053. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
  1054. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  1055. package/lib/shared-tree-core/messageCodecV1ToV4.js +1 -1
  1056. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  1057. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts +1 -1
  1058. package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
  1059. package/lib/shared-tree-core/messageCodecVSharedBranches.js +2 -2
  1060. package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
  1061. package/lib/shared-tree-core/messageCodecs.d.ts +2 -6
  1062. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  1063. package/lib/shared-tree-core/messageCodecs.js +1 -8
  1064. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  1065. package/lib/shared-tree-core/messageFormat.d.ts +0 -1
  1066. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  1067. package/lib/shared-tree-core/messageFormat.js +0 -6
  1068. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  1069. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  1070. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  1071. package/lib/shared-tree-core/messageFormatV1ToV4.js +0 -1
  1072. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  1073. package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
  1074. package/lib/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
  1075. package/lib/shared-tree-core/messageTypes.d.ts.map +1 -1
  1076. package/lib/shared-tree-core/messageTypes.js.map +1 -1
  1077. package/lib/shared-tree-core/sharedTreeCore.d.ts +8 -5
  1078. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  1079. package/lib/shared-tree-core/sharedTreeCore.js +15 -15
  1080. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  1081. package/lib/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  1082. package/lib/shared-tree-core/versionedSummarizer.js +1 -1
  1083. package/lib/shared-tree-core/versionedSummarizer.js.map +1 -1
  1084. package/lib/simple-tree/api/configuration.d.ts +2 -2
  1085. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  1086. package/lib/simple-tree/api/configuration.js +4 -4
  1087. package/lib/simple-tree/api/configuration.js.map +1 -1
  1088. package/lib/simple-tree/api/create.d.ts +1 -1
  1089. package/lib/simple-tree/api/create.d.ts.map +1 -1
  1090. package/lib/simple-tree/api/create.js +1 -1
  1091. package/lib/simple-tree/api/create.js.map +1 -1
  1092. package/lib/simple-tree/api/dirtyIndex.d.ts +1 -1
  1093. package/lib/simple-tree/api/dirtyIndex.d.ts.map +1 -1
  1094. package/lib/simple-tree/api/dirtyIndex.js.map +1 -1
  1095. package/lib/simple-tree/api/discrepancies.d.ts.map +1 -1
  1096. package/lib/simple-tree/api/discrepancies.js +3 -3
  1097. package/lib/simple-tree/api/discrepancies.js.map +1 -1
  1098. package/lib/simple-tree/api/getJsonSchema.d.ts +1 -1
  1099. package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  1100. package/lib/simple-tree/api/getJsonSchema.js +1 -1
  1101. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  1102. package/lib/simple-tree/api/identifierIndex.d.ts +2 -2
  1103. package/lib/simple-tree/api/identifierIndex.d.ts.map +1 -1
  1104. package/lib/simple-tree/api/identifierIndex.js.map +1 -1
  1105. package/lib/simple-tree/api/incrementalAllowedTypes.d.ts +1 -1
  1106. package/lib/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -1
  1107. package/lib/simple-tree/api/incrementalAllowedTypes.js +3 -3
  1108. package/lib/simple-tree/api/incrementalAllowedTypes.js.map +1 -1
  1109. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +1 -1
  1110. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  1111. package/lib/simple-tree/api/schemaCompatibilityTester.js +1 -1
  1112. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  1113. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +2 -2
  1114. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  1115. package/lib/simple-tree/api/schemaCreationUtilities.js +1 -1
  1116. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  1117. package/lib/simple-tree/api/schemaFactory.d.ts +2 -2
  1118. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  1119. package/lib/simple-tree/api/schemaFactory.js +2 -2
  1120. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  1121. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +6 -6
  1122. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  1123. package/lib/simple-tree/api/schemaFactoryAlpha.js +1 -1
  1124. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  1125. package/lib/simple-tree/api/schemaFactoryBeta.d.ts +2 -2
  1126. package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  1127. package/lib/simple-tree/api/schemaFactoryBeta.js +1 -0
  1128. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  1129. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
  1130. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  1131. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  1132. package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  1133. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  1134. package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -1
  1135. package/lib/simple-tree/api/schemaStatics.js.map +1 -1
  1136. package/lib/simple-tree/api/simpleSchemaCodec.d.ts +1 -1
  1137. package/lib/simple-tree/api/simpleSchemaCodec.d.ts.map +1 -1
  1138. package/lib/simple-tree/api/simpleSchemaCodec.js +3 -3
  1139. package/lib/simple-tree/api/simpleSchemaCodec.js.map +1 -1
  1140. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts +2 -2
  1141. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  1142. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +2 -2
  1143. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  1144. package/lib/simple-tree/api/simpleTreeIndex.d.ts +1 -1
  1145. package/lib/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
  1146. package/lib/simple-tree/api/simpleTreeIndex.js +1 -1
  1147. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  1148. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  1149. package/lib/simple-tree/api/snapshotCompatibilityChecker.js +5 -5
  1150. package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  1151. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  1152. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  1153. package/lib/simple-tree/api/tree.d.ts +2 -2
  1154. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  1155. package/lib/simple-tree/api/tree.js.map +1 -1
  1156. package/lib/simple-tree/api/treeBeta.d.ts +1 -1
  1157. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  1158. package/lib/simple-tree/api/treeBeta.js +2 -2
  1159. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  1160. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
  1161. package/lib/simple-tree/api/treeNodeApi.js +4 -4
  1162. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  1163. package/lib/simple-tree/api/typesUnsafe.d.ts +1 -1
  1164. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  1165. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  1166. package/lib/simple-tree/api/verboseTree.d.ts +1 -1
  1167. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  1168. package/lib/simple-tree/api/verboseTree.js +3 -3
  1169. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  1170. package/lib/simple-tree/core/allowedTypes.d.ts +1 -1
  1171. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  1172. package/lib/simple-tree/core/allowedTypes.js +2 -2
  1173. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  1174. package/lib/simple-tree/core/context.d.ts.map +1 -1
  1175. package/lib/simple-tree/core/context.js.map +1 -1
  1176. package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
  1177. package/lib/simple-tree/core/treeNode.js +1 -1
  1178. package/lib/simple-tree/core/treeNode.js.map +1 -1
  1179. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  1180. package/lib/simple-tree/core/treeNodeKernel.js +1 -3
  1181. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  1182. package/lib/simple-tree/core/treeNodeSchema.d.ts +5 -5
  1183. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  1184. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  1185. package/lib/simple-tree/core/treeNodeValid.d.ts +3 -3
  1186. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  1187. package/lib/simple-tree/core/treeNodeValid.js +2 -2
  1188. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  1189. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +16 -16
  1190. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  1191. package/lib/simple-tree/core/unhydratedFlexTree.js +8 -58
  1192. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  1193. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  1194. package/lib/simple-tree/core/withType.js.map +1 -1
  1195. package/lib/simple-tree/createContext.d.ts.map +1 -1
  1196. package/lib/simple-tree/createContext.js.map +1 -1
  1197. package/lib/simple-tree/fieldSchema.d.ts +5 -5
  1198. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  1199. package/lib/simple-tree/fieldSchema.js.map +1 -1
  1200. package/lib/simple-tree/index.d.ts +2 -2
  1201. package/lib/simple-tree/index.d.ts.map +1 -1
  1202. package/lib/simple-tree/index.js +1 -1
  1203. package/lib/simple-tree/index.js.map +1 -1
  1204. package/lib/simple-tree/leafNodeSchema.d.ts +1 -1
  1205. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  1206. package/lib/simple-tree/leafNodeSchema.js +2 -2
  1207. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  1208. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +1 -1
  1209. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  1210. package/lib/simple-tree/node-kinds/array/arrayNode.js +6 -8
  1211. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  1212. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +1 -1
  1213. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
  1214. package/lib/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
  1215. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
  1216. package/lib/simple-tree/node-kinds/common.js +2 -2
  1217. package/lib/simple-tree/node-kinds/common.js.map +1 -1
  1218. package/lib/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
  1219. package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
  1220. package/lib/simple-tree/node-kinds/map/mapNode.js +8 -8
  1221. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  1222. package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts +1 -1
  1223. package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
  1224. package/lib/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
  1225. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
  1226. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  1227. package/lib/simple-tree/node-kinds/object/objectNode.js +22 -22
  1228. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  1229. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +3 -3
  1230. package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
  1231. package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
  1232. package/lib/simple-tree/node-kinds/record/recordNode.d.ts +1 -1
  1233. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  1234. package/lib/simple-tree/node-kinds/record/recordNode.js +6 -8
  1235. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  1236. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +1 -1
  1237. package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
  1238. package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
  1239. package/lib/simple-tree/prepareForInsertion.d.ts +47 -54
  1240. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  1241. package/lib/simple-tree/prepareForInsertion.js +125 -184
  1242. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  1243. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  1244. package/lib/simple-tree/simpleSchema.js.map +1 -1
  1245. package/lib/simple-tree/treeSchema.d.ts.map +1 -1
  1246. package/lib/simple-tree/treeSchema.js.map +1 -1
  1247. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +4 -13
  1248. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  1249. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +13 -30
  1250. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  1251. package/lib/tableSchema.d.ts.map +1 -1
  1252. package/lib/tableSchema.js +2 -1
  1253. package/lib/tableSchema.js.map +1 -1
  1254. package/lib/text/index.d.ts +1 -0
  1255. package/lib/text/index.d.ts.map +1 -1
  1256. package/lib/text/index.js +1 -0
  1257. package/lib/text/index.js.map +1 -1
  1258. package/lib/text/textDomain.d.ts +8 -0
  1259. package/lib/text/textDomain.d.ts.map +1 -1
  1260. package/lib/text/textDomain.js +1 -1
  1261. package/lib/text/textDomain.js.map +1 -1
  1262. package/lib/text/textDomainFormatted.d.ts +572 -0
  1263. package/lib/text/textDomainFormatted.d.ts.map +1 -0
  1264. package/lib/text/textDomainFormatted.js +180 -0
  1265. package/lib/text/textDomainFormatted.js.map +1 -0
  1266. package/lib/treeFactory.d.ts.map +1 -1
  1267. package/lib/treeFactory.js +4 -14
  1268. package/lib/treeFactory.js.map +1 -1
  1269. package/lib/util/bTreeUtils.d.ts.map +1 -1
  1270. package/lib/util/bTreeUtils.js +1 -1
  1271. package/lib/util/bTreeUtils.js.map +1 -1
  1272. package/lib/util/index.d.ts +1 -1
  1273. package/lib/util/index.d.ts.map +1 -1
  1274. package/lib/util/index.js +1 -1
  1275. package/lib/util/index.js.map +1 -1
  1276. package/lib/util/rangeMap.d.ts +12 -24
  1277. package/lib/util/rangeMap.d.ts.map +1 -1
  1278. package/lib/util/rangeMap.js +5 -44
  1279. package/lib/util/rangeMap.js.map +1 -1
  1280. package/lib/util/readSnapshotBlob.d.ts +1 -1
  1281. package/lib/util/readSnapshotBlob.d.ts.map +1 -1
  1282. package/lib/util/readSnapshotBlob.js.map +1 -1
  1283. package/package.json +22 -22
  1284. package/src/codec/codec.ts +10 -7
  1285. package/src/codec/versioned/codec.ts +3 -3
  1286. package/src/core/change-family/changeFamily.ts +0 -5
  1287. package/src/core/change-family/index.ts +0 -1
  1288. package/src/core/index.ts +1 -4
  1289. package/src/core/rebase/changeRebaser.ts +1 -6
  1290. package/src/core/rebase/index.ts +0 -1
  1291. package/src/core/rebase/types.ts +1 -8
  1292. package/src/core/rebase/utils.ts +7 -31
  1293. package/src/core/schema-stored/formatV2.ts +2 -1
  1294. package/src/core/tree/anchorSet.ts +1 -1
  1295. package/src/core/tree/detachedFieldIndex.ts +2 -18
  1296. package/src/core/tree/detachedFieldIndexCodecCommon.ts +2 -1
  1297. package/src/core/tree/detachedFieldIndexCodecV1.ts +2 -2
  1298. package/src/core/tree/detachedFieldIndexCodecV2.ts +3 -3
  1299. package/src/core/tree/detachedFieldIndexFormatV1.ts +3 -2
  1300. package/src/core/tree/detachedFieldIndexFormatV2.ts +3 -2
  1301. package/src/core/tree/index.ts +1 -2
  1302. package/src/core/tree/pathTree.ts +4 -16
  1303. package/src/core/tree/visitDelta.ts +2 -3
  1304. package/src/core/tree/visitorUtils.ts +2 -1
  1305. package/src/feature-libraries/changeAtomIdBTree.ts +4 -28
  1306. package/src/feature-libraries/chunked-forest/basicChunk.ts +1 -7
  1307. package/src/feature-libraries/chunked-forest/chunkTree.ts +2 -7
  1308. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +1 -1
  1309. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +1 -1
  1310. package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +1 -1
  1311. package/src/feature-libraries/chunked-forest/codec/codecs.ts +2 -2
  1312. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +1 -1
  1313. package/src/feature-libraries/chunked-forest/codec/format.ts +1 -1
  1314. package/src/feature-libraries/chunked-forest/codec/formatGeneric.ts +1 -0
  1315. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +3 -3
  1316. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +128 -405
  1317. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +27 -123
  1318. package/src/feature-libraries/default-schema/index.ts +5 -22
  1319. package/src/feature-libraries/default-schema/mappedEditBuilder.ts +9 -35
  1320. package/src/feature-libraries/deltaUtils.ts +1 -6
  1321. package/src/feature-libraries/fieldKindIdentifiers.ts +16 -0
  1322. package/src/feature-libraries/flex-tree/context.ts +0 -17
  1323. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +8 -7
  1324. package/src/feature-libraries/flex-tree/lazyField.ts +26 -69
  1325. package/src/feature-libraries/flex-tree/observer.ts +3 -1
  1326. package/src/feature-libraries/forest-summary/codec.ts +1 -1
  1327. package/src/feature-libraries/forest-summary/forestSummarizer.ts +6 -6
  1328. package/src/feature-libraries/forest-summary/formatV1.ts +1 -0
  1329. package/src/feature-libraries/forest-summary/formatV2.ts +1 -0
  1330. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +9 -7
  1331. package/src/feature-libraries/forest-summary/summaryTypes.ts +1 -0
  1332. package/src/feature-libraries/index.ts +8 -27
  1333. package/src/feature-libraries/mapTreeCursor.ts +2 -3
  1334. package/src/feature-libraries/mitigatedChangeFamily.ts +1 -3
  1335. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +44 -142
  1336. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +58 -32
  1337. package/src/feature-libraries/modular-schema/fieldKindConfiguration.ts +1 -0
  1338. package/src/feature-libraries/modular-schema/genericFieldKind.ts +20 -8
  1339. package/src/feature-libraries/modular-schema/index.ts +15 -16
  1340. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +336 -543
  1341. package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +2 -2
  1342. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +3 -15
  1343. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +753 -2582
  1344. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +0 -1
  1345. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +8 -55
  1346. package/src/feature-libraries/object-forest/objectForest.ts +2 -2
  1347. package/src/feature-libraries/optional-field/index.ts +5 -5
  1348. package/src/feature-libraries/optional-field/optionalField.ts +592 -317
  1349. package/src/feature-libraries/optional-field/optionalFieldChangeTypes.ts +38 -24
  1350. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +35 -89
  1351. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +1 -5
  1352. package/src/feature-libraries/optional-field/requiredField.ts +62 -0
  1353. package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +1 -1
  1354. package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +1 -0
  1355. package/src/feature-libraries/schemaChecker.ts +3 -2
  1356. package/src/feature-libraries/sequence-field/compose.ts +522 -139
  1357. package/src/feature-libraries/sequence-field/helperTypes.ts +19 -34
  1358. package/src/feature-libraries/sequence-field/index.ts +2 -42
  1359. package/src/feature-libraries/sequence-field/invert.ts +228 -103
  1360. package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
  1361. package/src/feature-libraries/sequence-field/moveEffectTable.ts +195 -8
  1362. package/src/feature-libraries/sequence-field/rebase.ts +205 -169
  1363. package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +57 -0
  1364. package/src/feature-libraries/sequence-field/replaceRevisions.ts +47 -25
  1365. package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +2 -0
  1366. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +228 -648
  1367. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +70 -56
  1368. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +27 -25
  1369. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +129 -19
  1370. package/src/feature-libraries/sequence-field/sequenceKind.ts +40 -0
  1371. package/src/feature-libraries/sequence-field/types.ts +64 -34
  1372. package/src/feature-libraries/sequence-field/utils.ts +353 -139
  1373. package/src/index.ts +1 -1
  1374. package/src/packageVersion.ts +1 -1
  1375. package/src/shared-tree/independentView.ts +4 -3
  1376. package/src/shared-tree/index.ts +2 -3
  1377. package/src/shared-tree/schematizeTree.ts +8 -21
  1378. package/src/shared-tree/schematizingTreeView.ts +79 -61
  1379. package/src/shared-tree/sharedTree.ts +10 -64
  1380. package/src/shared-tree/sharedTreeChangeCodecs.ts +2 -5
  1381. package/src/shared-tree/sharedTreeChangeEnricher.ts +87 -68
  1382. package/src/shared-tree/sharedTreeChangeFamily.ts +5 -15
  1383. package/src/shared-tree/sharedTreeEditBuilder.ts +8 -39
  1384. package/src/shared-tree/tree.ts +10 -10
  1385. package/src/shared-tree/treeAlpha.ts +26 -25
  1386. package/src/shared-tree/treeCheckout.ts +119 -94
  1387. package/src/shared-tree-core/branch.ts +6 -12
  1388. package/src/shared-tree-core/branchCommitEnricher.ts +25 -77
  1389. package/src/shared-tree-core/branchIdCodec.ts +1 -0
  1390. package/src/shared-tree-core/changeEnricher.ts +8 -52
  1391. package/src/shared-tree-core/defaultResubmitMachine.ts +39 -51
  1392. package/src/shared-tree-core/editManager.ts +8 -22
  1393. package/src/shared-tree-core/editManagerCodecs.ts +3 -13
  1394. package/src/shared-tree-core/editManagerCodecsCommons.ts +7 -6
  1395. package/src/shared-tree-core/editManagerCodecsV1toV4.ts +1 -1
  1396. package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +2 -2
  1397. package/src/shared-tree-core/editManagerFormatCommons.ts +1 -6
  1398. package/src/shared-tree-core/editManagerFormatV1toV4.ts +2 -3
  1399. package/src/shared-tree-core/editManagerFormatVSharedBranches.ts +3 -2
  1400. package/src/shared-tree-core/index.ts +2 -7
  1401. package/src/shared-tree-core/messageCodecV1ToV4.ts +4 -5
  1402. package/src/shared-tree-core/messageCodecVSharedBranches.ts +4 -4
  1403. package/src/shared-tree-core/messageCodecs.ts +3 -13
  1404. package/src/shared-tree-core/messageFormat.ts +0 -6
  1405. package/src/shared-tree-core/messageFormatV1ToV4.ts +2 -3
  1406. package/src/shared-tree-core/messageFormatVSharedBranches.ts +1 -0
  1407. package/src/shared-tree-core/messageTypes.ts +1 -0
  1408. package/src/shared-tree-core/sharedTreeCore.ts +27 -31
  1409. package/src/shared-tree-core/versionedSummarizer.ts +3 -1
  1410. package/src/simple-tree/api/configuration.ts +9 -9
  1411. package/src/simple-tree/api/create.ts +7 -6
  1412. package/src/simple-tree/api/dirtyIndex.ts +4 -2
  1413. package/src/simple-tree/api/discrepancies.ts +9 -8
  1414. package/src/simple-tree/api/getJsonSchema.ts +4 -3
  1415. package/src/simple-tree/api/identifierIndex.ts +4 -2
  1416. package/src/simple-tree/api/incrementalAllowedTypes.ts +6 -5
  1417. package/src/simple-tree/api/schemaCompatibilityTester.ts +3 -3
  1418. package/src/simple-tree/api/schemaCreationUtilities.ts +4 -3
  1419. package/src/simple-tree/api/schemaFactory.ts +16 -17
  1420. package/src/simple-tree/api/schemaFactoryAlpha.ts +21 -21
  1421. package/src/simple-tree/api/schemaFactoryBeta.ts +17 -15
  1422. package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -1
  1423. package/src/simple-tree/api/schemaFromSimple.ts +1 -1
  1424. package/src/simple-tree/api/schemaStatics.ts +2 -0
  1425. package/src/simple-tree/api/simpleSchemaCodec.ts +12 -11
  1426. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +20 -18
  1427. package/src/simple-tree/api/simpleTreeIndex.ts +6 -4
  1428. package/src/simple-tree/api/snapshotCompatibilityChecker.ts +7 -5
  1429. package/src/simple-tree/api/storedSchema.ts +2 -1
  1430. package/src/simple-tree/api/tree.ts +2 -2
  1431. package/src/simple-tree/api/treeBeta.ts +3 -3
  1432. package/src/simple-tree/api/treeNodeApi.ts +14 -13
  1433. package/src/simple-tree/api/typesUnsafe.ts +7 -8
  1434. package/src/simple-tree/api/verboseTree.ts +6 -5
  1435. package/src/simple-tree/core/allowedTypes.ts +4 -4
  1436. package/src/simple-tree/core/context.ts +1 -1
  1437. package/src/simple-tree/core/treeNode.ts +1 -1
  1438. package/src/simple-tree/core/treeNodeKernel.ts +1 -3
  1439. package/src/simple-tree/core/treeNodeSchema.ts +7 -6
  1440. package/src/simple-tree/core/treeNodeValid.ts +9 -9
  1441. package/src/simple-tree/core/unhydratedFlexTree.ts +37 -88
  1442. package/src/simple-tree/core/withType.ts +3 -2
  1443. package/src/simple-tree/createContext.ts +1 -0
  1444. package/src/simple-tree/fieldSchema.ts +5 -8
  1445. package/src/simple-tree/index.ts +1 -2
  1446. package/src/simple-tree/leafNodeSchema.ts +3 -3
  1447. package/src/simple-tree/node-kinds/array/arrayNode.ts +20 -21
  1448. package/src/simple-tree/node-kinds/array/arrayNodeTypes.ts +2 -2
  1449. package/src/simple-tree/node-kinds/common.ts +6 -3
  1450. package/src/simple-tree/node-kinds/map/mapNode.ts +20 -19
  1451. package/src/simple-tree/node-kinds/map/mapNodeTypes.ts +2 -2
  1452. package/src/simple-tree/node-kinds/object/objectNode.ts +37 -37
  1453. package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +8 -7
  1454. package/src/simple-tree/node-kinds/record/recordNode.ts +21 -22
  1455. package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +1 -2
  1456. package/src/simple-tree/prepareForInsertion.ts +205 -345
  1457. package/src/simple-tree/simpleSchema.ts +1 -0
  1458. package/src/simple-tree/treeSchema.ts +1 -0
  1459. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +16 -44
  1460. package/src/tableSchema.ts +3 -1
  1461. package/src/text/index.ts +1 -0
  1462. package/src/text/textDomain.ts +1 -1
  1463. package/src/text/textDomainFormatted.ts +309 -0
  1464. package/src/treeFactory.ts +8 -18
  1465. package/src/util/bTreeUtils.ts +1 -1
  1466. package/src/util/index.ts +0 -3
  1467. package/src/util/rangeMap.ts +18 -72
  1468. package/src/util/readSnapshotBlob.ts +4 -2
  1469. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +0 -38
  1470. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +0 -1
  1471. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js +0 -132
  1472. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js.map +0 -1
  1473. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +0 -15
  1474. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +0 -1
  1475. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js +0 -393
  1476. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js.map +0 -1
  1477. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +0 -146
  1478. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +0 -1
  1479. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js +0 -32
  1480. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js.map +0 -1
  1481. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +0 -23
  1482. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +0 -1
  1483. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +0 -31
  1484. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +0 -1
  1485. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +0 -12
  1486. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +0 -1
  1487. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +0 -57
  1488. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +0 -1
  1489. package/dist/shared-tree-core/transactionEnricher.d.ts +0 -23
  1490. package/dist/shared-tree-core/transactionEnricher.d.ts.map +0 -1
  1491. package/dist/shared-tree-core/transactionEnricher.js +0 -74
  1492. package/dist/shared-tree-core/transactionEnricher.js.map +0 -1
  1493. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +0 -38
  1494. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +0 -1
  1495. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js +0 -128
  1496. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js.map +0 -1
  1497. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +0 -15
  1498. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +0 -1
  1499. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js +0 -389
  1500. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js.map +0 -1
  1501. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +0 -146
  1502. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +0 -1
  1503. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js +0 -29
  1504. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js.map +0 -1
  1505. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +0 -23
  1506. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +0 -1
  1507. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +0 -27
  1508. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +0 -1
  1509. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +0 -12
  1510. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +0 -1
  1511. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +0 -53
  1512. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +0 -1
  1513. package/lib/shared-tree-core/transactionEnricher.d.ts +0 -23
  1514. package/lib/shared-tree-core/transactionEnricher.d.ts.map +0 -1
  1515. package/lib/shared-tree-core/transactionEnricher.js +0 -70
  1516. package/lib/shared-tree-core/transactionEnricher.js.map +0 -1
  1517. package/src/feature-libraries/default-schema/locationBasedEditBuilder.ts +0 -188
  1518. package/src/feature-libraries/modular-schema/modularChangeCodecV3.ts +0 -760
  1519. package/src/feature-libraries/modular-schema/modularChangeFormatV3.ts +0 -62
  1520. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +0 -45
  1521. package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +0 -94
  1522. package/src/shared-tree-core/transactionEnricher.ts +0 -74
@@ -2,14 +2,14 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { assert, fail } from "@fluidframework/core-utils/internal";
6
5
  import { createEmitter } from "@fluid-internal/client-utils";
6
+ import { assert, fail } from "@fluidframework/core-utils/internal";
7
+ import { TelemetryEventBatcher, } from "@fluidframework/telemetry-utils/internal";
7
8
  import { BTree } from "@tylerbu/sorted-btree-es6";
8
9
  import { findAncestor, findCommonAncestor, mintCommit, tagChange, } from "../core/index.js";
9
10
  import { brand, getOrCreate, mapIterable } from "../util/index.js";
10
11
  import { SharedTreeBranch, onForkTransitive, } from "./branch.js";
11
12
  import { getUpperBoundOfPreviousSequenceId, equalSequenceIds, maxSequenceId, minSequenceId, sequenceIdComparator, } from "./sequenceIdUtils.js";
12
- import { TelemetryEventBatcher, } from "@fluidframework/telemetry-utils/internal";
13
13
  export const minimumPossibleSequenceNumber = brand(Number.MIN_SAFE_INTEGER);
14
14
  const minimumPossibleSequenceId = {
15
15
  sequenceNumber: minimumPossibleSequenceNumber,
@@ -37,7 +37,7 @@ export class EditManager {
37
37
  * @param mintRevisionTag - a function which generates globally unique revision tags
38
38
  * @param onSharedBranchCreated - called when a new shared branch is created. This is not called for the main branch.
39
39
  */
40
- constructor(changeFamily, localSessionId, mintRevisionTag, onSharedBranchCreated, editorOptions, logger) {
40
+ constructor(changeFamily, localSessionId, mintRevisionTag, onSharedBranchCreated, logger) {
41
41
  this.changeFamily = changeFamily;
42
42
  this.localSessionId = localSessionId;
43
43
  this.mintRevisionTag = mintRevisionTag;
@@ -70,8 +70,8 @@ export class EditManager {
70
70
  category: "performance",
71
71
  }, logger, maxRebaseStatsAggregationCount);
72
72
  }
73
- const mainTrunk = new SharedTreeBranch(this.trunkBase, changeFamily, mintRevisionTag, this._events, this.telemetryEventBatcher, editorOptions);
74
- this.createAndAddSharedBranch("main", undefined, undefined, mainTrunk, editorOptions);
73
+ const mainTrunk = new SharedTreeBranch(this.trunkBase, changeFamily, mintRevisionTag, this._events, this.telemetryEventBatcher);
74
+ this.createAndAddSharedBranch("main", undefined, undefined, mainTrunk);
75
75
  }
76
76
  getLocalBranch(branchId) {
77
77
  return this.getSharedBranch(branchId).localBranch;
@@ -311,8 +311,8 @@ export class EditManager {
311
311
  const hadBranch = this.sharedBranches.delete(branchId);
312
312
  assert(hadBranch, 0xc5c /* Expected branch to exist */);
313
313
  }
314
- createAndAddSharedBranch(branchId, sessionId, parent, branch, editorOptions) {
315
- const sharedBranch = this.createSharedBranch(branchId, sessionId, parent, branch, editorOptions);
314
+ createAndAddSharedBranch(branchId, sessionId, parent, branch) {
315
+ const sharedBranch = this.createSharedBranch(branchId, sessionId, parent, branch);
316
316
  this.addSharedBranch(branchId, sharedBranch);
317
317
  return sharedBranch;
318
318
  }
@@ -328,8 +328,8 @@ export class EditManager {
328
328
  this.onSharedBranchCreated?.(branchId);
329
329
  }
330
330
  }
331
- createSharedBranch(branchId, sessionId, parent, branch, editorOptions) {
332
- const sharedBranch = new SharedBranch(parent, branch, branchId, sessionId, minimumPossibleSequenceId, this.changeFamily, this.mintRevisionTag, this._events, this.telemetryEventBatcher, editorOptions);
331
+ createSharedBranch(branchId, sessionId, parent, branch) {
332
+ const sharedBranch = new SharedBranch(parent, branch, branchId, sessionId, minimumPossibleSequenceId, this.changeFamily, this.mintRevisionTag, this._events, this.telemetryEventBatcher);
333
333
  return sharedBranch;
334
334
  }
335
335
  /* eslint-disable jsdoc/check-indentation */
@@ -395,7 +395,7 @@ function getPathFromBase(branchHead, baseBranchHead) {
395
395
  return path;
396
396
  }
397
397
  class SharedBranch {
398
- constructor(parentBranch, trunk, id, sessionId, baseCommitSequenceId, changeFamily, mintRevisionTag, branchTrimmer, telemetryEventBatcher, editorOptions) {
398
+ constructor(parentBranch, trunk, id, sessionId, baseCommitSequenceId, changeFamily, mintRevisionTag, branchTrimmer, telemetryEventBatcher) {
399
399
  this.parentBranch = parentBranch;
400
400
  this.trunk = trunk;
401
401
  this.id = id;
@@ -423,7 +423,7 @@ class SharedBranch {
423
423
  * This does not include an entry for the {@link trunkBase}.
424
424
  */
425
425
  this.commitMetadata = new Map();
426
- this.localBranch = new SharedTreeBranch(this.trunk.getHead(), changeFamily, mintRevisionTag, branchTrimmer, telemetryEventBatcher, editorOptions);
426
+ this.localBranch = new SharedTreeBranch(this.trunk.getHead(), changeFamily, mintRevisionTag, branchTrimmer, telemetryEventBatcher);
427
427
  this.sequenceIdToCommit.set(baseCommitSequenceId, this.trunk.getHead());
428
428
  this.localBranch.events.on("afterChange", (event) => {
429
429
  if (event.type === "append") {
@@ -1 +1 @@
1
- {"version":3,"file":"editManager.js","sourceRoot":"","sources":["../../src/shared-tree-core/editManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, fail } from \"@fluidframework/core-utils/internal\";\nimport { createEmitter } from \"@fluid-internal/client-utils\";\nimport type { SessionId } from \"@fluidframework/id-compressor\";\nimport { BTree } from \"@tylerbu/sorted-btree-es6\";\n\nimport {\n\ttype ChangeFamily,\n\ttype ChangeFamilyEditor,\n\ttype GraphCommit,\n\ttype RevisionTag,\n\tfindAncestor,\n\tfindCommonAncestor,\n\tmintCommit,\n\ttype RebaseStatsWithDuration,\n\ttagChange,\n\ttype EditorOptions,\n} from \"../core/index.js\";\nimport { type Mutable, brand, getOrCreate, mapIterable } from \"../util/index.js\";\n\nimport {\n\tSharedTreeBranch,\n\ttype BranchTrimmingEvents,\n\tonForkTransitive,\n\ttype BranchId,\n} from \"./branch.js\";\nimport type {\n\tCommit,\n\tSeqNumber,\n\tSequenceId,\n\tSequencedCommit,\n\tSummarySessionBranch,\n} from \"./editManagerFormatCommons.js\";\nimport {\n\tgetUpperBoundOfPreviousSequenceId,\n\tequalSequenceIds,\n\tmaxSequenceId,\n\tminSequenceId,\n\tsequenceIdComparator,\n} from \"./sequenceIdUtils.js\";\nimport {\n\tTelemetryEventBatcher,\n\ttype ITelemetryLoggerExt,\n} from \"@fluidframework/telemetry-utils/internal\";\nimport type { Listenable } from \"@fluidframework/core-interfaces\";\n\nexport const minimumPossibleSequenceNumber: SeqNumber = brand(Number.MIN_SAFE_INTEGER);\nconst minimumPossibleSequenceId: SequenceId = {\n\tsequenceNumber: minimumPossibleSequenceNumber,\n};\n\n/**\n * A special revision tag for the initial {@link EditManager.trunkBase} commit.\n * @remarks This tag is used to supply the _initial_ trunk base with a known revision.\n * The trunk base may advance over time, after which point the trunk base will have a different revision.\n * When {@link EditManager.getSummaryData | serializing} and deserializing, peer branches that include the trunk base commit in their history will always use this tag.\n */\nconst rootRevision = \"root\" as const satisfies RevisionTag;\n\n/**\n * Max number of telemetry log call that may be aggregated before being sent.\n */\nconst maxRebaseStatsAggregationCount = 1000;\n\n/**\n * Represents a local branch of a document and interprets the effect on the document of adding sequenced changes,\n * which were based on a given session's branch, to the document history\n */\n// TODO: Try to reduce this to a single type parameter\nexport class EditManager<\n\tTEditor extends ChangeFamilyEditor,\n\tTChangeset,\n\tTChangeFamily extends ChangeFamily<TEditor, TChangeset>,\n> {\n\tprivate readonly _events = createEmitter<BranchTrimmingEvents>();\n\n\tprivate readonly sharedBranches = new Map<BranchId, SharedBranch<TEditor, TChangeset>>();\n\n\t/**\n\t * Tracks where on the trunk of the main branch all registered branches are based.\n\t * Each key is the sequence id of a commit on the trunk,\n\t * and the value is the set of all branches who have that commit as their common ancestor with the trunk.\n\t *\n\t * @remarks\n\t * This does not include the local branch.\n\t */\n\tprivate readonly trunkBranches = new BTree<\n\t\tSequenceId,\n\t\tSet<SharedTreeBranch<TEditor, TChangeset>>\n\t>(undefined, sequenceIdComparator);\n\n\t/**\n\t * The sequence number of the newest commit on the trunk that has been received by all peers.\n\t * Defaults to {@link minimumPossibleSequenceNumber} if no commits have been received.\n\t *\n\t * @remarks If there are more than one commit with the same sequence number we assume this refers to the last commit in the batch.\n\t */\n\tprivate minimumSequenceNumber = minimumPossibleSequenceNumber;\n\n\t/**\n\t * A special commit that is a \"base\" (tail) of the trunk, though not part of the trunk itself.\n\t * This makes it possible to model the trunk in the same way as any other branch (it branches off of a base commit)\n\t * which allows it to use branching APIs to interact with the other branches.\n\t * Each time trunk eviction occurs, the most recent evicted commit becomes the new `trunkBase`.\n\t */\n\tprivate trunkBase: GraphCommit<TChangeset>;\n\n\tprivate readonly telemetryEventBatcher:\n\t\t| TelemetryEventBatcher<keyof RebaseStatsWithDuration>\n\t\t| undefined;\n\n\t/**\n\t * @param changeFamily - the change family of changes on the trunk and local branch\n\t * @param localSessionId - the id of the local session that will be used for local commits\n\t * @param mintRevisionTag - a function which generates globally unique revision tags\n\t * @param onSharedBranchCreated - called when a new shared branch is created. This is not called for the main branch.\n\t */\n\tpublic constructor(\n\t\tpublic readonly changeFamily: TChangeFamily,\n\t\tpublic readonly localSessionId: SessionId,\n\t\tprivate readonly mintRevisionTag: () => RevisionTag,\n\t\tprivate readonly onSharedBranchCreated?: (branchId: BranchId) => void,\n\t\teditorOptions?: EditorOptions,\n\t\tlogger?: ITelemetryLoggerExt,\n\t) {\n\t\tthis.trunkBase = {\n\t\t\trevision: rootRevision,\n\t\t\tchange: changeFamily.rebaser.compose([]),\n\t\t};\n\n\t\tif (logger !== undefined) {\n\t\t\tthis.telemetryEventBatcher = new TelemetryEventBatcher(\n\t\t\t\t{\n\t\t\t\t\teventName: \"rebaseProcessing\",\n\t\t\t\t\tcategory: \"performance\",\n\t\t\t\t},\n\t\t\t\tlogger,\n\t\t\t\tmaxRebaseStatsAggregationCount,\n\t\t\t);\n\t\t}\n\n\t\tconst mainTrunk = new SharedTreeBranch(\n\t\t\tthis.trunkBase,\n\t\t\tchangeFamily,\n\t\t\tmintRevisionTag,\n\t\t\tthis._events,\n\t\t\tthis.telemetryEventBatcher,\n\t\t\teditorOptions,\n\t\t);\n\n\t\tthis.createAndAddSharedBranch(\"main\", undefined, undefined, mainTrunk, editorOptions);\n\t}\n\n\tpublic getLocalBranch(branchId: BranchId): SharedTreeBranch<TEditor, TChangeset> {\n\t\treturn this.getSharedBranch(branchId).localBranch;\n\t}\n\n\tprivate getSharedBranch(branchId: BranchId): SharedBranch<TEditor, TChangeset> {\n\t\treturn this.sharedBranches.get(branchId) ?? fail(0xc56 /* Branch does not exist */);\n\t}\n\n\t/**\n\t * Make the given branch known to the `EditManager`. The `EditManager` will ensure that all registered\n\t * branches remain usable even as the minimum sequence number advances.\n\t *\n\t * TODO#AB6926: Refactor local branch management into a separate class that encapsulates `trunkBranches` and everything\n\t * that touches it.\n\t * TODO#AB6925: Maintain the divergence point between each branch and the trunk so that we don't have to recompute\n\t * it so often.\n\t */\n\tprivate registerBranch(branch: SharedTreeBranch<TEditor, TChangeset>): void {\n\t\tthis.trackBranch(branch);\n\t\t// Whenever the branch is rebased, update our record of its base trunk commit\n\t\tconst offBeforeRebase = branch.events.on(\"beforeChange\", (args) => {\n\t\t\tif (args.type === \"rebase\") {\n\t\t\t\tthis.untrackBranch(branch);\n\t\t\t}\n\t\t});\n\t\tconst offAfterRebase = branch.events.on(\"afterChange\", (args) => {\n\t\t\tif (args.type === \"rebase\") {\n\t\t\t\tthis.trackBranch(branch);\n\t\t\t\tthis.trimHistory();\n\t\t\t}\n\t\t});\n\t\t// When the branch is disposed, update our branch set and trim the trunk\n\t\tconst offDispose = branch.events.on(\"dispose\", () => {\n\t\t\tthis.untrackBranch(branch);\n\t\t\tthis.trimHistory();\n\t\t\toffBeforeRebase();\n\t\t\toffAfterRebase();\n\t\t\toffDispose();\n\t\t});\n\t}\n\n\tprivate trackBranch(b: SharedTreeBranch<TEditor, TChangeset>): void {\n\t\tconst main = this.getSharedBranch(\"main\");\n\t\tconst trunkCommit =\n\t\t\tfindCommonAncestor(main.trunk.getHead(), b.getHead()) ??\n\t\t\tfail(0xad2 /* Expected branch to be related to main */);\n\t\tconst sequenceId = main.getCommitSequenceId(trunkCommit.revision);\n\t\tconst branches = getOrCreate(this.trunkBranches, sequenceId, () => new Set());\n\n\t\tassert(!branches.has(b), 0x670 /* Branch was registered more than once */);\n\t\tbranches.add(b);\n\t}\n\n\tprivate untrackBranch(b: SharedTreeBranch<TEditor, TChangeset>): void {\n\t\tconst main = this.getSharedBranch(\"main\");\n\t\tconst trunkCommit =\n\t\t\tfindCommonAncestor(main.trunk.getHead(), b.getHead()) ??\n\t\t\tfail(0xad3 /* Expected branch to be related to main */);\n\t\tconst sequenceId = main.getCommitSequenceId(trunkCommit.revision);\n\t\tconst branches =\n\t\t\tthis.trunkBranches.get(sequenceId) ?? fail(0xad4 /* Expected branch to be tracked */);\n\n\t\tassert(branches.delete(b), 0x671 /* Expected branch to be tracked */);\n\t\tif (branches.size === 0) {\n\t\t\tthis.trunkBranches.delete(sequenceId);\n\t\t}\n\t}\n\n\t/**\n\t * Return the sequenced number of the latest sequenced change.\n\t */\n\tpublic getLatestSequenceNumber(): SeqNumber | undefined {\n\t\tlet maxSequenceNumber: SeqNumber | undefined;\n\t\tfor (const branch of this.sharedBranches.values()) {\n\t\t\tconst branchMax = branch.getCommitSequenceId(\n\t\t\t\tbranch.trunk.getHead().revision,\n\t\t\t).sequenceNumber;\n\t\t\tif (maxSequenceNumber === undefined || maxSequenceNumber < branchMax) {\n\t\t\t\tmaxSequenceNumber = branchMax;\n\t\t\t}\n\t\t}\n\n\t\treturn maxSequenceNumber;\n\t}\n\n\t/**\n\t * Advances the minimum sequence number, and removes all commits from the trunk which lie outside the collaboration window,\n\t * if they are not retained by revertibles or local branches.\n\t * @param minimumSequenceNumber - the sequence number of the newest commit that all peers (including this one) have received and applied to their trunks.\n\t *\n\t * @remarks If there are more than one commit with the same sequence number we assume this refers to the last commit in the batch.\n\t */\n\tpublic advanceMinimumSequenceNumber(\n\t\tminimumSequenceNumber: SeqNumber,\n\t\ttrimHistory = true,\n\t): void {\n\t\tif (minimumSequenceNumber === this.minimumSequenceNumber) {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(\n\t\t\tminimumSequenceNumber > this.minimumSequenceNumber,\n\t\t\t0x476 /* number must be larger or equal to current minimumSequenceNumber. */,\n\t\t);\n\n\t\tthis.minimumSequenceNumber = minimumSequenceNumber;\n\t\tif (trimHistory) {\n\t\t\tthis.trimHistory();\n\t\t}\n\t}\n\n\t/**\n\t * Examines the latest known minimum sequence number and the trunk bases of any registered branches to determine\n\t * if any commits on the trunk are unreferenced and unneeded for future computation; those found are evicted from the trunk.\n\t */\n\tprivate trimHistory(): void {\n\t\t/** The sequence id of the most recent commit on the trunk that will be trimmed */\n\t\tlet trunkTailSequenceId: SequenceId = {\n\t\t\tsequenceNumber: this.minimumSequenceNumber,\n\t\t\tindexInBatch: Number.POSITIVE_INFINITY,\n\t\t};\n\t\t// If there are any outstanding registered branches, get the one that is the oldest (has the \"most behind\" trunk base)\n\t\tconst minimumBranchBaseSequenceId = this.trunkBranches.minKey();\n\t\tif (minimumBranchBaseSequenceId !== undefined) {\n\t\t\t// If that branch is behind the minimum sequence id, we only want to evict commits older than it,\n\t\t\t// even if those commits are behind the minimum sequence id\n\t\t\tconst sequenceIdBeforeMinimumBranchBase = getUpperBoundOfPreviousSequenceId(\n\t\t\t\tminimumBranchBaseSequenceId,\n\t\t\t);\n\t\t\ttrunkTailSequenceId = minSequenceId(\n\t\t\t\ttrunkTailSequenceId,\n\t\t\t\tsequenceIdBeforeMinimumBranchBase,\n\t\t\t);\n\t\t}\n\n\t\tconst mainBranch = this.getSharedBranch(\"main\");\n\n\t\tconst [sequenceId, latestEvicted] = mainBranch.getClosestTrunkCommit(\n\t\t\tmaxSequenceId(\n\t\t\t\ttrunkTailSequenceId,\n\t\t\t\tmainBranch.sequenceIdToCommit.minKey() ?? minimumPossibleSequenceId,\n\t\t\t),\n\t\t);\n\n\t\t// Don't do any work if the commit found by the search is already the tail of the trunk\n\t\tif (latestEvicted === this.trunkBase) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This mutation is a performance hack. If commits are truly immutable, then changing the trunk's tail requires\n\t\t// regenerating the entire commit graph. Instead, we can simply chop off the tail like this if we're certain\n\t\t// that there are no outstanding references to any of the commits being removed (other than the references via\n\t\t// the trunk). The peer branches have been rebased to the head of the trunk, the local branch is already rebased\n\t\t// to the head of the trunk, and all other branches are tracked by `trunkBranches` and known to be ahead of or at\n\t\t// `newTrunkBase`. Therefore, no branches should have unique references to any of the commits being evicted here.\n\t\t// We mutate the most recent of the evicted commits to become the new trunk base. That way, any other commits that\n\t\t// have parent pointers to the latest evicted commit will stay linked, even though that it is no longer part of the trunk.\n\t\tconst newTrunkBase = latestEvicted as Mutable<typeof latestEvicted>;\n\n\t\t// collect the revisions that will be trimmed to send as part of the branch trimmed event\n\t\tconst trimmedCommits = getPathFromBase(newTrunkBase, this.trunkBase);\n\t\tconst trimmedRevisions = trimmedCommits.map((c) => c.revision);\n\n\t\t// The minimum sequence number informs us that all peer branches are at least caught up to the tail commit,\n\t\t// so rebase them accordingly. This is necessary to prevent peer branches from referencing any evicted commits.\n\t\tmainBranch.trimHistory(latestEvicted, sequenceId);\n\n\t\t// Only the last trimmed commit, which is the new trunk base, should remain accessible.\n\t\tfor (const commit of trimmedCommits.slice(0, -1)) {\n\t\t\tReflect.defineProperty(commit, \"change\", {\n\t\t\t\tget: () =>\n\t\t\t\t\tassert(false, 0xa5e /* Should not access 'change' property of an evicted commit */),\n\t\t\t});\n\t\t\tReflect.defineProperty(commit, \"revision\", {\n\t\t\t\tget: () =>\n\t\t\t\t\tassert(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t0xa5f /* Should not access 'revision' property of an evicted commit */,\n\t\t\t\t\t),\n\t\t\t});\n\t\t\tReflect.defineProperty(commit, \"parent\", {\n\t\t\t\tget: () =>\n\t\t\t\t\tassert(false, 0xa60 /* Should not access 'parent' property of an evicted commit */),\n\t\t\t});\n\t\t}\n\n\t\t// Dropping the parent field removes (transitively) all references to the evicted commits so they can be garbage collected.\n\t\tdelete newTrunkBase.parent;\n\t\tthis.trunkBase = newTrunkBase;\n\n\t\tthis._events.emit(\"ancestryTrimmed\", trimmedRevisions);\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\tfor (const branch of this.sharedBranches.values()) {\n\t\t\tif (!branch.isEmpty(this.trunkBase)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn this.minimumSequenceNumber === minimumPossibleSequenceNumber;\n\t}\n\n\tpublic getSummaryData(): SummaryData<TChangeset> {\n\t\t// Trimming the trunk before serializing ensures that the trunk data in the summary is as minimal as possible.\n\t\tthis.trimHistory();\n\n\t\tconst minSeqNumberToSummarize: SequenceId = {\n\t\t\tsequenceNumber: brand(this.minimumSequenceNumber + 1),\n\t\t};\n\t\tlet minBaseSeqId: SequenceId = minSeqNumberToSummarize;\n\t\tconst mainBranch = this.getSharedBranch(\"main\");\n\t\tconst branches = new Map<BranchId, SharedBranchSummaryData<TChangeset>>();\n\t\tfor (const [branchId, branch] of this.sharedBranches) {\n\t\t\tif (branchId !== \"main\") {\n\t\t\t\tconst branchSummary = branch.getSummaryData(\n\t\t\t\t\tminSeqNumberToSummarize,\n\t\t\t\t\tthis.trunkBase.revision,\n\t\t\t\t);\n\t\t\t\tbranches.set(branchId, branchSummary);\n\t\t\t\tassert(branchSummary.base !== undefined, 0xc57 /* Branch summary must have a base */);\n\t\t\t\tconst baseSequenceId = mainBranch.getCommitSequenceId(branchSummary.base);\n\t\t\t\tminBaseSeqId = minSequenceId(minBaseSeqId, baseSequenceId);\n\t\t\t}\n\t\t}\n\t\tconst mainSummary = mainBranch.getSummaryData(minBaseSeqId, this.trunkBase.revision);\n\t\treturn { main: mainSummary, branches, originator: this.localSessionId };\n\t}\n\n\tpublic loadSummaryData(data: SummaryData<TChangeset>): void {\n\t\tassert(\n\t\t\tthis.isEmpty(),\n\t\t\t0x68a /* Attempted to load from summary after edit manager was already mutated */,\n\t\t);\n\t\t// Record the tags of each trunk commit as we generate the trunk so they can be looked up quickly\n\t\t// when hydrating the peer branches below\n\t\tconst trunkRevisionCache = new Map<RevisionTag, GraphCommit<TChangeset>>();\n\t\ttrunkRevisionCache.set(this.trunkBase.revision, this.trunkBase);\n\t\tconst mainBranch =\n\t\t\tthis.sharedBranches.get(\"main\") ?? fail(0xc58 /* Main branch must exist */);\n\t\tmainBranch.loadSummaryData(data.main, trunkRevisionCache);\n\t\tif (data.branches !== undefined) {\n\t\t\tfor (const [branchId, branchData] of data.branches) {\n\t\t\t\tconst branch = this.createSharedBranch(\n\t\t\t\t\tbranchId,\n\t\t\t\t\tbranchData.session,\n\t\t\t\t\tmainBranch,\n\t\t\t\t\tmainBranch.trunk.fork(),\n\t\t\t\t);\n\t\t\t\tbranch.loadSummaryData(branchData, trunkRevisionCache);\n\t\t\t\tthis.addSharedBranch(branchId, branch);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getTrunkHead(branchId: BranchId): GraphCommit<TChangeset> {\n\t\treturn this.getSharedBranch(branchId).trunk.getHead();\n\t}\n\n\tpublic getTrunkChanges(branchId: BranchId): TChangeset[] {\n\t\treturn this.getTrunkCommits(branchId).map((c) => c.change);\n\t}\n\n\tpublic getTrunkCommits(branchId: BranchId): GraphCommit<TChangeset>[] {\n\t\treturn getPathFromBase(this.getTrunkHead(branchId), this.trunkBase);\n\t}\n\n\tpublic getLocalCommits(branchId: BranchId): readonly GraphCommit<TChangeset>[] {\n\t\tconst branch = this.getSharedBranch(branchId);\n\t\treturn branch.getLocalCommits();\n\t}\n\n\t/**\n\t * Gets the length of the longest branch maintained by this `EditManager`.\n\t * This may be the length of a peer branch or the local branch.\n\t *\n\t * @remarks\n\t * The length is counted from the lowest common ancestor with the trunk such that a fully sequenced branch would\n\t * have length zero.\n\t */\n\tpublic getLongestBranchLength(): number {\n\t\tlet max = 0;\n\t\tfor (const branch of this.sharedBranches.values()) {\n\t\t\tmax = Math.max(max, branch.getLongestBranchLength());\n\t\t}\n\t\treturn max;\n\t}\n\n\tpublic sequenceBranchCreation(\n\t\tsessionId: SessionId,\n\t\treferenceSequenceNumber: SeqNumber,\n\t\tbranchId: BranchId,\n\t): void {\n\t\tif (sessionId === this.localSessionId) {\n\t\t\tassert(this.sharedBranches.has(branchId), 0xc59 /* Expected branch to already exist */);\n\t\t\treturn;\n\t\t}\n\n\t\tconst mainBranch = this.getSharedBranch(\"main\");\n\t\tconst branchTrunk = mainBranch.rebasePeer(sessionId, referenceSequenceNumber).fork();\n\t\tthis.createAndAddSharedBranch(branchId, sessionId, mainBranch, branchTrunk);\n\t}\n\n\tpublic addNewBranch(branchId: BranchId): void {\n\t\tconst main = this.getSharedBranch(\"main\") ?? fail(0xc5a /* Main branch must exist */);\n\t\tthis.createAndAddSharedBranch(\n\t\t\tbranchId,\n\t\t\tthis.localSessionId,\n\t\t\tmain,\n\t\t\tthis.getLocalBranch(\"main\").fork(),\n\t\t);\n\t}\n\n\tpublic getSharedBranchIds(): BranchId[] {\n\t\treturn [...this.sharedBranches.keys()];\n\t}\n\n\tpublic removeBranch(branchId: BranchId): void {\n\t\tassert(branchId !== \"main\", 0xc5b /* Cannot remove main branch */);\n\t\tconst hadBranch = this.sharedBranches.delete(branchId);\n\t\tassert(hadBranch, 0xc5c /* Expected branch to exist */);\n\t}\n\n\tprivate createAndAddSharedBranch(\n\t\tbranchId: BranchId,\n\t\tsessionId: SessionId | undefined,\n\t\tparent: SharedBranch<TEditor, TChangeset> | undefined,\n\t\tbranch: SharedTreeBranch<TEditor, TChangeset>,\n\t\teditorOptions?: EditorOptions,\n\t): SharedBranch<TEditor, TChangeset> {\n\t\tconst sharedBranch = this.createSharedBranch(\n\t\t\tbranchId,\n\t\t\tsessionId,\n\t\t\tparent,\n\t\t\tbranch,\n\t\t\teditorOptions,\n\t\t);\n\t\tthis.addSharedBranch(branchId, sharedBranch);\n\t\treturn sharedBranch;\n\t}\n\n\tprivate addSharedBranch(\n\t\tbranchId: BranchId,\n\t\tbranch: SharedBranch<TEditor, TChangeset>,\n\t): void {\n\t\tassert(\n\t\t\t!this.sharedBranches.has(branchId),\n\t\t\t0xc5d /* A branch with this ID already exists */,\n\t\t);\n\t\tthis.sharedBranches.set(branchId, branch);\n\n\t\t// Track all forks of the local branch for purposes of trunk eviction. Unlike the local branch, they have\n\t\t// an unknown lifetime and rebase frequency, so we can not make any assumptions about which trunk commits\n\t\t// they require and therefore we monitor them explicitly.\n\t\tonForkTransitive(branch.localBranch, (fork) => this.registerBranch(fork));\n\n\t\tif (branchId !== \"main\") {\n\t\t\tthis.registerBranch(branch.localBranch);\n\t\t\tthis.onSharedBranchCreated?.(branchId);\n\t\t}\n\t}\n\n\tprivate createSharedBranch(\n\t\tbranchId: BranchId,\n\t\tsessionId: SessionId | undefined,\n\t\tparent: SharedBranch<TEditor, TChangeset> | undefined,\n\t\tbranch: SharedTreeBranch<TEditor, TChangeset>,\n\t\teditorOptions?: EditorOptions,\n\t): SharedBranch<TEditor, TChangeset> {\n\t\tconst sharedBranch = new SharedBranch(\n\t\t\tparent,\n\t\t\tbranch,\n\t\t\tbranchId,\n\t\t\tsessionId,\n\t\t\tminimumPossibleSequenceId,\n\t\t\tthis.changeFamily,\n\t\t\tthis.mintRevisionTag,\n\t\t\tthis._events,\n\t\t\tthis.telemetryEventBatcher,\n\t\t\teditorOptions,\n\t\t);\n\n\t\treturn sharedBranch;\n\t}\n\n\t/* eslint-disable jsdoc/check-indentation */\n\t/**\n\t * Add a bunch of sequenced changes. A bunch is a group of sequenced commits that have the following properties:\n\t * - They are not interleaved with messages from other DDSes in the container.\n\t * - They are all part of the same batch, which entails:\n\t * - They are contiguous in sequencing order.\n\t * - They are all from the same client.\n\t * - They are all based on the same reference sequence number.\n\t * - They are not interleaved with messages from other clients.\n\t */\n\t/* eslint-enable jsdoc/check-indentation */\n\tpublic addSequencedChanges(\n\t\tnewCommits: readonly GraphCommit<TChangeset>[],\n\t\tsessionId: SessionId,\n\t\tsequenceNumber: SeqNumber,\n\t\treferenceSequenceNumber: SeqNumber,\n\t\tbranchId: BranchId,\n\t): void {\n\t\tassert(newCommits.length > 0, 0xad8 /* Expected at least one sequenced change */);\n\t\tassert(\n\t\t\tsequenceNumber > this.minimumSequenceNumber,\n\t\t\t0x713 /* Expected change sequence number to exceed the last known minimum sequence number */,\n\t\t);\n\n\t\tconst branch = this.getSharedBranch(branchId);\n\n\t\tconst onSequenceLocalCommit = (\n\t\t\tcommit: GraphCommit<TChangeset>,\n\t\t\tsequenceId: SequenceId,\n\t\t\tpreviousSequenceId: SequenceId,\n\t\t): void => {\n\t\t\t// Next, we need to update the sequence IDs that our local branches (user's branches, not peer branches) are associated with.\n\t\t\t// In particular, if a local branch is based on the previous trunk head (the branch's first ancestor in the trunk is the commit that was the head before we pushed the new commit)\n\t\t\t// and also branches off of the local branch (it has an ancestor that is part of the local branch), it needs to have its sequence number advanced to be that of the new trunk head.\n\t\t\t// Intuitively, this makes sense because:\n\t\t\t// 1. The trunk's head just advanced forward by some (sequence) amount.\n\t\t\t// 2. The local branch is always rebased to be branching off of the head of the trunk (not literally in this case, because of the optimization, but in effect).\n\t\t\t// 3. Therefore, the entire local branch just advanced forward by some (sequence) amount, and any commits downstream of it which track the sequence numbers of their base commits on the trunk should also advance.\n\t\t\t// This update is not necessarily required for all local branches, since some may have fallen behind the local branch and are based on older trunk commits (such branches do not need updating).\n\t\t\tconst currentBranches = this.trunkBranches.get(previousSequenceId);\n\t\t\tif (currentBranches !== undefined) {\n\t\t\t\tconst newBranches = getOrCreate(this.trunkBranches, sequenceId, () => new Set());\n\t\t\t\tfor (const forkedBranch of currentBranches) {\n\t\t\t\t\t// Check every branch associated with the old sequence ID and advance it if it is based on the local branch (specifically, on the local branch as it was before we pushed its first commit to the trunk).\n\t\t\t\t\t// We validate this by checking if the branch's head is a descendant of the local commit that we just pushed.\n\t\t\t\t\tif (findAncestor(forkedBranch.getHead(), (c) => c === commit) !== undefined) {\n\t\t\t\t\t\tnewBranches.add(forkedBranch);\n\t\t\t\t\t\tcurrentBranches.delete(forkedBranch);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Clean up our trunk branches map by removing any empty sets.\n\t\t\t\tif (currentBranches.size === 0) {\n\t\t\t\t\tthis.trunkBranches.delete(previousSequenceId);\n\t\t\t\t}\n\t\t\t\tif (newBranches.size === 0) {\n\t\t\t\t\tthis.trunkBranches.delete(sequenceId);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst areLocalCommits = sessionId === this.localSessionId;\n\t\tbranch.addSequencedChanges(\n\t\t\tnewCommits,\n\t\t\tsessionId,\n\t\t\tsequenceNumber,\n\t\t\tareLocalCommits,\n\t\t\treferenceSequenceNumber,\n\t\t\tonSequenceLocalCommit,\n\t\t);\n\t}\n\n\tpublic findLocalCommit(\n\t\tbranchId: BranchId,\n\t\trevision: RevisionTag,\n\t): [commit: GraphCommit<TChangeset>, commitsAfter: GraphCommit<TChangeset>[]] {\n\t\tconst commits: GraphCommit<TChangeset>[] = [];\n\t\tconst commit = findAncestor(\n\t\t\t[this.getSharedBranch(branchId).localBranch.getHead(), commits],\n\t\t\t(c) => c.revision === revision,\n\t\t);\n\t\tassert(commit !== undefined, 0x599 /* Expected local branch to contain revision */);\n\t\treturn [commit, commits];\n\t}\n}\n\n/**\n * The in-memory data that summaries contain\n */\nexport interface SummaryData<TChangeset> {\n\treadonly originator?: SessionId;\n\treadonly main: SharedBranchSummaryData<TChangeset>;\n\treadonly branches?: ReadonlyMap<BranchId, SharedBranchSummaryData<TChangeset>>;\n}\n\nexport interface SharedBranchSummaryData<TChangeset> {\n\treadonly id?: BranchId;\n\treadonly name?: string;\n\treadonly session?: SessionId;\n\treadonly author?: string;\n\treadonly base?: RevisionTag;\n\treadonly trunk: readonly SequencedCommit<TChangeset>[];\n\treadonly peerLocalBranches: ReadonlyMap<SessionId, SummarySessionBranch<TChangeset>>;\n}\n\n/**\n * Gets the path from the base of a branch to its head.\n */\nfunction getPathFromBase<TCommit extends { parent?: TCommit }>(\n\tbranchHead: TCommit,\n\tbaseBranchHead: TCommit,\n): TCommit[] {\n\tconst path: TCommit[] = [];\n\tassert(\n\t\tfindCommonAncestor([branchHead, path], baseBranchHead) !== undefined,\n\t\t0x573 /* Expected branches to be related */,\n\t);\n\treturn path;\n}\n\nclass SharedBranch<TEditor extends ChangeFamilyEditor, TChangeset> {\n\t/**\n\t * This branch holds the changes made by this client which have not yet been confirmed as sequenced changes.\n\t */\n\tpublic readonly localBranch: SharedTreeBranch<TEditor, TChangeset>;\n\n\t/**\n\t * Branches are maintained to represent the local change list that the issuing client had\n\t * at the time of submitting the latest known edit on the branch.\n\t * This means the head commit of each branch is always in its original (non-rebased) form.\n\t */\n\tprivate readonly peerLocalBranches: Map<SessionId, SharedTreeBranch<TEditor, TChangeset>> =\n\t\tnew Map();\n\n\t/**\n\t * A map from a sequence id to the commit which has that sequence id.\n\t * This also includes an entry for the {@link trunkBase} which always has the lowest key in the map.\n\t */\n\tpublic readonly sequenceIdToCommit = new BTree<SequenceId, GraphCommit<TChangeset>>(\n\t\tundefined,\n\t\tsequenceIdComparator,\n\t);\n\n\t/**\n\t * The list of commits (from oldest to most recent) that are on the local branch but not on the trunk.\n\t * When a local commit is sequenced, the first commit in this list shifted onto the tip of the trunk.\n\t */\n\tprivate readonly localCommits: GraphCommit<TChangeset>[] = [];\n\n\t/**\n\t * Records extra data associated with sequenced commits.\n\t * This does not include an entry for the {@link trunkBase}.\n\t */\n\tprivate readonly commitMetadata = new Map<\n\t\tRevisionTag,\n\t\t{ sequenceId: SequenceId; sessionId: SessionId }\n\t>();\n\n\tpublic constructor(\n\t\tpublic readonly parentBranch: SharedBranch<TEditor, TChangeset> | undefined,\n\t\tpublic readonly trunk: SharedTreeBranch<TEditor, TChangeset>,\n\t\tprivate readonly id: BranchId,\n\t\tprivate readonly sessionId: SessionId | undefined,\n\t\tbaseCommitSequenceId: SequenceId,\n\t\tprivate readonly changeFamily: ChangeFamily<TEditor, TChangeset>,\n\t\tprivate readonly mintRevisionTag: () => RevisionTag,\n\t\tbranchTrimmer: Listenable<BranchTrimmingEvents>,\n\t\ttelemetryEventBatcher: TelemetryEventBatcher<keyof RebaseStatsWithDuration> | undefined,\n\t\teditorOptions?: EditorOptions,\n\t) {\n\t\tthis.localBranch = new SharedTreeBranch(\n\t\t\tthis.trunk.getHead(),\n\t\t\tchangeFamily,\n\t\t\tmintRevisionTag,\n\t\t\tbranchTrimmer,\n\t\t\ttelemetryEventBatcher,\n\t\t\teditorOptions,\n\t\t);\n\n\t\tthis.sequenceIdToCommit.set(baseCommitSequenceId, this.trunk.getHead());\n\n\t\tthis.localBranch.events.on(\"afterChange\", (event) => {\n\t\t\tif (event.type === \"append\") {\n\t\t\t\tfor (const commit of event.newCommits) {\n\t\t\t\t\tthis.localCommits.push(commit);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.localCommits.length = 0;\n\t\t\t\tfindCommonAncestor(\n\t\t\t\t\t[this.localBranch.getHead(), this.localCommits],\n\t\t\t\t\tthis.trunk.getHead(),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic addSequencedChanges(\n\t\tnewCommits: readonly GraphCommit<TChangeset>[],\n\t\tsessionId: SessionId,\n\t\tsequenceNumber: SeqNumber,\n\t\tareLocalCommits: boolean,\n\t\treferenceSequenceNumber: SeqNumber,\n\t\tonSequenceLocalCommit: OnSequenceCommit<TChangeset>,\n\t): void {\n\t\tassert(\n\t\t\tsequenceNumber >= // This is \">=\", not \">\" because changes in the same batch will have the same sequence number\n\t\t\t\t(this.sequenceIdToCommit.maxKey()?.sequenceNumber ?? minimumPossibleSequenceNumber),\n\t\t\t0xa64 /* Attempted to sequence change with an outdated sequence number */,\n\t\t);\n\n\t\tconst batchSize = this.getBatchSize(sequenceNumber);\n\t\t// The sequence id for the next commit to be processed in the bunch.\n\t\tlet nextSequenceId =\n\t\t\tbatchSize === 0\n\t\t\t\t? {\n\t\t\t\t\t\tsequenceNumber,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tsequenceNumber,\n\t\t\t\t\t\tindexInBatch: batchSize,\n\t\t\t\t\t};\n\n\t\t// Local changes, i.e., changes from this client are applied by fast forwarding the local branch commit onto\n\t\t// the trunk.\n\t\tif (areLocalCommits) {\n\t\t\tfor (const { revision } of newCommits) {\n\t\t\t\tthis.sequenceLocalCommit(revision, nextSequenceId, sessionId, onSequenceLocalCommit);\n\t\t\t\tnextSequenceId = getNextSequenceId(nextSequenceId);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Remote changes, i.e., changes from remote clients are applied in three steps.\n\t\t// Step 1 - Recreate the peer remote client's local environment.\n\t\t// Get the revision that the remote change is based on and rebase that peer local branch over the part of the\n\t\t// trunk up to the base revision. This will be a no-op if the sending client has not advanced since the last\n\t\t// time we received an edit from it\n\t\tconst peerLocalBranch = this.rebasePeer(sessionId, referenceSequenceNumber);\n\n\t\t// Step 2 - Append the changes to the peer branch and rebase the changes to the tip of the trunk.\n\t\tif (peerLocalBranch.getHead() === this.trunk.getHead()) {\n\t\t\t// If the peer local branch is fully caught up and empty (no changes relative to the trunk) after being\n\t\t\t// rebased, then push changes to the trunk directly and update the peer branch to the trunk's head.\n\t\t\tfor (const newCommit of newCommits) {\n\t\t\t\tthis.pushCommitToTrunk(nextSequenceId, { ...newCommit, sessionId });\n\t\t\t\tnextSequenceId = getNextSequenceId(nextSequenceId);\n\t\t\t}\n\t\t\tpeerLocalBranch.setHead(this.trunk.getHead());\n\t\t} else {\n\t\t\t// Otherwise, push the changes to the peer local branch and merge the branch into the trunk.\n\t\t\tfor (const newCommit of newCommits) {\n\t\t\t\tpeerLocalBranch.apply(tagChange(newCommit.change, newCommit.revision));\n\t\t\t}\n\t\t\tconst result = this.trunk.merge(peerLocalBranch);\n\t\t\tif (result !== undefined) {\n\t\t\t\t// If the merge resulted in any changes to the trunk, update the sequence map and trunk metadata\n\t\t\t\t// with the rebased commits.\n\t\t\t\tfor (const sourceCommit of result.sourceCommits) {\n\t\t\t\t\tthis.sequenceIdToCommit.set(nextSequenceId, sourceCommit);\n\t\t\t\t\tthis.commitMetadata.set(sourceCommit.revision, {\n\t\t\t\t\t\tsequenceId: nextSequenceId,\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t});\n\t\t\t\t\tnextSequenceId = getNextSequenceId(nextSequenceId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Step 3 - Rebase the local branch over the updated trunk.\n\t\tthis.localBranch.rebaseOnto(this.trunk);\n\t}\n\n\tpublic isEmpty(baseCommit: GraphCommit<TChangeset>): boolean {\n\t\treturn (\n\t\t\tthis.trunk.getHead() === baseCommit &&\n\t\t\tthis.peerLocalBranches.size === 0 &&\n\t\t\tthis.localBranch.getHead() === this.trunk.getHead()\n\t\t);\n\t}\n\n\tpublic rebasePeer(\n\t\tsessionId: SessionId,\n\t\treferenceSequenceNumber: SeqNumber,\n\t): SharedTreeBranch<TEditor, TChangeset> {\n\t\tconst [, baseRevisionInTrunk] = this.getClosestTrunkCommit(referenceSequenceNumber);\n\t\tconst peerLocalBranch = getOrCreate(\n\t\t\tthis.peerLocalBranches,\n\t\t\tsessionId,\n\t\t\t() => new SharedTreeBranch(baseRevisionInTrunk, this.changeFamily, this.mintRevisionTag),\n\t\t);\n\t\tpeerLocalBranch.rebaseOnto(this.trunk, baseRevisionInTrunk);\n\t\treturn peerLocalBranch;\n\t}\n\n\tpublic getPeerBranchOrTrunk(sessionId: SessionId): SharedTreeBranch<TEditor, TChangeset> {\n\t\treturn this.peerLocalBranches.get(sessionId) ?? this.trunk;\n\t}\n\n\t/**\n\t * Gets the length of the longest branch maintained by this `SharedBranch`.\n\t * This may be the length of a peer branch or the local branch.\n\t *\n\t * @remarks\n\t * The length is counted from the lowest common ancestor with the trunk such that a fully sequenced branch would\n\t * have length zero.\n\t */\n\tpublic getLongestBranchLength(): number {\n\t\tlet max = 0;\n\t\tconst trunkHead = this.trunk.getHead();\n\t\tfor (const branch of this.peerLocalBranches.values()) {\n\t\t\tconst branchPath = getPathFromBase(branch.getHead(), trunkHead);\n\t\t\tif (branchPath.length > max) {\n\t\t\t\tmax = branchPath.length;\n\t\t\t}\n\t\t}\n\t\tconst localPath = getPathFromBase(this.localBranch.getHead(), trunkHead);\n\t\treturn Math.max(max, localPath.length);\n\t}\n\n\tpublic trimHistory(newBase: GraphCommit<TChangeset>, sequenceId: SequenceId): void {\n\t\tthis.rebasePeers(newBase);\n\n\t\tthis.sequenceIdToCommit.editRange(\n\t\t\tminimumPossibleSequenceId,\n\t\t\tsequenceId,\n\t\t\ttrue,\n\t\t\t(s, commit) => {\n\t\t\t\t// Cleanup look-aside data for each evicted commit\n\t\t\t\tthis.commitMetadata.delete(commit.revision);\n\t\t\t\t// Delete all evicted commits from `sequenceMap` except for the latest one, which is the new `trunkBase`\n\t\t\t\tif (equalSequenceIds(s, sequenceId)) {\n\t\t\t\t\tassert(\n\t\t\t\t\t\tcommit === newBase,\n\t\t\t\t\t\t0x729 /* Expected last evicted commit to be new trunk base */,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn { delete: true };\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tconst trunkSize = getPathFromBase(this.trunk.getHead(), newBase).length;\n\t\tassert(\n\t\t\tthis.sequenceIdToCommit.size === trunkSize + 1,\n\t\t\t0x744 /* The size of the sequenceMap must have one element more than the trunk */,\n\t\t);\n\t\tassert(\n\t\t\tthis.commitMetadata.size === trunkSize,\n\t\t\t0x745 /* The size of the trunkMetadata must be the same as the trunk */,\n\t\t);\n\t}\n\n\tprivate rebasePeers(commit: GraphCommit<TChangeset>): void {\n\t\tfor (const [, branch] of this.peerLocalBranches) {\n\t\t\tbranch.rebaseOnto(this.trunk, commit);\n\t\t}\n\n\t\t// The metadata for new trunk base revision needs to be deleted before modifying it.\n\t\tthis.commitMetadata.delete(commit.revision);\n\t}\n\n\tpublic getLocalCommits(): readonly GraphCommit<TChangeset>[] {\n\t\treturn this.localCommits;\n\t}\n\n\t/**\n\t * Promote the oldest un-sequenced commit on the local branch to the head of the trunk.\n\t * @param sequenceId - The sequence id of the new trunk commit\n\t * @remarks This method is a performance optimization for the scenario where this client receives its own change back after sequencing.\n\t * The normal (not optimized) process in this case would be to apply the new sequenced commit to the trunk and then rebase the local branch over the trunk.\n\t * The first commit will be \"the same\" (as in, it will have the same revision) as the commit that was just sequenced, so the rebase will be a no-op.\n\t * Because the rebase is a no-op, we can skip it entirely and simply remove the commit from the local branch and append it to the trunk.\n\t * Avoiding the overhead of the rebase process, even when it's a no-op, has real measured performance benefits and is worth the added complexity here.\n\t */\n\tprivate sequenceLocalCommit(\n\t\trevision: RevisionTag,\n\t\tsequenceId: SequenceId,\n\t\tsessionId: SessionId,\n\t\tonSequenceLocalCommit: OnSequenceCommit<TChangeset>,\n\t): void {\n\t\tif (this.commitMetadata.has(revision)) {\n\t\t\t// This can happen if the commit came from a shared branch and was concurrently merged by another client.\n\t\t\t// In this case, the newly sequenced commit is redundant and should therefore be ignored.\n\t\t\treturn;\n\t\t}\n\n\t\t// First, push the local commit to the trunk.\n\t\t// We are mutating our `localCommits` cache here,but there is no need to actually change the `localBranch` itself because it will simply catch up later if/when it next rebases.\n\t\tconst firstLocalCommit = this.localCommits.shift();\n\t\tassert(\n\t\t\tfirstLocalCommit !== undefined,\n\t\t\t0x6b5 /* Received a sequenced change from the local session despite having no local changes */,\n\t\t);\n\n\t\tconst prevSequenceId = this.getCommitSequenceId(this.trunk.getHead().revision);\n\t\tthis.pushGraphCommitToTrunk(sequenceId, firstLocalCommit, sessionId);\n\t\tonSequenceLocalCommit(firstLocalCommit, sequenceId, prevSequenceId);\n\t}\n\n\t/**\n\t * Finds the most recent trunk commit that was sequenced at or before the given point.\n\t * @param searchBy - the sequence number or the sequence id to search for\n\t * @remarks Fails if there is no eligible commit.\n\t * @returns the closest commit and its sequence id\n\t */\n\tpublic getClosestTrunkCommit(searchBy: SeqNumber): [SequenceId, GraphCommit<TChangeset>];\n\tpublic getClosestTrunkCommit(searchBy: SequenceId): [SequenceId, GraphCommit<TChangeset>];\n\tpublic getClosestTrunkCommit(\n\t\tsearchBy: SeqNumber | SequenceId,\n\t): [SequenceId, GraphCommit<TChangeset>] {\n\t\tconst sequenceId: SequenceId =\n\t\t\ttypeof searchBy === \"number\"\n\t\t\t\t? {\n\t\t\t\t\t\t// This is to make sure that the correct commit is selected in this 2 scenarios:\n\t\t\t\t\t\t// 1) The commit is unique for that sequence number\n\t\t\t\t\t\t// 2) There are more than one commit for the same sequence number, in this case we need to select the last one.\n\t\t\t\t\t\tsequenceNumber: searchBy,\n\t\t\t\t\t\tindexInBatch: Number.POSITIVE_INFINITY,\n\t\t\t\t\t}\n\t\t\t\t: searchBy;\n\n\t\tconst commit = this.sequenceIdToCommit.getPairOrNextLower(sequenceId);\n\t\tassert(commit !== undefined, 0x746 /* sequence id has been evicted */);\n\t\treturn commit;\n\t}\n\n\tprivate pushGraphCommitToTrunk(\n\t\tsequenceId: SequenceId,\n\t\tgraphCommit: GraphCommit<TChangeset>,\n\t\tsessionId: SessionId,\n\t): void {\n\t\tthis.trunk.setHead(graphCommit);\n\t\tthis.registerSequencedCommit(sequenceId, sessionId, graphCommit);\n\t}\n\n\tprivate pushCommitToTrunk(sequenceId: SequenceId, commit: Commit<TChangeset>): void {\n\t\tconst mintedCommit = mintCommit(this.trunk.getHead(), commit);\n\t\tthis.pushGraphCommitToTrunk(sequenceId, mintedCommit, commit.sessionId);\n\t}\n\n\tprivate registerSequencedCommit(\n\t\tsequenceId: SequenceId,\n\t\tsessionId: SessionId,\n\t\tcommit: GraphCommit<TChangeset>,\n\t): void {\n\t\tthis.sequenceIdToCommit.set(sequenceId, commit);\n\t\tthis.commitMetadata.set(commit.revision, { sequenceId, sessionId });\n\t}\n\n\tpublic getCommitSequenceId(commitRevision: RevisionTag): SequenceId {\n\t\tconst id = this.commitMetadata.get(commitRevision)?.sequenceId;\n\t\tif (id === undefined) {\n\t\t\treturn minimumPossibleSequenceId;\n\t\t}\n\t\treturn id;\n\t}\n\n\t// TODO: Document that this is to handle receiving separate commits with the same sequence ID,\n\t// as a batch of changes are not guaranteed to be processed as one bunch.\n\tprivate getBatchSize(sequenceNumber: SeqNumber): number {\n\t\tconst startSequenceId: SequenceId = {\n\t\t\tsequenceNumber,\n\t\t};\n\t\tconst endSequenceId: SequenceId = {\n\t\t\tsequenceNumber: brand((sequenceNumber as number) + 1),\n\t\t};\n\n\t\treturn this.sequenceIdToCommit.getRange(startSequenceId, endSequenceId, false).length;\n\t}\n\n\tpublic getSummaryData(\n\t\tminSeqNumberToSummarize: SequenceId,\n\t\ttrunkBaseRevision: RevisionTag,\n\t): SharedBranchSummaryData<TChangeset> {\n\t\t// The assert below is acceptable at present because summarization only ever occurs on a client with no\n\t\t// local/in-flight changes.\n\t\t// In the future we may wish to relax this constraint. For that to work, the current implementation of\n\t\t// `EditManager` would have to be amended in one of two ways:\n\t\t// A) Changes made by the local session should be represented by a branch in `EditManager.branches`.\n\t\t// B) The contents of such a branch should be computed on demand based on the trunk.\n\t\t// Note that option (A) would be a simple change to `addSequencedChanges` whereas (B) would likely require\n\t\t// rebasing trunk changes over the inverse of trunk changes.\n\t\tassert(\n\t\t\tthis.localBranch.getHead() === this.trunk.getHead(),\n\t\t\t0xc5e /* Clients with local changes cannot be used to generate summaries */,\n\t\t);\n\n\t\tlet parentHead: GraphCommit<TChangeset>;\n\t\tif (this.parentBranch === undefined) {\n\t\t\tconst oldestCommitInCollabWindow =\n\t\t\t\tthis.getClosestTrunkCommit(minSeqNumberToSummarize)[1];\n\t\t\t// Path construction is exclusive, so we need to use the parent of the oldest commit in the window if it exists\n\t\t\tparentHead = oldestCommitInCollabWindow.parent ?? oldestCommitInCollabWindow;\n\t\t} else {\n\t\t\tparentHead = this.parentBranch.trunk.getHead();\n\t\t}\n\n\t\tconst childBranchTrunkCommits: GraphCommit<TChangeset>[] = [];\n\t\tconst forkPointFromMainTrunk = findCommonAncestor(\n\t\t\t[this.trunk.getHead(), childBranchTrunkCommits],\n\t\t\tparentHead,\n\t\t);\n\t\tassert(\n\t\t\tforkPointFromMainTrunk !== undefined,\n\t\t\t0xc5f /* Expected child branch to be based on main branch */,\n\t\t);\n\n\t\tconst trunk = childBranchTrunkCommits.map((c) => {\n\t\t\tconst metadata =\n\t\t\t\tthis.commitMetadata.get(c.revision) ??\n\t\t\t\tfail(0xad5 /* Expected metadata for trunk commit */);\n\t\t\tconst commit: SequencedCommit<TChangeset> = {\n\t\t\t\tchange: c.change,\n\t\t\t\trevision: c.revision,\n\t\t\t\tsequenceNumber: metadata.sequenceId.sequenceNumber,\n\t\t\t\tsessionId: metadata.sessionId,\n\t\t\t};\n\t\t\tif (metadata.sequenceId.indexInBatch !== undefined) {\n\t\t\t\tcommit.indexInBatch = metadata.sequenceId.indexInBatch;\n\t\t\t}\n\t\t\treturn commit;\n\t\t});\n\n\t\tconst peerLocalBranches = new Map<SessionId, SummarySessionBranch<TChangeset>>(\n\t\t\tmapIterable(this.peerLocalBranches.entries(), ([sessionId, branch]) => {\n\t\t\t\tconst branchPath: GraphCommit<TChangeset>[] = [];\n\t\t\t\tconst ancestor =\n\t\t\t\t\tfindCommonAncestor([branch.getHead(), branchPath], this.trunk.getHead()) ??\n\t\t\t\t\tfail(0xad6 /* Expected branch to be based on trunk */);\n\n\t\t\t\tconst base =\n\t\t\t\t\tancestor.revision === trunkBaseRevision ? rootRevision : ancestor.revision;\n\t\t\t\treturn [\n\t\t\t\t\tsessionId,\n\t\t\t\t\t{\n\t\t\t\t\t\tbase,\n\t\t\t\t\t\tcommits: branchPath.map((c) => {\n\t\t\t\t\t\t\tconst commit: Commit<TChangeset> = {\n\t\t\t\t\t\t\t\tchange: c.change,\n\t\t\t\t\t\t\t\trevision: c.revision,\n\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn commit;\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}),\n\t\t);\n\n\t\tconst trunkBase =\n\t\t\tthis.parentBranch === undefined ? undefined : forkPointFromMainTrunk.revision;\n\t\treturn { trunk, peerLocalBranches, base: trunkBase, id: this.id, session: this.sessionId };\n\t}\n\n\tpublic loadSummaryData(\n\t\tdata: SharedBranchSummaryData<TChangeset>,\n\t\ttrunkRevisionCache: Map<RevisionTag, GraphCommit<TChangeset>>,\n\t): void {\n\t\tassert(\n\t\t\t(this.parentBranch === undefined) === (data.base === undefined),\n\t\t\t0xc60 /* Expected branch base to match presence of parent branch */,\n\t\t);\n\t\tconst parentTrunkBase =\n\t\t\ttrunkRevisionCache.get(data.base ?? rootRevision) ??\n\t\t\tfail(0xc61 /* Expected base revision to be in trunk cache */);\n\t\tlet trunkHead = parentTrunkBase;\n\t\tfor (const c of data.trunk) {\n\t\t\tconst sequenceId: SequenceId =\n\t\t\t\tc.indexInBatch === undefined\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tsequenceNumber: c.sequenceNumber,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tsequenceNumber: c.sequenceNumber,\n\t\t\t\t\t\t\tindexInBatch: c.indexInBatch,\n\t\t\t\t\t\t};\n\t\t\tconst commit = mintCommit(trunkHead, c);\n\t\t\tthis.sequenceIdToCommit.set(sequenceId, commit);\n\t\t\tthis.commitMetadata.set(c.revision, {\n\t\t\t\tsequenceId,\n\t\t\t\tsessionId: c.sessionId,\n\t\t\t});\n\t\t\ttrunkRevisionCache.set(c.revision, commit);\n\t\t\ttrunkHead = commit;\n\t\t}\n\t\tthis.trunk.setHead(trunkHead);\n\n\t\tthis.localBranch.setHead(this.trunk.getHead());\n\n\t\tfor (const [sessionId, branch] of data.peerLocalBranches) {\n\t\t\tconst commit =\n\t\t\t\ttrunkRevisionCache.get(branch.base) ??\n\t\t\t\tfail(0xad7 /* Expected summary branch to be based off of a revision in the trunk */);\n\n\t\t\tlet branchHead = commit;\n\t\t\tfor (const c of branch.commits) {\n\t\t\t\tbranchHead = mintCommit(branchHead, c);\n\t\t\t}\n\t\t\tthis.peerLocalBranches.set(\n\t\t\t\tsessionId,\n\t\t\t\tnew SharedTreeBranch(branchHead, this.changeFamily, this.mintRevisionTag),\n\t\t\t);\n\t\t}\n\t}\n}\n\n// Returns the sequence id for the next commit to be processed in the bunch. Since all the commits have the\n// same sequence number, only the index in the batch needs to be incremented.\nfunction getNextSequenceId(sequenceId: SequenceId): SequenceId {\n\treturn {\n\t\tsequenceNumber: sequenceId.sequenceNumber,\n\t\tindexInBatch: (sequenceId.indexInBatch ?? 0) + 1,\n\t};\n}\n\ntype OnSequenceCommit<TChangeset> = (\n\tcommit: GraphCommit<TChangeset>,\n\tsequenceId: SequenceId,\n\tprevSequenceId: SequenceId,\n) => void;\n"]}
1
+ {"version":3,"file":"editManager.js","sourceRoot":"","sources":["../../src/shared-tree-core/editManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { createEmitter } from \"@fluid-internal/client-utils\";\nimport type { Listenable } from \"@fluidframework/core-interfaces\";\nimport { assert, fail } from \"@fluidframework/core-utils/internal\";\nimport type { SessionId } from \"@fluidframework/id-compressor\";\nimport {\n\tTelemetryEventBatcher,\n\ttype ITelemetryLoggerExt,\n} from \"@fluidframework/telemetry-utils/internal\";\nimport { BTree } from \"@tylerbu/sorted-btree-es6\";\n\nimport {\n\ttype ChangeFamily,\n\ttype ChangeFamilyEditor,\n\ttype GraphCommit,\n\ttype RevisionTag,\n\tfindAncestor,\n\tfindCommonAncestor,\n\tmintCommit,\n\ttype RebaseStatsWithDuration,\n\ttagChange,\n} from \"../core/index.js\";\nimport { type Mutable, brand, getOrCreate, mapIterable } from \"../util/index.js\";\n\nimport {\n\tSharedTreeBranch,\n\ttype BranchTrimmingEvents,\n\tonForkTransitive,\n\ttype BranchId,\n} from \"./branch.js\";\nimport type {\n\tCommit,\n\tSeqNumber,\n\tSequenceId,\n\tSequencedCommit,\n\tSummarySessionBranch,\n} from \"./editManagerFormatCommons.js\";\nimport {\n\tgetUpperBoundOfPreviousSequenceId,\n\tequalSequenceIds,\n\tmaxSequenceId,\n\tminSequenceId,\n\tsequenceIdComparator,\n} from \"./sequenceIdUtils.js\";\n\nexport const minimumPossibleSequenceNumber: SeqNumber = brand(Number.MIN_SAFE_INTEGER);\nconst minimumPossibleSequenceId: SequenceId = {\n\tsequenceNumber: minimumPossibleSequenceNumber,\n};\n\n/**\n * A special revision tag for the initial {@link EditManager.trunkBase} commit.\n * @remarks This tag is used to supply the _initial_ trunk base with a known revision.\n * The trunk base may advance over time, after which point the trunk base will have a different revision.\n * When {@link EditManager.getSummaryData | serializing} and deserializing, peer branches that include the trunk base commit in their history will always use this tag.\n */\nconst rootRevision = \"root\" as const satisfies RevisionTag;\n\n/**\n * Max number of telemetry log call that may be aggregated before being sent.\n */\nconst maxRebaseStatsAggregationCount = 1000;\n\n/**\n * Represents a local branch of a document and interprets the effect on the document of adding sequenced changes,\n * which were based on a given session's branch, to the document history\n */\n// TODO: Try to reduce this to a single type parameter\nexport class EditManager<\n\tTEditor extends ChangeFamilyEditor,\n\tTChangeset,\n\tTChangeFamily extends ChangeFamily<TEditor, TChangeset>,\n> {\n\tprivate readonly _events = createEmitter<BranchTrimmingEvents>();\n\n\tprivate readonly sharedBranches = new Map<BranchId, SharedBranch<TEditor, TChangeset>>();\n\n\t/**\n\t * Tracks where on the trunk of the main branch all registered branches are based.\n\t * Each key is the sequence id of a commit on the trunk,\n\t * and the value is the set of all branches who have that commit as their common ancestor with the trunk.\n\t *\n\t * @remarks\n\t * This does not include the local branch.\n\t */\n\tprivate readonly trunkBranches = new BTree<\n\t\tSequenceId,\n\t\tSet<SharedTreeBranch<TEditor, TChangeset>>\n\t>(undefined, sequenceIdComparator);\n\n\t/**\n\t * The sequence number of the newest commit on the trunk that has been received by all peers.\n\t * Defaults to {@link minimumPossibleSequenceNumber} if no commits have been received.\n\t *\n\t * @remarks If there are more than one commit with the same sequence number we assume this refers to the last commit in the batch.\n\t */\n\tprivate minimumSequenceNumber = minimumPossibleSequenceNumber;\n\n\t/**\n\t * A special commit that is a \"base\" (tail) of the trunk, though not part of the trunk itself.\n\t * This makes it possible to model the trunk in the same way as any other branch (it branches off of a base commit)\n\t * which allows it to use branching APIs to interact with the other branches.\n\t * Each time trunk eviction occurs, the most recent evicted commit becomes the new `trunkBase`.\n\t */\n\tprivate trunkBase: GraphCommit<TChangeset>;\n\n\tprivate readonly telemetryEventBatcher:\n\t\t| TelemetryEventBatcher<keyof RebaseStatsWithDuration>\n\t\t| undefined;\n\n\t/**\n\t * @param changeFamily - the change family of changes on the trunk and local branch\n\t * @param localSessionId - the id of the local session that will be used for local commits\n\t * @param mintRevisionTag - a function which generates globally unique revision tags\n\t * @param onSharedBranchCreated - called when a new shared branch is created. This is not called for the main branch.\n\t */\n\tpublic constructor(\n\t\tpublic readonly changeFamily: TChangeFamily,\n\t\tpublic readonly localSessionId: SessionId,\n\t\tprivate readonly mintRevisionTag: () => RevisionTag,\n\t\tprivate readonly onSharedBranchCreated?: (branchId: BranchId) => void,\n\t\tlogger?: ITelemetryLoggerExt,\n\t) {\n\t\tthis.trunkBase = {\n\t\t\trevision: rootRevision,\n\t\t\tchange: changeFamily.rebaser.compose([]),\n\t\t};\n\n\t\tif (logger !== undefined) {\n\t\t\tthis.telemetryEventBatcher = new TelemetryEventBatcher(\n\t\t\t\t{\n\t\t\t\t\teventName: \"rebaseProcessing\",\n\t\t\t\t\tcategory: \"performance\",\n\t\t\t\t},\n\t\t\t\tlogger,\n\t\t\t\tmaxRebaseStatsAggregationCount,\n\t\t\t);\n\t\t}\n\n\t\tconst mainTrunk = new SharedTreeBranch(\n\t\t\tthis.trunkBase,\n\t\t\tchangeFamily,\n\t\t\tmintRevisionTag,\n\t\t\tthis._events,\n\t\t\tthis.telemetryEventBatcher,\n\t\t);\n\n\t\tthis.createAndAddSharedBranch(\"main\", undefined, undefined, mainTrunk);\n\t}\n\n\tpublic getLocalBranch(branchId: BranchId): SharedTreeBranch<TEditor, TChangeset> {\n\t\treturn this.getSharedBranch(branchId).localBranch;\n\t}\n\n\tprivate getSharedBranch(branchId: BranchId): SharedBranch<TEditor, TChangeset> {\n\t\treturn this.sharedBranches.get(branchId) ?? fail(0xc56 /* Branch does not exist */);\n\t}\n\n\t/**\n\t * Make the given branch known to the `EditManager`. The `EditManager` will ensure that all registered\n\t * branches remain usable even as the minimum sequence number advances.\n\t *\n\t * TODO#AB6926: Refactor local branch management into a separate class that encapsulates `trunkBranches` and everything\n\t * that touches it.\n\t * TODO#AB6925: Maintain the divergence point between each branch and the trunk so that we don't have to recompute\n\t * it so often.\n\t */\n\tprivate registerBranch(branch: SharedTreeBranch<TEditor, TChangeset>): void {\n\t\tthis.trackBranch(branch);\n\t\t// Whenever the branch is rebased, update our record of its base trunk commit\n\t\tconst offBeforeRebase = branch.events.on(\"beforeChange\", (args) => {\n\t\t\tif (args.type === \"rebase\") {\n\t\t\t\tthis.untrackBranch(branch);\n\t\t\t}\n\t\t});\n\t\tconst offAfterRebase = branch.events.on(\"afterChange\", (args) => {\n\t\t\tif (args.type === \"rebase\") {\n\t\t\t\tthis.trackBranch(branch);\n\t\t\t\tthis.trimHistory();\n\t\t\t}\n\t\t});\n\t\t// When the branch is disposed, update our branch set and trim the trunk\n\t\tconst offDispose = branch.events.on(\"dispose\", () => {\n\t\t\tthis.untrackBranch(branch);\n\t\t\tthis.trimHistory();\n\t\t\toffBeforeRebase();\n\t\t\toffAfterRebase();\n\t\t\toffDispose();\n\t\t});\n\t}\n\n\tprivate trackBranch(b: SharedTreeBranch<TEditor, TChangeset>): void {\n\t\tconst main = this.getSharedBranch(\"main\");\n\t\tconst trunkCommit =\n\t\t\tfindCommonAncestor(main.trunk.getHead(), b.getHead()) ??\n\t\t\tfail(0xad2 /* Expected branch to be related to main */);\n\t\tconst sequenceId = main.getCommitSequenceId(trunkCommit.revision);\n\t\tconst branches = getOrCreate(this.trunkBranches, sequenceId, () => new Set());\n\n\t\tassert(!branches.has(b), 0x670 /* Branch was registered more than once */);\n\t\tbranches.add(b);\n\t}\n\n\tprivate untrackBranch(b: SharedTreeBranch<TEditor, TChangeset>): void {\n\t\tconst main = this.getSharedBranch(\"main\");\n\t\tconst trunkCommit =\n\t\t\tfindCommonAncestor(main.trunk.getHead(), b.getHead()) ??\n\t\t\tfail(0xad3 /* Expected branch to be related to main */);\n\t\tconst sequenceId = main.getCommitSequenceId(trunkCommit.revision);\n\t\tconst branches =\n\t\t\tthis.trunkBranches.get(sequenceId) ?? fail(0xad4 /* Expected branch to be tracked */);\n\n\t\tassert(branches.delete(b), 0x671 /* Expected branch to be tracked */);\n\t\tif (branches.size === 0) {\n\t\t\tthis.trunkBranches.delete(sequenceId);\n\t\t}\n\t}\n\n\t/**\n\t * Return the sequenced number of the latest sequenced change.\n\t */\n\tpublic getLatestSequenceNumber(): SeqNumber | undefined {\n\t\tlet maxSequenceNumber: SeqNumber | undefined;\n\t\tfor (const branch of this.sharedBranches.values()) {\n\t\t\tconst branchMax = branch.getCommitSequenceId(\n\t\t\t\tbranch.trunk.getHead().revision,\n\t\t\t).sequenceNumber;\n\t\t\tif (maxSequenceNumber === undefined || maxSequenceNumber < branchMax) {\n\t\t\t\tmaxSequenceNumber = branchMax;\n\t\t\t}\n\t\t}\n\n\t\treturn maxSequenceNumber;\n\t}\n\n\t/**\n\t * Advances the minimum sequence number, and removes all commits from the trunk which lie outside the collaboration window,\n\t * if they are not retained by revertibles or local branches.\n\t * @param minimumSequenceNumber - the sequence number of the newest commit that all peers (including this one) have received and applied to their trunks.\n\t *\n\t * @remarks If there are more than one commit with the same sequence number we assume this refers to the last commit in the batch.\n\t */\n\tpublic advanceMinimumSequenceNumber(\n\t\tminimumSequenceNumber: SeqNumber,\n\t\ttrimHistory = true,\n\t): void {\n\t\tif (minimumSequenceNumber === this.minimumSequenceNumber) {\n\t\t\treturn;\n\t\t}\n\n\t\tassert(\n\t\t\tminimumSequenceNumber > this.minimumSequenceNumber,\n\t\t\t0x476 /* number must be larger or equal to current minimumSequenceNumber. */,\n\t\t);\n\n\t\tthis.minimumSequenceNumber = minimumSequenceNumber;\n\t\tif (trimHistory) {\n\t\t\tthis.trimHistory();\n\t\t}\n\t}\n\n\t/**\n\t * Examines the latest known minimum sequence number and the trunk bases of any registered branches to determine\n\t * if any commits on the trunk are unreferenced and unneeded for future computation; those found are evicted from the trunk.\n\t */\n\tprivate trimHistory(): void {\n\t\t/** The sequence id of the most recent commit on the trunk that will be trimmed */\n\t\tlet trunkTailSequenceId: SequenceId = {\n\t\t\tsequenceNumber: this.minimumSequenceNumber,\n\t\t\tindexInBatch: Number.POSITIVE_INFINITY,\n\t\t};\n\t\t// If there are any outstanding registered branches, get the one that is the oldest (has the \"most behind\" trunk base)\n\t\tconst minimumBranchBaseSequenceId = this.trunkBranches.minKey();\n\t\tif (minimumBranchBaseSequenceId !== undefined) {\n\t\t\t// If that branch is behind the minimum sequence id, we only want to evict commits older than it,\n\t\t\t// even if those commits are behind the minimum sequence id\n\t\t\tconst sequenceIdBeforeMinimumBranchBase = getUpperBoundOfPreviousSequenceId(\n\t\t\t\tminimumBranchBaseSequenceId,\n\t\t\t);\n\t\t\ttrunkTailSequenceId = minSequenceId(\n\t\t\t\ttrunkTailSequenceId,\n\t\t\t\tsequenceIdBeforeMinimumBranchBase,\n\t\t\t);\n\t\t}\n\n\t\tconst mainBranch = this.getSharedBranch(\"main\");\n\n\t\tconst [sequenceId, latestEvicted] = mainBranch.getClosestTrunkCommit(\n\t\t\tmaxSequenceId(\n\t\t\t\ttrunkTailSequenceId,\n\t\t\t\tmainBranch.sequenceIdToCommit.minKey() ?? minimumPossibleSequenceId,\n\t\t\t),\n\t\t);\n\n\t\t// Don't do any work if the commit found by the search is already the tail of the trunk\n\t\tif (latestEvicted === this.trunkBase) {\n\t\t\treturn;\n\t\t}\n\n\t\t// This mutation is a performance hack. If commits are truly immutable, then changing the trunk's tail requires\n\t\t// regenerating the entire commit graph. Instead, we can simply chop off the tail like this if we're certain\n\t\t// that there are no outstanding references to any of the commits being removed (other than the references via\n\t\t// the trunk). The peer branches have been rebased to the head of the trunk, the local branch is already rebased\n\t\t// to the head of the trunk, and all other branches are tracked by `trunkBranches` and known to be ahead of or at\n\t\t// `newTrunkBase`. Therefore, no branches should have unique references to any of the commits being evicted here.\n\t\t// We mutate the most recent of the evicted commits to become the new trunk base. That way, any other commits that\n\t\t// have parent pointers to the latest evicted commit will stay linked, even though that it is no longer part of the trunk.\n\t\tconst newTrunkBase = latestEvicted as Mutable<typeof latestEvicted>;\n\n\t\t// collect the revisions that will be trimmed to send as part of the branch trimmed event\n\t\tconst trimmedCommits = getPathFromBase(newTrunkBase, this.trunkBase);\n\t\tconst trimmedRevisions = trimmedCommits.map((c) => c.revision);\n\n\t\t// The minimum sequence number informs us that all peer branches are at least caught up to the tail commit,\n\t\t// so rebase them accordingly. This is necessary to prevent peer branches from referencing any evicted commits.\n\t\tmainBranch.trimHistory(latestEvicted, sequenceId);\n\n\t\t// Only the last trimmed commit, which is the new trunk base, should remain accessible.\n\t\tfor (const commit of trimmedCommits.slice(0, -1)) {\n\t\t\tReflect.defineProperty(commit, \"change\", {\n\t\t\t\tget: () =>\n\t\t\t\t\tassert(false, 0xa5e /* Should not access 'change' property of an evicted commit */),\n\t\t\t});\n\t\t\tReflect.defineProperty(commit, \"revision\", {\n\t\t\t\tget: () =>\n\t\t\t\t\tassert(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t0xa5f /* Should not access 'revision' property of an evicted commit */,\n\t\t\t\t\t),\n\t\t\t});\n\t\t\tReflect.defineProperty(commit, \"parent\", {\n\t\t\t\tget: () =>\n\t\t\t\t\tassert(false, 0xa60 /* Should not access 'parent' property of an evicted commit */),\n\t\t\t});\n\t\t}\n\n\t\t// Dropping the parent field removes (transitively) all references to the evicted commits so they can be garbage collected.\n\t\tdelete newTrunkBase.parent;\n\t\tthis.trunkBase = newTrunkBase;\n\n\t\tthis._events.emit(\"ancestryTrimmed\", trimmedRevisions);\n\t}\n\n\tpublic isEmpty(): boolean {\n\t\tfor (const branch of this.sharedBranches.values()) {\n\t\t\tif (!branch.isEmpty(this.trunkBase)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn this.minimumSequenceNumber === minimumPossibleSequenceNumber;\n\t}\n\n\tpublic getSummaryData(): SummaryData<TChangeset> {\n\t\t// Trimming the trunk before serializing ensures that the trunk data in the summary is as minimal as possible.\n\t\tthis.trimHistory();\n\n\t\tconst minSeqNumberToSummarize: SequenceId = {\n\t\t\tsequenceNumber: brand(this.minimumSequenceNumber + 1),\n\t\t};\n\t\tlet minBaseSeqId: SequenceId = minSeqNumberToSummarize;\n\t\tconst mainBranch = this.getSharedBranch(\"main\");\n\t\tconst branches = new Map<BranchId, SharedBranchSummaryData<TChangeset>>();\n\t\tfor (const [branchId, branch] of this.sharedBranches) {\n\t\t\tif (branchId !== \"main\") {\n\t\t\t\tconst branchSummary = branch.getSummaryData(\n\t\t\t\t\tminSeqNumberToSummarize,\n\t\t\t\t\tthis.trunkBase.revision,\n\t\t\t\t);\n\t\t\t\tbranches.set(branchId, branchSummary);\n\t\t\t\tassert(branchSummary.base !== undefined, 0xc57 /* Branch summary must have a base */);\n\t\t\t\tconst baseSequenceId = mainBranch.getCommitSequenceId(branchSummary.base);\n\t\t\t\tminBaseSeqId = minSequenceId(minBaseSeqId, baseSequenceId);\n\t\t\t}\n\t\t}\n\t\tconst mainSummary = mainBranch.getSummaryData(minBaseSeqId, this.trunkBase.revision);\n\t\treturn { main: mainSummary, branches, originator: this.localSessionId };\n\t}\n\n\tpublic loadSummaryData(data: SummaryData<TChangeset>): void {\n\t\tassert(\n\t\t\tthis.isEmpty(),\n\t\t\t0x68a /* Attempted to load from summary after edit manager was already mutated */,\n\t\t);\n\t\t// Record the tags of each trunk commit as we generate the trunk so they can be looked up quickly\n\t\t// when hydrating the peer branches below\n\t\tconst trunkRevisionCache = new Map<RevisionTag, GraphCommit<TChangeset>>();\n\t\ttrunkRevisionCache.set(this.trunkBase.revision, this.trunkBase);\n\t\tconst mainBranch =\n\t\t\tthis.sharedBranches.get(\"main\") ?? fail(0xc58 /* Main branch must exist */);\n\t\tmainBranch.loadSummaryData(data.main, trunkRevisionCache);\n\t\tif (data.branches !== undefined) {\n\t\t\tfor (const [branchId, branchData] of data.branches) {\n\t\t\t\tconst branch = this.createSharedBranch(\n\t\t\t\t\tbranchId,\n\t\t\t\t\tbranchData.session,\n\t\t\t\t\tmainBranch,\n\t\t\t\t\tmainBranch.trunk.fork(),\n\t\t\t\t);\n\t\t\t\tbranch.loadSummaryData(branchData, trunkRevisionCache);\n\t\t\t\tthis.addSharedBranch(branchId, branch);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic getTrunkHead(branchId: BranchId): GraphCommit<TChangeset> {\n\t\treturn this.getSharedBranch(branchId).trunk.getHead();\n\t}\n\n\tpublic getTrunkChanges(branchId: BranchId): TChangeset[] {\n\t\treturn this.getTrunkCommits(branchId).map((c) => c.change);\n\t}\n\n\tpublic getTrunkCommits(branchId: BranchId): GraphCommit<TChangeset>[] {\n\t\treturn getPathFromBase(this.getTrunkHead(branchId), this.trunkBase);\n\t}\n\n\tpublic getLocalCommits(branchId: BranchId): readonly GraphCommit<TChangeset>[] {\n\t\tconst branch = this.getSharedBranch(branchId);\n\t\treturn branch.getLocalCommits();\n\t}\n\n\t/**\n\t * Gets the length of the longest branch maintained by this `EditManager`.\n\t * This may be the length of a peer branch or the local branch.\n\t *\n\t * @remarks\n\t * The length is counted from the lowest common ancestor with the trunk such that a fully sequenced branch would\n\t * have length zero.\n\t */\n\tpublic getLongestBranchLength(): number {\n\t\tlet max = 0;\n\t\tfor (const branch of this.sharedBranches.values()) {\n\t\t\tmax = Math.max(max, branch.getLongestBranchLength());\n\t\t}\n\t\treturn max;\n\t}\n\n\tpublic sequenceBranchCreation(\n\t\tsessionId: SessionId,\n\t\treferenceSequenceNumber: SeqNumber,\n\t\tbranchId: BranchId,\n\t): void {\n\t\tif (sessionId === this.localSessionId) {\n\t\t\tassert(this.sharedBranches.has(branchId), 0xc59 /* Expected branch to already exist */);\n\t\t\treturn;\n\t\t}\n\n\t\tconst mainBranch = this.getSharedBranch(\"main\");\n\t\tconst branchTrunk = mainBranch.rebasePeer(sessionId, referenceSequenceNumber).fork();\n\t\tthis.createAndAddSharedBranch(branchId, sessionId, mainBranch, branchTrunk);\n\t}\n\n\tpublic addNewBranch(branchId: BranchId): void {\n\t\tconst main = this.getSharedBranch(\"main\") ?? fail(0xc5a /* Main branch must exist */);\n\t\tthis.createAndAddSharedBranch(\n\t\t\tbranchId,\n\t\t\tthis.localSessionId,\n\t\t\tmain,\n\t\t\tthis.getLocalBranch(\"main\").fork(),\n\t\t);\n\t}\n\n\tpublic getSharedBranchIds(): BranchId[] {\n\t\treturn [...this.sharedBranches.keys()];\n\t}\n\n\tpublic removeBranch(branchId: BranchId): void {\n\t\tassert(branchId !== \"main\", 0xc5b /* Cannot remove main branch */);\n\t\tconst hadBranch = this.sharedBranches.delete(branchId);\n\t\tassert(hadBranch, 0xc5c /* Expected branch to exist */);\n\t}\n\n\tprivate createAndAddSharedBranch(\n\t\tbranchId: BranchId,\n\t\tsessionId: SessionId | undefined,\n\t\tparent: SharedBranch<TEditor, TChangeset> | undefined,\n\t\tbranch: SharedTreeBranch<TEditor, TChangeset>,\n\t): SharedBranch<TEditor, TChangeset> {\n\t\tconst sharedBranch = this.createSharedBranch(branchId, sessionId, parent, branch);\n\t\tthis.addSharedBranch(branchId, sharedBranch);\n\t\treturn sharedBranch;\n\t}\n\n\tprivate addSharedBranch(\n\t\tbranchId: BranchId,\n\t\tbranch: SharedBranch<TEditor, TChangeset>,\n\t): void {\n\t\tassert(\n\t\t\t!this.sharedBranches.has(branchId),\n\t\t\t0xc5d /* A branch with this ID already exists */,\n\t\t);\n\t\tthis.sharedBranches.set(branchId, branch);\n\n\t\t// Track all forks of the local branch for purposes of trunk eviction. Unlike the local branch, they have\n\t\t// an unknown lifetime and rebase frequency, so we can not make any assumptions about which trunk commits\n\t\t// they require and therefore we monitor them explicitly.\n\t\tonForkTransitive(branch.localBranch, (fork) => this.registerBranch(fork));\n\n\t\tif (branchId !== \"main\") {\n\t\t\tthis.registerBranch(branch.localBranch);\n\t\t\tthis.onSharedBranchCreated?.(branchId);\n\t\t}\n\t}\n\n\tprivate createSharedBranch(\n\t\tbranchId: BranchId,\n\t\tsessionId: SessionId | undefined,\n\t\tparent: SharedBranch<TEditor, TChangeset> | undefined,\n\t\tbranch: SharedTreeBranch<TEditor, TChangeset>,\n\t): SharedBranch<TEditor, TChangeset> {\n\t\tconst sharedBranch = new SharedBranch(\n\t\t\tparent,\n\t\t\tbranch,\n\t\t\tbranchId,\n\t\t\tsessionId,\n\t\t\tminimumPossibleSequenceId,\n\t\t\tthis.changeFamily,\n\t\t\tthis.mintRevisionTag,\n\t\t\tthis._events,\n\t\t\tthis.telemetryEventBatcher,\n\t\t);\n\n\t\treturn sharedBranch;\n\t}\n\n\t/* eslint-disable jsdoc/check-indentation */\n\t/**\n\t * Add a bunch of sequenced changes. A bunch is a group of sequenced commits that have the following properties:\n\t * - They are not interleaved with messages from other DDSes in the container.\n\t * - They are all part of the same batch, which entails:\n\t * - They are contiguous in sequencing order.\n\t * - They are all from the same client.\n\t * - They are all based on the same reference sequence number.\n\t * - They are not interleaved with messages from other clients.\n\t */\n\t/* eslint-enable jsdoc/check-indentation */\n\tpublic addSequencedChanges(\n\t\tnewCommits: readonly GraphCommit<TChangeset>[],\n\t\tsessionId: SessionId,\n\t\tsequenceNumber: SeqNumber,\n\t\treferenceSequenceNumber: SeqNumber,\n\t\tbranchId: BranchId,\n\t): void {\n\t\tassert(newCommits.length > 0, 0xad8 /* Expected at least one sequenced change */);\n\t\tassert(\n\t\t\tsequenceNumber > this.minimumSequenceNumber,\n\t\t\t0x713 /* Expected change sequence number to exceed the last known minimum sequence number */,\n\t\t);\n\n\t\tconst branch = this.getSharedBranch(branchId);\n\n\t\tconst onSequenceLocalCommit = (\n\t\t\tcommit: GraphCommit<TChangeset>,\n\t\t\tsequenceId: SequenceId,\n\t\t\tpreviousSequenceId: SequenceId,\n\t\t): void => {\n\t\t\t// Next, we need to update the sequence IDs that our local branches (user's branches, not peer branches) are associated with.\n\t\t\t// In particular, if a local branch is based on the previous trunk head (the branch's first ancestor in the trunk is the commit that was the head before we pushed the new commit)\n\t\t\t// and also branches off of the local branch (it has an ancestor that is part of the local branch), it needs to have its sequence number advanced to be that of the new trunk head.\n\t\t\t// Intuitively, this makes sense because:\n\t\t\t// 1. The trunk's head just advanced forward by some (sequence) amount.\n\t\t\t// 2. The local branch is always rebased to be branching off of the head of the trunk (not literally in this case, because of the optimization, but in effect).\n\t\t\t// 3. Therefore, the entire local branch just advanced forward by some (sequence) amount, and any commits downstream of it which track the sequence numbers of their base commits on the trunk should also advance.\n\t\t\t// This update is not necessarily required for all local branches, since some may have fallen behind the local branch and are based on older trunk commits (such branches do not need updating).\n\t\t\tconst currentBranches = this.trunkBranches.get(previousSequenceId);\n\t\t\tif (currentBranches !== undefined) {\n\t\t\t\tconst newBranches = getOrCreate(this.trunkBranches, sequenceId, () => new Set());\n\t\t\t\tfor (const forkedBranch of currentBranches) {\n\t\t\t\t\t// Check every branch associated with the old sequence ID and advance it if it is based on the local branch (specifically, on the local branch as it was before we pushed its first commit to the trunk).\n\t\t\t\t\t// We validate this by checking if the branch's head is a descendant of the local commit that we just pushed.\n\t\t\t\t\tif (findAncestor(forkedBranch.getHead(), (c) => c === commit) !== undefined) {\n\t\t\t\t\t\tnewBranches.add(forkedBranch);\n\t\t\t\t\t\tcurrentBranches.delete(forkedBranch);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Clean up our trunk branches map by removing any empty sets.\n\t\t\t\tif (currentBranches.size === 0) {\n\t\t\t\t\tthis.trunkBranches.delete(previousSequenceId);\n\t\t\t\t}\n\t\t\t\tif (newBranches.size === 0) {\n\t\t\t\t\tthis.trunkBranches.delete(sequenceId);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst areLocalCommits = sessionId === this.localSessionId;\n\t\tbranch.addSequencedChanges(\n\t\t\tnewCommits,\n\t\t\tsessionId,\n\t\t\tsequenceNumber,\n\t\t\tareLocalCommits,\n\t\t\treferenceSequenceNumber,\n\t\t\tonSequenceLocalCommit,\n\t\t);\n\t}\n\n\tpublic findLocalCommit(\n\t\tbranchId: BranchId,\n\t\trevision: RevisionTag,\n\t): [commit: GraphCommit<TChangeset>, commitsAfter: GraphCommit<TChangeset>[]] {\n\t\tconst commits: GraphCommit<TChangeset>[] = [];\n\t\tconst commit = findAncestor(\n\t\t\t[this.getSharedBranch(branchId).localBranch.getHead(), commits],\n\t\t\t(c) => c.revision === revision,\n\t\t);\n\t\tassert(commit !== undefined, 0x599 /* Expected local branch to contain revision */);\n\t\treturn [commit, commits];\n\t}\n}\n\n/**\n * The in-memory data that summaries contain\n */\nexport interface SummaryData<TChangeset> {\n\treadonly originator?: SessionId;\n\treadonly main: SharedBranchSummaryData<TChangeset>;\n\treadonly branches?: ReadonlyMap<BranchId, SharedBranchSummaryData<TChangeset>>;\n}\n\nexport interface SharedBranchSummaryData<TChangeset> {\n\treadonly id?: BranchId;\n\treadonly name?: string;\n\treadonly session?: SessionId;\n\treadonly author?: string;\n\treadonly base?: RevisionTag;\n\treadonly trunk: readonly SequencedCommit<TChangeset>[];\n\treadonly peerLocalBranches: ReadonlyMap<SessionId, SummarySessionBranch<TChangeset>>;\n}\n\n/**\n * Gets the path from the base of a branch to its head.\n */\nfunction getPathFromBase<TCommit extends { parent?: TCommit }>(\n\tbranchHead: TCommit,\n\tbaseBranchHead: TCommit,\n): TCommit[] {\n\tconst path: TCommit[] = [];\n\tassert(\n\t\tfindCommonAncestor([branchHead, path], baseBranchHead) !== undefined,\n\t\t0x573 /* Expected branches to be related */,\n\t);\n\treturn path;\n}\n\nclass SharedBranch<TEditor extends ChangeFamilyEditor, TChangeset> {\n\t/**\n\t * This branch holds the changes made by this client which have not yet been confirmed as sequenced changes.\n\t */\n\tpublic readonly localBranch: SharedTreeBranch<TEditor, TChangeset>;\n\n\t/**\n\t * Branches are maintained to represent the local change list that the issuing client had\n\t * at the time of submitting the latest known edit on the branch.\n\t * This means the head commit of each branch is always in its original (non-rebased) form.\n\t */\n\tprivate readonly peerLocalBranches: Map<SessionId, SharedTreeBranch<TEditor, TChangeset>> =\n\t\tnew Map();\n\n\t/**\n\t * A map from a sequence id to the commit which has that sequence id.\n\t * This also includes an entry for the {@link trunkBase} which always has the lowest key in the map.\n\t */\n\tpublic readonly sequenceIdToCommit = new BTree<SequenceId, GraphCommit<TChangeset>>(\n\t\tundefined,\n\t\tsequenceIdComparator,\n\t);\n\n\t/**\n\t * The list of commits (from oldest to most recent) that are on the local branch but not on the trunk.\n\t * When a local commit is sequenced, the first commit in this list shifted onto the tip of the trunk.\n\t */\n\tprivate readonly localCommits: GraphCommit<TChangeset>[] = [];\n\n\t/**\n\t * Records extra data associated with sequenced commits.\n\t * This does not include an entry for the {@link trunkBase}.\n\t */\n\tprivate readonly commitMetadata = new Map<\n\t\tRevisionTag,\n\t\t{ sequenceId: SequenceId; sessionId: SessionId }\n\t>();\n\n\tpublic constructor(\n\t\tpublic readonly parentBranch: SharedBranch<TEditor, TChangeset> | undefined,\n\t\tpublic readonly trunk: SharedTreeBranch<TEditor, TChangeset>,\n\t\tprivate readonly id: BranchId,\n\t\tprivate readonly sessionId: SessionId | undefined,\n\t\tbaseCommitSequenceId: SequenceId,\n\t\tprivate readonly changeFamily: ChangeFamily<TEditor, TChangeset>,\n\t\tprivate readonly mintRevisionTag: () => RevisionTag,\n\t\tbranchTrimmer: Listenable<BranchTrimmingEvents>,\n\t\ttelemetryEventBatcher: TelemetryEventBatcher<keyof RebaseStatsWithDuration> | undefined,\n\t) {\n\t\tthis.localBranch = new SharedTreeBranch(\n\t\t\tthis.trunk.getHead(),\n\t\t\tchangeFamily,\n\t\t\tmintRevisionTag,\n\t\t\tbranchTrimmer,\n\t\t\ttelemetryEventBatcher,\n\t\t);\n\n\t\tthis.sequenceIdToCommit.set(baseCommitSequenceId, this.trunk.getHead());\n\n\t\tthis.localBranch.events.on(\"afterChange\", (event) => {\n\t\t\tif (event.type === \"append\") {\n\t\t\t\tfor (const commit of event.newCommits) {\n\t\t\t\t\tthis.localCommits.push(commit);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.localCommits.length = 0;\n\t\t\t\tfindCommonAncestor(\n\t\t\t\t\t[this.localBranch.getHead(), this.localCommits],\n\t\t\t\t\tthis.trunk.getHead(),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic addSequencedChanges(\n\t\tnewCommits: readonly GraphCommit<TChangeset>[],\n\t\tsessionId: SessionId,\n\t\tsequenceNumber: SeqNumber,\n\t\tareLocalCommits: boolean,\n\t\treferenceSequenceNumber: SeqNumber,\n\t\tonSequenceLocalCommit: OnSequenceCommit<TChangeset>,\n\t): void {\n\t\tassert(\n\t\t\tsequenceNumber >= // This is \">=\", not \">\" because changes in the same batch will have the same sequence number\n\t\t\t\t(this.sequenceIdToCommit.maxKey()?.sequenceNumber ?? minimumPossibleSequenceNumber),\n\t\t\t0xa64 /* Attempted to sequence change with an outdated sequence number */,\n\t\t);\n\n\t\tconst batchSize = this.getBatchSize(sequenceNumber);\n\t\t// The sequence id for the next commit to be processed in the bunch.\n\t\tlet nextSequenceId =\n\t\t\tbatchSize === 0\n\t\t\t\t? {\n\t\t\t\t\t\tsequenceNumber,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tsequenceNumber,\n\t\t\t\t\t\tindexInBatch: batchSize,\n\t\t\t\t\t};\n\n\t\t// Local changes, i.e., changes from this client are applied by fast forwarding the local branch commit onto\n\t\t// the trunk.\n\t\tif (areLocalCommits) {\n\t\t\tfor (const { revision } of newCommits) {\n\t\t\t\tthis.sequenceLocalCommit(revision, nextSequenceId, sessionId, onSequenceLocalCommit);\n\t\t\t\tnextSequenceId = getNextSequenceId(nextSequenceId);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Remote changes, i.e., changes from remote clients are applied in three steps.\n\t\t// Step 1 - Recreate the peer remote client's local environment.\n\t\t// Get the revision that the remote change is based on and rebase that peer local branch over the part of the\n\t\t// trunk up to the base revision. This will be a no-op if the sending client has not advanced since the last\n\t\t// time we received an edit from it\n\t\tconst peerLocalBranch = this.rebasePeer(sessionId, referenceSequenceNumber);\n\n\t\t// Step 2 - Append the changes to the peer branch and rebase the changes to the tip of the trunk.\n\t\tif (peerLocalBranch.getHead() === this.trunk.getHead()) {\n\t\t\t// If the peer local branch is fully caught up and empty (no changes relative to the trunk) after being\n\t\t\t// rebased, then push changes to the trunk directly and update the peer branch to the trunk's head.\n\t\t\tfor (const newCommit of newCommits) {\n\t\t\t\tthis.pushCommitToTrunk(nextSequenceId, { ...newCommit, sessionId });\n\t\t\t\tnextSequenceId = getNextSequenceId(nextSequenceId);\n\t\t\t}\n\t\t\tpeerLocalBranch.setHead(this.trunk.getHead());\n\t\t} else {\n\t\t\t// Otherwise, push the changes to the peer local branch and merge the branch into the trunk.\n\t\t\tfor (const newCommit of newCommits) {\n\t\t\t\tpeerLocalBranch.apply(tagChange(newCommit.change, newCommit.revision));\n\t\t\t}\n\t\t\tconst result = this.trunk.merge(peerLocalBranch);\n\t\t\tif (result !== undefined) {\n\t\t\t\t// If the merge resulted in any changes to the trunk, update the sequence map and trunk metadata\n\t\t\t\t// with the rebased commits.\n\t\t\t\tfor (const sourceCommit of result.sourceCommits) {\n\t\t\t\t\tthis.sequenceIdToCommit.set(nextSequenceId, sourceCommit);\n\t\t\t\t\tthis.commitMetadata.set(sourceCommit.revision, {\n\t\t\t\t\t\tsequenceId: nextSequenceId,\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t});\n\t\t\t\t\tnextSequenceId = getNextSequenceId(nextSequenceId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Step 3 - Rebase the local branch over the updated trunk.\n\t\tthis.localBranch.rebaseOnto(this.trunk);\n\t}\n\n\tpublic isEmpty(baseCommit: GraphCommit<TChangeset>): boolean {\n\t\treturn (\n\t\t\tthis.trunk.getHead() === baseCommit &&\n\t\t\tthis.peerLocalBranches.size === 0 &&\n\t\t\tthis.localBranch.getHead() === this.trunk.getHead()\n\t\t);\n\t}\n\n\tpublic rebasePeer(\n\t\tsessionId: SessionId,\n\t\treferenceSequenceNumber: SeqNumber,\n\t): SharedTreeBranch<TEditor, TChangeset> {\n\t\tconst [, baseRevisionInTrunk] = this.getClosestTrunkCommit(referenceSequenceNumber);\n\t\tconst peerLocalBranch = getOrCreate(\n\t\t\tthis.peerLocalBranches,\n\t\t\tsessionId,\n\t\t\t() => new SharedTreeBranch(baseRevisionInTrunk, this.changeFamily, this.mintRevisionTag),\n\t\t);\n\t\tpeerLocalBranch.rebaseOnto(this.trunk, baseRevisionInTrunk);\n\t\treturn peerLocalBranch;\n\t}\n\n\tpublic getPeerBranchOrTrunk(sessionId: SessionId): SharedTreeBranch<TEditor, TChangeset> {\n\t\treturn this.peerLocalBranches.get(sessionId) ?? this.trunk;\n\t}\n\n\t/**\n\t * Gets the length of the longest branch maintained by this `SharedBranch`.\n\t * This may be the length of a peer branch or the local branch.\n\t *\n\t * @remarks\n\t * The length is counted from the lowest common ancestor with the trunk such that a fully sequenced branch would\n\t * have length zero.\n\t */\n\tpublic getLongestBranchLength(): number {\n\t\tlet max = 0;\n\t\tconst trunkHead = this.trunk.getHead();\n\t\tfor (const branch of this.peerLocalBranches.values()) {\n\t\t\tconst branchPath = getPathFromBase(branch.getHead(), trunkHead);\n\t\t\tif (branchPath.length > max) {\n\t\t\t\tmax = branchPath.length;\n\t\t\t}\n\t\t}\n\t\tconst localPath = getPathFromBase(this.localBranch.getHead(), trunkHead);\n\t\treturn Math.max(max, localPath.length);\n\t}\n\n\tpublic trimHistory(newBase: GraphCommit<TChangeset>, sequenceId: SequenceId): void {\n\t\tthis.rebasePeers(newBase);\n\n\t\tthis.sequenceIdToCommit.editRange(\n\t\t\tminimumPossibleSequenceId,\n\t\t\tsequenceId,\n\t\t\ttrue,\n\t\t\t(s, commit) => {\n\t\t\t\t// Cleanup look-aside data for each evicted commit\n\t\t\t\tthis.commitMetadata.delete(commit.revision);\n\t\t\t\t// Delete all evicted commits from `sequenceMap` except for the latest one, which is the new `trunkBase`\n\t\t\t\tif (equalSequenceIds(s, sequenceId)) {\n\t\t\t\t\tassert(\n\t\t\t\t\t\tcommit === newBase,\n\t\t\t\t\t\t0x729 /* Expected last evicted commit to be new trunk base */,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn { delete: true };\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tconst trunkSize = getPathFromBase(this.trunk.getHead(), newBase).length;\n\t\tassert(\n\t\t\tthis.sequenceIdToCommit.size === trunkSize + 1,\n\t\t\t0x744 /* The size of the sequenceMap must have one element more than the trunk */,\n\t\t);\n\t\tassert(\n\t\t\tthis.commitMetadata.size === trunkSize,\n\t\t\t0x745 /* The size of the trunkMetadata must be the same as the trunk */,\n\t\t);\n\t}\n\n\tprivate rebasePeers(commit: GraphCommit<TChangeset>): void {\n\t\tfor (const [, branch] of this.peerLocalBranches) {\n\t\t\tbranch.rebaseOnto(this.trunk, commit);\n\t\t}\n\n\t\t// The metadata for new trunk base revision needs to be deleted before modifying it.\n\t\tthis.commitMetadata.delete(commit.revision);\n\t}\n\n\tpublic getLocalCommits(): readonly GraphCommit<TChangeset>[] {\n\t\treturn this.localCommits;\n\t}\n\n\t/**\n\t * Promote the oldest un-sequenced commit on the local branch to the head of the trunk.\n\t * @param sequenceId - The sequence id of the new trunk commit\n\t * @remarks This method is a performance optimization for the scenario where this client receives its own change back after sequencing.\n\t * The normal (not optimized) process in this case would be to apply the new sequenced commit to the trunk and then rebase the local branch over the trunk.\n\t * The first commit will be \"the same\" (as in, it will have the same revision) as the commit that was just sequenced, so the rebase will be a no-op.\n\t * Because the rebase is a no-op, we can skip it entirely and simply remove the commit from the local branch and append it to the trunk.\n\t * Avoiding the overhead of the rebase process, even when it's a no-op, has real measured performance benefits and is worth the added complexity here.\n\t */\n\tprivate sequenceLocalCommit(\n\t\trevision: RevisionTag,\n\t\tsequenceId: SequenceId,\n\t\tsessionId: SessionId,\n\t\tonSequenceLocalCommit: OnSequenceCommit<TChangeset>,\n\t): void {\n\t\tif (this.commitMetadata.has(revision)) {\n\t\t\t// This can happen if the commit came from a shared branch and was concurrently merged by another client.\n\t\t\t// In this case, the newly sequenced commit is redundant and should therefore be ignored.\n\t\t\treturn;\n\t\t}\n\n\t\t// First, push the local commit to the trunk.\n\t\t// We are mutating our `localCommits` cache here,but there is no need to actually change the `localBranch` itself because it will simply catch up later if/when it next rebases.\n\t\tconst firstLocalCommit = this.localCommits.shift();\n\t\tassert(\n\t\t\tfirstLocalCommit !== undefined,\n\t\t\t0x6b5 /* Received a sequenced change from the local session despite having no local changes */,\n\t\t);\n\n\t\tconst prevSequenceId = this.getCommitSequenceId(this.trunk.getHead().revision);\n\t\tthis.pushGraphCommitToTrunk(sequenceId, firstLocalCommit, sessionId);\n\t\tonSequenceLocalCommit(firstLocalCommit, sequenceId, prevSequenceId);\n\t}\n\n\t/**\n\t * Finds the most recent trunk commit that was sequenced at or before the given point.\n\t * @param searchBy - the sequence number or the sequence id to search for\n\t * @remarks Fails if there is no eligible commit.\n\t * @returns the closest commit and its sequence id\n\t */\n\tpublic getClosestTrunkCommit(searchBy: SeqNumber): [SequenceId, GraphCommit<TChangeset>];\n\tpublic getClosestTrunkCommit(searchBy: SequenceId): [SequenceId, GraphCommit<TChangeset>];\n\tpublic getClosestTrunkCommit(\n\t\tsearchBy: SeqNumber | SequenceId,\n\t): [SequenceId, GraphCommit<TChangeset>] {\n\t\tconst sequenceId: SequenceId =\n\t\t\ttypeof searchBy === \"number\"\n\t\t\t\t? {\n\t\t\t\t\t\t// This is to make sure that the correct commit is selected in this 2 scenarios:\n\t\t\t\t\t\t// 1) The commit is unique for that sequence number\n\t\t\t\t\t\t// 2) There are more than one commit for the same sequence number, in this case we need to select the last one.\n\t\t\t\t\t\tsequenceNumber: searchBy,\n\t\t\t\t\t\tindexInBatch: Number.POSITIVE_INFINITY,\n\t\t\t\t\t}\n\t\t\t\t: searchBy;\n\n\t\tconst commit = this.sequenceIdToCommit.getPairOrNextLower(sequenceId);\n\t\tassert(commit !== undefined, 0x746 /* sequence id has been evicted */);\n\t\treturn commit;\n\t}\n\n\tprivate pushGraphCommitToTrunk(\n\t\tsequenceId: SequenceId,\n\t\tgraphCommit: GraphCommit<TChangeset>,\n\t\tsessionId: SessionId,\n\t): void {\n\t\tthis.trunk.setHead(graphCommit);\n\t\tthis.registerSequencedCommit(sequenceId, sessionId, graphCommit);\n\t}\n\n\tprivate pushCommitToTrunk(sequenceId: SequenceId, commit: Commit<TChangeset>): void {\n\t\tconst mintedCommit = mintCommit(this.trunk.getHead(), commit);\n\t\tthis.pushGraphCommitToTrunk(sequenceId, mintedCommit, commit.sessionId);\n\t}\n\n\tprivate registerSequencedCommit(\n\t\tsequenceId: SequenceId,\n\t\tsessionId: SessionId,\n\t\tcommit: GraphCommit<TChangeset>,\n\t): void {\n\t\tthis.sequenceIdToCommit.set(sequenceId, commit);\n\t\tthis.commitMetadata.set(commit.revision, { sequenceId, sessionId });\n\t}\n\n\tpublic getCommitSequenceId(commitRevision: RevisionTag): SequenceId {\n\t\tconst id = this.commitMetadata.get(commitRevision)?.sequenceId;\n\t\tif (id === undefined) {\n\t\t\treturn minimumPossibleSequenceId;\n\t\t}\n\t\treturn id;\n\t}\n\n\t// TODO: Document that this is to handle receiving separate commits with the same sequence ID,\n\t// as a batch of changes are not guaranteed to be processed as one bunch.\n\tprivate getBatchSize(sequenceNumber: SeqNumber): number {\n\t\tconst startSequenceId: SequenceId = {\n\t\t\tsequenceNumber,\n\t\t};\n\t\tconst endSequenceId: SequenceId = {\n\t\t\tsequenceNumber: brand((sequenceNumber as number) + 1),\n\t\t};\n\n\t\treturn this.sequenceIdToCommit.getRange(startSequenceId, endSequenceId, false).length;\n\t}\n\n\tpublic getSummaryData(\n\t\tminSeqNumberToSummarize: SequenceId,\n\t\ttrunkBaseRevision: RevisionTag,\n\t): SharedBranchSummaryData<TChangeset> {\n\t\t// The assert below is acceptable at present because summarization only ever occurs on a client with no\n\t\t// local/in-flight changes.\n\t\t// In the future we may wish to relax this constraint. For that to work, the current implementation of\n\t\t// `EditManager` would have to be amended in one of two ways:\n\t\t// A) Changes made by the local session should be represented by a branch in `EditManager.branches`.\n\t\t// B) The contents of such a branch should be computed on demand based on the trunk.\n\t\t// Note that option (A) would be a simple change to `addSequencedChanges` whereas (B) would likely require\n\t\t// rebasing trunk changes over the inverse of trunk changes.\n\t\tassert(\n\t\t\tthis.localBranch.getHead() === this.trunk.getHead(),\n\t\t\t0xc5e /* Clients with local changes cannot be used to generate summaries */,\n\t\t);\n\n\t\tlet parentHead: GraphCommit<TChangeset>;\n\t\tif (this.parentBranch === undefined) {\n\t\t\tconst oldestCommitInCollabWindow =\n\t\t\t\tthis.getClosestTrunkCommit(minSeqNumberToSummarize)[1];\n\t\t\t// Path construction is exclusive, so we need to use the parent of the oldest commit in the window if it exists\n\t\t\tparentHead = oldestCommitInCollabWindow.parent ?? oldestCommitInCollabWindow;\n\t\t} else {\n\t\t\tparentHead = this.parentBranch.trunk.getHead();\n\t\t}\n\n\t\tconst childBranchTrunkCommits: GraphCommit<TChangeset>[] = [];\n\t\tconst forkPointFromMainTrunk = findCommonAncestor(\n\t\t\t[this.trunk.getHead(), childBranchTrunkCommits],\n\t\t\tparentHead,\n\t\t);\n\t\tassert(\n\t\t\tforkPointFromMainTrunk !== undefined,\n\t\t\t0xc5f /* Expected child branch to be based on main branch */,\n\t\t);\n\n\t\tconst trunk = childBranchTrunkCommits.map((c) => {\n\t\t\tconst metadata =\n\t\t\t\tthis.commitMetadata.get(c.revision) ??\n\t\t\t\tfail(0xad5 /* Expected metadata for trunk commit */);\n\t\t\tconst commit: SequencedCommit<TChangeset> = {\n\t\t\t\tchange: c.change,\n\t\t\t\trevision: c.revision,\n\t\t\t\tsequenceNumber: metadata.sequenceId.sequenceNumber,\n\t\t\t\tsessionId: metadata.sessionId,\n\t\t\t};\n\t\t\tif (metadata.sequenceId.indexInBatch !== undefined) {\n\t\t\t\tcommit.indexInBatch = metadata.sequenceId.indexInBatch;\n\t\t\t}\n\t\t\treturn commit;\n\t\t});\n\n\t\tconst peerLocalBranches = new Map<SessionId, SummarySessionBranch<TChangeset>>(\n\t\t\tmapIterable(this.peerLocalBranches.entries(), ([sessionId, branch]) => {\n\t\t\t\tconst branchPath: GraphCommit<TChangeset>[] = [];\n\t\t\t\tconst ancestor =\n\t\t\t\t\tfindCommonAncestor([branch.getHead(), branchPath], this.trunk.getHead()) ??\n\t\t\t\t\tfail(0xad6 /* Expected branch to be based on trunk */);\n\n\t\t\t\tconst base =\n\t\t\t\t\tancestor.revision === trunkBaseRevision ? rootRevision : ancestor.revision;\n\t\t\t\treturn [\n\t\t\t\t\tsessionId,\n\t\t\t\t\t{\n\t\t\t\t\t\tbase,\n\t\t\t\t\t\tcommits: branchPath.map((c) => {\n\t\t\t\t\t\t\tconst commit: Commit<TChangeset> = {\n\t\t\t\t\t\t\t\tchange: c.change,\n\t\t\t\t\t\t\t\trevision: c.revision,\n\t\t\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn commit;\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}),\n\t\t);\n\n\t\tconst trunkBase =\n\t\t\tthis.parentBranch === undefined ? undefined : forkPointFromMainTrunk.revision;\n\t\treturn { trunk, peerLocalBranches, base: trunkBase, id: this.id, session: this.sessionId };\n\t}\n\n\tpublic loadSummaryData(\n\t\tdata: SharedBranchSummaryData<TChangeset>,\n\t\ttrunkRevisionCache: Map<RevisionTag, GraphCommit<TChangeset>>,\n\t): void {\n\t\tassert(\n\t\t\t(this.parentBranch === undefined) === (data.base === undefined),\n\t\t\t0xc60 /* Expected branch base to match presence of parent branch */,\n\t\t);\n\t\tconst parentTrunkBase =\n\t\t\ttrunkRevisionCache.get(data.base ?? rootRevision) ??\n\t\t\tfail(0xc61 /* Expected base revision to be in trunk cache */);\n\t\tlet trunkHead = parentTrunkBase;\n\t\tfor (const c of data.trunk) {\n\t\t\tconst sequenceId: SequenceId =\n\t\t\t\tc.indexInBatch === undefined\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tsequenceNumber: c.sequenceNumber,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tsequenceNumber: c.sequenceNumber,\n\t\t\t\t\t\t\tindexInBatch: c.indexInBatch,\n\t\t\t\t\t\t};\n\t\t\tconst commit = mintCommit(trunkHead, c);\n\t\t\tthis.sequenceIdToCommit.set(sequenceId, commit);\n\t\t\tthis.commitMetadata.set(c.revision, {\n\t\t\t\tsequenceId,\n\t\t\t\tsessionId: c.sessionId,\n\t\t\t});\n\t\t\ttrunkRevisionCache.set(c.revision, commit);\n\t\t\ttrunkHead = commit;\n\t\t}\n\t\tthis.trunk.setHead(trunkHead);\n\n\t\tthis.localBranch.setHead(this.trunk.getHead());\n\n\t\tfor (const [sessionId, branch] of data.peerLocalBranches) {\n\t\t\tconst commit =\n\t\t\t\ttrunkRevisionCache.get(branch.base) ??\n\t\t\t\tfail(0xad7 /* Expected summary branch to be based off of a revision in the trunk */);\n\n\t\t\tlet branchHead = commit;\n\t\t\tfor (const c of branch.commits) {\n\t\t\t\tbranchHead = mintCommit(branchHead, c);\n\t\t\t}\n\t\t\tthis.peerLocalBranches.set(\n\t\t\t\tsessionId,\n\t\t\t\tnew SharedTreeBranch(branchHead, this.changeFamily, this.mintRevisionTag),\n\t\t\t);\n\t\t}\n\t}\n}\n\n// Returns the sequence id for the next commit to be processed in the bunch. Since all the commits have the\n// same sequence number, only the index in the batch needs to be incremented.\nfunction getNextSequenceId(sequenceId: SequenceId): SequenceId {\n\treturn {\n\t\tsequenceNumber: sequenceId.sequenceNumber,\n\t\tindexInBatch: (sequenceId.indexInBatch ?? 0) + 1,\n\t};\n}\n\ntype OnSequenceCommit<TChangeset> = (\n\tcommit: GraphCommit<TChangeset>,\n\tsequenceId: SequenceId,\n\tprevSequenceId: SequenceId,\n) => void;\n"]}
@@ -3,11 +3,11 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import type { IIdCompressor } from "@fluidframework/id-compressor";
6
+ import type { MinimumVersionForCollab } from "@fluidframework/runtime-definitions/internal";
6
7
  import { type CodecTree, type CodecWriteOptions, type DependentFormatVersion, type ICodecFamily, type ICodecOptions, type IJsonCodec } from "../codec/index.js";
7
8
  import type { ChangeEncodingContext, EncodedRevisionTag, RevisionTag, SchemaAndPolicy } from "../core/index.js";
8
9
  import { type JsonCompatibleReadOnly } from "../util/index.js";
9
10
  import type { SummaryData } from "./editManager.js";
10
- import type { MinimumVersionForCollab } from "@fluidframework/runtime-definitions/internal";
11
11
  import { EditManagerFormatVersion } from "./editManagerFormatCommons.js";
12
12
  export interface EditManagerEncodingContext {
13
13
  idCompressor: IIdCompressor;
@@ -23,10 +23,6 @@ export declare function clientVersionToEditManagerFormatVersion(clientVersion: M
23
23
  * Returns the version that should be used for testing shared branches.
24
24
  */
25
25
  export declare function editManagerFormatVersionSelectorForSharedBranches(clientVersion: MinimumVersionForCollab): EditManagerFormatVersion;
26
- /**
27
- * Returns the version that should be used for testing shared branches.
28
- */
29
- export declare function editManagerFormatVersionSelectorForDetachedRootEditing(clientVersion: MinimumVersionForCollab): EditManagerFormatVersion;
30
26
  export interface EditManagerCodecOptions {
31
27
  readonly editManagerFormatSelector?: (minVersionForCollab: MinimumVersionForCollab) => EditManagerFormatVersion;
32
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"editManagerCodecs.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/editManagerCodecs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAOnE,OAAO,EACN,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAG3B,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,UAAU,EAGf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EACX,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAkB,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EACN,wBAAwB,EAExB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,0BAA0B;IAC1C,YAAY,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CACtD,aAAa,EAAE,uBAAuB,EACtC,oBAAoB,CAAC,EAAE,wBAAwB,GAC7C,wBAAwB,CAU1B;AAED;;GAEG;AACH,wBAAgB,iDAAiD,CAChE,aAAa,EAAE,uBAAuB,GACpC,wBAAwB,CAE1B;AAED;;GAEG;AACH,wBAAgB,sDAAsD,CACrE,aAAa,EAAE,uBAAuB,GACpC,wBAAwB,CAE1B;AAED,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CACpC,mBAAmB,EAAE,uBAAuB,KACxC,wBAAwB,CAAC;CAC9B;AAUD,wBAAgB,oBAAoB,CAAC,UAAU,EAC9C,YAAY,EAAE,YAAY,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAC7D,4BAA4B,EAAE,sBAAsB,CAAC,wBAAwB,CAAC,EAC9E,gBAAgB,EAAE,UAAU,CAC3B,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,EACD,OAAO,EAAE,uBAAuB,GAAG,iBAAiB,GAClD,UAAU,CACZ,WAAW,CAAC,UAAU,CAAC,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,CAC1B,CASA;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAC/C,YAAY,EAAE,YAAY,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAC7D,4BAA4B,EAAE,sBAAsB,CAAC,wBAAwB,CAAC,EAC9E,gBAAgB,EAAE,UAAU,CAC3B,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,EACD,OAAO,EAAE,aAAa,GACpB,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,0BAA0B,CAAC,CAyCnE;AAED,wBAAgB,0CAA0C,CACzD,aAAa,EAAE,uBAAuB,EACtC,YAAY,EAAE,SAAS,GACrB,SAAS,CAMX"}
1
+ {"version":3,"file":"editManagerCodecs.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/editManagerCodecs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAM5F,OAAO,EACN,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAG3B,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,UAAU,EAGf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EACX,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAkB,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EACN,wBAAwB,EAExB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,0BAA0B;IAC1C,YAAY,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CACtD,aAAa,EAAE,uBAAuB,EACtC,oBAAoB,CAAC,EAAE,wBAAwB,GAC7C,wBAAwB,CAU1B;AAED;;GAEG;AACH,wBAAgB,iDAAiD,CAChE,aAAa,EAAE,uBAAuB,GACpC,wBAAwB,CAE1B;AAED,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CACpC,mBAAmB,EAAE,uBAAuB,KACxC,wBAAwB,CAAC;CAC9B;AAUD,wBAAgB,oBAAoB,CAAC,UAAU,EAC9C,YAAY,EAAE,YAAY,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAC7D,4BAA4B,EAAE,sBAAsB,CAAC,wBAAwB,CAAC,EAC9E,gBAAgB,EAAE,UAAU,CAC3B,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,EACD,OAAO,EAAE,uBAAuB,GAAG,iBAAiB,GAClD,UAAU,CACZ,WAAW,CAAC,UAAU,CAAC,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,CAC1B,CASA;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAC/C,YAAY,EAAE,YAAY,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAC7D,4BAA4B,EAAE,sBAAsB,CAAC,wBAAwB,CAAC,EAC9E,gBAAgB,EAAE,UAAU,CAC3B,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,EACD,OAAO,EAAE,aAAa,GACpB,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,0BAA0B,CAAC,CAwCnE;AAED,wBAAgB,0CAA0C,CACzD,aAAa,EAAE,uBAAuB,EACtC,YAAY,EAAE,SAAS,GACrB,SAAS,CAMX"}
@@ -29,12 +29,6 @@ export function clientVersionToEditManagerFormatVersion(clientVersion, writeVers
29
29
  export function editManagerFormatVersionSelectorForSharedBranches(clientVersion) {
30
30
  return brand(EditManagerFormatVersion.vSharedBranches);
31
31
  }
32
- /**
33
- * Returns the version that should be used for testing shared branches.
34
- */
35
- export function editManagerFormatVersionSelectorForDetachedRootEditing(clientVersion) {
36
- return brand(EditManagerFormatVersion.vDetachedRoots);
37
- }
38
32
  function editManagerFormatVersionFromOptions(options) {
39
33
  const selector = options.editManagerFormatSelector ?? clientVersionToEditManagerFormatVersion;
40
34
  return selector(options.minVersionForCollab);
@@ -53,8 +47,7 @@ export function makeEditManagerCodecs(changeCodecs, dependentChangeFormatVersion
53
47
  }
54
48
  case unbrand(EditManagerFormatVersion.v3):
55
49
  case unbrand(EditManagerFormatVersion.v4):
56
- case unbrand(EditManagerFormatVersion.v6):
57
- case unbrand(EditManagerFormatVersion.vDetachedRoots): {
50
+ case unbrand(EditManagerFormatVersion.v6): {
58
51
  const changeCodec = changeCodecs.resolve(dependentChangeFormatVersion.lookup(version));
59
52
  return [
60
53
  version,
@@ -1 +1 @@
1
- {"version":3,"file":"editManagerCodecs.js","sourceRoot":"","sources":["../../src/shared-tree-core/editManagerCodecs.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\nimport { unreachableCase } from \"@fluidframework/core-utils/internal\";\nimport {\n\tgetConfigForMinVersionForCollab,\n\tlowestMinVersionForCollab,\n} from \"@fluidframework/runtime-utils/internal\";\n\nimport {\n\ttype CodecTree,\n\ttype CodecWriteOptions,\n\ttype DependentFormatVersion,\n\tFluidClientVersion,\n\ttype FormatVersion,\n\ttype ICodecFamily,\n\ttype ICodecOptions,\n\ttype IJsonCodec,\n\tmakeCodecFamily,\n\tmakeDiscontinuedCodecVersion,\n} from \"../codec/index.js\";\nimport { makeVersionDispatchingCodec } from \"../codec/index.js\";\nimport type {\n\tChangeEncodingContext,\n\tEncodedRevisionTag,\n\tRevisionTag,\n\tSchemaAndPolicy,\n} from \"../core/index.js\";\nimport { brand, unbrand, type JsonCompatibleReadOnly } from \"../util/index.js\";\n\nimport type { SummaryData } from \"./editManager.js\";\nimport { makeV1CodecWithVersion } from \"./editManagerCodecsV1toV4.js\";\nimport { makeSharedBranchesCodecWithVersion } from \"./editManagerCodecsVSharedBranches.js\";\nimport type { MinimumVersionForCollab } from \"@fluidframework/runtime-definitions/internal\";\nimport {\n\tEditManagerFormatVersion,\n\teditManagerFormatVersions,\n} from \"./editManagerFormatCommons.js\";\n\nexport interface EditManagerEncodingContext {\n\tidCompressor: IIdCompressor;\n\treadonly schema?: SchemaAndPolicy;\n}\n\n/**\n * Convert a MinimumVersionForCollab to an EditManagerFormatVersion.\n * @param clientVersion - The MinimumVersionForCollab to convert.\n * @returns The EditManagerFormatVersion that corresponds to the provided MinimumVersionForCollab.\n */\nexport function clientVersionToEditManagerFormatVersion(\n\tclientVersion: MinimumVersionForCollab,\n\twriteVersionOverride?: EditManagerFormatVersion,\n): EditManagerFormatVersion {\n\tconst compatibleVersion: EditManagerFormatVersion = brand(\n\t\tgetConfigForMinVersionForCollab(clientVersion, {\n\t\t\t[lowestMinVersionForCollab]: EditManagerFormatVersion.v3,\n\t\t\t[FluidClientVersion.v2_43]: EditManagerFormatVersion.v4,\n\t\t\t[FluidClientVersion.v2_80]: EditManagerFormatVersion.v6,\n\t\t}),\n\t);\n\n\treturn writeVersionOverride ?? compatibleVersion;\n}\n\n/**\n * Returns the version that should be used for testing shared branches.\n */\nexport function editManagerFormatVersionSelectorForSharedBranches(\n\tclientVersion: MinimumVersionForCollab,\n): EditManagerFormatVersion {\n\treturn brand(EditManagerFormatVersion.vSharedBranches);\n}\n\n/**\n * Returns the version that should be used for testing shared branches.\n */\nexport function editManagerFormatVersionSelectorForDetachedRootEditing(\n\tclientVersion: MinimumVersionForCollab,\n): EditManagerFormatVersion {\n\treturn brand(EditManagerFormatVersion.vDetachedRoots);\n}\n\nexport interface EditManagerCodecOptions {\n\treadonly editManagerFormatSelector?: (\n\t\tminVersionForCollab: MinimumVersionForCollab,\n\t) => EditManagerFormatVersion;\n}\n\nfunction editManagerFormatVersionFromOptions(\n\toptions: EditManagerCodecOptions & CodecWriteOptions,\n): EditManagerFormatVersion {\n\tconst selector =\n\t\toptions.editManagerFormatSelector ?? clientVersionToEditManagerFormatVersion;\n\treturn selector(options.minVersionForCollab);\n}\n\nexport function makeEditManagerCodec<TChangeset>(\n\tchangeCodecs: ICodecFamily<TChangeset, ChangeEncodingContext>,\n\tdependentChangeFormatVersion: DependentFormatVersion<EditManagerFormatVersion>,\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n\toptions: EditManagerCodecOptions & CodecWriteOptions,\n): IJsonCodec<\n\tSummaryData<TChangeset>,\n\tJsonCompatibleReadOnly,\n\tJsonCompatibleReadOnly,\n\tEditManagerEncodingContext\n> {\n\tconst family = makeEditManagerCodecs(\n\t\tchangeCodecs,\n\t\tdependentChangeFormatVersion,\n\t\trevisionTagCodec,\n\t\toptions,\n\t);\n\tconst writeVersion = editManagerFormatVersionFromOptions(options);\n\treturn makeVersionDispatchingCodec(family, { ...options, writeVersion });\n}\n\nexport function makeEditManagerCodecs<TChangeset>(\n\tchangeCodecs: ICodecFamily<TChangeset, ChangeEncodingContext>,\n\tdependentChangeFormatVersion: DependentFormatVersion<EditManagerFormatVersion>,\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n\toptions: ICodecOptions,\n): ICodecFamily<SummaryData<TChangeset>, EditManagerEncodingContext> {\n\tconst registry: [\n\t\tFormatVersion,\n\t\tIJsonCodec<\n\t\t\tSummaryData<TChangeset>,\n\t\t\tJsonCompatibleReadOnly,\n\t\t\tJsonCompatibleReadOnly,\n\t\t\tEditManagerEncodingContext\n\t\t>,\n\t][] = Array.from(editManagerFormatVersions, (version) => {\n\t\tswitch (version) {\n\t\t\tcase unbrand(EditManagerFormatVersion.v1):\n\t\t\tcase unbrand(EditManagerFormatVersion.v2): {\n\t\t\t\treturn [version, makeDiscontinuedCodecVersion(options, version, \"2.73.0\")];\n\t\t\t}\n\t\t\tcase unbrand(EditManagerFormatVersion.v3):\n\t\t\tcase unbrand(EditManagerFormatVersion.v4):\n\t\t\tcase unbrand(EditManagerFormatVersion.v6):\n\t\t\tcase unbrand(EditManagerFormatVersion.vDetachedRoots): {\n\t\t\t\tconst changeCodec = changeCodecs.resolve(dependentChangeFormatVersion.lookup(version));\n\t\t\t\treturn [\n\t\t\t\t\tversion,\n\t\t\t\t\tmakeV1CodecWithVersion(changeCodec, revisionTagCodec, options, version),\n\t\t\t\t];\n\t\t\t}\n\t\t\tcase unbrand(EditManagerFormatVersion.v5): {\n\t\t\t\treturn [version, makeDiscontinuedCodecVersion(options, version, \"2.74.0\")];\n\t\t\t}\n\t\t\tcase unbrand(EditManagerFormatVersion.vSharedBranches): {\n\t\t\t\tconst changeCodec = changeCodecs.resolve(dependentChangeFormatVersion.lookup(version));\n\t\t\t\treturn [\n\t\t\t\t\tversion,\n\t\t\t\t\tmakeSharedBranchesCodecWithVersion(changeCodec, revisionTagCodec, options, version),\n\t\t\t\t];\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tunreachableCase(version);\n\t\t\t}\n\t\t}\n\t});\n\treturn makeCodecFamily(registry);\n}\n\nexport function getCodecTreeForEditManagerFormatWithChange(\n\tclientVersion: MinimumVersionForCollab,\n\tchangeFormat: CodecTree,\n): CodecTree {\n\treturn {\n\t\tname: \"EditManager\",\n\t\tversion: clientVersionToEditManagerFormatVersion(clientVersion),\n\t\tchildren: [changeFormat],\n\t};\n}\n"]}
1
+ {"version":3,"file":"editManagerCodecs.js","sourceRoot":"","sources":["../../src/shared-tree-core/editManagerCodecs.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { unreachableCase } from \"@fluidframework/core-utils/internal\";\nimport type { IIdCompressor } from \"@fluidframework/id-compressor\";\nimport type { MinimumVersionForCollab } from \"@fluidframework/runtime-definitions/internal\";\nimport {\n\tgetConfigForMinVersionForCollab,\n\tlowestMinVersionForCollab,\n} from \"@fluidframework/runtime-utils/internal\";\n\nimport {\n\ttype CodecTree,\n\ttype CodecWriteOptions,\n\ttype DependentFormatVersion,\n\tFluidClientVersion,\n\ttype FormatVersion,\n\ttype ICodecFamily,\n\ttype ICodecOptions,\n\ttype IJsonCodec,\n\tmakeCodecFamily,\n\tmakeDiscontinuedCodecVersion,\n} from \"../codec/index.js\";\nimport { makeVersionDispatchingCodec } from \"../codec/index.js\";\nimport type {\n\tChangeEncodingContext,\n\tEncodedRevisionTag,\n\tRevisionTag,\n\tSchemaAndPolicy,\n} from \"../core/index.js\";\nimport { brand, unbrand, type JsonCompatibleReadOnly } from \"../util/index.js\";\n\nimport type { SummaryData } from \"./editManager.js\";\nimport { makeV1CodecWithVersion } from \"./editManagerCodecsV1toV4.js\";\nimport { makeSharedBranchesCodecWithVersion } from \"./editManagerCodecsVSharedBranches.js\";\nimport {\n\tEditManagerFormatVersion,\n\teditManagerFormatVersions,\n} from \"./editManagerFormatCommons.js\";\n\nexport interface EditManagerEncodingContext {\n\tidCompressor: IIdCompressor;\n\treadonly schema?: SchemaAndPolicy;\n}\n\n/**\n * Convert a MinimumVersionForCollab to an EditManagerFormatVersion.\n * @param clientVersion - The MinimumVersionForCollab to convert.\n * @returns The EditManagerFormatVersion that corresponds to the provided MinimumVersionForCollab.\n */\nexport function clientVersionToEditManagerFormatVersion(\n\tclientVersion: MinimumVersionForCollab,\n\twriteVersionOverride?: EditManagerFormatVersion,\n): EditManagerFormatVersion {\n\tconst compatibleVersion: EditManagerFormatVersion = brand(\n\t\tgetConfigForMinVersionForCollab(clientVersion, {\n\t\t\t[lowestMinVersionForCollab]: EditManagerFormatVersion.v3,\n\t\t\t[FluidClientVersion.v2_43]: EditManagerFormatVersion.v4,\n\t\t\t[FluidClientVersion.v2_80]: EditManagerFormatVersion.v6,\n\t\t}),\n\t);\n\n\treturn writeVersionOverride ?? compatibleVersion;\n}\n\n/**\n * Returns the version that should be used for testing shared branches.\n */\nexport function editManagerFormatVersionSelectorForSharedBranches(\n\tclientVersion: MinimumVersionForCollab,\n): EditManagerFormatVersion {\n\treturn brand(EditManagerFormatVersion.vSharedBranches);\n}\n\nexport interface EditManagerCodecOptions {\n\treadonly editManagerFormatSelector?: (\n\t\tminVersionForCollab: MinimumVersionForCollab,\n\t) => EditManagerFormatVersion;\n}\n\nfunction editManagerFormatVersionFromOptions(\n\toptions: EditManagerCodecOptions & CodecWriteOptions,\n): EditManagerFormatVersion {\n\tconst selector =\n\t\toptions.editManagerFormatSelector ?? clientVersionToEditManagerFormatVersion;\n\treturn selector(options.minVersionForCollab);\n}\n\nexport function makeEditManagerCodec<TChangeset>(\n\tchangeCodecs: ICodecFamily<TChangeset, ChangeEncodingContext>,\n\tdependentChangeFormatVersion: DependentFormatVersion<EditManagerFormatVersion>,\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n\toptions: EditManagerCodecOptions & CodecWriteOptions,\n): IJsonCodec<\n\tSummaryData<TChangeset>,\n\tJsonCompatibleReadOnly,\n\tJsonCompatibleReadOnly,\n\tEditManagerEncodingContext\n> {\n\tconst family = makeEditManagerCodecs(\n\t\tchangeCodecs,\n\t\tdependentChangeFormatVersion,\n\t\trevisionTagCodec,\n\t\toptions,\n\t);\n\tconst writeVersion = editManagerFormatVersionFromOptions(options);\n\treturn makeVersionDispatchingCodec(family, { ...options, writeVersion });\n}\n\nexport function makeEditManagerCodecs<TChangeset>(\n\tchangeCodecs: ICodecFamily<TChangeset, ChangeEncodingContext>,\n\tdependentChangeFormatVersion: DependentFormatVersion<EditManagerFormatVersion>,\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n\toptions: ICodecOptions,\n): ICodecFamily<SummaryData<TChangeset>, EditManagerEncodingContext> {\n\tconst registry: [\n\t\tFormatVersion,\n\t\tIJsonCodec<\n\t\t\tSummaryData<TChangeset>,\n\t\t\tJsonCompatibleReadOnly,\n\t\t\tJsonCompatibleReadOnly,\n\t\t\tEditManagerEncodingContext\n\t\t>,\n\t][] = Array.from(editManagerFormatVersions, (version) => {\n\t\tswitch (version) {\n\t\t\tcase unbrand(EditManagerFormatVersion.v1):\n\t\t\tcase unbrand(EditManagerFormatVersion.v2): {\n\t\t\t\treturn [version, makeDiscontinuedCodecVersion(options, version, \"2.73.0\")];\n\t\t\t}\n\t\t\tcase unbrand(EditManagerFormatVersion.v3):\n\t\t\tcase unbrand(EditManagerFormatVersion.v4):\n\t\t\tcase unbrand(EditManagerFormatVersion.v6): {\n\t\t\t\tconst changeCodec = changeCodecs.resolve(dependentChangeFormatVersion.lookup(version));\n\t\t\t\treturn [\n\t\t\t\t\tversion,\n\t\t\t\t\tmakeV1CodecWithVersion(changeCodec, revisionTagCodec, options, version),\n\t\t\t\t];\n\t\t\t}\n\t\t\tcase unbrand(EditManagerFormatVersion.v5): {\n\t\t\t\treturn [version, makeDiscontinuedCodecVersion(options, version, \"2.74.0\")];\n\t\t\t}\n\t\t\tcase unbrand(EditManagerFormatVersion.vSharedBranches): {\n\t\t\t\tconst changeCodec = changeCodecs.resolve(dependentChangeFormatVersion.lookup(version));\n\t\t\t\treturn [\n\t\t\t\t\tversion,\n\t\t\t\t\tmakeSharedBranchesCodecWithVersion(changeCodec, revisionTagCodec, options, version),\n\t\t\t\t];\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tunreachableCase(version);\n\t\t\t}\n\t\t}\n\t});\n\treturn makeCodecFamily(registry);\n}\n\nexport function getCodecTreeForEditManagerFormatWithChange(\n\tclientVersion: MinimumVersionForCollab,\n\tchangeFormat: CodecTree,\n): CodecTree {\n\treturn {\n\t\tname: \"EditManager\",\n\t\tversion: clientVersionToEditManagerFormatVersion(clientVersion),\n\t\tchildren: [changeFormat],\n\t};\n}\n"]}
@@ -6,8 +6,8 @@ import type { IIdCompressor, SessionId } from "@fluidframework/id-compressor";
6
6
  import type { IJsonCodec, IMultiFormatCodec } from "../codec/index.js";
7
7
  import type { ChangeEncodingContext, EncodedRevisionTag, RevisionTag, SchemaAndPolicy } from "../core/index.js";
8
8
  import { type JsonCompatibleReadOnly } from "../util/index.js";
9
- import type { EncodedSharedBranch } from "./editManagerFormatCommons.js";
10
9
  import type { SharedBranchSummaryData } from "./editManager.js";
10
+ import type { EncodedSharedBranch } from "./editManagerFormatCommons.js";
11
11
  export interface EditManagerEncodingContext {
12
12
  idCompressor: IIdCompressor;
13
13
  readonly schema?: SchemaAndPolicy;
@@ -1 +1 @@
1
- {"version":3,"file":"editManagerCodecsCommons.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/editManagerCodecsCommons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG9E,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EACX,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAe,KAAK,sBAAsB,EAAgB,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EAGX,mBAAmB,EAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhE,MAAM,WAAW,0BAA0B;IAC1C,YAAY,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CAClC;AA4DD,wBAAgB,kBAAkB,CAAC,UAAU,EAC5C,WAAW,EAAE,iBAAiB,CAC7B,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,CACrB,EACD,gBAAgB,EAAE,UAAU,CAC3B,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,EACD,IAAI,EAAE,uBAAuB,CAAC,UAAU,CAAC,EACzC,OAAO,EAAE,0BAA0B,EACnC,YAAY,EAAE,SAAS,GAAG,SAAS,GACjC,mBAAmB,CAAC,UAAU,CAAC,CAqDjC;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAC5C,WAAW,EAAE,iBAAiB,CAC7B,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,CACrB,EACD,gBAAgB,EAAE,UAAU,CAC3B,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,EACD,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,EACrC,OAAO,EAAE,0BAA0B,EACnC,YAAY,EAAE,SAAS,GAAG,SAAS,GACjC,uBAAuB,CAAC,UAAU,CAAC,CAqErC"}
1
+ {"version":3,"file":"editManagerCodecsCommons.d.ts","sourceRoot":"","sources":["../../src/shared-tree-core/editManagerCodecsCommons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EACX,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAe,KAAK,sBAAsB,EAAgB,MAAM,kBAAkB,CAAC;AAG1F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAGX,mBAAmB,EAGnB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,0BAA0B;IAC1C,YAAY,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CAClC;AA4DD,wBAAgB,kBAAkB,CAAC,UAAU,EAC5C,WAAW,EAAE,iBAAiB,CAC7B,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,CACrB,EACD,gBAAgB,EAAE,UAAU,CAC3B,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,EACD,IAAI,EAAE,uBAAuB,CAAC,UAAU,CAAC,EACzC,OAAO,EAAE,0BAA0B,EACnC,YAAY,EAAE,SAAS,GAAG,SAAS,GACjC,mBAAmB,CAAC,UAAU,CAAC,CAqDjC;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAC5C,WAAW,EAAE,iBAAiB,CAC7B,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,CACrB,EACD,gBAAgB,EAAE,UAAU,CAC3B,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,EACD,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,EACrC,OAAO,EAAE,0BAA0B,EACnC,YAAY,EAAE,SAAS,GAAG,SAAS,GACjC,uBAAuB,CAAC,UAAU,CAAC,CAoErC"}
@@ -78,8 +78,7 @@ export function encodeSharedBranch(changeCodec, revisionTagCodec, data, context,
78
78
  return json;
79
79
  }
80
80
  export function decodeSharedBranch(changeCodec, revisionTagCodec, json, context, originatorId) {
81
- // TODO: sort out EncodedCommit vs Commit, and make this type check without `any`.
82
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
+ // TODO: sort out EncodedCommit vs Commit, and make this type check without type assertion.
83
82
  const trunk = json.trunk;
84
83
  const data = {
85
84
  trunk: trunk.map((commit) =>