@fluidframework/tree 2.1.0-276326 → 2.1.0-281041

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 (442) hide show
  1. package/.eslintrc.cjs +7 -0
  2. package/.vscode/Tree.code-workspace +7 -1
  3. package/README.md +134 -29
  4. package/api-report/tree.alpha.api.md +1 -0
  5. package/api-report/tree.beta.api.md +1 -0
  6. package/api-report/tree.public.api.md +1 -0
  7. package/beta.d.ts +1 -1
  8. package/dist/beta.d.ts +1 -1
  9. package/dist/core/forest/editableForest.d.ts +6 -3
  10. package/dist/core/forest/editableForest.d.ts.map +1 -1
  11. package/dist/core/forest/editableForest.js +14 -4
  12. package/dist/core/forest/editableForest.js.map +1 -1
  13. package/dist/core/index.d.ts +1 -1
  14. package/dist/core/index.d.ts.map +1 -1
  15. package/dist/core/index.js +3 -1
  16. package/dist/core/index.js.map +1 -1
  17. package/dist/core/rebase/index.d.ts +1 -1
  18. package/dist/core/rebase/index.d.ts.map +1 -1
  19. package/dist/core/rebase/index.js +3 -1
  20. package/dist/core/rebase/index.js.map +1 -1
  21. package/dist/core/rebase/types.d.ts +2 -0
  22. package/dist/core/rebase/types.d.ts.map +1 -1
  23. package/dist/core/rebase/types.js +9 -1
  24. package/dist/core/rebase/types.js.map +1 -1
  25. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  26. package/dist/core/tree/visitDelta.js.map +1 -1
  27. package/dist/events/events.d.ts +4 -1
  28. package/dist/events/events.d.ts.map +1 -1
  29. package/dist/events/events.js.map +1 -1
  30. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +1 -1
  31. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  32. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  33. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -0
  34. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  35. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -2
  36. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
  37. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js +0 -20
  38. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
  39. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +0 -38
  40. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  41. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  42. package/dist/feature-libraries/flex-tree/index.d.ts +1 -1
  43. package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
  44. package/dist/feature-libraries/flex-tree/index.js.map +1 -1
  45. package/dist/feature-libraries/flex-tree/lazyField.d.ts +0 -4
  46. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  47. package/dist/feature-libraries/flex-tree/lazyField.js +1 -14
  48. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  49. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +0 -1
  50. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  51. package/dist/feature-libraries/flex-tree/lazyNode.js +0 -3
  52. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  53. package/dist/feature-libraries/index.d.ts +3 -3
  54. package/dist/feature-libraries/index.d.ts.map +1 -1
  55. package/dist/feature-libraries/index.js +2 -2
  56. package/dist/feature-libraries/index.js.map +1 -1
  57. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +11 -0
  58. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  59. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  60. package/dist/feature-libraries/modular-schema/discrepancies.d.ts +96 -0
  61. package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -0
  62. package/dist/feature-libraries/modular-schema/discrepancies.js +264 -0
  63. package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -0
  64. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -2
  65. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  66. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  67. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  68. package/dist/feature-libraries/modular-schema/genericFieldKind.js +3 -0
  69. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  70. package/dist/feature-libraries/modular-schema/index.d.ts +2 -1
  71. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  72. package/dist/feature-libraries/modular-schema/index.js +3 -1
  73. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  74. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  75. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +42 -26
  76. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  77. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +51 -2
  78. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  79. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +830 -245
  80. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  81. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  82. package/dist/feature-libraries/modular-schema/modularChangeFormat.js +2 -0
  83. package/dist/feature-libraries/modular-schema/modularChangeFormat.js.map +1 -1
  84. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +44 -1
  85. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  86. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  87. package/dist/feature-libraries/node-key/index.d.ts +0 -1
  88. package/dist/feature-libraries/node-key/index.d.ts.map +1 -1
  89. package/dist/feature-libraries/node-key/index.js +1 -3
  90. package/dist/feature-libraries/node-key/index.js.map +1 -1
  91. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  92. package/dist/feature-libraries/optional-field/optionalField.js +1 -0
  93. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  94. package/dist/feature-libraries/sequence-field/index.d.ts +1 -1
  95. package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
  96. package/dist/feature-libraries/sequence-field/index.js +1 -2
  97. package/dist/feature-libraries/sequence-field/index.js.map +1 -1
  98. package/dist/feature-libraries/sequence-field/invert.js +1 -1
  99. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  100. package/dist/feature-libraries/sequence-field/rebase.js +6 -1
  101. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  102. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  103. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +1 -0
  104. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  105. package/dist/feature-libraries/sequence-field/utils.d.ts +2 -17
  106. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  107. package/dist/feature-libraries/sequence-field/utils.js +31 -39
  108. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  109. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +1 -0
  110. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  111. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +2 -0
  112. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  113. package/dist/index.d.ts +1 -1
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js.map +1 -1
  116. package/dist/packageVersion.d.ts +1 -1
  117. package/dist/packageVersion.js +1 -1
  118. package/dist/packageVersion.js.map +1 -1
  119. package/dist/public.d.ts +1 -1
  120. package/dist/shared-tree/schematizingTreeView.d.ts +4 -2
  121. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  122. package/dist/shared-tree/schematizingTreeView.js +240 -184
  123. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  124. package/dist/shared-tree/sharedTree.d.ts +3 -2
  125. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  126. package/dist/shared-tree/sharedTree.js +150 -90
  127. package/dist/shared-tree/sharedTree.js.map +1 -1
  128. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  129. package/dist/shared-tree/treeCheckout.js +2 -1
  130. package/dist/shared-tree/treeCheckout.js.map +1 -1
  131. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  132. package/dist/shared-tree-core/branch.js +1 -0
  133. package/dist/shared-tree-core/branch.js.map +1 -1
  134. package/dist/shared-tree-core/sharedTreeCore.d.ts +4 -6
  135. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  136. package/dist/shared-tree-core/sharedTreeCore.js +265 -209
  137. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  138. package/dist/simple-tree/arrayNode.d.ts +4 -0
  139. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  140. package/dist/simple-tree/arrayNode.js +36 -19
  141. package/dist/simple-tree/arrayNode.js.map +1 -1
  142. package/dist/simple-tree/leafNodeSchema.d.ts +22 -1
  143. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  144. package/dist/simple-tree/leafNodeSchema.js +2 -1
  145. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  146. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  147. package/dist/simple-tree/mapNode.js.map +1 -1
  148. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  149. package/dist/simple-tree/objectNode.js +2 -1
  150. package/dist/simple-tree/objectNode.js.map +1 -1
  151. package/dist/simple-tree/proxies.d.ts.map +1 -1
  152. package/dist/simple-tree/proxies.js +2 -4
  153. package/dist/simple-tree/proxies.js.map +1 -1
  154. package/dist/simple-tree/schemaFactory.d.ts +24 -1
  155. package/dist/simple-tree/schemaFactory.d.ts.map +1 -1
  156. package/dist/simple-tree/schemaFactory.js +40 -4
  157. package/dist/simple-tree/schemaFactory.js.map +1 -1
  158. package/dist/simple-tree/schemaTypes.d.ts +36 -1
  159. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  160. package/dist/simple-tree/schemaTypes.js.map +1 -1
  161. package/dist/simple-tree/toFlexSchema.d.ts +2 -2
  162. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  163. package/dist/simple-tree/toFlexSchema.js +3 -2
  164. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  165. package/dist/simple-tree/tree.d.ts +4 -1
  166. package/dist/simple-tree/tree.d.ts.map +1 -1
  167. package/dist/simple-tree/tree.js +48 -1
  168. package/dist/simple-tree/tree.js.map +1 -1
  169. package/dist/simple-tree/treeNodeApi.d.ts.map +1 -1
  170. package/dist/simple-tree/treeNodeApi.js +10 -10
  171. package/dist/simple-tree/treeNodeApi.js.map +1 -1
  172. package/dist/simple-tree/types.d.ts +22 -3
  173. package/dist/simple-tree/types.d.ts.map +1 -1
  174. package/dist/simple-tree/types.js +32 -21
  175. package/dist/simple-tree/types.js.map +1 -1
  176. package/dist/util/breakable.d.ts +83 -0
  177. package/dist/util/breakable.d.ts.map +1 -0
  178. package/dist/util/breakable.js +178 -0
  179. package/dist/util/breakable.js.map +1 -0
  180. package/dist/util/index.d.ts +3 -2
  181. package/dist/util/index.d.ts.map +1 -1
  182. package/dist/util/index.js +9 -2
  183. package/dist/util/index.js.map +1 -1
  184. package/dist/util/nestedMap.d.ts +23 -3
  185. package/dist/util/nestedMap.d.ts.map +1 -1
  186. package/dist/util/nestedMap.js +38 -7
  187. package/dist/util/nestedMap.js.map +1 -1
  188. package/dist/util/utils.d.ts +7 -0
  189. package/dist/util/utils.d.ts.map +1 -1
  190. package/dist/util/utils.js +15 -1
  191. package/dist/util/utils.js.map +1 -1
  192. package/docs/README.md +1 -1
  193. package/docs/main/compatibility.md +1 -1
  194. package/docs/main/stored-and-view-schema.md +1 -1
  195. package/internal.d.ts +1 -1
  196. package/lib/beta.d.ts +1 -1
  197. package/lib/core/forest/editableForest.d.ts +6 -3
  198. package/lib/core/forest/editableForest.d.ts.map +1 -1
  199. package/lib/core/forest/editableForest.js +15 -5
  200. package/lib/core/forest/editableForest.js.map +1 -1
  201. package/lib/core/index.d.ts +1 -1
  202. package/lib/core/index.d.ts.map +1 -1
  203. package/lib/core/index.js +1 -1
  204. package/lib/core/index.js.map +1 -1
  205. package/lib/core/rebase/index.d.ts +1 -1
  206. package/lib/core/rebase/index.d.ts.map +1 -1
  207. package/lib/core/rebase/index.js +1 -1
  208. package/lib/core/rebase/index.js.map +1 -1
  209. package/lib/core/rebase/types.d.ts +2 -0
  210. package/lib/core/rebase/types.d.ts.map +1 -1
  211. package/lib/core/rebase/types.js +7 -1
  212. package/lib/core/rebase/types.js.map +1 -1
  213. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  214. package/lib/core/tree/visitDelta.js.map +1 -1
  215. package/lib/events/events.d.ts +4 -1
  216. package/lib/events/events.d.ts.map +1 -1
  217. package/lib/events/events.js.map +1 -1
  218. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +1 -1
  219. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  220. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  221. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -0
  222. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  223. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -2
  224. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
  225. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js +0 -20
  226. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
  227. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +0 -38
  228. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  229. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  230. package/lib/feature-libraries/flex-tree/index.d.ts +1 -1
  231. package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
  232. package/lib/feature-libraries/flex-tree/index.js.map +1 -1
  233. package/lib/feature-libraries/flex-tree/lazyField.d.ts +0 -4
  234. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  235. package/lib/feature-libraries/flex-tree/lazyField.js +1 -14
  236. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  237. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +0 -1
  238. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  239. package/lib/feature-libraries/flex-tree/lazyNode.js +0 -3
  240. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  241. package/lib/feature-libraries/index.d.ts +3 -3
  242. package/lib/feature-libraries/index.d.ts.map +1 -1
  243. package/lib/feature-libraries/index.js +2 -2
  244. package/lib/feature-libraries/index.js.map +1 -1
  245. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +11 -0
  246. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  247. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  248. package/lib/feature-libraries/modular-schema/discrepancies.d.ts +96 -0
  249. package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -0
  250. package/lib/feature-libraries/modular-schema/discrepancies.js +260 -0
  251. package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -0
  252. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -2
  253. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  254. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  255. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  256. package/lib/feature-libraries/modular-schema/genericFieldKind.js +3 -0
  257. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  258. package/lib/feature-libraries/modular-schema/index.d.ts +2 -1
  259. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  260. package/lib/feature-libraries/modular-schema/index.js +1 -0
  261. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  262. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  263. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +42 -26
  264. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  265. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +51 -2
  266. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  267. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +829 -247
  268. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  269. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  270. package/lib/feature-libraries/modular-schema/modularChangeFormat.js +2 -0
  271. package/lib/feature-libraries/modular-schema/modularChangeFormat.js.map +1 -1
  272. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +44 -1
  273. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  274. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  275. package/lib/feature-libraries/node-key/index.d.ts +0 -1
  276. package/lib/feature-libraries/node-key/index.d.ts.map +1 -1
  277. package/lib/feature-libraries/node-key/index.js +0 -1
  278. package/lib/feature-libraries/node-key/index.js.map +1 -1
  279. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  280. package/lib/feature-libraries/optional-field/optionalField.js +1 -0
  281. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  282. package/lib/feature-libraries/sequence-field/index.d.ts +1 -1
  283. package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
  284. package/lib/feature-libraries/sequence-field/index.js +1 -1
  285. package/lib/feature-libraries/sequence-field/index.js.map +1 -1
  286. package/lib/feature-libraries/sequence-field/invert.js +1 -1
  287. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  288. package/lib/feature-libraries/sequence-field/rebase.js +6 -1
  289. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  290. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  291. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -1
  292. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  293. package/lib/feature-libraries/sequence-field/utils.d.ts +2 -17
  294. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  295. package/lib/feature-libraries/sequence-field/utils.js +31 -39
  296. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  297. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +1 -0
  298. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  299. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +4 -2
  300. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  301. package/lib/index.d.ts +1 -1
  302. package/lib/index.d.ts.map +1 -1
  303. package/lib/index.js.map +1 -1
  304. package/lib/packageVersion.d.ts +1 -1
  305. package/lib/packageVersion.js +1 -1
  306. package/lib/packageVersion.js.map +1 -1
  307. package/lib/public.d.ts +1 -1
  308. package/lib/shared-tree/schematizingTreeView.d.ts +4 -2
  309. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  310. package/lib/shared-tree/schematizingTreeView.js +242 -185
  311. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  312. package/lib/shared-tree/sharedTree.d.ts +3 -2
  313. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  314. package/lib/shared-tree/sharedTree.js +151 -90
  315. package/lib/shared-tree/sharedTree.js.map +1 -1
  316. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  317. package/lib/shared-tree/treeCheckout.js +2 -1
  318. package/lib/shared-tree/treeCheckout.js.map +1 -1
  319. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  320. package/lib/shared-tree-core/branch.js +1 -0
  321. package/lib/shared-tree-core/branch.js.map +1 -1
  322. package/lib/shared-tree-core/sharedTreeCore.d.ts +4 -6
  323. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  324. package/lib/shared-tree-core/sharedTreeCore.js +267 -210
  325. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  326. package/lib/simple-tree/arrayNode.d.ts +4 -0
  327. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  328. package/lib/simple-tree/arrayNode.js +38 -21
  329. package/lib/simple-tree/arrayNode.js.map +1 -1
  330. package/lib/simple-tree/leafNodeSchema.d.ts +22 -1
  331. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  332. package/lib/simple-tree/leafNodeSchema.js +1 -1
  333. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  334. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  335. package/lib/simple-tree/mapNode.js.map +1 -1
  336. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  337. package/lib/simple-tree/objectNode.js +3 -2
  338. package/lib/simple-tree/objectNode.js.map +1 -1
  339. package/lib/simple-tree/proxies.d.ts.map +1 -1
  340. package/lib/simple-tree/proxies.js +2 -4
  341. package/lib/simple-tree/proxies.js.map +1 -1
  342. package/lib/simple-tree/schemaFactory.d.ts +24 -1
  343. package/lib/simple-tree/schemaFactory.d.ts.map +1 -1
  344. package/lib/simple-tree/schemaFactory.js +38 -3
  345. package/lib/simple-tree/schemaFactory.js.map +1 -1
  346. package/lib/simple-tree/schemaTypes.d.ts +36 -1
  347. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  348. package/lib/simple-tree/schemaTypes.js.map +1 -1
  349. package/lib/simple-tree/toFlexSchema.d.ts +2 -2
  350. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  351. package/lib/simple-tree/toFlexSchema.js +3 -2
  352. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  353. package/lib/simple-tree/tree.d.ts +4 -1
  354. package/lib/simple-tree/tree.d.ts.map +1 -1
  355. package/lib/simple-tree/tree.js +44 -0
  356. package/lib/simple-tree/tree.js.map +1 -1
  357. package/lib/simple-tree/treeNodeApi.d.ts.map +1 -1
  358. package/lib/simple-tree/treeNodeApi.js +11 -11
  359. package/lib/simple-tree/treeNodeApi.js.map +1 -1
  360. package/lib/simple-tree/types.d.ts +22 -3
  361. package/lib/simple-tree/types.d.ts.map +1 -1
  362. package/lib/simple-tree/types.js +32 -21
  363. package/lib/simple-tree/types.js.map +1 -1
  364. package/lib/util/breakable.d.ts +83 -0
  365. package/lib/util/breakable.d.ts.map +1 -0
  366. package/lib/util/breakable.js +171 -0
  367. package/lib/util/breakable.js.map +1 -0
  368. package/lib/util/index.d.ts +3 -2
  369. package/lib/util/index.d.ts.map +1 -1
  370. package/lib/util/index.js +3 -2
  371. package/lib/util/index.js.map +1 -1
  372. package/lib/util/nestedMap.d.ts +23 -3
  373. package/lib/util/nestedMap.d.ts.map +1 -1
  374. package/lib/util/nestedMap.js +36 -6
  375. package/lib/util/nestedMap.js.map +1 -1
  376. package/lib/util/utils.d.ts +7 -0
  377. package/lib/util/utils.d.ts.map +1 -1
  378. package/lib/util/utils.js +13 -0
  379. package/lib/util/utils.js.map +1 -1
  380. package/package.json +29 -27
  381. package/src/core/forest/editableForest.ts +17 -4
  382. package/src/core/index.ts +2 -0
  383. package/src/core/rebase/index.ts +2 -0
  384. package/src/core/rebase/types.ts +17 -0
  385. package/src/core/tree/visitDelta.ts +1 -0
  386. package/src/events/events.ts +4 -2
  387. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +1 -1
  388. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -0
  389. package/src/feature-libraries/flex-map-tree/mapTreeNode.ts +0 -30
  390. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +0 -43
  391. package/src/feature-libraries/flex-tree/index.ts +0 -1
  392. package/src/feature-libraries/flex-tree/lazyField.ts +1 -21
  393. package/src/feature-libraries/flex-tree/lazyNode.ts +0 -6
  394. package/src/feature-libraries/index.ts +1 -2
  395. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +18 -0
  396. package/src/feature-libraries/modular-schema/discrepancies.ts +395 -0
  397. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +10 -2
  398. package/src/feature-libraries/modular-schema/genericFieldKind.ts +3 -0
  399. package/src/feature-libraries/modular-schema/index.ts +2 -0
  400. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +81 -35
  401. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +1529 -454
  402. package/src/feature-libraries/modular-schema/modularChangeFormat.ts +2 -0
  403. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +51 -0
  404. package/src/feature-libraries/node-key/index.ts +0 -1
  405. package/src/feature-libraries/optional-field/optionalField.ts +1 -0
  406. package/src/feature-libraries/sequence-field/index.ts +0 -2
  407. package/src/feature-libraries/sequence-field/invert.ts +1 -1
  408. package/src/feature-libraries/sequence-field/rebase.ts +7 -1
  409. package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +2 -1
  410. package/src/feature-libraries/sequence-field/utils.ts +37 -85
  411. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +10 -0
  412. package/src/index.ts +0 -1
  413. package/src/packageVersion.ts +1 -1
  414. package/src/shared-tree/schematizingTreeView.ts +6 -2
  415. package/src/shared-tree/sharedTree.ts +5 -2
  416. package/src/shared-tree/treeCheckout.ts +6 -2
  417. package/src/shared-tree-core/branch.ts +1 -0
  418. package/src/shared-tree-core/sharedTreeCore.ts +18 -6
  419. package/src/simple-tree/arrayNode.ts +49 -22
  420. package/src/simple-tree/leafNodeSchema.ts +1 -1
  421. package/src/simple-tree/mapNode.ts +2 -2
  422. package/src/simple-tree/objectNode.ts +9 -3
  423. package/src/simple-tree/proxies.ts +2 -4
  424. package/src/simple-tree/schemaFactory.ts +45 -2
  425. package/src/simple-tree/schemaTypes.ts +36 -1
  426. package/src/simple-tree/toFlexSchema.ts +5 -4
  427. package/src/simple-tree/tree.ts +65 -4
  428. package/src/simple-tree/treeNodeApi.ts +15 -15
  429. package/src/simple-tree/types.ts +60 -30
  430. package/src/util/breakable.ts +214 -0
  431. package/src/util/index.ts +10 -0
  432. package/src/util/nestedMap.ts +49 -11
  433. package/src/util/utils.ts +17 -0
  434. package/dist/feature-libraries/node-key/nodeKeyIndex.d.ts +0 -41
  435. package/dist/feature-libraries/node-key/nodeKeyIndex.d.ts.map +0 -1
  436. package/dist/feature-libraries/node-key/nodeKeyIndex.js +0 -101
  437. package/dist/feature-libraries/node-key/nodeKeyIndex.js.map +0 -1
  438. package/lib/feature-libraries/node-key/nodeKeyIndex.d.ts +0 -41
  439. package/lib/feature-libraries/node-key/nodeKeyIndex.d.ts.map +0 -1
  440. package/lib/feature-libraries/node-key/nodeKeyIndex.js +0 -97
  441. package/lib/feature-libraries/node-key/nodeKeyIndex.js.map +0 -1
  442. package/src/feature-libraries/node-key/nodeKeyIndex.ts +0 -132
