@fluidframework/tree 2.90.0-378676 → 2.90.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1104) hide show
  1. package/.vscode/settings.json +6 -5
  2. package/CHANGELOG.md +95 -0
  3. package/README.md +1 -1
  4. package/api-report/tree.alpha.api.md +63 -25
  5. package/api-report/tree.beta.api.md +30 -0
  6. package/api-report/tree.legacy.beta.api.md +30 -0
  7. package/dist/alpha.d.ts +10 -6
  8. package/dist/beta.d.ts +4 -1
  9. package/dist/codec/codec.d.ts +2 -0
  10. package/dist/codec/codec.d.ts.map +1 -1
  11. package/dist/codec/codec.js +4 -3
  12. package/dist/codec/codec.js.map +1 -1
  13. package/dist/codec/index.d.ts +1 -1
  14. package/dist/codec/index.d.ts.map +1 -1
  15. package/dist/codec/index.js +2 -1
  16. package/dist/codec/index.js.map +1 -1
  17. package/dist/codec/versioned/codec.d.ts +13 -1
  18. package/dist/codec/versioned/codec.d.ts.map +1 -1
  19. package/dist/codec/versioned/codec.js +18 -3
  20. package/dist/codec/versioned/codec.js.map +1 -1
  21. package/dist/codec/versioned/format.d.ts +22 -1
  22. package/dist/codec/versioned/format.d.ts.map +1 -1
  23. package/dist/codec/versioned/format.js +16 -3
  24. package/dist/codec/versioned/format.js.map +1 -1
  25. package/dist/codec/versioned/index.d.ts +1 -1
  26. package/dist/codec/versioned/index.d.ts.map +1 -1
  27. package/dist/codec/versioned/index.js +2 -1
  28. package/dist/codec/versioned/index.js.map +1 -1
  29. package/dist/core/change-family/changeFamily.d.ts +1 -4
  30. package/dist/core/change-family/changeFamily.d.ts.map +1 -1
  31. package/dist/core/change-family/changeFamily.js.map +1 -1
  32. package/dist/core/change-family/index.d.ts +1 -1
  33. package/dist/core/change-family/index.d.ts.map +1 -1
  34. package/dist/core/change-family/index.js.map +1 -1
  35. package/dist/core/index.d.ts +3 -4
  36. package/dist/core/index.d.ts.map +1 -1
  37. package/dist/core/index.js +4 -8
  38. package/dist/core/index.js.map +1 -1
  39. package/dist/core/rebase/changeRebaser.d.ts +1 -6
  40. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  41. package/dist/core/rebase/changeRebaser.js.map +1 -1
  42. package/dist/core/rebase/index.d.ts +1 -1
  43. package/dist/core/rebase/index.d.ts.map +1 -1
  44. package/dist/core/rebase/index.js +1 -2
  45. package/dist/core/rebase/index.js.map +1 -1
  46. package/dist/core/rebase/types.d.ts +78 -1
  47. package/dist/core/rebase/types.d.ts.map +1 -1
  48. package/dist/core/rebase/types.js +1 -5
  49. package/dist/core/rebase/types.js.map +1 -1
  50. package/dist/core/rebase/utils.d.ts.map +1 -1
  51. package/dist/core/rebase/utils.js +7 -25
  52. package/dist/core/rebase/utils.js.map +1 -1
  53. package/dist/core/tree/delta.d.ts +0 -5
  54. package/dist/core/tree/delta.d.ts.map +1 -1
  55. package/dist/core/tree/delta.js.map +1 -1
  56. package/dist/core/tree/detachedFieldIndex.d.ts +1 -13
  57. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  58. package/dist/core/tree/detachedFieldIndex.js +1 -14
  59. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  60. package/dist/core/tree/detachedFieldIndexTypes.d.ts +0 -4
  61. package/dist/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  62. package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
  63. package/dist/core/tree/index.d.ts +2 -2
  64. package/dist/core/tree/index.d.ts.map +1 -1
  65. package/dist/core/tree/index.js +3 -4
  66. package/dist/core/tree/index.js.map +1 -1
  67. package/dist/core/tree/pathTree.d.ts +3 -11
  68. package/dist/core/tree/pathTree.d.ts.map +1 -1
  69. package/dist/core/tree/pathTree.js +2 -14
  70. package/dist/core/tree/pathTree.js.map +1 -1
  71. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  72. package/dist/core/tree/visitDelta.js +13 -17
  73. package/dist/core/tree/visitDelta.js.map +1 -1
  74. package/dist/feature-libraries/changeAtomIdBTree.d.ts +2 -3
  75. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  76. package/dist/feature-libraries/changeAtomIdBTree.js +2 -15
  77. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  78. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +8 -7
  79. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  80. package/dist/feature-libraries/chunked-forest/codec/codecs.js +22 -44
  81. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  82. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  83. package/dist/feature-libraries/chunked-forest/codec/format.js +11 -0
  84. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  85. package/dist/feature-libraries/chunked-forest/codec/index.d.ts +3 -2
  86. package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  87. package/dist/feature-libraries/chunked-forest/codec/index.js +2 -4
  88. package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  89. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  90. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  91. package/dist/feature-libraries/chunked-forest/index.js +2 -4
  92. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  93. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +44 -92
  94. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  95. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +70 -220
  96. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  97. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  98. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +2 -12
  99. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  100. package/dist/feature-libraries/default-schema/index.d.ts +1 -2
  101. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  102. package/dist/feature-libraries/default-schema/index.js +2 -4
  103. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  104. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts +6 -7
  105. package/dist/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  106. package/dist/feature-libraries/default-schema/mappedEditBuilder.js +0 -15
  107. package/dist/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  108. package/dist/feature-libraries/deltaUtils.d.ts +0 -1
  109. package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
  110. package/dist/feature-libraries/deltaUtils.js +1 -6
  111. package/dist/feature-libraries/deltaUtils.js.map +1 -1
  112. package/dist/feature-libraries/flex-tree/context.d.ts +0 -9
  113. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  114. package/dist/feature-libraries/flex-tree/context.js +0 -6
  115. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  116. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  117. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  118. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  119. package/dist/feature-libraries/flex-tree/lazyField.d.ts +7 -8
  120. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  121. package/dist/feature-libraries/flex-tree/lazyField.js +8 -39
  122. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  123. package/dist/feature-libraries/flex-tree/observer.d.ts +17 -0
  124. package/dist/feature-libraries/flex-tree/observer.d.ts.map +1 -1
  125. package/dist/feature-libraries/flex-tree/observer.js.map +1 -1
  126. package/dist/feature-libraries/forest-summary/codec.d.ts +5 -12
  127. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  128. package/dist/feature-libraries/forest-summary/codec.js +33 -33
  129. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  130. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -2
  131. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  132. package/dist/feature-libraries/forest-summary/forestSummarizer.js +6 -7
  133. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  134. package/dist/feature-libraries/forest-summary/formatCommon.d.ts +6 -4
  135. package/dist/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
  136. package/dist/feature-libraries/forest-summary/formatCommon.js +13 -11
  137. package/dist/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  138. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +19 -14
  139. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  140. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +31 -48
  141. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  142. package/dist/feature-libraries/forest-summary/index.d.ts +1 -1
  143. package/dist/feature-libraries/forest-summary/index.d.ts.map +1 -1
  144. package/dist/feature-libraries/forest-summary/index.js +2 -2
  145. package/dist/feature-libraries/forest-summary/index.js.map +1 -1
  146. package/dist/feature-libraries/index.d.ts +6 -6
  147. package/dist/feature-libraries/index.d.ts.map +1 -1
  148. package/dist/feature-libraries/index.js +6 -11
  149. package/dist/feature-libraries/index.js.map +1 -1
  150. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts +3 -3
  151. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  152. package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  153. package/dist/feature-libraries/indexing/index.d.ts +1 -1
  154. package/dist/feature-libraries/indexing/index.d.ts.map +1 -1
  155. package/dist/feature-libraries/indexing/index.js.map +1 -1
  156. package/dist/feature-libraries/indexing/types.d.ts +15 -13
  157. package/dist/feature-libraries/indexing/types.d.ts.map +1 -1
  158. package/dist/feature-libraries/indexing/types.js.map +1 -1
  159. package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  160. package/dist/feature-libraries/mitigatedChangeFamily.js +2 -2
  161. package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  162. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +24 -100
  163. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  164. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +12 -8
  165. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  166. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +51 -85
  167. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  168. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  169. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  170. package/dist/feature-libraries/modular-schema/genericFieldKind.js +9 -4
  171. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  172. package/dist/feature-libraries/modular-schema/index.d.ts +3 -3
  173. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  174. package/dist/feature-libraries/modular-schema/index.js +3 -2
  175. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  176. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +22 -18
  177. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  178. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +158 -276
  179. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  180. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  181. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  182. package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  183. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +0 -1
  184. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  185. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +0 -8
  186. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  187. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +22 -56
  188. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  189. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +462 -1390
  190. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  191. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  192. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  193. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +2 -1
  194. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  195. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js +3 -3
  196. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  197. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +10 -49
  198. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  199. package/dist/feature-libraries/modular-schema/modularChangeTypes.js +3 -3
  200. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  201. package/dist/feature-libraries/optional-field/optionalField.d.ts +32 -13
  202. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  203. package/dist/feature-libraries/optional-field/optionalField.js +446 -257
  204. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  205. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +31 -31
  206. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  207. package/dist/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  208. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  209. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  210. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js +28 -57
  211. package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  212. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  213. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
  214. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  215. package/dist/feature-libraries/optional-field/requiredField.d.ts +2 -3
  216. package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  217. package/dist/feature-libraries/optional-field/requiredField.js +1 -6
  218. package/dist/feature-libraries/optional-field/requiredField.js.map +1 -1
  219. package/dist/feature-libraries/sequence-field/compose.d.ts +7 -6
  220. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  221. package/dist/feature-libraries/sequence-field/compose.js +259 -81
  222. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  223. package/dist/feature-libraries/sequence-field/helperTypes.d.ts +10 -14
  224. package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  225. package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  226. package/dist/feature-libraries/sequence-field/invert.d.ts +3 -3
  227. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  228. package/dist/feature-libraries/sequence-field/invert.js +167 -65
  229. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  230. package/dist/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  231. package/dist/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  232. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  233. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +56 -4
  234. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  235. package/dist/feature-libraries/sequence-field/moveEffectTable.js +90 -7
  236. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  237. package/dist/feature-libraries/sequence-field/rebase.d.ts +3 -3
  238. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  239. package/dist/feature-libraries/sequence-field/rebase.js +116 -109
  240. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  241. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +9 -0
  242. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +1 -0
  243. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js +50 -0
  244. package/dist/feature-libraries/sequence-field/relevantRemovedRoots.js.map +1 -0
  245. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  246. package/dist/feature-libraries/sequence-field/replaceRevisions.js +32 -19
  247. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  248. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  249. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -1
  250. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  251. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -22
  252. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  253. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +187 -388
  254. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  255. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  256. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +62 -20
  257. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  258. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  259. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  260. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js +13 -13
  261. package/dist/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  262. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
  263. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  264. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +111 -16
  265. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  266. package/dist/feature-libraries/sequence-field/types.d.ts +74 -37
  267. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  268. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  269. package/dist/feature-libraries/sequence-field/utils.d.ts +25 -20
  270. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  271. package/dist/feature-libraries/sequence-field/utils.js +320 -159
  272. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  273. package/dist/index.d.ts +3 -3
  274. package/dist/index.d.ts.map +1 -1
  275. package/dist/index.js +2 -2
  276. package/dist/index.js.map +1 -1
  277. package/dist/legacy.d.ts +4 -1
  278. package/dist/packageVersion.d.ts +1 -1
  279. package/dist/packageVersion.d.ts.map +1 -1
  280. package/dist/packageVersion.js +1 -1
  281. package/dist/packageVersion.js.map +1 -1
  282. package/dist/shared-tree/independentView.d.ts.map +1 -1
  283. package/dist/shared-tree/independentView.js +3 -3
  284. package/dist/shared-tree/independentView.js.map +1 -1
  285. package/dist/shared-tree/index.d.ts +1 -1
  286. package/dist/shared-tree/index.d.ts.map +1 -1
  287. package/dist/shared-tree/index.js.map +1 -1
  288. package/dist/shared-tree/schematizeTree.d.ts +4 -4
  289. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  290. package/dist/shared-tree/schematizeTree.js +1 -2
  291. package/dist/shared-tree/schematizeTree.js.map +1 -1
  292. package/dist/shared-tree/schematizingTreeView.d.ts +10 -1
  293. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  294. package/dist/shared-tree/schematizingTreeView.js +70 -28
  295. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  296. package/dist/shared-tree/sharedTree.d.ts +3 -9
  297. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  298. package/dist/shared-tree/sharedTree.js +8 -11
  299. package/dist/shared-tree/sharedTree.js.map +1 -1
  300. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +0 -1
  301. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  302. package/dist/shared-tree/sharedTreeChangeCodecs.js +0 -8
  303. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  304. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +4 -4
  305. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  306. package/dist/shared-tree/sharedTreeChangeFamily.js +2 -2
  307. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  308. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +6 -16
  309. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  310. package/dist/shared-tree/sharedTreeEditBuilder.js +7 -14
  311. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  312. package/dist/shared-tree/tree.js +1 -1
  313. package/dist/shared-tree/tree.js.map +1 -1
  314. package/dist/shared-tree/treeAlpha.d.ts +8 -1
  315. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  316. package/dist/shared-tree/treeAlpha.js +48 -8
  317. package/dist/shared-tree/treeAlpha.js.map +1 -1
  318. package/dist/shared-tree/treeCheckout.d.ts +46 -16
  319. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  320. package/dist/shared-tree/treeCheckout.js +129 -73
  321. package/dist/shared-tree/treeCheckout.js.map +1 -1
  322. package/dist/shared-tree/unhydratedTreeContext.d.ts +20 -0
  323. package/dist/shared-tree/unhydratedTreeContext.d.ts.map +1 -0
  324. package/dist/shared-tree/unhydratedTreeContext.js +56 -0
  325. package/dist/shared-tree/unhydratedTreeContext.js.map +1 -0
  326. package/dist/shared-tree-core/branch.d.ts +2 -3
  327. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  328. package/dist/shared-tree-core/branch.js +3 -4
  329. package/dist/shared-tree-core/branch.js.map +1 -1
  330. package/dist/shared-tree-core/editManager.d.ts +2 -2
  331. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  332. package/dist/shared-tree-core/editManager.js +9 -9
  333. package/dist/shared-tree-core/editManager.js.map +1 -1
  334. package/dist/shared-tree-core/editManagerCodecs.d.ts +0 -4
  335. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  336. package/dist/shared-tree-core/editManagerCodecs.js +2 -10
  337. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  338. package/dist/shared-tree-core/editManagerFormatCommons.d.ts +0 -1
  339. package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  340. package/dist/shared-tree-core/editManagerFormatCommons.js +0 -6
  341. package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  342. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  343. package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  344. package/dist/shared-tree-core/editManagerFormatV1toV4.js +0 -1
  345. package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  346. package/dist/shared-tree-core/index.d.ts +2 -2
  347. package/dist/shared-tree-core/index.d.ts.map +1 -1
  348. package/dist/shared-tree-core/index.js +1 -3
  349. package/dist/shared-tree-core/index.js.map +1 -1
  350. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  351. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  352. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  353. package/dist/shared-tree-core/messageCodecs.d.ts +0 -4
  354. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  355. package/dist/shared-tree-core/messageCodecs.js +2 -10
  356. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  357. package/dist/shared-tree-core/messageFormat.d.ts +0 -1
  358. package/dist/shared-tree-core/messageFormat.d.ts.map +1 -1
  359. package/dist/shared-tree-core/messageFormat.js +0 -6
  360. package/dist/shared-tree-core/messageFormat.js.map +1 -1
  361. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  362. package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  363. package/dist/shared-tree-core/messageFormatV1ToV4.js +0 -1
  364. package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  365. package/dist/shared-tree-core/sharedTreeCore.d.ts +0 -1
  366. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  367. package/dist/shared-tree-core/sharedTreeCore.js +1 -1
  368. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  369. package/dist/shared-tree-core/transaction.d.ts +15 -27
  370. package/dist/shared-tree-core/transaction.d.ts.map +1 -1
  371. package/dist/shared-tree-core/transaction.js +7 -11
  372. package/dist/shared-tree-core/transaction.js.map +1 -1
  373. package/dist/simple-tree/api/configuration.d.ts +4 -0
  374. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  375. package/dist/simple-tree/api/configuration.js.map +1 -1
  376. package/dist/simple-tree/api/identifierIndex.d.ts +2 -2
  377. package/dist/simple-tree/api/identifierIndex.d.ts.map +1 -1
  378. package/dist/simple-tree/api/identifierIndex.js +1 -1
  379. package/dist/simple-tree/api/identifierIndex.js.map +1 -1
  380. package/dist/simple-tree/api/index.d.ts +3 -3
  381. package/dist/simple-tree/api/index.d.ts.map +1 -1
  382. package/dist/simple-tree/api/index.js +2 -2
  383. package/dist/simple-tree/api/index.js.map +1 -1
  384. package/dist/simple-tree/api/schemaFactory.d.ts +3 -2
  385. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  386. package/dist/simple-tree/api/schemaFactory.js +3 -2
  387. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  388. package/dist/simple-tree/api/simpleTreeIndex.d.ts +15 -13
  389. package/dist/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
  390. package/dist/simple-tree/api/simpleTreeIndex.js +4 -4
  391. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  392. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts +4 -4
  393. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +2 -2
  394. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  395. package/dist/simple-tree/api/transactionTypes.d.ts +22 -25
  396. package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -1
  397. package/dist/simple-tree/api/transactionTypes.js.map +1 -1
  398. package/dist/simple-tree/api/tree.d.ts +69 -132
  399. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  400. package/dist/simple-tree/api/tree.js.map +1 -1
  401. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +12 -16
  402. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  403. package/dist/simple-tree/core/unhydratedFlexTree.js +8 -59
  404. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  405. package/dist/simple-tree/fieldSchema.d.ts +4 -4
  406. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  407. package/dist/simple-tree/fieldSchema.js.map +1 -1
  408. package/dist/simple-tree/index.d.ts +3 -3
  409. package/dist/simple-tree/index.d.ts.map +1 -1
  410. package/dist/simple-tree/index.js +3 -3
  411. package/dist/simple-tree/index.js.map +1 -1
  412. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  413. package/dist/simple-tree/node-kinds/array/arrayNode.js +3 -5
  414. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  415. package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
  416. package/dist/simple-tree/node-kinds/common.js +1 -1
  417. package/dist/simple-tree/node-kinds/common.js.map +1 -1
  418. package/dist/simple-tree/node-kinds/map/mapNode.js +2 -2
  419. package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  420. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  421. package/dist/simple-tree/node-kinds/object/objectNode.js +19 -19
  422. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  423. package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  424. package/dist/simple-tree/node-kinds/record/recordNode.js +2 -4
  425. package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  426. package/dist/simple-tree/prepareForInsertion.d.ts +47 -54
  427. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  428. package/dist/simple-tree/prepareForInsertion.js +125 -183
  429. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  430. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +3 -8
  431. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  432. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +13 -27
  433. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  434. package/dist/text/textDomain.d.ts +27 -9
  435. package/dist/text/textDomain.d.ts.map +1 -1
  436. package/dist/text/textDomain.js +43 -7
  437. package/dist/text/textDomain.js.map +1 -1
  438. package/dist/text/textDomainFormatted.d.ts +14 -8
  439. package/dist/text/textDomainFormatted.d.ts.map +1 -1
  440. package/dist/text/textDomainFormatted.js +97 -25
  441. package/dist/text/textDomainFormatted.js.map +1 -1
  442. package/dist/treeFactory.d.ts.map +1 -1
  443. package/dist/treeFactory.js +2 -12
  444. package/dist/treeFactory.js.map +1 -1
  445. package/dist/util/index.d.ts +1 -1
  446. package/dist/util/index.d.ts.map +1 -1
  447. package/dist/util/index.js +1 -2
  448. package/dist/util/index.js.map +1 -1
  449. package/dist/util/rangeMap.d.ts +11 -22
  450. package/dist/util/rangeMap.d.ts.map +1 -1
  451. package/dist/util/rangeMap.js +4 -38
  452. package/dist/util/rangeMap.js.map +1 -1
  453. package/docs/main/sequence-field/move-composition.md +46 -0
  454. package/lib/alpha.d.ts +10 -6
  455. package/lib/beta.d.ts +4 -1
  456. package/lib/codec/codec.d.ts +2 -0
  457. package/lib/codec/codec.d.ts.map +1 -1
  458. package/lib/codec/codec.js +4 -3
  459. package/lib/codec/codec.js.map +1 -1
  460. package/lib/codec/index.d.ts +1 -1
  461. package/lib/codec/index.d.ts.map +1 -1
  462. package/lib/codec/index.js +1 -1
  463. package/lib/codec/index.js.map +1 -1
  464. package/lib/codec/versioned/codec.d.ts +13 -1
  465. package/lib/codec/versioned/codec.d.ts.map +1 -1
  466. package/lib/codec/versioned/codec.js +18 -3
  467. package/lib/codec/versioned/codec.js.map +1 -1
  468. package/lib/codec/versioned/format.d.ts +22 -1
  469. package/lib/codec/versioned/format.d.ts.map +1 -1
  470. package/lib/codec/versioned/format.js +15 -2
  471. package/lib/codec/versioned/format.js.map +1 -1
  472. package/lib/codec/versioned/index.d.ts +1 -1
  473. package/lib/codec/versioned/index.d.ts.map +1 -1
  474. package/lib/codec/versioned/index.js +1 -1
  475. package/lib/codec/versioned/index.js.map +1 -1
  476. package/lib/core/change-family/changeFamily.d.ts +1 -4
  477. package/lib/core/change-family/changeFamily.d.ts.map +1 -1
  478. package/lib/core/change-family/changeFamily.js.map +1 -1
  479. package/lib/core/change-family/index.d.ts +1 -1
  480. package/lib/core/change-family/index.d.ts.map +1 -1
  481. package/lib/core/change-family/index.js.map +1 -1
  482. package/lib/core/index.d.ts +3 -4
  483. package/lib/core/index.d.ts.map +1 -1
  484. package/lib/core/index.js +2 -3
  485. package/lib/core/index.js.map +1 -1
  486. package/lib/core/rebase/changeRebaser.d.ts +1 -6
  487. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  488. package/lib/core/rebase/changeRebaser.js.map +1 -1
  489. package/lib/core/rebase/index.d.ts +1 -1
  490. package/lib/core/rebase/index.d.ts.map +1 -1
  491. package/lib/core/rebase/index.js +1 -1
  492. package/lib/core/rebase/index.js.map +1 -1
  493. package/lib/core/rebase/types.d.ts +78 -1
  494. package/lib/core/rebase/types.d.ts.map +1 -1
  495. package/lib/core/rebase/types.js +0 -3
  496. package/lib/core/rebase/types.js.map +1 -1
  497. package/lib/core/rebase/utils.d.ts.map +1 -1
  498. package/lib/core/rebase/utils.js +7 -25
  499. package/lib/core/rebase/utils.js.map +1 -1
  500. package/lib/core/tree/delta.d.ts +0 -5
  501. package/lib/core/tree/delta.d.ts.map +1 -1
  502. package/lib/core/tree/delta.js.map +1 -1
  503. package/lib/core/tree/detachedFieldIndex.d.ts +1 -13
  504. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  505. package/lib/core/tree/detachedFieldIndex.js +2 -15
  506. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  507. package/lib/core/tree/detachedFieldIndexTypes.d.ts +0 -4
  508. package/lib/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  509. package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
  510. package/lib/core/tree/index.d.ts +2 -2
  511. package/lib/core/tree/index.d.ts.map +1 -1
  512. package/lib/core/tree/index.js +1 -1
  513. package/lib/core/tree/index.js.map +1 -1
  514. package/lib/core/tree/pathTree.d.ts +3 -11
  515. package/lib/core/tree/pathTree.d.ts.map +1 -1
  516. package/lib/core/tree/pathTree.js +1 -12
  517. package/lib/core/tree/pathTree.js.map +1 -1
  518. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  519. package/lib/core/tree/visitDelta.js +13 -17
  520. package/lib/core/tree/visitDelta.js.map +1 -1
  521. package/lib/feature-libraries/changeAtomIdBTree.d.ts +2 -3
  522. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  523. package/lib/feature-libraries/changeAtomIdBTree.js +3 -15
  524. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  525. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +8 -7
  526. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  527. package/lib/feature-libraries/chunked-forest/codec/codecs.js +25 -45
  528. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  529. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  530. package/lib/feature-libraries/chunked-forest/codec/format.js +11 -0
  531. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  532. package/lib/feature-libraries/chunked-forest/codec/index.d.ts +3 -2
  533. package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  534. package/lib/feature-libraries/chunked-forest/codec/index.js +2 -2
  535. package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  536. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  537. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  538. package/lib/feature-libraries/chunked-forest/index.js +1 -1
  539. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  540. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +44 -92
  541. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  542. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +69 -217
  543. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  544. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  545. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +2 -12
  546. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  547. package/lib/feature-libraries/default-schema/index.d.ts +1 -2
  548. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  549. package/lib/feature-libraries/default-schema/index.js +1 -2
  550. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  551. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts +6 -7
  552. package/lib/feature-libraries/default-schema/mappedEditBuilder.d.ts.map +1 -1
  553. package/lib/feature-libraries/default-schema/mappedEditBuilder.js +0 -15
  554. package/lib/feature-libraries/default-schema/mappedEditBuilder.js.map +1 -1
  555. package/lib/feature-libraries/deltaUtils.d.ts +0 -1
  556. package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
  557. package/lib/feature-libraries/deltaUtils.js +1 -5
  558. package/lib/feature-libraries/deltaUtils.js.map +1 -1
  559. package/lib/feature-libraries/flex-tree/context.d.ts +0 -9
  560. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  561. package/lib/feature-libraries/flex-tree/context.js +0 -6
  562. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  563. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +6 -6
  564. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  565. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  566. package/lib/feature-libraries/flex-tree/lazyField.d.ts +7 -8
  567. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  568. package/lib/feature-libraries/flex-tree/lazyField.js +9 -40
  569. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  570. package/lib/feature-libraries/flex-tree/observer.d.ts +17 -0
  571. package/lib/feature-libraries/flex-tree/observer.d.ts.map +1 -1
  572. package/lib/feature-libraries/flex-tree/observer.js.map +1 -1
  573. package/lib/feature-libraries/forest-summary/codec.d.ts +5 -12
  574. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  575. package/lib/feature-libraries/forest-summary/codec.js +35 -32
  576. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  577. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -2
  578. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  579. package/lib/feature-libraries/forest-summary/forestSummarizer.js +7 -8
  580. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  581. package/lib/feature-libraries/forest-summary/formatCommon.d.ts +6 -4
  582. package/lib/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
  583. package/lib/feature-libraries/forest-summary/formatCommon.js +7 -4
  584. package/lib/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  585. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +19 -14
  586. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  587. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +30 -47
  588. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  589. package/lib/feature-libraries/forest-summary/index.d.ts +1 -1
  590. package/lib/feature-libraries/forest-summary/index.d.ts.map +1 -1
  591. package/lib/feature-libraries/forest-summary/index.js +1 -1
  592. package/lib/feature-libraries/forest-summary/index.js.map +1 -1
  593. package/lib/feature-libraries/index.d.ts +6 -6
  594. package/lib/feature-libraries/index.d.ts.map +1 -1
  595. package/lib/feature-libraries/index.js +5 -5
  596. package/lib/feature-libraries/index.js.map +1 -1
  597. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts +3 -3
  598. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  599. package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  600. package/lib/feature-libraries/indexing/index.d.ts +1 -1
  601. package/lib/feature-libraries/indexing/index.d.ts.map +1 -1
  602. package/lib/feature-libraries/indexing/index.js.map +1 -1
  603. package/lib/feature-libraries/indexing/types.d.ts +15 -13
  604. package/lib/feature-libraries/indexing/types.d.ts.map +1 -1
  605. package/lib/feature-libraries/indexing/types.js.map +1 -1
  606. package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
  607. package/lib/feature-libraries/mitigatedChangeFamily.js +2 -2
  608. package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
  609. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +24 -100
  610. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  611. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +10 -7
  612. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  613. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +51 -85
  614. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  615. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  616. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  617. package/lib/feature-libraries/modular-schema/genericFieldKind.js +9 -4
  618. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  619. package/lib/feature-libraries/modular-schema/index.d.ts +3 -3
  620. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  621. package/lib/feature-libraries/modular-schema/index.js +1 -1
  622. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  623. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +22 -18
  624. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  625. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +144 -267
  626. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  627. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
  628. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js +1 -1
  629. package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
  630. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +0 -1
  631. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  632. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +0 -8
  633. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  634. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +22 -56
  635. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  636. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +468 -1387
  637. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  638. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  639. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  640. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +2 -1
  641. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  642. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js +1 -1
  643. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
  644. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +10 -49
  645. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  646. package/lib/feature-libraries/modular-schema/modularChangeTypes.js +1 -1
  647. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  648. package/lib/feature-libraries/optional-field/optionalField.d.ts +32 -13
  649. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  650. package/lib/feature-libraries/optional-field/optionalField.js +442 -254
  651. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  652. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts +31 -31
  653. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.d.ts.map +1 -1
  654. package/lib/feature-libraries/optional-field/optionalFieldChangeTypes.js.map +1 -1
  655. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +1 -1
  656. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
  657. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js +26 -55
  658. package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
  659. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  660. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +1 -5
  661. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  662. package/lib/feature-libraries/optional-field/requiredField.d.ts +2 -3
  663. package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  664. package/lib/feature-libraries/optional-field/requiredField.js +1 -5
  665. package/lib/feature-libraries/optional-field/requiredField.js.map +1 -1
  666. package/lib/feature-libraries/sequence-field/compose.d.ts +7 -6
  667. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  668. package/lib/feature-libraries/sequence-field/compose.js +261 -83
  669. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  670. package/lib/feature-libraries/sequence-field/helperTypes.d.ts +10 -14
  671. package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  672. package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  673. package/lib/feature-libraries/sequence-field/invert.d.ts +3 -3
  674. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  675. package/lib/feature-libraries/sequence-field/invert.js +169 -67
  676. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  677. package/lib/feature-libraries/sequence-field/markQueue.d.ts +2 -2
  678. package/lib/feature-libraries/sequence-field/markQueue.d.ts.map +1 -1
  679. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  680. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +56 -4
  681. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  682. package/lib/feature-libraries/sequence-field/moveEffectTable.js +84 -6
  683. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  684. package/lib/feature-libraries/sequence-field/rebase.d.ts +3 -3
  685. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  686. package/lib/feature-libraries/sequence-field/rebase.js +118 -111
  687. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  688. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts +9 -0
  689. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.d.ts.map +1 -0
  690. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js +46 -0
  691. package/lib/feature-libraries/sequence-field/relevantRemovedRoots.js.map +1 -0
  692. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  693. package/lib/feature-libraries/sequence-field/replaceRevisions.js +32 -19
  694. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  695. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  696. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +3 -2
  697. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  698. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -22
  699. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  700. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +182 -379
  701. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  702. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
  703. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +63 -21
  704. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
  705. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts +2 -2
  706. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.d.ts.map +1 -1
  707. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js +13 -13
  708. package/lib/feature-libraries/sequence-field/sequenceFieldEditor.js.map +1 -1
  709. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
  710. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  711. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +111 -16
  712. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  713. package/lib/feature-libraries/sequence-field/types.d.ts +74 -37
  714. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  715. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  716. package/lib/feature-libraries/sequence-field/utils.d.ts +25 -20
  717. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  718. package/lib/feature-libraries/sequence-field/utils.js +313 -155
  719. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  720. package/lib/index.d.ts +3 -3
  721. package/lib/index.d.ts.map +1 -1
  722. package/lib/index.js +1 -1
  723. package/lib/index.js.map +1 -1
  724. package/lib/legacy.d.ts +4 -1
  725. package/lib/packageVersion.d.ts +1 -1
  726. package/lib/packageVersion.d.ts.map +1 -1
  727. package/lib/packageVersion.js +1 -1
  728. package/lib/packageVersion.js.map +1 -1
  729. package/lib/shared-tree/independentView.d.ts.map +1 -1
  730. package/lib/shared-tree/independentView.js +4 -4
  731. package/lib/shared-tree/independentView.js.map +1 -1
  732. package/lib/shared-tree/index.d.ts +1 -1
  733. package/lib/shared-tree/index.d.ts.map +1 -1
  734. package/lib/shared-tree/index.js.map +1 -1
  735. package/lib/shared-tree/schematizeTree.d.ts +4 -4
  736. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  737. package/lib/shared-tree/schematizeTree.js +2 -3
  738. package/lib/shared-tree/schematizeTree.js.map +1 -1
  739. package/lib/shared-tree/schematizingTreeView.d.ts +10 -1
  740. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  741. package/lib/shared-tree/schematizingTreeView.js +71 -30
  742. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  743. package/lib/shared-tree/sharedTree.d.ts +3 -9
  744. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  745. package/lib/shared-tree/sharedTree.js +9 -12
  746. package/lib/shared-tree/sharedTree.js.map +1 -1
  747. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +0 -1
  748. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  749. package/lib/shared-tree/sharedTreeChangeCodecs.js +0 -8
  750. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  751. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +4 -4
  752. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  753. package/lib/shared-tree/sharedTreeChangeFamily.js +3 -3
  754. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  755. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +6 -16
  756. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  757. package/lib/shared-tree/sharedTreeEditBuilder.js +6 -12
  758. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  759. package/lib/shared-tree/tree.js +1 -1
  760. package/lib/shared-tree/tree.js.map +1 -1
  761. package/lib/shared-tree/treeAlpha.d.ts +8 -1
  762. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  763. package/lib/shared-tree/treeAlpha.js +49 -9
  764. package/lib/shared-tree/treeAlpha.js.map +1 -1
  765. package/lib/shared-tree/treeCheckout.d.ts +46 -16
  766. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  767. package/lib/shared-tree/treeCheckout.js +132 -76
  768. package/lib/shared-tree/treeCheckout.js.map +1 -1
  769. package/lib/shared-tree/unhydratedTreeContext.d.ts +20 -0
  770. package/lib/shared-tree/unhydratedTreeContext.d.ts.map +1 -0
  771. package/lib/shared-tree/unhydratedTreeContext.js +52 -0
  772. package/lib/shared-tree/unhydratedTreeContext.js.map +1 -0
  773. package/lib/shared-tree-core/branch.d.ts +2 -3
  774. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  775. package/lib/shared-tree-core/branch.js +3 -4
  776. package/lib/shared-tree-core/branch.js.map +1 -1
  777. package/lib/shared-tree-core/editManager.d.ts +2 -2
  778. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  779. package/lib/shared-tree-core/editManager.js +9 -9
  780. package/lib/shared-tree-core/editManager.js.map +1 -1
  781. package/lib/shared-tree-core/editManagerCodecs.d.ts +0 -4
  782. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  783. package/lib/shared-tree-core/editManagerCodecs.js +1 -8
  784. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  785. package/lib/shared-tree-core/editManagerFormatCommons.d.ts +0 -1
  786. package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
  787. package/lib/shared-tree-core/editManagerFormatCommons.js +0 -6
  788. package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
  789. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +2 -2
  790. package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
  791. package/lib/shared-tree-core/editManagerFormatV1toV4.js +0 -1
  792. package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
  793. package/lib/shared-tree-core/index.d.ts +2 -2
  794. package/lib/shared-tree-core/index.d.ts.map +1 -1
  795. package/lib/shared-tree-core/index.js +2 -2
  796. package/lib/shared-tree-core/index.js.map +1 -1
  797. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +1 -1
  798. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  799. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  800. package/lib/shared-tree-core/messageCodecs.d.ts +0 -4
  801. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  802. package/lib/shared-tree-core/messageCodecs.js +1 -8
  803. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  804. package/lib/shared-tree-core/messageFormat.d.ts +0 -1
  805. package/lib/shared-tree-core/messageFormat.d.ts.map +1 -1
  806. package/lib/shared-tree-core/messageFormat.js +0 -6
  807. package/lib/shared-tree-core/messageFormat.js.map +1 -1
  808. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +2 -2
  809. package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
  810. package/lib/shared-tree-core/messageFormatV1ToV4.js +0 -1
  811. package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
  812. package/lib/shared-tree-core/sharedTreeCore.d.ts +0 -1
  813. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  814. package/lib/shared-tree-core/sharedTreeCore.js +1 -1
  815. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  816. package/lib/shared-tree-core/transaction.d.ts +15 -27
  817. package/lib/shared-tree-core/transaction.d.ts.map +1 -1
  818. package/lib/shared-tree-core/transaction.js +7 -11
  819. package/lib/shared-tree-core/transaction.js.map +1 -1
  820. package/lib/simple-tree/api/configuration.d.ts +4 -0
  821. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  822. package/lib/simple-tree/api/configuration.js.map +1 -1
  823. package/lib/simple-tree/api/identifierIndex.d.ts +2 -2
  824. package/lib/simple-tree/api/identifierIndex.d.ts.map +1 -1
  825. package/lib/simple-tree/api/identifierIndex.js +2 -2
  826. package/lib/simple-tree/api/identifierIndex.js.map +1 -1
  827. package/lib/simple-tree/api/index.d.ts +3 -3
  828. package/lib/simple-tree/api/index.d.ts.map +1 -1
  829. package/lib/simple-tree/api/index.js +1 -1
  830. package/lib/simple-tree/api/index.js.map +1 -1
  831. package/lib/simple-tree/api/schemaFactory.d.ts +3 -2
  832. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  833. package/lib/simple-tree/api/schemaFactory.js +3 -2
  834. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  835. package/lib/simple-tree/api/simpleTreeIndex.d.ts +15 -13
  836. package/lib/simple-tree/api/simpleTreeIndex.d.ts.map +1 -1
  837. package/lib/simple-tree/api/simpleTreeIndex.js +2 -2
  838. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  839. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts +4 -4
  840. package/lib/simple-tree/api/snapshotCompatibilityChecker.js +2 -2
  841. package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  842. package/lib/simple-tree/api/transactionTypes.d.ts +22 -25
  843. package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -1
  844. package/lib/simple-tree/api/transactionTypes.js.map +1 -1
  845. package/lib/simple-tree/api/tree.d.ts +69 -132
  846. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  847. package/lib/simple-tree/api/tree.js.map +1 -1
  848. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +12 -16
  849. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  850. package/lib/simple-tree/core/unhydratedFlexTree.js +8 -58
  851. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  852. package/lib/simple-tree/fieldSchema.d.ts +4 -4
  853. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  854. package/lib/simple-tree/fieldSchema.js.map +1 -1
  855. package/lib/simple-tree/index.d.ts +3 -3
  856. package/lib/simple-tree/index.d.ts.map +1 -1
  857. package/lib/simple-tree/index.js +2 -2
  858. package/lib/simple-tree/index.js.map +1 -1
  859. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  860. package/lib/simple-tree/node-kinds/array/arrayNode.js +4 -6
  861. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  862. package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
  863. package/lib/simple-tree/node-kinds/common.js +2 -2
  864. package/lib/simple-tree/node-kinds/common.js.map +1 -1
  865. package/lib/simple-tree/node-kinds/map/mapNode.js +2 -2
  866. package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
  867. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  868. package/lib/simple-tree/node-kinds/object/objectNode.js +20 -20
  869. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  870. package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
  871. package/lib/simple-tree/node-kinds/record/recordNode.js +2 -4
  872. package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
  873. package/lib/simple-tree/prepareForInsertion.d.ts +47 -54
  874. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  875. package/lib/simple-tree/prepareForInsertion.js +125 -184
  876. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  877. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +3 -8
  878. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  879. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +10 -23
  880. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  881. package/lib/text/textDomain.d.ts +27 -9
  882. package/lib/text/textDomain.d.ts.map +1 -1
  883. package/lib/text/textDomain.js +45 -9
  884. package/lib/text/textDomain.js.map +1 -1
  885. package/lib/text/textDomainFormatted.d.ts +14 -8
  886. package/lib/text/textDomainFormatted.d.ts.map +1 -1
  887. package/lib/text/textDomainFormatted.js +80 -8
  888. package/lib/text/textDomainFormatted.js.map +1 -1
  889. package/lib/treeFactory.d.ts.map +1 -1
  890. package/lib/treeFactory.js +3 -13
  891. package/lib/treeFactory.js.map +1 -1
  892. package/lib/util/index.d.ts +1 -1
  893. package/lib/util/index.d.ts.map +1 -1
  894. package/lib/util/index.js +1 -1
  895. package/lib/util/index.js.map +1 -1
  896. package/lib/util/rangeMap.d.ts +11 -22
  897. package/lib/util/rangeMap.d.ts.map +1 -1
  898. package/lib/util/rangeMap.js +3 -36
  899. package/lib/util/rangeMap.js.map +1 -1
  900. package/package.json +24 -24
  901. package/src/codec/codec.ts +5 -4
  902. package/src/codec/index.ts +1 -0
  903. package/src/codec/versioned/codec.ts +32 -6
  904. package/src/codec/versioned/format.ts +17 -2
  905. package/src/codec/versioned/index.ts +1 -1
  906. package/src/core/change-family/changeFamily.ts +0 -5
  907. package/src/core/change-family/index.ts +0 -1
  908. package/src/core/index.ts +3 -10
  909. package/src/core/rebase/changeRebaser.ts +1 -6
  910. package/src/core/rebase/index.ts +2 -1
  911. package/src/core/rebase/types.ts +80 -4
  912. package/src/core/rebase/utils.ts +7 -31
  913. package/src/core/tree/delta.ts +0 -6
  914. package/src/core/tree/detachedFieldIndex.ts +1 -29
  915. package/src/core/tree/detachedFieldIndexTypes.ts +0 -5
  916. package/src/core/tree/index.ts +12 -13
  917. package/src/core/tree/pathTree.ts +4 -16
  918. package/src/core/tree/visitDelta.ts +11 -31
  919. package/src/feature-libraries/changeAtomIdBTree.ts +3 -28
  920. package/src/feature-libraries/chunked-forest/codec/codecs.ts +59 -78
  921. package/src/feature-libraries/chunked-forest/codec/format.ts +11 -0
  922. package/src/feature-libraries/chunked-forest/codec/index.ts +3 -3
  923. package/src/feature-libraries/chunked-forest/index.ts +2 -3
  924. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +127 -369
  925. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +4 -13
  926. package/src/feature-libraries/default-schema/index.ts +5 -16
  927. package/src/feature-libraries/default-schema/mappedEditBuilder.ts +9 -35
  928. package/src/feature-libraries/deltaUtils.ts +1 -6
  929. package/src/feature-libraries/flex-tree/context.ts +0 -17
  930. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +8 -7
  931. package/src/feature-libraries/flex-tree/lazyField.ts +24 -65
  932. package/src/feature-libraries/flex-tree/observer.ts +17 -0
  933. package/src/feature-libraries/forest-summary/codec.ts +46 -56
  934. package/src/feature-libraries/forest-summary/forestSummarizer.ts +5 -14
  935. package/src/feature-libraries/forest-summary/formatCommon.ts +14 -19
  936. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +44 -74
  937. package/src/feature-libraries/forest-summary/index.ts +1 -1
  938. package/src/feature-libraries/index.ts +11 -26
  939. package/src/feature-libraries/indexing/anchorTreeIndex.ts +3 -5
  940. package/src/feature-libraries/indexing/index.ts +1 -1
  941. package/src/feature-libraries/indexing/types.ts +15 -17
  942. package/src/feature-libraries/mitigatedChangeFamily.ts +1 -3
  943. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +47 -144
  944. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +58 -113
  945. package/src/feature-libraries/modular-schema/genericFieldKind.ts +18 -7
  946. package/src/feature-libraries/modular-schema/index.ts +16 -16
  947. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +329 -604
  948. package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +0 -1
  949. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +0 -14
  950. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +748 -2694
  951. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +0 -1
  952. package/src/feature-libraries/modular-schema/modularChangeFormatV2.ts +1 -1
  953. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +10 -62
  954. package/src/feature-libraries/optional-field/optionalField.ts +568 -359
  955. package/src/feature-libraries/optional-field/optionalFieldChangeTypes.ts +35 -31
  956. package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +35 -89
  957. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +1 -5
  958. package/src/feature-libraries/optional-field/requiredField.ts +2 -15
  959. package/src/feature-libraries/sequence-field/compose.ts +522 -137
  960. package/src/feature-libraries/sequence-field/helperTypes.ts +19 -34
  961. package/src/feature-libraries/sequence-field/invert.ts +228 -102
  962. package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
  963. package/src/feature-libraries/sequence-field/moveEffectTable.ts +195 -8
  964. package/src/feature-libraries/sequence-field/rebase.ts +207 -171
  965. package/src/feature-libraries/sequence-field/relevantRemovedRoots.ts +57 -0
  966. package/src/feature-libraries/sequence-field/replaceRevisions.ts +52 -26
  967. package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +3 -8
  968. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +229 -677
  969. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +70 -56
  970. package/src/feature-libraries/sequence-field/sequenceFieldEditor.ts +30 -28
  971. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +131 -21
  972. package/src/feature-libraries/sequence-field/types.ts +79 -40
  973. package/src/feature-libraries/sequence-field/utils.ts +370 -211
  974. package/src/index.ts +6 -3
  975. package/src/packageVersion.ts +1 -1
  976. package/src/shared-tree/independentView.ts +9 -15
  977. package/src/shared-tree/index.ts +2 -3
  978. package/src/shared-tree/schematizeTree.ts +8 -21
  979. package/src/shared-tree/schematizingTreeView.ts +111 -48
  980. package/src/shared-tree/sharedTree.ts +23 -40
  981. package/src/shared-tree/sharedTreeChangeCodecs.ts +0 -8
  982. package/src/shared-tree/sharedTreeChangeFamily.ts +4 -7
  983. package/src/shared-tree/sharedTreeEditBuilder.ts +8 -43
  984. package/src/shared-tree/tree.ts +1 -1
  985. package/src/shared-tree/treeAlpha.ts +64 -11
  986. package/src/shared-tree/treeCheckout.ts +159 -114
  987. package/src/shared-tree/unhydratedTreeContext.ts +87 -0
  988. package/src/shared-tree-core/branch.ts +2 -8
  989. package/src/shared-tree-core/editManager.ts +2 -16
  990. package/src/shared-tree-core/editManagerCodecs.ts +1 -11
  991. package/src/shared-tree-core/editManagerFormatCommons.ts +0 -6
  992. package/src/shared-tree-core/editManagerFormatV1toV4.ts +1 -3
  993. package/src/shared-tree-core/index.ts +0 -2
  994. package/src/shared-tree-core/messageCodecV1ToV4.ts +1 -2
  995. package/src/shared-tree-core/messageCodecs.ts +1 -11
  996. package/src/shared-tree-core/messageFormat.ts +0 -6
  997. package/src/shared-tree-core/messageFormatV1ToV4.ts +1 -3
  998. package/src/shared-tree-core/sharedTreeCore.ts +1 -4
  999. package/src/shared-tree-core/transaction.ts +19 -39
  1000. package/src/simple-tree/api/configuration.ts +4 -0
  1001. package/src/simple-tree/api/identifierIndex.ts +4 -4
  1002. package/src/simple-tree/api/index.ts +3 -1
  1003. package/src/simple-tree/api/schemaFactory.ts +3 -2
  1004. package/src/simple-tree/api/simpleTreeIndex.ts +26 -20
  1005. package/src/simple-tree/api/snapshotCompatibilityChecker.ts +4 -4
  1006. package/src/simple-tree/api/transactionTypes.ts +24 -26
  1007. package/src/simple-tree/api/tree.ts +92 -131
  1008. package/src/simple-tree/core/unhydratedFlexTree.ts +35 -82
  1009. package/src/simple-tree/fieldSchema.ts +4 -6
  1010. package/src/simple-tree/index.ts +5 -4
  1011. package/src/simple-tree/node-kinds/array/arrayNode.ts +5 -7
  1012. package/src/simple-tree/node-kinds/common.ts +5 -2
  1013. package/src/simple-tree/node-kinds/map/mapNode.ts +4 -4
  1014. package/src/simple-tree/node-kinds/object/objectNode.ts +26 -26
  1015. package/src/simple-tree/node-kinds/record/recordNode.ts +9 -10
  1016. package/src/simple-tree/prepareForInsertion.ts +200 -342
  1017. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +15 -35
  1018. package/src/text/textDomain.ts +91 -12
  1019. package/src/text/textDomainFormatted.ts +127 -15
  1020. package/src/treeFactory.ts +4 -16
  1021. package/src/util/index.ts +0 -3
  1022. package/src/util/rangeMap.ts +15 -63
  1023. package/dist/core/schema-view/index.d.ts +0 -6
  1024. package/dist/core/schema-view/index.d.ts.map +0 -1
  1025. package/dist/core/schema-view/index.js +0 -10
  1026. package/dist/core/schema-view/index.js.map +0 -1
  1027. package/dist/core/schema-view/view.d.ts +0 -31
  1028. package/dist/core/schema-view/view.d.ts.map +0 -1
  1029. package/dist/core/schema-view/view.js +0 -18
  1030. package/dist/core/schema-view/view.js.map +0 -1
  1031. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +0 -40
  1032. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +0 -1
  1033. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js +0 -153
  1034. package/dist/feature-libraries/default-schema/locationBasedEditBuilder.js.map +0 -1
  1035. package/dist/feature-libraries/forest-summary/formatV1.d.ts +0 -12
  1036. package/dist/feature-libraries/forest-summary/formatV1.d.ts.map +0 -1
  1037. package/dist/feature-libraries/forest-summary/formatV1.js +0 -10
  1038. package/dist/feature-libraries/forest-summary/formatV1.js.map +0 -1
  1039. package/dist/feature-libraries/forest-summary/formatV2.d.ts +0 -12
  1040. package/dist/feature-libraries/forest-summary/formatV2.d.ts.map +0 -1
  1041. package/dist/feature-libraries/forest-summary/formatV2.js +0 -10
  1042. package/dist/feature-libraries/forest-summary/formatV2.js.map +0 -1
  1043. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +0 -15
  1044. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +0 -1
  1045. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js +0 -296
  1046. package/dist/feature-libraries/modular-schema/modularChangeCodecV3.js.map +0 -1
  1047. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +0 -74
  1048. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +0 -1
  1049. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js +0 -35
  1050. package/dist/feature-libraries/modular-schema/modularChangeFormatV3.js.map +0 -1
  1051. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +0 -23
  1052. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +0 -1
  1053. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +0 -31
  1054. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +0 -1
  1055. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +0 -12
  1056. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +0 -1
  1057. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +0 -57
  1058. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +0 -1
  1059. package/lib/core/schema-view/index.d.ts +0 -6
  1060. package/lib/core/schema-view/index.d.ts.map +0 -1
  1061. package/lib/core/schema-view/index.js +0 -6
  1062. package/lib/core/schema-view/index.js.map +0 -1
  1063. package/lib/core/schema-view/view.d.ts +0 -31
  1064. package/lib/core/schema-view/view.d.ts.map +0 -1
  1065. package/lib/core/schema-view/view.js +0 -14
  1066. package/lib/core/schema-view/view.js.map +0 -1
  1067. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts +0 -40
  1068. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.d.ts.map +0 -1
  1069. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js +0 -149
  1070. package/lib/feature-libraries/default-schema/locationBasedEditBuilder.js.map +0 -1
  1071. package/lib/feature-libraries/forest-summary/formatV1.d.ts +0 -12
  1072. package/lib/feature-libraries/forest-summary/formatV1.d.ts.map +0 -1
  1073. package/lib/feature-libraries/forest-summary/formatV1.js +0 -7
  1074. package/lib/feature-libraries/forest-summary/formatV1.js.map +0 -1
  1075. package/lib/feature-libraries/forest-summary/formatV2.d.ts +0 -12
  1076. package/lib/feature-libraries/forest-summary/formatV2.d.ts.map +0 -1
  1077. package/lib/feature-libraries/forest-summary/formatV2.js +0 -7
  1078. package/lib/feature-libraries/forest-summary/formatV2.js.map +0 -1
  1079. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts +0 -15
  1080. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.d.ts.map +0 -1
  1081. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js +0 -292
  1082. package/lib/feature-libraries/modular-schema/modularChangeCodecV3.js.map +0 -1
  1083. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts +0 -74
  1084. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.d.ts.map +0 -1
  1085. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js +0 -32
  1086. package/lib/feature-libraries/modular-schema/modularChangeFormatV3.js.map +0 -1
  1087. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +0 -23
  1088. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +0 -1
  1089. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +0 -27
  1090. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +0 -1
  1091. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +0 -12
  1092. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +0 -1
  1093. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +0 -53
  1094. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +0 -1
  1095. package/src/core/schema-view/README.md +0 -9
  1096. package/src/core/schema-view/index.ts +0 -10
  1097. package/src/core/schema-view/view.ts +0 -38
  1098. package/src/feature-libraries/default-schema/locationBasedEditBuilder.ts +0 -231
  1099. package/src/feature-libraries/forest-summary/formatV1.ts +0 -11
  1100. package/src/feature-libraries/forest-summary/formatV2.ts +0 -11
  1101. package/src/feature-libraries/modular-schema/modularChangeCodecV3.ts +0 -649
  1102. package/src/feature-libraries/modular-schema/modularChangeFormatV3.ts +0 -67
  1103. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +0 -45
  1104. package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +0 -94
