@fluidframework/tree 2.81.1 → 2.83.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 (695) hide show
  1. package/CHANGELOG.md +168 -0
  2. package/README.md +33 -5
  3. package/api-report/tree.alpha.api.md +75 -39
  4. package/api-report/tree.beta.api.md +164 -3
  5. package/api-report/tree.legacy.beta.api.md +164 -3
  6. package/api-report/tree.legacy.public.api.md +2 -1
  7. package/api-report/tree.public.api.md +2 -1
  8. package/dist/alpha.d.ts +10 -4
  9. package/dist/beta.d.ts +4 -0
  10. package/dist/codec/codec.d.ts +18 -45
  11. package/dist/codec/codec.d.ts.map +1 -1
  12. package/dist/codec/codec.js +12 -50
  13. package/dist/codec/codec.js.map +1 -1
  14. package/dist/codec/index.d.ts +1 -1
  15. package/dist/codec/index.d.ts.map +1 -1
  16. package/dist/codec/index.js +2 -2
  17. package/dist/codec/index.js.map +1 -1
  18. package/dist/codec/versioned/codec.d.ts +20 -7
  19. package/dist/codec/versioned/codec.d.ts.map +1 -1
  20. package/dist/codec/versioned/codec.js +56 -30
  21. package/dist/codec/versioned/codec.js.map +1 -1
  22. package/dist/core/index.d.ts +1 -1
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/index.js +4 -2
  25. package/dist/core/index.js.map +1 -1
  26. package/dist/core/rebase/changeRebaser.d.ts +3 -2
  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 +4 -2
  32. package/dist/core/rebase/index.js.map +1 -1
  33. package/dist/core/rebase/types.d.ts +23 -3
  34. package/dist/core/rebase/types.d.ts.map +1 -1
  35. package/dist/core/rebase/types.js +30 -16
  36. package/dist/core/rebase/types.js.map +1 -1
  37. package/dist/core/schema-stored/formatV1.d.ts +2 -2
  38. package/dist/core/schema-stored/formatV1.d.ts.map +1 -1
  39. package/dist/core/schema-stored/formatV1.js +0 -5
  40. package/dist/core/schema-stored/formatV1.js.map +1 -1
  41. package/dist/core/schema-stored/formatV2.d.ts +11 -10
  42. package/dist/core/schema-stored/formatV2.d.ts.map +1 -1
  43. package/dist/core/schema-stored/formatV2.js +1 -6
  44. package/dist/core/schema-stored/formatV2.js.map +1 -1
  45. package/dist/core/schema-stored/index.d.ts.map +1 -1
  46. package/dist/core/schema-stored/index.js.map +1 -1
  47. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  48. package/dist/core/schema-stored/schema.js.map +1 -1
  49. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  50. package/dist/core/tree/anchorSet.js.map +1 -1
  51. package/dist/core/tree/delta.d.ts +9 -7
  52. package/dist/core/tree/delta.d.ts.map +1 -1
  53. package/dist/core/tree/delta.js.map +1 -1
  54. package/dist/core/tree/deltaUtil.js +1 -1
  55. package/dist/core/tree/deltaUtil.js.map +1 -1
  56. package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -1
  57. package/dist/core/tree/detachedFieldIndexCodecs.js +6 -4
  58. package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  59. package/dist/core/tree/visitDelta.js +2 -2
  60. package/dist/core/tree/visitDelta.js.map +1 -1
  61. package/dist/extensibleUnionNode.d.ts +97 -0
  62. package/dist/extensibleUnionNode.d.ts.map +1 -0
  63. package/dist/extensibleUnionNode.js +89 -0
  64. package/dist/extensibleUnionNode.js.map +1 -0
  65. package/dist/feature-libraries/changeAtomIdBTree.d.ts +4 -2
  66. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  67. package/dist/feature-libraries/changeAtomIdBTree.js +9 -1
  68. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  69. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
  70. package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  71. package/dist/feature-libraries/chunked-forest/codec/codecs.js +4 -4
  72. package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  73. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -3
  74. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  75. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +20 -21
  76. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  77. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  78. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  79. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  80. package/dist/feature-libraries/forest-summary/codec.d.ts +2 -1
  81. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  82. package/dist/feature-libraries/forest-summary/codec.js +7 -1
  83. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  84. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  85. package/dist/feature-libraries/forest-summary/forestSummarizer.js +5 -2
  86. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  87. package/dist/feature-libraries/forest-summary/formatCommon.d.ts +4 -42
  88. package/dist/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
  89. package/dist/feature-libraries/forest-summary/formatCommon.js +1 -2
  90. package/dist/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  91. package/dist/feature-libraries/forest-summary/formatV1.d.ts +2 -41
  92. package/dist/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  93. package/dist/feature-libraries/forest-summary/formatV1.js +1 -2
  94. package/dist/feature-libraries/forest-summary/formatV1.js.map +1 -1
  95. package/dist/feature-libraries/forest-summary/formatV2.d.ts +2 -41
  96. package/dist/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  97. package/dist/feature-libraries/forest-summary/formatV2.js +1 -2
  98. package/dist/feature-libraries/forest-summary/formatV2.js.map +1 -1
  99. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +1 -1
  100. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  101. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +1 -1
  102. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  103. package/dist/feature-libraries/index.d.ts +3 -3
  104. package/dist/feature-libraries/index.d.ts.map +1 -1
  105. package/dist/feature-libraries/index.js +4 -3
  106. package/dist/feature-libraries/index.js.map +1 -1
  107. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts +2 -2
  108. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts.map +1 -1
  109. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.js +42 -22
  110. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.js.map +1 -1
  111. package/dist/feature-libraries/modular-schema/genericFieldKind.js +1 -1
  112. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  113. package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
  114. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  115. package/dist/feature-libraries/modular-schema/index.js +2 -1
  116. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  117. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +3 -3
  118. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  119. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +13 -9
  120. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  121. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +11 -1
  122. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  123. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +30 -7
  124. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  125. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  126. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +38 -27
  127. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  128. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts +10 -127
  129. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  130. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js +2 -4
  131. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  132. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +3 -79
  133. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  134. package/dist/feature-libraries/optional-field/optionalField.js +1 -1
  135. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  136. package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  137. package/dist/feature-libraries/optional-field/requiredField.js.map +1 -1
  138. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -2
  139. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  140. package/dist/feature-libraries/schema-index/codec.js +6 -4
  141. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  142. package/dist/feature-libraries/schema-index/formatV2.d.ts +4 -4
  143. package/dist/feature-libraries/schema-index/schemaSummarizer.js +1 -1
  144. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  145. package/dist/feature-libraries/sequence-field/invert.js +2 -2
  146. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  147. package/dist/feature-libraries/sequence-field/replaceRevisions.js +16 -16
  148. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  149. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +1 -1
  150. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  151. package/dist/index.d.ts +5 -5
  152. package/dist/index.d.ts.map +1 -1
  153. package/dist/index.js +5 -2
  154. package/dist/index.js.map +1 -1
  155. package/dist/legacy.d.ts +4 -0
  156. package/dist/packageVersion.d.ts +1 -1
  157. package/dist/packageVersion.js +1 -1
  158. package/dist/packageVersion.js.map +1 -1
  159. package/dist/shared-tree/independentView.d.ts +36 -13
  160. package/dist/shared-tree/independentView.d.ts.map +1 -1
  161. package/dist/shared-tree/independentView.js +1 -0
  162. package/dist/shared-tree/independentView.js.map +1 -1
  163. package/dist/shared-tree/index.d.ts +1 -1
  164. package/dist/shared-tree/index.d.ts.map +1 -1
  165. package/dist/shared-tree/index.js.map +1 -1
  166. package/dist/shared-tree/schematizingTreeView.d.ts +10 -0
  167. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  168. package/dist/shared-tree/schematizingTreeView.js +25 -9
  169. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  170. package/dist/shared-tree/sharedTree.d.ts +3 -3
  171. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  172. package/dist/shared-tree/sharedTree.js +8 -32
  173. package/dist/shared-tree/sharedTree.js.map +1 -1
  174. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +11 -3
  175. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  176. package/dist/shared-tree/sharedTreeChangeCodecs.js +39 -5
  177. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  178. package/dist/shared-tree/sharedTreeChangeFormat.d.ts +4 -4
  179. package/dist/shared-tree/tree.d.ts +1 -1
  180. package/dist/shared-tree/tree.js +1 -1
  181. package/dist/shared-tree/tree.js.map +1 -1
  182. package/dist/shared-tree/treeAlpha.d.ts +1 -1
  183. package/dist/shared-tree/treeAlpha.js.map +1 -1
  184. package/dist/shared-tree/treeCheckout.d.ts +20 -0
  185. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  186. package/dist/shared-tree/treeCheckout.js +41 -7
  187. package/dist/shared-tree/treeCheckout.js.map +1 -1
  188. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +3 -3
  189. package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  190. package/dist/shared-tree-core/editManagerCodecsCommons.js +2 -2
  191. package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  192. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts +2 -2
  193. package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  194. package/dist/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
  195. package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  196. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +2 -2
  197. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  198. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
  199. package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  200. package/dist/shared-tree-core/editManagerSummarizer.js +1 -1
  201. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  202. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  203. package/dist/shared-tree-core/messageCodecV1ToV4.js +2 -2
  204. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  205. package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
  206. package/dist/shared-tree-core/messageCodecs.js +2 -2
  207. package/dist/shared-tree-core/messageCodecs.js.map +1 -1
  208. package/dist/shared-tree-core/transaction.d.ts +14 -3
  209. package/dist/shared-tree-core/transaction.d.ts.map +1 -1
  210. package/dist/shared-tree-core/transaction.js +59 -16
  211. package/dist/shared-tree-core/transaction.js.map +1 -1
  212. package/dist/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  213. package/dist/shared-tree-core/versionedSummarizer.js +1 -1
  214. package/dist/shared-tree-core/versionedSummarizer.js.map +1 -1
  215. package/dist/simple-tree/api/index.d.ts +2 -2
  216. package/dist/simple-tree/api/index.d.ts.map +1 -1
  217. package/dist/simple-tree/api/index.js +4 -3
  218. package/dist/simple-tree/api/index.js.map +1 -1
  219. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +9 -0
  220. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  221. package/dist/simple-tree/api/schemaCreationUtilities.js +16 -1
  222. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  223. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  224. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts +148 -29
  225. package/dist/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  226. package/dist/simple-tree/api/snapshotCompatibilityChecker.js +180 -99
  227. package/dist/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  228. package/dist/simple-tree/api/transactionTypes.d.ts +10 -0
  229. package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -1
  230. package/dist/simple-tree/api/transactionTypes.js.map +1 -1
  231. package/dist/simple-tree/api/tree.d.ts +82 -7
  232. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  233. package/dist/simple-tree/api/tree.js.map +1 -1
  234. package/dist/simple-tree/api/treeBeta.d.ts +1 -1
  235. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  236. package/dist/simple-tree/core/allowedTypes.d.ts +1 -1
  237. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  238. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  239. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  240. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +1 -0
  241. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  242. package/dist/simple-tree/core/unhydratedFlexTree.js +29 -0
  243. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  244. package/dist/simple-tree/index.d.ts +2 -2
  245. package/dist/simple-tree/index.d.ts.map +1 -1
  246. package/dist/simple-tree/index.js +5 -3
  247. package/dist/simple-tree/index.js.map +1 -1
  248. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  249. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  250. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +63 -0
  251. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  252. package/dist/simple-tree/node-kinds/array/arrayNode.js +47 -14
  253. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  254. package/dist/simple-tree/node-kinds/array/index.d.ts +1 -1
  255. package/dist/simple-tree/node-kinds/array/index.d.ts.map +1 -1
  256. package/dist/simple-tree/node-kinds/array/index.js +2 -1
  257. package/dist/simple-tree/node-kinds/array/index.js.map +1 -1
  258. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  259. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  260. package/dist/simple-tree/node-kinds/index.js +2 -1
  261. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  262. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  263. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  264. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  265. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +33 -7
  266. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  267. package/dist/tableSchema.d.ts +71 -48
  268. package/dist/tableSchema.d.ts.map +1 -1
  269. package/dist/tableSchema.js +200 -98
  270. package/dist/tableSchema.js.map +1 -1
  271. package/dist/text/textDomainFormatted.d.ts +3 -3
  272. package/dist/text/textDomainFormatted.d.ts.map +1 -1
  273. package/dist/text/textDomainFormatted.js +48 -32
  274. package/dist/text/textDomainFormatted.js.map +1 -1
  275. package/dist/util/bTreeUtils.d.ts +30 -4
  276. package/dist/util/bTreeUtils.d.ts.map +1 -1
  277. package/dist/util/bTreeUtils.js +35 -23
  278. package/dist/util/bTreeUtils.js.map +1 -1
  279. package/dist/util/brand.d.ts.map +1 -1
  280. package/dist/util/brand.js.map +1 -1
  281. package/dist/util/brandedMap.d.ts.map +1 -1
  282. package/dist/util/brandedMap.js.map +1 -1
  283. package/dist/util/breakable.d.ts.map +1 -1
  284. package/dist/util/breakable.js +2 -1
  285. package/dist/util/breakable.js.map +1 -1
  286. package/dist/util/index.d.ts +2 -2
  287. package/dist/util/index.d.ts.map +1 -1
  288. package/dist/util/index.js +6 -3
  289. package/dist/util/index.js.map +1 -1
  290. package/dist/util/opaque.d.ts.map +1 -1
  291. package/dist/util/opaque.js.map +1 -1
  292. package/dist/util/rangeMap.d.ts +3 -2
  293. package/dist/util/rangeMap.d.ts.map +1 -1
  294. package/dist/util/rangeMap.js +12 -7
  295. package/dist/util/rangeMap.js.map +1 -1
  296. package/dist/util/readSnapshotBlob.d.ts +1 -1
  297. package/dist/util/readSnapshotBlob.d.ts.map +1 -1
  298. package/dist/util/readSnapshotBlob.js.map +1 -1
  299. package/dist/util/typeCheck.d.ts.map +1 -1
  300. package/dist/util/typeCheck.js.map +1 -1
  301. package/dist/util/utils.d.ts +20 -16
  302. package/dist/util/utils.d.ts.map +1 -1
  303. package/dist/util/utils.js +49 -17
  304. package/dist/util/utils.js.map +1 -1
  305. package/eslint.config.mts +0 -9
  306. package/lib/alpha.d.ts +10 -4
  307. package/lib/beta.d.ts +4 -0
  308. package/lib/codec/codec.d.ts +18 -45
  309. package/lib/codec/codec.d.ts.map +1 -1
  310. package/lib/codec/codec.js +10 -47
  311. package/lib/codec/codec.js.map +1 -1
  312. package/lib/codec/index.d.ts +1 -1
  313. package/lib/codec/index.d.ts.map +1 -1
  314. package/lib/codec/index.js +1 -1
  315. package/lib/codec/index.js.map +1 -1
  316. package/lib/codec/versioned/codec.d.ts +20 -7
  317. package/lib/codec/versioned/codec.d.ts.map +1 -1
  318. package/lib/codec/versioned/codec.js +59 -33
  319. package/lib/codec/versioned/codec.js.map +1 -1
  320. package/lib/core/index.d.ts +1 -1
  321. package/lib/core/index.d.ts.map +1 -1
  322. package/lib/core/index.js +1 -1
  323. package/lib/core/index.js.map +1 -1
  324. package/lib/core/rebase/changeRebaser.d.ts +3 -2
  325. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  326. package/lib/core/rebase/changeRebaser.js.map +1 -1
  327. package/lib/core/rebase/index.d.ts +1 -1
  328. package/lib/core/rebase/index.d.ts.map +1 -1
  329. package/lib/core/rebase/index.js +1 -1
  330. package/lib/core/rebase/index.js.map +1 -1
  331. package/lib/core/rebase/types.d.ts +23 -3
  332. package/lib/core/rebase/types.d.ts.map +1 -1
  333. package/lib/core/rebase/types.js +27 -15
  334. package/lib/core/rebase/types.js.map +1 -1
  335. package/lib/core/schema-stored/formatV1.d.ts +2 -2
  336. package/lib/core/schema-stored/formatV1.d.ts.map +1 -1
  337. package/lib/core/schema-stored/formatV1.js +0 -5
  338. package/lib/core/schema-stored/formatV1.js.map +1 -1
  339. package/lib/core/schema-stored/formatV2.d.ts +11 -10
  340. package/lib/core/schema-stored/formatV2.d.ts.map +1 -1
  341. package/lib/core/schema-stored/formatV2.js +1 -6
  342. package/lib/core/schema-stored/formatV2.js.map +1 -1
  343. package/lib/core/schema-stored/index.d.ts.map +1 -1
  344. package/lib/core/schema-stored/index.js +2 -0
  345. package/lib/core/schema-stored/index.js.map +1 -1
  346. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  347. package/lib/core/schema-stored/schema.js.map +1 -1
  348. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  349. package/lib/core/tree/anchorSet.js.map +1 -1
  350. package/lib/core/tree/delta.d.ts +9 -7
  351. package/lib/core/tree/delta.d.ts.map +1 -1
  352. package/lib/core/tree/delta.js.map +1 -1
  353. package/lib/core/tree/deltaUtil.js +1 -1
  354. package/lib/core/tree/deltaUtil.js.map +1 -1
  355. package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -1
  356. package/lib/core/tree/detachedFieldIndexCodecs.js +6 -4
  357. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -1
  358. package/lib/core/tree/visitDelta.js +2 -2
  359. package/lib/core/tree/visitDelta.js.map +1 -1
  360. package/lib/extensibleUnionNode.d.ts +97 -0
  361. package/lib/extensibleUnionNode.d.ts.map +1 -0
  362. package/lib/extensibleUnionNode.js +86 -0
  363. package/lib/extensibleUnionNode.js.map +1 -0
  364. package/lib/feature-libraries/changeAtomIdBTree.d.ts +4 -2
  365. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  366. package/lib/feature-libraries/changeAtomIdBTree.js +7 -0
  367. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  368. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +1 -1
  369. package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
  370. package/lib/feature-libraries/chunked-forest/codec/codecs.js +5 -5
  371. package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
  372. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -3
  373. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  374. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +4 -5
  375. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  376. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  377. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  378. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  379. package/lib/feature-libraries/forest-summary/codec.d.ts +2 -1
  380. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  381. package/lib/feature-libraries/forest-summary/codec.js +8 -2
  382. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  383. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  384. package/lib/feature-libraries/forest-summary/forestSummarizer.js +6 -3
  385. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  386. package/lib/feature-libraries/forest-summary/formatCommon.d.ts +4 -42
  387. package/lib/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
  388. package/lib/feature-libraries/forest-summary/formatCommon.js +2 -3
  389. package/lib/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  390. package/lib/feature-libraries/forest-summary/formatV1.d.ts +2 -41
  391. package/lib/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  392. package/lib/feature-libraries/forest-summary/formatV1.js +1 -2
  393. package/lib/feature-libraries/forest-summary/formatV1.js.map +1 -1
  394. package/lib/feature-libraries/forest-summary/formatV2.d.ts +2 -41
  395. package/lib/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  396. package/lib/feature-libraries/forest-summary/formatV2.js +1 -2
  397. package/lib/feature-libraries/forest-summary/formatV2.js.map +1 -1
  398. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +1 -1
  399. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  400. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +1 -1
  401. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  402. package/lib/feature-libraries/index.d.ts +3 -3
  403. package/lib/feature-libraries/index.d.ts.map +1 -1
  404. package/lib/feature-libraries/index.js +3 -3
  405. package/lib/feature-libraries/index.js.map +1 -1
  406. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts +2 -2
  407. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts.map +1 -1
  408. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.js +41 -21
  409. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.js.map +1 -1
  410. package/lib/feature-libraries/modular-schema/genericFieldKind.js +1 -1
  411. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  412. package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
  413. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  414. package/lib/feature-libraries/modular-schema/index.js +1 -1
  415. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  416. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +3 -3
  417. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  418. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +14 -10
  419. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  420. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +11 -1
  421. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  422. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +29 -6
  423. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  424. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  425. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +41 -30
  426. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  427. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts +10 -127
  428. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  429. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js +2 -4
  430. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  431. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +3 -79
  432. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  433. package/lib/feature-libraries/optional-field/optionalField.js +1 -1
  434. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  435. package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  436. package/lib/feature-libraries/optional-field/requiredField.js.map +1 -1
  437. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -2
  438. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  439. package/lib/feature-libraries/schema-index/codec.js +6 -4
  440. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  441. package/lib/feature-libraries/schema-index/formatV2.d.ts +4 -4
  442. package/lib/feature-libraries/schema-index/schemaSummarizer.js +1 -1
  443. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  444. package/lib/feature-libraries/sequence-field/invert.js +2 -2
  445. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  446. package/lib/feature-libraries/sequence-field/replaceRevisions.js +16 -16
  447. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  448. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +1 -1
  449. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  450. package/lib/index.d.ts +5 -5
  451. package/lib/index.d.ts.map +1 -1
  452. package/lib/index.js +4 -3
  453. package/lib/index.js.map +1 -1
  454. package/lib/legacy.d.ts +4 -0
  455. package/lib/packageVersion.d.ts +1 -1
  456. package/lib/packageVersion.js +1 -1
  457. package/lib/packageVersion.js.map +1 -1
  458. package/lib/shared-tree/independentView.d.ts +36 -13
  459. package/lib/shared-tree/independentView.d.ts.map +1 -1
  460. package/lib/shared-tree/independentView.js +1 -0
  461. package/lib/shared-tree/independentView.js.map +1 -1
  462. package/lib/shared-tree/index.d.ts +1 -1
  463. package/lib/shared-tree/index.d.ts.map +1 -1
  464. package/lib/shared-tree/index.js.map +1 -1
  465. package/lib/shared-tree/schematizingTreeView.d.ts +10 -0
  466. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  467. package/lib/shared-tree/schematizingTreeView.js +25 -9
  468. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  469. package/lib/shared-tree/sharedTree.d.ts +3 -3
  470. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  471. package/lib/shared-tree/sharedTree.js +10 -34
  472. package/lib/shared-tree/sharedTree.js.map +1 -1
  473. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +11 -3
  474. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  475. package/lib/shared-tree/sharedTreeChangeCodecs.js +40 -6
  476. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  477. package/lib/shared-tree/sharedTreeChangeFormat.d.ts +4 -4
  478. package/lib/shared-tree/tree.d.ts +1 -1
  479. package/lib/shared-tree/tree.js +1 -1
  480. package/lib/shared-tree/tree.js.map +1 -1
  481. package/lib/shared-tree/treeAlpha.d.ts +1 -1
  482. package/lib/shared-tree/treeAlpha.js.map +1 -1
  483. package/lib/shared-tree/treeCheckout.d.ts +20 -0
  484. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  485. package/lib/shared-tree/treeCheckout.js +41 -7
  486. package/lib/shared-tree/treeCheckout.js.map +1 -1
  487. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +3 -3
  488. package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
  489. package/lib/shared-tree-core/editManagerCodecsCommons.js +2 -2
  490. package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
  491. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts +2 -2
  492. package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
  493. package/lib/shared-tree-core/editManagerCodecsV1toV4.js +2 -2
  494. package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
  495. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +2 -2
  496. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
  497. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js +2 -2
  498. package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
  499. package/lib/shared-tree-core/editManagerSummarizer.js +1 -1
  500. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  501. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  502. package/lib/shared-tree-core/messageCodecV1ToV4.js +2 -2
  503. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  504. package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
  505. package/lib/shared-tree-core/messageCodecs.js +2 -2
  506. package/lib/shared-tree-core/messageCodecs.js.map +1 -1
  507. package/lib/shared-tree-core/transaction.d.ts +14 -3
  508. package/lib/shared-tree-core/transaction.d.ts.map +1 -1
  509. package/lib/shared-tree-core/transaction.js +61 -18
  510. package/lib/shared-tree-core/transaction.js.map +1 -1
  511. package/lib/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  512. package/lib/shared-tree-core/versionedSummarizer.js +1 -1
  513. package/lib/shared-tree-core/versionedSummarizer.js.map +1 -1
  514. package/lib/simple-tree/api/index.d.ts +2 -2
  515. package/lib/simple-tree/api/index.d.ts.map +1 -1
  516. package/lib/simple-tree/api/index.js +2 -2
  517. package/lib/simple-tree/api/index.js.map +1 -1
  518. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +9 -0
  519. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  520. package/lib/simple-tree/api/schemaCreationUtilities.js +14 -0
  521. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  522. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  523. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts +148 -29
  524. package/lib/simple-tree/api/snapshotCompatibilityChecker.d.ts.map +1 -1
  525. package/lib/simple-tree/api/snapshotCompatibilityChecker.js +179 -98
  526. package/lib/simple-tree/api/snapshotCompatibilityChecker.js.map +1 -1
  527. package/lib/simple-tree/api/transactionTypes.d.ts +10 -0
  528. package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -1
  529. package/lib/simple-tree/api/transactionTypes.js.map +1 -1
  530. package/lib/simple-tree/api/tree.d.ts +82 -7
  531. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  532. package/lib/simple-tree/api/tree.js.map +1 -1
  533. package/lib/simple-tree/api/treeBeta.d.ts +1 -1
  534. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  535. package/lib/simple-tree/core/allowedTypes.d.ts +1 -1
  536. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  537. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  538. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  539. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +1 -0
  540. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  541. package/lib/simple-tree/core/unhydratedFlexTree.js +29 -0
  542. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  543. package/lib/simple-tree/index.d.ts +2 -2
  544. package/lib/simple-tree/index.d.ts.map +1 -1
  545. package/lib/simple-tree/index.js +2 -2
  546. package/lib/simple-tree/index.js.map +1 -1
  547. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  548. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  549. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +63 -0
  550. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  551. package/lib/simple-tree/node-kinds/array/arrayNode.js +46 -14
  552. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  553. package/lib/simple-tree/node-kinds/array/index.d.ts +1 -1
  554. package/lib/simple-tree/node-kinds/array/index.d.ts.map +1 -1
  555. package/lib/simple-tree/node-kinds/array/index.js +1 -1
  556. package/lib/simple-tree/node-kinds/array/index.js.map +1 -1
  557. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  558. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  559. package/lib/simple-tree/node-kinds/index.js +1 -1
  560. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  561. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  562. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  563. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  564. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +34 -8
  565. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  566. package/lib/tableSchema.d.ts +71 -48
  567. package/lib/tableSchema.d.ts.map +1 -1
  568. package/lib/tableSchema.js +201 -99
  569. package/lib/tableSchema.js.map +1 -1
  570. package/lib/text/textDomainFormatted.d.ts +3 -3
  571. package/lib/text/textDomainFormatted.d.ts.map +1 -1
  572. package/lib/text/textDomainFormatted.js +30 -14
  573. package/lib/text/textDomainFormatted.js.map +1 -1
  574. package/lib/util/bTreeUtils.d.ts +30 -4
  575. package/lib/util/bTreeUtils.d.ts.map +1 -1
  576. package/lib/util/bTreeUtils.js +33 -22
  577. package/lib/util/bTreeUtils.js.map +1 -1
  578. package/lib/util/brand.d.ts.map +1 -1
  579. package/lib/util/brand.js.map +1 -1
  580. package/lib/util/brandedMap.d.ts.map +1 -1
  581. package/lib/util/brandedMap.js.map +1 -1
  582. package/lib/util/breakable.d.ts.map +1 -1
  583. package/lib/util/breakable.js +2 -1
  584. package/lib/util/breakable.js.map +1 -1
  585. package/lib/util/index.d.ts +2 -2
  586. package/lib/util/index.d.ts.map +1 -1
  587. package/lib/util/index.js +2 -2
  588. package/lib/util/index.js.map +1 -1
  589. package/lib/util/opaque.d.ts.map +1 -1
  590. package/lib/util/opaque.js.map +1 -1
  591. package/lib/util/rangeMap.d.ts +3 -2
  592. package/lib/util/rangeMap.d.ts.map +1 -1
  593. package/lib/util/rangeMap.js +12 -7
  594. package/lib/util/rangeMap.js.map +1 -1
  595. package/lib/util/readSnapshotBlob.d.ts +1 -1
  596. package/lib/util/readSnapshotBlob.d.ts.map +1 -1
  597. package/lib/util/readSnapshotBlob.js.map +1 -1
  598. package/lib/util/typeCheck.d.ts.map +1 -1
  599. package/lib/util/typeCheck.js.map +1 -1
  600. package/lib/util/utils.d.ts +20 -16
  601. package/lib/util/utils.d.ts.map +1 -1
  602. package/lib/util/utils.js +44 -15
  603. package/lib/util/utils.js.map +1 -1
  604. package/package.json +24 -24
  605. package/src/codec/codec.ts +33 -116
  606. package/src/codec/index.ts +2 -3
  607. package/src/codec/versioned/codec.ts +127 -95
  608. package/src/core/index.ts +3 -1
  609. package/src/core/rebase/changeRebaser.ts +3 -2
  610. package/src/core/rebase/index.ts +3 -1
  611. package/src/core/rebase/types.ts +51 -13
  612. package/src/core/schema-stored/formatV1.ts +2 -4
  613. package/src/core/schema-stored/formatV2.ts +9 -7
  614. package/src/core/schema-stored/index.ts +2 -0
  615. package/src/core/schema-stored/schema.ts +4 -1
  616. package/src/core/tree/anchorSet.ts +1 -3
  617. package/src/core/tree/delta.ts +9 -7
  618. package/src/core/tree/deltaUtil.ts +1 -1
  619. package/src/core/tree/detachedFieldIndexCodecs.ts +6 -4
  620. package/src/core/tree/visitDelta.ts +2 -2
  621. package/src/extensibleUnionNode.ts +177 -0
  622. package/src/feature-libraries/changeAtomIdBTree.ts +17 -2
  623. package/src/feature-libraries/chunked-forest/codec/codecs.ts +5 -11
  624. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +5 -6
  625. package/src/feature-libraries/default-schema/index.ts +0 -1
  626. package/src/feature-libraries/forest-summary/codec.ts +15 -9
  627. package/src/feature-libraries/forest-summary/forestSummarizer.ts +15 -3
  628. package/src/feature-libraries/forest-summary/formatCommon.ts +7 -6
  629. package/src/feature-libraries/forest-summary/formatV1.ts +1 -3
  630. package/src/feature-libraries/forest-summary/formatV2.ts +1 -3
  631. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +4 -5
  632. package/src/feature-libraries/index.ts +3 -2
  633. package/src/feature-libraries/modular-schema/defaultRevisionReplacer.ts +57 -31
  634. package/src/feature-libraries/modular-schema/genericFieldKind.ts +1 -1
  635. package/src/feature-libraries/modular-schema/index.ts +4 -1
  636. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +12 -12
  637. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +32 -7
  638. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +54 -33
  639. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +2 -4
  640. package/src/feature-libraries/optional-field/optionalField.ts +1 -1
  641. package/src/feature-libraries/optional-field/requiredField.ts +2 -4
  642. package/src/feature-libraries/schema-index/codec.ts +7 -5
  643. package/src/feature-libraries/schema-index/schemaSummarizer.ts +1 -1
  644. package/src/feature-libraries/sequence-field/invert.ts +2 -2
  645. package/src/feature-libraries/sequence-field/replaceRevisions.ts +17 -10
  646. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +1 -1
  647. package/src/index.ts +14 -9
  648. package/src/packageVersion.ts +1 -1
  649. package/src/shared-tree/independentView.ts +42 -6
  650. package/src/shared-tree/index.ts +2 -0
  651. package/src/shared-tree/schematizingTreeView.ts +63 -18
  652. package/src/shared-tree/sharedTree.ts +19 -37
  653. package/src/shared-tree/sharedTreeChangeCodecs.ts +45 -11
  654. package/src/shared-tree/tree.ts +2 -2
  655. package/src/shared-tree/treeAlpha.ts +1 -1
  656. package/src/shared-tree/treeCheckout.ts +52 -7
  657. package/src/shared-tree-core/editManagerCodecsCommons.ts +7 -7
  658. package/src/shared-tree-core/editManagerCodecsV1toV4.ts +3 -10
  659. package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +3 -10
  660. package/src/shared-tree-core/editManagerSummarizer.ts +1 -1
  661. package/src/shared-tree-core/messageCodecV1ToV4.ts +4 -3
  662. package/src/shared-tree-core/messageCodecs.ts +2 -6
  663. package/src/shared-tree-core/transaction.ts +125 -23
  664. package/src/shared-tree-core/versionedSummarizer.ts +3 -2
  665. package/src/simple-tree/api/index.ts +3 -2
  666. package/src/simple-tree/api/schemaCreationUtilities.ts +35 -5
  667. package/src/simple-tree/api/simpleTreeIndex.ts +1 -1
  668. package/src/simple-tree/api/snapshotCompatibilityChecker.ts +344 -142
  669. package/src/simple-tree/api/transactionTypes.ts +10 -0
  670. package/src/simple-tree/api/tree.ts +89 -7
  671. package/src/simple-tree/api/treeBeta.ts +1 -1
  672. package/src/simple-tree/core/allowedTypes.ts +1 -1
  673. package/src/simple-tree/core/treeNodeSchema.ts +5 -8
  674. package/src/simple-tree/core/unhydratedFlexTree.ts +43 -1
  675. package/src/simple-tree/index.ts +5 -2
  676. package/src/simple-tree/leafNodeSchema.ts +3 -2
  677. package/src/simple-tree/node-kinds/array/arrayNode.ts +99 -19
  678. package/src/simple-tree/node-kinds/array/index.ts +2 -0
  679. package/src/simple-tree/node-kinds/index.ts +2 -0
  680. package/src/simple-tree/node-kinds/object/objectNode.ts +19 -18
  681. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +51 -10
  682. package/src/tableSchema.ts +280 -140
  683. package/src/text/textDomainFormatted.ts +37 -17
  684. package/src/util/bTreeUtils.ts +55 -32
  685. package/src/util/brand.ts +4 -12
  686. package/src/util/brandedMap.ts +2 -6
  687. package/src/util/breakable.ts +3 -2
  688. package/src/util/index.ts +9 -3
  689. package/src/util/opaque.ts +2 -6
  690. package/src/util/rangeMap.ts +20 -11
  691. package/src/util/readSnapshotBlob.ts +3 -3
  692. package/src/util/typeCheck.ts +11 -9
  693. package/src/util/utils.ts +57 -28
  694. package/api-extractor-lint.json +0 -4
  695. package/biome.jsonc +0 -4