@@ -1 +1 @@
1
- {"version":3,"file":"modularChangeFormat.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeFormat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAsB,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,KAAK,gBAAgB,EAAqB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EACN,KAAK,sBAAsB,EAG3B,MAAM,qBAAqB,CAAC;AAK7B,eAAO,MAAM,sBAAsB,uDAEjC,CAAC;AAEH,eAAO,MAAM,mBAAmB,2aAG9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,QAAA,MAAM,kBAAkB;;;;EAUvB,CAAC;AAEF,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,OAAO,kBAAkB,CAAC;IAC5E;;OAEG;IACH,MAAM,EAAE,sBAAsB,CAAC;CAC/B;AAED,QAAA,MAAM,qBAAqB;;;;GAAiC,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAUzE,eAAO,MAAM,oBAAoB;;;;;;;;;EAMhC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,eAAO,MAAM,mBAAmB;;;EAM/B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE;;GAEG;AACH,eAAO,MAAM,gBAAgB,qCAA6C,CAAC;AAE3E,eAAO,MAAM,YAAY,sKAOxB,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvD,eAAO,MAAM,kBAAkB,mtBAM9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,eAAO,MAAM,aAAa;;IAGxB;;;OAGG;;;;;;;;;;;;;;;;;;;;EAIJ,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAEzD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;QAXlC;;;WAGG;;;;;;;;;;;;;;;;;;;;;;;QAHH;;;WAGG;;;;;;;;;;;;;;;;;;;;;IAeH;;OAEG;;EAIJ,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"modularChangeFormat.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeFormat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAsB,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,KAAK,gBAAgB,EAAqB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EACN,KAAK,sBAAsB,EAG3B,MAAM,qBAAqB,CAAC;AAK7B,eAAO,MAAM,sBAAsB,uDAEjC,CAAC;AAEH,eAAO,MAAM,mBAAmB,2aAG9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,QAAA,MAAM,kBAAkB;;;;EAUvB,CAAC;AAEF,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,OAAO,kBAAkB,CAAC;IAC5E;;OAEG;IACH,MAAM,EAAE,sBAAsB,CAAC;CAC/B;AAED,QAAA,MAAM,qBAAqB;;;;GAAiC,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAUzE,eAAO,MAAM,oBAAoB;;;;;;;;;EAMhC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE,eAAO,MAAM,mBAAmB;;;EAM/B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE;;GAEG;AACH,eAAO,MAAM,gBAAgB,qCAA6C,CAAC;AAE3E,eAAO,MAAM,YAAY,sKAOxB,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AAEvD,eAAO,MAAM,kBAAkB,mtBAM9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,eAAO,MAAM,aAAa;;IAGxB;;;OAGG;;;;;;;;;;;;;;;;;;;;EAIJ,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;AAEzD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;QAXlC;;;WAGG;;;;;;;;;;;;;;;;;;;;;;;QAHH;;;WAGG;;;;;;;;;;;;;;;;;;;;;IAiBH;;OAEG;;EAIJ,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -61,6 +61,8 @@ export const EncodedModularChangeset = Type.Object({
61
61
  maxId: Type.Optional(ChangesetLocalIdSchema),
62
62
  changes: EncodedFieldChangeMap,
63
63
  revisions: Type.ReadonlyOptional(Type.Array(EncodedRevisionInfo)),
64
+ // TODO#8574: separating `builds` and `refreshers` here means that we encode their `EncodedBuilds.trees` separately.
65
+ // This can lead to a less efficient wire representation because of duplicated schema/shape information.
64
66
  builds: Type.Optional(EncodedBuilds),
65
67
  refreshers: Type.Optional(EncodedBuilds),
66
68
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"modularChangeFormat.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeFormat.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 ObjectOptions, type Static, Type } from \"@sinclair/typebox\";\n\nimport { type ChangesetLocalId, RevisionTagSchema, schemaFormat } from \"../../core/index.js\";\nimport {\n\ttype JsonCompatibleReadOnly,\n\tJsonCompatibleReadOnlySchema,\n\tbrandedNumberType,\n} from \"../../util/index.js\";\nimport { EncodedFieldBatch } from \"../chunked-forest/index.js\";\n\nconst noAdditionalProps: ObjectOptions = { additionalProperties: false };\n\nexport const ChangesetLocalIdSchema = brandedNumberType<ChangesetLocalId>({\n\tmultipleOf: 1,\n});\n\nexport const EncodedChangeAtomId = Type.Union([\n\tType.Tuple([ChangesetLocalIdSchema, RevisionTagSchema]),\n\tChangesetLocalIdSchema,\n]);\nexport type EncodedChangeAtomId = Static<typeof EncodedChangeAtomId>;\n\nconst EncodedFieldChange = Type.Object(\n\t{\n\t\tfieldKey: schemaFormat.FieldKeySchema,\n\t\tfieldKind: schemaFormat.FieldKindIdentifierSchema,\n\t\t// Implementation note: node and field change encoding is mutually recursive.\n\t\t// This field marks a boundary in that recursion to avoid constructing excessively complex\n\t\t// recursive types. Encoded changes are validated at this boundary at runtime--see modularChangeCodecs.ts.\n\t\tchange: JsonCompatibleReadOnlySchema,\n\t},\n\tnoAdditionalProps,\n);\n\nexport interface EncodedFieldChange extends Static<typeof EncodedFieldChange> {\n\t/**\n\t * Encoded in format selected by `fieldKind`\n\t */\n\tchange: JsonCompatibleReadOnly;\n}\n\nconst EncodedFieldChangeMap = Type.Array(EncodedFieldChange);\n\n/**\n * Format for encoding as json.\n *\n * This chooses to use lists of named objects instead of maps:\n * this choice is somewhat arbitrary, but avoids user data being used as object keys,\n * which can sometimes be an issue (for example handling that for \"__proto__\" can require care).\n */\nexport type EncodedFieldChangeMap = Static<typeof EncodedFieldChangeMap>;\n\nconst EncodedNodeExistsConstraint = Type.Object(\n\t{\n\t\tviolated: Type.Boolean(),\n\t},\n\tnoAdditionalProps,\n);\ntype EncodedNodeExistsConstraint = Static<typeof EncodedNodeExistsConstraint>;\n\nexport const EncodedNodeChangeset = Type.Object(\n\t{\n\t\tfieldChanges: Type.Optional(EncodedFieldChangeMap),\n\t\tnodeExistsConstraint: Type.Optional(EncodedNodeExistsConstraint),\n\t},\n\tnoAdditionalProps,\n);\n\n/**\n * Format for encoding as json.\n */\nexport type EncodedNodeChangeset = Static<typeof EncodedNodeChangeset>;\n\nexport const EncodedRevisionInfo = Type.Object(\n\t{\n\t\trevision: Type.Readonly(RevisionTagSchema),\n\t\trollbackOf: Type.ReadonlyOptional(RevisionTagSchema),\n\t},\n\tnoAdditionalProps,\n);\n\nexport type EncodedRevisionInfo = Static<typeof EncodedRevisionInfo>;\n\n/**\n * Index of field in an EncodedFieldBatch.\n */\nexport const EncodedTreeIndex = Type.Number({ multipleOf: 1, minimum: 0 });\n\nexport const CommitBuilds = Type.Array(\n\tType.Tuple([\n\t\t// ID for first node\n\t\tChangesetLocalIdSchema,\n\t\t// Index for a TreeChunk that represents all the nodes\n\t\tEncodedTreeIndex,\n\t]),\n);\nexport type CommitBuilds = Static<typeof CommitBuilds>;\n\nexport const EncodedBuildsArray = Type.Array(\n\tType.Union([\n\t\tType.Tuple([CommitBuilds, RevisionTagSchema]),\n\t\t// Revision is omitted when undefined\n\t\tType.Tuple([CommitBuilds]),\n\t]),\n);\n\nexport type EncodedBuildsArray = Static<typeof EncodedBuildsArray>;\n\nexport const EncodedBuilds = Type.Object(\n\t{\n\t\tbuilds: EncodedBuildsArray,\n\t\t/**\n\t\t * Fields indexed by the EncodedTreeIndexes above.\n\t\t * TODO: Strongly typing this here may result in redundant schema validation of this data.\n\t\t */\n\t\ttrees: EncodedFieldBatch,\n\t},\n\tnoAdditionalProps,\n);\n\nexport type EncodedBuilds = Static<typeof EncodedBuilds>;\n\nexport const EncodedModularChangeset = Type.Object(\n\t{\n\t\tmaxId: Type.Optional(ChangesetLocalIdSchema),\n\t\tchanges: EncodedFieldChangeMap,\n\t\trevisions: Type.ReadonlyOptional(Type.Array(EncodedRevisionInfo)),\n\t\tbuilds: Type.Optional(EncodedBuilds),\n\t\trefreshers: Type.Optional(EncodedBuilds),\n\t\t/**\n\t\t * The number of constraints within this changeset that are violated.\n\t\t */\n\t\tviolations: Type.Optional(Type.Number({ minimum: 0, multipleOf: 1 })),\n\t},\n\tnoAdditionalProps,\n);\n\nexport type EncodedModularChangeset = Static<typeof EncodedModularChangeset>;\n"]}
1
+ {"version":3,"file":"modularChangeFormat.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeFormat.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 ObjectOptions, type Static, Type } from \"@sinclair/typebox\";\n\nimport { type ChangesetLocalId, RevisionTagSchema, schemaFormat } from \"../../core/index.js\";\nimport {\n\ttype JsonCompatibleReadOnly,\n\tJsonCompatibleReadOnlySchema,\n\tbrandedNumberType,\n} from \"../../util/index.js\";\nimport { EncodedFieldBatch } from \"../chunked-forest/index.js\";\n\nconst noAdditionalProps: ObjectOptions = { additionalProperties: false };\n\nexport const ChangesetLocalIdSchema = brandedNumberType<ChangesetLocalId>({\n\tmultipleOf: 1,\n});\n\nexport const EncodedChangeAtomId = Type.Union([\n\tType.Tuple([ChangesetLocalIdSchema, RevisionTagSchema]),\n\tChangesetLocalIdSchema,\n]);\nexport type EncodedChangeAtomId = Static<typeof EncodedChangeAtomId>;\n\nconst EncodedFieldChange = Type.Object(\n\t{\n\t\tfieldKey: schemaFormat.FieldKeySchema,\n\t\tfieldKind: schemaFormat.FieldKindIdentifierSchema,\n\t\t// Implementation note: node and field change encoding is mutually recursive.\n\t\t// This field marks a boundary in that recursion to avoid constructing excessively complex\n\t\t// recursive types. Encoded changes are validated at this boundary at runtime--see modularChangeCodecs.ts.\n\t\tchange: JsonCompatibleReadOnlySchema,\n\t},\n\tnoAdditionalProps,\n);\n\nexport interface EncodedFieldChange extends Static<typeof EncodedFieldChange> {\n\t/**\n\t * Encoded in format selected by `fieldKind`\n\t */\n\tchange: JsonCompatibleReadOnly;\n}\n\nconst EncodedFieldChangeMap = Type.Array(EncodedFieldChange);\n\n/**\n * Format for encoding as json.\n *\n * This chooses to use lists of named objects instead of maps:\n * this choice is somewhat arbitrary, but avoids user data being used as object keys,\n * which can sometimes be an issue (for example handling that for \"__proto__\" can require care).\n */\nexport type EncodedFieldChangeMap = Static<typeof EncodedFieldChangeMap>;\n\nconst EncodedNodeExistsConstraint = Type.Object(\n\t{\n\t\tviolated: Type.Boolean(),\n\t},\n\tnoAdditionalProps,\n);\ntype EncodedNodeExistsConstraint = Static<typeof EncodedNodeExistsConstraint>;\n\nexport const EncodedNodeChangeset = Type.Object(\n\t{\n\t\tfieldChanges: Type.Optional(EncodedFieldChangeMap),\n\t\tnodeExistsConstraint: Type.Optional(EncodedNodeExistsConstraint),\n\t},\n\tnoAdditionalProps,\n);\n\n/**\n * Format for encoding as json.\n */\nexport type EncodedNodeChangeset = Static<typeof EncodedNodeChangeset>;\n\nexport const EncodedRevisionInfo = Type.Object(\n\t{\n\t\trevision: Type.Readonly(RevisionTagSchema),\n\t\trollbackOf: Type.ReadonlyOptional(RevisionTagSchema),\n\t},\n\tnoAdditionalProps,\n);\n\nexport type EncodedRevisionInfo = Static<typeof EncodedRevisionInfo>;\n\n/**\n * Index of field in an EncodedFieldBatch.\n */\nexport const EncodedTreeIndex = Type.Number({ multipleOf: 1, minimum: 0 });\n\nexport const CommitBuilds = Type.Array(\n\tType.Tuple([\n\t\t// ID for first node\n\t\tChangesetLocalIdSchema,\n\t\t// Index for a TreeChunk that represents all the nodes\n\t\tEncodedTreeIndex,\n\t]),\n);\nexport type CommitBuilds = Static<typeof CommitBuilds>;\n\nexport const EncodedBuildsArray = Type.Array(\n\tType.Union([\n\t\tType.Tuple([CommitBuilds, RevisionTagSchema]),\n\t\t// Revision is omitted when undefined\n\t\tType.Tuple([CommitBuilds]),\n\t]),\n);\n\nexport type EncodedBuildsArray = Static<typeof EncodedBuildsArray>;\n\nexport const EncodedBuilds = Type.Object(\n\t{\n\t\tbuilds: EncodedBuildsArray,\n\t\t/**\n\t\t * Fields indexed by the EncodedTreeIndexes above.\n\t\t * TODO: Strongly typing this here may result in redundant schema validation of this data.\n\t\t */\n\t\ttrees: EncodedFieldBatch,\n\t},\n\tnoAdditionalProps,\n);\n\nexport type EncodedBuilds = Static<typeof EncodedBuilds>;\n\nexport const EncodedModularChangeset = Type.Object(\n\t{\n\t\tmaxId: Type.Optional(ChangesetLocalIdSchema),\n\t\tchanges: EncodedFieldChangeMap,\n\t\trevisions: Type.ReadonlyOptional(Type.Array(EncodedRevisionInfo)),\n\t\t// TODO#8574: separating `builds` and `refreshers` here means that we encode their `EncodedBuilds.trees` separately.\n\t\t// This can lead to a less efficient wire representation because of duplicated schema/shape information.\n\t\tbuilds: Type.Optional(EncodedBuilds),\n\t\trefreshers: Type.Optional(EncodedBuilds),\n\t\t/**\n\t\t * The number of constraints within this changeset that are violated.\n\t\t */\n\t\tviolations: Type.Optional(Type.Number({ minimum: 0, multipleOf: 1 })),\n\t},\n\tnoAdditionalProps,\n);\n\nexport type EncodedModularChangeset = Static<typeof EncodedModularChangeset>;\n"]}
@@ -2,9 +2,11 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import type { ChangeAtomId, ChangeAtomIdMap, ChangesetLocalId, FieldKey, FieldKindIdentifier, RevisionInfo } from "../../core/index.js";
5
+ import type { BTree } from "@tylerbu/sorted-btree-es6";
6
+ import type { ChangeAtomId, ChangeAtomIdMap, ChangesetLocalId, FieldKey, FieldKindIdentifier, RevisionInfo, RevisionTag } from "../../core/index.js";
6
7
  import type { Brand } from "../../util/index.js";