@@ -1 +1 @@
1
- {"version":3,"file":"optionalField.js","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalField.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 } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype ChangeAtomId,\n\ttype ChangesetLocalId,\n\ttype DeltaFieldChanges,\n\ttype DeltaMark,\n\tMultiplicity,\n\ttype RevisionReplacer,\n\ttype RevisionTag,\n\tareEqualChangeAtomIdOpts,\n\tforbiddenFieldKindIdentifier,\n\tmakeChangeAtomId,\n} from \"../../core/index.js\";\nimport type { IdAllocator, Mutable } from \"../../util/index.js\";\nimport { nodeIdFromChangeAtom } from \"../deltaUtils.js\";\nimport {\n\toptionalIdentifier,\n\tidentifierFieldIdentifier,\n\trequiredIdentifier,\n} from \"../fieldKindIdentifiers.js\";\nimport {\n\ttype FieldChangeHandler,\n\ttype FieldChangeRebaser,\n\ttype FieldEditor,\n\ttype NodeChangeComposer,\n\ttype NodeChangePruner,\n\ttype NodeChangeRebaser,\n\ttype NodeId,\n\ttype ToDelta,\n\ttype NestedChangesIndices,\n\ttype RebaseNodeManager,\n\ttype ComposeNodeManager,\n\ttype InvertNodeManager,\n\ttype CrossFieldKeyRange,\n\tNodeMoveType,\n\ttype RebaseVersion,\n\ttype RebaseRevisionMetadata,\n\tFlexFieldKind,\n} from \"../modular-schema/index.js\";\n\nimport type { OptionalChangeset, Replace } from \"./optionalFieldChangeTypes.js\";\nimport { makeOptionalFieldCodecFamily } from \"./optionalFieldCodecs.js\";\n\nexport const optionalChangeRebaser: FieldChangeRebaser<OptionalChangeset> = {\n\tcompose,\n\tinvert: (\n\t\tchange: OptionalChangeset,\n\t\tisRollback: boolean,\n\t\tgenId: IdAllocator<ChangesetLocalId>,\n\t\trevision: RevisionTag | undefined,\n\t\tnodeManager: InvertNodeManager,\n\t): OptionalChangeset => {\n\t\tconst inverted: Mutable<OptionalChangeset> = {};\n\t\tconst detachId = getEffectiveDetachId(change);\n\n\t\tif (detachId !== undefined) {\n\t\t\tconst attachIdForInverse = isRollback\n\t\t\t\t? detachId\n\t\t\t\t: makeChangeAtomId(detachId.localId, revision);\n\n\t\t\tnodeManager.invertDetach(detachId, 1, change.childChange, attachIdForInverse);\n\n\t\t\tinverted.valueReplace = {\n\t\t\t\tisEmpty: change.valueReplace?.src === undefined,\n\t\t\t\tdst: makeChangeAtomId(genId.allocate(), revision),\n\t\t\t\tsrc: attachIdForInverse,\n\t\t\t};\n\t\t}\n\n\t\tif (change.valueReplace?.src !== undefined) {\n\t\t\tconst attachEntry = nodeManager.invertAttach(change.valueReplace.src, 1);\n\t\t\tconst detachIdForInverse = invertAttachId(\n\t\t\t\tchange.valueReplace.src,\n\t\t\t\trevision,\n\t\t\t\tisRollback,\n\t\t\t\tattachEntry.value?.detachId,\n\t\t\t);\n\n\t\t\tif (attachEntry.value?.nodeChange !== undefined) {\n\t\t\t\tinverted.childChange = attachEntry.value.nodeChange;\n\t\t\t}\n\n\t\t\t// TODO: Always use nodeDetach instead of valueReplace if not supporting older client versions.\n\t\t\tif (isPin(change)) {\n\t\t\t\tinverted.nodeDetach = detachIdForInverse;\n\t\t\t} else if (inverted.valueReplace === undefined) {\n\t\t\t\tinverted.valueReplace = { isEmpty: false, dst: detachIdForInverse };\n\t\t\t} else {\n\t\t\t\t(inverted.valueReplace as Mutable<Replace>).dst = detachIdForInverse;\n\t\t\t}\n\t\t} else if (detachId === undefined && change.childChange !== undefined) {\n\t\t\t// This change does not affect which node is in the field, so its child change should remain here.\n\t\t\tinverted.childChange = change.childChange;\n\t\t}\n\n\t\treturn inverted;\n\t},\n\n\trebase: (\n\t\tnewChange: OptionalChangeset,\n\t\toverChange: OptionalChangeset,\n\t\trebaseChild: NodeChangeRebaser,\n\t\t_genId: IdAllocator,\n\t\tnodeManager: RebaseNodeManager,\n\t\t_metadata: RebaseRevisionMetadata,\n\t\trebaseVersion: RebaseVersion,\n\t): OptionalChangeset => {\n\t\tconst rebased: Mutable<OptionalChangeset> = {};\n\n\t\tconst rebasedChild = rebaseChild(newChange.childChange, overChange.childChange);\n\t\tconst overDetach = getEffectiveDetachId(overChange);\n\n\t\t// Note that composition ignores rebase version, and so will create node detaches even when we are supporting collaboration with older clients.\n\t\t// Therefore, in rebase version 1 we must rebase node detach as if it were a clear, matching the behavior of older clients.\n\t\tconst hasNodeDetachTreatedAsClear =\n\t\t\tnewChange.nodeDetach !== undefined && rebaseVersion < 2 && !isPin(newChange);\n\n\t\tif (overDetach !== undefined) {\n\t\t\tconst nodeDetach = hasNodeDetachTreatedAsClear ? undefined : newChange.nodeDetach;\n\t\t\tnodeManager.rebaseOverDetach(overDetach, 1, nodeDetach, rebasedChild);\n\t\t}\n\n\t\tconst overAttach = overChange.valueReplace?.src;\n\t\tif (overAttach !== undefined) {\n\t\t\tconst movedChangeEntry = nodeManager.getNewChangesForBaseAttach(overAttach, 1).value;\n\n\t\t\tif (movedChangeEntry?.nodeChange !== undefined) {\n\t\t\t\trebased.childChange = movedChangeEntry.nodeChange;\n\t\t\t}\n\n\t\t\tif (movedChangeEntry?.detachId !== undefined) {\n\t\t\t\trebased.nodeDetach = movedChangeEntry.detachId;\n\t\t\t\tif (newChange.valueReplace !== undefined) {\n\t\t\t\t\t// Now that the rebased change has a node detach,\n\t\t\t\t\t// the detach from the value replace no longer takes effect.\n\t\t\t\t\tnodeManager.removeDetach(newChange.valueReplace.dst, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (overDetach === undefined) {\n\t\t\t// `overChange` did not change which node is in the field.\n\t\t\tif (rebasedChild !== undefined) {\n\t\t\t\trebased.childChange = rebasedChild;\n\t\t\t}\n\n\t\t\tif (newChange.nodeDetach !== undefined) {\n\t\t\t\trebased.nodeDetach = newChange.nodeDetach;\n\t\t\t}\n\t\t}\n\n\t\tif (hasNodeDetachTreatedAsClear && overDetach !== undefined) {\n\t\t\t// In order to emulate the rebasing behavior of older clients,\n\t\t\t// we convert the node detach to a clear.\n\t\t\tconst valueReplace: Mutable<Replace> = {\n\t\t\t\tdst: newChange.nodeDetach,\n\t\t\t\tisEmpty: overAttach === undefined,\n\t\t\t};\n\n\t\t\tif (newChange.valueReplace?.src !== undefined) {\n\t\t\t\tvalueReplace.src = newChange.valueReplace.src;\n\t\t\t}\n\n\t\t\trebased.valueReplace = valueReplace;\n\t\t} else if (newChange.valueReplace !== undefined) {\n\t\t\tconst isEmpty =\n\t\t\t\toverDetach !== undefined || overAttach !== undefined\n\t\t\t\t\t? overAttach === undefined\n\t\t\t\t\t: newChange.valueReplace.isEmpty;\n\n\t\t\trebased.valueReplace = { ...newChange.valueReplace, isEmpty };\n\t\t}\n\n\t\tconst detachId = getEffectiveDetachId(newChange);\n\t\tconst rebasedDetachId = getEffectiveDetachId(rebased);\n\n\t\tif (!areEqualChangeAtomIdOpts(detachId, rebasedDetachId)) {\n\t\t\tif (detachId !== undefined) {\n\t\t\t\tnodeManager.removeDetach(detachId, 1);\n\t\t\t}\n\t\t\tif (rebasedDetachId !== undefined) {\n\t\t\t\tnodeManager.addDetach(rebasedDetachId, 1);\n\t\t\t}\n\t\t}\n\t\treturn rebased;\n\t},\n\n\tprune: (change: OptionalChangeset, pruneChild: NodeChangePruner): OptionalChangeset => {\n\t\tconst prunedChange: Mutable<OptionalChangeset> = { ...change };\n\n\t\tdelete prunedChange.childChange;\n\t\tif (change.childChange !== undefined) {\n\t\t\tconst childChange = pruneChild(change.childChange);\n\t\t\tif (childChange !== undefined) {\n\t\t\t\tprunedChange.childChange = childChange;\n\t\t\t}\n\t\t}\n\n\t\treturn prunedChange;\n\t},\n\n\treplaceRevisions: (\n\t\tchange: OptionalChangeset,\n\t\treplacer: RevisionReplacer,\n\t): OptionalChangeset => {\n\t\tconst updated: Mutable<OptionalChangeset> = {};\n\n\t\tconst valueReplace = replaceReplaceRevisions(change.valueReplace, replacer);\n\n\t\tif (change.childChange !== undefined) {\n\t\t\tupdated.childChange = replacer.getUpdatedAtomId(change.childChange);\n\t\t}\n\n\t\tif (valueReplace !== undefined) {\n\t\t\tupdated.valueReplace = valueReplace;\n\t\t}\n\n\t\tif (change.nodeDetach !== undefined) {\n\t\t\tupdated.nodeDetach = replacer.getUpdatedAtomId(change.nodeDetach);\n\t\t}\n\n\t\treturn updated;\n\t},\n\n\tmute: (change: OptionalChangeset): OptionalChangeset => {\n\t\treturn { childChange: change.childChange };\n\t},\n};\n\nfunction compose(\n\tchange1: OptionalChangeset,\n\tchange2: OptionalChangeset,\n\tcomposeChild: NodeChangeComposer,\n\t_genId: IdAllocator,\n\tnodeManager: ComposeNodeManager,\n): OptionalChangeset {\n\tconst detachId2 = getEffectiveDetachId(change2);\n\tif (change1.valueReplace?.src !== undefined && detachId2 !== undefined) {\n\t\tnodeManager.composeAttachDetach(change1.valueReplace.src, detachId2, 1);\n\t}\n\n\tconst composedDetach = composeNodeDetaches(change1, change2, nodeManager);\n\tconst composedReplace = composeReplaces(change1, change2);\n\tconst composedChildChange = getComposedChildChanges(\n\t\tchange1,\n\t\tchange2,\n\t\tnodeManager,\n\t\tcomposeChild,\n\t);\n\n\tsendNewChildChanges(change1, change2, nodeManager);\n\n\tif (\n\t\tchange1.nodeDetach !== undefined &&\n\t\tareEqualChangeAtomIdOpts(change1.nodeDetach, change2.valueReplace?.src)\n\t) {\n\t\tnodeManager.composeDetachAttach(change1.nodeDetach, change1.nodeDetach, 1, true);\n\t}\n\n\treturn makeChangeset(composedReplace, composedDetach, composedChildChange);\n}\n\nfunction composeNodeDetaches(\n\tchange1: OptionalChangeset,\n\tchange2: OptionalChangeset,\n\tnodeManager: ComposeNodeManager,\n): ChangeAtomId | undefined {\n\tconst detach1 = getEffectiveDetachId(change1);\n\tif (detach1 !== undefined) {\n\t\tconst newDetachId = nodeManager.getNewChangesForBaseDetach(detach1, 1).value?.detachId;\n\t\tif (newDetachId !== undefined) {\n\t\t\t// change2 either renames or detaches this node (the latter case implying that change1 reattaches/moves it).\n\t\t\t// In either case, the composition ends with the node detached by `newDetachId`.\n\t\t\t// Note that even if change2 detaches the node with a location-targeting detach (e.g. an optional field clear),\n\t\t\t// the composition should still have a node-targeting detach.\n\t\t\t// This is because change1 must attach the node in the location targeted by the detach,\n\t\t\t// and rebasing does not affect attaches, although that could change if slice moves are implemented.\n\t\t\treturn newDetachId;\n\t\t}\n\t}\n\n\tif (change1.nodeDetach !== undefined) {\n\t\treturn change1.nodeDetach;\n\t}\n\n\treturn change1.valueReplace === undefined ? change2.nodeDetach : undefined;\n}\n\nfunction composeReplaces(\n\tchange1: OptionalChangeset,\n\tchange2: OptionalChangeset,\n): Replace | undefined {\n\tconst firstReplace = change1.valueReplace ?? change2.valueReplace;\n\tif (firstReplace === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst isEmpty = change1.nodeDetach === undefined ? firstReplace.isEmpty : false;\n\tconst replace: Mutable<Replace> = { isEmpty, dst: firstReplace.dst };\n\tif (change2.valueReplace?.src !== undefined) {\n\t\treplace.src = change2.valueReplace.src;\n\t} else if (\n\t\tgetEffectiveDetachId(change2) === undefined &&\n\t\tchange1.valueReplace?.src !== undefined\n\t) {\n\t\treplace.src = change1.valueReplace.src;\n\t}\n\n\treturn replace;\n}\n\n/**\n * Informs the node manager of any child changes in `change2` that may need to be represented somewhere else in the input context of the composed changeset.\n * See {@link ComposeNodeManager.sendNewChangesToBaseSourceLocation} for motivation.\n * @param change1 - The first change to compose. Conceptually applies before `change2`.\n * @param change2 - The second change to compose. Conceptually applies after `change1`.\n * @param nodeManager - The node manager that needs to be informed of the child changes.\n */\nfunction sendNewChildChanges(\n\tchange1: OptionalChangeset,\n\tchange2: OptionalChangeset,\n\tnodeManager: ComposeNodeManager,\n): void {\n\tif (change2.childChange !== undefined && change1.valueReplace?.src !== undefined) {\n\t\t// The presence of new child implies that there is some node present in the field in the input context of change2.\n\t\t// The fact that the change1 has a shallow effect implies that this node was attached by change1.\n\t\tnodeManager.sendNewChangesToBaseSourceLocation(\n\t\t\tchange1.valueReplace.src,\n\t\t\tchange2.childChange,\n\t\t);\n\t}\n}\n\n/**\n * Computes the child changes that should be included in the composed changeset.\n * @param change1 - The first change to compose. Conceptually applies before `change2`.\n * @param change2 - The second change to compose. Conceptually applies after `change1`.\n * @param nodeManager - The node manager. Provides information about potential child changes from `change2`.\n * @param composeChild - The delegate to compose child changes.\n * @returns The composed child changes (if any) for the node (if any) present in the field in the input context of `change1`.\n */\nfunction getComposedChildChanges(\n\tchange1: OptionalChangeset,\n\tchange2: OptionalChangeset,\n\tnodeManager: ComposeNodeManager,\n\tcomposeChild: NodeChangeComposer,\n): NodeId | undefined {\n\tconst detachId1 = getEffectiveDetachId(change1);\n\n\t// We need to determine what the child changes are in change2 for the node (if any) that resides in the field in the input context of change1.\n\tconst childChangesFromChange2: NodeId | undefined =\n\t\t// If such a node did exist, the changes for it in change2 would come from wherever change1 sends that node.\n\t\t// Note: in both branches of this ternary, we are leveraging the fact querying for changes of a non-existent node safely yields undefined\n\t\tdetachId1 === undefined\n\t\t\t? change1.valueReplace?.src === undefined\n\t\t\t\t? change2.childChange\n\t\t\t\t: undefined\n\t\t\t: nodeManager.getNewChangesForBaseDetach(detachId1, 1).value?.nodeChange;\n\n\tlet composedChildChange: NodeId | undefined;\n\tif (change1.childChange !== undefined || childChangesFromChange2 !== undefined) {\n\t\tcomposedChildChange = composeChild(change1.childChange, childChangesFromChange2);\n\t}\n\treturn composedChildChange;\n}\n\nfunction makeChangeset(\n\treplace: Replace | undefined,\n\tnodeDetach: ChangeAtomId | undefined,\n\tchildChange: NodeId | undefined,\n): OptionalChangeset {\n\tconst changeset: Mutable<OptionalChangeset> = {};\n\tif (replace !== undefined) {\n\t\tchangeset.valueReplace = replace;\n\t}\n\n\tif (nodeDetach !== undefined) {\n\t\tchangeset.nodeDetach = nodeDetach;\n\t}\n\n\tif (childChange !== undefined) {\n\t\tchangeset.childChange = childChange;\n\t}\n\treturn changeset;\n}\n\nfunction replaceReplaceRevisions(\n\treplace: Replace | undefined,\n\treplacer: RevisionReplacer,\n): Replace | undefined {\n\tif (replace === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst updated: Mutable<Replace> = {\n\t\t...replace,\n\t\tdst: replacer.getUpdatedAtomId(replace.dst),\n\t};\n\n\tif (replace.src !== undefined) {\n\t\tupdated.src = replacer.getUpdatedAtomId(replace.src);\n\t}\n\n\treturn updated;\n}\n\nfunction getEffectiveDetachId(change: OptionalChangeset): ChangeAtomId | undefined {\n\tif (change.nodeDetach !== undefined) {\n\t\treturn change.nodeDetach;\n\t}\n\n\treturn change.valueReplace?.isEmpty === false ? change.valueReplace.dst : undefined;\n}\n\nexport interface OptionalFieldEditor extends FieldEditor<OptionalChangeset> {\n\t/**\n\t * Creates a change which will replace the content already in the field (if any at the time the change applies)\n\t * with new content.\n\t * The content in the field will be moved to the `ids.detach` register.\n\t * The content in the `ids.detach` register will be moved to into the field.\n\t * @param isEmpty - whether the field is empty when creating this change\n\t * @param ids - the ids associated with the change.\n\t */\n\tset(\n\t\tisEmpty: boolean,\n\t\tids: {\n\t\t\t/** The ID of the node to attach in the field. */\n\t\t\tfill: ChangeAtomId;\n\t\t\t/** The ID to assign to whichever node (if any) is detached from the field when the change applies. */\n\t\t\tdetach: ChangeAtomId;\n\t\t},\n\t): OptionalChangeset;\n\n\t/**\n\t * Creates a change which clears the field's contents (if any).\n\t * @param isEmpty - whether the field is empty when creating this change\n\t * @param detachId - the ID to assign to whichever node (if any) is detached from the field when the change applies.\n\t */\n\tclear(isEmpty: boolean, detachId: ChangeAtomId): OptionalChangeset;\n}\n\nexport const optionalFieldEditor: OptionalFieldEditor = {\n\tset: (\n\t\tisEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangeAtomId;\n\t\t\tdetach: ChangeAtomId;\n\t\t},\n\t): OptionalChangeset => ({\n\t\tvalueReplace: {\n\t\t\tisEmpty,\n\t\t\tsrc: ids.fill,\n\t\t\tdst: ids.detach,\n\t\t},\n\t}),\n\n\tclear: (isEmpty: boolean, detachId: ChangeAtomId): OptionalChangeset => ({\n\t\tvalueReplace: {\n\t\t\tisEmpty,\n\t\t\tdst: detachId,\n\t\t},\n\t}),\n\n\tbuildChildChanges: (changes: Iterable<[number, NodeId]>): OptionalChangeset => {\n\t\tconst childChanges: NodeId[] = Array.from(changes, ([index, child]) => {\n\t\t\tassert(index === 0, 0x404 /* Optional fields only support a single child node */);\n\t\t\treturn child;\n\t\t});\n\t\tassert(\n\t\t\tchildChanges.length <= 1,\n\t\t\t0xabd /* Optional fields only support a single child node */,\n\t\t);\n\n\t\tconst childChange = childChanges[0];\n\t\treturn childChange === undefined ? {} : { childChange };\n\t},\n};\n\nexport function optionalFieldIntoDelta(\n\tchange: OptionalChangeset,\n\tdeltaFromChild: ToDelta,\n): DeltaFieldChanges {\n\treturn optionalOrRequiredFieldIntoDelta(true, change, deltaFromChild);\n}\n\nexport function optionalOrRequiredFieldIntoDelta(\n\tallowReattach: boolean,\n\tchange: OptionalChangeset,\n\tdeltaFromChild: ToDelta,\n): DeltaFieldChanges {\n\tlet markIsANoop = true;\n\tconst mark: Mutable<DeltaMark> = { count: 1 };\n\tconst detachId = getEffectiveDetachId(change);\n\tconst attachId = change.valueReplace?.src;\n\tif (!areEqualChangeAtomIdOpts(detachId, attachId)) {\n\t\tmarkIsANoop = false;\n\n\t\tif (detachId !== undefined) {\n\t\t\tmark.detach = nodeIdFromChangeAtom(detachId);\n\t\t}\n\t\tif (attachId !== undefined) {\n\t\t\tmark.attach = nodeIdFromChangeAtom(attachId);\n\t\t}\n\t}\n\n\tif (change.childChange !== undefined) {\n\t\tmark.fields = deltaFromChild(change.childChange);\n\t\tmarkIsANoop = false;\n\t}\n\n\treturn { marks: markIsANoop ? [] : [mark], allowReattach };\n}\n\nexport const optionalChangeHandler: FieldChangeHandler<\n\tOptionalChangeset,\n\tOptionalFieldEditor\n> = {\n\trebaser: optionalChangeRebaser,\n\tcodecsFactory: makeOptionalFieldCodecFamily,\n\teditor: optionalFieldEditor,\n\n\tintoDelta: optionalFieldIntoDelta,\n\n\tisEmpty: (change: OptionalChangeset) =>\n\t\tchange.childChange === undefined &&\n\t\tchange.valueReplace === undefined &&\n\t\tchange.nodeDetach === undefined,\n\n\tgetNestedChanges,\n\n\tcreateEmpty: () => ({}),\n\tgetCrossFieldKeys,\n\tgetDetachCellIds: (_change) => [],\n};\n\nfunction getCrossFieldKeys(change: OptionalChangeset): CrossFieldKeyRange[] {\n\tconst keys: CrossFieldKeyRange[] = [];\n\tif (change.valueReplace?.src !== undefined) {\n\t\tkeys.push({\n\t\t\tkey: { ...change.valueReplace.src, target: NodeMoveType.Attach },\n\t\t\tcount: 1,\n\t\t});\n\t}\n\n\tconst detachId = getEffectiveDetachId(change);\n\n\tif (detachId !== undefined) {\n\t\tkeys.push({ key: { ...detachId, target: NodeMoveType.Detach }, count: 1 });\n\t}\n\n\treturn keys;\n}\n\nfunction getNestedChanges(change: OptionalChangeset): NestedChangesIndices {\n\tif (change.childChange === undefined) {\n\t\treturn [];\n\t}\n\n\treturn [[change.childChange, 0]];\n}\n\nfunction invertAttachId(\n\tattachId: ChangeAtomId,\n\trevision: RevisionTag | undefined,\n\tisRollback: boolean,\n\tdetachId: ChangeAtomId | undefined,\n): ChangeAtomId {\n\tif (!isRollback) {\n\t\treturn makeChangeAtomId(attachId.localId, revision);\n\t}\n\n\treturn detachId ?? attachId;\n}\n\nfunction isPin(change: OptionalChangeset): boolean {\n\treturn (\n\t\tchange.nodeDetach !== undefined &&\n\t\tareEqualChangeAtomIdOpts(change.nodeDetach, change.valueReplace?.src)\n\t);\n}\n\ninterface Optional\n\textends FlexFieldKind<\n\t\tOptionalFieldEditor,\n\t\ttypeof optionalIdentifier,\n\t\tMultiplicity.Optional\n\t> {}\n\n/**\n * 0 or 1 items.\n */\nexport const optional: Optional = new FlexFieldKind(\n\toptionalIdentifier,\n\tMultiplicity.Optional,\n\t{\n\t\tchangeHandler: optionalChangeHandler,\n\t\tallowMonotonicUpgradeFrom: new Set([\n\t\t\tidentifierFieldIdentifier,\n\t\t\trequiredIdentifier,\n\t\t\tforbiddenFieldKindIdentifier,\n\t\t]),\n\t},\n);\n"]}
1
+ {"version":3,"file":"optionalField.js","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalField.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAA6D;AAE7D,kDAc6B;AAC7B,kDAO6B;AAC7B,oDAAwD;AACxD,wEAIoC;AACpC,yDAcoC;AASpC,qEAAwE;AAYxE,MAAa,WAAW;IAAxB;QACkB,kBAAa,GAAG,IAAI,yBAAc,EAIhD,CAAC;IA8EL,CAAC;IA5EO,KAAK;QACX,MAAM,KAAK,GAAG,IAAI,WAAW,EAAK,CAAC;QACnC,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAEM,GAAG,CAAC,EAAc,EAAE,WAAc;QACxC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC9D,CAAC;IACF,CAAC;IAEM,GAAG,CAAC,EAAc;QACxB,OAAO,EAAE,KAAK,MAAM;YACnB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAEM,GAAG,CAAC,EAAc;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;IACnC,CAAC;IAEM,MAAM,CAAC,EAAc;QAC3B,OAAO,EAAE,KAAK,MAAM;YACnB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAEM,IAAI;QACV,MAAM,SAAS,GAAiB,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gBACxB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACP,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC1C,SAAS,CAAC,IAAI,CACb,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAC5E,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IACM,MAAM;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IACpC,CAAC;IACM,OAAO;QACb,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC3D,IAAA,iBAAM,EACL,KAAK,KAAK,SAAS,EACnB,KAAK,CAAC,wDAAwD,CAC9D,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC7E,IAAA,iBAAM,EACL,KAAK,KAAK,SAAS,EACnB,KAAK,CAAC,wDAAwD,CAC9D,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YACjC,CAAC;QACF,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IAChC,CAAC;CACD;AAnFD,kCAmFC;AAEY,QAAA,qBAAqB,GAA0C;IAC3E,OAAO,EAAE,CACR,OAA0B,EAC1B,OAA0B,EAC1B,YAAgC,EACZ,EAAE;QACtB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;QAClD,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAE9D,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC;QAClD,IAAI,gBAAwC,CAAC;QAC7C,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,eAAe,KAAK,MAAM,EAAE,CAAC;gBAChC,gBAAgB,GAAG,eAAe,IAAI,eAAe,CAAC;YACvD,CAAC;iBAAM,IACN,eAAe,KAAK,SAAS;gBAC7B,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,EACpD,CAAC;gBACF,gBAAgB,GAAG,MAAM,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACP,gBAAgB;oBACf,IAAA,8BAAmB,EAAC,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC;wBAChF,eAAe,CAAC;YAClB,CAAC;QACF,CAAC;aAAM,IAAI,eAAe,KAAK,SAAS,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAChF,gBAAgB,GAAG,eAAe,CAAC;QACpC,CAAC;QAED,MAAM,yBAAyB,GAAG,IAAI,WAAW,EAAU,CAAC;QAC5D,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACjD,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;gBACnB,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;oBACnC,yBAAyB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACP,yBAAyB,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBACxD,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,IAAI,eAAe,KAAK,SAAS,IAAI,IAAA,gCAAqB,EAAC,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC;oBACjF,yBAAyB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACP,MAAM,UAAU,GAAG,IAAA,8BAAmB,EAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;oBAC1E,yBAAyB,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;gBACzD,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,aAAa,GAAW,EAAE,CAAC;QACjC,MAAM,oBAAoB,GAAkB,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAA+B;YAC5C,KAAK,EAAE,aAAa;YACpB,YAAY,EAAE,oBAAoB;SAClC,CAAC;QAEF,KAAK,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvD,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;YAC1E,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,IAAI,yBAAyB,CAAC,OAAO,EAAE,EAAE,CAAC;YACtE,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,IAAA,8BAAmB,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACjF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvC,IAAA,8BAAmB,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBACjE,IAAA,8BAAmB,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC;iBAAM,IACN,eAAe,KAAK,SAAS;gBAC7B,CAAC,IAAA,gCAAqB,EAAC,eAAe,EAAE,OAAO,CAAC,EAC/C,CAAC;gBACF,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACxC,CAAC;QACF,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjD,MAAM,GAAG,GAAG,IAAA,2BAAgB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAChD,IAAI,gBAAgB,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,CAAC;oBACnF,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBAChC,CAAC;YACF,CAAC;QACF,CAAC;QAED,IACC,eAAe,KAAK,SAAS;YAC7B,eAAe,KAAK,MAAM;YAC1B,OAAO,CAAC,YAAY,KAAK,SAAS,EACjC,CAAC;YACF,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;YACjD,IACC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC;gBACxC,CAAC,IAAA,gCAAqB,EAAC,eAAe,EAAE,eAAe,CAAC,EACvD,CAAC;gBACF,aAAa,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;YACxD,CAAC;QACF,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;QACjE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,MAAM,OAAO,GAAqB;YACjC,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,GAAG,EAAE,qBAAqB,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;SACzD,CAAC;QACF,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,GAAG,gBAAgB,CAAC;QAChC,CAAC;QACD,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC;QAChC,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,EAAE,CACP,MAAyB,EACzB,UAAmB,EACnB,KAAoC,EACpC,QAAiC,EACb,EAAE;QACtB,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAErD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAc,CAAC;QAClD,MAAM,aAAa,GAAW,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;YAChC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1B,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;YACnD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAChC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,YAAY,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC;QACF,CAAC;QAED,MAAM,QAAQ,GAA+B;YAC5C,KAAK,EAAE,aAAa;YACpB,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE;gBACpD,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;YACjD,CAAC,CAAC;SACF,CAAC;QAEF,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtC,MAAM,OAAO,GACZ,YAAY,CAAC,GAAG,KAAK,SAAS;oBAC7B,CAAC,CAAC;wBACA,OAAO,EAAE,IAAI;wBACb,GAAG,EAAE,IAAA,2BAAgB,EAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC;qBACjD;oBACF,CAAC,CAAC;wBACA,OAAO,EAAE,KAAK;wBACd,GAAG,EAAE,UAAU;4BACd,CAAC,CAAC,YAAY,CAAC,GAAG;4BAClB,CAAC,CAAC,IAAA,2BAAgB,EAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC;qBAC/C,CAAC;gBACL,IAAI,YAAY,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;oBACpC,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;gBAChC,CAAC;gBACD,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC;YACjC,CAAC;iBAAM,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;gBACvD,QAAQ,CAAC,YAAY,GAAG;oBACvB,OAAO,EAAE,KAAK;oBACd,GAAG,EAAE,MAAM;oBACX,GAAG,EAAE,IAAA,2BAAgB,EAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC;iBACjD,CAAC;YACH,CAAC;QACF,CAAC;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,EAAE,CACP,MAAyB,EACzB,UAA6B,EAC7B,WAA8B,EACV,EAAE;QACtB,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QAE5D,6DAA6D;QAC7D,4CAA4C;QAC5C,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAE1E,MAAM,UAAU,GAAG,IAAI,WAAW,EAAc,CAAC;QACjD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YAC3C,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC9D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAChC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,UAAU,CAAC,YAAY,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC/C,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACrD,CAAC;QACF,CAAC;QAED,MAAM,YAAY,GAAW,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAA,8BAAmB,EAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5E,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,qBAAqB,GAAG,IAAI,WAAW,EAAU,CAAC;QACxD,KAAK,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;YACzD,qBAAqB,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,mBAAmB,GAAkB,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,YAAY,EAAE,CAAC;YAC9C,MAAM,eAAe,GAAG,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBACnC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClC,CAAC;YAED,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,kBAAkB,GAAG,WAAW,CACrC,WAAW,EACX,eAAe,EACf,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,0BAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,0BAAe,CAAC,QAAQ,CAC1E,CAAC;YACF,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACtC,mBAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAC3D,CAAC;QACF,CAAC;QAED,KAAK,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,IAAI,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC;YACrE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,kBAAkB,GAAG,WAAW,CACrC,SAAS,EACT,eAAe,EACf,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,0BAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,0BAAe,CAAC,QAAQ,CAC1E,CAAC;YACF,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACtC,mBAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAC3D,CAAC;QACF,CAAC;QAED,MAAM,OAAO,GAA+B;YAC3C,KAAK,EAAE,YAAY;YACnB,YAAY,EAAE,mBAAmB;SACjC,CAAC;QAEF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,OAAO,GAAqB;gBACjC,OAAO,EACN,UAAU,CAAC,YAAY,KAAK,SAAS;oBACpC,CAAC,CAAC,KAAK,CAAC,OAAO;oBACf,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,KAAK,SAAS;gBAC7C,GAAG,EAAE,KAAK,CAAC,GAAG;aACd,CAAC;YACF,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC;YACtD,CAAC;YACD,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC;QAChC,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,KAAK,EAAE,CAAC,MAAyB,EAAE,UAA4B,EAAqB,EAAE;QACrF,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,MAAM,YAAY,GAA+B;YAChD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY;SACZ,CAAC;QACF,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvC,YAAY,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACjD,CAAC;QAED,KAAK,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACrD,MAAM,iBAAiB,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;YAClD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACrC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAC5C,CAAC;QACF,CAAC;QAED,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,gBAAgB,EAAE,CACjB,MAAyB,EACzB,QAA0B,EACN,EAAE;QACtB,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAE5E,MAAM,YAAY,GAAkB,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACrD,YAAY,CAAC,IAAI,CAAC;gBACjB,wBAAwB,CAAC,EAAE,EAAE,QAAQ,CAAC;gBACtC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC;aACtC,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,OAAO,GAA+B,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACpE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;QACrC,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,IAAI,EAAE,CAAC,MAAyB,EAAqB,EAAE;QACtD,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACzD,CAAC;CACD,CAAC;AAEF,SAAS,uBAAuB,CAC/B,OAA4B,EAC5B,QAA0B;IAE1B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAqB;QACjC,GAAG,OAAO;QACV,GAAG,EAAE,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC;KAC3C,CAAC;IAEF,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,GAAG,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAChC,QAAoB,EACpB,QAA0B;IAE1B,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,qBAAqB,CAC7B,OAA4B,EAC5B,OAA0B;IAE1B,MAAM,IAAI,GAAG,OAAO,EAAE,GAAG,CAAC;IAC1B,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACxC,IAAA,iBAAM,EAAC,IAAI,KAAK,SAAS,EAAE,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACtF,OAAO,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,IACC,IAAI,KAAK,SAAS;QAClB,OAAO,EAAE,GAAG,KAAK,MAAM;QACvB,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,KAAK,SAAS;YACtC,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EACpD,CAAC;QACF,IAAA,iBAAM,EACL,OAAO,CAAC,YAAY,KAAK,SAAS,EAClC,KAAK,CAAC,mDAAmD,CACzD,CAAC;QACF,OAAO,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;IACjC,CAAC;SAAM,CAAC;QACP,OAAO,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;AACF,CAAC;AAED,SAAS,eAAe,CAAC,EAAgB,EAAE,KAAsB;IAChE,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QAChC,IAAI,IAAA,gCAAqB,EAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,GAAG,CAAC;QACZ,CAAC;IACF,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAe,EAAE,GAAe;IAC5D,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,IAAA,gCAAqB,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,sBAAsB,CAC9B,GAA2B,EAC3B,GAA2B;IAE3B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,GAAG,KAAK,GAAG,CAAC;IACpB,CAAC;IACD,OAAO,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAiC;IAI9D,MAAM,QAAQ,GAAkC,IAAI,GAAG,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAkC,IAAI,GAAG,EAAE,CAAC;IAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QAChC,IAAA,yBAAc,EAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzD,IAAA,yBAAc,EAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAcD,SAAS,kBAAkB,CAAC,OAAgB;IAC3C,IAAI,OAAO,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,eAAe,CAAC,OAA4B;IACpD,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,MAAM;QACxE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAChB,CAAC;AAED,SAAgB,cAAc,CAAC,EAAc,EAAE,QAAiC;IAC/E,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,OAAO,IAAA,uBAAY,EAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAND,wCAMC;AA2BY,QAAA,mBAAmB,GAAwB;IACvD,GAAG,EAAE,CACJ,QAAiB,EACjB,GAIC,EACmB,EAAE,CAAC,CAAC;QACxB,KAAK,EAAE,EAAE;QACT,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE;YACb,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,GAAG,CAAC,IAAI;YACb,GAAG,EAAE,GAAG,CAAC,MAAM;SACf;KACD,CAAC;IAEF,KAAK,EAAE,CAAC,QAAiB,EAAE,QAAsB,EAAqB,EAAE,CAAC,CAAC;QACzE,KAAK,EAAE,EAAE;QACT,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE;YACb,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,QAAQ;SACb;KACD,CAAC;IAEF,iBAAiB,EAAE,CAAC,OAAmC,EAAqB,EAAE;QAC7E,MAAM,YAAY,GAAkB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE;YAChF,IAAA,iBAAM,EAAC,KAAK,KAAK,CAAC,EAAE,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAClF,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,IAAA,iBAAM,EACL,YAAY,CAAC,MAAM,IAAI,CAAC,EACxB,KAAK,CAAC,sDAAsD,CAC5D,CAAC;QACF,OAAO;YACN,KAAK,EAAE,EAAE;YACT,YAAY;SACZ,CAAC;IACH,CAAC;CACD,CAAC;AAEF,SAAgB,sBAAsB,CACrC,MAAyB,EACzB,cAAuB;IAEvB,MAAM,KAAK,GAA8B,EAAE,CAAC;IAE5C,IAAI,WAAW,GAAG,IAAI,CAAC;IACvB,MAAM,IAAI,GAAuB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAE9C,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAClF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,IAAA,oCAAoB,EAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,GAAG,IAAA,oCAAoB,EAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD,WAAW,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,IAAA,oCAAoB,EAAC,GAAG,CAAC;YAChC,KAAK,EAAE,IAAA,oCAAoB,EAAC,GAAG,CAAC;SAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAA+B,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;YAC/C,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;gBACzB,WAAW,GAAG,KAAK,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACP,MAAM,MAAM,GAAG,UAAU,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC;oBACZ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE;oBAC7C,MAAM;iBACN,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;QACxB,CAAC;IACF,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QAClB,KAAK,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IACjC,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AArDD,wDAqDC;AAEY,QAAA,qBAAqB,GAG9B;IACH,OAAO,EAAE,6BAAqB;IAC9B,aAAa,EAAE,qDAA4B;IAC3C,MAAM,EAAE,2BAAmB;IAE3B,SAAS,EAAE,sBAAsB;IACjC,oBAAoB;IAEpB,OAAO,EAAE,CAAC,MAAyB,EAAE,EAAE,CACtC,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACzB,MAAM,CAAC,YAAY,KAAK,SAAS;IAElC,gBAAgB;IAEhB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACpD,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;CAClC,CAAC;AAEF,SAAS,gBAAgB,CAAC,MAAyB;IAClD,wDAAwD;IACxD,MAAM,qBAAqB,GAC1B,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,MAAM,CAAC;IAEzE,kDAAkD;IAClD,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC;IAEpD,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE;QACrD,qEAAqE;QACrE,MAAM,UAAU,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,MAAM,WAAW,GAChB,QAAQ,KAAK,MAAM;YAClB,CAAC,CAAC,8GAA8G;gBAC/G,qBAAqB;oBACrB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,uIAAuI;gBACxI,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,CAAC;oBACpD,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,SAAS,CAAC;QACf,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,CAAC,oBAAoB,CAC7B,MAAyB,EACzB,6BAA4D;IAE5D,MAAM,cAAc,GAAG,IAAI,WAAW,EAAW,CAAC;IAElD,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC9B,MAAM,IAAA,oCAAoB,EAAC,GAAG,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;IAED,KAAK,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACrD,yGAAyG;QACzG,kBAAkB;QAClB,IAAI,EAAE,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9C,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7B,MAAM,IAAA,oCAAoB,EAAC,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACjF,MAAM,IAAA,oCAAoB,EAAC,OAAO,CAAC,CAAC;IACrC,CAAC;AACF,CAAC;AASD;;GAEG;AACU,QAAA,QAAQ,GAAa,IAAI,wBAAa,CAClD,4CAAkB,EAClB,uBAAY,CAAC,QAAQ,EACrB;IACC,aAAa,EAAE,6BAAqB;IACpC,yBAAyB,EAAE,IAAI,GAAG,CAAC;QAClC,mDAAyB;QACzB,4CAAkB;QAClB,uCAA4B;KAC5B,CAAC;CACF,CACD,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype ChangeAtomId,\n\ttype ChangeAtomIdMap,\n\ttype ChangesetLocalId,\n\ttype DeltaDetachedNodeChanges,\n\ttype DeltaDetachedNodeId,\n\ttype DeltaMark,\n\tMultiplicity,\n\ttype RevisionReplacer,\n\ttype RevisionTag,\n\tareEqualChangeAtomIds,\n\tforbiddenFieldKindIdentifier,\n\tmakeChangeAtomId,\n\ttaggedAtomId,\n} from \"../../core/index.js\";\nimport {\n\ttype IdAllocator,\n\ttype Mutable,\n\tSizedNestedMap,\n\tdeleteFromNestedMap,\n\tsetInNestedMap,\n\ttryGetFromNestedMap,\n} from \"../../util/index.js\";\nimport { nodeIdFromChangeAtom } from \"../deltaUtils.js\";\nimport {\n\toptionalIdentifier,\n\tidentifierFieldIdentifier,\n\trequiredIdentifier,\n} from \"../fieldKindIdentifiers.js\";\nimport {\n\ttype FieldChangeHandler,\n\ttype FieldChangeRebaser,\n\ttype FieldEditor,\n\ttype NodeChangeComposer,\n\ttype NodeChangePruner,\n\ttype NodeChangeRebaser,\n\tNodeAttachState,\n\ttype NodeId,\n\ttype RelevantRemovedRootsFromChild,\n\ttype ToDelta,\n\ttype NestedChangesIndices,\n\ttype FieldChangeDelta,\n\tFlexFieldKind,\n} from \"../modular-schema/index.js\";\n\nimport type {\n\tChildChange,\n\tMove,\n\tOptionalChangeset,\n\tRegisterId,\n\tReplace,\n} from \"./optionalFieldChangeTypes.js\";\nimport { makeOptionalFieldCodecFamily } from \"./optionalFieldCodecs.js\";\n\nexport interface IRegisterMap<T> {\n\tset(id: RegisterId, childChange: T): void;\n\tget(id: RegisterId): T | undefined;\n\tdelete(id: RegisterId): boolean;\n\tkeys(): Iterable<RegisterId>;\n\tvalues(): Iterable<T>;\n\tentries(): Iterable<[RegisterId, T]>;\n\treadonly size: number;\n}\n\nexport class RegisterMap<T> implements IRegisterMap<T> {\n\tprivate readonly nestedMapData = new SizedNestedMap<\n\t\tChangesetLocalId | \"self\",\n\t\tRevisionTag | undefined,\n\t\tT\n\t>();\n\n\tpublic clone(): RegisterMap<T> {\n\t\tconst clone = new RegisterMap<T>();\n\t\tfor (const [id, t] of this.entries()) {\n\t\t\tclone.set(id, t);\n\t\t}\n\t\treturn clone;\n\t}\n\n\tpublic set(id: RegisterId, childChange: T): void {\n\t\tif (id === \"self\") {\n\t\t\tthis.nestedMapData.set(\"self\", undefined, childChange);\n\t\t} else {\n\t\t\tthis.nestedMapData.set(id.localId, id.revision, childChange);\n\t\t}\n\t}\n\n\tpublic get(id: RegisterId): T | undefined {\n\t\treturn id === \"self\"\n\t\t\t? this.nestedMapData.tryGet(id, undefined)\n\t\t\t: this.nestedMapData.tryGet(id.localId, id.revision);\n\t}\n\n\tpublic has(id: RegisterId): boolean {\n\t\treturn this.get(id) !== undefined;\n\t}\n\n\tpublic delete(id: RegisterId): boolean {\n\t\treturn id === \"self\"\n\t\t\t? this.nestedMapData.delete(\"self\", undefined)\n\t\t\t: this.nestedMapData.delete(id.localId, id.revision);\n\t}\n\n\tpublic keys(): Iterable<RegisterId> {\n\t\tconst changeIds: RegisterId[] = [];\n\t\tfor (const [localId, nestedMap] of this.nestedMapData) {\n\t\t\tif (localId === \"self\") {\n\t\t\t\tchangeIds.push(\"self\");\n\t\t\t} else {\n\t\t\t\tfor (const [revisionTag, _] of nestedMap) {\n\t\t\t\t\tchangeIds.push(\n\t\t\t\t\t\trevisionTag === undefined ? { localId } : { localId, revision: revisionTag },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn changeIds;\n\t}\n\tpublic values(): Iterable<T> {\n\t\treturn this.nestedMapData.values();\n\t}\n\tpublic entries(): Iterable<[RegisterId, T]> {\n\t\tconst entries: [RegisterId, T][] = [];\n\t\tfor (const changeId of this.keys()) {\n\t\t\tif (changeId === \"self\") {\n\t\t\t\tconst entry = this.nestedMapData.tryGet(\"self\", undefined);\n\t\t\t\tassert(\n\t\t\t\t\tentry !== undefined,\n\t\t\t\t\t0x770 /* Entry should not be undefined when iterating keys. */,\n\t\t\t\t);\n\t\t\t\tentries.push([\"self\", entry]);\n\t\t\t} else {\n\t\t\t\tconst entry = this.nestedMapData.tryGet(changeId.localId, changeId.revision);\n\t\t\t\tassert(\n\t\t\t\t\tentry !== undefined,\n\t\t\t\t\t0x771 /* Entry should not be undefined when iterating keys. */,\n\t\t\t\t);\n\t\t\t\tentries.push([changeId, entry]);\n\t\t\t}\n\t\t}\n\n\t\treturn entries;\n\t}\n\tpublic get size(): number {\n\t\treturn this.nestedMapData.size;\n\t}\n}\n\nexport const optionalChangeRebaser: FieldChangeRebaser<OptionalChangeset> = {\n\tcompose: (\n\t\tchange1: OptionalChangeset,\n\t\tchange2: OptionalChangeset,\n\t\tcomposeChild: NodeChangeComposer,\n\t): OptionalChangeset => {\n\t\tconst { srcToDst, dstToSrc } = getBidirectionalMaps(change1.moves);\n\t\tconst change1FieldSrc = change1.valueReplace?.src;\n\t\tconst change1FieldDst = getEffectfulDst(change1.valueReplace);\n\n\t\tconst change2FieldSrc = change2.valueReplace?.src;\n\t\tlet composedFieldSrc: RegisterId | undefined;\n\t\tif (change2FieldSrc !== undefined) {\n\t\t\tif (change2FieldSrc === \"self\") {\n\t\t\t\tcomposedFieldSrc = change1FieldSrc ?? change2FieldSrc;\n\t\t\t} else if (\n\t\t\t\tchange1FieldDst !== undefined &&\n\t\t\t\tareEqualRegisterIds(change1FieldDst, change2FieldSrc)\n\t\t\t) {\n\t\t\t\tcomposedFieldSrc = \"self\";\n\t\t\t} else {\n\t\t\t\tcomposedFieldSrc =\n\t\t\t\t\ttryGetFromNestedMap(dstToSrc, change2FieldSrc.revision, change2FieldSrc.localId) ??\n\t\t\t\t\tchange2FieldSrc;\n\t\t\t}\n\t\t} else if (change1FieldSrc !== undefined && change2.valueReplace === undefined) {\n\t\t\tcomposedFieldSrc = change1FieldSrc;\n\t\t}\n\n\t\tconst childChanges2ByOriginalId = new RegisterMap<NodeId>();\n\t\tfor (const [id, change] of change2.childChanges) {\n\t\t\tif (id === \"self\") {\n\t\t\t\tif (change1FieldSrc === undefined) {\n\t\t\t\t\tchildChanges2ByOriginalId.set(\"self\", change);\n\t\t\t\t} else {\n\t\t\t\t\tchildChanges2ByOriginalId.set(change1FieldSrc, change);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (change1FieldDst !== undefined && areEqualChangeAtomIds(change1FieldDst, id)) {\n\t\t\t\t\tchildChanges2ByOriginalId.set(\"self\", change);\n\t\t\t\t} else {\n\t\t\t\t\tconst originalId = tryGetFromNestedMap(dstToSrc, id.revision, id.localId);\n\t\t\t\t\tchildChanges2ByOriginalId.set(originalId ?? id, change);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst composedMoves: Move[] = [];\n\t\tconst composedChildChanges: ChildChange[] = [];\n\t\tconst composed: Mutable<OptionalChangeset> = {\n\t\t\tmoves: composedMoves,\n\t\t\tchildChanges: composedChildChanges,\n\t\t};\n\n\t\tfor (const [id, childChange1] of change1.childChanges) {\n\t\t\tconst childChange2 = childChanges2ByOriginalId.get(id);\n\t\t\tcomposedChildChanges.push([id, composeChild(childChange1, childChange2)]);\n\t\t\tchildChanges2ByOriginalId.delete(id);\n\t\t}\n\n\t\tfor (const [id, childChange2] of childChanges2ByOriginalId.entries()) {\n\t\t\tcomposedChildChanges.push([id, composeChild(undefined, childChange2)]);\n\t\t}\n\n\t\tfor (const [leg2Src, leg2Dst] of change2.moves) {\n\t\t\tconst leg1Src = tryGetFromNestedMap(dstToSrc, leg2Src.revision, leg2Src.localId);\n\t\t\tif (leg1Src !== undefined) {\n\t\t\t\tcomposedMoves.push([leg1Src, leg2Dst]);\n\t\t\t\tdeleteFromNestedMap(srcToDst, leg1Src.revision, leg1Src.localId);\n\t\t\t\tdeleteFromNestedMap(dstToSrc, leg2Src.revision, leg2Src.localId);\n\t\t\t} else if (\n\t\t\t\tchange1FieldDst === undefined ||\n\t\t\t\t!areEqualChangeAtomIds(change1FieldDst, leg2Src)\n\t\t\t) {\n\t\t\t\tcomposedMoves.push([leg2Src, leg2Dst]);\n\t\t\t}\n\t\t}\n\n\t\tfor (const [revision, innerMap] of srcToDst.entries()) {\n\t\t\tfor (const [localId, dst] of innerMap.entries()) {\n\t\t\t\tconst src = makeChangeAtomId(localId, revision);\n\t\t\t\tif (composedFieldSrc === undefined || !areEqualRegisterIds(src, composedFieldSrc)) {\n\t\t\t\t\tcomposedMoves.push([src, dst]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tchange1FieldSrc !== undefined &&\n\t\t\tchange1FieldSrc !== \"self\" &&\n\t\t\tchange2.valueReplace !== undefined\n\t\t) {\n\t\t\tconst change2FieldDst = change2.valueReplace.dst;\n\t\t\tif (\n\t\t\t\tisReplaceEffectful(change2.valueReplace) &&\n\t\t\t\t!areEqualChangeAtomIds(change1FieldSrc, change2FieldDst)\n\t\t\t) {\n\t\t\t\tcomposedMoves.push([change1FieldSrc, change2FieldDst]);\n\t\t\t}\n\t\t}\n\n\t\tconst firstChange = change1.valueReplace ?? change2.valueReplace;\n\t\tif (firstChange === undefined) {\n\t\t\treturn composed;\n\t\t}\n\n\t\tconst replace: Mutable<Replace> = {\n\t\t\tisEmpty: firstChange.isEmpty,\n\t\t\tdst: getComposedReplaceDst(change1.valueReplace, change2),\n\t\t};\n\t\tif (composedFieldSrc !== undefined) {\n\t\t\treplace.src = composedFieldSrc;\n\t\t}\n\t\tcomposed.valueReplace = replace;\n\t\treturn composed;\n\t},\n\n\tinvert: (\n\t\tchange: OptionalChangeset,\n\t\tisRollback: boolean,\n\t\tgenId: IdAllocator<ChangesetLocalId>,\n\t\trevision: RevisionTag | undefined,\n\t): OptionalChangeset => {\n\t\tconst { moves, childChanges, valueReplace } = change;\n\n\t\tconst invertIdMap = new RegisterMap<RegisterId>();\n\t\tconst invertedMoves: Move[] = [];\n\t\tfor (const [src, dst] of moves) {\n\t\t\tinvertIdMap.set(src, dst);\n\t\t\tinvertedMoves.push([dst, src]);\n\t\t}\n\t\tif (valueReplace !== undefined) {\n\t\t\tconst effectfulDst = getEffectfulDst(valueReplace);\n\t\t\tif (effectfulDst !== undefined) {\n\t\t\t\tinvertIdMap.set(\"self\", valueReplace.dst);\n\t\t\t}\n\t\t\tif (valueReplace.src !== undefined) {\n\t\t\t\tinvertIdMap.set(valueReplace.src, \"self\");\n\t\t\t}\n\t\t}\n\n\t\tconst inverted: Mutable<OptionalChangeset> = {\n\t\t\tmoves: invertedMoves,\n\t\t\tchildChanges: childChanges.map(([id, childChange]) => {\n\t\t\t\treturn [invertIdMap.get(id) ?? id, childChange];\n\t\t\t}),\n\t\t};\n\n\t\tif (valueReplace !== undefined) {\n\t\t\tif (isReplaceEffectful(valueReplace)) {\n\t\t\t\tconst replace: Mutable<Replace> =\n\t\t\t\t\tvalueReplace.src === undefined\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tisEmpty: true,\n\t\t\t\t\t\t\t\tdst: makeChangeAtomId(genId.allocate(), revision),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tisEmpty: false,\n\t\t\t\t\t\t\t\tdst: isRollback\n\t\t\t\t\t\t\t\t\t? valueReplace.src\n\t\t\t\t\t\t\t\t\t: makeChangeAtomId(genId.allocate(), revision),\n\t\t\t\t\t\t\t};\n\t\t\t\tif (valueReplace.isEmpty === false) {\n\t\t\t\t\treplace.src = valueReplace.dst;\n\t\t\t\t}\n\t\t\t\tinverted.valueReplace = replace;\n\t\t\t} else if (!isRollback && valueReplace.src === \"self\") {\n\t\t\t\tinverted.valueReplace = {\n\t\t\t\t\tisEmpty: false,\n\t\t\t\t\tsrc: \"self\",\n\t\t\t\t\tdst: makeChangeAtomId(genId.allocate(), revision),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn inverted;\n\t},\n\n\trebase: (\n\t\tchange: OptionalChangeset,\n\t\toverChange: OptionalChangeset,\n\t\trebaseChild: NodeChangeRebaser,\n\t): OptionalChangeset => {\n\t\tconst { moves, childChanges, valueReplace: field } = change;\n\n\t\t// TODO: avoid computing the dstToSrc map if it's not needed.\n\t\t// TODO: de-dupe overSrcToDst and forwardMap\n\t\tconst { srcToDst: overSrcToDst } = getBidirectionalMaps(overChange.moves);\n\n\t\tconst forwardMap = new RegisterMap<RegisterId>();\n\t\tfor (const [src, dst] of overChange.moves) {\n\t\t\tforwardMap.set(src, dst);\n\t\t}\n\t\tif (overChange.valueReplace !== undefined) {\n\t\t\tconst effectfulDst = getEffectfulDst(overChange.valueReplace);\n\t\t\tif (effectfulDst !== undefined) {\n\t\t\t\tforwardMap.set(\"self\", overChange.valueReplace.dst);\n\t\t\t}\n\t\t\tif (overChange.valueReplace.src !== undefined) {\n\t\t\t\tforwardMap.set(overChange.valueReplace.src, \"self\");\n\t\t\t}\n\t\t}\n\n\t\tconst rebasedMoves: Move[] = [];\n\t\tfor (const [src, dst] of moves) {\n\t\t\tconst newDst = tryGetFromNestedMap(overSrcToDst, src.revision, src.localId);\n\t\t\trebasedMoves.push([src, newDst ?? dst]);\n\t\t}\n\n\t\tconst overChildChangesBySrc = new RegisterMap<NodeId>();\n\t\tfor (const [id, childChange] of overChange.childChanges) {\n\t\t\toverChildChangesBySrc.set(id, childChange);\n\t\t}\n\n\t\tconst rebasedChildChanges: ChildChange[] = [];\n\t\tfor (const [id, childChange] of childChanges) {\n\t\t\tconst overChildChange = overChildChangesBySrc.get(id);\n\t\t\tif (overChildChange !== undefined) {\n\t\t\t\toverChildChangesBySrc.delete(id);\n\t\t\t}\n\n\t\t\tconst rebasedId = forwardMap.get(id) ?? id;\n\t\t\tconst rebasedChildChange = rebaseChild(\n\t\t\t\tchildChange,\n\t\t\t\toverChildChange,\n\t\t\t\trebasedId === \"self\" ? NodeAttachState.Attached : NodeAttachState.Detached,\n\t\t\t);\n\t\t\tif (rebasedChildChange !== undefined) {\n\t\t\t\trebasedChildChanges.push([rebasedId, rebasedChildChange]);\n\t\t\t}\n\t\t}\n\n\t\tfor (const [id, overChildChange] of overChildChangesBySrc.entries()) {\n\t\t\tconst rebasedId = forwardMap.get(id) ?? id;\n\t\t\tconst rebasedChildChange = rebaseChild(\n\t\t\t\tundefined,\n\t\t\t\toverChildChange,\n\t\t\t\trebasedId === \"self\" ? NodeAttachState.Attached : NodeAttachState.Detached,\n\t\t\t);\n\t\t\tif (rebasedChildChange !== undefined) {\n\t\t\t\trebasedChildChanges.push([rebasedId, rebasedChildChange]);\n\t\t\t}\n\t\t}\n\n\t\tconst rebased: Mutable<OptionalChangeset> = {\n\t\t\tmoves: rebasedMoves,\n\t\t\tchildChanges: rebasedChildChanges,\n\t\t};\n\n\t\tif (field !== undefined) {\n\t\t\tconst replace: Mutable<Replace> = {\n\t\t\t\tisEmpty:\n\t\t\t\t\toverChange.valueReplace === undefined\n\t\t\t\t\t\t? field.isEmpty\n\t\t\t\t\t\t: overChange.valueReplace.src === undefined,\n\t\t\t\tdst: field.dst,\n\t\t\t};\n\t\t\tif (field.src !== undefined) {\n\t\t\t\treplace.src = forwardMap.get(field.src) ?? field.src;\n\t\t\t}\n\t\t\trebased.valueReplace = replace;\n\t\t}\n\n\t\treturn rebased;\n\t},\n\n\tprune: (change: OptionalChangeset, pruneChild: NodeChangePruner): OptionalChangeset => {\n\t\tconst childChanges: ChildChange[] = [];\n\t\tconst prunedChange: Mutable<OptionalChangeset> = {\n\t\t\tmoves: change.moves,\n\t\t\tchildChanges,\n\t\t};\n\t\tif (change.valueReplace !== undefined) {\n\t\t\tprunedChange.valueReplace = change.valueReplace;\n\t\t}\n\n\t\tfor (const [id, childChange] of change.childChanges) {\n\t\t\tconst prunedChildChange = pruneChild(childChange);\n\t\t\tif (prunedChildChange !== undefined) {\n\t\t\t\tchildChanges.push([id, prunedChildChange]);\n\t\t\t}\n\t\t}\n\n\t\treturn prunedChange;\n\t},\n\n\treplaceRevisions: (\n\t\tchange: OptionalChangeset,\n\t\treplacer: RevisionReplacer,\n\t): OptionalChangeset => {\n\t\tconst valueReplace = replaceReplaceRevisions(change.valueReplace, replacer);\n\n\t\tconst childChanges: ChildChange[] = [];\n\t\tfor (const [id, childChange] of change.childChanges) {\n\t\t\tchildChanges.push([\n\t\t\t\treplaceRegisterRevisions(id, replacer),\n\t\t\t\treplacer.getUpdatedAtomId(childChange),\n\t\t\t]);\n\t\t}\n\n\t\tconst moves: Move[] = [];\n\t\tfor (const [src, dst] of change.moves) {\n\t\t\tmoves.push([replacer.getUpdatedAtomId(src), replacer.getUpdatedAtomId(dst)]);\n\t\t}\n\n\t\tconst updated: Mutable<OptionalChangeset> = { childChanges, moves };\n\t\tif (valueReplace !== undefined) {\n\t\t\tupdated.valueReplace = valueReplace;\n\t\t}\n\n\t\treturn updated;\n\t},\n\n\tmute: (change: OptionalChangeset): OptionalChangeset => {\n\t\treturn { childChanges: change.childChanges, moves: [] };\n\t},\n};\n\nfunction replaceReplaceRevisions(\n\treplace: Replace | undefined,\n\treplacer: RevisionReplacer,\n): Replace | undefined {\n\tif (replace === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst updated: Mutable<Replace> = {\n\t\t...replace,\n\t\tdst: replacer.getUpdatedAtomId(replace.dst),\n\t};\n\n\tif (replace.src !== undefined) {\n\t\tupdated.src = replaceRegisterRevisions(replace.src, replacer);\n\t}\n\n\treturn updated;\n}\n\nfunction replaceRegisterRevisions(\n\tregister: RegisterId,\n\treplacer: RevisionReplacer,\n): RegisterId {\n\treturn register === \"self\" ? register : replacer.getUpdatedAtomId(register);\n}\n\nfunction getComposedReplaceDst(\n\tchange1: Replace | undefined,\n\tchange2: OptionalChangeset,\n): ChangeAtomId {\n\tconst dst1 = change1?.dst;\n\tif (change2.valueReplace === undefined) {\n\t\tassert(dst1 !== undefined, 0x8ce /* Both replace replaces should not be undefined */);\n\t\treturn getIdAfterMoves(dst1, change2.moves);\n\t}\n\n\tif (\n\t\tdst1 === undefined ||\n\t\tchange1?.src === \"self\" ||\n\t\t(change2.valueReplace.src !== undefined &&\n\t\t\tareEqualRegisterIds(change2.valueReplace.src, dst1))\n\t) {\n\t\tassert(\n\t\t\tchange2.valueReplace !== undefined,\n\t\t\t0x8cf /* Both replace replaces should not be undefined */,\n\t\t);\n\t\treturn change2.valueReplace.dst;\n\t} else {\n\t\treturn getIdAfterMoves(dst1, change2.moves);\n\t}\n}\n\nfunction getIdAfterMoves(id: ChangeAtomId, moves: readonly Move[]): ChangeAtomId {\n\tfor (const [src, dst] of moves) {\n\t\tif (areEqualChangeAtomIds(id, src)) {\n\t\t\treturn dst;\n\t\t}\n\t}\n\treturn id;\n}\n\nfunction areEqualRegisterIds(id1: RegisterId, id2: RegisterId): boolean {\n\treturn id1 === \"self\" || id2 === \"self\" ? id1 === id2 : areEqualChangeAtomIds(id1, id2);\n}\n\nfunction areEqualRegisterIdsOpt(\n\tid1: RegisterId | undefined,\n\tid2: RegisterId | undefined,\n): boolean {\n\tif (id1 === undefined || id2 === undefined) {\n\t\treturn id1 === id2;\n\t}\n\treturn areEqualRegisterIds(id1, id2);\n}\n\nfunction getBidirectionalMaps(moves: OptionalChangeset[\"moves\"]): {\n\tsrcToDst: ChangeAtomIdMap<ChangeAtomId>;\n\tdstToSrc: ChangeAtomIdMap<ChangeAtomId>;\n} {\n\tconst srcToDst: ChangeAtomIdMap<ChangeAtomId> = new Map();\n\tconst dstToSrc: ChangeAtomIdMap<ChangeAtomId> = new Map();\n\tfor (const [src, dst] of moves) {\n\t\tsetInNestedMap(srcToDst, src.revision, src.localId, dst);\n\t\tsetInNestedMap(dstToSrc, dst.revision, dst.localId, src);\n\t}\n\treturn { srcToDst, dstToSrc };\n}\n\ntype EffectfulReplace =\n\t| {\n\t\t\tisEmpty: true;\n\t\t\tsrc?: ChangeAtomId;\n\t\t\tdst: ChangeAtomId;\n\t }\n\t| {\n\t\t\tisEmpty: boolean;\n\t\t\tsrc: ChangeAtomId;\n\t\t\tdst: ChangeAtomId;\n\t };\n\nfunction isReplaceEffectful(replace: Replace): replace is EffectfulReplace {\n\tif (replace.src === \"self\") {\n\t\treturn false;\n\t}\n\treturn !replace.isEmpty || replace.src !== undefined;\n}\n\nfunction getEffectfulDst(replace: Replace | undefined): ChangeAtomId | undefined {\n\treturn replace === undefined || replace.isEmpty || replace.src === \"self\"\n\t\t? undefined\n\t\t: replace.dst;\n}\n\nexport function taggedRegister(id: RegisterId, revision: RevisionTag | undefined): RegisterId {\n\tif (id === \"self\") {\n\t\treturn id;\n\t}\n\n\treturn taggedAtomId(id, revision);\n}\n\nexport interface OptionalFieldEditor extends FieldEditor<OptionalChangeset> {\n\t/**\n\t * Creates a change which will replace the content already in the field (if any at the time the change applies)\n\t * with new content.\n\t * The content in the field will be moved to the `ids.detach` register.\n\t * The content in the `ids.detach` register will be moved to into the field.\n\t * @param wasEmpty - whether the field is empty when creating this change\n\t * @param ids - the \"fill\" and \"detach\" ids associated with the change.\n\t */\n\tset(\n\t\twasEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangeAtomId;\n\t\t\tdetach: ChangeAtomId;\n\t\t},\n\t): OptionalChangeset;\n\n\t/**\n\t * Creates a change which clears the field's contents (if any).\n\t * @param wasEmpty - whether the field is empty when creating this change\n\t * @param detachId - the ID of the register that existing field content (if any) will be moved to.\n\t */\n\tclear(wasEmpty: boolean, detachId: ChangeAtomId): OptionalChangeset;\n}\n\nexport const optionalFieldEditor: OptionalFieldEditor = {\n\tset: (\n\t\twasEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangeAtomId;\n\t\t\t// Should be interpreted as a set of an empty field if undefined.\n\t\t\tdetach: ChangeAtomId;\n\t\t},\n\t): OptionalChangeset => ({\n\t\tmoves: [],\n\t\tchildChanges: [],\n\t\tvalueReplace: {\n\t\t\tisEmpty: wasEmpty,\n\t\t\tsrc: ids.fill,\n\t\t\tdst: ids.detach,\n\t\t},\n\t}),\n\n\tclear: (wasEmpty: boolean, detachId: ChangeAtomId): OptionalChangeset => ({\n\t\tmoves: [],\n\t\tchildChanges: [],\n\t\tvalueReplace: {\n\t\t\tisEmpty: wasEmpty,\n\t\t\tdst: detachId,\n\t\t},\n\t}),\n\n\tbuildChildChanges: (changes: Iterable<[number, NodeId]>): OptionalChangeset => {\n\t\tconst childChanges: ChildChange[] = Array.from(changes, ([index, childChange]) => {\n\t\t\tassert(index === 0, 0x404 /* Optional fields only support a single child node */);\n\t\t\treturn [\"self\", childChange];\n\t\t});\n\t\tassert(\n\t\t\tchildChanges.length <= 1,\n\t\t\t0xabd /* Optional fields only support a single child node */,\n\t\t);\n\t\treturn {\n\t\t\tmoves: [],\n\t\t\tchildChanges,\n\t\t};\n\t},\n};\n\nexport function optionalFieldIntoDelta(\n\tchange: OptionalChangeset,\n\tdeltaFromChild: ToDelta,\n): FieldChangeDelta {\n\tconst delta: Mutable<FieldChangeDelta> = {};\n\n\tlet markIsANoop = true;\n\tconst mark: Mutable<DeltaMark> = { count: 1 };\n\n\tif (change.valueReplace !== undefined && isReplaceEffectful(change.valueReplace)) {\n\t\tif (!change.valueReplace.isEmpty) {\n\t\t\tmark.detach = nodeIdFromChangeAtom(change.valueReplace.dst);\n\t\t}\n\t\tif (change.valueReplace.src !== undefined) {\n\t\t\tmark.attach = nodeIdFromChangeAtom(change.valueReplace.src);\n\t\t}\n\t\tmarkIsANoop = false;\n\t}\n\n\tif (change.moves.length > 0) {\n\t\tdelta.rename = change.moves.map(([src, dst]) => ({\n\t\t\tcount: 1,\n\t\t\toldId: nodeIdFromChangeAtom(src),\n\t\t\tnewId: nodeIdFromChangeAtom(dst),\n\t\t}));\n\t}\n\n\tif (change.childChanges.length > 0) {\n\t\tconst globals: DeltaDetachedNodeChanges[] = [];\n\t\tfor (const [id, childChange] of change.childChanges) {\n\t\t\tconst childDelta = deltaFromChild(childChange);\n\t\t\tif (id === \"self\") {\n\t\t\t\tmark.fields = childDelta;\n\t\t\t\tmarkIsANoop = false;\n\t\t\t} else {\n\t\t\t\tconst fields = childDelta;\n\t\t\t\tglobals.push({\n\t\t\t\t\tid: { major: id.revision, minor: id.localId },\n\t\t\t\t\tfields,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (globals.length > 0) {\n\t\t\tdelta.global = globals;\n\t\t}\n\t}\n\n\tif (!markIsANoop) {\n\t\tdelta.local = { marks: [mark] };\n\t}\n\n\treturn delta;\n}\n\nexport const optionalChangeHandler: FieldChangeHandler<\n\tOptionalChangeset,\n\tOptionalFieldEditor\n> = {\n\trebaser: optionalChangeRebaser,\n\tcodecsFactory: makeOptionalFieldCodecFamily,\n\teditor: optionalFieldEditor,\n\n\tintoDelta: optionalFieldIntoDelta,\n\trelevantRemovedRoots,\n\n\tisEmpty: (change: OptionalChangeset) =>\n\t\tchange.childChanges.length === 0 &&\n\t\tchange.moves.length === 0 &&\n\t\tchange.valueReplace === undefined,\n\n\tgetNestedChanges,\n\n\tcreateEmpty: () => ({ moves: [], childChanges: [] }),\n\tgetCrossFieldKeys: (_change) => [],\n};\n\nfunction getNestedChanges(change: OptionalChangeset): NestedChangesIndices {\n\t// True iff the content of the field changes in some way\n\tconst isFieldContentChanged =\n\t\tchange.valueReplace !== undefined && change.valueReplace.src !== \"self\";\n\n\t// The node that is moved into the field (if any).\n\tconst nodeMovedIntoField = change.valueReplace?.src;\n\n\treturn change.childChanges.map(([register, nodeId]) => {\n\t\t// The node is removed in the input context iif register is not self.\n\t\tconst inputIndex = register === \"self\" ? 0 : undefined;\n\t\tconst outputIndex =\n\t\t\tregister === \"self\"\n\t\t\t\t? // If the node starts out as not-removed, it is removed in the output context iff the field content is changed\n\t\t\t\t\tisFieldContentChanged\n\t\t\t\t\t? undefined\n\t\t\t\t\t: 0\n\t\t\t\t: // If the node starts out as removed, then it remains removed in the output context iff it is not the node that is moved into the field\n\t\t\t\t\tareEqualRegisterIdsOpt(register, nodeMovedIntoField)\n\t\t\t\t\t? 0\n\t\t\t\t\t: undefined;\n\t\treturn [nodeId, inputIndex, outputIndex];\n\t});\n}\n\nfunction* relevantRemovedRoots(\n\tchange: OptionalChangeset,\n\trelevantRemovedRootsFromChild: RelevantRemovedRootsFromChild,\n): Iterable<DeltaDetachedNodeId> {\n\tconst alreadyYielded = new RegisterMap<boolean>();\n\n\tfor (const [src] of change.moves) {\n\t\tif (!alreadyYielded.has(src)) {\n\t\t\talreadyYielded.set(src, true);\n\t\t\tyield nodeIdFromChangeAtom(src);\n\t\t}\n\t}\n\n\tfor (const [id, childChange] of change.childChanges) {\n\t\t// Child changes make the tree they apply to relevant unless that tree existed in the starting context of\n\t\t// of this change.\n\t\tif (id !== \"self\" && !alreadyYielded.has(id)) {\n\t\t\talreadyYielded.set(id, true);\n\t\t\tyield nodeIdFromChangeAtom(id);\n\t\t}\n\t\tyield* relevantRemovedRootsFromChild(childChange);\n\t}\n\n\tconst selfSrc = change.valueReplace?.src;\n\tif (selfSrc !== undefined && selfSrc !== \"self\" && !alreadyYielded.has(selfSrc)) {\n\t\tyield nodeIdFromChangeAtom(selfSrc);\n\t}\n}\n\ninterface Optional\n\textends FlexFieldKind<\n\t\tOptionalFieldEditor,\n\t\ttypeof optionalIdentifier,\n\t\tMultiplicity.Optional\n\t> {}\n\n/**\n * 0 or 1 items.\n */\nexport const optional: Optional = new FlexFieldKind(\n\toptionalIdentifier,\n\tMultiplicity.Optional,\n\t{\n\t\tchangeHandler: optionalChangeHandler,\n\t\tallowMonotonicUpgradeFrom: new Set([\n\t\t\tidentifierFieldIdentifier,\n\t\t\trequiredIdentifier,\n\t\t\tforbiddenFieldKindIdentifier,\n\t\t]),\n\t},\n);\n"]}
@@ -4,28 +4,43 @@
4
4
  */
