@fluidframework/tree 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1457) hide show
  1. package/.mocharc.customBenchmarks.cjs +33 -0
  2. package/CHANGELOG.md +297 -0
  3. package/README.md +34 -4
  4. package/api-extractor.json +17 -0
  5. package/api-report/tree.alpha.api.md +119 -25
  6. package/api-report/tree.beta.api.md +51 -25
  7. package/api-report/tree.public.api.md +51 -25
  8. package/dist/beta.d.ts +3 -1
  9. package/dist/codec/discriminatedUnions.d.ts +11 -5
  10. package/dist/codec/discriminatedUnions.d.ts.map +1 -1
  11. package/dist/codec/discriminatedUnions.js.map +1 -1
  12. package/dist/codec/index.d.ts +1 -1
  13. package/dist/codec/index.d.ts.map +1 -1
  14. package/dist/codec/index.js.map +1 -1
  15. package/dist/core/forest/editableForest.d.ts +1 -5
  16. package/dist/core/forest/editableForest.d.ts.map +1 -1
  17. package/dist/core/forest/editableForest.js.map +1 -1
  18. package/dist/core/forest/forest.d.ts +0 -6
  19. package/dist/core/forest/forest.d.ts.map +1 -1
  20. package/dist/core/forest/forest.js +0 -2
  21. package/dist/core/forest/forest.js.map +1 -1
  22. package/dist/core/index.d.ts +2 -2
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/index.js +3 -4
  25. package/dist/core/index.js.map +1 -1
  26. package/dist/core/rebase/changeRebaser.d.ts +0 -4
  27. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  28. package/dist/core/rebase/changeRebaser.js.map +1 -1
  29. package/dist/core/rebase/index.d.ts +1 -1
  30. package/dist/core/rebase/index.d.ts.map +1 -1
  31. package/dist/core/rebase/index.js +1 -3
  32. package/dist/core/rebase/index.js.map +1 -1
  33. package/dist/core/rebase/types.d.ts +1 -8
  34. package/dist/core/rebase/types.d.ts.map +1 -1
  35. package/dist/core/rebase/types.js +1 -9
  36. package/dist/core/rebase/types.js.map +1 -1
  37. package/dist/core/rebase/utils.d.ts +0 -1
  38. package/dist/core/rebase/utils.d.ts.map +1 -1
  39. package/dist/core/rebase/utils.js +12 -7
  40. package/dist/core/rebase/utils.js.map +1 -1
  41. package/dist/core/schema-stored/multiplicity.d.ts +0 -1
  42. package/dist/core/schema-stored/multiplicity.d.ts.map +1 -1
  43. package/dist/core/schema-stored/multiplicity.js +0 -1
  44. package/dist/core/schema-stored/multiplicity.js.map +1 -1
  45. package/dist/core/schema-stored/schema.d.ts +0 -7
  46. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  47. package/dist/core/schema-stored/schema.js +0 -4
  48. package/dist/core/schema-stored/schema.js.map +1 -1
  49. package/dist/core/schema-stored/storedSchemaRepository.d.ts +0 -3
  50. package/dist/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
  51. package/dist/core/schema-stored/storedSchemaRepository.js.map +1 -1
  52. package/dist/core/schema-view/view.d.ts +0 -3
  53. package/dist/core/schema-view/view.d.ts.map +1 -1
  54. package/dist/core/schema-view/view.js +0 -1
  55. package/dist/core/schema-view/view.js.map +1 -1
  56. package/dist/core/tree/anchorSet.d.ts +0 -10
  57. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  58. package/dist/core/tree/anchorSet.js +1 -4
  59. package/dist/core/tree/anchorSet.js.map +1 -1
  60. package/dist/core/tree/cursor.d.ts +1 -6
  61. package/dist/core/tree/cursor.d.ts.map +1 -1
  62. package/dist/core/tree/cursor.js +0 -2
  63. package/dist/core/tree/cursor.js.map +1 -1
  64. package/dist/core/tree/delta.d.ts +0 -11
  65. package/dist/core/tree/delta.d.ts.map +1 -1
  66. package/dist/core/tree/delta.js.map +1 -1
  67. package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
  68. package/dist/core/tree/detachedFieldIndexCodec.js +3 -2
  69. package/dist/core/tree/detachedFieldIndexCodec.js.map +1 -1
  70. package/dist/core/tree/detachedFieldIndexTypes.d.ts +0 -1
  71. package/dist/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  72. package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
  73. package/dist/core/tree/index.d.ts +1 -1
  74. package/dist/core/tree/index.d.ts.map +1 -1
  75. package/dist/core/tree/index.js +3 -1
  76. package/dist/core/tree/index.js.map +1 -1
  77. package/dist/core/tree/mapTree.d.ts +20 -4
  78. package/dist/core/tree/mapTree.d.ts.map +1 -1
  79. package/dist/core/tree/mapTree.js +29 -0
  80. package/dist/core/tree/mapTree.js.map +1 -1
  81. package/dist/core/tree/pathTree.d.ts +0 -11
  82. package/dist/core/tree/pathTree.d.ts.map +1 -1
  83. package/dist/core/tree/pathTree.js.map +1 -1
  84. package/dist/core/tree/treeTextFormat.d.ts.map +1 -1
  85. package/dist/core/tree/treeTextFormat.js +3 -2
  86. package/dist/core/tree/treeTextFormat.js.map +1 -1
  87. package/dist/core/tree/types.d.ts +0 -11
  88. package/dist/core/tree/types.d.ts.map +1 -1
  89. package/dist/core/tree/types.js +0 -4
  90. package/dist/core/tree/types.js.map +1 -1
  91. package/dist/core/tree/visitDelta.d.ts +0 -1
  92. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  93. package/dist/core/tree/visitDelta.js +2 -2
  94. package/dist/core/tree/visitDelta.js.map +1 -1
  95. package/dist/core/tree/visitPath.d.ts +0 -2
  96. package/dist/core/tree/visitPath.d.ts.map +1 -1
  97. package/dist/core/tree/visitPath.js.map +1 -1
  98. package/dist/core/tree/visitorUtils.d.ts +0 -1
  99. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  100. package/dist/core/tree/visitorUtils.js.map +1 -1
  101. package/dist/domains/index.d.ts +1 -1
  102. package/dist/domains/index.d.ts.map +1 -1
  103. package/dist/domains/index.js +2 -1
  104. package/dist/domains/index.js.map +1 -1
  105. package/dist/domains/json/index.d.ts +1 -1
  106. package/dist/domains/json/index.d.ts.map +1 -1
  107. package/dist/domains/json/index.js +2 -1
  108. package/dist/domains/json/index.js.map +1 -1
  109. package/dist/domains/json/jsonCursor.d.ts +36 -2
  110. package/dist/domains/json/jsonCursor.d.ts.map +1 -1
  111. package/dist/domains/json/jsonCursor.js +76 -5
  112. package/dist/domains/json/jsonCursor.js.map +1 -1
  113. package/dist/domains/json/jsonDomainSchema.d.ts +13 -3
  114. package/dist/domains/json/jsonDomainSchema.d.ts.map +1 -1
  115. package/dist/domains/json/jsonDomainSchema.js +12 -4
  116. package/dist/domains/json/jsonDomainSchema.js.map +1 -1
  117. package/dist/domains/leafDomain.d.ts +0 -1
  118. package/dist/domains/leafDomain.d.ts.map +1 -1
  119. package/dist/domains/leafDomain.js +0 -1
  120. package/dist/domains/leafDomain.js.map +1 -1
  121. package/dist/domains/schemaBuilder.d.ts +1 -7
  122. package/dist/domains/schemaBuilder.d.ts.map +1 -1
  123. package/dist/domains/schemaBuilder.js +0 -10
  124. package/dist/domains/schemaBuilder.js.map +1 -1
  125. package/dist/events/events.d.ts +0 -4
  126. package/dist/events/events.d.ts.map +1 -1
  127. package/dist/events/events.js +0 -1
  128. package/dist/events/events.js.map +1 -1
  129. package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  130. package/dist/feature-libraries/chunked-forest/basicChunk.js +8 -3
  131. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  132. package/dist/feature-libraries/chunked-forest/chunk.d.ts +1 -1
  133. package/dist/feature-libraries/chunked-forest/chunk.d.ts.map +1 -1
  134. package/dist/feature-libraries/chunked-forest/chunk.js.map +1 -1
  135. package/dist/feature-libraries/chunked-forest/chunkTree.js +3 -3
  136. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  137. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  138. package/dist/feature-libraries/chunked-forest/chunkedForest.js +7 -5
  139. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  140. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js +1 -1
  141. package/dist/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
  142. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  143. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +8 -5
  144. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  145. package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  146. package/dist/feature-libraries/chunked-forest/uniformChunk.js +5 -3
  147. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  148. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +12 -24
  149. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  150. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +9 -19
  151. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  152. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -6
  153. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  154. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +11 -1
  155. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  156. package/dist/feature-libraries/default-schema/defaultSchema.d.ts +0 -1
  157. package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  158. package/dist/feature-libraries/default-schema/defaultSchema.js +0 -1
  159. package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  160. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  161. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  162. package/dist/feature-libraries/default-schema/index.js +2 -1
  163. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  164. package/dist/feature-libraries/default-schema/schemaChecker.d.ts +6 -0
  165. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  166. package/dist/feature-libraries/default-schema/schemaChecker.js +6 -0
  167. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  168. package/dist/feature-libraries/editableTreeBinder.d.ts +0 -67
  169. package/dist/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  170. package/dist/feature-libraries/editableTreeBinder.js +5 -24
  171. package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
  172. package/dist/feature-libraries/fieldGenerator.d.ts +0 -3
  173. package/dist/feature-libraries/fieldGenerator.d.ts.map +1 -1
  174. package/dist/feature-libraries/fieldGenerator.js +0 -1
  175. package/dist/feature-libraries/fieldGenerator.js.map +1 -1
  176. package/dist/feature-libraries/flex-map-tree/index.d.ts +1 -1
  177. package/dist/feature-libraries/flex-map-tree/index.d.ts.map +1 -1
  178. package/dist/feature-libraries/flex-map-tree/index.js +2 -2
  179. package/dist/feature-libraries/flex-map-tree/index.js.map +1 -1
  180. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +57 -49
  181. package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
  182. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js +171 -168
  183. package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
  184. package/dist/feature-libraries/flex-tree/context.d.ts +0 -1
  185. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  186. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  187. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +17 -282
  188. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  189. package/dist/feature-libraries/flex-tree/flexTreeTypes.js +0 -4
  190. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  191. package/dist/feature-libraries/flex-tree/index.d.ts +1 -1
  192. package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
  193. package/dist/feature-libraries/flex-tree/index.js.map +1 -1
  194. package/dist/feature-libraries/flex-tree/lazyField.d.ts +9 -26
  195. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  196. package/dist/feature-libraries/flex-tree/lazyField.js +26 -99
  197. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  198. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +2 -10
  199. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  200. package/dist/feature-libraries/flex-tree/lazyNode.js +3 -42
  201. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  202. package/dist/feature-libraries/flex-tree/treeEvents.d.ts +0 -2
  203. package/dist/feature-libraries/flex-tree/treeEvents.d.ts.map +1 -1
  204. package/dist/feature-libraries/flex-tree/treeEvents.js.map +1 -1
  205. package/dist/feature-libraries/flex-tree/utilities.d.ts +2 -1
  206. package/dist/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
  207. package/dist/feature-libraries/flex-tree/utilities.js +4 -0
  208. package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
  209. package/dist/feature-libraries/forest-summary/codec.js +2 -2
  210. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  211. package/dist/feature-libraries/index.d.ts +6 -8
  212. package/dist/feature-libraries/index.d.ts.map +1 -1
  213. package/dist/feature-libraries/index.js +7 -18
  214. package/dist/feature-libraries/index.js.map +1 -1
  215. package/dist/feature-libraries/mapTreeCursor.d.ts +6 -2
  216. package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  217. package/dist/feature-libraries/mapTreeCursor.js +9 -1
  218. package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
  219. package/dist/feature-libraries/memoizedIdRangeAllocator.d.ts +0 -4
  220. package/dist/feature-libraries/memoizedIdRangeAllocator.d.ts.map +1 -1
  221. package/dist/feature-libraries/memoizedIdRangeAllocator.js +0 -1
  222. package/dist/feature-libraries/memoizedIdRangeAllocator.js.map +1 -1
  223. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
  224. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  225. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +0 -1
  226. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  227. package/dist/feature-libraries/modular-schema/discrepancies.d.ts +18 -0
  228. package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
  229. package/dist/feature-libraries/modular-schema/discrepancies.js +105 -2
  230. package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -1
  231. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -8
  232. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  233. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +0 -1
  234. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  235. package/dist/feature-libraries/modular-schema/fieldKind.d.ts +1 -3
  236. package/dist/feature-libraries/modular-schema/fieldKind.d.ts.map +1 -1
  237. package/dist/feature-libraries/modular-schema/fieldKind.js +1 -2
  238. package/dist/feature-libraries/modular-schema/fieldKind.js.map +1 -1
  239. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -2
  240. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  241. package/dist/feature-libraries/modular-schema/genericFieldKind.js +57 -85
  242. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  243. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +1 -1
  244. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
  245. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js +5 -8
  246. package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  247. package/dist/feature-libraries/modular-schema/genericFieldKindTypes.d.ts +3 -14
  248. package/dist/feature-libraries/modular-schema/genericFieldKindTypes.d.ts.map +1 -1
  249. package/dist/feature-libraries/modular-schema/genericFieldKindTypes.js +6 -0
  250. package/dist/feature-libraries/modular-schema/genericFieldKindTypes.js.map +1 -1
  251. package/dist/feature-libraries/modular-schema/index.d.ts +2 -2
  252. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  253. package/dist/feature-libraries/modular-schema/index.js +2 -1
  254. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  255. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  256. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +39 -22
  257. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  258. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -8
  259. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  260. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +192 -228
  261. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  262. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +8 -14
  263. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  264. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  265. package/dist/feature-libraries/node-key/nodeKey.d.ts +0 -4
  266. package/dist/feature-libraries/node-key/nodeKey.d.ts.map +1 -1
  267. package/dist/feature-libraries/node-key/nodeKey.js +0 -2
  268. package/dist/feature-libraries/node-key/nodeKey.js.map +1 -1
  269. package/dist/feature-libraries/node-key/nodeKeyManager.d.ts +0 -1
  270. package/dist/feature-libraries/node-key/nodeKeyManager.d.ts.map +1 -1
  271. package/dist/feature-libraries/node-key/nodeKeyManager.js.map +1 -1
  272. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  273. package/dist/feature-libraries/object-forest/objectForest.js +1 -10
  274. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  275. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +6 -6
  276. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  277. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +7 -7
  278. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
  279. package/dist/feature-libraries/schemaBuilderBase.d.ts +2 -28
  280. package/dist/feature-libraries/schemaBuilderBase.d.ts.map +1 -1
  281. package/dist/feature-libraries/schemaBuilderBase.js +1 -27
  282. package/dist/feature-libraries/schemaBuilderBase.js.map +1 -1
  283. package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  284. package/dist/feature-libraries/sequence-field/compose.js +24 -21
  285. package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
  286. package/dist/feature-libraries/sequence-field/formatV2.d.ts +3 -3
  287. package/dist/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  288. package/dist/feature-libraries/sequence-field/formatV2.js +7 -6
  289. package/dist/feature-libraries/sequence-field/formatV2.js.map +1 -1
  290. package/dist/feature-libraries/sequence-field/formatV3.d.ts +195 -0
  291. package/dist/feature-libraries/sequence-field/formatV3.d.ts.map +1 -0
  292. package/dist/feature-libraries/sequence-field/formatV3.js +23 -0
  293. package/dist/feature-libraries/sequence-field/formatV3.js.map +1 -0
  294. package/dist/feature-libraries/sequence-field/helperTypes.d.ts +11 -0
  295. package/dist/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  296. package/dist/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  297. package/dist/feature-libraries/sequence-field/index.d.ts +1 -1
  298. package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
  299. package/dist/feature-libraries/sequence-field/index.js.map +1 -1
  300. package/dist/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  301. package/dist/feature-libraries/sequence-field/invert.js +21 -13
  302. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  303. package/dist/feature-libraries/sequence-field/markQueue.js +1 -1
  304. package/dist/feature-libraries/sequence-field/markQueue.js.map +1 -1
  305. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +2 -2
  306. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  307. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  308. package/dist/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  309. package/dist/feature-libraries/sequence-field/rebase.js +24 -6
  310. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  311. package/dist/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  312. package/dist/feature-libraries/sequence-field/replaceRevisions.js +16 -3
  313. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  314. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +1 -1
  315. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js +38 -4
  316. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  317. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -1
  318. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  319. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +54 -9
  320. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  321. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +11 -0
  322. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -0
  323. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js +85 -0
  324. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -0
  325. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  326. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js +2 -0
  327. package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  328. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  329. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +4 -1
  330. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  331. package/dist/feature-libraries/sequence-field/types.d.ts +23 -4
  332. package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
  333. package/dist/feature-libraries/sequence-field/types.js.map +1 -1
  334. package/dist/feature-libraries/sequence-field/utils.d.ts +5 -4
  335. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  336. package/dist/feature-libraries/sequence-field/utils.js +70 -42
  337. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  338. package/dist/feature-libraries/storedToViewSchema.d.ts +0 -1
  339. package/dist/feature-libraries/storedToViewSchema.d.ts.map +1 -1
  340. package/dist/feature-libraries/storedToViewSchema.js +0 -1
  341. package/dist/feature-libraries/storedToViewSchema.js.map +1 -1
  342. package/dist/feature-libraries/treeCursorUtils.d.ts +0 -6
  343. package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  344. package/dist/feature-libraries/treeCursorUtils.js +8 -6
  345. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  346. package/dist/feature-libraries/treeTextCursor.d.ts +0 -2
  347. package/dist/feature-libraries/treeTextCursor.d.ts.map +1 -1
  348. package/dist/feature-libraries/treeTextCursor.js +0 -2
  349. package/dist/feature-libraries/treeTextCursor.js.map +1 -1
  350. package/dist/feature-libraries/typed-schema/flexList.d.ts +0 -3
  351. package/dist/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
  352. package/dist/feature-libraries/typed-schema/flexList.js.map +1 -1
  353. package/dist/feature-libraries/typed-schema/index.d.ts +1 -1
  354. package/dist/feature-libraries/typed-schema/index.d.ts.map +1 -1
  355. package/dist/feature-libraries/typed-schema/index.js +1 -3
  356. package/dist/feature-libraries/typed-schema/index.js.map +1 -1
  357. package/dist/feature-libraries/typed-schema/schemaCollection.d.ts.map +1 -1
  358. package/dist/feature-libraries/typed-schema/schemaCollection.js +0 -4
  359. package/dist/feature-libraries/typed-schema/schemaCollection.js.map +1 -1
  360. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +2 -41
  361. package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  362. package/dist/feature-libraries/typed-schema/typedTreeSchema.js +1 -40
  363. package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  364. package/dist/feature-libraries/typed-schema/view.d.ts +0 -1
  365. package/dist/feature-libraries/typed-schema/view.d.ts.map +1 -1
  366. package/dist/feature-libraries/typed-schema/view.js.map +1 -1
  367. package/dist/index.d.ts +8 -9
  368. package/dist/index.d.ts.map +1 -1
  369. package/dist/index.js +31 -90
  370. package/dist/index.js.map +1 -1
  371. package/dist/internalTypes.d.ts +1 -1
  372. package/dist/internalTypes.d.ts.map +1 -1
  373. package/dist/internalTypes.js.map +1 -1
  374. package/dist/packageVersion.d.ts +1 -1
  375. package/dist/packageVersion.js +1 -1
  376. package/dist/packageVersion.js.map +1 -1
  377. package/dist/public.d.ts +3 -1
  378. package/dist/shared-tree/schematizeTree.d.ts +2 -11
  379. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  380. package/dist/shared-tree/schematizeTree.js +13 -2
  381. package/dist/shared-tree/schematizeTree.js.map +1 -1
  382. package/dist/shared-tree/schematizingTreeView.d.ts +4 -4
  383. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  384. package/dist/shared-tree/schematizingTreeView.js +2 -2
  385. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  386. package/dist/shared-tree/sharedTree.d.ts +4 -17
  387. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  388. package/dist/shared-tree/sharedTree.js +4 -8
  389. package/dist/shared-tree/sharedTree.js.map +1 -1
  390. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  391. package/dist/shared-tree/sharedTreeChangeCodecs.js +4 -0
  392. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  393. package/dist/shared-tree/sharedTreeChangeFamily.js +2 -2
  394. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  395. package/dist/shared-tree/sharedTreeEditBuilder.d.ts +0 -2
  396. package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  397. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  398. package/dist/shared-tree/treeApi.js +2 -2
  399. package/dist/shared-tree/treeApi.js.map +1 -1
  400. package/dist/shared-tree/treeCheckout.d.ts +0 -5
  401. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  402. package/dist/shared-tree/treeCheckout.js +5 -3
  403. package/dist/shared-tree/treeCheckout.js.map +1 -1
  404. package/dist/shared-tree/treeView.d.ts +3 -6
  405. package/dist/shared-tree/treeView.d.ts.map +1 -1
  406. package/dist/shared-tree/treeView.js.map +1 -1
  407. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  408. package/dist/shared-tree-core/branch.js +11 -6
  409. package/dist/shared-tree-core/branch.js.map +1 -1
  410. package/dist/shared-tree-core/defaultResubmitMachine.js +3 -3
  411. package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  412. package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  413. package/dist/shared-tree-core/editManagerCodecs.js +1 -0
  414. package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
  415. package/dist/shared-tree-core/editManagerFormat.d.ts +2 -2
  416. package/dist/shared-tree-core/editManagerFormat.d.ts.map +1 -1
  417. package/dist/shared-tree-core/editManagerFormat.js +6 -1
  418. package/dist/shared-tree-core/editManagerFormat.js.map +1 -1
  419. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  420. package/dist/shared-tree-core/messageCodecs.js +1 -0
  421. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  422. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  423. package/dist/shared-tree-core/sharedTreeCore.js +3 -1
  424. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  425. package/dist/simple-tree/api/create.d.ts +54 -0
  426. package/dist/simple-tree/api/create.d.ts.map +1 -0
  427. package/dist/simple-tree/api/create.js +99 -0
  428. package/dist/simple-tree/api/create.js.map +1 -0
  429. package/dist/simple-tree/api/index.d.ts +12 -0
  430. package/dist/simple-tree/api/index.d.ts.map +1 -0
  431. package/dist/simple-tree/api/index.js +28 -0
  432. package/dist/simple-tree/api/index.js.map +1 -0
  433. package/{lib/simple-tree → dist/simple-tree/api}/schemaCreationUtilities.d.ts +7 -4
  434. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -0
  435. package/dist/simple-tree/{schemaCreationUtilities.js → api/schemaCreationUtilities.js} +1 -1
  436. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -0
  437. package/dist/simple-tree/{schemaFactory.d.ts → api/schemaFactory.d.ts} +15 -14
  438. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -0
  439. package/dist/simple-tree/{schemaFactory.js → api/schemaFactory.js} +10 -9
  440. package/dist/simple-tree/api/schemaFactory.js.map +1 -0
  441. package/{lib/simple-tree → dist/simple-tree/api}/schemaFactoryRecursive.d.ts +40 -7
  442. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -0
  443. package/dist/simple-tree/{schemaFactoryRecursive.js → api/schemaFactoryRecursive.js} +1 -1
  444. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -0
  445. package/dist/simple-tree/api/testRecursiveDomain.d.ts +62 -0
  446. package/dist/simple-tree/api/testRecursiveDomain.d.ts.map +1 -0
  447. package/dist/simple-tree/api/testRecursiveDomain.js.map +1 -0
  448. package/{lib/simple-tree → dist/simple-tree/api}/tree.d.ts +111 -20
  449. package/dist/simple-tree/api/tree.d.ts.map +1 -0
  450. package/dist/simple-tree/api/tree.js +173 -0
  451. package/dist/simple-tree/api/tree.js.map +1 -0
  452. package/dist/simple-tree/{treeNodeApi.d.ts → api/treeNodeApi.d.ts} +6 -5
  453. package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -0
  454. package/dist/simple-tree/{treeNodeApi.js → api/treeNodeApi.js} +28 -20
  455. package/dist/simple-tree/api/treeNodeApi.js.map +1 -0
  456. package/dist/simple-tree/api/verboseTree.d.ts +136 -0
  457. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -0
  458. package/dist/simple-tree/api/verboseTree.js +220 -0
  459. package/dist/simple-tree/api/verboseTree.js.map +1 -0
  460. package/dist/simple-tree/arrayNode.d.ts +3 -3
  461. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  462. package/dist/simple-tree/arrayNode.js +70 -69
  463. package/dist/simple-tree/arrayNode.js.map +1 -1
  464. package/dist/simple-tree/core/index.d.ts +10 -0
  465. package/dist/simple-tree/core/index.d.ts.map +1 -0
  466. package/dist/simple-tree/core/index.js +27 -0
  467. package/dist/simple-tree/core/index.js.map +1 -0
  468. package/{lib/simple-tree → dist/simple-tree/core}/schemaCaching.d.ts +2 -9
  469. package/dist/simple-tree/core/schemaCaching.d.ts.map +1 -0
  470. package/dist/simple-tree/{schemaCaching.js → core/schemaCaching.js} +2 -23
  471. package/dist/simple-tree/core/schemaCaching.js.map +1 -0
  472. package/dist/simple-tree/core/treeNodeKernel.d.ts +57 -0
  473. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -0
  474. package/dist/simple-tree/{treeNodeKernel.js → core/treeNodeKernel.js} +49 -4
  475. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -0
  476. package/dist/simple-tree/core/treeNodeSchema.d.ts +149 -0
  477. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -0
  478. package/dist/simple-tree/core/treeNodeSchema.js +35 -0
  479. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -0
  480. package/dist/simple-tree/{types.d.ts → core/types.d.ts} +23 -70
  481. package/dist/simple-tree/core/types.d.ts.map +1 -0
  482. package/dist/simple-tree/core/types.js +117 -0
  483. package/dist/simple-tree/core/types.js.map +1 -0
  484. package/dist/simple-tree/core/withType.d.ts +82 -0
  485. package/dist/simple-tree/core/withType.d.ts.map +1 -0
  486. package/dist/simple-tree/core/withType.js +39 -0
  487. package/dist/simple-tree/core/withType.js.map +1 -0
  488. package/dist/simple-tree/getJsonSchema.d.ts +55 -0
  489. package/dist/simple-tree/getJsonSchema.d.ts.map +1 -0
  490. package/dist/simple-tree/getJsonSchema.js +69 -0
  491. package/dist/simple-tree/getJsonSchema.js.map +1 -0
  492. package/dist/simple-tree/getSimpleFieldSchema.d.ts +14 -0
  493. package/dist/simple-tree/getSimpleFieldSchema.d.ts.map +1 -0
  494. package/dist/simple-tree/getSimpleFieldSchema.js +29 -0
  495. package/dist/simple-tree/getSimpleFieldSchema.js.map +1 -0
  496. package/dist/simple-tree/getSimpleSchema.d.ts +58 -0
  497. package/dist/simple-tree/getSimpleSchema.d.ts.map +1 -0
  498. package/dist/simple-tree/getSimpleSchema.js +68 -0
  499. package/dist/simple-tree/getSimpleSchema.js.map +1 -0
  500. package/dist/simple-tree/index.d.ts +12 -13
  501. package/dist/simple-tree/index.d.ts.map +1 -1
  502. package/dist/simple-tree/index.js +26 -23
  503. package/dist/simple-tree/index.js.map +1 -1
  504. package/dist/simple-tree/jsonSchema.d.ts +206 -0
  505. package/dist/simple-tree/jsonSchema.d.ts.map +1 -0
  506. package/dist/{feature-libraries/schema-aware/index.js → simple-tree/jsonSchema.js} +1 -1
  507. package/dist/simple-tree/jsonSchema.js.map +1 -0
  508. package/dist/simple-tree/leafNodeSchema.d.ts +1 -1
  509. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  510. package/dist/simple-tree/leafNodeSchema.js +3 -4
  511. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  512. package/dist/simple-tree/mapNode.d.ts +9 -3
  513. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  514. package/dist/simple-tree/mapNode.js +33 -35
  515. package/dist/simple-tree/mapNode.js.map +1 -1
  516. package/dist/simple-tree/objectNode.d.ts +18 -16
  517. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  518. package/dist/simple-tree/objectNode.js +43 -44
  519. package/dist/simple-tree/objectNode.js.map +1 -1
  520. package/dist/simple-tree/objectNodeTypes.d.ts +38 -0
  521. package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -0
  522. package/dist/simple-tree/objectNodeTypes.js +19 -0
  523. package/dist/simple-tree/objectNodeTypes.js.map +1 -0
  524. package/dist/simple-tree/proxies.d.ts +6 -25
  525. package/dist/simple-tree/proxies.d.ts.map +1 -1
  526. package/dist/simple-tree/proxies.js +50 -63
  527. package/dist/simple-tree/proxies.js.map +1 -1
  528. package/dist/simple-tree/proxyBinding.d.ts +45 -22
  529. package/dist/simple-tree/proxyBinding.d.ts.map +1 -1
  530. package/dist/simple-tree/proxyBinding.js +94 -59
  531. package/dist/simple-tree/proxyBinding.js.map +1 -1
  532. package/dist/simple-tree/schemaTypes.d.ts +10 -159
  533. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  534. package/dist/simple-tree/schemaTypes.js +11 -42
  535. package/dist/simple-tree/schemaTypes.js.map +1 -1
  536. package/dist/simple-tree/simpleSchema.d.ts +124 -0
  537. package/dist/simple-tree/simpleSchema.d.ts.map +1 -0
  538. package/dist/{feature-libraries/schema-aware/schemaAware.js → simple-tree/simpleSchema.js} +1 -1
  539. package/dist/simple-tree/simpleSchema.js.map +1 -0
  540. package/dist/simple-tree/simpleSchemaToJsonSchema.d.ts +12 -0
  541. package/dist/simple-tree/simpleSchemaToJsonSchema.d.ts.map +1 -0
  542. package/dist/simple-tree/simpleSchemaToJsonSchema.js +146 -0
  543. package/dist/simple-tree/simpleSchemaToJsonSchema.js.map +1 -0
  544. package/dist/simple-tree/toFlexSchema.d.ts +4 -12
  545. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  546. package/dist/simple-tree/toFlexSchema.js +42 -52
  547. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  548. package/dist/simple-tree/toMapTree.d.ts +39 -39
  549. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  550. package/dist/simple-tree/toMapTree.js +227 -171
  551. package/dist/simple-tree/toMapTree.js.map +1 -1
  552. package/dist/simple-tree/treeNodeValid.d.ts +74 -0
  553. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -0
  554. package/dist/simple-tree/{types.js → treeNodeValid.js} +18 -111
  555. package/dist/simple-tree/treeNodeValid.js.map +1 -0
  556. package/dist/simple-tree/typesUnsafe.d.ts +35 -4
  557. package/dist/simple-tree/typesUnsafe.d.ts.map +1 -1
  558. package/dist/simple-tree/typesUnsafe.js.map +1 -1
  559. package/dist/simple-tree/viewSchemaToSimpleSchema.d.ts +11 -0
  560. package/dist/simple-tree/viewSchemaToSimpleSchema.d.ts.map +1 -0
  561. package/dist/simple-tree/viewSchemaToSimpleSchema.js +171 -0
  562. package/dist/simple-tree/viewSchemaToSimpleSchema.js.map +1 -0
  563. package/dist/util/brand.d.ts +0 -3
  564. package/dist/util/brand.d.ts.map +1 -1
  565. package/dist/util/brand.js +1 -2
  566. package/dist/util/brand.js.map +1 -1
  567. package/dist/util/brandedMap.d.ts +0 -5
  568. package/dist/util/brandedMap.d.ts.map +1 -1
  569. package/dist/util/brandedMap.js +0 -1
  570. package/dist/util/brandedMap.js.map +1 -1
  571. package/dist/util/idAllocator.d.ts +0 -2
  572. package/dist/util/idAllocator.d.ts.map +1 -1
  573. package/dist/util/idAllocator.js +0 -1
  574. package/dist/util/idAllocator.js.map +1 -1
  575. package/dist/util/index.d.ts +2 -2
  576. package/dist/util/index.d.ts.map +1 -1
  577. package/dist/util/index.js +4 -2
  578. package/dist/util/index.js.map +1 -1
  579. package/dist/util/nestedMap.d.ts +5 -19
  580. package/dist/util/nestedMap.d.ts.map +1 -1
  581. package/dist/util/nestedMap.js +17 -17
  582. package/dist/util/nestedMap.js.map +1 -1
  583. package/dist/util/opaque.d.ts +0 -4
  584. package/dist/util/opaque.d.ts.map +1 -1
  585. package/dist/util/opaque.js +0 -2
  586. package/dist/util/opaque.js.map +1 -1
  587. package/dist/util/rangeMap.d.ts +0 -2
  588. package/dist/util/rangeMap.d.ts.map +1 -1
  589. package/dist/util/rangeMap.js +4 -3
  590. package/dist/util/rangeMap.js.map +1 -1
  591. package/dist/util/transactionResult.d.ts +0 -1
  592. package/dist/util/transactionResult.d.ts.map +1 -1
  593. package/dist/util/transactionResult.js +0 -1
  594. package/dist/util/transactionResult.js.map +1 -1
  595. package/dist/util/typeCheck.d.ts +2 -20
  596. package/dist/util/typeCheck.d.ts.map +1 -1
  597. package/dist/util/typeCheck.js.map +1 -1
  598. package/dist/util/typeCheckTests.d.ts +4 -4
  599. package/dist/util/typeCheckTests.d.ts.map +1 -1
  600. package/dist/util/typeCheckTests.js.map +1 -1
  601. package/dist/util/typeUtils.d.ts +0 -7
  602. package/dist/util/typeUtils.d.ts.map +1 -1
  603. package/dist/util/typeUtils.js.map +1 -1
  604. package/dist/util/utils.d.ts +6 -8
  605. package/dist/util/utils.d.ts.map +1 -1
  606. package/dist/util/utils.js +14 -5
  607. package/dist/util/utils.js.map +1 -1
  608. package/lib/beta.d.ts +3 -1
  609. package/lib/codec/discriminatedUnions.d.ts +11 -5
  610. package/lib/codec/discriminatedUnions.d.ts.map +1 -1
  611. package/lib/codec/discriminatedUnions.js.map +1 -1
  612. package/lib/codec/index.d.ts +1 -1
  613. package/lib/codec/index.d.ts.map +1 -1
  614. package/lib/codec/index.js +1 -1
  615. package/lib/codec/index.js.map +1 -1
  616. package/lib/core/forest/editableForest.d.ts +1 -5
  617. package/lib/core/forest/editableForest.d.ts.map +1 -1
  618. package/lib/core/forest/editableForest.js.map +1 -1
  619. package/lib/core/forest/forest.d.ts +0 -6
  620. package/lib/core/forest/forest.d.ts.map +1 -1
  621. package/lib/core/forest/forest.js +0 -2
  622. package/lib/core/forest/forest.js.map +1 -1
  623. package/lib/core/index.d.ts +2 -2
  624. package/lib/core/index.d.ts.map +1 -1
  625. package/lib/core/index.js +2 -2
  626. package/lib/core/index.js.map +1 -1
  627. package/lib/core/rebase/changeRebaser.d.ts +0 -4
  628. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  629. package/lib/core/rebase/changeRebaser.js.map +1 -1
  630. package/lib/core/rebase/index.d.ts +1 -1
  631. package/lib/core/rebase/index.d.ts.map +1 -1
  632. package/lib/core/rebase/index.js +1 -1
  633. package/lib/core/rebase/index.js.map +1 -1
  634. package/lib/core/rebase/types.d.ts +1 -8
  635. package/lib/core/rebase/types.d.ts.map +1 -1
  636. package/lib/core/rebase/types.js +1 -7
  637. package/lib/core/rebase/types.js.map +1 -1
  638. package/lib/core/rebase/utils.d.ts +0 -1
  639. package/lib/core/rebase/utils.d.ts.map +1 -1
  640. package/lib/core/rebase/utils.js +13 -8
  641. package/lib/core/rebase/utils.js.map +1 -1
  642. package/lib/core/schema-stored/multiplicity.d.ts +0 -1
  643. package/lib/core/schema-stored/multiplicity.d.ts.map +1 -1
  644. package/lib/core/schema-stored/multiplicity.js +0 -1
  645. package/lib/core/schema-stored/multiplicity.js.map +1 -1
  646. package/lib/core/schema-stored/schema.d.ts +0 -7
  647. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  648. package/lib/core/schema-stored/schema.js +0 -4
  649. package/lib/core/schema-stored/schema.js.map +1 -1
  650. package/lib/core/schema-stored/storedSchemaRepository.d.ts +0 -3
  651. package/lib/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
  652. package/lib/core/schema-stored/storedSchemaRepository.js.map +1 -1
  653. package/lib/core/schema-view/view.d.ts +0 -3
  654. package/lib/core/schema-view/view.d.ts.map +1 -1
  655. package/lib/core/schema-view/view.js +0 -1
  656. package/lib/core/schema-view/view.js.map +1 -1
  657. package/lib/core/tree/anchorSet.d.ts +0 -10
  658. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  659. package/lib/core/tree/anchorSet.js +1 -4
  660. package/lib/core/tree/anchorSet.js.map +1 -1
  661. package/lib/core/tree/cursor.d.ts +1 -6
  662. package/lib/core/tree/cursor.d.ts.map +1 -1
  663. package/lib/core/tree/cursor.js +0 -2
  664. package/lib/core/tree/cursor.js.map +1 -1
  665. package/lib/core/tree/delta.d.ts +0 -11
  666. package/lib/core/tree/delta.d.ts.map +1 -1
  667. package/lib/core/tree/delta.js.map +1 -1
  668. package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +1 -1
  669. package/lib/core/tree/detachedFieldIndexCodec.js +4 -3
  670. package/lib/core/tree/detachedFieldIndexCodec.js.map +1 -1
  671. package/lib/core/tree/detachedFieldIndexTypes.d.ts +0 -1
  672. package/lib/core/tree/detachedFieldIndexTypes.d.ts.map +1 -1
  673. package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
  674. package/lib/core/tree/index.d.ts +1 -1
  675. package/lib/core/tree/index.d.ts.map +1 -1
  676. package/lib/core/tree/index.js +1 -0
  677. package/lib/core/tree/index.js.map +1 -1
  678. package/lib/core/tree/mapTree.d.ts +20 -4
  679. package/lib/core/tree/mapTree.d.ts.map +1 -1
  680. package/lib/core/tree/mapTree.js +27 -1
  681. package/lib/core/tree/mapTree.js.map +1 -1
  682. package/lib/core/tree/pathTree.d.ts +0 -11
  683. package/lib/core/tree/pathTree.d.ts.map +1 -1
  684. package/lib/core/tree/pathTree.js.map +1 -1
  685. package/lib/core/tree/treeTextFormat.d.ts.map +1 -1
  686. package/lib/core/tree/treeTextFormat.js +3 -2
  687. package/lib/core/tree/treeTextFormat.js.map +1 -1
  688. package/lib/core/tree/types.d.ts +0 -11
  689. package/lib/core/tree/types.d.ts.map +1 -1
  690. package/lib/core/tree/types.js +0 -4
  691. package/lib/core/tree/types.js.map +1 -1
  692. package/lib/core/tree/visitDelta.d.ts +0 -1
  693. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  694. package/lib/core/tree/visitDelta.js +2 -2
  695. package/lib/core/tree/visitDelta.js.map +1 -1
  696. package/lib/core/tree/visitPath.d.ts +0 -2
  697. package/lib/core/tree/visitPath.d.ts.map +1 -1
  698. package/lib/core/tree/visitPath.js.map +1 -1
  699. package/lib/core/tree/visitorUtils.d.ts +0 -1
  700. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  701. package/lib/core/tree/visitorUtils.js.map +1 -1
  702. package/lib/domains/index.d.ts +1 -1
  703. package/lib/domains/index.d.ts.map +1 -1
  704. package/lib/domains/index.js +1 -1
  705. package/lib/domains/index.js.map +1 -1
  706. package/lib/domains/json/index.d.ts +1 -1
  707. package/lib/domains/json/index.d.ts.map +1 -1
  708. package/lib/domains/json/index.js +1 -1
  709. package/lib/domains/json/index.js.map +1 -1
  710. package/lib/domains/json/jsonCursor.d.ts +36 -2
  711. package/lib/domains/json/jsonCursor.d.ts.map +1 -1
  712. package/lib/domains/json/jsonCursor.js +76 -5
  713. package/lib/domains/json/jsonCursor.js.map +1 -1
  714. package/lib/domains/json/jsonDomainSchema.d.ts +13 -3
  715. package/lib/domains/json/jsonDomainSchema.d.ts.map +1 -1
  716. package/lib/domains/json/jsonDomainSchema.js +9 -1
  717. package/lib/domains/json/jsonDomainSchema.js.map +1 -1
  718. package/lib/domains/leafDomain.d.ts +0 -1
  719. package/lib/domains/leafDomain.d.ts.map +1 -1
  720. package/lib/domains/leafDomain.js +0 -1
  721. package/lib/domains/leafDomain.js.map +1 -1
  722. package/lib/domains/schemaBuilder.d.ts +1 -7
  723. package/lib/domains/schemaBuilder.d.ts.map +1 -1
  724. package/lib/domains/schemaBuilder.js +1 -11
  725. package/lib/domains/schemaBuilder.js.map +1 -1
  726. package/lib/events/events.d.ts +0 -4
  727. package/lib/events/events.d.ts.map +1 -1
  728. package/lib/events/events.js +0 -1
  729. package/lib/events/events.js.map +1 -1
  730. package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
  731. package/lib/feature-libraries/chunked-forest/basicChunk.js +9 -4
  732. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  733. package/lib/feature-libraries/chunked-forest/chunk.d.ts +1 -1
  734. package/lib/feature-libraries/chunked-forest/chunk.d.ts.map +1 -1
  735. package/lib/feature-libraries/chunked-forest/chunk.js.map +1 -1
  736. package/lib/feature-libraries/chunked-forest/chunkTree.js +4 -4
  737. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  738. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  739. package/lib/feature-libraries/chunked-forest/chunkedForest.js +8 -6
  740. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  741. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js +2 -2
  742. package/lib/feature-libraries/chunked-forest/codec/chunkCodecUtilities.js.map +1 -1
  743. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  744. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +9 -6
  745. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  746. package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
  747. package/lib/feature-libraries/chunked-forest/uniformChunk.js +6 -4
  748. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  749. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +12 -24
  750. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  751. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +6 -16
  752. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  753. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +0 -6
  754. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  755. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +11 -1
  756. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  757. package/lib/feature-libraries/default-schema/defaultSchema.d.ts +0 -1
  758. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  759. package/lib/feature-libraries/default-schema/defaultSchema.js +0 -1
  760. package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  761. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  762. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  763. package/lib/feature-libraries/default-schema/index.js +1 -1
  764. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  765. package/lib/feature-libraries/default-schema/schemaChecker.d.ts +6 -0
  766. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  767. package/lib/feature-libraries/default-schema/schemaChecker.js +6 -0
  768. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  769. package/lib/feature-libraries/editableTreeBinder.d.ts +0 -67
  770. package/lib/feature-libraries/editableTreeBinder.d.ts.map +1 -1
  771. package/lib/feature-libraries/editableTreeBinder.js +6 -25
  772. package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
  773. package/lib/feature-libraries/fieldGenerator.d.ts +0 -3
  774. package/lib/feature-libraries/fieldGenerator.d.ts.map +1 -1
  775. package/lib/feature-libraries/fieldGenerator.js +0 -1
  776. package/lib/feature-libraries/fieldGenerator.js.map +1 -1
  777. package/lib/feature-libraries/flex-map-tree/index.d.ts +1 -1
  778. package/lib/feature-libraries/flex-map-tree/index.d.ts.map +1 -1
  779. package/lib/feature-libraries/flex-map-tree/index.js +1 -1
  780. package/lib/feature-libraries/flex-map-tree/index.js.map +1 -1
  781. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +57 -49
  782. package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
  783. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js +172 -168
  784. package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
  785. package/lib/feature-libraries/flex-tree/context.d.ts +0 -1
  786. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  787. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  788. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +17 -282
  789. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  790. package/lib/feature-libraries/flex-tree/flexTreeTypes.js +0 -4
  791. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  792. package/lib/feature-libraries/flex-tree/index.d.ts +1 -1
  793. package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
  794. package/lib/feature-libraries/flex-tree/index.js.map +1 -1
  795. package/lib/feature-libraries/flex-tree/lazyField.d.ts +9 -26
  796. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  797. package/lib/feature-libraries/flex-tree/lazyField.js +28 -101
  798. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  799. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +2 -10
  800. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  801. package/lib/feature-libraries/flex-tree/lazyNode.js +4 -42
  802. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  803. package/lib/feature-libraries/flex-tree/treeEvents.d.ts +0 -2
  804. package/lib/feature-libraries/flex-tree/treeEvents.d.ts.map +1 -1
  805. package/lib/feature-libraries/flex-tree/treeEvents.js.map +1 -1
  806. package/lib/feature-libraries/flex-tree/utilities.d.ts +2 -1
  807. package/lib/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
  808. package/lib/feature-libraries/flex-tree/utilities.js +4 -0
  809. package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
  810. package/lib/feature-libraries/forest-summary/codec.js +3 -3
  811. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  812. package/lib/feature-libraries/index.d.ts +6 -8
  813. package/lib/feature-libraries/index.d.ts.map +1 -1
  814. package/lib/feature-libraries/index.js +5 -6
  815. package/lib/feature-libraries/index.js.map +1 -1
  816. package/lib/feature-libraries/mapTreeCursor.d.ts +6 -2
  817. package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
  818. package/lib/feature-libraries/mapTreeCursor.js +7 -0
  819. package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
  820. package/lib/feature-libraries/memoizedIdRangeAllocator.d.ts +0 -4
  821. package/lib/feature-libraries/memoizedIdRangeAllocator.d.ts.map +1 -1
  822. package/lib/feature-libraries/memoizedIdRangeAllocator.js +0 -1
  823. package/lib/feature-libraries/memoizedIdRangeAllocator.js.map +1 -1
  824. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +0 -2
  825. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  826. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +0 -1
  827. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  828. package/lib/feature-libraries/modular-schema/discrepancies.d.ts +18 -0
  829. package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
  830. package/lib/feature-libraries/modular-schema/discrepancies.js +103 -1
  831. package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -1
  832. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +0 -8
  833. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  834. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +0 -1
  835. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  836. package/lib/feature-libraries/modular-schema/fieldKind.d.ts +1 -3
  837. package/lib/feature-libraries/modular-schema/fieldKind.d.ts.map +1 -1
  838. package/lib/feature-libraries/modular-schema/fieldKind.js +1 -2
  839. package/lib/feature-libraries/modular-schema/fieldKind.js.map +1 -1
  840. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts +1 -2
  841. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  842. package/lib/feature-libraries/modular-schema/genericFieldKind.js +56 -83
  843. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  844. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +1 -1
  845. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
  846. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js +6 -9
  847. package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
  848. package/lib/feature-libraries/modular-schema/genericFieldKindTypes.d.ts +3 -14
  849. package/lib/feature-libraries/modular-schema/genericFieldKindTypes.d.ts.map +1 -1
  850. package/lib/feature-libraries/modular-schema/genericFieldKindTypes.js +4 -1
  851. package/lib/feature-libraries/modular-schema/genericFieldKindTypes.js.map +1 -1
  852. package/lib/feature-libraries/modular-schema/index.d.ts +2 -2
  853. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  854. package/lib/feature-libraries/modular-schema/index.js +1 -1
  855. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  856. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  857. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +42 -25
  858. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  859. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -8
  860. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  861. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +169 -206
  862. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  863. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +8 -14
  864. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  865. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  866. package/lib/feature-libraries/node-key/nodeKey.d.ts +0 -4
  867. package/lib/feature-libraries/node-key/nodeKey.d.ts.map +1 -1
  868. package/lib/feature-libraries/node-key/nodeKey.js +0 -2
  869. package/lib/feature-libraries/node-key/nodeKey.js.map +1 -1
  870. package/lib/feature-libraries/node-key/nodeKeyManager.d.ts +0 -1
  871. package/lib/feature-libraries/node-key/nodeKeyManager.d.ts.map +1 -1
  872. package/lib/feature-libraries/node-key/nodeKeyManager.js.map +1 -1
  873. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  874. package/lib/feature-libraries/object-forest/objectForest.js +2 -11
  875. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  876. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +6 -6
  877. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
  878. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +7 -7
  879. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
  880. package/lib/feature-libraries/schemaBuilderBase.d.ts +2 -28
  881. package/lib/feature-libraries/schemaBuilderBase.d.ts.map +1 -1
  882. package/lib/feature-libraries/schemaBuilderBase.js +2 -28
  883. package/lib/feature-libraries/schemaBuilderBase.js.map +1 -1
  884. package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
  885. package/lib/feature-libraries/sequence-field/compose.js +25 -22
  886. package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
  887. package/lib/feature-libraries/sequence-field/formatV2.d.ts +3 -3
  888. package/lib/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
  889. package/lib/feature-libraries/sequence-field/formatV2.js +3 -3
  890. package/lib/feature-libraries/sequence-field/formatV2.js.map +1 -1
  891. package/lib/feature-libraries/sequence-field/formatV3.d.ts +195 -0
  892. package/lib/feature-libraries/sequence-field/formatV3.d.ts.map +1 -0
  893. package/lib/feature-libraries/sequence-field/formatV3.js +19 -0
  894. package/lib/feature-libraries/sequence-field/formatV3.js.map +1 -0
  895. package/lib/feature-libraries/sequence-field/helperTypes.d.ts +11 -0
  896. package/lib/feature-libraries/sequence-field/helperTypes.d.ts.map +1 -1
  897. package/lib/feature-libraries/sequence-field/helperTypes.js.map +1 -1
  898. package/lib/feature-libraries/sequence-field/index.d.ts +1 -1
  899. package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
  900. package/lib/feature-libraries/sequence-field/index.js.map +1 -1
  901. package/lib/feature-libraries/sequence-field/invert.d.ts.map +1 -1
  902. package/lib/feature-libraries/sequence-field/invert.js +22 -14
  903. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  904. package/lib/feature-libraries/sequence-field/markQueue.js +2 -2
  905. package/lib/feature-libraries/sequence-field/markQueue.js.map +1 -1
  906. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +2 -2
  907. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  908. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  909. package/lib/feature-libraries/sequence-field/rebase.d.ts.map +1 -1
  910. package/lib/feature-libraries/sequence-field/rebase.js +25 -7
  911. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  912. package/lib/feature-libraries/sequence-field/replaceRevisions.d.ts.map +1 -1
  913. package/lib/feature-libraries/sequence-field/replaceRevisions.js +16 -3
  914. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  915. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +1 -1
  916. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +40 -6
  917. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  918. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +4 -1
  919. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
  920. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +55 -11
  921. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  922. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +11 -0
  923. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -0
  924. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +81 -0
  925. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -0
  926. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
  927. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js +2 -0
  928. package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
  929. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  930. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +5 -2
  931. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  932. package/lib/feature-libraries/sequence-field/types.d.ts +23 -4
  933. package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
  934. package/lib/feature-libraries/sequence-field/types.js.map +1 -1
  935. package/lib/feature-libraries/sequence-field/utils.d.ts +5 -4
  936. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  937. package/lib/feature-libraries/sequence-field/utils.js +67 -41
  938. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  939. package/lib/feature-libraries/storedToViewSchema.d.ts +0 -1
  940. package/lib/feature-libraries/storedToViewSchema.d.ts.map +1 -1
  941. package/lib/feature-libraries/storedToViewSchema.js +0 -1
  942. package/lib/feature-libraries/storedToViewSchema.js.map +1 -1
  943. package/lib/feature-libraries/treeCursorUtils.d.ts +0 -6
  944. package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  945. package/lib/feature-libraries/treeCursorUtils.js +9 -7
  946. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  947. package/lib/feature-libraries/treeTextCursor.d.ts +0 -2
  948. package/lib/feature-libraries/treeTextCursor.d.ts.map +1 -1
  949. package/lib/feature-libraries/treeTextCursor.js +0 -2
  950. package/lib/feature-libraries/treeTextCursor.js.map +1 -1
  951. package/lib/feature-libraries/typed-schema/flexList.d.ts +0 -3
  952. package/lib/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
  953. package/lib/feature-libraries/typed-schema/flexList.js.map +1 -1
  954. package/lib/feature-libraries/typed-schema/index.d.ts +1 -1
  955. package/lib/feature-libraries/typed-schema/index.d.ts.map +1 -1
  956. package/lib/feature-libraries/typed-schema/index.js +1 -1
  957. package/lib/feature-libraries/typed-schema/index.js.map +1 -1
  958. package/lib/feature-libraries/typed-schema/schemaCollection.d.ts.map +1 -1
  959. package/lib/feature-libraries/typed-schema/schemaCollection.js +1 -5
  960. package/lib/feature-libraries/typed-schema/schemaCollection.js.map +1 -1
  961. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +2 -41
  962. package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
  963. package/lib/feature-libraries/typed-schema/typedTreeSchema.js +1 -38
  964. package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
  965. package/lib/feature-libraries/typed-schema/view.d.ts +0 -1
  966. package/lib/feature-libraries/typed-schema/view.d.ts.map +1 -1
  967. package/lib/feature-libraries/typed-schema/view.js.map +1 -1
  968. package/lib/index.d.ts +8 -9
  969. package/lib/index.d.ts.map +1 -1
  970. package/lib/index.js +4 -9
  971. package/lib/index.js.map +1 -1
  972. package/lib/internalTypes.d.ts +1 -1
  973. package/lib/internalTypes.d.ts.map +1 -1
  974. package/lib/internalTypes.js.map +1 -1
  975. package/lib/packageVersion.d.ts +1 -1
  976. package/lib/packageVersion.js +1 -1
  977. package/lib/packageVersion.js.map +1 -1
  978. package/lib/public.d.ts +3 -1
  979. package/lib/shared-tree/schematizeTree.d.ts +2 -11
  980. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  981. package/lib/shared-tree/schematizeTree.js +15 -4
  982. package/lib/shared-tree/schematizeTree.js.map +1 -1
  983. package/lib/shared-tree/schematizingTreeView.d.ts +4 -4
  984. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  985. package/lib/shared-tree/schematizingTreeView.js +3 -3
  986. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  987. package/lib/shared-tree/sharedTree.d.ts +4 -17
  988. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  989. package/lib/shared-tree/sharedTree.js +6 -10
  990. package/lib/shared-tree/sharedTree.js.map +1 -1
  991. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  992. package/lib/shared-tree/sharedTreeChangeCodecs.js +4 -0
  993. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  994. package/lib/shared-tree/sharedTreeChangeFamily.js +3 -3
  995. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  996. package/lib/shared-tree/sharedTreeEditBuilder.d.ts +0 -2
  997. package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
  998. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  999. package/lib/shared-tree/treeApi.js +3 -3
  1000. package/lib/shared-tree/treeApi.js.map +1 -1
  1001. package/lib/shared-tree/treeCheckout.d.ts +0 -5
  1002. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  1003. package/lib/shared-tree/treeCheckout.js +6 -4
  1004. package/lib/shared-tree/treeCheckout.js.map +1 -1
  1005. package/lib/shared-tree/treeView.d.ts +3 -6
  1006. package/lib/shared-tree/treeView.d.ts.map +1 -1
  1007. package/lib/shared-tree/treeView.js.map +1 -1
  1008. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  1009. package/lib/shared-tree-core/branch.js +12 -7
  1010. package/lib/shared-tree-core/branch.js.map +1 -1
  1011. package/lib/shared-tree-core/defaultResubmitMachine.js +4 -4
  1012. package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
  1013. package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
  1014. package/lib/shared-tree-core/editManagerCodecs.js +1 -0
  1015. package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
  1016. package/lib/shared-tree-core/editManagerFormat.d.ts +2 -2
  1017. package/lib/shared-tree-core/editManagerFormat.d.ts.map +1 -1
  1018. package/lib/shared-tree-core/editManagerFormat.js +6 -1
  1019. package/lib/shared-tree-core/editManagerFormat.js.map +1 -1
  1020. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  1021. package/lib/shared-tree-core/messageCodecs.js +1 -0
  1022. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  1023. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  1024. package/lib/shared-tree-core/sharedTreeCore.js +4 -2
  1025. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  1026. package/lib/simple-tree/api/create.d.ts +54 -0
  1027. package/lib/simple-tree/api/create.d.ts.map +1 -0
  1028. package/lib/simple-tree/api/create.js +92 -0
  1029. package/lib/simple-tree/api/create.js.map +1 -0
  1030. package/lib/simple-tree/api/index.d.ts +12 -0
  1031. package/lib/simple-tree/api/index.d.ts.map +1 -0
  1032. package/lib/simple-tree/api/index.js +13 -0
  1033. package/lib/simple-tree/api/index.js.map +1 -0
  1034. package/{dist/simple-tree → lib/simple-tree/api}/schemaCreationUtilities.d.ts +7 -4
  1035. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -0
  1036. package/lib/simple-tree/{schemaCreationUtilities.js → api/schemaCreationUtilities.js} +1 -1
  1037. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -0
  1038. package/lib/simple-tree/{schemaFactory.d.ts → api/schemaFactory.d.ts} +15 -14
  1039. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -0
  1040. package/lib/simple-tree/{schemaFactory.js → api/schemaFactory.js} +9 -8
  1041. package/lib/simple-tree/api/schemaFactory.js.map +1 -0
  1042. package/{dist/simple-tree → lib/simple-tree/api}/schemaFactoryRecursive.d.ts +40 -7
  1043. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -0
  1044. package/lib/simple-tree/{schemaFactoryRecursive.js → api/schemaFactoryRecursive.js} +1 -1
  1045. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -0
  1046. package/lib/simple-tree/api/testRecursiveDomain.d.ts +62 -0
  1047. package/lib/simple-tree/api/testRecursiveDomain.d.ts.map +1 -0
  1048. package/lib/simple-tree/api/testRecursiveDomain.js.map +1 -0
  1049. package/{dist/simple-tree → lib/simple-tree/api}/tree.d.ts +111 -20
  1050. package/lib/simple-tree/api/tree.d.ts.map +1 -0
  1051. package/lib/simple-tree/api/tree.js +165 -0
  1052. package/lib/simple-tree/api/tree.js.map +1 -0
  1053. package/lib/simple-tree/{treeNodeApi.d.ts → api/treeNodeApi.d.ts} +6 -5
  1054. package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -0
  1055. package/lib/simple-tree/{treeNodeApi.js → api/treeNodeApi.js} +25 -17
  1056. package/lib/simple-tree/api/treeNodeApi.js.map +1 -0
  1057. package/lib/simple-tree/api/verboseTree.d.ts +136 -0
  1058. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -0
  1059. package/lib/simple-tree/api/verboseTree.js +213 -0
  1060. package/lib/simple-tree/api/verboseTree.js.map +1 -0
  1061. package/lib/simple-tree/arrayNode.d.ts +3 -3
  1062. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  1063. package/lib/simple-tree/arrayNode.js +56 -53
  1064. package/lib/simple-tree/arrayNode.js.map +1 -1
  1065. package/lib/simple-tree/core/index.d.ts +10 -0
  1066. package/lib/simple-tree/core/index.d.ts.map +1 -0
  1067. package/lib/simple-tree/core/index.js +10 -0
  1068. package/lib/simple-tree/core/index.js.map +1 -0
  1069. package/{dist/simple-tree → lib/simple-tree/core}/schemaCaching.d.ts +2 -9
  1070. package/lib/simple-tree/core/schemaCaching.d.ts.map +1 -0
  1071. package/lib/simple-tree/{schemaCaching.js → core/schemaCaching.js} +1 -21
  1072. package/lib/simple-tree/core/schemaCaching.js.map +1 -0
  1073. package/lib/simple-tree/core/treeNodeKernel.d.ts +57 -0
  1074. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -0
  1075. package/lib/simple-tree/{treeNodeKernel.js → core/treeNodeKernel.js} +45 -3
  1076. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -0
  1077. package/lib/simple-tree/core/treeNodeSchema.d.ts +149 -0
  1078. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -0
  1079. package/lib/simple-tree/core/treeNodeSchema.js +32 -0
  1080. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -0
  1081. package/lib/simple-tree/{types.d.ts → core/types.d.ts} +23 -70
  1082. package/lib/simple-tree/core/types.d.ts.map +1 -0
  1083. package/lib/simple-tree/core/types.js +111 -0
  1084. package/lib/simple-tree/core/types.js.map +1 -0
  1085. package/lib/simple-tree/core/withType.d.ts +82 -0
  1086. package/lib/simple-tree/core/withType.d.ts.map +1 -0
  1087. package/lib/simple-tree/core/withType.js +36 -0
  1088. package/lib/simple-tree/core/withType.js.map +1 -0
  1089. package/lib/simple-tree/getJsonSchema.d.ts +55 -0
  1090. package/lib/simple-tree/getJsonSchema.d.ts.map +1 -0
  1091. package/lib/simple-tree/getJsonSchema.js +65 -0
  1092. package/lib/simple-tree/getJsonSchema.js.map +1 -0
  1093. package/lib/simple-tree/getSimpleFieldSchema.d.ts +14 -0
  1094. package/lib/simple-tree/getSimpleFieldSchema.d.ts.map +1 -0
  1095. package/lib/simple-tree/getSimpleFieldSchema.js +25 -0
  1096. package/lib/simple-tree/getSimpleFieldSchema.js.map +1 -0
  1097. package/lib/simple-tree/getSimpleSchema.d.ts +58 -0
  1098. package/lib/simple-tree/getSimpleSchema.d.ts.map +1 -0
  1099. package/lib/simple-tree/getSimpleSchema.js +64 -0
  1100. package/lib/simple-tree/getSimpleSchema.js.map +1 -0
  1101. package/lib/simple-tree/index.d.ts +12 -13
  1102. package/lib/simple-tree/index.d.ts.map +1 -1
  1103. package/lib/simple-tree/index.js +8 -11
  1104. package/lib/simple-tree/index.js.map +1 -1
  1105. package/lib/simple-tree/jsonSchema.d.ts +206 -0
  1106. package/lib/simple-tree/jsonSchema.d.ts.map +1 -0
  1107. package/lib/simple-tree/{nodeKeys.js → jsonSchema.js} +1 -1
  1108. package/lib/simple-tree/jsonSchema.js.map +1 -0
  1109. package/lib/simple-tree/leafNodeSchema.d.ts +1 -1
  1110. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  1111. package/lib/simple-tree/leafNodeSchema.js +1 -2
  1112. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  1113. package/lib/simple-tree/mapNode.d.ts +9 -3
  1114. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  1115. package/lib/simple-tree/mapNode.js +36 -36
  1116. package/lib/simple-tree/mapNode.js.map +1 -1
  1117. package/lib/simple-tree/objectNode.d.ts +18 -16
  1118. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  1119. package/lib/simple-tree/objectNode.js +36 -34
  1120. package/lib/simple-tree/objectNode.js.map +1 -1
  1121. package/lib/simple-tree/objectNodeTypes.d.ts +38 -0
  1122. package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -0
  1123. package/lib/simple-tree/objectNodeTypes.js +15 -0
  1124. package/lib/simple-tree/objectNodeTypes.js.map +1 -0
  1125. package/lib/simple-tree/proxies.d.ts +6 -25
  1126. package/lib/simple-tree/proxies.d.ts.map +1 -1
  1127. package/lib/simple-tree/proxies.js +46 -57
  1128. package/lib/simple-tree/proxies.js.map +1 -1
  1129. package/lib/simple-tree/proxyBinding.d.ts +45 -22
  1130. package/lib/simple-tree/proxyBinding.d.ts.map +1 -1
  1131. package/lib/simple-tree/proxyBinding.js +89 -52
  1132. package/lib/simple-tree/proxyBinding.js.map +1 -1
  1133. package/lib/simple-tree/schemaTypes.d.ts +10 -159
  1134. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  1135. package/lib/simple-tree/schemaTypes.js +9 -41
  1136. package/lib/simple-tree/schemaTypes.js.map +1 -1
  1137. package/lib/simple-tree/simpleSchema.d.ts +124 -0
  1138. package/lib/simple-tree/simpleSchema.d.ts.map +1 -0
  1139. package/lib/{feature-libraries/schema-aware/schemaAware.js → simple-tree/simpleSchema.js} +1 -1
  1140. package/lib/simple-tree/simpleSchema.js.map +1 -0
  1141. package/lib/simple-tree/simpleSchemaToJsonSchema.d.ts +12 -0
  1142. package/lib/simple-tree/simpleSchemaToJsonSchema.d.ts.map +1 -0
  1143. package/lib/simple-tree/simpleSchemaToJsonSchema.js +142 -0
  1144. package/lib/simple-tree/simpleSchemaToJsonSchema.js.map +1 -0
  1145. package/lib/simple-tree/toFlexSchema.d.ts +4 -12
  1146. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  1147. package/lib/simple-tree/toFlexSchema.js +9 -18
  1148. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  1149. package/lib/simple-tree/toMapTree.d.ts +39 -39
  1150. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  1151. package/lib/simple-tree/toMapTree.js +214 -158
  1152. package/lib/simple-tree/toMapTree.js.map +1 -1
  1153. package/lib/simple-tree/treeNodeValid.d.ts +74 -0
  1154. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -0
  1155. package/lib/simple-tree/{types.js → treeNodeValid.js} +8 -98
  1156. package/lib/simple-tree/treeNodeValid.js.map +1 -0
  1157. package/lib/simple-tree/typesUnsafe.d.ts +35 -4
  1158. package/lib/simple-tree/typesUnsafe.d.ts.map +1 -1
  1159. package/lib/simple-tree/typesUnsafe.js.map +1 -1
  1160. package/lib/simple-tree/viewSchemaToSimpleSchema.d.ts +11 -0
  1161. package/lib/simple-tree/viewSchemaToSimpleSchema.d.ts.map +1 -0
  1162. package/lib/simple-tree/viewSchemaToSimpleSchema.js +167 -0
  1163. package/lib/simple-tree/viewSchemaToSimpleSchema.js.map +1 -0
  1164. package/lib/util/brand.d.ts +0 -3
  1165. package/lib/util/brand.d.ts.map +1 -1
  1166. package/lib/util/brand.js +1 -2
  1167. package/lib/util/brand.js.map +1 -1
  1168. package/lib/util/brandedMap.d.ts +0 -5
  1169. package/lib/util/brandedMap.d.ts.map +1 -1
  1170. package/lib/util/brandedMap.js +0 -1
  1171. package/lib/util/brandedMap.js.map +1 -1
  1172. package/lib/util/idAllocator.d.ts +0 -2
  1173. package/lib/util/idAllocator.d.ts.map +1 -1
  1174. package/lib/util/idAllocator.js +0 -1
  1175. package/lib/util/idAllocator.js.map +1 -1
  1176. package/lib/util/index.d.ts +2 -2
  1177. package/lib/util/index.d.ts.map +1 -1
  1178. package/lib/util/index.js +2 -2
  1179. package/lib/util/index.js.map +1 -1
  1180. package/lib/util/nestedMap.d.ts +5 -19
  1181. package/lib/util/nestedMap.d.ts.map +1 -1
  1182. package/lib/util/nestedMap.js +15 -16
  1183. package/lib/util/nestedMap.js.map +1 -1
  1184. package/lib/util/opaque.d.ts +0 -4
  1185. package/lib/util/opaque.d.ts.map +1 -1
  1186. package/lib/util/opaque.js +0 -2
  1187. package/lib/util/opaque.js.map +1 -1
  1188. package/lib/util/rangeMap.d.ts +0 -2
  1189. package/lib/util/rangeMap.d.ts.map +1 -1
  1190. package/lib/util/rangeMap.js +4 -3
  1191. package/lib/util/rangeMap.js.map +1 -1
  1192. package/lib/util/transactionResult.d.ts +0 -1
  1193. package/lib/util/transactionResult.d.ts.map +1 -1
  1194. package/lib/util/transactionResult.js +0 -1
  1195. package/lib/util/transactionResult.js.map +1 -1
  1196. package/lib/util/typeCheck.d.ts +2 -20
  1197. package/lib/util/typeCheck.d.ts.map +1 -1
  1198. package/lib/util/typeCheck.js.map +1 -1
  1199. package/lib/util/typeCheckTests.d.ts +4 -4
  1200. package/lib/util/typeCheckTests.d.ts.map +1 -1
  1201. package/lib/util/typeCheckTests.js.map +1 -1
  1202. package/lib/util/typeUtils.d.ts +0 -7
  1203. package/lib/util/typeUtils.d.ts.map +1 -1
  1204. package/lib/util/typeUtils.js.map +1 -1
  1205. package/lib/util/utils.d.ts +6 -8
  1206. package/lib/util/utils.d.ts.map +1 -1
  1207. package/lib/util/utils.js +12 -4
  1208. package/lib/util/utils.js.map +1 -1
  1209. package/package.json +36 -25
  1210. package/src/codec/discriminatedUnions.ts +20 -10
  1211. package/src/codec/index.ts +5 -1
  1212. package/src/core/forest/README.md +4 -2
  1213. package/src/core/forest/editableForest.ts +1 -6
  1214. package/src/core/forest/forest.ts +0 -6
  1215. package/src/core/index.ts +2 -2
  1216. package/src/core/rebase/changeRebaser.ts +0 -4
  1217. package/src/core/rebase/index.ts +0 -2
  1218. package/src/core/rebase/types.ts +1 -23
  1219. package/src/core/rebase/utils.ts +13 -11
  1220. package/src/core/schema-stored/multiplicity.ts +0 -1
  1221. package/src/core/schema-stored/schema.ts +0 -7
  1222. package/src/core/schema-stored/storedSchemaRepository.ts +0 -3
  1223. package/src/core/schema-view/view.ts +0 -3
  1224. package/src/core/tree/anchorSet.ts +7 -17
  1225. package/src/core/tree/cursor.ts +1 -6
  1226. package/src/core/tree/delta.ts +0 -11
  1227. package/src/core/tree/detachedFieldIndexCodec.ts +4 -3
  1228. package/src/core/tree/detachedFieldIndexTypes.ts +0 -1
  1229. package/src/core/tree/index.ts +1 -1
  1230. package/src/core/tree/mapTree.ts +45 -4
  1231. package/src/core/tree/pathTree.ts +0 -11
  1232. package/src/core/tree/treeTextFormat.ts +3 -2
  1233. package/src/core/tree/types.ts +0 -11
  1234. package/src/core/tree/visitDelta.ts +2 -3
  1235. package/src/core/tree/visitPath.ts +0 -2
  1236. package/src/core/tree/visitorUtils.ts +0 -1
  1237. package/src/domains/index.ts +3 -0
  1238. package/src/domains/json/index.ts +7 -1
  1239. package/src/domains/json/jsonCursor.ts +113 -6
  1240. package/src/domains/json/jsonDomainSchema.ts +4 -5
  1241. package/src/domains/leafDomain.ts +0 -1
  1242. package/src/domains/schemaBuilder.ts +0 -22
  1243. package/src/events/events.ts +0 -4
  1244. package/src/feature-libraries/chunked-forest/README.md +9 -1
  1245. package/src/feature-libraries/chunked-forest/basicChunk.ts +14 -9
  1246. package/src/feature-libraries/chunked-forest/chunk.ts +1 -1
  1247. package/src/feature-libraries/chunked-forest/chunkTree.ts +4 -4
  1248. package/src/feature-libraries/chunked-forest/chunkedForest.ts +8 -6
  1249. package/src/feature-libraries/chunked-forest/codec/chunkCodecUtilities.ts +2 -2
  1250. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +9 -6
  1251. package/src/feature-libraries/chunked-forest/uniformChunk.ts +6 -4
  1252. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +18 -46
  1253. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +11 -6
  1254. package/src/feature-libraries/default-schema/defaultSchema.ts +0 -1
  1255. package/src/feature-libraries/default-schema/index.ts +1 -1
  1256. package/src/feature-libraries/default-schema/schemaChecker.ts +6 -0
  1257. package/src/feature-libraries/editableTreeBinder.ts +6 -78
  1258. package/src/feature-libraries/fieldGenerator.ts +0 -3
  1259. package/src/feature-libraries/flex-map-tree/index.ts +2 -1
  1260. package/src/feature-libraries/flex-map-tree/mapTreeNode.ts +238 -267
  1261. package/src/feature-libraries/flex-tree/context.ts +0 -1
  1262. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +27 -357
  1263. package/src/feature-libraries/flex-tree/index.ts +0 -1
  1264. package/src/feature-libraries/flex-tree/lazyField.ts +38 -208
  1265. package/src/feature-libraries/flex-tree/lazyNode.ts +5 -66
  1266. package/src/feature-libraries/flex-tree/treeEvents.ts +0 -2
  1267. package/src/feature-libraries/flex-tree/utilities.ts +6 -1
  1268. package/src/feature-libraries/forest-summary/codec.ts +3 -3
  1269. package/src/feature-libraries/index.ts +5 -35
  1270. package/src/feature-libraries/mapTreeCursor.ts +13 -4
  1271. package/src/feature-libraries/memoizedIdRangeAllocator.ts +0 -4
  1272. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +0 -2
  1273. package/src/feature-libraries/modular-schema/discrepancies.ts +117 -1
  1274. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +0 -8
  1275. package/src/feature-libraries/modular-schema/fieldKind.ts +1 -3
  1276. package/src/feature-libraries/modular-schema/genericFieldKind.ts +69 -92
  1277. package/src/feature-libraries/modular-schema/genericFieldKindCodecs.ts +7 -14
  1278. package/src/feature-libraries/modular-schema/genericFieldKindTypes.ts +6 -15
  1279. package/src/feature-libraries/modular-schema/index.ts +2 -2
  1280. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +68 -34
  1281. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +330 -336
  1282. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +7 -14
  1283. package/src/feature-libraries/node-key/nodeKey.ts +0 -4
  1284. package/src/feature-libraries/node-key/nodeKeyManager.ts +0 -1
  1285. package/src/feature-libraries/object-forest/objectForest.ts +1 -13
  1286. package/src/feature-libraries/schemaBuilderBase.ts +1 -49
  1287. package/src/feature-libraries/sequence-field/compose.ts +41 -20
  1288. package/src/feature-libraries/sequence-field/formatV2.ts +3 -3
  1289. package/src/feature-libraries/sequence-field/formatV3.ts +65 -0
  1290. package/src/feature-libraries/sequence-field/helperTypes.ts +33 -0
  1291. package/src/feature-libraries/sequence-field/index.ts +1 -0
  1292. package/src/feature-libraries/sequence-field/invert.ts +28 -18
  1293. package/src/feature-libraries/sequence-field/markQueue.ts +2 -2
  1294. package/src/feature-libraries/sequence-field/moveEffectTable.ts +2 -2
  1295. package/src/feature-libraries/sequence-field/rebase.ts +30 -13
  1296. package/src/feature-libraries/sequence-field/replaceRevisions.ts +27 -3
  1297. package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +52 -7
  1298. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +92 -19
  1299. package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +134 -0
  1300. package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +2 -0
  1301. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +8 -2
  1302. package/src/feature-libraries/sequence-field/types.ts +24 -4
  1303. package/src/feature-libraries/sequence-field/utils.ts +78 -50
  1304. package/src/feature-libraries/storedToViewSchema.ts +0 -1
  1305. package/src/feature-libraries/treeCursorUtils.ts +11 -11
  1306. package/src/feature-libraries/treeTextCursor.ts +0 -2
  1307. package/src/feature-libraries/typed-schema/flexList.ts +0 -3
  1308. package/src/feature-libraries/typed-schema/index.ts +0 -2
  1309. package/src/feature-libraries/typed-schema/schemaCollection.ts +0 -5
  1310. package/src/feature-libraries/typed-schema/typedTreeSchema.ts +2 -68
  1311. package/src/feature-libraries/typed-schema/view.ts +0 -1
  1312. package/src/index.ts +27 -245
  1313. package/src/internalTypes.ts +1 -0
  1314. package/src/packageVersion.ts +1 -1
  1315. package/src/shared-tree/schematizeTree.ts +25 -21
  1316. package/src/shared-tree/schematizingTreeView.ts +6 -6
  1317. package/src/shared-tree/sharedTree.ts +8 -39
  1318. package/src/shared-tree/sharedTreeChangeCodecs.ts +8 -0
  1319. package/src/shared-tree/sharedTreeChangeFamily.ts +3 -3
  1320. package/src/shared-tree/sharedTreeEditBuilder.ts +0 -2
  1321. package/src/shared-tree/treeApi.ts +3 -3
  1322. package/src/shared-tree/treeCheckout.ts +6 -8
  1323. package/src/shared-tree/treeView.ts +3 -6
  1324. package/src/shared-tree-core/branch.ts +20 -8
  1325. package/src/shared-tree-core/defaultResubmitMachine.ts +4 -4
  1326. package/src/shared-tree-core/editManagerCodecs.ts +1 -0
  1327. package/src/shared-tree-core/editManagerFormat.ts +7 -2
  1328. package/src/shared-tree-core/messageCodecs.ts +2 -1
  1329. package/src/shared-tree-core/sharedTreeCore.ts +5 -3
  1330. package/src/simple-tree/ProxyBinding.md +2 -0
  1331. package/src/simple-tree/api/README.md +7 -0
  1332. package/src/simple-tree/api/create.ts +179 -0
  1333. package/src/simple-tree/api/index.ts +36 -0
  1334. package/src/simple-tree/{schemaCreationUtilities.ts → api/schemaCreationUtilities.ts} +13 -5
  1335. package/src/simple-tree/{schemaFactory.ts → api/schemaFactory.ts} +36 -34
  1336. package/src/simple-tree/{schemaFactoryRecursive.ts → api/schemaFactoryRecursive.ts} +47 -10
  1337. package/src/simple-tree/{testRecursiveDomain.ts → api/testRecursiveDomain.ts} +3 -1
  1338. package/src/simple-tree/{tree.ts → api/tree.ts} +246 -34
  1339. package/src/simple-tree/{treeNodeApi.ts → api/treeNodeApi.ts} +47 -36
  1340. package/src/simple-tree/api/verboseTree.ts +415 -0
  1341. package/src/simple-tree/arrayNode.ts +100 -98
  1342. package/src/simple-tree/core/README.md +11 -0
  1343. package/src/simple-tree/core/index.ts +33 -0
  1344. package/src/simple-tree/{schemaCaching.ts → core/schemaCaching.ts} +3 -37
  1345. package/src/simple-tree/{treeNodeKernel.ts → core/treeNodeKernel.ts} +55 -5
  1346. package/src/simple-tree/core/treeNodeSchema.ts +184 -0
  1347. package/src/simple-tree/core/types.ts +255 -0
  1348. package/src/simple-tree/core/withType.ts +89 -0
  1349. package/src/simple-tree/getJsonSchema.ts +70 -0
  1350. package/src/simple-tree/getSimpleFieldSchema.ts +36 -0
  1351. package/src/simple-tree/getSimpleSchema.ts +69 -0
  1352. package/src/simple-tree/index.ts +58 -33
  1353. package/src/simple-tree/jsonSchema.ts +230 -0
  1354. package/src/simple-tree/leafNodeSchema.ts +6 -3
  1355. package/src/simple-tree/mapNode.ts +56 -55
  1356. package/src/simple-tree/objectNode.ts +66 -90
  1357. package/src/simple-tree/objectNodeTypes.ts +68 -0
  1358. package/src/simple-tree/proxies.ts +52 -68
  1359. package/src/simple-tree/proxyBinding.ts +127 -72
  1360. package/src/simple-tree/schemaTypes.ts +29 -194
  1361. package/src/simple-tree/simpleSchema.ts +138 -0
  1362. package/src/simple-tree/simpleSchemaToJsonSchema.ts +178 -0
  1363. package/src/simple-tree/toFlexSchema.ts +9 -42
  1364. package/src/simple-tree/toMapTree.ts +270 -296
  1365. package/src/simple-tree/{types.ts → treeNodeValid.ts} +16 -232
  1366. package/src/simple-tree/typesUnsafe.ts +51 -5
  1367. package/src/simple-tree/viewSchemaToSimpleSchema.ts +209 -0
  1368. package/src/util/brand.ts +1 -4
  1369. package/src/util/brandedMap.ts +0 -5
  1370. package/src/util/idAllocator.ts +0 -2
  1371. package/src/util/index.ts +2 -0
  1372. package/src/util/nestedMap.ts +23 -20
  1373. package/src/util/opaque.ts +0 -4
  1374. package/src/util/rangeMap.ts +5 -5
  1375. package/src/util/transactionResult.ts +0 -1
  1376. package/src/util/typeCheck.ts +2 -20
  1377. package/src/util/typeCheckTests.ts +4 -4
  1378. package/src/util/typeUtils.ts +0 -7
  1379. package/src/util/utils.ts +13 -8
  1380. package/tsconfig.json +0 -1
  1381. package/dist/feature-libraries/contextuallyTyped.d.ts +0 -209
  1382. package/dist/feature-libraries/contextuallyTyped.d.ts.map +0 -1
  1383. package/dist/feature-libraries/contextuallyTyped.js +0 -328
  1384. package/dist/feature-libraries/contextuallyTyped.js.map +0 -1
  1385. package/dist/feature-libraries/schema-aware/index.d.ts +0 -6
  1386. package/dist/feature-libraries/schema-aware/index.d.ts.map +0 -1
  1387. package/dist/feature-libraries/schema-aware/index.js.map +0 -1
  1388. package/dist/feature-libraries/schema-aware/schemaAware.d.ts +0 -76
  1389. package/dist/feature-libraries/schema-aware/schemaAware.d.ts.map +0 -1
  1390. package/dist/feature-libraries/schema-aware/schemaAware.js.map +0 -1
  1391. package/dist/simple-tree/nodeKeys.d.ts +0 -41
  1392. package/dist/simple-tree/nodeKeys.d.ts.map +0 -1
  1393. package/dist/simple-tree/nodeKeys.js +0 -7
  1394. package/dist/simple-tree/nodeKeys.js.map +0 -1
  1395. package/dist/simple-tree/schemaCaching.d.ts.map +0 -1
  1396. package/dist/simple-tree/schemaCaching.js.map +0 -1
  1397. package/dist/simple-tree/schemaCreationUtilities.d.ts.map +0 -1
  1398. package/dist/simple-tree/schemaCreationUtilities.js.map +0 -1
  1399. package/dist/simple-tree/schemaFactory.d.ts.map +0 -1
  1400. package/dist/simple-tree/schemaFactory.js.map +0 -1
  1401. package/dist/simple-tree/schemaFactoryRecursive.d.ts.map +0 -1
  1402. package/dist/simple-tree/schemaFactoryRecursive.js.map +0 -1
  1403. package/dist/simple-tree/testRecursiveDomain.d.ts +0 -61
  1404. package/dist/simple-tree/testRecursiveDomain.d.ts.map +0 -1
  1405. package/dist/simple-tree/testRecursiveDomain.js.map +0 -1
  1406. package/dist/simple-tree/tree.d.ts.map +0 -1
  1407. package/dist/simple-tree/tree.js +0 -73
  1408. package/dist/simple-tree/tree.js.map +0 -1
  1409. package/dist/simple-tree/treeNodeApi.d.ts.map +0 -1
  1410. package/dist/simple-tree/treeNodeApi.js.map +0 -1
  1411. package/dist/simple-tree/treeNodeKernel.d.ts +0 -26
  1412. package/dist/simple-tree/treeNodeKernel.d.ts.map +0 -1
  1413. package/dist/simple-tree/treeNodeKernel.js.map +0 -1
  1414. package/dist/simple-tree/types.d.ts.map +0 -1
  1415. package/dist/simple-tree/types.js.map +0 -1
  1416. package/lib/feature-libraries/contextuallyTyped.d.ts +0 -209
  1417. package/lib/feature-libraries/contextuallyTyped.d.ts.map +0 -1
  1418. package/lib/feature-libraries/contextuallyTyped.js +0 -311
  1419. package/lib/feature-libraries/contextuallyTyped.js.map +0 -1
  1420. package/lib/feature-libraries/schema-aware/index.d.ts +0 -6
  1421. package/lib/feature-libraries/schema-aware/index.d.ts.map +0 -1
  1422. package/lib/feature-libraries/schema-aware/index.js +0 -6
  1423. package/lib/feature-libraries/schema-aware/index.js.map +0 -1
  1424. package/lib/feature-libraries/schema-aware/schemaAware.d.ts +0 -76
  1425. package/lib/feature-libraries/schema-aware/schemaAware.d.ts.map +0 -1
  1426. package/lib/feature-libraries/schema-aware/schemaAware.js.map +0 -1
  1427. package/lib/simple-tree/nodeKeys.d.ts +0 -41
  1428. package/lib/simple-tree/nodeKeys.d.ts.map +0 -1
  1429. package/lib/simple-tree/nodeKeys.js.map +0 -1
  1430. package/lib/simple-tree/schemaCaching.d.ts.map +0 -1
  1431. package/lib/simple-tree/schemaCaching.js.map +0 -1
  1432. package/lib/simple-tree/schemaCreationUtilities.d.ts.map +0 -1
  1433. package/lib/simple-tree/schemaCreationUtilities.js.map +0 -1
  1434. package/lib/simple-tree/schemaFactory.d.ts.map +0 -1
  1435. package/lib/simple-tree/schemaFactory.js.map +0 -1
  1436. package/lib/simple-tree/schemaFactoryRecursive.d.ts.map +0 -1
  1437. package/lib/simple-tree/schemaFactoryRecursive.js.map +0 -1
  1438. package/lib/simple-tree/testRecursiveDomain.d.ts +0 -61
  1439. package/lib/simple-tree/testRecursiveDomain.d.ts.map +0 -1
  1440. package/lib/simple-tree/testRecursiveDomain.js.map +0 -1
  1441. package/lib/simple-tree/tree.d.ts.map +0 -1
  1442. package/lib/simple-tree/tree.js +0 -66
  1443. package/lib/simple-tree/tree.js.map +0 -1
  1444. package/lib/simple-tree/treeNodeApi.d.ts.map +0 -1
  1445. package/lib/simple-tree/treeNodeApi.js.map +0 -1
  1446. package/lib/simple-tree/treeNodeKernel.d.ts +0 -26
  1447. package/lib/simple-tree/treeNodeKernel.d.ts.map +0 -1
  1448. package/lib/simple-tree/treeNodeKernel.js.map +0 -1
  1449. package/lib/simple-tree/types.d.ts.map +0 -1
  1450. package/lib/simple-tree/types.js.map +0 -1
  1451. package/src/feature-libraries/contextuallyTyped.ts +0 -582
  1452. package/src/feature-libraries/schema-aware/README.md +0 -19
  1453. package/src/feature-libraries/schema-aware/index.ts +0 -16
  1454. package/src/feature-libraries/schema-aware/schemaAware.ts +0 -135
  1455. package/src/simple-tree/nodeKeys.ts +0 -42
  1456. /package/dist/simple-tree/{testRecursiveDomain.js → api/testRecursiveDomain.js} +0 -0
  1457. /package/lib/simple-tree/{testRecursiveDomain.js → api/testRecursiveDomain.js} +0 -0