7
8
  import type { TreeChunk } from "../chunked-forest/index.js";
9
+ import type { CrossFieldTarget } from "./crossFieldQueries.js";
8
10
  /**
9
11
  * @internal
10
12
  */
@@ -21,12 +23,53 @@ export interface ModularChangeset extends HasFieldChanges {
21
23
  */
22
24
  readonly revisions?: readonly RevisionInfo[];
23
25
  readonly fieldChanges: FieldChangeMap;
26
+ /**
27
+ * Maps from this changeset's canonical ID for a node (see comment on node aliases) to the changes for that node.
28
+ */
24
29
  readonly nodeChanges: ChangeAtomIdMap<NodeChangeset>;
30
+ /**
31
+ * Maps from this changeset's canonical ID for a node to the ID for the field which contains that node.
32
+ */
33
+ readonly nodeToParent: ChangeAtomIdMap<FieldId>;
34
+ /**
35
+ * Maps from a node ID to another ID for the same node.
36
+ * If a node ID used in this changeset has no entry in this table, then it is the canonical ID for that node.
37
+ * The aliases form a set of trees, where the root of each tree is a canonical ID.
38
+ *
39
+ * When composing changesets with different canonical IDs for the same node,
40
+ * one of those IDs becomes the canonical ID for the composition, while the other is added to this table as an alias.
41
+ *
42
+ * Node aliases are preserved when composing changesets so we can avoid having to find and update all changed node IDs
43
+ * in the field IDs in nodeToParent and crossFieldKeys.
44
+ */
45
+ readonly nodeAliases: ChangeAtomIdMap<NodeId>;
46
+ readonly crossFieldKeys: CrossFieldKeyTable;
25
47
  readonly constraintViolationCount?: number;
26
48
  readonly builds?: ChangeAtomIdMap<TreeChunk>;
27
49
  readonly destroys?: ChangeAtomIdMap<number>;
28
50
  readonly refreshers?: ChangeAtomIdMap<TreeChunk>;
29
51
  }