5
5
  import type { ChangeAtomId } from "../../core/index.js";
6
6
  import type { NodeId } from "../modular-schema/index.js";
7
+ /**
8
+ * Uniquely identifies a register within the scope of this changeset.
9
+ * The sentinel value "self" is used for the active register, which is a universally shared register
10
+ * (as in, any changeset referring to "self" refers to the register containing the active value of the field).
11
+ *
12
+ * See the model description in {@link OptionalChangeset} for more details.
13
+ */
14
+ export type RegisterId = ChangeAtomId | "self";
15
+ export type Move = readonly [src: ChangeAtomId, dst: ChangeAtomId];
16
+ export type ChildChange = readonly [register: RegisterId, childChange: NodeId];
7
17
  /**
8
18
  * Changes to an optional field.
9
19
  *
10
- * The model used is that optional field consists of a single register.
11
- * In a given change input or output context, this register may hold 0 or 1 nodes.
20
+ * The model used is that optional field consists of a collection of "registers" with one designated as the "active" register.
21
+ * In a given change input or output context, registers may hold 0 or 1 nodes.
22
+ * Each register is identified using a {@link RegisterId}.
23
+ * The active register holds the current value of the field, and other registers hold detached roots.
12
24
  */
13
25
  export interface OptionalChangeset {
14
26
  /**
15
- * An optional description of how to replace the current value of the field.
27
+ * Each entry signifies the intent to move a node from `src` to `dst`.
28
+ * Moves to or from the "self" register are represented in {@link valueReplace}.
29
+ *
30
+ * These entries should not be interpreted as "applied one after the other", but rather as "applied simultaneously".
31
+ * As such, changesets should not contain duplicated src or dst entries.
16
32
  */
17
- readonly valueReplace?: Replace;
33
+ readonly moves: readonly Move[];
18
34
  /**
19
- * If defined, this represents an intention to detach the node current in this field, using `nodeDetach` as the detach ID.
20
- * If this node is moved elsewhere, this detach will follow it to the new location.
21
- * This detach will be applied before any detach in `valueReplace`.
22
- * This should be undefined if this field is empty in the input context of this changeset.
35
+ * Nested changes to nodes that occupy registers.
36
+ *
37
+ * Nodes are identified by the register they occupy in the *input* context of the changeset.
23
38
  */
24
- readonly nodeDetach?: ChangeAtomId;
39
+ readonly childChanges: readonly ChildChange[];
25
40
  /**
26
- * The ID of the node changeset for the node which is in this field in the input context of this changeset.
41
+ * An optional description of how to replace the current value of the field.
27
42
  */
28
- readonly childChange?: NodeId;
43
+ readonly valueReplace?: Replace;
29
44
  }