@@ -8,7 +8,6 @@ import { BTree } from "@tylerbu/sorted-btree-es6";
8
8
 
9
9
  import type { ICodecFamily } from "../../codec/index.js";
10
10
  import {
11
- type ChangeAtomIdMap,
12
11
  type ChangeEncodingContext,
13
12
  type ChangeFamily,
14
13
  type ChangeFamilyEditor,
@@ -37,9 +36,7 @@ import {
37
36
  mapCursorField,
38
37
  replaceAtomRevisions,
39
38
  revisionMetadataSourceFromInfo,
40
- setInChangeAtomIdMap,
41
39
  areEqualChangeAtomIds,
42
- getFromChangeAtomIdMap,
43
40
  type ChangeAtomId,
44
41
  } from "../../core/index.js";
45
42
  import {
@@ -47,19 +44,11 @@ import {
47
44
  type IdAllocator,
48
45
  type Mutable,
49
46
  brand,
50
- deleteFromNestedMap,
51
47
  fail,
52
- forEachInNestedMap,
53
- getOrAddInMap,
54
48
  idAllocatorFromMaxId,
55
49
  idAllocatorFromState,
56
- nestedMapFromFlatList,
57
- nestedMapToFlatList,
58
- populateNestedMap,
59
- setInNestedMap,
60
- tryGetFromNestedMap,
61
- type NestedMap,
62
50
  type RangeQueryResult,
51
+ getOrAddInMapLazy,
63
52
  } from "../../util/index.js";
64
53
  import {
65
54
  type TreeChunk,
@@ -86,6 +75,7 @@ import { type FieldKindWithEditor, withEditor } from "./fieldKindWithEditor.js";
86
75
  import { convertGenericChange, genericFieldKind } from "./genericFieldKind.js";
87
76
  import type { GenericChangeset } from "./genericFieldKindTypes.js";
88
77
  import type {
78
+ ChangeAtomIdBTree,
89
79
  CrossFieldKeyRange,
90
80
  CrossFieldKeyTable,
91
81
  FieldChange,
@@ -215,27 +205,27 @@ export class ModularChangeFamily
215
205
  return makeModularChangeset();
216
206
  }
217
207
 
218
- return changes.reduce((change1, change2) =>
219
- makeAnonChange(this.composePair(change1, change2, revInfos, idState)),
220
- ).change;
208
+ return changes
209
+ .map((change) => change.change)
210
+ .reduce((change1, change2) => this.composePair(change1, change2, revInfos, idState));
221
211
  }
222
212
 
223
213
  private composePair(
224
- change1: TaggedChange<ModularChangeset>,
225
- change2: TaggedChange<ModularChangeset>,
214
+ change1: ModularChangeset,
215
+ change2: ModularChangeset,
226
216
  revInfos: RevisionInfo[],
227
217
  idState: IdAllocationState,
228
218
  ): ModularChangeset {
229
219
  const { fieldChanges, nodeChanges, nodeToParent, nodeAliases, crossFieldKeys } =
230
- this.composeAllFields(change1.change, change2.change, revInfos, idState);
220
+ this.composeAllFields(change1, change2, revInfos, idState);
231
221
 
232
- const { allBuilds, allDestroys, allRefreshers } = composeBuildsDestroysAndRefreshers([
222
+ const { allBuilds, allDestroys, allRefreshers } = composeBuildsDestroysAndRefreshers(
233
223
  change1,
234
224
  change2,
235
- ]);
225
+ );
236
226
 
237
227
  return makeModularChangeset(
238
- this.pruneFieldMap(fieldChanges, nodeChanges),
228
+ fieldChanges,
239
229
  nodeChanges,
240
230
  nodeToParent,
241
231
  nodeAliases,
@@ -258,10 +248,10 @@ export class ModularChangeFamily
258
248
  if (hasConflicts(change1) && hasConflicts(change2)) {
259
249
  return {
260
250
  fieldChanges: new Map(),
261
- nodeChanges: new Map(),
262
- nodeToParent: new Map(),
263
- nodeAliases: new Map(),
264
- crossFieldKeys: newBTree(),
251
+ nodeChanges: newTupleBTree(),
252
+ nodeToParent: newTupleBTree(),
253
+ nodeAliases: newTupleBTree(),
254
+ crossFieldKeys: newTupleBTree(),
265
255
  };
266
256
  } else if (hasConflicts(change1)) {
267
257
  return change2;
@@ -276,21 +266,21 @@ export class ModularChangeFamily
276
266
 
277
267
  // We merge nodeChanges, nodeToParent, and nodeAliases from the two changesets.
278
268
  // The merged tables will have correct entries for all nodes which are only referenced in one of the input changesets.
279
- // During composeFieldMaps and processInvalidatedElements we will find all nodes referenced in both input changesets
269
+ // During composeFieldMaps and composeInvalidatedElements we will find all nodes referenced in both input changesets
280
270
  // and adjust these tables as necessary.
281
271
  // Note that when merging these tables we may encounter key collisions and will arbitrarily drop values in that case.
282
272
  // A collision for a node ID means that that node is referenced in both changesets
283
273
  // (since we assume that if two changesets use the same node ID they are referring to the same node),
284
274
  // therefore all collisions will be addressed when processing the intersection of the changesets.
285
- const composedNodeChanges: ChangeAtomIdMap<NodeChangeset> = mergeNestedMaps(
286
- change1.nodeChanges,
287
- change2.nodeChanges,
275
+ const composedNodeChanges: ChangeAtomIdBTree<NodeChangeset> = brand(
276
+ mergeBTrees(change1.nodeChanges, change2.nodeChanges),
288
277
  );
289
278
 
290
- const composedNodeToParent = mergeNestedMaps(change1.nodeToParent, change2.nodeToParent);
291
- const composedNodeAliases: ChangeAtomIdMap<NodeId> = mergeNestedMaps(
292
- change1.nodeAliases,
293
- change2.nodeAliases,
279
+ const composedNodeToParent: ChangeAtomIdBTree<FieldId> = brand(
280
+ mergeBTrees(change1.nodeToParent, change2.nodeToParent),
281
+ );
282
+ const composedNodeAliases: ChangeAtomIdBTree<NodeId> = brand(
283
+ mergeBTrees(change1.nodeAliases, change2.nodeAliases),
294
284
  );
295
285
 
296
286
  const composedFields = this.composeFieldMaps(
@@ -301,7 +291,7 @@ export class ModularChangeFamily
301
291
  revisionMetadata,
302
292
  );
303
293
 
304
- this.processInvalidatedElements(
294
+ this.composeInvalidatedElements(
305
295
  crossFieldTable,
306
296
  composedFields,
307
297
  composedNodeChanges,
@@ -367,12 +357,12 @@ export class ModularChangeFamily
367
357
  *
368
358
  * Updating an element may invalidate further elements. This function runs until there is no more invalidation.
369
359
  */
370
- private processInvalidatedElements(
360
+ private composeInvalidatedElements(
371
361
  table: ComposeTable,
372
362
  composedFields: FieldChangeMap,
373
- composedNodes: ChangeAtomIdMap<NodeChangeset>,
374
- composedNodeToParent: ChangeAtomIdMap<FieldId>,
375
- nodeAliases: ChangeAtomIdMap<NodeId>,
363
+ composedNodes: ChangeAtomIdBTree<NodeChangeset>,
364
+ composedNodeToParent: ChangeAtomIdBTree<FieldId>,
365
+ nodeAliases: ChangeAtomIdBTree<NodeId>,
376
366
  genId: IdAllocator,
377
367
  metadata: RevisionMetadataSource,
378
368
  ): void {
@@ -456,7 +446,7 @@ export class ModularChangeFamily
456
446
  areBaseFields: boolean,
457
447
  affectedFields: BTree<FieldIdKey, true>,
458
448
  composedFields: FieldChangeMap,
459
- composedNodes: ChangeAtomIdMap<NodeChangeset>,
449
+ composedNodes: ChangeAtomIdBTree<NodeChangeset>,
460
450
  genId: IdAllocator,
461
451
  metadata: RevisionMetadataSource,
462
452
  ): void {
@@ -600,11 +590,11 @@ export class ModularChangeFamily
600
590
  }
601
591
 
602
592
  private composeNodesById(
603
- nodeChanges1: ChangeAtomIdMap<NodeChangeset>,
604
- nodeChanges2: ChangeAtomIdMap<NodeChangeset>,
605
- composedNodes: ChangeAtomIdMap<NodeChangeset>,
606
- composedNodeToParent: ChangeAtomIdMap<FieldId>,
607
- nodeAliases: ChangeAtomIdMap<NodeId>,
593
+ nodeChanges1: ChangeAtomIdBTree<NodeChangeset>,
594
+ nodeChanges2: ChangeAtomIdBTree<NodeChangeset>,
595
+ composedNodes: ChangeAtomIdBTree<NodeChangeset>,
596
+ composedNodeToParent: ChangeAtomIdBTree<FieldId>,
597
+ nodeAliases: ChangeAtomIdBTree<NodeId>,
608
598
  id1: NodeId,
609
599
  id2: NodeId,
610
600
  idAllocator: IdAllocator,
@@ -624,12 +614,12 @@ export class ModularChangeFamily
624
614
  setInChangeAtomIdMap(composedNodes, id1, composedNodeChangeset);
625
615
 
626
616
  if (!areEqualChangeAtomIds(id1, id2)) {
627
- deleteFromNestedMap(composedNodes, id2.revision, id2.localId);
628
- deleteFromNestedMap(composedNodeToParent, id2.revision, id2.localId);
617
+ composedNodes.delete([id2.revision, id2.localId]);
618
+ composedNodeToParent.delete([id2.revision, id2.localId]);
629
619
  setInChangeAtomIdMap(nodeAliases, id2, id1);
630
620
 
631
621
  // We need to delete id1 to avoid forming a cycle in case id1 already had an alias.
632
- deleteFromNestedMap(nodeAliases, id1.revision, id1.localId);
622
+ nodeAliases.delete([id1.revision, id1.localId]);
633
623
  }
634
624
 
635
625
  crossFieldTable.composedNodes.add(composedNodeChangeset);
@@ -675,9 +665,7 @@ export class ModularChangeFamily
675
665
  isRollback: boolean,
676
666
  ): ModularChangeset {
677
667
  // Rollback changesets destroy the nodes created by the change being rolled back.
678
- const destroys = isRollback
679
- ? invertBuilds(change.change.builds, change.revision)
680
- : undefined;
668
+ const destroys = isRollback ? invertBuilds(change.change.builds) : undefined;
681
669
 
682
670
  // Destroys only occur in rollback changesets, which are never inverted.
683
671
  assert(
@@ -701,12 +689,11 @@ export class ModularChangeFamily
701
689
  }
702
690
 
703
691
  const genId: IdAllocator = idAllocatorFromMaxId(change.change.maxId ?? -1);
704
- const invertedNodeToParent = cloneNestedMap(change.change.nodeToParent);
705
692
 
706
693
  const crossFieldTable: InvertTable = {
707
694
  ...newCrossFieldTable<FieldChange>(),
708
695
  originalFieldToContext: new Map(),
709
- invertedNodeToParent,
696
+ invertedNodeToParent: brand(change.change.nodeToParent.clone()),
710
697
  };
711
698
 
712
699
  const { revInfos } = getRevInfoFromTaggedChanges([change]);
@@ -721,12 +708,10 @@ export class ModularChangeFamily
721
708
  revisionMetadata,
722
709
  );
723
710
 
724
- const invertedNodes: ChangeAtomIdMap<NodeChangeset> = new Map();
725
- forEachInNestedMap(change.change.nodeChanges, (nodeChangeset, revision, localId) => {
726
- setInNestedMap(
727
- invertedNodes,
728
- revision,
729
- localId,
711
+ const invertedNodes: ChangeAtomIdBTree<NodeChangeset> = newTupleBTree();
712
+ change.change.nodeChanges.forEachPair(([revision, localId], nodeChangeset) => {
713
+ invertedNodes.set(
714
+ [revision, localId],
730
715
  this.invertNodeChange(
731
716
  nodeChangeset,
732
717
  { revision, localId },
@@ -769,7 +754,7 @@ export class ModularChangeFamily
769
754
  return makeModularChangeset(
770
755
  invertedFields,
771
756
  invertedNodes,
772
- invertedNodeToParent,
757
+ crossFieldTable.invertedNodeToParent,
773
758
  change.change.nodeAliases,
774
759
  crossFieldKeys,
775
760
  genId.getMaxId(),
@@ -852,15 +837,16 @@ export class ModularChangeFamily
852
837
  newChange: change,
853
838
  baseChange: over.change,
854
839
  baseFieldToContext: new Map(),
855
- baseToRebasedNodeId: new Map(),
840
+ baseToRebasedNodeId: newTupleBTree(),
856
841
  rebasedFields: new Set(),
857
- rebasedNodeToParent: cloneNestedMap(change.nodeToParent),
842
+ rebasedNodeToParent: brand(change.nodeToParent.clone()),
858
843
  rebasedCrossFieldKeys: brand(change.crossFieldKeys.clone()),
859
844
  nodeIdPairs: [],
860
- affectedBaseFields: newBTree(),
845
+ affectedBaseFields: newTupleBTree(),
846
+ fieldsWithUnattachedChild: new Set(),
861
847
  };
862
848
 
863
- let constraintState = newConstraintState(change.constraintViolationCount ?? 0);
849
+ const constraintState = newConstraintState(change.constraintViolationCount ?? 0);
864
850
 
865
851
  const getBaseRevisions = (): RevisionTag[] =>
866
852
  revisionInfoFromTaggedChange(over).map((info) => info.revision);
@@ -871,7 +857,7 @@ export class ModularChangeFamily
871
857
  getBaseRevisions,
872
858
  };
873
859
 
874
- const rebasedNodes: ChangeAtomIdMap<NodeChangeset> = cloneNestedMap(change.nodeChanges);
860
+ const rebasedNodes: ChangeAtomIdBTree<NodeChangeset> = brand(change.nodeChanges.clone());
875
861
 
876
862
  const rebasedFields = this.rebaseIntersectingFields(
877
863
  crossFieldTable,
@@ -881,64 +867,14 @@ export class ModularChangeFamily
881
867
  rebaseMetadata,
882
868
  );
883
869
 
884
- this.rebaseFieldsWithoutNewChanges(
870
+ this.rebaseInvalidatedElements(
885
871
  rebasedFields,
886
872
  rebasedNodes,
887
873
  crossFieldTable,
888
- genId,
889
874
  rebaseMetadata,
875
+ genId,
890
876
  );
891
877
 
892
- if (crossFieldTable.invalidatedFields.size > 0) {
893
- const fieldsToUpdate = crossFieldTable.invalidatedFields;
894
- crossFieldTable.invalidatedFields = new Set();
895
- constraintState = newConstraintState(change.constraintViolationCount ?? 0);
896
- for (const field of fieldsToUpdate) {
897
- const context = crossFieldTable.baseFieldToContext.get(field);
898
- assert(context !== undefined, 0x852 /* Every field should have a context */);
899
- const {
900
- changeHandler,
901
- change1: fieldChangeset,
902
- change2: baseChangeset,
903
- } = this.normalizeFieldChanges(
904
- context.newChange,
905
- context.baseChange,
906
- genId,
907
- revisionMetadata,
908
- );
909
-
910
- const rebaseChild = (
911
- curr: NodeId | undefined,
912
- base: NodeId | undefined,
913
- ): NodeId | undefined => {
914
- if (curr !== undefined) {
915
- return curr;
916
- }
917
-
918
- if (base !== undefined) {
919
- for (const id of context.baseNodeIds) {
920
- if (areEqualChangeAtomIds(base, id)) {
921
- return base;
922
- }
923
- }
924
- }
925
-
926
- return undefined;
927
- };
928
-
929
- context.rebasedChange.change = brand(
930
- changeHandler.rebaser.rebase(
931
- fieldChangeset,
932
- baseChangeset,
933
- rebaseChild,
934
- genId,
935
- new RebaseManager(crossFieldTable, field, context.fieldId),
936
- rebaseMetadata,
937
- ),
938
- );
939
- }
940
- }
941
-
942
878
  this.updateConstraintsForFields(
943
879
  rebasedFields,
944
880
  NodeAttachState.Attached,
@@ -965,7 +901,7 @@ export class ModularChangeFamily
965
901
  // TODO: Can we also handle additional passes in this method?
966
902
  private rebaseIntersectingFields(
967
903
  crossFieldTable: RebaseTable,
968
- rebasedNodes: ChangeAtomIdMap<NodeChangeset>,
904
+ rebasedNodes: ChangeAtomIdBTree<NodeChangeset>,
969
905
  genId: IdAllocator,
970
906
  constraintState: ConstraintState,
971
907
  metadata: RebaseRevisionMetadata,
@@ -1002,7 +938,7 @@ export class ModularChangeFamily
1002
938
  // This processes fields which have no new changes but have been invalidated by another field.
1003
939
  private rebaseFieldsWithoutNewChanges(
1004
940
  rebasedFields: FieldChangeMap,
1005
- rebasedNodes: ChangeAtomIdMap<NodeChangeset>,
941
+ rebasedNodes: ChangeAtomIdBTree<NodeChangeset>,
1006
942
  crossFieldTable: RebaseTable,
1007
943
  genId: IdAllocator,
1008
944
  metadata: RebaseRevisionMetadata,
@@ -1088,9 +1024,102 @@ export class ModularChangeFamily
1088
1024
  }
1089
1025
  }
1090
1026
 
1027
+ private rebaseInvalidatedElements(
1028
+ rebasedFields: FieldChangeMap,
1029
+ rebasedNodes: ChangeAtomIdBTree<NodeChangeset>,
1030
+ table: RebaseTable,
1031
+ metadata: RebaseRevisionMetadata,
1032
+ idAllocator: IdAllocator,
1033
+ ): void {
1034
+ this.rebaseFieldsWithoutNewChanges(
1035
+ rebasedFields,
1036
+ rebasedNodes,
1037
+ table,
1038
+ idAllocator,
1039
+ metadata,
1040
+ );
1041
+
1042
+ this.rebaseFieldsWithUnattachedChild(table, metadata, idAllocator);
1043
+ this.rebaseInvalidatedFields(table, metadata, idAllocator);
1044
+ }
1045
+
1046
+ private rebaseInvalidatedFields(
1047
+ crossFieldTable: RebaseTable,
1048
+ rebaseMetadata: RebaseRevisionMetadata,
1049
+ genId: IdAllocator,
1050
+ ): void {
1051
+ const fieldsToUpdate = crossFieldTable.invalidatedFields;
1052
+ crossFieldTable.invalidatedFields = new Set();
1053
+ for (const field of fieldsToUpdate) {
1054
+ this.rebaseInvalidatedField(field, crossFieldTable, rebaseMetadata, genId);
1055
+ }
1056
+ }
1057
+
1058
+ private rebaseFieldsWithUnattachedChild(
1059
+ table: RebaseTable,
1060
+ metadata: RebaseRevisionMetadata,
1061
+ idAllocator: IdAllocator,
1062
+ ): void {
1063
+ for (const field of table.fieldsWithUnattachedChild) {
1064
+ table.invalidatedFields.delete(field);
1065
+ this.rebaseInvalidatedField(field, table, metadata, idAllocator, true);
1066
+ }
1067
+ }
1068
+
1069
+ private rebaseInvalidatedField(
1070
+ baseField: FieldChange,
1071
+ crossFieldTable: RebaseTable,
1072
+ rebaseMetadata: RebaseRevisionMetadata,
1073
+ genId: IdAllocator,
1074
+ allowInval = false,
1075
+ ): void {
1076
+ const context = crossFieldTable.baseFieldToContext.get(baseField);
1077
+ assert(context !== undefined, 0x852 /* Every field should have a context */);
1078
+ const {
1079
+ changeHandler,
1080
+ change1: fieldChangeset,
1081
+ change2: baseChangeset,
1082
+ } = this.normalizeFieldChanges(
1083
+ context.newChange,
1084
+ context.baseChange,
1085
+ genId,
1086
+ rebaseMetadata,
1087
+ );
1088
+
1089
+ const rebaseChild = (
1090
+ curr: NodeId | undefined,
1091
+ base: NodeId | undefined,
1092
+ ): NodeId | undefined => {
1093
+ if (curr !== undefined) {
1094
+ return curr;
1095
+ }
1096
+
1097
+ if (base !== undefined) {
1098
+ for (const id of context.baseNodeIds) {
1099
+ if (areEqualChangeAtomIds(base, id)) {
1100
+ return base;
1101
+ }
1102
+ }
1103
+ }
1104
+
1105
+ return undefined;
1106
+ };
1107
+
1108
+ context.rebasedChange.change = brand(
1109
+ changeHandler.rebaser.rebase(
1110
+ fieldChangeset,
1111
+ baseChangeset,
1112
+ rebaseChild,
1113
+ genId,
1114
+ new RebaseManager(crossFieldTable, baseField, context.fieldId, allowInval),
1115
+ rebaseMetadata,
1116
+ ),
1117
+ );
1118
+ }
1119
+
1091
1120
  private attachRebasedField(
1092
1121
  rebasedFields: FieldChangeMap,
1093
- rebasedNodes: ChangeAtomIdMap<NodeChangeset>,
1122
+ rebasedNodes: ChangeAtomIdBTree<NodeChangeset>,
1094
1123
  table: RebaseTable,
1095
1124
  rebasedField: FieldChange,
1096
1125
  { nodeId, field: fieldKey }: FieldId,
@@ -1135,7 +1164,7 @@ export class ModularChangeFamily
1135
1164
 
1136
1165
  private attachRebasedNode(
1137
1166
  rebasedFields: FieldChangeMap,
1138
- rebasedNodes: ChangeAtomIdMap<NodeChangeset>,
1167
+ rebasedNodes: ChangeAtomIdBTree<NodeChangeset>,
1139
1168
  table: RebaseTable,
1140
1169
  baseNodeId: NodeId,
1141
1170
  parentFieldIdBase: FieldId,
@@ -1154,9 +1183,9 @@ export class ModularChangeFamily
1154
1183
  const context = table.baseFieldToContext.get(baseFieldChange);
1155
1184
  if (context !== undefined) {
1156
1185
  // We've already processed this field.
1157
- // The new child node can be attached when processing invalidated fields.
1186
+ // The new child node will be attached in rebaseFieldsWithUnattachedChild.
1158
1187
  context.baseNodeIds.push(baseNodeId);
1159
- table.invalidatedFields.add(baseFieldChange);
1188
+ table.fieldsWithUnattachedChild.add(baseFieldChange);
1160
1189
  return;
1161
1190
  }
1162
1191
 
@@ -1310,7 +1339,7 @@ export class ModularChangeFamily
1310
1339
  fields: FieldChangeMap,
1311
1340
  parentAttachState: NodeAttachState,
1312
1341
  constraintState: ConstraintState,
1313
- nodes: ChangeAtomIdMap<NodeChangeset>,
1342
+ nodes: ChangeAtomIdBTree<NodeChangeset>,
1314
1343
  ): void {
1315
1344
  for (const field of fields.values()) {
1316
1345
  const handler = getChangeHandler(this.fieldKinds, field.fieldKind);
@@ -1329,11 +1358,9 @@ export class ModularChangeFamily
1329
1358
  nodeId: NodeId,
1330
1359
  attachState: NodeAttachState,
1331
1360
  constraintState: ConstraintState,
1332
- nodes: ChangeAtomIdMap<NodeChangeset>,
1361
+ nodes: ChangeAtomIdBTree<NodeChangeset>,
1333
1362
  ): void {
1334
- const node =
1335
- tryGetFromNestedMap(nodes, nodeId.revision, nodeId.localId) ?? fail("Unknown node ID");
1336
-
1363
+ const node = nodes.get([nodeId.revision, nodeId.localId]) ?? fail("Unknown node ID");
1337
1364
  if (node.nodeExistsConstraint !== undefined) {
1338
1365
  const isNowViolated = attachState === NodeAttachState.Detached;
1339
1366
  if (node.nodeExistsConstraint.violated !== isNowViolated) {
@@ -1352,7 +1379,7 @@ export class ModularChangeFamily
1352
1379
 
1353
1380
  private pruneFieldMap(
1354
1381
  changeset: FieldChangeMap | undefined,
1355
- nodeMap: ChangeAtomIdMap<NodeChangeset>,
1382
+ nodeMap: ChangeAtomIdBTree<NodeChangeset>,
1356
1383
  ): FieldChangeMap | undefined {
1357
1384
  if (changeset === undefined) {
1358
1385
  return undefined;
@@ -1376,7 +1403,7 @@ export class ModularChangeFamily
1376
1403
 
1377
1404
  private pruneNodeChange(
1378
1405
  nodeId: NodeId,
1379
- nodeMap: ChangeAtomIdMap<NodeChangeset>,
1406
+ nodeMap: ChangeAtomIdBTree<NodeChangeset>,
1380
1407
  ): NodeId | undefined {
1381
1408
  const changeset = nodeChangeFromId(nodeMap, nodeId);
1382
1409
  const prunedFields =
@@ -1390,7 +1417,7 @@ export class ModularChangeFamily
1390
1417
  }
1391
1418
 
1392
1419
  if (isEmptyNodeChangeset(prunedChange)) {
1393
- deleteFromNestedMap(nodeMap, nodeId.revision, nodeId.localId);
1420
+ nodeMap.delete([nodeId.revision, nodeId.localId]);
1394
1421
  return undefined;
1395
1422
  } else {
1396
1423
  setInChangeAtomIdMap(nodeMap, nodeId, prunedChange);
@@ -1414,25 +1441,25 @@ export class ModularChangeFamily
1414
1441
  newRevision,
1415
1442
  );
1416
1443
 
1417
- const updatedNodes: ChangeAtomIdMap<NodeChangeset> = nestedMapFromFlatList(
1418
- nestedMapToFlatList(change.nodeChanges).map(([revision, id, nodeChangeset]) => [
1419
- replaceRevision(revision, oldRevisions, newRevision),
1420
- id,
1444
+ const updatedNodes: ChangeAtomIdBTree<NodeChangeset> = newTupleBTree();
1445
+ for (const [[revision, id], nodeChangeset] of change.nodeChanges.entries()) {
1446
+ updatedNodes.set(
1447
+ [replaceRevision(revision, oldRevisions, newRevision), id],
1421
1448
  this.replaceNodeChangesetRevisions(nodeChangeset, oldRevisions, newRevision),
1422
- ]),
1423
- );
1449
+ );
1450
+ }
1424
1451
 
1425
- const updatedNodeToParent: ChangeAtomIdMap<FieldId> = nestedMapFromFlatList(
1426
- nestedMapToFlatList(change.nodeToParent).map(([revision, id, fieldId]) => [
1427
- replaceRevision(revision, oldRevisions, newRevision),
1428
- id,
1452
+ const updatedNodeToParent: ChangeAtomIdBTree<FieldId> = newTupleBTree();
1453
+ for (const [[revision, id], fieldId] of change.nodeToParent.entries()) {
1454
+ updatedNodeToParent.set(
1455
+ [replaceRevision(revision, oldRevisions, newRevision), id],
1429
1456
  replaceFieldIdRevision(
1430
1457
  normalizeFieldId(fieldId, change.nodeAliases),
1431
1458
  oldRevisions,
1432
1459
  newRevision,
1433
1460
  ),
1434
- ]),
1435
- );
1461
+ );
1462
+ }
1436
1463
 
1437
1464
  const updated: Mutable<ModularChangeset> = {
1438
1465
  ...change,
@@ -1441,7 +1468,7 @@ export class ModularChangeFamily
1441
1468
  nodeToParent: updatedNodeToParent,
1442
1469
 
1443
1470
  // We've updated all references to old node IDs, so we no longer need an alias table.
1444
- nodeAliases: new Map(),
1471
+ nodeAliases: newTupleBTree(),
1445
1472
  crossFieldKeys: replaceCrossFieldKeyTableRevisions(
1446
1473
  change.crossFieldKeys,
1447
1474
  oldRevisions,
@@ -1513,11 +1540,11 @@ export class ModularChangeFamily
1513
1540
 
1514
1541
  private makeCrossFieldKeyTable(
1515
1542
  fields: FieldChangeMap,
1516
- nodes: ChangeAtomIdMap<NodeChangeset>,
1543
+ nodes: ChangeAtomIdBTree<NodeChangeset>,
1517
1544
  ): CrossFieldKeyTable {
1518
1545
  const keys: CrossFieldKeyTable = newCrossFieldKeyTable();
1519
1546
  this.populateCrossFieldKeyTableForFieldMap(keys, fields, undefined);
1520
- forEachInNestedMap(nodes, (node, revision, localId) => {
1547
+ nodes.forEachPair(([revision, localId], node) => {
1521
1548
  if (node.fieldChanges !== undefined) {
1522
1549
  this.populateCrossFieldKeyTableForFieldMap(keys, node.fieldChanges, {
1523
1550
  revision,
@@ -1558,9 +1585,9 @@ function replaceCrossFieldKeyTableRevisions(
1558
1585
  table: CrossFieldKeyTable,
1559
1586
  oldRevisions: Set<RevisionTag | undefined>,
1560
1587
  newRevision: RevisionTag | undefined,
1561
- nodeAliases: ChangeAtomIdMap<NodeId>,
1588
+ nodeAliases: ChangeAtomIdBTree<NodeId>,
1562
1589
  ): CrossFieldKeyTable {
1563
- const updated: CrossFieldKeyTable = newBTree();
1590
+ const updated: CrossFieldKeyTable = newTupleBTree();
1564
1591
  table.forEachPair(([target, revision, id, count], field) => {
1565
1592
  const updatedKey: CrossFieldKeyRange = [
1566
1593
  target,
@@ -1595,122 +1622,92 @@ function replaceRevision(
1595
1622
  }
1596
1623
 
1597
1624
  function replaceIdMapRevisions<T>(
1598
- map: ChangeAtomIdMap<T>,
1625
+ map: ChangeAtomIdBTree<T>,
1599
1626
  oldRevisions: Set<RevisionTag | undefined>,
1600
1627
  newRevision: RevisionTag | undefined,
1601
- ): ChangeAtomIdMap<T> {
1602
- return nestedMapFromFlatList(
1603
- nestedMapToFlatList(map).map(([revision, id, value]) => [
1604
- replaceRevision(revision, oldRevisions, newRevision),
1605
- id,
1606
- value,
1607
- ]),
1608
- );
1628
+ ): ChangeAtomIdBTree<T> {
1629
+ const updated: ChangeAtomIdBTree<T> = newTupleBTree();
1630
+ for (const [[revision, id], value] of map.entries()) {
1631
+ updated.set([replaceRevision(revision, oldRevisions, newRevision), id], value);
1632
+ }
1633
+
1634
+ return updated;
1609
1635
  }
1610
1636
 
1611
1637
  interface BuildsDestroysAndRefreshers {
1612
- readonly allBuilds: ChangeAtomIdMap<TreeChunk>;
1613
- readonly allDestroys: ChangeAtomIdMap<number>;
1614
- readonly allRefreshers: ChangeAtomIdMap<TreeChunk>;
1638
+ readonly allBuilds: ChangeAtomIdBTree<TreeChunk>;
1639
+ readonly allDestroys: ChangeAtomIdBTree<number>;
1640
+ readonly allRefreshers: ChangeAtomIdBTree<TreeChunk>;
1615
1641
  }
1616
1642
 
1617
1643
  function composeBuildsDestroysAndRefreshers(
1618
- changes: TaggedChange<ModularChangeset>[],
1644
+ change1: ModularChangeset,
1645
+ change2: ModularChangeset,
1619
1646
  ): BuildsDestroysAndRefreshers {
1620
- const allBuilds: ChangeAtomIdMap<TreeChunk> = new Map();
1621
- const allDestroys: ChangeAtomIdMap<number> = new Map();
1622
- const allRefreshers: ChangeAtomIdMap<TreeChunk> = new Map();
1623
- for (const taggedChange of changes) {
1624
- const revision = revisionFromTaggedChange(taggedChange);
1625
- const change = taggedChange.change;
1626
- if (change.builds) {
1627
- for (const [revisionKey, innerMap] of change.builds) {
1628
- const setRevisionKey = revisionKey ?? revision;
1629
- const innerDstMap = getOrAddInMap(
1630
- allBuilds,
1631
- setRevisionKey,
1632
- new Map<ChangesetLocalId, TreeChunk>(),
1647
+ // Duplicate builds can happen in compositions of commits that needed to include detached tree refreshers (e.g., undos):
1648
+ // In that case, it's possible for the refreshers to contain different trees because the latter
1649
+ // refresher may already reflect the changes made by the commit that includes the earlier
1650
+ // refresher. This composition includes the changes made by the commit that includes the
1651
+ // earlier refresher, so we need to include the build for the earlier refresher, otherwise
1652
+ // the produced changeset will build a tree one which those changes have already been applied
1653
+ // and also try to apply the changes again, effectively applying them twice.
1654
+ // Note that it would in principle be possible to adopt the later build and exclude from the
1655
+ // composition all the changes already reflected on the tree, but that is not something we
1656
+ // care to support at this time.
1657
+ const allBuilds: ChangeAtomIdBTree<TreeChunk> = brand(
1658
+ mergeBTrees(change1.builds ?? newTupleBTree(), change2.builds ?? newTupleBTree(), true),
1659
+ );
1660
+
1661
+ const allDestroys: ChangeAtomIdBTree<number> = brand(
1662
+ mergeBTrees(change1.destroys ?? newTupleBTree(), change2.destroys ?? newTupleBTree()),
1663
+ );
1664
+
1665
+ const allRefreshers: ChangeAtomIdBTree<TreeChunk> = brand(
1666
+ mergeBTrees(
1667
+ change1.refreshers ?? newTupleBTree(),
1668
+ change2.refreshers ?? newTupleBTree(),
1669
+ true,
1670
+ ),
1671
+ );
1672
+
1673
+ if (change1.destroys !== undefined && change2.builds !== undefined) {
1674
+ for (const [key, chunk] of change2.builds.entries()) {
1675
+ const destroyCount = change1.destroys.get(key);
1676
+ if (destroyCount !== undefined) {
1677
+ assert(
1678
+ destroyCount === chunk.topLevelLength,
1679
+ 0x89b /* Expected build and destroy to have the same length */,
1633
1680
  );
1634
- for (const [id, chunk] of innerMap) {
1635
- // Check for duplicate builds and prefer earlier ones.
1636
- // This can happen in compositions of commits that needed to include detached tree refreshers (e.g., undos):
1637
- // In that case, it's possible for the refreshers to contain different trees because the latter
1638
- // refresher may already reflect the changes made by the commit that includes the earlier
1639
- // refresher. This composition includes the changes made by the commit that includes the
1640
- // earlier refresher, so we need to include the build for the earlier refresher, otherwise
1641
- // the produced changeset will build a tree one which those changes have already been applied
1642
- // and also try to apply the changes again, effectively applying them twice.
1643
- // Note that it would in principle be possible to adopt the later build and exclude from the
1644
- // composition all the changes already reflected on the tree, but that is not something we
1645
- // care to support at this time.
1646
- if (!innerDstMap.has(id)) {
1647
- // Check for earlier destroys that this build might cancel-out with.
1648
- const destroyCount = tryGetFromNestedMap(allDestroys, setRevisionKey, id);
1649
- if (destroyCount === undefined) {
1650
- innerDstMap.set(id, chunk);
1651
- } else {
1652
- assert(
1653
- destroyCount === chunk.topLevelLength,
1654
- 0x89b /* Expected build and destroy to have the same length */,
1655
- );
1656
- deleteFromNestedMap(allDestroys, setRevisionKey, id);
1657
- }
1658
- }
1659
- }
1660
- if (innerDstMap.size === 0) {
1661
- allBuilds.delete(setRevisionKey);
1662
- }
1681
+
1682
+ allBuilds.delete(key);
1683
+ allDestroys.delete(key);
1663
1684
  }
1664
1685
  }
1665
- if (change.destroys !== undefined) {
1666
- for (const [revisionKey, innerMap] of change.destroys) {
1667
- const setRevisionKey = revisionKey ?? revision;
1668
- const innerDstMap = getOrAddInMap(
1669
- allDestroys,
1670
- setRevisionKey,
1671
- new Map<ChangesetLocalId, number>(),
1686
+ }
1687
+
1688
+ if (change1.builds !== undefined && change2.destroys !== undefined) {
1689
+ for (const [key, chunk] of change1.builds.entries()) {
1690
+ const destroyCount = change2.destroys.get(key);
1691
+ if (destroyCount !== undefined) {
1692
+ assert(
1693
+ destroyCount === chunk.topLevelLength,
1694
+ 0x9f0 /* Expected build and destroy to have the same length */,
1672
1695
  );
1673
- for (const [id, count] of innerMap) {
1674
- // Check for earlier builds that this destroy might cancel-out with.
1675
- const chunk = tryGetFromNestedMap(allBuilds, setRevisionKey, id);
1676
- if (chunk === undefined) {
1677
- innerDstMap.set(id, count);
1678
- } else {
1679
- assert(
1680
- count === chunk.topLevelLength,
1681
- 0x89c /* Expected build and destroy to have the same length */,
1682
- );
1683
- deleteFromNestedMap(allBuilds, setRevisionKey, id);
1684
- }
1685
- }
1686
- if (innerDstMap.size === 0) {
1687
- allDestroys.delete(setRevisionKey);
1688
- }
1696
+
1697
+ allBuilds.delete(key);
1698
+ allDestroys.delete(key);
1689
1699
  }
1690
1700
  }
1691
- // add all refreshers while preferring earlier ones
1692
- if (change.refreshers) {
1693
- populateNestedMap(change.refreshers, allRefreshers, false);
1694
- }
1695
1701
  }
1702
+
1696
1703
  return { allBuilds, allDestroys, allRefreshers };
1697
1704
  }
1698
1705
 
1699
1706
  function invertBuilds(
1700
- builds: ChangeAtomIdMap<TreeChunk> | undefined,
1701
- fallbackRevision: RevisionTag | undefined,
1702
- ): ChangeAtomIdMap<number> | undefined {
1707
+ builds: ChangeAtomIdBTree<TreeChunk> | undefined,
1708
+ ): ChangeAtomIdBTree<number> | undefined {
1703
1709
  if (builds !== undefined) {
1704
- const destroys: ChangeAtomIdMap<number> = new Map();
1705
- for (const [revision, innerBuildMap] of builds) {
1706
- const initializedRevision = revision ?? fallbackRevision;
1707
- const innerDestroyMap: Map<ChangesetLocalId, number> = new Map();
1708
- for (const [id, chunk] of innerBuildMap) {
1709
- innerDestroyMap.set(id, chunk.topLevelLength);
1710
- }
1711
- destroys.set(initializedRevision, innerDestroyMap);
1712
- }
1713
- return destroys;
1710
+ return brand(builds.mapValues((chunk) => chunk.topLevelLength));
1714
1711
  }
1715
1712
  return undefined;
1716
1713
  }
@@ -1739,7 +1736,7 @@ export function* relevantRemovedRoots(
1739
1736
 
1740
1737
  function* relevantRemovedRootsFromFields(
1741
1738
  change: FieldChangeMap,
1742
- nodeChanges: ChangeAtomIdMap<NodeChangeset>,
1739
+ nodeChanges: ChangeAtomIdBTree<NodeChangeset>,
1743
1740
  fieldKinds: ReadonlyMap<FieldKindIdentifier, FieldKindWithEditor>,
1744
1741
  ): Iterable<DeltaDetachedNodeId> {
1745
1742
  for (const [_, fieldChange] of change) {
@@ -1775,15 +1772,13 @@ export function updateRefreshers(
1775
1772
  removedRoots: Iterable<DeltaDetachedNodeId>,
1776
1773
  requireRefreshers: boolean = true,
1777
1774
  ): ModularChangeset {
1778
- const refreshers: ChangeAtomIdMap<TreeChunk> = new Map();
1775
+ const refreshers: ChangeAtomIdBTree<TreeChunk> = newTupleBTree();
1779
1776
  const chunkLengths: Map<RevisionTag | undefined, BTree<number, number>> = new Map();
1780
1777
 
1781
1778
  if (change.builds !== undefined) {
1782
- for (const [major, buildsMap] of change.builds) {
1783
- const lengthTree = getOrAddInMap(chunkLengths, major, new BTree());
1784
- for (const [id, chunk] of buildsMap) {
1785
- lengthTree.set(id, chunk.topLevelLength);
1786
- }
1779
+ for (const [[revision, id], chunk] of change.builds.entries()) {
1780
+ const lengthTree = getOrAddInMapLazy(chunkLengths, revision, () => new BTree());
1781
+ lengthTree.set(id, chunk.topLevelLength);
1787
1782
  }
1788
1783
  }
1789
1784
 
@@ -1809,7 +1804,7 @@ export function updateRefreshers(
1809
1804
  if (node === undefined) {
1810
1805
  assert(!requireRefreshers, 0x8cd /* detached node should exist */);
1811
1806
  } else {
1812
- setInNestedMap(refreshers, root.major, root.minor, node);
1807
+ refreshers.set([root.major, brand(root.minor)], node);
1813
1808
  }
1814
1809
  }
1815
1810
 
@@ -1869,12 +1864,12 @@ export function intoDelta(
1869
1864
  }
1870
1865
  if (change.destroys !== undefined && change.destroys.size > 0) {
1871
1866
  const destroys: DeltaDetachedNodeDestruction[] = [];
1872
- forEachInNestedMap(change.destroys, (count, major, minor) => {
1867
+ for (const [[major, minor], count] of change.destroys.entries()) {
1873
1868
  destroys.push({
1874
1869
  id: makeDetachedNodeId(major, minor),
1875
1870
  count,
1876
1871
  });
1877
- });
1872
+ }
1878
1873
  rootDelta.destroy = destroys;
1879
1874
  }
1880
1875
  if (change.refreshers && change.refreshers.size > 0) {
@@ -1884,10 +1879,10 @@ export function intoDelta(
1884
1879
  }
1885
1880
 
1886
1881
  function copyDetachedNodes(
1887
- detachedNodes: ChangeAtomIdMap<TreeChunk>,
1882
+ detachedNodes: ChangeAtomIdBTree<TreeChunk>,
1888
1883
  ): DeltaDetachedNodeBuild[] | undefined {
1889
1884
  const copiedDetachedNodes: DeltaDetachedNodeBuild[] = [];
1890
- forEachInNestedMap(detachedNodes, (chunk, major, minor) => {
1885
+ for (const [[major, minor], chunk] of detachedNodes.entries()) {
1891
1886
  if (chunk.topLevelLength > 0) {
1892
1887
  const trees = mapCursorField(chunk.cursor(), (c) =>
1893
1888
  cursorForMapTreeNode(mapTreeFromCursor(c)),
@@ -1897,7 +1892,7 @@ function copyDetachedNodes(
1897
1892
  trees,
1898
1893
  });
1899
1894
  }
1900
- });
1895
+ }
1901
1896
  return copiedDetachedNodes.length > 0 ? copiedDetachedNodes : undefined;
1902
1897
  }
1903
1898
 
@@ -1906,7 +1901,7 @@ function copyDetachedNodes(
1906
1901
  */
1907
1902
  function intoDeltaImpl(
1908
1903
  change: FieldChangeMap,
1909
- nodeChanges: ChangeAtomIdMap<NodeChangeset>,
1904
+ nodeChanges: ChangeAtomIdBTree<NodeChangeset>,
1910
1905
  idAllocator: MemoizedIdRangeAllocator,
1911
1906
  fieldKinds: ReadonlyMap<FieldKindIdentifier, FieldKindWithEditor>,
1912
1907
  ): Map<FieldKey, DeltaFieldChanges> {
@@ -1929,7 +1924,7 @@ function intoDeltaImpl(
1929
1924
 
1930
1925
  function deltaFromNodeChange(
1931
1926
  change: NodeChangeset,
1932
- nodeChanges: ChangeAtomIdMap<NodeChangeset>,
1927
+ nodeChanges: ChangeAtomIdBTree<NodeChangeset>,
1933
1928
  idAllocator: MemoizedIdRangeAllocator,
1934
1929
  fieldKinds: ReadonlyMap<FieldKindIdentifier, FieldKindWithEditor>,
1935
1930
  ): DeltaFieldMap {
@@ -1941,7 +1936,6 @@ function deltaFromNodeChange(
1941
1936
  }
1942
1937
 
1943
1938
  /**
1944
- * @internal
1945
1939
  * @param revInfos - This should describe the revision being rebased and all revisions in the rebase path,
1946
1940
  * even if not part of the current base changeset.
1947
1941
  * For example, when rebasing change B from a local branch [A, B, C] over a branch [X, Y], the `revInfos` must include
@@ -2008,7 +2002,7 @@ interface CrossFieldTable<TFieldData> {
2008
2002
 
2009
2003
  interface InvertTable extends CrossFieldTable<FieldChange> {
2010
2004
  originalFieldToContext: Map<FieldChange, InvertContext>;
2011
- invertedNodeToParent: ChangeAtomIdMap<FieldId>;
2005
+ invertedNodeToParent: ChangeAtomIdBTree<FieldId>;
2012
2006
  }
2013
2007
 
2014
2008
  interface InvertContext {
@@ -2025,9 +2019,9 @@ interface RebaseTable extends CrossFieldTable<FieldChange> {
2025
2019
  * to the context for the field.
2026
2020
  */
2027
2021
  readonly baseFieldToContext: Map<FieldChange, RebaseFieldContext>;
2028
- readonly baseToRebasedNodeId: ChangeAtomIdMap<NodeId>;
2022
+ readonly baseToRebasedNodeId: ChangeAtomIdBTree<NodeId>;
2029
2023
  readonly rebasedFields: Set<FieldChange>;
2030
- readonly rebasedNodeToParent: ChangeAtomIdMap<FieldId>;
2024
+ readonly rebasedNodeToParent: ChangeAtomIdBTree<FieldId>;
2031
2025
  readonly rebasedCrossFieldKeys: CrossFieldKeyTable;
2032
2026
 
2033
2027
  /**
@@ -2035,6 +2029,11 @@ interface RebaseTable extends CrossFieldTable<FieldChange> {
2035
2029
  */
2036
2030
  readonly nodeIdPairs: [NodeId, NodeId, NodeAttachState | undefined][];
2037
2031
  readonly affectedBaseFields: TupleBTree<FieldIdKey, boolean>;
2032
+
2033
+ /**
2034
+ * Set of base fields which contain a node which needs to be attached in the rebased changeset.
2035
+ */
2036
+ readonly fieldsWithUnattachedChild: Set<FieldChange>;
2038
2037
  }
2039
2038
 
2040
2039
  type FieldIdKey = [RevisionTag | undefined, ChangesetLocalId | undefined, FieldKey];
@@ -2062,12 +2061,12 @@ function newComposeTable(
2062
2061
  newChange,
2063
2062
  fieldToContext: new Map(),
2064
2063
  newFieldToBaseField: new Map(),
2065
- newToBaseNodeId: new Map(),
2064
+ newToBaseNodeId: newTupleBTree(),
2066
2065
  composedNodes: new Set(),
2067
2066
  pendingCompositions: {
2068
2067
  nodeIdsToCompose: [],
2069
- affectedBaseFields: newBTree(),
2070
- affectedNewFields: newBTree(),
2068
+ affectedBaseFields: newTupleBTree(),
2069
+ affectedNewFields: newTupleBTree(),
2071
2070
  },
2072
2071
  };
2073
2072
  }
@@ -2081,7 +2080,7 @@ interface ComposeTable extends CrossFieldTable<FieldChange> {
2081
2080
  */
2082
2081
  readonly fieldToContext: Map<FieldChange, ComposeFieldContext>;
2083
2082
  readonly newFieldToBaseField: Map<FieldChange, FieldChange>;
2084
- readonly newToBaseNodeId: ChangeAtomIdMap<NodeId>;
2083
+ readonly newToBaseNodeId: ChangeAtomIdBTree<NodeId>;
2085
2084
  readonly composedNodes: Set<NodeChangeset>;
2086
2085
  readonly pendingCompositions: PendingCompositions;
2087
2086
  }
@@ -2121,7 +2120,6 @@ function newCrossFieldTable<T>(): CrossFieldTable<T> {
2121
2120
  }
2122
2121
 
2123
2122
  /**
2124
- * @internal
2125
2123
  */
2126
2124
  interface ConstraintState {
2127
2125
  violationCount: number;
@@ -2392,22 +2390,22 @@ class ComposeManager extends CrossFieldManagerI<FieldChange> {
2392
2390
 
2393
2391
  function makeModularChangeset(
2394
2392
  fieldChanges: FieldChangeMap | undefined = undefined,
2395
- nodeChanges: ChangeAtomIdMap<NodeChangeset> | undefined = undefined,
2396
- nodeToParent: ChangeAtomIdMap<FieldId> | undefined = undefined,
2397
- nodeAliases: ChangeAtomIdMap<NodeId> | undefined = undefined,
2393
+ nodeChanges: ChangeAtomIdBTree<NodeChangeset> | undefined = undefined,
2394
+ nodeToParent: ChangeAtomIdBTree<FieldId> | undefined = undefined,
2395
+ nodeAliases: ChangeAtomIdBTree<NodeId> | undefined = undefined,
2398
2396
  crossFieldKeys: CrossFieldKeyTable | undefined = undefined,
2399
2397
  maxId: number = -1,
2400
2398
  revisions: readonly RevisionInfo[] | undefined = undefined,
2401
2399
  constraintViolationCount: number | undefined = undefined,
2402
- builds?: ChangeAtomIdMap<TreeChunk>,
2403
- destroys?: ChangeAtomIdMap<number>,
2404
- refreshers?: ChangeAtomIdMap<TreeChunk>,
2400
+ builds?: ChangeAtomIdBTree<TreeChunk>,
2401
+ destroys?: ChangeAtomIdBTree<number>,
2402
+ refreshers?: ChangeAtomIdBTree<TreeChunk>,
2405
2403
  ): ModularChangeset {
2406
2404
  const changeset: Mutable<ModularChangeset> = {
2407
2405
  fieldChanges: fieldChanges ?? new Map(),
2408
- nodeChanges: nodeChanges ?? new Map(),
2409
- nodeToParent: nodeToParent ?? new Map(),
2410
- nodeAliases: nodeAliases ?? new Map(),
2406
+ nodeChanges: nodeChanges ?? newTupleBTree(),
2407
+ nodeToParent: nodeToParent ?? newTupleBTree(),
2408
+ nodeAliases: nodeAliases ?? newTupleBTree(),
2411
2409
  crossFieldKeys: crossFieldKeys ?? newCrossFieldKeyTable(),
2412
2410
  };
2413
2411
 
@@ -2472,14 +2470,12 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2472
2470
  if (content.mode === CursorLocationType.Fields && content.getFieldLength() === 0) {
2473
2471
  return { type: "global" };
2474
2472
  }
2475
- const builds: ChangeAtomIdMap<TreeChunk> = new Map();
2476
- const innerMap = new Map();
2477
- builds.set(undefined, innerMap);
2473
+ const builds: ChangeAtomIdBTree<TreeChunk> = newTupleBTree();
2478
2474
  const chunk =
2479
2475
  content.mode === CursorLocationType.Fields
2480
2476
  ? chunkFieldSingle(content, defaultChunkPolicy)
2481
2477
  : chunkTree(content, defaultChunkPolicy);
2482
- innerMap.set(firstId, chunk);
2478
+ builds.set([undefined, firstId], chunk);
2483
2479
 
2484
2480
  return {
2485
2481
  type: "global",
@@ -2506,8 +2502,8 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2506
2502
  const modularChange = buildModularChangesetFromField(
2507
2503
  field,
2508
2504
  { fieldKind, change },
2509
- new Map(),
2510
- new Map(),
2505
+ newTupleBTree(),
2506
+ newTupleBTree(),
2511
2507
  newCrossFieldKeyTable(),
2512
2508
  this.idAllocator,
2513
2509
  crossFieldKeys,
@@ -2541,8 +2537,8 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2541
2537
  fieldKind: change.fieldKind,
2542
2538
  change: change.change,
2543
2539
  },
2544
- new Map(),
2545
- new Map(),
2540
+ newTupleBTree(),
2541
+ newTupleBTree(),
2546
2542
  newCrossFieldKeyTable(),
2547
2543
  this.idAllocator,
2548
2544
  getChangeHandler(this.fieldKinds, change.fieldKind).getCrossFieldKeys(
@@ -2574,8 +2570,8 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2574
2570
  buildModularChangesetFromNode(
2575
2571
  path,
2576
2572
  nodeChange,
2577
- new Map(),
2578
- new Map(),
2573
+ newTupleBTree(),
2574
+ newTupleBTree(),
2579
2575
  newCrossFieldKeyTable(),
2580
2576
  this.idAllocator,
2581
2577
  ),
@@ -2586,8 +2582,8 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2586
2582
  function buildModularChangesetFromField(
2587
2583
  path: FieldUpPath,
2588
2584
  fieldChange: FieldChange,
2589
- nodeChanges: ChangeAtomIdMap<NodeChangeset>,
2590
- nodeToParent: ChangeAtomIdMap<FieldId>,
2585
+ nodeChanges: ChangeAtomIdBTree<NodeChangeset>,
2586
+ nodeToParent: ChangeAtomIdBTree<FieldId>,
2591
2587
  crossFieldKeys: CrossFieldKeyTable,
2592
2588
  idAllocator: IdAllocator = idAllocatorFromMaxId(),
2593
2589
  localCrossFieldKeys: CrossFieldKeyRange[] = [],
@@ -2648,8 +2644,8 @@ function buildModularChangesetFromField(
2648
2644
  function buildModularChangesetFromNode(
2649
2645
  path: UpPath,
2650
2646
  nodeChange: NodeChangeset,
2651
- nodeChanges: ChangeAtomIdMap<NodeChangeset>,
2652
- nodeToParent: ChangeAtomIdMap<FieldId>,
2647
+ nodeChanges: ChangeAtomIdBTree<NodeChangeset>,
2648
+ nodeToParent: ChangeAtomIdBTree<FieldId>,
2653
2649
  crossFieldKeys: CrossFieldKeyTable,
2654
2650
  idAllocator: IdAllocator,
2655
2651
  nodeId: NodeId = { localId: brand(idAllocator.allocate()) },
@@ -2678,7 +2674,6 @@ function buildModularChangesetFromNode(
2678
2674
  }
2679
2675
 
2680
2676
  /**
2681
- * @internal
2682
2677
  */
2683
2678
  export interface FieldEditDescription {
2684
2679
  type: "field";
@@ -2688,15 +2683,13 @@ export interface FieldEditDescription {
2688
2683
  }
2689
2684
 
2690
2685
  /**
2691
- * @internal
2692
2686
  */
2693
2687
  export interface GlobalEditDescription {
2694
2688
  type: "global";
2695
- builds?: ChangeAtomIdMap<TreeChunk>;
2689
+ builds?: ChangeAtomIdBTree<TreeChunk>;
2696
2690
  }
2697
2691
 
2698
2692
  /**
2699
- * @internal
2700
2693
  */
2701
2694
  export type EditDescription = FieldEditDescription | GlobalEditDescription;
2702
2695
 
@@ -2747,43 +2740,30 @@ function revisionInfoFromTaggedChange(
2747
2740
  return revInfos;
2748
2741
  }
2749
2742
 
2750
- function revisionFromTaggedChange(
2751
- change: TaggedChange<ModularChangeset>,
2752
- ): RevisionTag | undefined {
2753
- return change.revision ?? revisionFromRevInfos(change.change.revisions);
2754
- }
2743
+ function mergeBTrees<K extends readonly unknown[], V>(
2744
+ tree1: TupleBTree<K, V> | undefined,
2745
+ tree2: TupleBTree<K, V> | undefined,
2746
+ preferLeft = true,
2747
+ ): TupleBTree<K, V> {
2748
+ if (tree1 === undefined) {
2749
+ return tree2 !== undefined ? brand(tree2.clone()) : newTupleBTree<K, V>();
2750
+ }
2755
2751
 
2756
- function revisionFromRevInfos(
2757
- revInfos: undefined | readonly RevisionInfo[],
2758
- ): RevisionTag | undefined {
2759
- if (revInfos === undefined || revInfos.length !== 1) {
2760
- return undefined;
2752
+ const result: TupleBTree<K, V> = brand(tree1.clone());
2753
+ if (tree2 === undefined) {
2754
+ return result;
2761
2755
  }
2762
- return revInfos[0].revision;
2763
- }
2764
2756
 
2765
- function mergeBTrees<K, V>(tree1: BTree<K, V>, tree2: BTree<K, V>): BTree<K, V> {
2766
- const result = tree1.clone();
2767
- tree2.forEachPair((k, v) => {
2768
- result.set(k, v);
2769
- });
2757
+ for (const [key, value] of tree2.entries()) {
2758
+ result.set(key, value, !preferLeft);
2759
+ }
2770
2760
 
2771
2761
  return result;
2772
2762
  }
2773
2763
 
2774
- function mergeNestedMaps<K1, K2, V>(
2775
- map1: NestedMap<K1, K2, V>,
2776
- map2: NestedMap<K1, K2, V>,
2777
- ): NestedMap<K1, K2, V> {
2778
- const merged: NestedMap<K1, K2, V> = new Map();
2779
- populateNestedMap(map1, merged, true);
2780
- populateNestedMap(map2, merged, true);
2781
- return merged;
2782
- }
2783
-
2784
2764
  function fieldChangeFromId(
2785
2765
  fields: FieldChangeMap,
2786
- nodes: ChangeAtomIdMap<NodeChangeset>,
2766
+ nodes: ChangeAtomIdBTree<NodeChangeset>,
2787
2767
  id: FieldId,
2788
2768
  ): FieldChange {
2789
2769
  const fieldMap = fieldMapFromNodeId(fields, nodes, id.nodeId);
@@ -2792,7 +2772,7 @@ function fieldChangeFromId(
2792
2772
 
2793
2773
  function fieldMapFromNodeId(
2794
2774
  rootFieldMap: FieldChangeMap,
2795
- nodes: ChangeAtomIdMap<NodeChangeset>,
2775
+ nodes: ChangeAtomIdBTree<NodeChangeset>,
2796
2776
  nodeId: NodeId | undefined,
2797
2777
  ): FieldChangeMap {
2798
2778
  if (nodeId === undefined) {
@@ -2816,7 +2796,7 @@ function rebasedNodeIdFromBaseNodeId(table: RebaseTable, baseId: NodeId): NodeId
2816
2796
  return getFromChangeAtomIdMap(table.baseToRebasedNodeId, baseId) ?? baseId;
2817
2797
  }
2818
2798
 
2819
- function nodeChangeFromId(nodes: ChangeAtomIdMap<NodeChangeset>, id: NodeId): NodeChangeset {
2799
+ function nodeChangeFromId(nodes: ChangeAtomIdBTree<NodeChangeset>, id: NodeId): NodeChangeset {
2820
2800
  const node = getFromChangeAtomIdMap(nodes, id);
2821
2801
  assert(node !== undefined, 0x9ca /* Unknown node ID */);
2822
2802
  return node;
@@ -2953,7 +2933,7 @@ function setInCrossFieldKeyTable(
2953
2933
  table.set([target, revision, id, count], value);
2954
2934
  }
2955
2935
 
2956
- function normalizeFieldId(fieldId: FieldId, nodeAliases: ChangeAtomIdMap<NodeId>): FieldId {
2936
+ function normalizeFieldId(fieldId: FieldId, nodeAliases: ChangeAtomIdBTree<NodeId>): FieldId {
2957
2937
  return fieldId.nodeId !== undefined
2958
2938
  ? { ...fieldId, nodeId: normalizeNodeId(fieldId.nodeId, nodeAliases) }
2959
2939
  : fieldId;
@@ -2962,7 +2942,7 @@ function normalizeFieldId(fieldId: FieldId, nodeAliases: ChangeAtomIdMap<NodeId>
2962
2942
  /**
2963
2943
  * @returns The canonical form of nodeId, according to nodeAliases
2964
2944
  */
2965
- function normalizeNodeId(nodeId: NodeId, nodeAliases: ChangeAtomIdMap<NodeId>): NodeId {
2945
+ function normalizeNodeId(nodeId: NodeId, nodeAliases: ChangeAtomIdBTree<NodeId>): NodeId {
2966
2946
  let currentId = nodeId;
2967
2947
 
2968
2948
  // eslint-disable-next-line no-constant-condition
@@ -2981,11 +2961,13 @@ function hasConflicts(change: ModularChangeset): boolean {
2981
2961
  }
2982
2962
 
2983
2963
  export function newCrossFieldKeyTable(): CrossFieldKeyTable {
2984
- return newBTree();
2964
+ return newTupleBTree();
2985
2965
  }
2986
2966
 
2987
- function newBTree<K extends readonly unknown[], V>(): TupleBTree<K, V> {
2988
- return brand(new BTree<K, V>(undefined, compareTuples));
2967
+ export function newTupleBTree<K extends readonly unknown[], V>(
2968
+ entries?: [K, V][],
2969
+ ): TupleBTree<K, V> {
2970
+ return brand(new BTree<K, V>(entries, compareTuples));
2989
2971
  }
2990
2972
 
2991
2973
  // This assumes that the arrays are the same length.
@@ -2995,7 +2977,14 @@ function compareTuples(arrayA: readonly unknown[], arrayB: readonly unknown[]):
2995
2977
  const a = arrayA[i] as any;
2996
2978
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2997
2979
  const b = arrayB[i] as any;
2998
- if (a < b) {
2980
+
2981
+ // Less-than and greater-than always return false if either value is undefined,
2982
+ // so we handle undefined separately, treating it as less than all other values.
2983
+ if (a === undefined && b !== undefined) {
2984
+ return -1;
2985
+ } else if (b === undefined && a !== undefined) {
2986
+ return 1;
2987
+ } else if (a < b) {
2999
2988
  return -1;
3000
2989
  } else if (a > b) {
3001
2990
  return 1;
@@ -3007,14 +2996,19 @@ function compareTuples(arrayA: readonly unknown[], arrayB: readonly unknown[]):
3007
2996
 
3008
2997
  interface ModularChangesetContent {
3009
2998
  fieldChanges: FieldChangeMap;
3010
- nodeChanges: ChangeAtomIdMap<NodeChangeset>;
3011
- nodeToParent: ChangeAtomIdMap<FieldId>;
3012
- nodeAliases: ChangeAtomIdMap<NodeId>;
2999
+ nodeChanges: ChangeAtomIdBTree<NodeChangeset>;
3000
+ nodeToParent: ChangeAtomIdBTree<FieldId>;
3001
+ nodeAliases: ChangeAtomIdBTree<NodeId>;
3013
3002
  crossFieldKeys: CrossFieldKeyTable;
3014
3003
  }
3015
3004
 
3016
- function cloneNestedMap<K1, K2, V>(map: NestedMap<K1, K2, V>): NestedMap<K1, K2, V> {
3017
- const cloned: NestedMap<K1, K2, V> = new Map();
3018
- populateNestedMap(map, cloned, true);
3019
- return cloned;
3005
+ function getFromChangeAtomIdMap<T>(
3006
+ map: ChangeAtomIdBTree<T>,
3007
+ id: ChangeAtomId,
3008
+ ): T | undefined {
3009
+ return map.get([id.revision, id.localId]);
3010
+ }
3011
+
3012
+ function setInChangeAtomIdMap<T>(map: ChangeAtomIdBTree<T>, id: ChangeAtomId, value: T): void {
3013
+ map.set([id.revision, id.localId], value);
3020
3014
  }