@@ -3,28 +3,38 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type {
7
- ChangeAtomId,
8
- ChangesetLocalId,
9
- RevisionReplacer,
10
- RevisionTag,
6
+ import { assert, fail } from "@fluidframework/core-utils/internal";
7
+
8
+ import {
9
+ newChangeAtomIdRangeMap,
10
+ offsetChangeAtomId,
11
+ type ChangeAtomId,
12
+ type ChangeAtomIdRangeMap,
13
+ type ChangesetLocalId,
14
+ type RevisionReplacer,
15
+ type RevisionTag,
11
16
  } from "../../core/index.js";
12
- import { brand, brandConst, newTupleBTree, type Mutable } from "../../util/index.js";
13
17
  import {
14
- getFromChangeAtomIdMap,
15
- setInChangeAtomIdMap,
16
- type ChangeAtomIdBTree,
17
- } from "../changeAtomIdBTree.js";
18
+ brand,
19
+ brandConst,
20
+ newIntegerRangeMap,
21
+ type RangeMap,
22
+ type Mutable,
23
+ } from "../../util/index.js";
24
+
25
+ const offsetChangesetLocalId = (value: ChangesetLocalId, offset: number): ChangesetLocalId =>
26
+ brand(value + offset);
18
27
 
19
28
  export class DefaultRevisionReplacer implements RevisionReplacer {
20
29
  /**
21
30
  * Mapping from (obsolete revision tag, original local id) to the updated local id.
22
31
  */
23
- private readonly updatedLocalIds: ChangeAtomIdBTree<ChangesetLocalId> = newTupleBTree();
32
+ private readonly updatedLocalIds: ChangeAtomIdRangeMap<ChangesetLocalId> =
33
+ newChangeAtomIdRangeMap(offsetChangesetLocalId);
24
34
  /**
25
35
  * The set of local IDs already used in the scope of the updated revision.
26
36
  */
27
- private readonly localIds: Set<ChangesetLocalId> = new Set();
37
+ private readonly localIds: RangeMap<ChangesetLocalId, true> = newIntegerRangeMap();
28
38
  /**
29
39
  * The maximum local ID seen so far in the scope of the updated revision.
30
40
  */
@@ -39,29 +49,45 @@ export class DefaultRevisionReplacer implements RevisionReplacer {
39
49
  return this.obsoleteRevisions.has(revision);
40
50
  }
41
51
 
42
- public getUpdatedAtomId<T extends ChangeAtomId>(id: T): T {
52
+ public getUpdatedAtomId<T extends ChangeAtomId>(id: T, count: number = 1): T {
53
+ assert(count >= 1, 0xcc9 /* Count must be at least 1 */);
43
54
  if (this.isObsolete(id.revision)) {
44
55
  const updated: Mutable<T> = { ...id, revision: this.updatedRevision };
45
- const prior: ChangesetLocalId | undefined = getFromChangeAtomIdMap(
46
- this.updatedLocalIds,
47
- id,
48
- );
49
- if (prior === undefined) {
50
- let localId: ChangesetLocalId;
51
- if (this.localIds.has(id.localId)) {
52
- this.maxSeen = brand(this.maxSeen + 1);
53
- localId = this.maxSeen;
56
+ let continuingOutputId: ChangesetLocalId | undefined;
57
+ let remainderCount = count;
58
+ let remainderStart = id;
59
+ while (remainderCount > 0) {
60
+ const prior = this.updatedLocalIds.getFirst(remainderStart, remainderCount);
61
+ if (prior.value === undefined) {
62
+ const defaultOutputId = continuingOutputId ?? remainderStart.localId;
63
+ const newLocalId =
64
+ this.localIds.getAll(defaultOutputId, prior.length).length > 0
65
+ ? // Some of the IDs in this range have already been used in the scope of the updated revision.
66
+ // We need to allocate new local IDs.
67
+ brand<ChangesetLocalId>(this.maxSeen + 1)
68
+ : // This change atom ID uses a local ID that has not yet been used in the scope of the updated revision.
69
+ // We reuse it as is to minimize the number of IDs that need to be updated.
70
+ defaultOutputId;
71
+
72
+ this.maxSeen = brand(Math.max(this.maxSeen, newLocalId + prior.length - 1));
73
+ this.localIds.set(newLocalId, prior.length, true);
74
+ this.updatedLocalIds.set(remainderStart, prior.length, newLocalId);
75
+ if (continuingOutputId === undefined) {
76
+ updated.localId = newLocalId;
77
+ } else if (newLocalId !== continuingOutputId) {
78
+ fail(0xcca /* TODO: Handle non-contiguous ranges */);
79
+ }
80
+ continuingOutputId = offsetChangesetLocalId(newLocalId, prior.length);
54
81
  } else {
55
- // This change atom ID uses a local ID that has not yet been used in the scope of the updated revision.
56
- // We reuse it as is to minimize the number of IDs that need to be updated.
57
- localId = id.localId;
58
- this.maxSeen = brand(Math.max(this.maxSeen, localId));
59
- this.localIds.add(id.localId);
82
+ if (continuingOutputId === undefined) {
83
+ updated.localId = prior.value;
84
+ } else if (prior.value !== continuingOutputId) {
85
+ fail(0xccb /* TODO: Handle non-contiguous ranges */);
86
+ }
87
+ continuingOutputId = offsetChangesetLocalId(prior.value, prior.length);
60
88
  }
61
- setInChangeAtomIdMap(this.updatedLocalIds, id, localId);
62
- updated.localId = localId;
63
- } else {
64
- updated.localId = prior;
89
+ remainderStart = offsetChangeAtomId(remainderStart, prior.length);
90
+ remainderCount -= prior.length;
65
91
  }
66
92
  return updated;
67
93
  }
@@ -60,7 +60,7 @@ export const genericChangeHandler: FieldChangeHandler<GenericChangeset> = {
60
60
  markList.push({ count: 1, fields: deltaFromChild(nodeChange) });
61
61
  nodeIndex += 1;
62
62
  }
63
- return { local: markList };
63
+ return { local: { marks: markList } };
64
64
  },
65
65
  relevantRemovedRoots,
66
66
  isEmpty: (change: GenericChangeset): boolean => change.length === 0,
@@ -74,7 +74,10 @@ export {
74
74
  relevantRemovedRoots,
75
75
  updateRefreshers,
76
76
  } from "./modularChangeFamily.js";
77
- export { makeModularChangeCodecFamily } from "./modularChangeCodecs.js";
77
+ export {
78
+ ModularChangeFormatVersion,
79
+ makeModularChangeCodecFamily,
80
+ } from "./modularChangeCodecs.js";
78
81
  export type {
79
82
  FieldKindConfiguration,
80
83
  FieldKindConfigurationEntry,
@@ -9,7 +9,6 @@ import type { TAnySchema } from "@sinclair/typebox";
9
9
  import {
10
10
  type ICodecOptions,
11
11
  type IJsonCodec,
12
- type IMultiFormatCodec,
13
12
  type SchemaValidationFunction,
14
13
  extractJsonValidator,
15
14
  withSchemaValidation,
@@ -30,9 +29,8 @@ import {
30
29
  type Mutable,
31
30
  brand,
32
31
  idAllocatorFromMaxId,
33
- newTupleBTree,
34
32
  } from "../../util/index.js";
35
- import type { ChangeAtomIdBTree } from "../changeAtomIdBTree.js";
33
+ import { newChangeAtomIdBTree, type ChangeAtomIdBTree } from "../changeAtomIdBTree.js";
36
34
  import {
37
35
  type FieldBatchCodec,
38
36
  type TreeChunk,
@@ -73,7 +71,7 @@ type ModularChangeCodec = IJsonCodec<
73
71
  ChangeEncodingContext
74
72
  >;
75
73
 
76
- type FieldCodec = IMultiFormatCodec<
74
+ type FieldCodec = IJsonCodec<
77
75
  FieldChangeset,
78
76
  JsonCompatibleReadOnly,
79
77
  JsonCompatibleReadOnly,
@@ -133,7 +131,7 @@ export function encodeFieldChangesForJsonI(
133
131
  fieldChange.fieldKind,
134
132
  fieldChangesetCodecs,
135
133
  );
136
- const encodedChange = codec.json.encode(fieldChange.change, context);
134
+ const encodedChange = codec.encode(fieldChange.change, context);
137
135
  if (compiledSchema !== undefined && !compiledSchema.check(encodedChange)) {
138
136
  fail(0xb1f /* Encoded change didn't pass schema validation. */);
139
137
  }
@@ -226,7 +224,7 @@ export function decodeFieldChangesFromJson(
226
224
  },
227
225
  };
228
226
 
229
- const fieldChangeset = codec.json.decode(field.change, fieldContext);
227
+ const fieldChangeset = codec.decode(field.change, fieldContext);
230
228
 
231
229
  const crossFieldKeys = getChangeHandler(fieldKinds, field.fieldKind).getCrossFieldKeys(
232
230
  fieldChangeset,
@@ -364,7 +362,7 @@ export function decodeDetachedNodes(
364
362
  });
365
363
  };
366
364
 
367
- const map: ModularChangeset["builds"] = newTupleBTree();
365
+ const map: ModularChangeset["builds"] = newChangeAtomIdBTree();
368
366
  // eslint-disable-next-line unicorn/no-array-for-each -- Codec internals: minimizing changes to serialization logic
369
367
  encoded.builds.forEach((build) => {
370
368
  // EncodedRevisionTag cannot be an array so this ensures that we can isolate the tuple
@@ -396,7 +394,9 @@ export function encodeRevisionInfos(
396
394
  ): EncodedRevisionInfo[] | undefined {
397
395
  if (context.revision !== undefined) {
398
396
  assert(
397
+ // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- Using optional chaining here would change behavior: `revisions[0]?.rollbackOf === undefined` is true when revisions[0] is undefined, but this check requires revisions[0] to be defined. As currently written, such a change would be safe because context.revision is included in the check and from a couple lines above is confirmed not undefined. But this more verbose form is clearer.
399
398
  revisions.length === 1 &&
399
+ // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
400
400
  revisions[0] !== undefined &&
401
401
  revisions[0].revision === context.revision &&
402
402
  revisions[0].rollbackOf === undefined,
@@ -525,9 +525,9 @@ export function decodeChange(
525
525
  ): Mutable<ModularChangeset> {
526
526
  const decoded: Mutable<ModularChangeset> = {
527
527
  fieldChanges: new Map(),
528
- nodeChanges: newTupleBTree(),
529
- nodeToParent: newTupleBTree(),
530
- nodeAliases: newTupleBTree(),
528
+ nodeChanges: newChangeAtomIdBTree(),
529
+ nodeToParent: newChangeAtomIdBTree(),
530
+ nodeAliases: newChangeAtomIdBTree(),
531
531
  crossFieldKeys: newCrossFieldKeyTable(),
532
532
  };
533
533
 
@@ -596,8 +596,8 @@ export function getFieldChangesetCodecs(
596
596
  const codec = kind.changeHandler.codecsFactory(revisionTagCodec).resolve(formatVersion);
597
597
  return {
598
598
  codec,
599
- compiledSchema: codec.json.encodedSchema
600
- ? extractJsonValidator(codecOptions.jsonValidator).compile(codec.json.encodedSchema)
599
+ compiledSchema: codec.encodedSchema
600
+ ? extractJsonValidator(codecOptions.jsonValidator).compile(codec.encodedSchema)
601
601
  : undefined,
602
602
  };
603
603
  };
@@ -16,6 +16,7 @@ import type {
16
16
  EncodedRevisionTag,
17
17
  RevisionTag,
18
18
  } from "../../core/index.js";
19
+ import { strictEnum, type Values } from "../../util/index.js";
19
20
  import type { FieldBatchCodec } from "../chunked-forest/index.js";
20
21
  import { TreeCompressionStrategy } from "../treeCompressionUtils.js";
21
22
 
@@ -25,7 +26,7 @@ import { makeModularChangeCodecV2 } from "./modularChangeCodecV2.js";
25
26
  import type { ModularChangeset } from "./modularChangeTypes.js";
26
27
 
27
28
  export function makeModularChangeCodecFamily(
28
- fieldKindConfigurations: ReadonlyMap<number, FieldKindConfiguration>,
29
+ fieldKindConfigurations: ReadonlyMap<ModularChangeFormatVersion, FieldKindConfiguration>,
29
30
  revisionTagCodec: IJsonCodec<
30
31
  RevisionTag,
31
32
  EncodedRevisionTag,
@@ -39,11 +40,8 @@ export function makeModularChangeCodecFamily(
39
40
  return makeCodecFamily(
40
41
  Array.from(fieldKindConfigurations.entries(), ([version, fieldKinds]) => {
41
42
  switch (version) {
42
- case 1:
43
- case 2:
44
- case 3:
45
- case 4:
46
- case 6: {
43
+ case ModularChangeFormatVersion.v3:
44
+ case ModularChangeFormatVersion.v4: {
47
45
  return [
48
46
  version,
49
47
  makeModularChangeCodecV1(
@@ -55,7 +53,7 @@ export function makeModularChangeCodecFamily(
55
53
  ),
56
54
  ];
57
55
  }
58
- case 5: {
56
+ case ModularChangeFormatVersion.v5: {
59
57
  return [
60
58
  version,
61
59
  makeModularChangeCodecV2(
@@ -74,3 +72,30 @@ export function makeModularChangeCodecFamily(
74
72
  }),
75
73
  );
76
74
  }
75
+
76
+ /**
77
+ * The format version for `ModularChangeset`.
78
+ */
79
+ export const ModularChangeFormatVersion = strictEnum("ModularChangeFormatVersion", {
80
+ /**
81
+ * Introduced prior to 2.0 and used beyond.
82
+ * Reading capability must be maintained for backwards compatibility.
83
+ * Writing capability needs to be maintained so long as {@link lowestMinVersionForCollab} is less than 2.2.0.
84
+ */
85
+ v3: 3,
86
+ /**
87
+ * Introduced in 2.2.0.
88
+ * Was inadvertently made usable for writing in 2.43.0 (through configuredSharedTree) and remains available.
89
+ * Reading capability must be maintained for backwards compatibility.
90
+ * Writing capability could be dropped in favor of {@link ModularChangeFormatVersion.v3},
91
+ * but doing so would make the pattern of writable versions more complex and gain little
92
+ * because the logic for this format is shared with {@link ModularChangeFormatVersion.v3}.
93
+ */
94
+ v4: 4,
95
+ /**
96
+ * Introduced and made available for writing in 2.80.0
97
+ * Adds support for "no change" constraints.
98
+ */
99
+ v5: 5,
100
+ });
101
+ export type ModularChangeFormatVersion = Values<typeof ModularChangeFormatVersion>;
@@ -46,6 +46,8 @@ import {
46
46
  type DeltaDetachedNodeRename,
47
47
  mapTaggedChange,
48
48
  type RevisionReplacer,
49
+ comparePartialRevisions,
50
+ comparePartialChangesetLocalIds,
49
51
  } from "../../core/index.js";
50
52
  import {
51
53
  type IdAllocationState,
@@ -56,14 +58,17 @@ import {
56
58
  idAllocatorFromState,
57
59
  type RangeQueryResult,
58
60
  getOrCreate,
59
- newTupleBTree,
60
61
  mergeTupleBTrees,
61
62
  type TupleBTree,
62
63
  RangeMap,
63
64
  balancedReduce,
65
+ newTupleBTree,
66
+ compareStrings,
67
+ createTupleComparator,
64
68
  } from "../../util/index.js";
65
69
  import {
66
70
  getFromChangeAtomIdMap,
71
+ newChangeAtomIdBTree,
67
72
  setInChangeAtomIdMap,
68
73
  type ChangeAtomIdBTree,
69
74
  } from "../changeAtomIdBTree.js";
@@ -732,7 +737,7 @@ export class ModularChangeFamily
732
737
  revisionForInvert,
733
738
  );
734
739
 
735
- const invertedNodes: ChangeAtomIdBTree<NodeChangeset> = newTupleBTree();
740
+ const invertedNodes = newChangeAtomIdBTree<NodeChangeset>();
736
741
  change.change.nodeChanges.forEachPair(([revision, localId], nodeChangeset) => {
737
742
  invertedNodes.set(
738
743
  [revision, localId],
@@ -897,12 +902,12 @@ export class ModularChangeFamily
897
902
  newChange: change,
898
903
  baseChange: over.change,
899
904
  baseFieldToContext: new Map(),
900
- baseToRebasedNodeId: newTupleBTree(),
905
+ baseToRebasedNodeId: newChangeAtomIdBTree(),
901
906
  rebasedFields: new Set(),
902
907
  rebasedNodeToParent: brand(change.nodeToParent.clone()),
903
908
  rebasedCrossFieldKeys: change.crossFieldKeys.clone(),
904
909
  nodeIdPairs: [],
905
- affectedBaseFields: newTupleBTree(),
910
+ affectedBaseFields: newFieldIdKeyBTree(),
906
911
  fieldsWithUnattachedChild: new Set(),
907
912
  };
908
913
 
@@ -1365,7 +1370,7 @@ export class ModularChangeFamily
1365
1370
  const change = nodeChangeFromId(crossFieldTable.newChange.nodeChanges, newId);
1366
1371
  const over = nodeChangeFromId(crossFieldTable.baseChange.nodeChanges, baseId);
1367
1372
 
1368
- const baseMap: FieldChangeMap = over?.fieldChanges ?? new Map();
1373
+ const baseMap: FieldChangeMap = over?.fieldChanges ?? new Map<FieldKey, FieldChange>();
1369
1374
 
1370
1375
  const fieldChanges =
1371
1376
  change.fieldChanges !== undefined && over.fieldChanges !== undefined
@@ -1522,8 +1527,11 @@ export class ModularChangeFamily
1522
1527
  }
1523
1528
 
1524
1529
  public getRevisions(change: ModularChangeset): Set<RevisionTag | undefined> {
1530
+ if (change.revisions === undefined || change.revisions.length === 0) {
1531
+ return new Set([undefined]);
1532
+ }
1525
1533
  const aggregated: Set<RevisionTag | undefined> = new Set();
1526
- for (const revInfo of change.revisions ?? [{ revision: undefined }]) {
1534
+ for (const revInfo of change.revisions) {
1527
1535
  aggregated.add(revInfo.revision);
1528
1536
  }
1529
1537
  return aggregated;
@@ -1551,7 +1559,7 @@ export class ModularChangeFamily
1551
1559
  nodeToParent: updatedNodeToParent,
1552
1560
 
1553
1561
  // We've updated all references to old node IDs, so we no longer need an alias table.
1554
- nodeAliases: newTupleBTree(),
1562
+ nodeAliases: newChangeAtomIdBTree(),
1555
1563
  crossFieldKeys: replaceCrossFieldKeyTableRevisions(
1556
1564
  change.crossFieldKeys,
1557
1565
  replacer,
@@ -1763,7 +1771,7 @@ function replaceCrossFieldKeyTableRevisions(
1763
1771
  const updated: CrossFieldKeyTable = newCrossFieldKeyTable();
1764
1772
  for (const entry of table.entries()) {
1765
1773
  const key = entry.start;
1766
- const updatedKey: CrossFieldKey = replacer.getUpdatedAtomId(key);
1774
+ const updatedKey: CrossFieldKey = replacer.getUpdatedAtomId(key, entry.length);
1767
1775
 
1768
1776
  const field = entry.value;
1769
1777
  const normalizedFieldId = normalizeFieldId(field, nodeAliases);
@@ -1788,7 +1796,7 @@ function replaceIdMapRevisions<T>(
1788
1796
  replacer: RevisionReplacer,
1789
1797
  valueMapper: (value: T) => T = (value) => value,
1790
1798
  ): ChangeAtomIdBTree<T> {
1791
- const updated: ChangeAtomIdBTree<T> = newTupleBTree();
1799
+ const updated = newChangeAtomIdBTree<T>();
1792
1800
  for (const [[revision, localId], value] of map.entries()) {
1793
1801
  const newAtom = replacer.getUpdatedAtomId({ revision, localId });
1794
1802
  updated.set([newAtom.revision, newAtom.localId], valueMapper(value));
@@ -1819,20 +1827,23 @@ function composeBuildsDestroysAndRefreshers(
1819
1827
  // care to support at this time.
1820
1828
  const allBuilds: ChangeAtomIdBTree<TreeChunk> = brand(
1821
1829
  mergeTupleBTrees(
1822
- change1.builds ?? newTupleBTree(),
1823
- change2.builds ?? newTupleBTree(),
1830
+ change1.builds ?? newChangeAtomIdBTree(),
1831
+ change2.builds ?? newChangeAtomIdBTree(),
1824
1832
  true,
1825
1833
  ),
1826
1834
  );
1827
1835
 
1828
1836
  const allDestroys: ChangeAtomIdBTree<number> = brand(
1829
- mergeTupleBTrees(change1.destroys ?? newTupleBTree(), change2.destroys ?? newTupleBTree()),
1837
+ mergeTupleBTrees(
1838
+ change1.destroys ?? newChangeAtomIdBTree(),
1839
+ change2.destroys ?? newChangeAtomIdBTree(),
1840
+ ),
1830
1841
  );
1831
1842
 
1832
1843
  const allRefreshers: ChangeAtomIdBTree<TreeChunk> = brand(
1833
1844
  mergeTupleBTrees(
1834
- change1.refreshers ?? newTupleBTree(),
1835
- change2.refreshers ?? newTupleBTree(),
1845
+ change1.refreshers ?? newChangeAtomIdBTree(),
1846
+ change2.refreshers ?? newChangeAtomIdBTree(),
1836
1847
  true,
1837
1848
  ),
1838
1849
  );
@@ -1942,7 +1953,7 @@ export function updateRefreshers(
1942
1953
  removedRoots: Iterable<DeltaDetachedNodeId>,
1943
1954
  requireRefreshers: boolean = true,
1944
1955
  ): ModularChangeset {
1945
- const refreshers: ChangeAtomIdBTree<TreeChunk> = newTupleBTree();
1956
+ const refreshers = newChangeAtomIdBTree<TreeChunk>();
1946
1957
  const chunkLengths: Map<RevisionTag | undefined, BTree<number, number>> = new Map();
1947
1958
 
1948
1959
  if (change.builds !== undefined) {
@@ -2103,7 +2114,7 @@ function intoDeltaImpl(
2103
2114
  return deltaFromNodeChange(nodeChange, nodeChanges, fieldKinds, global, rename);
2104
2115
  },
2105
2116
  );
2106
- if (fieldChanges !== undefined && fieldChanges.length > 0) {
2117
+ if (fieldChanges !== undefined && fieldChanges.marks.length > 0) {
2107
2118
  delta.set(field, fieldChanges);
2108
2119
  }
2109
2120
  for (const c of fieldGlobal ?? []) {
@@ -2235,7 +2246,7 @@ interface RebaseTable extends CrossFieldTable<FieldChange> {
2235
2246
  readonly fieldsWithUnattachedChild: Set<FieldChange>;
2236
2247
  }
2237
2248
 
2238
- type FieldIdKey = [RevisionTag | undefined, ChangesetLocalId | undefined, FieldKey];
2249
+ type FieldIdKey = readonly [RevisionTag | undefined, ChangesetLocalId | undefined, FieldKey];
2239
2250
 
2240
2251
  interface RebaseFieldContext {
2241
2252
  baseChange: FieldChange;
@@ -2261,13 +2272,13 @@ function newComposeTable(
2261
2272
  newChange,
2262
2273
  fieldToContext: new Map(),
2263
2274
  newFieldToBaseField: new Map(),
2264
- newToBaseNodeId: newTupleBTree(),
2275
+ newToBaseNodeId: newChangeAtomIdBTree(),
2265
2276
  composedNodes: new Set(),
2266
2277
  composedNodeToParent,
2267
2278
  pendingCompositions: {
2268
2279
  nodeIdsToCompose: [],
2269
- affectedBaseFields: newTupleBTree(),
2270
- affectedNewFields: newTupleBTree(),
2280
+ affectedBaseFields: newFieldIdKeyBTree(),
2281
+ affectedNewFields: newFieldIdKeyBTree(),
2271
2282
  },
2272
2283
  };
2273
2284
  }
@@ -2625,10 +2636,10 @@ function makeModularChangeset(props?: {
2625
2636
  }): ModularChangeset {
2626
2637
  const p = props ?? { maxId: -1 };
2627
2638
  const changeset: Mutable<ModularChangeset> = {
2628
- fieldChanges: p.fieldChanges ?? new Map(),
2629
- nodeChanges: p.nodeChanges ?? newTupleBTree(),
2630
- nodeToParent: p.nodeToParent ?? newTupleBTree(),
2631
- nodeAliases: p.nodeAliases ?? newTupleBTree(),
2639
+ fieldChanges: p.fieldChanges ?? new Map<FieldKey, FieldChange>(),
2640
+ nodeChanges: p.nodeChanges ?? newChangeAtomIdBTree(),
2641
+ nodeToParent: p.nodeToParent ?? newChangeAtomIdBTree(),
2642
+ nodeAliases: p.nodeAliases ?? newChangeAtomIdBTree(),
2632
2643
  crossFieldKeys: p.crossFieldKeys ?? newCrossFieldKeyTable(),
2633
2644
  };
2634
2645
 
@@ -2717,7 +2728,7 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2717
2728
  // This content will be added to a GlobalEditDescription whose lifetime exceeds the scope of this function.
2718
2729
  content.referenceAdded();
2719
2730
 
2720
- const builds: ChangeAtomIdBTree<TreeChunk> = newTupleBTree();
2731
+ const builds = newChangeAtomIdBTree<TreeChunk>();
2721
2732
  builds.set([revision, firstId], content);
2722
2733
 
2723
2734
  return {
@@ -2747,8 +2758,8 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2747
2758
  const modularChange = buildModularChangesetFromField({
2748
2759
  path: field,
2749
2760
  fieldChange: { fieldKind, change },
2750
- nodeChanges: newTupleBTree(),
2751
- nodeToParent: newTupleBTree(),
2761
+ nodeChanges: newChangeAtomIdBTree(),
2762
+ nodeToParent: newChangeAtomIdBTree(),
2752
2763
  crossFieldKeys: newCrossFieldKeyTable(),
2753
2764
  idAllocator: this.idAllocator,
2754
2765
  localCrossFieldKeys,
@@ -2779,8 +2790,8 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2779
2790
  fieldKind: change.fieldKind,
2780
2791
  change: change.change,
2781
2792
  },
2782
- nodeChanges: newTupleBTree(),
2783
- nodeToParent: newTupleBTree(),
2793
+ nodeChanges: newChangeAtomIdBTree(),
2794
+ nodeToParent: newChangeAtomIdBTree(),
2784
2795
  crossFieldKeys: newCrossFieldKeyTable(),
2785
2796
  idAllocator: this.idAllocator,
2786
2797
  localCrossFieldKeys: getChangeHandler(
@@ -2818,8 +2829,8 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2818
2829
  buildModularChangesetFromNode({
2819
2830
  path,
2820
2831
  nodeChange,
2821
- nodeChanges: newTupleBTree(),
2822
- nodeToParent: newTupleBTree(),
2832
+ nodeChanges: newChangeAtomIdBTree(),
2833
+ nodeToParent: newChangeAtomIdBTree(),
2823
2834
  crossFieldKeys: newCrossFieldKeyTable(),
2824
2835
  idAllocator: this.idAllocator,
2825
2836
  revision,
@@ -2839,8 +2850,8 @@ export class ModularEditBuilder extends EditBuilder<ModularChangeset> {
2839
2850
  buildModularChangesetFromNode({
2840
2851
  path,
2841
2852
  nodeChange,
2842
- nodeChanges: newTupleBTree(),
2843
- nodeToParent: newTupleBTree(),
2853
+ nodeChanges: newChangeAtomIdBTree(),
2854
+ nodeToParent: newChangeAtomIdBTree(),
2844
2855
  crossFieldKeys: newCrossFieldKeyTable(),
2845
2856
  idAllocator: this.idAllocator,
2846
2857
  revision,
@@ -3197,3 +3208,13 @@ interface ModularChangesetContent {
3197
3208
  function areEqualFieldIds(a: FieldId, b: FieldId): boolean {
3198
3209
  return areEqualChangeAtomIdOpts(a.nodeId, b.nodeId) && a.field === b.field;
3199
3210
  }
3211
+
3212
+ function newFieldIdKeyBTree<V>(): TupleBTree<FieldIdKey, V> {
3213
+ return newTupleBTree(compareFieldIdKeys);
3214
+ }
3215
+
3216
+ const compareFieldIdKeys = createTupleComparator([
3217
+ comparePartialRevisions,
3218
+ comparePartialChangesetLocalIds,
3219
+ compareStrings<FieldKey>,
3220
+ ]);
@@ -11,7 +11,6 @@ import {
11
11
  JsonCompatibleReadOnlySchema,
12
12
  brandedNumberType,
13
13
  } from "../../util/index.js";
14
- import { EncodedFieldBatch } from "../chunked-forest/index.js";
15
14
 
16
15
  const noAdditionalProps: ObjectOptions = { additionalProperties: false };
17
16
 
@@ -115,10 +114,9 @@ export const EncodedBuilds = Type.Object(
115
114
  {
116
115
  builds: EncodedBuildsArray,
117
116
  /**
118
- * Fields indexed by the EncodedTreeIndexes above.
119
- * TODO: Strongly typing this here may result in redundant schema validation of this data.
117
+ * FieldBatch codec encoded data indexed by the EncodedTreeIndexes above.
120
118
  */
121
- trees: EncodedFieldBatch,
119
+ trees: JsonCompatibleReadOnlySchema,
122
120
  },
123
121
  noAdditionalProps,
124
122
  );
@@ -710,7 +710,7 @@ export function optionalFieldIntoDelta(
710
710
  }
711
711
 
712
712
  if (!markIsANoop) {
713
- delta.local = [mark];
713
+ delta.local = { marks: [mark] };
714
714
  }
715
715
 
716
716
  return delta;
@@ -36,10 +36,8 @@ export interface RequiredFieldEditor extends FieldEditor<OptionalChangeset> {
36
36
 
37
37
  export const requiredFieldEditor: RequiredFieldEditor = {
38
38
  ...optionalFieldEditor,
39
- set: (ids: {
40
- fill: ChangeAtomId;
41
- detach: ChangeAtomId;
42
- }): OptionalChangeset => optionalFieldEditor.set(false, ids),
39
+ set: (ids: { fill: ChangeAtomId; detach: ChangeAtomId }): OptionalChangeset =>
40
+ optionalFieldEditor.set(false, ids),
43
41
  };
44
42
 
45
43
  export const requiredFieldChangeHandler: FieldChangeHandler<
@@ -80,7 +80,7 @@ function encodeNodeSchema<TFormat>(
80
80
  repo: TreeStoredSchema,
81
81
  encodeValue: (schema: TreeNodeStoredSchema) => TFormat,
82
82
  ): Record<string, TFormat> {
83
- const nodeSchema: Record<string, TFormat> = Object.create(null);
83
+ const nodeSchema: Record<string, TFormat> = Object.create(null) as Record<string, TFormat>;
84
84
  for (const name of [...repo.nodeSchema.keys()].sort()) {
85
85
  const schema = repo.nodeSchema.get(name) ?? fail(0xb28 /* missing schema */);
86
86
  Object.defineProperty(nodeSchema, name, {
@@ -125,8 +125,9 @@ function decodeV2(f: FormatV2): TreeStoredSchema {
125
125
  /**
126
126
  * Creates a codec which performs synchronous monolithic encoding of schema content.
127
127
  */
128
- export const schemaCodecBuilder = ClientVersionDispatchingCodecBuilder.build("Schema", {
129
- [lowestMinVersionForCollab]: {
128
+ export const schemaCodecBuilder = ClientVersionDispatchingCodecBuilder.build("Schema", [
129
+ {
130
+ minVersionForCollab: lowestMinVersionForCollab,
130
131
  formatVersion: SchemaFormatVersion.v1,
131
132
  codec: {
132
133
  encode: (data: TreeStoredSchema) => encodeRepoV1(data),
@@ -134,7 +135,8 @@ export const schemaCodecBuilder = ClientVersionDispatchingCodecBuilder.build("Sc
134
135
  schema: FormatV1,
135
136
  },
136
137
  },
137
- [FluidClientVersion.v2_43]: {
138
+ {
139
+ minVersionForCollab: FluidClientVersion.v2_43,
138
140
  formatVersion: SchemaFormatVersion.v2,
139
141
  codec: {
140
142
  encode: (data: TreeStoredSchema) => encodeRepoV2(data),
@@ -142,4 +144,4 @@ export const schemaCodecBuilder = ClientVersionDispatchingCodecBuilder.build("Sc
142
144
  schema: FormatV2,
143
145
  },
144
146
  },
145
- });
147
+ ]);
@@ -130,7 +130,7 @@ export class SchemaSummarizer
130
130
  0x3da /* there should not already be stored schema when loading stored schema */,
131
131
  );
132
132
 
133
- const schemaString = bufferToString(schemaBuffer, "utf-8");
133
+ const schemaString = bufferToString(schemaBuffer, "utf8");
134
134
  // Currently no Fluid handles are used, so just use JSON.parse.
135
135
  const decoded = this.codec.decode(JSON.parse(schemaString));
136
136
  this.schema.apply(decoded);
@@ -189,7 +189,7 @@ function invertMark(
189
189
  if (mark.finalEndpoint !== undefined) {
190
190
  moveIn.finalEndpoint = {
191
191
  localId: mark.finalEndpoint.localId,
192
- revision: mark.revision,
192
+ revision,
193
193
  };
194
194
  }
195
195
  let effect: MarkEffect = moveIn;
@@ -228,7 +228,7 @@ function invertMark(
228
228
  if (mark.finalEndpoint) {
229
229
  invertedMark.finalEndpoint = {
230
230
  localId: mark.finalEndpoint.localId,
231
- revision: mark.revision,
231
+ revision,
232
232
  };
233
233
  }
234
234
  return applyMovedChanges(invertedMark, mark.revision, crossFieldManager);