30
45
  export interface Replace {
31
46
  /**
@@ -33,28 +48,13 @@ export interface Replace {
33
48
  */
34
49
  readonly isEmpty: boolean;
35
50
  /**
36
- * An ID to associate with the node (if any) which is detached by this edit.
37
- *
38
- * When the field is empty in the input context, this ID is dormant in the sense that it would not be used if the changeset were applied as is.
39
- * However, it can become active if the changeset is rebased over a change that attaches a node in the field.
51
+ * The ID for the node to put in this field, or undefined if the field should be emptied.
52
+ * Will be "self" when the intention is to keep the current node in this field.
40
53
  */
41
- readonly dst: ChangeAtomId;
54
+ readonly src?: RegisterId;
42
55
  /**
43
- * The ID for the node to attach in this field, or undefined if no node should be attached.
44
- *
45
- * Note that this ID may refer to the node detached by this changeset:
46
- * The node in the field is detached and associated with ID `dst`,
47
- * then that node is renamed from `dst` to `src` (at the ModularChangeset level),
48
- * then that node is attached back into the field.
49
- * When this is the case, we say that the node is being pinned in the field.
50
- * While a pin has no effect on the document state if applied as-is, its merge semantics are different from an empty changeset.
51
- * This is because rebasing a pin over a change that detaches the node from the field will result in a changeset that re-attaches the node to the field.
52
- * In other words, a pin guarantees that the node will be in the field after the changeset is rebased and applied, whereas an empty changeset does not.
53
- *
54
- * `src` must be structurally different from `dst` even when the changeset is a pin.
55
- * An optional field changeset that aims to attach a node must be able to affect two nodes,
56
- * so unless we want to mint new IDs during rebasing, such a changeset must have two different IDs.
56
+ * An ID to associate with the node (if any) which is detached by this edit.
57
57
  */
58
- readonly src?: ChangeAtomId;
58
+ readonly dst: ChangeAtomId;
59
59
  }