52
+ export type TupleBTree<K, V> = Brand<BTree<K, V>, "TupleBTree">;
53
+ export type CrossFieldKeyTable = TupleBTree<CrossFieldKeyRange, FieldId>;
54
+ export type CrossFieldKeyRange = readonly [
55
+ CrossFieldTarget,
56
+ RevisionTag | undefined,
57
+ ChangesetLocalId,
58
+ /**
59
+ * The length of this range.
60
+ * TODO: This does not need to be part of the key and could be part of the value instead.
61
+ */
62
+ number
63
+ ];
64
+ export type CrossFieldKey = readonly [
65
+ CrossFieldTarget,
66
+ RevisionTag | undefined,
67
+ ChangesetLocalId
68
+ ];
69
+ export interface FieldId {
70
+ readonly nodeId: NodeId | undefined;
71
+ readonly field: FieldKey;
72
+ }
30
73
  /**
31
74
  * @internal
32
75
  */
@@ -1 +1 @@
1
- {"version":3,"file":"modularChangeTypes.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACX,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,mBAAmB,EACnB,YAAY,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACxD;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IACrD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,eAAe;IACrD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC5C;AAED,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,YAAY,CAAC,EAAE,cAAc,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,MAAM,EAAE,cAAc,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"modularChangeTypes.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EACX,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACxD;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAErD;;OAEG;IAEH,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAEhD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC5C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AAChE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;AACzE,MAAM,MAAM,kBAAkB,GAAG,SAAS;IACzC,gBAAgB;IAChB,WAAW,GAAG,SAAS;IACvB,gBAAgB;IAChB;;;OAGG;IACH,MAAM;CACN,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,SAAS;IACpC,gBAAgB;IAChB,WAAW,GAAG,SAAS;IACvB,gBAAgB;CAChB,CAAC;AAEF,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,eAAe;IACrD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC5C;AAED,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,YAAY,CAAC,EAAE,cAAc,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,MAAM,EAAE,cAAc,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"modularChangeTypes.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeTypes.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 {\n\tChangeAtomId,\n\tChangeAtomIdMap,\n\tChangesetLocalId,\n\tFieldKey,\n\tFieldKindIdentifier,\n\tRevisionInfo,\n} from \"../../core/index.js\";\nimport type { Brand } from \"../../util/index.js\";\nimport type { TreeChunk } from \"../chunked-forest/index.js\";\n\n/**\n * @internal\n */\nexport interface ModularChangeset extends HasFieldChanges {\n\t/**\n\t * The numerically highest `ChangesetLocalId` used in this changeset.\n\t * If undefined then this changeset contains no IDs.\n\t */\n\treadonly maxId?: ChangesetLocalId;\n\t/**\n\t * The revisions included in this changeset, ordered temporally (oldest to newest).\n\t * Undefined for anonymous changesets.\n\t * Should never be empty.\n\t */\n\treadonly revisions?: readonly RevisionInfo[];\n\treadonly fieldChanges: FieldChangeMap;\n\treadonly nodeChanges: ChangeAtomIdMap<NodeChangeset>;\n\treadonly constraintViolationCount?: number;\n\treadonly builds?: ChangeAtomIdMap<TreeChunk>;\n\treadonly destroys?: ChangeAtomIdMap<number>;\n\treadonly refreshers?: ChangeAtomIdMap<TreeChunk>;\n}\n\n/**\n * @internal\n */\nexport interface NodeExistsConstraint {\n\tviolated: boolean;\n}\n\n/**\n * Changeset for a subtree rooted at a specific node.\n * @internal\n */\nexport interface NodeChangeset extends HasFieldChanges {\n\tnodeExistsConstraint?: NodeExistsConstraint;\n}\n\nexport type NodeId = ChangeAtomId;\n\n/**\n * @internal\n */\nexport interface HasFieldChanges {\n\tfieldChanges?: FieldChangeMap;\n}\n\n/**\n * @internal\n */\nexport type FieldChangeMap = Map<FieldKey, FieldChange>;\n\n/**\n * @internal\n */\nexport interface FieldChange {\n\tfieldKind: FieldKindIdentifier;\n\tchange: FieldChangeset;\n}\n\n/**\n * @internal\n */\nexport type FieldChangeset = Brand<unknown, \"FieldChangeset\">;\n"]}
1
+ {"version":3,"file":"modularChangeTypes.js","sourceRoot":"","sources":["../../../src/feature-libraries/modular-schema/modularChangeTypes.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 { BTree } from \"@tylerbu/sorted-btree-es6\";\nimport type {\n\tChangeAtomId,\n\tChangeAtomIdMap,\n\tChangesetLocalId,\n\tFieldKey,\n\tFieldKindIdentifier,\n\tRevisionInfo,\n\tRevisionTag,\n} from \"../../core/index.js\";\nimport type { Brand } from \"../../util/index.js\";\nimport type { TreeChunk } from \"../chunked-forest/index.js\";\nimport type { CrossFieldTarget } from \"./crossFieldQueries.js\";\n\n/**\n * @internal\n */\nexport interface ModularChangeset extends HasFieldChanges {\n\t/**\n\t * The numerically highest `ChangesetLocalId` used in this changeset.\n\t * If undefined then this changeset contains no IDs.\n\t */\n\treadonly maxId?: ChangesetLocalId;\n\t/**\n\t * The revisions included in this changeset, ordered temporally (oldest to newest).\n\t * Undefined for anonymous changesets.\n\t * Should never be empty.\n\t */\n\treadonly revisions?: readonly RevisionInfo[];\n\treadonly fieldChanges: FieldChangeMap;\n\n\t/**\n\t * Maps from this changeset's canonical ID for a node (see comment on node aliases) to the changes for that node.\n\t */\n\treadonly nodeChanges: ChangeAtomIdMap<NodeChangeset>;\n\n\t/**\n\t * Maps from this changeset's canonical ID for a node to the ID for the field which contains that node.\n\t */\n\t// TODO: Should this be merged with `nodeChanges`?\n\treadonly nodeToParent: ChangeAtomIdMap<FieldId>;\n\n\t/**\n\t * Maps from a node ID to another ID for the same node.\n\t * If a node ID used in this changeset has no entry in this table, then it is the canonical ID for that node.\n\t * The aliases form a set of trees, where the root of each tree is a canonical ID.\n\t *\n\t * When composing changesets with different canonical IDs for the same node,\n\t * one of those IDs becomes the canonical ID for the composition, while the other is added to this table as an alias.\n\t *\n\t * Node aliases are preserved when composing changesets so we can avoid having to find and update all changed node IDs\n\t * in the field IDs in nodeToParent and crossFieldKeys.\n\t */\n\treadonly nodeAliases: ChangeAtomIdMap<NodeId>;\n\treadonly crossFieldKeys: CrossFieldKeyTable;\n\treadonly constraintViolationCount?: number;\n\treadonly builds?: ChangeAtomIdMap<TreeChunk>;\n\treadonly destroys?: ChangeAtomIdMap<number>;\n\treadonly refreshers?: ChangeAtomIdMap<TreeChunk>;\n}\n\nexport type TupleBTree<K, V> = Brand<BTree<K, V>, \"TupleBTree\">;\nexport type CrossFieldKeyTable = TupleBTree<CrossFieldKeyRange, FieldId>;\nexport type CrossFieldKeyRange = readonly [\n\tCrossFieldTarget,\n\tRevisionTag | undefined,\n\tChangesetLocalId,\n\t/**\n\t * The length of this range.\n\t * TODO: This does not need to be part of the key and could be part of the value instead.\n\t */\n\tnumber,\n];\n\nexport type CrossFieldKey = readonly [\n\tCrossFieldTarget,\n\tRevisionTag | undefined,\n\tChangesetLocalId,\n];\n\nexport interface FieldId {\n\treadonly nodeId: NodeId | undefined;\n\treadonly field: FieldKey;\n}\n\n/**\n * @internal\n */\nexport interface NodeExistsConstraint {\n\tviolated: boolean;\n}\n\n/**\n * Changeset for a subtree rooted at a specific node.\n * @internal\n */\nexport interface NodeChangeset extends HasFieldChanges {\n\tnodeExistsConstraint?: NodeExistsConstraint;\n}\n\nexport type NodeId = ChangeAtomId;\n\n/**\n * @internal\n */\nexport interface HasFieldChanges {\n\tfieldChanges?: FieldChangeMap;\n}\n\n/**\n * @internal\n */\nexport type FieldChangeMap = Map<FieldKey, FieldChange>;\n\n/**\n * @internal\n */\nexport interface FieldChange {\n\tfieldKind: FieldKindIdentifier;\n\tchange: FieldChangeset;\n}\n\n/**\n * @internal\n */\nexport type FieldChangeset = Brand<unknown, \"FieldChangeset\">;\n"]}
@@ -4,6 +4,5 @@
4
4
  */
5
5
  export { MockNodeKeyManager } from "./mockNodeKeyManager.js";
6
6
  export { compareLocalNodeKeys, type LocalNodeKey, type StableNodeKey, nodeKeyTreeIdentifier, } from "./nodeKey.js";
7
- export { NodeKeyIndex } from "./nodeKeyIndex.js";
8
7
  export { createNodeKeyManager, isStableNodeKey, type NodeKeyManager, } from "./nodeKeyManager.js";
9
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/node-key/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACN,oBAAoB,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,qBAAqB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACN,oBAAoB,EACpB,eAAe,EACf,KAAK,cAAc,GACnB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/node-key/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACN,oBAAoB,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,qBAAqB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,oBAAoB,EACpB,eAAe,EACf,KAAK,cAAc,GACnB,MAAM,qBAAqB,CAAC"}
@@ -4,6 +4,5 @@
4
4
  */
5
5
  export { MockNodeKeyManager } from "./mockNodeKeyManager.js";
6
6
  export { compareLocalNodeKeys, nodeKeyTreeIdentifier, } from "./nodeKey.js";