60
60
  //# sourceMappingURL=optionalFieldChangeTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"optionalFieldChangeTypes.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldChangeTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC;IACnC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,OAAO;IACvB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAE3B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC;CAC5B"}
1
+ {"version":3,"file":"optionalFieldChangeTypes.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldChangeTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAE/C,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;AAEnE,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAE/E;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAEhC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IAE9C;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,OAAO;IACvB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"optionalFieldChangeTypes.js","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldChangeTypes.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { ChangeAtomId } from \"../../core/index.js\";\nimport type { NodeId } from \"../modular-schema/index.js\";\n\n/**\n * Changes to an optional field.\n *\n * The model used is that optional field consists of a single register.\n * In a given change input or output context, this register may hold 0 or 1 nodes.\n */\nexport interface OptionalChangeset {\n\t/**\n\t * An optional description of how to replace the current value of the field.\n\t */\n\treadonly valueReplace?: Replace;\n\n\t/**\n\t * If defined, this represents an intention to detach the node current in this field, using `nodeDetach` as the detach ID.\n\t * If this node is moved elsewhere, this detach will follow it to the new location.\n\t * This detach will be applied before any detach in `valueReplace`.\n\t * This should be undefined if this field is empty in the input context of this changeset.\n\t */\n\treadonly nodeDetach?: ChangeAtomId;\n\t/**\n\t * The ID of the node changeset for the node which is in this field in the input context of this changeset.\n\t */\n\treadonly childChange?: NodeId;\n}\n\nexport interface Replace {\n\t/**\n\t * Whether the field is empty in the input context of this change.\n\t */\n\treadonly isEmpty: boolean;\n\n\t/**\n\t * An ID to associate with the node (if any) which is detached by this edit.\n\t *\n\t * When the field is empty in the input context, this ID is dormant in the sense that it would not be used if the changeset were applied as is.\n\t * However, it can become active if the changeset is rebased over a change that attaches a node in the field.\n\t */\n\treadonly dst: ChangeAtomId;\n\n\t/**\n\t * The ID for the node to attach in this field, or undefined if no node should be attached.\n\t *\n\t * Note that this ID may refer to the node detached by this changeset:\n\t * The node in the field is detached and associated with ID `dst`,\n\t * then that node is renamed from `dst` to `src` (at the ModularChangeset level),\n\t * then that node is attached back into the field.\n\t * When this is the case, we say that the node is being pinned in the field.\n\t * While a pin has no effect on the document state if applied as-is, its merge semantics are different from an empty changeset.\n\t * This is because rebasing a pin over a change that detaches the node from the field will result in a changeset that re-attaches the node to the field.\n\t * In other words, a pin guarantees that the node will be in the field after the changeset is rebased and applied, whereas an empty changeset does not.\n\t *\n\t * `src` must be structurally different from `dst` even when the changeset is a pin.\n\t * An optional field changeset that aims to attach a node must be able to affect two nodes,\n\t * so unless we want to mint new IDs during rebasing, such a changeset must have two different IDs.\n\t */\n\treadonly src?: ChangeAtomId;\n}\n"]}
1
+ {"version":3,"file":"optionalFieldChangeTypes.js","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldChangeTypes.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { ChangeAtomId } from \"../../core/index.js\";\nimport type { NodeId } from \"../modular-schema/index.js\";\n\n/**\n * Uniquely identifies a register within the scope of this changeset.\n * The sentinel value \"self\" is used for the active register, which is a universally shared register\n * (as in, any changeset referring to \"self\" refers to the register containing the active value of the field).\n *\n * See the model description in {@link OptionalChangeset} for more details.\n */\nexport type RegisterId = ChangeAtomId | \"self\";\n\nexport type Move = readonly [src: ChangeAtomId, dst: ChangeAtomId];\n\nexport type ChildChange = readonly [register: RegisterId, childChange: NodeId];\n\n/**\n * Changes to an optional field.\n *\n * The model used is that optional field consists of a collection of \"registers\" with one designated as the \"active\" register.\n * In a given change input or output context, registers may hold 0 or 1 nodes.\n * Each register is identified using a {@link RegisterId}.\n * The active register holds the current value of the field, and other registers hold detached roots.\n */\nexport interface OptionalChangeset {\n\t/**\n\t * Each entry signifies the intent to move a node from `src` to `dst`.\n\t * Moves to or from the \"self\" register are represented in {@link valueReplace}.\n\t *\n\t * These entries should not be interpreted as \"applied one after the other\", but rather as \"applied simultaneously\".\n\t * As such, changesets should not contain duplicated src or dst entries.\n\t */\n\treadonly moves: readonly Move[];\n\n\t/**\n\t * Nested changes to nodes that occupy registers.\n\t *\n\t * Nodes are identified by the register they occupy in the *input* context of the changeset.\n\t */\n\treadonly childChanges: readonly ChildChange[];\n\n\t/**\n\t * An optional description of how to replace the current value of the field.\n\t */\n\treadonly valueReplace?: Replace;\n}\n\nexport interface Replace {\n\t/**\n\t * Whether the field is empty in the input context of this change.\n\t */\n\treadonly isEmpty: boolean;\n\n\t/**\n\t * The ID for the node to put in this field, or undefined if the field should be emptied.\n\t * Will be \"self\" when the intention is to keep the current node in this field.\n\t */\n\treadonly src?: RegisterId;\n\n\t/**\n\t * An ID to associate with the node (if any) which is detached by this edit.\n\t */\n\treadonly dst: ChangeAtomId;\n}\n"]}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import type { TAnySchema } from "@sinclair/typebox";
6
6
  import type { IJsonCodec } from "../../codec/index.js";
7
- import { type ChangeEncodingContext, type EncodedRevisionTag, type RevisionTag } from "../../core/index.js";
7
+ import type { ChangeEncodingContext, EncodedRevisionTag, RevisionTag } from "../../core/index.js";
8
8
  import { type FieldChangeEncodingContext } from "../modular-schema/index.js";
9
9
  import { EncodedOptionalChangeset } from "./optionalFieldChangeFormatV2.js";
10
10
  import type { OptionalChangeset } from "./optionalFieldChangeTypes.js";
@@ -1 +1 @@
1
- {"version":3,"file":"optionalFieldCodecV2.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldCodecV2.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAGN,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAGN,KAAK,0BAA0B,EAC/B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,wBAAwB,EAAqB,MAAM,kCAAkC,CAAC;AAC/F,OAAO,KAAK,EAAE,iBAAiB,EAAW,MAAM,+BAA+B,CAAC;AA6BhF,wBAAgB,sBAAsB,CACrC,gBAAgB,EAAE,UAAU,CAC3B,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,GACC,UAAU,CACZ,iBAAiB,EACjB,wBAAwB,CAAC,UAAU,CAAC,EACpC,wBAAwB,CAAC,UAAU,CAAC,EACpC,0BAA0B,CAC1B,CAuHA"}
1
+ {"version":3,"file":"optionalFieldCodecV2.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldCodecV2.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAEX,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAGN,KAAK,0BAA0B,EAC/B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,wBAAwB,EAAqB,MAAM,kCAAkC,CAAC;AAC/F,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,+BAA+B,CAAC;AA2B5F,wBAAgB,sBAAsB,CACrC,gBAAgB,EAAE,UAAU,CAC3B,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,GACC,UAAU,CACZ,iBAAiB,EACjB,wBAAwB,CAAC,UAAU,CAAC,EACpC,wBAAwB,CAAC,UAAU,CAAC,EACpC,0BAA0B,CAC1B,CAqEA"}
@@ -5,10 +5,8 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.makeOptionalFieldCodec = void 0;
8
- const internal_1 = require("@fluidframework/core-utils/internal");
9
- const index_js_1 = require("../../core/index.js");
10
8
  const changeAtomIdCodec_js_1 = require("../changeAtomIdCodec.js");