7
- export { NodeKeyIndex } from "./nodeKeyIndex.js";
8
7
  export { createNodeKeyManager, isStableNodeKey, } from "./nodeKeyManager.js";
9
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/feature-libraries/node-key/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACN,oBAAoB,EAGpB,qBAAqB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACN,oBAAoB,EACpB,eAAe,GAEf,MAAM,qBAAqB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { MockNodeKeyManager } from \"./mockNodeKeyManager.js\";\nexport {\n\tcompareLocalNodeKeys,\n\ttype LocalNodeKey,\n\ttype StableNodeKey,\n\tnodeKeyTreeIdentifier,\n} from \"./nodeKey.js\";\nexport { NodeKeyIndex } from \"./nodeKeyIndex.js\";\nexport {\n\tcreateNodeKeyManager,\n\tisStableNodeKey,\n\ttype NodeKeyManager,\n} from \"./nodeKeyManager.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/feature-libraries/node-key/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACN,oBAAoB,EAGpB,qBAAqB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,oBAAoB,EACpB,eAAe,GAEf,MAAM,qBAAqB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { MockNodeKeyManager } from \"./mockNodeKeyManager.js\";\nexport {\n\tcompareLocalNodeKeys,\n\ttype LocalNodeKey,\n\ttype StableNodeKey,\n\tnodeKeyTreeIdentifier,\n} from \"./nodeKey.js\";\nexport {\n\tcreateNodeKeyManager,\n\tisStableNodeKey,\n\ttype NodeKeyManager,\n} from \"./nodeKeyManager.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"optionalField.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalField.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAGN,KAAK,gBAAgB,EAGrB,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAKhB,MAAM,qBAAqB,CAAC;AAU7B,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAOhB,KAAK,OAAO,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAGX,iBAAiB,EACjB,UAAU,EAEV,MAAM,+BAA+B,CAAC;AAGvC,MAAM,WAAW,YAAY,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1C,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC;IAChC,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC7B,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,IAAI,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAW,CAAC,CAAC,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAI1B;IAEG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC;IAQvB,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI;IAQzC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,GAAG,SAAS;IAMlC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO;IAI5B,MAAM,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO;IAM/B,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC;IAgB5B,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC;IAGrB,OAAO,IAAI,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAsB3C,IAAW,IAAI,IAAI,MAAM,CAExB;CACD;AAED,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,CAAC,iBAAiB,CA4TvE,CAAC;AA8GF,wBAAgB,cAAc,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,CAM5F;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW,CAAC,iBAAiB,CAAC;IAC1E;;;;;;OAMG;IACH,GAAG,CACF,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE;QACJ,IAAI,EAAE,gBAAgB,CAAC;QACvB,MAAM,EAAE,gBAAgB,CAAC;KACzB,GACC,iBAAiB,CAAC;IAErB;;;;OAIG;IACH,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;CAClE;AAED,eAAO,MAAM,mBAAmB,EAAE,mBAkCjC,CAAC;AAEF,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,OAAO,GACrB,iBAAiB,CAkDnB;AAED,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,CACrD,iBAAiB,EACjB,mBAAmB,CAiBnB,CAAC"}
1
+ {"version":3,"file":"optionalField.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/optional-field/optionalField.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAGN,KAAK,gBAAgB,EAGrB,KAAK,iBAAiB,EAEtB,KAAK,WAAW,EAKhB,MAAM,qBAAqB,CAAC;AAU7B,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAOhB,KAAK,OAAO,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAGX,iBAAiB,EACjB,UAAU,EAEV,MAAM,+BAA+B,CAAC;AAGvC,MAAM,WAAW,YAAY,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1C,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC;IAChC,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC7B,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,IAAI,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAW,CAAC,CAAC,CAAE,YAAW,YAAY,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAI1B;IAEG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC;IAQvB,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI;IAQzC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,GAAG,SAAS;IAMlC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO;IAI5B,MAAM,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO;IAM/B,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC;IAgB5B,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC;IAGrB,OAAO,IAAI,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAsB3C,IAAW,IAAI,IAAI,MAAM,CAExB;CACD;AAED,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,CAAC,iBAAiB,CA4TvE,CAAC;AA8GF,wBAAgB,cAAc,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,CAM5F;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW,CAAC,iBAAiB,CAAC;IAC1E;;;;;;OAMG;IACH,GAAG,CACF,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE;QACJ,IAAI,EAAE,gBAAgB,CAAC;QACvB,MAAM,EAAE,gBAAgB,CAAC;KACzB,GACC,iBAAiB,CAAC;IAErB;;;;OAIG;IACH,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,gBAAgB,GAAG,iBAAiB,CAAC;CAClE;AAED,eAAO,MAAM,mBAAmB,EAAE,mBAkCjC,CAAC;AAEF,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,OAAO,GACrB,iBAAiB,CAkDnB;AAED,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,CACrD,iBAAiB,EACjB,mBAAmB,CAkBnB,CAAC"}
@@ -485,6 +485,7 @@ export const optionalChangeHandler = {
485
485
  change.valueReplace === undefined,
486
486
  getNestedChanges,
487
487
  createEmpty: () => ({ moves: [], childChanges: [] }),
488
+ getCrossFieldKeys: (_change) => [],
488
489
  };
489
490
  function getNestedChanges(change) {
490
491
  return change.childChanges.map(([register, nodeId]) => [
@@ -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 ChangeAtomIdMap,\n\ttype ChangesetLocalId,\n\ttype DeltaDetachedNodeChanges,\n\ttype DeltaDetachedNodeId,\n\ttype DeltaFieldChanges,\n\ttype DeltaMark,\n\ttype RevisionTag,\n\tareEqualChangeAtomIds,\n\tmakeChangeAtomId,\n\treplaceAtomRevisions,\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\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} 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(change1FieldSrc, change);\n\t\t\t\t} else {\n\t\t\t\t\tchildChanges2ByOriginalId.set(\"self\", 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): OptionalChangeset => {\n\t\tconst { moves, childChanges } = 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 (change.valueReplace !== undefined) {\n\t\t\tconst effectfulDst = getEffectfulDst(change.valueReplace);\n\t\t\tif (effectfulDst !== undefined) {\n\t\t\t\tinvertIdMap.set(\"self\", change.valueReplace.dst);\n\t\t\t}\n\t\t\tif (change.valueReplace.src !== undefined) {\n\t\t\t\tinvertIdMap.set(change.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 (change.valueReplace !== undefined) {\n\t\t\tif (isReplaceEffectful(change.valueReplace)) {\n\t\t\t\tconst replace: Mutable<Replace> =\n\t\t\t\t\tchange.valueReplace.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()),\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 ? change.valueReplace.src : makeChangeAtomId(genId.allocate()),\n\t\t\t\t\t\t\t};\n\t\t\t\tif (change.valueReplace.isEmpty === false) {\n\t\t\t\t\treplace.src = change.valueReplace.dst;\n\t\t\t\t}\n\t\t\t\tinverted.valueReplace = replace;\n\t\t\t} else if (!isRollback && change.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()),\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\toldRevisions: Set<RevisionTag | undefined>,\n\t\tnewRevision: RevisionTag | undefined,\n\t): OptionalChangeset => {\n\t\tconst valueReplace = replaceReplaceRevisions(\n\t\t\tchange.valueReplace,\n\t\t\toldRevisions,\n\t\t\tnewRevision,\n\t\t);\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, oldRevisions, newRevision),\n\t\t\t\treplaceAtomRevisions(childChange, oldRevisions, newRevision),\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([\n\t\t\t\treplaceAtomRevisions(src, oldRevisions, newRevision),\n\t\t\t\treplaceAtomRevisions(dst, oldRevisions, newRevision),\n\t\t\t]);\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\nfunction replaceReplaceRevisions(\n\treplace: Replace | undefined,\n\toldRevisions: Set<RevisionTag | undefined>,\n\tnewRevision: RevisionTag | undefined,\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: replaceAtomRevisions(replace.dst, oldRevisions, newRevision),\n\t};\n\n\tif (replace.src !== undefined) {\n\t\tupdated.src = replaceRegisterRevisions(replace.src, oldRevisions, newRevision);\n\t}\n\n\treturn updated;\n}\n\nfunction replaceRegisterRevisions(\n\tregister: RegisterId,\n\toldRevisions: Set<RevisionTag | undefined>,\n\tnewRevision: RevisionTag | undefined,\n): RegisterId {\n\treturn register === \"self\"\n\t\t? register\n\t\t: replaceAtomRevisions(register, oldRevisions, newRevision);\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 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 replaces the field with `newContent`\n\t * @param newContent - the new content for the field\n\t * @param wasEmpty - whether the field is empty when creating this change\n\t * @param changeId - the ID associated with the replacement of the current content.\n\t * @param buildId - the ID associated with the creation of the `newContent`.\n\t */\n\tset(\n\t\twasEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangesetLocalId;\n\t\t\tdetach: ChangesetLocalId;\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 changeId - the ID associated with the detach.\n\t */\n\tclear(wasEmpty: boolean, id: ChangesetLocalId): OptionalChangeset;\n}\n\nexport const optionalFieldEditor: OptionalFieldEditor = {\n\tset: (\n\t\twasEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangesetLocalId;\n\t\t\t// Should be interpreted as a set of an empty field if undefined.\n\t\t\tdetach: ChangesetLocalId;\n\t\t},\n\t): OptionalChangeset => ({\n\t\tmoves: [],\n\t\tchildChanges: [],\n\t\tvalueReplace: {\n\t\t\tisEmpty: wasEmpty,\n\t\t\tsrc: { localId: ids.fill },\n\t\t\tdst: { localId: ids.detach },\n\t\t},\n\t}),\n\n\tclear: (wasEmpty: boolean, detachId: ChangesetLocalId): OptionalChangeset => ({\n\t\tmoves: [],\n\t\tchildChanges: [],\n\t\tvalueReplace: {\n\t\t\tisEmpty: wasEmpty,\n\t\t\tdst: { localId: detachId },\n\t\t},\n\t}),\n\n\tbuildChildChange: (index: number, childChange: NodeId): OptionalChangeset => {\n\t\tassert(index === 0, 0x404 /* Optional fields only support a single child node */);\n\t\treturn {\n\t\t\tmoves: [],\n\t\t\tchildChanges: [[\"self\", childChange]],\n\t\t};\n\t},\n};\n\nexport function optionalFieldIntoDelta(\n\tchange: OptionalChangeset,\n\tdeltaFromChild: ToDelta,\n): DeltaFieldChanges {\n\tconst delta: Mutable<DeltaFieldChanges> = {};\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\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} else {\n\t\t\t\tmark.fields = childDelta;\n\t\t\t\tmarkIsANoop = false;\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 = [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};\n\nfunction getNestedChanges(change: OptionalChangeset): [NodeId, number | undefined][] {\n\treturn change.childChanges.map(([register, nodeId]) => [\n\t\tnodeId,\n\t\tregister === \"self\" ? 0 : undefined,\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"]}
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 ChangeAtomIdMap,\n\ttype ChangesetLocalId,\n\ttype DeltaDetachedNodeChanges,\n\ttype DeltaDetachedNodeId,\n\ttype DeltaFieldChanges,\n\ttype DeltaMark,\n\ttype RevisionTag,\n\tareEqualChangeAtomIds,\n\tmakeChangeAtomId,\n\treplaceAtomRevisions,\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\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} 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(change1FieldSrc, change);\n\t\t\t\t} else {\n\t\t\t\t\tchildChanges2ByOriginalId.set(\"self\", 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): OptionalChangeset => {\n\t\tconst { moves, childChanges } = 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 (change.valueReplace !== undefined) {\n\t\t\tconst effectfulDst = getEffectfulDst(change.valueReplace);\n\t\t\tif (effectfulDst !== undefined) {\n\t\t\t\tinvertIdMap.set(\"self\", change.valueReplace.dst);\n\t\t\t}\n\t\t\tif (change.valueReplace.src !== undefined) {\n\t\t\t\tinvertIdMap.set(change.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 (change.valueReplace !== undefined) {\n\t\t\tif (isReplaceEffectful(change.valueReplace)) {\n\t\t\t\tconst replace: Mutable<Replace> =\n\t\t\t\t\tchange.valueReplace.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()),\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 ? change.valueReplace.src : makeChangeAtomId(genId.allocate()),\n\t\t\t\t\t\t\t};\n\t\t\t\tif (change.valueReplace.isEmpty === false) {\n\t\t\t\t\treplace.src = change.valueReplace.dst;\n\t\t\t\t}\n\t\t\t\tinverted.valueReplace = replace;\n\t\t\t} else if (!isRollback && change.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()),\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\toldRevisions: Set<RevisionTag | undefined>,\n\t\tnewRevision: RevisionTag | undefined,\n\t): OptionalChangeset => {\n\t\tconst valueReplace = replaceReplaceRevisions(\n\t\t\tchange.valueReplace,\n\t\t\toldRevisions,\n\t\t\tnewRevision,\n\t\t);\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, oldRevisions, newRevision),\n\t\t\t\treplaceAtomRevisions(childChange, oldRevisions, newRevision),\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([\n\t\t\t\treplaceAtomRevisions(src, oldRevisions, newRevision),\n\t\t\t\treplaceAtomRevisions(dst, oldRevisions, newRevision),\n\t\t\t]);\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\nfunction replaceReplaceRevisions(\n\treplace: Replace | undefined,\n\toldRevisions: Set<RevisionTag | undefined>,\n\tnewRevision: RevisionTag | undefined,\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: replaceAtomRevisions(replace.dst, oldRevisions, newRevision),\n\t};\n\n\tif (replace.src !== undefined) {\n\t\tupdated.src = replaceRegisterRevisions(replace.src, oldRevisions, newRevision);\n\t}\n\n\treturn updated;\n}\n\nfunction replaceRegisterRevisions(\n\tregister: RegisterId,\n\toldRevisions: Set<RevisionTag | undefined>,\n\tnewRevision: RevisionTag | undefined,\n): RegisterId {\n\treturn register === \"self\"\n\t\t? register\n\t\t: replaceAtomRevisions(register, oldRevisions, newRevision);\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 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 replaces the field with `newContent`\n\t * @param newContent - the new content for the field\n\t * @param wasEmpty - whether the field is empty when creating this change\n\t * @param changeId - the ID associated with the replacement of the current content.\n\t * @param buildId - the ID associated with the creation of the `newContent`.\n\t */\n\tset(\n\t\twasEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangesetLocalId;\n\t\t\tdetach: ChangesetLocalId;\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 changeId - the ID associated with the detach.\n\t */\n\tclear(wasEmpty: boolean, id: ChangesetLocalId): OptionalChangeset;\n}\n\nexport const optionalFieldEditor: OptionalFieldEditor = {\n\tset: (\n\t\twasEmpty: boolean,\n\t\tids: {\n\t\t\tfill: ChangesetLocalId;\n\t\t\t// Should be interpreted as a set of an empty field if undefined.\n\t\t\tdetach: ChangesetLocalId;\n\t\t},\n\t): OptionalChangeset => ({\n\t\tmoves: [],\n\t\tchildChanges: [],\n\t\tvalueReplace: {\n\t\t\tisEmpty: wasEmpty,\n\t\t\tsrc: { localId: ids.fill },\n\t\t\tdst: { localId: ids.detach },\n\t\t},\n\t}),\n\n\tclear: (wasEmpty: boolean, detachId: ChangesetLocalId): OptionalChangeset => ({\n\t\tmoves: [],\n\t\tchildChanges: [],\n\t\tvalueReplace: {\n\t\t\tisEmpty: wasEmpty,\n\t\t\tdst: { localId: detachId },\n\t\t},\n\t}),\n\n\tbuildChildChange: (index: number, childChange: NodeId): OptionalChangeset => {\n\t\tassert(index === 0, 0x404 /* Optional fields only support a single child node */);\n\t\treturn {\n\t\t\tmoves: [],\n\t\t\tchildChanges: [[\"self\", childChange]],\n\t\t};\n\t},\n};\n\nexport function optionalFieldIntoDelta(\n\tchange: OptionalChangeset,\n\tdeltaFromChild: ToDelta,\n): DeltaFieldChanges {\n\tconst delta: Mutable<DeltaFieldChanges> = {};\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\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} else {\n\t\t\t\tmark.fields = childDelta;\n\t\t\t\tmarkIsANoop = false;\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 = [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): [NodeId, number | undefined][] {\n\treturn change.childChanges.map(([register, nodeId]) => [\n\t\tnodeId,\n\t\tregister === \"self\" ? 0 : undefined,\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"]}
@@ -13,7 +13,7 @@ export { MarkListFactory } from "./markListFactory.js";
13
13
  export { rebase } from "./rebase.js";
14
14
  export { invert } from "./invert.js";
15
15
  export { compose } from "./compose.js";
16
- export { getInputLength, isDetach, newCrossFieldTable, type CrossFieldTable, cloneMark, extractMarkEffect, } from "./utils.js";
16
+ export { getInputLength, isDetach, cloneMark, extractMarkEffect, } from "./utils.js";
17
17
  export { isMoveMark, type MoveMark, type MoveEffectTable, type MoveEffect, } from "./moveEffectTable.js";
18
18
  export { relevantRemovedRoots } from "./relevantRemovedRoots.js";
19
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACX,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,cAAc,EACd,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,SAAS,IAAI,SAAS,EACtB,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,aAAa,EACb,QAAQ,EACR,eAAe,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACN,KAAK,0BAA0B,EAC/B,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,KAAK,qBAAqB,EAC1B,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACN,cAAc,EACd,QAAQ,EACR,kBAAkB,EAClB,KAAK,eAAe,EACpB,SAAS,EACT,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,UAAU,GACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACX,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,cAAc,EACd,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,SAAS,IAAI,SAAS,EACtB,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,aAAa,EACb,QAAQ,EACR,eAAe,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACN,KAAK,0BAA0B,EAC/B,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,KAAK,qBAAqB,EAC1B,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACN,cAAc,EACd,QAAQ,EACR,SAAS,EACT,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,UAAU,GACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -12,7 +12,7 @@ export { MarkListFactory } from "./markListFactory.js";
12
12
  export { rebase } from "./rebase.js";
13
13
  export { invert } from "./invert.js";
14
14
  export { compose } from "./compose.js";
15
- export { getInputLength, isDetach, newCrossFieldTable, cloneMark, extractMarkEffect, } from "./utils.js";
15
+ export { getInputLength, isDetach, cloneMark, extractMarkEffect, } from "./utils.js";
16
16
  export { isMoveMark, } from "./moveEffectTable.js";
17
17
  export { relevantRemovedRoots } from "./relevantRemovedRoots.js";
18
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAEN,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEN,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAA4B,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACN,cAAc,EACd,QAAQ,EACR,kBAAkB,EAElB,SAAS,EACT,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,UAAU,GAIV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport type {\n\tChangeset,\n\tRemove,\n\tDetach,\n\tHasMoveId,\n\tHasRevisionTag,\n\tInsert,\n\tMark,\n\tMarkList,\n\tMoveIn,\n\tMoveOut,\n\tCellCount as NodeCount,\n\tMoveId,\n\tAttach,\n\tNoopMark,\n\tCellId,\n\tHasMarkFields,\n\tCellMark,\n\tAttachAndDetach,\n} from \"./types.js\";\nexport { DetachIdOverrideType } from \"./formatV1.js\";\nexport {\n\ttype SequenceFieldChangeHandler,\n\tsequenceFieldChangeHandler,\n} from \"./sequenceFieldChangeHandler.js\";\nexport {\n\ttype SequenceChangeRebaser,\n\tsequenceFieldChangeRebaser,\n} from \"./sequenceFieldChangeRebaser.js\";\nexport { sequenceFieldChangeCodecFactory } from \"./sequenceFieldCodecs.js\";\nexport { sequenceFieldToDelta } from \"./sequenceFieldToDelta.js\";\nexport { type SequenceFieldEditor, sequenceFieldEditor } from \"./sequenceFieldEditor.js\";\nexport { MarkListFactory } from \"./markListFactory.js\";\nexport { rebase } from \"./rebase.js\";\nexport { invert } from \"./invert.js\";\nexport { compose } from \"./compose.js\";\nexport {\n\tgetInputLength,\n\tisDetach,\n\tnewCrossFieldTable,\n\ttype CrossFieldTable,\n\tcloneMark,\n\textractMarkEffect,\n} from \"./utils.js\";\nexport {\n\tisMoveMark,\n\ttype MoveMark,\n\ttype MoveEffectTable,\n\ttype MoveEffect,\n} from \"./moveEffectTable.js\";\n\nexport { relevantRemovedRoots } from \"./relevantRemovedRoots.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAEN,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEN,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAA4B,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACN,cAAc,EACd,QAAQ,EACR,SAAS,EACT,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,UAAU,GAIV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport type {\n\tChangeset,\n\tRemove,\n\tDetach,\n\tHasMoveId,\n\tHasRevisionTag,\n\tInsert,\n\tMark,\n\tMarkList,\n\tMoveIn,\n\tMoveOut,\n\tCellCount as NodeCount,\n\tMoveId,\n\tAttach,\n\tNoopMark,\n\tCellId,\n\tHasMarkFields,\n\tCellMark,\n\tAttachAndDetach,\n} from \"./types.js\";\nexport { DetachIdOverrideType } from \"./formatV1.js\";\nexport {\n\ttype SequenceFieldChangeHandler,\n\tsequenceFieldChangeHandler,\n} from \"./sequenceFieldChangeHandler.js\";\nexport {\n\ttype SequenceChangeRebaser,\n\tsequenceFieldChangeRebaser,\n} from \"./sequenceFieldChangeRebaser.js\";\nexport { sequenceFieldChangeCodecFactory } from \"./sequenceFieldCodecs.js\";\nexport { sequenceFieldToDelta } from \"./sequenceFieldToDelta.js\";\nexport { type SequenceFieldEditor, sequenceFieldEditor } from \"./sequenceFieldEditor.js\";\nexport { MarkListFactory } from \"./markListFactory.js\";\nexport { rebase } from \"./rebase.js\";\nexport { invert } from \"./invert.js\";\nexport { compose } from \"./compose.js\";\nexport {\n\tgetInputLength,\n\tisDetach,\n\tcloneMark,\n\textractMarkEffect,\n} from \"./utils.js\";\nexport {\n\tisMoveMark,\n\ttype MoveMark,\n\ttype MoveEffectTable,\n\ttype MoveEffect,\n} from \"./moveEffectTable.js\";\n\nexport { relevantRemovedRoots } from \"./relevantRemovedRoots.js\";\n"]}
@@ -129,7 +129,6 @@ function invertMark(mark, isRollback, crossFieldManager) {
129
129
  return applyMovedChanges(invertedMark, mark.revision, crossFieldManager);
130
130
  }