11
- const index_js_2 = require("../modular-schema/index.js");
9
+ const index_js_1 = require("../modular-schema/index.js");
12
10
  const optionalFieldChangeFormatV2_js_1 = require("./optionalFieldChangeFormatV2.js");
13
11
  function makeRegisterIdCodec(changeAtomIdCodec) {
14
12
  return {
@@ -32,84 +30,57 @@ function makeOptionalFieldCodec(revisionTagCodec) {
32
30
  const registerIdCodec = makeRegisterIdCodec(changeAtomIdCodec);
33
31
  return {
34
32
  encode: (change, context) => {
35
- (0, internal_1.assert)(change.nodeDetach === undefined ||
36
- (0, index_js_1.areEqualChangeAtomIdOpts)(change.valueReplace?.src, change.nodeDetach), "This format only supports node detach when it represents a pin");
37
33
  const encoded = {};
34
+ if (change.moves.length > 0) {
35
+ encoded.m = change.moves.map(([src, dst]) => [
36
+ changeAtomIdCodec.encode(src, context.baseContext),
37
+ changeAtomIdCodec.encode(dst, context.baseContext),
38
+ ]);
39
+ }
38
40
  if (change.valueReplace !== undefined) {
39
41
  encoded.r = {
40
42
  e: change.valueReplace.isEmpty,
41
43
  d: changeAtomIdCodec.encode(change.valueReplace.dst, context.baseContext),
42
44
  };
43
45
  if (change.valueReplace.src !== undefined) {
44
- const srcRegister = change.nodeDetach === undefined ? change.valueReplace.src : "self";
45
- encoded.r.s = registerIdCodec.encode(srcRegister, context.baseContext);
46
+ encoded.r.s = registerIdCodec.encode(change.valueReplace.src, context.baseContext);
46
47
  }
47
48
  }
48
- const encodedChildChanges = [];
49
- if (change.childChange !== undefined) {
50
- encodedChildChanges.push([null, context.encodeNode(change.childChange)]);
51
- }
52
- for (const [detachId, nodeId] of context.rootNodeChanges.entries()) {
53
- encodedChildChanges.push([
54
- changeAtomIdCodec.encode({ revision: detachId[0], localId: detachId[1] }, context.baseContext),
55
- context.encodeNode(nodeId),
56
- ]);
57
- }
58
- if (encodedChildChanges.length > 0) {
59
- encoded.c = encodedChildChanges;
60
- }
61
- const encodedMoves = [];
62
- for (const { start: oldId, value: newId, length: count, } of context.rootRenames.entries()) {
63
- (0, internal_1.assert)(count === 1, "Unexpected range rename in optional field");
64
- encodedMoves.push([
65
- changeAtomIdCodec.encode(oldId, context.baseContext),
66
- changeAtomIdCodec.encode(newId, context.baseContext),
67
- ]);
68
- }
69
- if (encodedMoves.length > 0) {
70
- encoded.m = encodedMoves;
49
+ if (change.childChanges.length > 0) {
50
+ encoded.c = [];
51
+ for (const [id, childChange] of change.childChanges) {
52
+ encoded.c.push([
53
+ registerIdCodec.encode(id, context.baseContext),
54
+ context.encodeNode(childChange),
55
+ ]);
56
+ }
71
57
  }
72
58
  return encoded;
73
59
  },
74
60
  decode: (encoded, context) => {
75
- const decoded = {};
61
+ const decoded = {
62
+ moves: encoded.m?.map(([encodedSrc, encodedDst]) => [
63
+ changeAtomIdCodec.decode(encodedSrc, context.baseContext),
64
+ changeAtomIdCodec.decode(encodedDst, context.baseContext),
65
+ ]) ?? [],
66
+ childChanges: encoded.c?.map(([id, encodedChange]) => [
67
+ registerIdCodec.decode(id, context.baseContext),
68
+ context.decodeNode(encodedChange),
69
+ ]) ?? [],
70
+ };
76
71
  if (encoded.r !== undefined) {
77
72
  const replace = {
78
73
  isEmpty: encoded.r.e,
79
74
  dst: changeAtomIdCodec.decode(encoded.r.d, context.baseContext),
80
75
  };
81
76
  if (encoded.r.s !== undefined) {
82
- const register = registerIdCodec.decode(encoded.r.s, context.baseContext);
83
- if (register === "self") {
84
- // Note that this is safe as long as we assume that this change will not be rebased
85
- // over a move to a sequence field.
86
- // The ID of an attach and accompanying detach/rename is arbitrary, except in sequence field where
87
- // the ID of the detach becomes a cell ID which may be referenced by other changes.
88
- replace.src = context.generateId();
89
- decoded.nodeDetach = replace.src;
90
- }
91
- else {
92
- replace.src = register;
93
- }
77
+ replace.src = registerIdCodec.decode(encoded.r.s, context.baseContext);
94
78
  }
95
79
  decoded.valueReplace = replace;
96
80
  }
97
- if (encoded.c !== undefined) {
98
- for (const [encodedDetachId, nodeChange] of encoded.c) {
99
- if (encodedDetachId === null) {
100
- decoded.childChange = context.decodeNode(nodeChange);
101
- }
102
- else {
103
- context.decodeRootNodeChange(changeAtomIdCodec.decode(encodedDetachId, context.baseContext), nodeChange);
104
- }
105
- }
106
- }
107
- for (const [encodedOldId, encodedNewId] of encoded.m ?? []) {
108
- context.decodeRootRename(changeAtomIdCodec.decode(encodedOldId, context.baseContext), changeAtomIdCodec.decode(encodedNewId, context.baseContext), 1);
109
- }
110
81
  return decoded;
111
82
  },
112
- encodedSchema: (0, optionalFieldChangeFormatV2_js_1.EncodedOptionalChangeset)(index_js_2.EncodedNodeChangeset),
83
+ encodedSchema: (0, optionalFieldChangeFormatV2_js_1.EncodedOptionalChangeset)(index_js_1.EncodedNodeChangeset),
113
84
  };
114
85
  }
115
86
  exports.makeOptionalFieldCodec = makeOptionalFieldCodec;
@@ -1 +1 @@
1
- {"version":3,"file":"optionalFieldCodecV2.js","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldCodecV2.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 } from \"@fluidframework/core-utils/internal\";\nimport type { TAnySchema } from \"@sinclair/typebox\";\n\nimport type { IJsonCodec } from \"../../codec/index.js\";\nimport {\n\tareEqualChangeAtomIdOpts,\n\ttype ChangeAtomId,\n\ttype ChangeEncodingContext,\n\ttype EncodedRevisionTag,\n\ttype RevisionTag,\n} from \"../../core/index.js\";\nimport type { Mutable } from \"../../util/index.js\";\nimport { makeChangeAtomIdCodec } from \"../changeAtomIdCodec.js\";\nimport {\n\tEncodedNodeChangeset,\n\ttype EncodedChangeAtomId,\n\ttype FieldChangeEncodingContext,\n} from \"../modular-schema/index.js\";\n\nimport { EncodedOptionalChangeset, EncodedRegisterId } from \"./optionalFieldChangeFormatV2.js\";\nimport type { OptionalChangeset, Replace } from \"./optionalFieldChangeTypes.js\";\n\ntype RegisterId = ChangeAtomId | \"self\";\n\nfunction makeRegisterIdCodec(\n\tchangeAtomIdCodec: IJsonCodec<\n\t\tChangeAtomId,\n\t\tEncodedChangeAtomId,\n\t\tEncodedChangeAtomId,\n\t\tChangeEncodingContext\n\t>,\n): IJsonCodec<RegisterId, EncodedRegisterId, EncodedRegisterId, ChangeEncodingContext> {\n\treturn {\n\t\tencode: (registerId: RegisterId, context: ChangeEncodingContext) => {\n\t\t\tif (registerId === \"self\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn changeAtomIdCodec.encode(registerId, context);\n\t\t},\n\t\tdecode: (registerId: EncodedRegisterId, context: ChangeEncodingContext) => {\n\t\t\tif (registerId === null) {\n\t\t\t\treturn \"self\";\n\t\t\t}\n\t\t\treturn changeAtomIdCodec.decode(registerId, context);\n\t\t},\n\t\tencodedSchema: EncodedRegisterId,\n\t};\n}\n\nexport function makeOptionalFieldCodec(\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n): IJsonCodec<\n\tOptionalChangeset,\n\tEncodedOptionalChangeset<TAnySchema>,\n\tEncodedOptionalChangeset<TAnySchema>,\n\tFieldChangeEncodingContext\n> {\n\tconst changeAtomIdCodec = makeChangeAtomIdCodec(revisionTagCodec);\n\tconst registerIdCodec = makeRegisterIdCodec(changeAtomIdCodec);\n\n\treturn {\n\t\tencode: (change: OptionalChangeset, context: FieldChangeEncodingContext) => {\n\t\t\tassert(\n\t\t\t\tchange.nodeDetach === undefined ||\n\t\t\t\t\tareEqualChangeAtomIdOpts(change.valueReplace?.src, change.nodeDetach),\n\t\t\t\t\"This format only supports node detach when it represents a pin\",\n\t\t\t);\n\n\t\t\tconst encoded: EncodedOptionalChangeset<TAnySchema> = {};\n\n\t\t\tif (change.valueReplace !== undefined) {\n\t\t\t\tencoded.r = {\n\t\t\t\t\te: change.valueReplace.isEmpty,\n\t\t\t\t\td: changeAtomIdCodec.encode(change.valueReplace.dst, context.baseContext),\n\t\t\t\t};\n\t\t\t\tif (change.valueReplace.src !== undefined) {\n\t\t\t\t\tconst srcRegister =\n\t\t\t\t\t\tchange.nodeDetach === undefined ? change.valueReplace.src : \"self\";\n\n\t\t\t\t\tencoded.r.s = registerIdCodec.encode(srcRegister, context.baseContext);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst encodedChildChanges: [EncodedRegisterId, EncodedNodeChangeset][] = [];\n\n\t\t\tif (change.childChange !== undefined) {\n\t\t\t\tencodedChildChanges.push([null, context.encodeNode(change.childChange)]);\n\t\t\t}\n\n\t\t\tfor (const [detachId, nodeId] of context.rootNodeChanges.entries()) {\n\t\t\t\tencodedChildChanges.push([\n\t\t\t\t\tchangeAtomIdCodec.encode(\n\t\t\t\t\t\t{ revision: detachId[0], localId: detachId[1] },\n\t\t\t\t\t\tcontext.baseContext,\n\t\t\t\t\t),\n\t\t\t\t\tcontext.encodeNode(nodeId),\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\tif (encodedChildChanges.length > 0) {\n\t\t\t\tencoded.c = encodedChildChanges;\n\t\t\t}\n\n\t\t\tconst encodedMoves: [EncodedChangeAtomId, EncodedChangeAtomId][] = [];\n\t\t\tfor (const {\n\t\t\t\tstart: oldId,\n\t\t\t\tvalue: newId,\n\t\t\t\tlength: count,\n\t\t\t} of context.rootRenames.entries()) {\n\t\t\t\tassert(count === 1, \"Unexpected range rename in optional field\");\n\t\t\t\tencodedMoves.push([\n\t\t\t\t\tchangeAtomIdCodec.encode(oldId, context.baseContext),\n\t\t\t\t\tchangeAtomIdCodec.encode(newId, context.baseContext),\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\tif (encodedMoves.length > 0) {\n\t\t\t\tencoded.m = encodedMoves;\n\t\t\t}\n\n\t\t\treturn encoded;\n\t\t},\n\n\t\tdecode: (\n\t\t\tencoded: EncodedOptionalChangeset<TAnySchema>,\n\t\t\tcontext: FieldChangeEncodingContext,\n\t\t) => {\n\t\t\tconst decoded: Mutable<OptionalChangeset> = {};\n\n\t\t\tif (encoded.r !== undefined) {\n\t\t\t\tconst replace: Mutable<Replace> = {\n\t\t\t\t\tisEmpty: encoded.r.e,\n\t\t\t\t\tdst: changeAtomIdCodec.decode(encoded.r.d, context.baseContext),\n\t\t\t\t};\n\t\t\t\tif (encoded.r.s !== undefined) {\n\t\t\t\t\tconst register = registerIdCodec.decode(encoded.r.s, context.baseContext);\n\t\t\t\t\tif (register === \"self\") {\n\t\t\t\t\t\t// Note that this is safe as long as we assume that this change will not be rebased\n\t\t\t\t\t\t// over a move to a sequence field.\n\t\t\t\t\t\t// The ID of an attach and accompanying detach/rename is arbitrary, except in sequence field where\n\t\t\t\t\t\t// the ID of the detach becomes a cell ID which may be referenced by other changes.\n\t\t\t\t\t\treplace.src = context.generateId();\n\t\t\t\t\t\tdecoded.nodeDetach = replace.src;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treplace.src = register;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdecoded.valueReplace = replace;\n\t\t\t}\n\n\t\t\tif (encoded.c !== undefined) {\n\t\t\t\tfor (const [encodedDetachId, nodeChange] of encoded.c) {\n\t\t\t\t\tif (encodedDetachId === null) {\n\t\t\t\t\t\tdecoded.childChange = context.decodeNode(nodeChange);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.decodeRootNodeChange(\n\t\t\t\t\t\t\tchangeAtomIdCodec.decode(encodedDetachId, context.baseContext),\n\t\t\t\t\t\t\tnodeChange,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [encodedOldId, encodedNewId] of encoded.m ?? []) {\n\t\t\t\tcontext.decodeRootRename(\n\t\t\t\t\tchangeAtomIdCodec.decode(encodedOldId, context.baseContext),\n\t\t\t\t\tchangeAtomIdCodec.decode(encodedNewId, context.baseContext),\n\t\t\t\t\t1,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn decoded;\n\t\t},\n\t\tencodedSchema: EncodedOptionalChangeset(EncodedNodeChangeset),\n\t};\n}\n"]}
1
+ {"version":3,"file":"optionalFieldCodecV2.js","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldCodecV2.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 { TAnySchema } from \"@sinclair/typebox\";\n\nimport type { IJsonCodec } from \"../../codec/index.js\";\nimport type {\n\tChangeAtomId,\n\tChangeEncodingContext,\n\tEncodedRevisionTag,\n\tRevisionTag,\n} from \"../../core/index.js\";\nimport type { Mutable } from \"../../util/index.js\";\nimport { makeChangeAtomIdCodec } from \"../changeAtomIdCodec.js\";\nimport {\n\tEncodedNodeChangeset,\n\ttype EncodedChangeAtomId,\n\ttype FieldChangeEncodingContext,\n} from \"../modular-schema/index.js\";\n\nimport { EncodedOptionalChangeset, EncodedRegisterId } from \"./optionalFieldChangeFormatV2.js\";\nimport type { OptionalChangeset, RegisterId, Replace } from \"./optionalFieldChangeTypes.js\";\n\nfunction makeRegisterIdCodec(\n\tchangeAtomIdCodec: IJsonCodec<\n\t\tChangeAtomId,\n\t\tEncodedChangeAtomId,\n\t\tEncodedChangeAtomId,\n\t\tChangeEncodingContext\n\t>,\n): IJsonCodec<RegisterId, EncodedRegisterId, EncodedRegisterId, ChangeEncodingContext> {\n\treturn {\n\t\tencode: (registerId: RegisterId, context: ChangeEncodingContext) => {\n\t\t\tif (registerId === \"self\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn changeAtomIdCodec.encode(registerId, context);\n\t\t},\n\t\tdecode: (registerId: EncodedRegisterId, context: ChangeEncodingContext) => {\n\t\t\tif (registerId === null) {\n\t\t\t\treturn \"self\";\n\t\t\t}\n\t\t\treturn changeAtomIdCodec.decode(registerId, context);\n\t\t},\n\t\tencodedSchema: EncodedRegisterId,\n\t};\n}\n\nexport function makeOptionalFieldCodec(\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n): IJsonCodec<\n\tOptionalChangeset,\n\tEncodedOptionalChangeset<TAnySchema>,\n\tEncodedOptionalChangeset<TAnySchema>,\n\tFieldChangeEncodingContext\n> {\n\tconst changeAtomIdCodec = makeChangeAtomIdCodec(revisionTagCodec);\n\tconst registerIdCodec = makeRegisterIdCodec(changeAtomIdCodec);\n\n\treturn {\n\t\tencode: (change: OptionalChangeset, context: FieldChangeEncodingContext) => {\n\t\t\tconst encoded: EncodedOptionalChangeset<TAnySchema> = {};\n\n\t\t\tif (change.moves.length > 0) {\n\t\t\t\tencoded.m = change.moves.map(([src, dst]) => [\n\t\t\t\t\tchangeAtomIdCodec.encode(src, context.baseContext),\n\t\t\t\t\tchangeAtomIdCodec.encode(dst, context.baseContext),\n\t\t\t\t]);\n\t\t\t}\n\n\t\t\tif (change.valueReplace !== undefined) {\n\t\t\t\tencoded.r = {\n\t\t\t\t\te: change.valueReplace.isEmpty,\n\t\t\t\t\td: changeAtomIdCodec.encode(change.valueReplace.dst, context.baseContext),\n\t\t\t\t};\n\t\t\t\tif (change.valueReplace.src !== undefined) {\n\t\t\t\t\tencoded.r.s = registerIdCodec.encode(change.valueReplace.src, context.baseContext);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (change.childChanges.length > 0) {\n\t\t\t\tencoded.c = [];\n\t\t\t\tfor (const [id, childChange] of change.childChanges) {\n\t\t\t\t\tencoded.c.push([\n\t\t\t\t\t\tregisterIdCodec.encode(id, context.baseContext),\n\t\t\t\t\t\tcontext.encodeNode(childChange),\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn encoded;\n\t\t},\n\n\t\tdecode: (\n\t\t\tencoded: EncodedOptionalChangeset<TAnySchema>,\n\t\t\tcontext: FieldChangeEncodingContext,\n\t\t) => {\n\t\t\tconst decoded: Mutable<OptionalChangeset> = {\n\t\t\t\tmoves:\n\t\t\t\t\tencoded.m?.map(([encodedSrc, encodedDst]) => [\n\t\t\t\t\t\tchangeAtomIdCodec.decode(encodedSrc, context.baseContext),\n\t\t\t\t\t\tchangeAtomIdCodec.decode(encodedDst, context.baseContext),\n\t\t\t\t\t]) ?? [],\n\t\t\t\tchildChanges:\n\t\t\t\t\tencoded.c?.map(([id, encodedChange]) => [\n\t\t\t\t\t\tregisterIdCodec.decode(id, context.baseContext),\n\t\t\t\t\t\tcontext.decodeNode(encodedChange),\n\t\t\t\t\t]) ?? [],\n\t\t\t};\n\n\t\t\tif (encoded.r !== undefined) {\n\t\t\t\tconst replace: Mutable<Replace> = {\n\t\t\t\t\tisEmpty: encoded.r.e,\n\t\t\t\t\tdst: changeAtomIdCodec.decode(encoded.r.d, context.baseContext),\n\t\t\t\t};\n\t\t\t\tif (encoded.r.s !== undefined) {\n\t\t\t\t\treplace.src = registerIdCodec.decode(encoded.r.s, context.baseContext);\n\t\t\t\t}\n\t\t\t\tdecoded.valueReplace = replace;\n\t\t\t}\n\t\t\treturn decoded;\n\t\t},\n\t\tencodedSchema: EncodedOptionalChangeset(EncodedNodeChangeset),\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"optionalFieldCodecs.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldCodecs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAmB,MAAM,sBAAsB,CAAC;AAC3F,OAAO,KAAK,EACX,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAIvE,eAAO,MAAM,4BAA4B,qBACtB,WACjB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,KACC,aAAa,iBAAiB,EAAE,0BAA0B,CAI1D,CAAC"}
1
+ {"version":3,"file":"optionalFieldCodecs.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldCodecs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAmB,MAAM,sBAAsB,CAAC;AAC3F,OAAO,KAAK,EACX,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,eAAO,MAAM,4BAA4B,qBACtB,WACjB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,CACrB,KACC,aAAa,iBAAiB,EAAE,0BAA0B,CACP,CAAC"}
@@ -7,10 +7,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.makeOptionalFieldCodecFamily = void 0;
8
8
  const index_js_1 = require("../../codec/index.js");
9
9
  const optionalFieldCodecV2_js_1 = require("./optionalFieldCodecV2.js");
10
- const optionalFieldCodecV3_js_1 = require("./optionalFieldCodecV3.js");
11
- const makeOptionalFieldCodecFamily = (revisionTagCodec) => (0, index_js_1.makeCodecFamily)([
12
- [2, (0, optionalFieldCodecV2_js_1.makeOptionalFieldCodec)(revisionTagCodec)],
13
- [3, (0, optionalFieldCodecV3_js_1.makeOptionalFieldCodec)(revisionTagCodec)],
14
- ]);
10
+ const makeOptionalFieldCodecFamily = (revisionTagCodec) => (0, index_js_1.makeCodecFamily)([[2, (0, optionalFieldCodecV2_js_1.makeOptionalFieldCodec)(revisionTagCodec)]]);
15
11
  exports.makeOptionalFieldCodecFamily = makeOptionalFieldCodecFamily;
16
12
  //# sourceMappingURL=optionalFieldCodecs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"optionalFieldCodecs.js","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldCodecs.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mDAA2F;AAS3F,uEAAkF;AAClF,uEAAkF;AAE3E,MAAM,4BAA4B,GAAG,CAC3C,gBAKC,EAC6D,EAAE,CAChE,IAAA,0BAAe,EAAC;IACf,CAAC,CAAC,EAAE,IAAA,gDAAW,EAAC,gBAAgB,CAAC,CAAC;IAClC,CAAC,CAAC,EAAE,IAAA,gDAAW,EAAC,gBAAgB,CAAC,CAAC;CAClC,CAAC,CAAC;AAXS,QAAA,4BAA4B,gCAWrC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { type ICodecFamily, type IJsonCodec, makeCodecFamily } from \"../../codec/index.js\";\nimport type {\n\tChangeEncodingContext,\n\tEncodedRevisionTag,\n\tRevisionTag,\n} from \"../../core/index.js\";\nimport type { FieldChangeEncodingContext } from \"../modular-schema/index.js\";\n\nimport type { OptionalChangeset } from \"./optionalFieldChangeTypes.js\";\nimport { makeOptionalFieldCodec as makeV2Codec } from \"./optionalFieldCodecV2.js\";\nimport { makeOptionalFieldCodec as makeV3Codec } from \"./optionalFieldCodecV3.js\";\n\nexport const makeOptionalFieldCodecFamily = (\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n): ICodecFamily<OptionalChangeset, FieldChangeEncodingContext> =>\n\tmakeCodecFamily([\n\t\t[2, makeV2Codec(revisionTagCodec)],\n\t\t[3, makeV3Codec(revisionTagCodec)],\n\t]);\n"]}
1
+ {"version":3,"file":"optionalFieldCodecs.js","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalFieldCodecs.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mDAA2F;AAS3F,uEAAkF;AAE3E,MAAM,4BAA4B,GAAG,CAC3C,gBAKC,EAC6D,EAAE,CAChE,IAAA,0BAAe,EAAC,CAAC,CAAC,CAAC,EAAE,IAAA,gDAAW,EAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAR1C,QAAA,4BAA4B,gCAQc","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { type ICodecFamily, type IJsonCodec, makeCodecFamily } from \"../../codec/index.js\";\nimport type {\n\tChangeEncodingContext,\n\tEncodedRevisionTag,\n\tRevisionTag,\n} from \"../../core/index.js\";\nimport type { FieldChangeEncodingContext } from \"../modular-schema/index.js\";\n\nimport type { OptionalChangeset } from \"./optionalFieldChangeTypes.js\";\nimport { makeOptionalFieldCodec as makeV2Codec } from \"./optionalFieldCodecV2.js\";\n\nexport const makeOptionalFieldCodecFamily = (\n\trevisionTagCodec: IJsonCodec<\n\t\tRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tEncodedRevisionTag,\n\t\tChangeEncodingContext\n\t>,\n): ICodecFamily<OptionalChangeset, FieldChangeEncodingContext> =>\n\tmakeCodecFamily([[2, makeV2Codec(revisionTagCodec)]]);\n"]}
@@ -2,9 +2,9 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { type ChangeAtomId, type DeltaFieldChanges, Multiplicity } from "../../core/index.js";
5
+ import { type ChangeAtomId, Multiplicity } from "../../core/index.js";
6
6
  import { requiredIdentifier } from "../fieldKindIdentifiers.js";
7
- import { type FieldEditor, type FieldChangeHandler, FlexFieldKind, type ToDelta } from "../modular-schema/index.js";
7
+ import { type FieldEditor, type FieldChangeHandler, FlexFieldKind } from "../modular-schema/index.js";
8
8
  import type { OptionalChangeset } from "./optionalFieldChangeTypes.js";
9
9
  /**
10
10
  * {@link FieldEditor} for required fields (always contain exactly 1 child).
@@ -25,7 +25,6 @@ export interface RequiredFieldEditor extends FieldEditor<OptionalChangeset> {
25
25
  }): OptionalChangeset;
26
26
  }
27
27
  export declare const requiredFieldEditor: RequiredFieldEditor;
28
- export declare function requiredFieldIntoDelta(change: OptionalChangeset, deltaFromChild: ToDelta): DeltaFieldChanges;
29
28
  export declare const requiredFieldChangeHandler: FieldChangeHandler<OptionalChangeset, RequiredFieldEditor>;
30
29
  interface Required extends FlexFieldKind<RequiredFieldEditor, typeof requiredIdentifier, Multiplicity.Single> {
31
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"requiredField.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/requiredField.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAA6B,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,aAAa,EACb,KAAK,OAAO,EACZ,MAAM,4BAA4B,CAAC;AAOpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAMvE;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW,CAAC,iBAAiB,CAAC;IAC1E;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,GAAG,iBAAiB,CAAC;CAC1E;AAED,eAAO,MAAM,mBAAmB,EAAE,mBAIjC,CAAC;AAEF,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,OAAO,GACrB,iBAAiB,CAEnB;AAED,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAC1D,iBAAiB,EACjB,mBAAmB,CAKnB,CAAC;AAEF,UAAU,QACT,SAAQ,aAAa,CAAC,mBAAmB,EAAE,OAAO,kBAAkB,EAAE,YAAY,CAAC,MAAM,CAAC;CAAG;AAE9F;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,QAGrB,CAAC"}
1
+ {"version":3,"file":"requiredField.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/requiredField.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAA6B,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,aAAa,EACb,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAMvE;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW,CAAC,iBAAiB,CAAC;IAC1E;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,GAAG,iBAAiB,CAAC;CAC1E;AAED,eAAO,MAAM,mBAAmB,EAAE,mBAIjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CAC1D,iBAAiB,EACjB,mBAAmB,CAInB,CAAC;AAEF,UAAU,QACT,SAAQ,aAAa,CAAC,mBAAmB,EAAE,OAAO,kBAAkB,EAAE,YAAY,CAAC,MAAM,CAAC;CAAG;AAE9F;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,QAGrB,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.required = exports.requiredFieldChangeHandler = exports.requiredFieldIntoDelta = exports.requiredFieldEditor = void 0;
7
+ exports.required = exports.requiredFieldChangeHandler = exports.requiredFieldEditor = void 0;
8
8
  const index_js_1 = require("../../core/index.js");
9
9
  const fieldKindIdentifiers_js_1 = require("../fieldKindIdentifiers.js");
10
10
  const index_js_2 = require("../modular-schema/index.js");
@@ -13,13 +13,8 @@ exports.requiredFieldEditor = {
13
13
  ...optionalField_js_1.optionalFieldEditor,
14
14
  set: (ids) => optionalField_js_1.optionalFieldEditor.set(false, ids),
15
15
  };
16
- function requiredFieldIntoDelta(change, deltaFromChild) {
17
- return (0, optionalField_js_1.optionalOrRequiredFieldIntoDelta)(false, change, deltaFromChild);
18
- }
19
- exports.requiredFieldIntoDelta = requiredFieldIntoDelta;
20
16
  exports.requiredFieldChangeHandler = {
21
17
  ...optionalField_js_1.optionalChangeHandler,
22
- intoDelta: requiredFieldIntoDelta,
23
18
  editor: exports.requiredFieldEditor,
24
19
  };
25
20
  /**