131
131
  case "AttachAndDetach": {
132
- // Which should get the child change? Don't want to invert twice
133
132
  const attach = {
134
133
  count: mark.count,
135
134
  cellId: mark.cellId,
@@ -202,6 +201,7 @@ function applyMovedChanges(mark, revision, manager) {
202
201
  return [mark1WithChanges, ...applyMovedChanges(mark2, revision, manager)];
203
202
  }
204
203
  if (entry.value !== undefined) {
204
+ manager.onMoveIn(entry.value);
205
205
  return [withNodeChange(mark, entry.value)];
206
206
  }
207
207
  return [mark];
@@ -1 +1 @@
1
- {"version":3,"file":"invert.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/invert.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, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport type { RevisionTag } from \"../../core/index.js\";\nimport { type IdAllocator, type Mutable, fail } from \"../../util/index.js\";\nimport {\n\ttype CrossFieldManager,\n\tCrossFieldTarget,\n\ttype NodeId,\n} from \"../modular-schema/index.js\";\n\nimport { MarkListFactory } from \"./markListFactory.js\";\nimport {\n\ttype CellId,\n\ttype CellMark,\n\ttype Changeset,\n\ttype Detach,\n\ttype Mark,\n\ttype MarkEffect,\n\ttype MarkList,\n\ttype MoveIn,\n\ttype MoveOut,\n\ttype NoopMark,\n\tNoopMarkType,\n\ttype Remove,\n} from \"./types.js\";\nimport {\n\textractMarkEffect,\n\tgetDetachOutputCellId,\n\tgetEndpoint,\n\tgetInputCellId,\n\tgetOutputCellId,\n\tisAttach,\n\tisDetach,\n\tisImpactful,\n\tnormalizeCellRename,\n\tsplitMark,\n\twithNodeChange,\n} from \"./utils.js\";\n\n/**\n * Inverts a given changeset.\n * @param change - The changeset to produce the inverse of.\n * @returns The inverse of the given `change` such that the inverse can be applied after `change`.\n *\n * WARNING! This implementation is incomplete:\n * - Support for slices is not implemented.\n */\nexport function invert(\n\tchange: Changeset,\n\tisRollback: boolean,\n\tgenId: IdAllocator,\n\tcrossFieldManager: CrossFieldManager,\n): Changeset {\n\treturn invertMarkList(change, isRollback, crossFieldManager as CrossFieldManager<NodeId>);\n}\n\nfunction invertMarkList(\n\tmarkList: MarkList,\n\tisRollback: boolean,\n\tcrossFieldManager: CrossFieldManager<NodeId>,\n): MarkList {\n\tconst inverseMarkList = new MarkListFactory();\n\n\tfor (const mark of markList) {\n\t\tconst inverseMarks = invertMark(mark, isRollback, crossFieldManager);\n\t\tinverseMarkList.push(...inverseMarks);\n\t}\n\n\treturn inverseMarkList.list;\n}\n\nfunction invertMark(\n\tmark: Mark,\n\tisRollback: boolean,\n\tcrossFieldManager: CrossFieldManager<NodeId>,\n): Mark[] {\n\tif (!isImpactful(mark)) {\n\t\tconst inputId = getInputCellId(mark);\n\t\treturn [invertNodeChangeOrSkip(mark.count, mark.changes, inputId)];\n\t}\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase NoopMarkType: {\n\t\t\treturn [mark];\n\t\t}\n\t\tcase \"Remove\": {\n\t\t\tassert(mark.revision !== undefined, 0x5a1 /* Unable to revert to undefined revision */);\n\t\t\tconst outputId = getOutputCellId(mark);\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tlet inverse: Mutable<Mark>;\n\t\t\tif (inputId === undefined) {\n\t\t\t\tinverse = {\n\t\t\t\t\ttype: \"Insert\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t\tcellId: outputId,\n\t\t\t\t\tcount: mark.count,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tinverse = {\n\t\t\t\t\ttype: \"Remove\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t\tcellId: outputId,\n\t\t\t\t\tcount: mark.count,\n\t\t\t\t};\n\t\t\t\tif (isRollback) {\n\t\t\t\t\tinverse.idOverride = inputId;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [withNodeChange(inverse, mark.changes)];\n\t\t}\n\t\tcase \"Insert\": {\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tassert(inputId !== undefined, 0x80c /* Active inserts should target empty cells */);\n\t\t\tconst removeMark: Mutable<CellMark<Remove>> = {\n\t\t\t\ttype: \"Remove\",\n\t\t\t\tcount: mark.count,\n\t\t\t\tid: inputId.localId,\n\t\t\t};\n\n\t\t\tif (isRollback) {\n\t\t\t\tremoveMark.idOverride = inputId;\n\t\t\t}\n\n\t\t\tconst inverse = withNodeChange(removeMark, mark.changes);\n\t\t\treturn [inverse];\n\t\t}\n\t\tcase \"MoveOut\": {\n\t\t\tif (mark.changes !== undefined) {\n\t\t\t\tassert(mark.count === 1, 0x6ed /* Mark with changes can only target a single cell */);\n\n\t\t\t\tconst endpoint = getEndpoint(mark);\n\t\t\t\tcrossFieldManager.set(\n\t\t\t\t\tCrossFieldTarget.Destination,\n\t\t\t\t\tendpoint.revision,\n\t\t\t\t\tendpoint.localId,\n\t\t\t\t\tmark.count,\n\t\t\t\t\tmark.changes,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst cellId = getDetachOutputCellId(mark) ?? {\n\t\t\t\trevision: mark.revision ?? fail(\"Revision must be defined\"),\n\t\t\t\tlocalId: mark.id,\n\t\t\t};\n\n\t\t\tconst moveIn: MoveIn = {\n\t\t\t\ttype: \"MoveIn\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\n\t\t\tif (mark.finalEndpoint !== undefined) {\n\t\t\t\tmoveIn.finalEndpoint = { localId: mark.finalEndpoint.localId };\n\t\t\t}\n\t\t\tlet effect: MarkEffect = moveIn;\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tif (inputId !== undefined) {\n\t\t\t\tconst detach: Mutable<Detach> = {\n\t\t\t\t\ttype: \"Remove\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t};\n\t\t\t\tif (isRollback) {\n\t\t\t\t\tdetach.idOverride = inputId;\n\t\t\t\t}\n\t\t\t\teffect = {\n\t\t\t\t\ttype: \"AttachAndDetach\",\n\t\t\t\t\tattach: moveIn,\n\t\t\t\t\tdetach,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn [{ ...effect, count: mark.count, cellId }];\n\t\t}\n\t\tcase \"MoveIn\": {\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tassert(inputId !== undefined, 0x89e /* Active move-ins should target empty cells */);\n\t\t\tconst invertedMark: Mutable<CellMark<MoveOut>> = {\n\t\t\t\ttype: \"MoveOut\",\n\t\t\t\tid: mark.id,\n\t\t\t\tcount: mark.count,\n\t\t\t};\n\n\t\t\tif (isRollback) {\n\t\t\t\tinvertedMark.idOverride = inputId;\n\t\t\t}\n\n\t\t\tif (mark.finalEndpoint) {\n\t\t\t\tinvertedMark.finalEndpoint = { localId: mark.finalEndpoint.localId };\n\t\t\t}\n\t\t\treturn applyMovedChanges(invertedMark, mark.revision, crossFieldManager);\n\t\t}\n\t\tcase \"AttachAndDetach\": {\n\t\t\t// Which should get the child change? Don't want to invert twice\n\t\t\tconst attach: Mark = {\n\t\t\t\tcount: mark.count,\n\t\t\t\tcellId: mark.cellId,\n\t\t\t\t...mark.attach,\n\t\t\t};\n\t\t\tconst idAfterAttach = getOutputCellId(attach);\n\n\t\t\t// We put `mark.changes` on the detach so that if it is a move source\n\t\t\t// the changes can be sent to the endpoint.\n\t\t\tconst detach: Mark = {\n\t\t\t\tcount: mark.count,\n\t\t\t\tcellId: idAfterAttach,\n\t\t\t\tchanges: mark.changes,\n\t\t\t\t...mark.detach,\n\t\t\t};\n\t\t\tconst attachInverses = invertMark(attach, isRollback, crossFieldManager);\n\t\t\tconst detachInverses = invertMark(detach, isRollback, crossFieldManager);\n\n\t\t\tif (detachInverses.length === 0) {\n\t\t\t\treturn attachInverses;\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tdetachInverses.length === 1,\n\t\t\t\t0x80d /* Only expected MoveIn marks to be split when inverting */,\n\t\t\t);\n\n\t\t\tlet detachInverse = detachInverses[0];\n\t\t\tassert(isAttach(detachInverse), 0x80e /* Inverse of a detach should be an attach */);\n\n\t\t\tconst inverses: Mark[] = [];\n\t\t\tfor (const attachInverse of attachInverses) {\n\t\t\t\tlet detachInverseCurr: Mark = detachInverse;\n\t\t\t\tif (attachInverse.count !== detachInverse.count) {\n\t\t\t\t\t[detachInverseCurr, detachInverse] = splitMark(detachInverse, attachInverse.count);\n\t\t\t\t}\n\n\t\t\t\tif (attachInverse.type === NoopMarkType) {\n\t\t\t\t\tif (attachInverse.changes !== undefined) {\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tdetachInverseCurr.changes === undefined,\n\t\t\t\t\t\t\t0x80f /* Unexpected node changes */,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdetachInverseCurr.changes = attachInverse.changes;\n\t\t\t\t\t}\n\t\t\t\t\tinverses.push(detachInverseCurr);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tassert(isDetach(attachInverse), 0x810 /* Inverse of an attach should be a detach */);\n\n\t\t\t\tconst inverted: Mark = {\n\t\t\t\t\ttype: \"AttachAndDetach\",\n\t\t\t\t\tcount: attachInverse.count,\n\t\t\t\t\tattach: extractMarkEffect(detachInverseCurr),\n\t\t\t\t\tdetach: extractMarkEffect(attachInverse),\n\t\t\t\t};\n\n\t\t\t\tif (detachInverseCurr.cellId !== undefined) {\n\t\t\t\t\tinverted.cellId = detachInverseCurr.cellId;\n\t\t\t\t}\n\n\t\t\t\tif (detachInverseCurr.changes !== undefined) {\n\t\t\t\t\tinverted.changes = detachInverseCurr.changes;\n\t\t\t\t}\n\n\t\t\t\tif (attachInverse.changes !== undefined) {\n\t\t\t\t\tassert(inverted.changes === undefined, 0x811 /* Unexpected node changes */);\n\t\t\t\t\tinverted.changes = attachInverse.changes;\n\t\t\t\t}\n\n\t\t\t\tinverses.push(normalizeCellRename(inverted));\n\t\t\t}\n\n\t\t\treturn inverses;\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\nfunction applyMovedChanges(\n\tmark: CellMark<MoveOut>,\n\trevision: RevisionTag | undefined,\n\tmanager: CrossFieldManager<NodeId>,\n): Mark[] {\n\t// Although this is a source mark, we query the destination because this was a destination mark during the original invert pass.\n\tconst entry = manager.get(CrossFieldTarget.Destination, revision, mark.id, mark.count, true);\n\n\tif (entry.length < mark.count) {\n\t\tconst [mark1, mark2] = splitMark(mark, entry.length);\n\t\tconst mark1WithChanges =\n\t\t\tentry.value !== undefined\n\t\t\t\t? withNodeChange<CellMark<MoveOut>, MoveOut>(mark1, entry.value)\n\t\t\t\t: mark1;\n\n\t\treturn [mark1WithChanges, ...applyMovedChanges(mark2, revision, manager)];\n\t}\n\n\tif (entry.value !== undefined) {\n\t\treturn [withNodeChange<CellMark<MoveOut>, MoveOut>(mark, entry.value)];\n\t}\n\n\treturn [mark];\n}\n\nfunction invertNodeChangeOrSkip(\n\tcount: number,\n\tchanges: NodeId | undefined,\n\tcellId?: CellId,\n): Mark {\n\tif (changes !== undefined) {\n\t\tassert(count === 1, 0x66c /* A modify mark must have length equal to one */);\n\t\tconst noop: CellMark<NoopMark> = {\n\t\t\tcount,\n\t\t\tchanges,\n\t\t};\n\t\tif (cellId !== undefined) {\n\t\t\tnoop.cellId = cellId;\n\t\t}\n\t\treturn noop;\n\t}\n\n\tif (cellId !== undefined) {\n\t\treturn { count, cellId };\n\t}\n\treturn { count };\n}\n"]}
1
+ {"version":3,"file":"invert.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/invert.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, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport type { RevisionTag } from \"../../core/index.js\";\nimport { type IdAllocator, type Mutable, fail } from \"../../util/index.js\";\nimport {\n\ttype CrossFieldManager,\n\tCrossFieldTarget,\n\ttype NodeId,\n} from \"../modular-schema/index.js\";\n\nimport { MarkListFactory } from \"./markListFactory.js\";\nimport {\n\ttype CellId,\n\ttype CellMark,\n\ttype Changeset,\n\ttype Detach,\n\ttype Mark,\n\ttype MarkEffect,\n\ttype MarkList,\n\ttype MoveIn,\n\ttype MoveOut,\n\ttype NoopMark,\n\tNoopMarkType,\n\ttype Remove,\n} from \"./types.js\";\nimport {\n\textractMarkEffect,\n\tgetDetachOutputCellId,\n\tgetEndpoint,\n\tgetInputCellId,\n\tgetOutputCellId,\n\tisAttach,\n\tisDetach,\n\tisImpactful,\n\tnormalizeCellRename,\n\tsplitMark,\n\twithNodeChange,\n} from \"./utils.js\";\n\n/**\n * Inverts a given changeset.\n * @param change - The changeset to produce the inverse of.\n * @returns The inverse of the given `change` such that the inverse can be applied after `change`.\n *\n * WARNING! This implementation is incomplete:\n * - Support for slices is not implemented.\n */\nexport function invert(\n\tchange: Changeset,\n\tisRollback: boolean,\n\tgenId: IdAllocator,\n\tcrossFieldManager: CrossFieldManager,\n): Changeset {\n\treturn invertMarkList(change, isRollback, crossFieldManager as CrossFieldManager<NodeId>);\n}\n\nfunction invertMarkList(\n\tmarkList: MarkList,\n\tisRollback: boolean,\n\tcrossFieldManager: CrossFieldManager<NodeId>,\n): MarkList {\n\tconst inverseMarkList = new MarkListFactory();\n\n\tfor (const mark of markList) {\n\t\tconst inverseMarks = invertMark(mark, isRollback, crossFieldManager);\n\t\tinverseMarkList.push(...inverseMarks);\n\t}\n\n\treturn inverseMarkList.list;\n}\n\nfunction invertMark(\n\tmark: Mark,\n\tisRollback: boolean,\n\tcrossFieldManager: CrossFieldManager<NodeId>,\n): Mark[] {\n\tif (!isImpactful(mark)) {\n\t\tconst inputId = getInputCellId(mark);\n\t\treturn [invertNodeChangeOrSkip(mark.count, mark.changes, inputId)];\n\t}\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase NoopMarkType: {\n\t\t\treturn [mark];\n\t\t}\n\t\tcase \"Remove\": {\n\t\t\tassert(mark.revision !== undefined, 0x5a1 /* Unable to revert to undefined revision */);\n\t\t\tconst outputId = getOutputCellId(mark);\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tlet inverse: Mutable<Mark>;\n\t\t\tif (inputId === undefined) {\n\t\t\t\tinverse = {\n\t\t\t\t\ttype: \"Insert\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t\tcellId: outputId,\n\t\t\t\t\tcount: mark.count,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tinverse = {\n\t\t\t\t\ttype: \"Remove\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t\tcellId: outputId,\n\t\t\t\t\tcount: mark.count,\n\t\t\t\t};\n\t\t\t\tif (isRollback) {\n\t\t\t\t\tinverse.idOverride = inputId;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [withNodeChange(inverse, mark.changes)];\n\t\t}\n\t\tcase \"Insert\": {\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tassert(inputId !== undefined, 0x80c /* Active inserts should target empty cells */);\n\t\t\tconst removeMark: Mutable<CellMark<Remove>> = {\n\t\t\t\ttype: \"Remove\",\n\t\t\t\tcount: mark.count,\n\t\t\t\tid: inputId.localId,\n\t\t\t};\n\n\t\t\tif (isRollback) {\n\t\t\t\tremoveMark.idOverride = inputId;\n\t\t\t}\n\n\t\t\tconst inverse = withNodeChange(removeMark, mark.changes);\n\t\t\treturn [inverse];\n\t\t}\n\t\tcase \"MoveOut\": {\n\t\t\tif (mark.changes !== undefined) {\n\t\t\t\tassert(mark.count === 1, 0x6ed /* Mark with changes can only target a single cell */);\n\n\t\t\t\tconst endpoint = getEndpoint(mark);\n\t\t\t\tcrossFieldManager.set(\n\t\t\t\t\tCrossFieldTarget.Destination,\n\t\t\t\t\tendpoint.revision,\n\t\t\t\t\tendpoint.localId,\n\t\t\t\t\tmark.count,\n\t\t\t\t\tmark.changes,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst cellId = getDetachOutputCellId(mark) ?? {\n\t\t\t\trevision: mark.revision ?? fail(\"Revision must be defined\"),\n\t\t\t\tlocalId: mark.id,\n\t\t\t};\n\n\t\t\tconst moveIn: MoveIn = {\n\t\t\t\ttype: \"MoveIn\",\n\t\t\t\tid: mark.id,\n\t\t\t};\n\n\t\t\tif (mark.finalEndpoint !== undefined) {\n\t\t\t\tmoveIn.finalEndpoint = { localId: mark.finalEndpoint.localId };\n\t\t\t}\n\t\t\tlet effect: MarkEffect = moveIn;\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tif (inputId !== undefined) {\n\t\t\t\tconst detach: Mutable<Detach> = {\n\t\t\t\t\ttype: \"Remove\",\n\t\t\t\t\tid: mark.id,\n\t\t\t\t};\n\t\t\t\tif (isRollback) {\n\t\t\t\t\tdetach.idOverride = inputId;\n\t\t\t\t}\n\t\t\t\teffect = {\n\t\t\t\t\ttype: \"AttachAndDetach\",\n\t\t\t\t\tattach: moveIn,\n\t\t\t\t\tdetach,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn [{ ...effect, count: mark.count, cellId }];\n\t\t}\n\t\tcase \"MoveIn\": {\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tassert(inputId !== undefined, 0x89e /* Active move-ins should target empty cells */);\n\t\t\tconst invertedMark: Mutable<CellMark<MoveOut>> = {\n\t\t\t\ttype: \"MoveOut\",\n\t\t\t\tid: mark.id,\n\t\t\t\tcount: mark.count,\n\t\t\t};\n\n\t\t\tif (isRollback) {\n\t\t\t\tinvertedMark.idOverride = inputId;\n\t\t\t}\n\n\t\t\tif (mark.finalEndpoint) {\n\t\t\t\tinvertedMark.finalEndpoint = { localId: mark.finalEndpoint.localId };\n\t\t\t}\n\t\t\treturn applyMovedChanges(invertedMark, mark.revision, crossFieldManager);\n\t\t}\n\t\tcase \"AttachAndDetach\": {\n\t\t\tconst attach: Mark = {\n\t\t\t\tcount: mark.count,\n\t\t\t\tcellId: mark.cellId,\n\t\t\t\t...mark.attach,\n\t\t\t};\n\t\t\tconst idAfterAttach = getOutputCellId(attach);\n\n\t\t\t// We put `mark.changes` on the detach so that if it is a move source\n\t\t\t// the changes can be sent to the endpoint.\n\t\t\tconst detach: Mark = {\n\t\t\t\tcount: mark.count,\n\t\t\t\tcellId: idAfterAttach,\n\t\t\t\tchanges: mark.changes,\n\t\t\t\t...mark.detach,\n\t\t\t};\n\t\t\tconst attachInverses = invertMark(attach, isRollback, crossFieldManager);\n\t\t\tconst detachInverses = invertMark(detach, isRollback, crossFieldManager);\n\n\t\t\tif (detachInverses.length === 0) {\n\t\t\t\treturn attachInverses;\n\t\t\t}\n\n\t\t\tassert(\n\t\t\t\tdetachInverses.length === 1,\n\t\t\t\t0x80d /* Only expected MoveIn marks to be split when inverting */,\n\t\t\t);\n\n\t\t\tlet detachInverse = detachInverses[0];\n\t\t\tassert(isAttach(detachInverse), 0x80e /* Inverse of a detach should be an attach */);\n\n\t\t\tconst inverses: Mark[] = [];\n\t\t\tfor (const attachInverse of attachInverses) {\n\t\t\t\tlet detachInverseCurr: Mark = detachInverse;\n\t\t\t\tif (attachInverse.count !== detachInverse.count) {\n\t\t\t\t\t[detachInverseCurr, detachInverse] = splitMark(detachInverse, attachInverse.count);\n\t\t\t\t}\n\n\t\t\t\tif (attachInverse.type === NoopMarkType) {\n\t\t\t\t\tif (attachInverse.changes !== undefined) {\n\t\t\t\t\t\tassert(\n\t\t\t\t\t\t\tdetachInverseCurr.changes === undefined,\n\t\t\t\t\t\t\t0x80f /* Unexpected node changes */,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdetachInverseCurr.changes = attachInverse.changes;\n\t\t\t\t\t}\n\t\t\t\t\tinverses.push(detachInverseCurr);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tassert(isDetach(attachInverse), 0x810 /* Inverse of an attach should be a detach */);\n\n\t\t\t\tconst inverted: Mark = {\n\t\t\t\t\ttype: \"AttachAndDetach\",\n\t\t\t\t\tcount: attachInverse.count,\n\t\t\t\t\tattach: extractMarkEffect(detachInverseCurr),\n\t\t\t\t\tdetach: extractMarkEffect(attachInverse),\n\t\t\t\t};\n\n\t\t\t\tif (detachInverseCurr.cellId !== undefined) {\n\t\t\t\t\tinverted.cellId = detachInverseCurr.cellId;\n\t\t\t\t}\n\n\t\t\t\tif (detachInverseCurr.changes !== undefined) {\n\t\t\t\t\tinverted.changes = detachInverseCurr.changes;\n\t\t\t\t}\n\n\t\t\t\tif (attachInverse.changes !== undefined) {\n\t\t\t\t\tassert(inverted.changes === undefined, 0x811 /* Unexpected node changes */);\n\t\t\t\t\tinverted.changes = attachInverse.changes;\n\t\t\t\t}\n\n\t\t\t\tinverses.push(normalizeCellRename(inverted));\n\t\t\t}\n\n\t\t\treturn inverses;\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\nfunction applyMovedChanges(\n\tmark: CellMark<MoveOut>,\n\trevision: RevisionTag | undefined,\n\tmanager: CrossFieldManager<NodeId>,\n): Mark[] {\n\t// Although this is a source mark, we query the destination because this was a destination mark during the original invert pass.\n\tconst entry = manager.get(CrossFieldTarget.Destination, revision, mark.id, mark.count, true);\n\n\tif (entry.length < mark.count) {\n\t\tconst [mark1, mark2] = splitMark(mark, entry.length);\n\t\tconst mark1WithChanges =\n\t\t\tentry.value !== undefined\n\t\t\t\t? withNodeChange<CellMark<MoveOut>, MoveOut>(mark1, entry.value)\n\t\t\t\t: mark1;\n\n\t\treturn [mark1WithChanges, ...applyMovedChanges(mark2, revision, manager)];\n\t}\n\n\tif (entry.value !== undefined) {\n\t\tmanager.onMoveIn(entry.value);\n\t\treturn [withNodeChange<CellMark<MoveOut>, MoveOut>(mark, entry.value)];\n\t}\n\n\treturn [mark];\n}\n\nfunction invertNodeChangeOrSkip(\n\tcount: number,\n\tchanges: NodeId | undefined,\n\tcellId?: CellId,\n): Mark {\n\tif (changes !== undefined) {\n\t\tassert(count === 1, 0x66c /* A modify mark must have length equal to one */);\n\t\tconst noop: CellMark<NoopMark> = {\n\t\t\tcount,\n\t\t\tchanges,\n\t\t};\n\t\tif (cellId !== undefined) {\n\t\t\tnoop.cellId = cellId;\n\t\t}\n\t\treturn noop;\n\t}\n\n\tif (cellId !== undefined) {\n\t\treturn { count, cellId };\n\t}\n\treturn { count };\n}\n"]}
@@ -146,6 +146,7 @@ function rebaseMark(currMark, baseMark, rebaseChild, moveEffects) {
146
146
  if (movedNodeChanges !== undefined) {
147
147
  assert(rebasedMark.changes === undefined, 0x8dc /* Unexpected collision of new node changes */);
148
148
  rebasedMark.changes = movedNodeChanges;
149
+ moveEffects.onMoveIn(movedNodeChanges);
149
150
  }
150
151
  return rebaseMarkIgnoreChild(rebasedMark, baseMark, moveEffects);
151
152
  }
@@ -303,7 +304,11 @@ function getMovedEffectFromBaseMark(moveEffects, baseMark) {
303
304
  function getMovedEffect(moveEffects, revision, id, count) {
304
305
  const effect = getMoveEffect(moveEffects, CrossFieldTarget.Destination, revision, id, count);
305
306
  assert(effect.length === count, 0x6f3 /* Expected effect to cover entire mark */);
306
- return effect.value?.movedEffect;
307
+ const movedEffect = effect.value?.movedEffect;
308
+ if (movedEffect !== undefined && movedEffect.type === "MoveOut") {
309
+ moveEffects.moveKey(CrossFieldTarget.Source, movedEffect.revision, movedEffect.id, count);
310
+ }
311
+ return movedEffect;
307
312
  }
308
313
  function getMovedChangesFromBaseMark(moveEffects, baseMark) {
309
314
  if (isMoveIn(baseMark)) {